前生 发表于 2016-4-4 21:18:11

打断PLINE,

见贴图,希望一个小的LSP程序,选择一个PLINE后,如果有直线段,则最长的直线段打断,变成一个开口的PLINE.谢谢!







tryhi 发表于 2016-4-4 23:25:31

本帖最后由 tryhi 于 2016-4-4 23:59 编辑

;;打断最长的直线边
;;BY-tryhi大海
(defun c:tt (/ ens)
      (command"UNDO" "be")
      (setq ens (try-ss2EnList(ssget '((0 . "LWPOLYLINE")(-4 . "&")(70 . 1)))))
      (foreach n ens (brtt n))
      (command "UNDO" "end")
)
(defun brtt (en / en enl enlst enlst-l llst ss ss1)
      (setq enl(entlast))
      (command "_explode" en)
      (setq ss0(try-ssend enl))
      (command "SELECT" ss "")
      (setq ss(ssget "P" '((0 . "line")))
                enlst(try-ss2EnList ss)
                Llst(mapcar '(lambda(e)(vla-get-Length(vlax-ename->vla-object e))) enlst)
                enlst-l(mapcar 'list enlst Llst)
                enlst-l (vl-sort enlst-l '(lambda(a b)(> (cadr a)(cadr b))))
                en1(car (car enlst-l))
                ss1(ssdel en1 ss0)
      )
      (command "_pedit" "m" ss1 "" "" "j" "" "")
      (command "ERASE"(car (car enlst-l))"")
)
(defun try-ssend(en / ss)
      (setq ss (ssadd))
      (while (setq en(entnext en))
                (setq ss(ssadd en ss))
      )
      ss
)
(defun try-Enlist2ss(enlist / ss)
      (setq ss (ssadd))
      (foreach n (reverse enlist) (ssadd n ss))
)
(defun try-ss2EnList(ss / a en lst)
      (setq a -1)
      (if ss
                (while
                        (setq en(ssname ss(setq a(1+ a))))
                        (setq lst(cons en lst))
                )
      )
      (reverse lst)
)

xujinhua 发表于 2016-4-5 12:59:10

tryhi 发表于 2016-4-4 23:25 static/image/common/back.gif


厉害。。。

前生 发表于 2016-4-7 23:20:08

可以。
1:原意是想有个不用Command命令的lsp,通过对pline线的计算,来生成。
2:最长的直线,希望是切掉一段,二头各留一小段直边。

自贡黄明儒 发表于 2016-4-8 08:19:40

前生 发表于 2016-4-7 23:20 static/image/common/back.gif
可以。
1:原意是想有个不用Command命令的lsp,通过对pline线的计算,来生成。
2:最长的直线,希望是切掉一 ...

这个愿望应该是可以,你也是老革命了,想必可以办到。

流动的清泉 发表于 2016-4-8 10:48:36

真高手,

xiaolong1487 发表于 2016-4-25 12:00:48

学下方法,,,

xiaolong1487 发表于 2016-4-25 12:06:42

这里不知道有没有问题,好像也不影响程序执行!

前生 发表于 2016-4-27 02:45:21

没采用上面的方法,用了以前陈伯雄老师讲的一种选择+点的方法。
页: [1]
查看完整版本: 打断PLINE,