单线变双线源码,求增加封闭端点
以下是无痕前辈在本坛的一个单线变双线的源码:(defun c:x2 (/ ss vss dist)(vl-load-com)
(princ "\n单线变双v.1.1-------by 无痕.2004.2\n选择要变双的曲线:")
(setq ss (ssget'((0 . "Arc,Circle,Ellipse,Line,LwPolyline,Polyline,Spline,XLine")) )
vss (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))
dist (getdist "\n输入偏移距离:"))
(vlax-for obj vss (vla-offset obj dist)(vla-offset obj (- 0 dist))(vla-erase obj));删除原线
)演示如下:
哪位前辈能帮我改成:
增加一个选项“是否封闭”,实现下图的效果:
另外,有没有逆向操作的程序呢,
就是在小于等于某个距离下,把双线变成单线??
期待前辈们指教!! 本帖最后由 kwok 于 2016-1-12 13:41 编辑
简单加了一下.;;;;;;;单线双偏并封口
(defun c:tt (/ ss dist en e1 e2 i p1 p2 p3 p4 yn lay clay olay)
(vl-load-com)
(princ "\n单线变双v.1.1-------by 无痕.2004.2\n选择要变双的曲线:")
(setq ss (ssget'((0 . "Arc,Circle,Ellipse,Line,LwPolyline,Polyline,Spline")) )
dist (getdist "\n输入偏移距离:"))
(initget "Y N ")
(setq yn (getkword "\n[不封口<N>/封口<Y>]<N>:"))
(if (= yn "")(setq yn "N"))
(setq i 0)
(repeat (sslength ss)
(setq obj (vlax-ename->vla-object(ssname ss i)) i (1+ i))
(vla-offset obj dist) (setq e1 (entlast))
(vla-offset obj (- 0 dist)) (setq e2 (entlast))
(vla-erase obj);删除原线
(if (= yn "Y")(progn
(setq lay (entgete1)
clay (cdr (assoc 8lay))
olay (getvar "clayer"))
(setvar "clayer" clay)
(setq p1(vlax-curve-getstartpoint e1)
p2(vlax-curve-getendpoint e1)
p3(vlax-curve-getstartpoint e2)
p4(vlax-curve-getendpoint e2))
(command ".pline" "non" p1 "non" p3 """.pline" "non" p2 "non" p4 "")
(setvar "clayer" olay)
))
)
(princ)) 热心的朋友帮助下我 kwok 发表于 2016-1-11 14:08 static/image/common/back.gif
简单加了一下.
感谢你的回复,加得很好.不过你用的是COMMAND,导致最后生成的对象的属性和原来SSGET的不一样,最后生成的对象是当前层的属性. 能把原来线不删变为中心线更好 ;; 伪源码,用不上别下载
言社长 发表于 2016-1-11 15:03 static/image/common/back.gif
感谢你的回复,加得很好.不过你用的是COMMAND,导致最后生成的对象的属性和原来SSGET的不一样,最后生成的对 ...
3楼已更新. bai2000 发表于 2016-1-11 15:46 static/image/common/back.gif
能把原来线不删变为中心线更好
简单, (vla-erase obj);删除原线----改为 ;;(vla-erase obj);就不删除原线 回楼上:怎么改为中心线呢? 这个强大呀
页:
[1]
2