打断PLINE,
见贴图,希望一个小的LSP程序,选择一个PLINE后,如果有直线段,则最长的直线段打断,变成一个开口的PLINE.谢谢!本帖最后由 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)
) tryhi 发表于 2016-4-4 23:25 static/image/common/back.gif
厉害。。。 可以。
1:原意是想有个不用Command命令的lsp,通过对pline线的计算,来生成。
2:最长的直线,希望是切掉一段,二头各留一小段直边。 前生 发表于 2016-4-7 23:20 static/image/common/back.gif
可以。
1:原意是想有个不用Command命令的lsp,通过对pline线的计算,来生成。
2:最长的直线,希望是切掉一 ...
这个愿望应该是可以,你也是老革命了,想必可以办到。 真高手, 学下方法,,, 这里不知道有没有问题,好像也不影响程序执行!
没采用上面的方法,用了以前陈伯雄老师讲的一种选择+点的方法。
页:
[1]