编写lisp程序多条多段线连接成一条多段线
一个地物有两到三条多段线组成,有n个这样的地物。我想要实现通过批量全选这些地物,执行一个命令,使地物多条线转成为一条线...
一个地物有两到三条多段线组成,有n个这样的地物。我想要实现 通过批量全选这些地物,执行一个命令,使地物多条线转成为一条线
展开
1个回答
展开全部
命令HB合并多段线
(defun c:hb (/ @myL @lpNum @etLst @@ent @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退出
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |