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>&nbsp;&nbsp; <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/>&nbsp;&nbsp;&nbsp;&nbsp;<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/>&nbsp;&nbsp; <font color="#ff0000">)</font><br/>改成</p><p><font color="#ff0000">&nbsp; (</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看看贴子说明,程序中将外围线从选择集中去除了。只要将&nbsp;&nbsp; (IF&nbsp;&nbsp;(SETQ SS1 (SSGET&nbsp;&nbsp;\"WP\" PLST '((0 . \"LWPOLYLINE\")&nbsp;&nbsp;(70 . 129))))&nbsp;&nbsp;

<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/>&nbsp;&nbsp;&nbsp; (setq zdlist nil)<br/>&nbsp;&nbsp;&nbsp; (setq dh 0);点号初始化<br/>&nbsp;&nbsp;&nbsp; (setq n 0)<br/>&nbsp;&nbsp;&nbsp; (while (/= (nth n tym ) nil)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;(if (= (car (nth n tym )) 10)<br/>&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq dh (+ dh 1))<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq zdlist (append zdlist (list (list (cadr (nth n tym)) (caddr (nth n tym))))))<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq zb (list dh (list (cadr (nth n tym)) (caddr (nth n tym)))))<br/>&nbsp;&nbsp;&nbsp;&nbsp; ;(princ zb zdwj1)<br/>&nbsp;&nbsp;&nbsp;&nbsp; ;(princ "\n" zdwj1)<br/>&nbsp;&nbsp; );end progn<br/>&nbsp;);end if<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );end progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq n (+ n 1))<br/>&nbsp;&nbsp;&nbsp; );end while,坐标提取及坐标表构建完毕。</p><p>(setq jzx (ssget "cp" zdlist '((0 . "LWPOLYLINE") (70 . 1))));界址线选择集<br/>)</p><p></p>
页: 1 2 [3]
查看完整版本: [求助]请问如何实现点选闭合多义线获得ssget集?