找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 929|回复: 14

[求助] [求助]:想编一个关于闭合PLINE线的程序

[复制链接]
发表于 2004-12-2 09:05:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
有时作图时,图面有N个闭合的PLINE相互重叠,想将其中重叠的部分删去,沿外轮廓重新生成一个闭合PLINE线;请会的兄弟给予帮助,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-12-2 11:18:01 | 显示全部楼层
怎么个相互重叠法?如果只是作为实体的多义线重叠,使用OVERKILL不行吗?或者贴个图大家可能看的清楚些。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-2 12:34:24 | 显示全部楼层
刚才描述不准确,贴个简单的图
以前某兄弟作过2个物体的,操作过于复杂;说明太少,偶看不懂,更改不好那个LISP
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-3 06:27:36 | 显示全部楼层
还是不明白你说的是什么意思,你最后的目的? 删除哪些,保留哪些?沿什么外轮廓重新生成一个闭合PLINE线?
需要他人帮助,你得把自己的问题说清楚呀?!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-3 09:35:02 | 显示全部楼层
1.现状:
曲线的布尔运算中1并集非常常用,且有处理多物体的需要;差集和交集偶而有处理多物体的需要;

2.目的:
想将左边的图内的三条闭合线重新闭合,一次性变成右边的图这种闭合线(晓东工具箱中的曲线布尔运算能作到2条线的处理,多线的比较复杂,费事)

