明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7126|回复: 28

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

  [复制链接]
发表于 2011-10-12 11:34:46 | 显示全部楼层 |阅读模式
用lisp布尔多义线,合并的功能,我想了个路子,请高手指点:
下面是我弄的一个图片,


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2011-10-14 11:30:46 | 显示全部楼层
  1. (defun c:text  (/ osmode_bak ss e getss)
  2.   (defun getss (e / ss)
  3.     (setq ss (ssadd))
  4.     (while (setq e (entnext e))
  5.       (setq ss (ssadd e ss))
  6.     )
  7.     ss
  8.   )
  9.   (setvar "CMDECHO" 0);_关闭命令提示
  10.   (Setq osmode_bak (getvar "osmode"));_记录捕捉
  11.   (Setvar "osmode" 0);_关闭捕捉
  12.   (setq ss  (ssget))
  13.   (setq e(entlast))
  14.   (command ".region" ss "")
  15.   (command ".union" (getss e) "")
  16.   (setq e(entlast))
  17.   (command ".Explode" (entlast))
  18.   (if (= 0 (getvar "peditaccept"))(setvar "peditaccept" 1))
  19.   (command "_.pedit" "m" (getss e) "" "j" "0.005" "")
  20.   (Setvar "osmode" osmode_bak);_还原捕捉
  21.   (setvar "CMDECHO" 1);_打开命令提示
  22.   (princ)
  23. )


评分

参与人数 1明经币 +1 收起 理由
hhh454 + 1 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2019-12-2 01:01:22 来自手机 | 显示全部楼层
本帖最后由 296715530 于 2019-12-11 21:46 编辑

好用,天正的布尔功能一样
发表于 2022-7-25 12:56:10 | 显示全部楼层
xyp-Get-Bpoly
发表于 2011-10-12 12:19:57 | 显示全部楼层
本帖最后由 Gu_xl 于 2011-10-12 12:41 编辑

  1. (defun c:tt  (/ en1 en2 pjdl enRegion0 enRegion1 enRegion2 ss)
  2.   (if
  3.     (and
  4.       (setq en1 (car (entsel "\n 选择第一个多段线:")))
  5.       (setq en2 (car (entsel "\n 选择第二个多段线:")))
  6.       )
  7.      (progn
  8.        (setq pjdl (vlax-invoke
  9.                     (vlax-ename->vla-object en1)
  10.                     'IntersectWith
  11.                     (vlax-ename->vla-object en2)
  12.                     acExtendNone))
  13.        (if (and pjdl (> (length pjdl) 3))
  14.          (progn
  15.            (command ".region" en1 "")
  16.            (setq enRegion1 (entlast))
  17.            (command ".region" en2 "")
  18.            (setq enRegion2 (entlast))
  19.            (command ".union" enRegion1 enRegion2 "")
  20.            (setq enenRegion0 (entlast))
  21.            (command ".Explode" enenRegion0)
  22.            (setq ss (ssget "p"))
  23.            (command "pedit" "m"  ss "" "y" "j" "" "")
  24.            )
  25.          )
  26.        )
  27.      )
  28.   )

评分

参与人数 1金钱 +50 收起 理由
hhh454 + 50 很给力!

查看全部评分

 楼主| 发表于 2011-10-12 14:20:33 | 显示全部楼层
谢谢,我弄了半天,没有弄出来,选择上次的也选择不上
 楼主| 发表于 2011-10-12 14:52:36 | 显示全部楼层
我自己弄了一个,还不全,炸开和合并弄不了
下面是代码
  1. (defun c:tt (/ ngc_pa)
  2.   (setvar "CMDECHO" 0);_关闭命令提示
  3.   (Setq osmode_bak (getvar "osmode"));_记录捕捉
  4.   (Setvar "osmode" 0);_关闭捕捉
  5.   (setq ngc_pa(getpoint "指定一点:")
  6.         ngc_pb(getpoint "指定另一点")
  7.         )        
  8.   (command ".region" "f" ngc_pa ngc_pb "" "")
  9.   (command ".union" "f" ngc_pa ngc_pb "" "")
  10.   (炸开)  这个弄不好
  11.   (pedit) 这个也连不上
  12.   (Setvar "osmode" osmode_bak);_还原捕捉
  13.   (setvar "CMDECHO" 1);_打开命令提示
  14.   (princ)
  15.   )
发表于 2011-10-12 17:52:32 | 显示全部楼层
这个很给力!
发表于 2011-10-12 18:12:45 | 显示全部楼层
  楼主 这块程序 好像没用上  (command "pedit" "m"  ss "" "y" "j" "" "")   忘指教
发表于 2011-10-12 18:13:06 | 显示全部楼层
本帖最后由 cable2004 于 2011-10-12 18:15 编辑

你选择的是点,而不是图元呀!


  • (setq en1 (car (entsel "\n 选择第一个多段线:")))
  •       (setq en2 (car (entsel "\n 选择第二个多段线:")))
  • (setq ngc_pa(getpoint "指定一点:")
  •         ngc_pb(getpoint "指定另一点")      )        

发表于 2011-10-12 19:56:10 | 显示全部楼层

点评

实干家vs理论家,秀才造反,三年不成!  发表于 2011-10-13 22:14
 楼主| 发表于 2011-10-12 21:15:42 | 显示全部楼层
这次没有问题了,简单的command,感谢 GU_XL的帮助,
解释一下的我的代码思路,我是用点选的方法,记录2个点,然后执行命令的 ” f “ 栏选择,
下面是全部的代码:
  1. (defun c:tt (/ ngc_pa ngc_pb ss)
  2.   (setvar "CMDECHO" 0);_关闭命令提示
  3.   (Setq osmode_bak (getvar "osmode"));_记录捕捉
  4.   (Setvar "osmode" 0);_关闭捕捉
  5.   (setq ngc_pa(getpoint "指定一点:")
  6.         ngc_pb(getpoint "指定另一点")
  7.         )        
  8.   (command ".region" "f" ngc_pa ngc_pb "" "")
  9.   (command ".union" "f" ngc_pa ngc_pb "" "")
  10.   (setq ss (ssget "p"))
  11.   (command ".Explode" ss)
  12.   (setq ss (ssget "p"))
  13.   (command "pedit" "m"  ss "" "y" "j" "" "")
  14.   (Setvar "osmode" osmode_bak);_还原捕捉
  15.   (setvar "CMDECHO" 1);_打开命令提示
  16.   (princ)
  17.   )
,谁还有简单的方法也可以贴出来。
 楼主| 发表于 2011-10-12 21:16:22 | 显示全部楼层
cable2004 发表于 2011-10-12 18:13
你选择的是点,而不是图元呀!

解释一下的我的代码思路,我是用点选的方法,记录2个点,然后执行命令的 ” f “ 栏选择,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-6 07:59 , Processed in 0.219124 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表