编写lisp程序多条多段线连接成一条多段线

一个地物有两到三条多段线组成,有n个这样的地物。我想要实现通过批量全选这些地物,执行一个命令,使地物多条线转成为一条线... 一个地物有两到三条多段线组成,有n个这样的地物。我想要实现 通过批量全选这些地物,执行一个命令,使地物多条线转成为一条线 展开
 我来答
悄悄de爱上
2017-08-09 · TA获得超过2050个赞
知道小有建树答主
回答量:597
采纳率:66%
帮助的人:341万
展开全部

命令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退出

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式