3.解决方式:
请兄弟们帮忙编个LISP,或在大家的指导下自制一个LISP(目前对曲线是如何进行布尔运算的十分不清楚)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-4 19:24:45 | 显示全部楼层
[php]
(defun c:test()
  (vl-load-com)
  (mkla"外轮廓"1)
  (setq pt1(getpoint"\n窗口点1 : ")
        pt2(getcorner pt1 "\n对角点 : ")
        )
  (COMMAND "rectang" pt1 pt2)
  (setq e1 (entlast))
  (setq pt1 (getpoint"\n内部点 : "))
  (command"_boundary" pt1 "")
  (setq e2(entlast))  
  (vla-erase (vlax-ename->vla-object e1))
  (vla-erase (vlax-ename->vla-object e2))
  (princ)
  )
  (Defun MKLA (a b)
  (If (= (Tblsearch "layer" a) nil)
    (Command "layer" "m" a "c" b a "")
    (Command "layer" "t" a "s" a "c" b a "")
  )
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 9891个

财富等级: 富甲天下

发表于 2004-12-6 11:20:13 | 显示全部楼层
程序不错,只是原PLINE线未删除。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-6 16:00:00 | 显示全部楼层
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-6 22:42:39 | 显示全部楼层
[php](defun c:trr (/ SS)
  (vl-load-com)
  (vl-cmdf ".undo" "BE")
  (setq SS (ssget "X"))
  (command "_.REGION" (ssget) "")
  (command "_.SELECT" (ssget "X") "R" SS "")
  (command "_.UNION" "P" "")
  (command "explode" "l")
  (vl-cmdf ".undo" "E")
  (princ)
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-7 09:17:31 | 显示全部楼层
谢谢老大!
6楼的思路不错,与以前我手动操作一样,但有潜在问题存在
9楼的思路也不错,操作后连孤岛都能形成,但操作后不是闭合线:(
目前存在的疑惑:
undo 输入要放弃的操作数目"BE""E"对应的具体作用是?为什么要加这两行呢?
还未解决的问题:
1.想在9楼LISP中加入MPEDIT命令,自动形成闭合线,但不知道如不手动选择的话,此时该如何定选集?
2.面域UNION后,能否不用explode命令,而将region变为boundary?(由于边界创建bo命令中,可以形成2种对象--面域和多段线--故计算的法则应该是相同的,两者是否能互转?)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-7 13:18:58 | 显示全部楼层
最初由 xxxyzxx 发布
[B]谢谢老大!
6楼的思路不错,与以前我手动操作一样,但有潜在问题存在
9楼的思路也不错,操作后连孤岛都能形成,但操作后不是闭合线:(
目前存在的疑惑:
undo 输入要放弃的操作数目"BE""E"对应的具体作用是?为... [/B]

取消打碎操作即可。
设置“undo”可以直接回退到程序执行前的状态,否则有10000个元素,如果要取消操作,岂不要“undo”10000次。
[php]
(defun c:trr (/ SS)
  (vl-load-com)
  (vl-cmdf ".undo" "BE")
  (setq SS (ssget "X"))
  (command "_.REGION" (ssget) "")
  (command "_.SELECT" (ssget "X") "R" SS "")
  (command "_.UNION" "P" "")
  ;(command "explode" "l")
  (vl-cmdf ".undo" "E")
  (princ)
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-7 13:36:39 | 显示全部楼层
undo次数对应command次数,和元素个数无关
2.面域UNION后,能否不用explode命令,而将region变为boundary?(由于边界创建bo命令中,可以形成2种对象--面域和多段线--故计算的法则应该是相同的,两者是否能互转?)
--explode后还可以再连接阿
不过如果实体中含有spline就不行了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-7 21:32:21 | 显示全部楼层
--explode后还可以再连接阿
不过如果实体中含有spline就不行了

是可以连接,但我想实现自动化操作,
遇到些困难(刚开始学LISP,问题可能提的不对,请高手们见谅,并给予帮忙,谢谢)
1.如何能清空已存在的ssget中的选集
2.如何能够构建差集
[PHP]
;原LISP由xyp1964于2004.12.06编
(defun c:trr (/ SS ss1 ss2 ss3)
  (vl-load-com)
  (vl-cmdf ".undo" "BE")
  (setq SS (ssget "X"))
  (command "_.REGION" (ssget) "")
  (command "_.SELECT" (ssget "X") "R" SS "")
  (command "_.UNION" "P" "")
  ;想在此构建目前所有物体X选集ss1
  ;是否需要清空原SSGET选集?
  (setq ss1 (ssget "X" )  )
  (command "explode" "l")
  ;想在此构建当前所有物体X选集ss2
  ;如何构建ss3=ss2-ss1的差集?
  (setq ss2 (ssget "X" )  )
  (command "_.PEDIT" "M" ss3 "" "Y" "J" "0" "C" "")
  (vl-cmdf ".undo" "E")
  (princ)
)
[/PHP]

以上为我想改LISP的思路,现有eachy 编的LISP
……
(vl-cmdf ".pedit" "m" "p" "" "y" "j" "0.1" "")
……
最终是由vl-cmdf来实现PEDIT功能的,不知与我所想有何异同点?

我汇总了一下原eachy  与xyp1964的LISP,有些疑问
[PHP]
(defun C:trr (/ SS oldlay)
  (vl-load-com)
  (vl-cmdf ".undo" "BE")
;UNDO与OLDLAY的顺序有无先后关系?
  (setq oldlay (getvar "clayer"))
  (setq SS (ssget "X"))
  (command "_.REGION" (ssget) "")
  (command "_.SELECT" (ssget "X") "R" SS "")
  (command "_.UNION" "P" "")
  (command "explode" "l")
  (vl-cmdf ".pedit" "m" "p" "" "y" "j" "0.1" "")
;最后生成的闭合线全在原当前层,某些应该在其它层的也到当前层了,且颜色均为BYLAYER,需增加什么代码才能保持原线的属性?
(setvar "clayer" oldlay)
  (vl-cmdf ".undo" "E")
  (princ)
)
(Defun MKLA (a b)
  (If (= (Tblsearch "layer" a) nil)
    (Command "layer" "m" a "c" b a "")
    (Command "layer" "t" a "s" a "c" b a "")
  )
(princ)
)
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-7 22:18:11 | 显示全部楼层
[php]
(defun c:test (/ la ss ss1 ss2 ss3)
  (setq la (getvar "clayer"))
  (setq ss (ssget "X"))
  (command "_.REGION" (ssget) "")
  (command "_.SELECT" (ssget "X") "R" SS "")
  (command "_.UNION" "P" "")
  (setq ss1 (ssget "X"))
  (command "explode" "l")
  (setq ss2 (ssget "X"))
  (command "_.select" ss2 "_r" ss1 "")
  (setq ss3 (ssget "p"))
  (mkla "边界" 1)
  (command "_.PEDIT" "M" ss3 "" "Y" "J" "0" "C" "")
  (command "chprop" "l" "" "la""边界""c""1""")
  (setvar "clayer" la)
  (princ)
)
(Defun MKLA (a b)
  (If (= (Tblsearch "layer" a) nil)
    (Command "layer" "m" a "c" b a "")
    (Command "layer" "t" a "s" a "c" b a "")
  )
)[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-8 09:12:21 | 显示全部楼层
谢谢老大
疑惑:
1.原eachy的LISP中(vl-cmdf ".pedit" "m" "p" "" "y" "j" "0.1" "")是获取的上一次的选集吧,但是P的选集已经是UNION被炸开前的了,这条语句最终选的选集是?
2."_.SELECT"哪有详细查询的地方,HELP中我未能找到"_r"的用法?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-24 23:23 , Processed in 0.419655 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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