言社长 发表于 2016-1-10 15:29:34

单线变双线源码,求增加封闭端点

以下是无痕前辈在本坛的一个单线变双线的源码:(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-10 15:29:35

本帖最后由 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))

言社长 发表于 2016-1-11 10:11:44

热心的朋友帮助下我

言社长 发表于 2016-1-11 15:03:20

kwok 发表于 2016-1-11 14:08 static/image/common/back.gif
简单加了一下.

感谢你的回复,加得很好.不过你用的是COMMAND,导致最后生成的对象的属性和原来SSGET的不一样,最后生成的对象是当前层的属性.

bai2000 发表于 2016-1-11 15:46:07

能把原来线不删变为中心线更好

xyp1964 发表于 2016-1-11 19:59:23

;; 伪源码,用不上别下载

kwok 发表于 2016-1-12 13:44:13

言社长 发表于 2016-1-11 15:03 static/image/common/back.gif
感谢你的回复,加得很好.不过你用的是COMMAND,导致最后生成的对象的属性和原来SSGET的不一样,最后生成的对 ...

3楼已更新.

香田里浪人 发表于 2016-1-12 21:29:43

bai2000 发表于 2016-1-11 15:46 static/image/common/back.gif
能把原来线不删变为中心线更好

简单, (vla-erase obj);删除原线----改为 ;;(vla-erase obj);就不删除原线

bai2000 发表于 2016-1-14 14:38:32

回楼上:怎么改为中心线呢?

13993359550 发表于 2016-1-16 11:13:51

这个强大呀
页: [1] 2
查看完整版本: 单线变双线源码,求增加封闭端点