展开全部
命令HB合并多段线(defun c:hb (/ @myL @lpNum @etLst @@62616964757a686964616fe4b893e5b19e31333363383339ent @ptLst)
(setq @myL (ssget "i" '((0 . "LINE,LWPOLYLINE"))))
;将创建已经选择的线(多段线或者直线)的选择集
(setq @lpNum 0);为循环计数参数赋值
(repeat (sslength @myL);选择集包含几个对象就循环几次
(setq @etLst (append @etLst (list (ssname @myL @lpNum)))
;逐个提取选择集中的图元名并储存到表@etLst中
@lpNum (1+ @lpNum);每循环一次循环计数参数+1
)
)
(foreach @@lpet @etLst;历遍表@etLst中每一个原子,以@@lpet代替原子
(progn
(setq @@ent (entget @@lpet));将每个图元的详细列表赋值到@@ent中
(foreach @@2lpe @@ent
(if (= (car @@2lpe) 10);如果子表中第一个原子为10
(setq @ptLst (append @ptLst (list @@2lpe))) ;将子表列入@ptLst
)
)
(entdel @@lpet);删除已提取过点的对象
)
)
(entmake (append (list;通过点表创建新的多段线
'(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbPolyline")
(cons 90 (length @ptLst))
)
@ptLst
)
)
(princ)
)
=====分割线========================================
顺带一说。。。你为何不用CAD自带的pedit命令?
pedit(使用CAD原生的ACAD.PGP可简化为PE命令)→M→选择所有需要合并的线→(若有不含多段线的元素)按Y转换所有选择对象为多段线→J合并→空格或者回车或者ESC退出