hhh454 发表于 2011-10-12 11:34:00

用lisp布尔多义线,合并的功能,我想了个路子,请高手指点

用lisp布尔多义线,合并的功能,我想了个路子,请高手指点:
下面是我弄的一个图片,

下面是我的思路,但是不知道怎么串起来,请高手支招,谢谢
1,使用“region”,命令将图中的多义线或者矩形,变成面片
2,使用布尔命令“union”,合并面片
3,炸开合并后的面片,变成单条line
4,pe命令合成多义线。

3527188 发表于 2011-10-14 11:30:00


(defun c:text(/ osmode_bak ss e getss)
(defun getss (e / ss)
    (setq ss (ssadd))
    (while (setq e (entnext e))
      (setq ss (ssadd e ss))
    )
    ss
)
(setvar "CMDECHO" 0);_关闭命令提示
(Setq osmode_bak (getvar "osmode"));_记录捕捉
(Setvar "osmode" 0);_关闭捕捉
(setq ss(ssget))
(setq e(entlast))
(command ".region" ss "")
(command ".union" (getss e) "")
(setq e(entlast))
(command ".Explode" (entlast))
(if (= 0 (getvar "peditaccept"))(setvar "peditaccept" 1))
(command "_.pedit" "m" (getss e) "" "j" "0.005" "")
(Setvar "osmode" osmode_bak);_还原捕捉
(setvar "CMDECHO" 1);_打开命令提示
(princ)
)

296715530 发表于 2019-12-2 01:01:00


好用,天正的布尔功能一样

渠辉 发表于 2022-7-25 12:56:00

xyp-Get-Bpoly

Gu_xl 发表于 2011-10-12 12:19:00


(defun c:tt(/ en1 en2 pjdl enRegion0 enRegion1 enRegion2 ss)
(if
    (and
      (setq en1 (car (entsel "\n 选择第一个多段线:")))
      (setq en2 (car (entsel "\n 选择第二个多段线:")))
      )
   (progn
       (setq pjdl (vlax-invoke
                  (vlax-ename->vla-object en1)
                  'IntersectWith
                  (vlax-ename->vla-object en2)
                  acExtendNone))
       (if (and pjdl (> (length pjdl) 3))
         (progn
         (command ".region" en1 "")
         (setq enRegion1 (entlast))
         (command ".region" en2 "")
         (setq enRegion2 (entlast))
         (command ".union" enRegion1 enRegion2 "")
         (setq enenRegion0 (entlast))
         (command ".Explode" enenRegion0)
         (setq ss (ssget "p"))
         (command "pedit" "m"ss "" "y" "j" "" "")
         )
         )
       )
   )
)

hhh454 发表于 2011-10-12 14:20:00

谢谢,我弄了半天,没有弄出来,选择上次的也选择不上

hhh454 发表于 2011-10-12 14:52:00

我自己弄了一个,还不全,炸开和合并弄不了
下面是代码
(defun c:tt (/ ngc_pa)
(setvar "CMDECHO" 0);_关闭命令提示
(Setq osmode_bak (getvar "osmode"));_记录捕捉
(Setvar "osmode" 0);_关闭捕捉
(setq ngc_pa(getpoint "指定一点:")
      ngc_pb(getpoint "指定另一点")
      )      
(command ".region" "f" ngc_pa ngc_pb "" "")
(command ".union" "f" ngc_pa ngc_pb "" "")
(炸开)这个弄不好
(pedit) 这个也连不上
(Setvar "osmode" osmode_bak);_还原捕捉
(setvar "CMDECHO" 1);_打开命令提示
(princ)
)

shang_123 发表于 2011-10-12 17:52:00

这个很给力!

shang_123 发表于 2011-10-12 18:12:00

楼主 这块程序 好像没用上(command "pedit" "m"ss "" "y" "j" "" "")   忘指教

cable2004 发表于 2011-10-12 18:13:00


你选择的是点,而不是图元呀!
(setq en1 (car (entsel "\n 选择第一个多段线:")))
http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif
      (setq en2 (car (entsel "\n 选择第二个多段线:")))
(setq ngc_pa(getpoint "指定一点:")
http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif
      ngc_pb(getpoint "指定另一点")      )      
页: [1] 2
查看完整版本: 用lisp布尔多义线,合并的功能,我想了个路子,请高手指点