请教关于选择集的问题
<P>(setq ss (ssget))<BR>(command "_region" ss "")<BR>请问接下来如何得到这个面域的选择集</P><P><BR>还有另外定义多段线的方法:<BR>(setq pt (getpoint))<BR>(command "-boundary" pt "")<BR>接下来要得到包含若干多段线的选择集</P>
<P>谢谢</P> 本帖最后由 作者 于 2006-5-25 21:28:58 编辑 <br /><br /> (setq ss (ssget "x" '((0 . "REGION"))))<BR>(command "_region" ss "")<BR>(setq ss2 (ssget "x" '((0 . "REGION"))))<BR>(setq n -1)<BR>(setq ss1 '())<BR>(repeat (sslength ss)<BR> (setq en (ssname ss (setq n (1+ n))))<BR> (if (not (ssmemb en ss))<BR> (setq ss1 (ssadd en ss1))<BR> )<BR>)<BR> <P>回楼上:谢谢指教</P>
<P>不过我要得到的是选择集是面域以后的“面域”</P>
<P>这几句就足够了:(setq ss (ssget))<BR>(command "_region" ss "")<BR>(setq ss2 (ssget "x" '((0 . "REGION"))))</P>
<P> </P>
<P> </P>
<P>另外:如果我要在同一模型空间多次执行这个程序,那么每次得到的选择集就会是模型空间中所有面域,而我只想要本次程序执行中生成的面域。</P>
<P>原因就在这一句:(setq ss2 (ssget "x" '((0 . "REGION"))))</P>
<P>请教如何解决</P>
<P>谢谢</P> (ssget "l") fishnono发表于2006-5-25 16:45:00static/image/common/back.gif
另外:如果我要在同一模型空间多次执行这个程序,那么每次得到的选择集就会是模型空间中所有面域,而我只想要本次程序执行中生成的面域。
<BR>2楼那个,ss1就是你要的了 <P>回四楼:SSGET“L”得到的只是一个面域,若一次面域多于两个,不知如何得到?</P>
<P>回五楼:(if (not (ssmemb en ss))<BR> (setq ss1 (ssadd en ss1))<BR> )</P>
<P>这句提示参数错误,我找不出来为什么</P>
<P>另外:我做的是排料图,面域成百上千,势必SS SS2都要过界,是否有中类似四楼的方法选择?</P>
<P>原程序在下面:</P> <P>(defun c:dpxq (/ thick ss1 ss2 ss no pt sumlen n 1_area tot_area max_area en danpin_area zhiliang)<BR> <BR> (prompt "选择单品外轮廓线(必须闭合)")<BR> (setq ss1 (ssget))<BR> <BR> (setq ss (ssget "x" '((0 . "REGION"))))<BR> (command "_region" ss1 "")<BR> (setq ss2 (ssget "x" '((0 . "REGION"))))<BR> (setq n -1)<BR> (setq no (sslength ss2))<BR> </P>
<P> (repeat no<BR> (setq n (1+ n))<BR> (setq en (ssname ss2 n))<BR> (if (not (ssmemb en ss))<BR> (setq ss1 (ssadd en ss1))<BR> )<BR>)<BR> <BR> <BR> <BR> <BR> <BR> (setq n 0)<BR> (setq tot_area 0)<BR> (setq max_area 0)<BR> (setq sumlen 0)<BR> (setq en (ssname ss1 n))<BR> (while en<BR> (command "._area" "_O" en)<BR> (setq sumlen (+ sumlen (getvar "Perimeter")))<BR> (setq 1_area (getvar "area"))<BR> (if (> 1_area max_area) (setq max_area 1_area))<BR> (setq tot_area (+ tot_area 1_area))<BR> (setq n (1+ n))<BR> (setq en (ssname ss n))<BR> )<BR> (setq thick 19)<BR> (setq danpin_area (- (* 2 max_area) tot_area))<BR> (setq zhiliang (* (/ (* danpin_area thick) 1000000000) 7850))</P>
<P> (print "单品线长度")<BR> (princ sumlen)<BR> (print "单品净重:")<BR> (princ zhiliang)<BR> (princ)<BR> )</P> fishnono发表于2006-5-26 10:38:00static/image/common/back.gif
回五楼:(if (not (ssmemb en ss))&nbs...
<P>错误在于ss选择集可能是空的,增加个判断先,如果ss为nil,则直接为ss2,否则从ss2删除ss选择集合------</P>
<P>(setq ss (ssget "x" '((0 . "REGION"))))<BR> (command "_region" ss1 "")<BR> (setq ss2 (ssget "x" '((0 . "REGION"))))</P>
<P>(setq n -1)</P>
<P>(while (and ss (<(setq n(1+ n))(sslength ss)))</P>
<P>(ssdel (ssname ss n) ss2)</P>
<P>);这样的结果就是最后生成的region选择集合ss2了!</P> fishnono发表于2006-5-26 10:40:00static/image/common/back.gif
(defun c:dpxq (/ thick ss1 ss2 ss no pt sumlen n 1_area tot_area max_area en danpin_area zhiliang)(prompt \"选择单品外轮廓线(必...
<P> (prompt "选择单品外轮廓线(必须闭合)")<BR> (setq ss1 (ssget)) <BR> (setq ss(entlast))<BR> (command "_region" ss1 "")<BR> (setq ss2(getthelastregion ss));这里得到最后生成的region选择集合-------<BR> ;你下面的程序根据自己的改吧~~~</P>
<P><BR>(defun getthelastregion (lastent / newentsel en)<BR> (if (/= nil lastent)<BR> (progn<BR> (setq newentsel (ssadd))<BR> (while (/= nil (setq lastent (entnext lastent)))<BR> (setq en (entget lastent))<BR> (if (= "REGION" (cdr (assoc '0 en)))<BR> (ssadd lastent newentsel)<BR> )<BR> )<BR> )<BR> )<BR> newentsel<BR>);by xxsheng</P>
<P>;说明一下:如果前面的region对象不多的话,建议用楼上的方法,如果多的话,用这个方法.没有测试过速度!</P> 问题按照9楼的方法解决了,速度很快。谢谢各位
页:
[1]
2