明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1411|回复: 7

修改线宽

[复制链接]
发表于 2024-5-5 08:13:24 | 显示全部楼层 |阅读模式
50明经币
各位大侠,现有一条多段线,顶点有上千个,我需要把线宽改为中间点那个位置线宽度改为100或者是我需要自定义设置的一个线宽,起点和终点都为0,中间点和起始、终点之间的线宽按照顶点个数平分100的线宽,依次变窄,最好能用lisp。比如有1200个顶点,其中0号点处线宽为0,到600处为100,1到599号点依次变宽,到600时宽度是100,601到1199又依次变窄,直到0号点时候为0。是不是有点复杂啊
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

(defun c:xgxk() (vl-load-com) (command "_undo" "be") (if (setq ssa (ssget ":S" '((0 . "lwpolyline")))) (progn (setq ent (ssname ssa 0)) (setq obj (vlax-ename->vla-object ent)) (setq dxf (entget ent)) (setq n (cdr (assoc 90 dxf))) (setq m1 (fix (/ n 2))) (setq m2 (- n m1)) (if (= (setq ...
发表于 2024-5-5 08:13:25 | 显示全部楼层
本帖最后由 yshf 于 2024-5-5 19:03 编辑

(defun c:xgxk()
    (vl-load-com)
    (command "_undo" "be")
    (if (setq ssa (ssget ":S" '((0 . "lwpolyline"))))
        (progn
            (setq ent (ssname ssa 0))
            (setq obj (vlax-ename->vla-object ent))
            (setq dxf (entget ent))
            (setq n (cdr (assoc 90 dxf)))
            (setq m1 (fix (/ n 2)))
            (setq m2 (- n m1))
            (if (= (setq zjkd (getreal (strcat "\n请输入中间点(第" (itoa m1) "个点)的宽度<100>="))) nil)
                (setq zjkd 100.0)
            )
            (setq i 1)
            (repeat n
                (setq j (1- i))
                (if (< i m1)
                    (progn
                        (setq dk (/ zjkd m1))
                        (setq k1 (* (1- i) dk))
                        (setq k2 (+ k1 dk))
                    )
                    (progn
                        (setq dk (/ (- zjkd) m2))
                        (setq k1 (+ zjkd (* (- i m1) dk)))
                        (setq k2 (+ k1 dk))
                    )
                )
                (vla-SetWidth obj j k1 k2)
                (setq i (1+ i))
            )
             (vla-update obj)
        )
    )
    (command "_undo" "e")
    (princ)
)
回复

使用道具 举报

 楼主| 发表于 2024-5-5 16:10:41 | 显示全部楼层
把这句去掉(setq j (1- i)), (vla-SetWidth obj j k1 k2)这个改成 (vla-SetWidth obj i k1 k2)就刚刚好
回复

使用道具 举报

 楼主| 发表于 2024-5-5 16:14:09 | 显示全部楼层
yshf 发表于 2024-5-5 10:35
(defun c:xgxk()
    (vl-load-com)
    (command "_undo" "be")

老大明经币到账没有啊,我不知道怎么操作已解决
回复

使用道具 举报

发表于 2024-5-5 19:05:43 | 显示全部楼层
本帖最后由 yshf 于 2024-5-5 19:07 编辑

(setq  (/ (- zjkd) m2))应为(setq dk (/ (- zjkd) m2))
把这句去掉(setq j (1- i)), (vla-SetWidth obj j k1 k2)这个改成 (vla-SetWidth obj i k1 k2)就刚刚好

会出现错误的,而且达不到要求。
回复

使用道具 举报

发表于 2024-7-2 11:09:37 | 显示全部楼层
解决了没有?解决了请设最佳答案
回复

使用道具 举报

 楼主| 发表于 2024-7-9 16:21:13 | 显示全部楼层
yshf 发表于 2024-5-5 08:13
(defun c:xgxk()
    (vl-load-com)
    (command "_undo" "be")

中间有个点始终会有一个错台,暂时还没找到哪个地方可以改进,老大有时间再琢磨下,我感觉是差了一个判断。
回复

使用道具 举报

发表于 2024-8-4 12:07:19 | 显示全部楼层
正好需要                        
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-23 10:27 , Processed in 0.160059 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表