修改线宽
各位大侠,现有一条多段线,顶点有上千个,我需要把线宽改为中间点那个位置线宽度改为100或者是我需要自定义设置的一个线宽,起点和终点都为0,中间点和起始、终点之间的线宽按照顶点个数平分100的线宽,依次变窄,最好能用lisp。比如有1200个顶点,其中0号点处线宽为0,到600处为100,1到599号点依次变宽,到600时宽度是100,601到1199又依次变窄,直到0号点时候为0。是不是有点复杂啊本帖最后由 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)
) 把这句去掉(setq j (1- i)), (vla-SetWidth obj j k1 k2)这个改成 (vla-SetWidth obj i k1 k2)就刚刚好 yshf 发表于 2024-5-5 10:35
(defun c:xgxk()
(vl-load-com)
(command "_undo" "be")
老大明经币到账没有啊,我不知道怎么操作已解决 本帖最后由 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)就刚刚好
会出现错误的,而且达不到要求。 解决了没有?解决了请设最佳答案 yshf 发表于 2024-5-5 08:13
(defun c:xgxk()
(vl-load-com)
(command "_undo" "be")
中间有个点始终会有一个错台,暂时还没找到哪个地方可以改进,老大有时间再琢磨下,我感觉是差了一个判断。 正好需要
页:
[1]