hndwl
发表于 2007-9-11 12:19:00
本帖最后由 作者 于 2007-9-11 20:56:31 编辑
各位老师好:可能我前面说的不够清楚,我发一个图上去,图中全部是闭合的多断线(也可能是二维多段线),我想实现的是我选择白色的多断线时自动生成一个选择集,此选择集要包括白色线内的所有线,也就是2、3、4闭合线,不能包括5闭合线,我用ssget命令的很多参数都无法实现,用WP参数时4闭合线会漏选,用CP参数时又会多选了5闭合线,请各位老师多指教。拜托大家了,急等……
hndwl
发表于 2007-9-11 12:20:00
各位老师好:可能我前面说的不够清楚,我发一个图上去,图中全部是闭合的多断线(也可能是二维多段线),我想实现的是我选择白色的多断线时自动生成一个选择集,此选择集要包括白色线内的所有线,也就是2、3、4闭合线,不能包括5闭合线,我用ssget命令的很多参数都无法实现,用WP参数时4闭合线会漏选,用CP参数时又会多选了5闭合线,请各位老师多指教。拜托大家了,急等……
ZZXXQQ
发表于 2007-9-11 16:35:00
;下面函数通过选择封闭线建立线内(不包括本身)选择集。
(DEFUN C:TT ()
(IF (AND (PRINC "\nSelect a Polyline 选择多段线 :")
(SETQ SS (SSGET '((0 . "LWPOLYLINE") (70 . 129))))) (PROGN
(SETQ EN (SSNAME SS 0)
ENT (ENTGET EN)
PLST (LIST))
(FOREACH N ENT (IF (= (CAR N) 10) (SETQ PLST (CONS (CDR N) PLST))))
(SETQ PLST (REVERSE PLST))
(IF (SETQ SS1 (SSGET "WP" PLST '((0 . "LWPOLYLINE") (70 . 129))))
(SETQ SS1 (SSDEL EN SS1))
)
))
(SSLENGTH SS1)
)
无痕
发表于 2007-9-11 19:03:00
<p>(ssadd 外框多义线实体 wp选集) 不就是楼主的要求了么?呵呵</p>
hndwl
发表于 2007-9-11 21:02:00
我试了不行,和外围线有重合点的选不上.
ZZXXQQ
发表于 2007-9-11 22:21:00
hndwl发表于2007-9-11 21:02:00static/image/common/back.gif我试了不行,和外围线有重合点的选不上.
<p>看看贴子说明,程序中将外围线从选择集中去除了。只要将</p><p> <font color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/IF.htm" target="_black"><font color="#0000ff">IF</font></a>
<font color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/SETQ.htm" target="_black"><font color="#0000ff">SETQ</font></a> SS1 <font color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/SSGET.htm" target="_black"><font color="#0000ff">SSGET</font></a>
<font color="#ff00ff">"WP"</font> PLST '<font color="#ff0000">(</font><font color="#ff0000">(</font><font color="#008000">0</font> . <font color="#ff00ff">"LWPOLYLINE"</font><font color="#ff0000">)</font>
<font color="#ff0000">(</font><font color="#008000">70</font> . <font color="#008000">129</font><font color="#ff0000">)</font><font color="#ff0000">)</font><font color="#ff0000">)</font><font color="#ff0000">)</font><br/> <font color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/SETQ.htm" target="_black"><font color="#0000ff">SETQ</font></a> SS1 <font color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/SSDEL.htm" target="_black"><font color="#0000ff">SSDEL</font></a> EN SS1<font color="#ff0000">)</font><font color="#ff0000">)</font><br/> <font color="#ff0000">)</font><br/>改成</p><p><font color="#ff0000"> (</font><a href="http://www.mjtd.com/object/autolisp/SETQ.htm" target="_black"><font color="#0000ff">SETQ</font></a> SS1 <font color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/SSGET.htm" target="_black"><font color="#0000ff">SSGET</font></a>
<font color="#ff00ff">"WP"</font> PLST '<font color="#ff0000">(</font><font color="#ff0000">(</font><font color="#008000">0</font> . <font color="#ff00ff">"LWPOLYLINE"</font><font color="#ff0000">)</font>
<font color="#ff0000">(</font><font color="#008000">70</font> . <font color="#008000">129</font><font color="#ff0000">)</font><font color="#ff0000">)</font><font color="#ff0000">)</font><font color="#ff0000">)</font><br/>就可以取得4个封闭体了。</p>
hndwl
发表于 2007-9-12 18:40:00
ZZXXQQ发表于2007-9-11 22:21:00static/image/common/back.gif看看贴子说明,程序中将外围线从选择集中去除了。只要将 (IF (SETQ SS1 (SSGET \"WP\" PLST '((0 . \"LWPOLYLINE\") (70 . 129))))
<p><strong><em>ZZXXQQ老兄:我试了确实不行啊,无论怎样都只能取到2的线,3和4线取不到啊.麻烦您再试一下.</em></strong></p>
无痕
发表于 2007-9-13 01:52:00
<p>看来还是把plst向外偏移</p>
xgr
发表于 2007-9-13 03:23:00
<p>对,只有把多段线向外偏移一定的距离,再过滤掉与偏移多段线相交的多段线。</p>
laoxie_198
发表于 2007-9-13 07:33:00
<p><br/>(defun c:fb()<br/>(setq zxzj (ssget))</p><p>(setq zdm (ssname zxzj 0))</p><p>(setq tym (entget zdm))<br/> (setq zdlist nil)<br/> (setq dh 0);点号初始化<br/> (setq n 0)<br/> (while (/= (nth n tym ) nil)<br/> (progn<br/> (if (= (car (nth n tym )) 10)<br/> (progn<br/> (setq dh (+ dh 1))<br/> (setq zdlist (append zdlist (list (list (cadr (nth n tym)) (caddr (nth n tym))))))<br/> (setq zb (list dh (list (cadr (nth n tym)) (caddr (nth n tym)))))<br/> ;(princ zb zdwj1)<br/> ;(princ "\n" zdwj1)<br/> );end progn<br/> );end if<br/> );end progn<br/> (setq n (+ n 1))<br/> );end while,坐标提取及坐标表构建完毕。</p><p>(setq jzx (ssget "cp" zdlist '((0 . "LWPOLYLINE") (70 . 1))));界址线选择集<br/>)</p><p></p>