davinlee 发表于 2006-3-22 15:39:00

[LISP]选择集

<P>通常是用</P>
<P>(setq ss (ssadd))</P>
<P>(command "_line" p1 p2 "")</P>
<P>(setq ss (ssadd (entlast) ss)</P>
<P>(command "_line" p2 p3 "")</P>
<P>(setq ss (ssadd (entlast) ss)</P>
<P>..............................</P>
<P>来加入选择集.</P>
<P>如果是如下的命令一次执行线的命令,而不是分次执行也不是用pline</P>
<P>(command "_line" p1 p2 p3 p4 p5 p6 p7 p8 "c")</P>
<P>该选择集可以作到吗.</P>
<P>我感觉每次要下(setq ss (ssadd (entlast) ss),程序好像变得很长.</P>

ljpnb 发表于 2006-3-22 15:50:00

(setq ss0(ssget "x"))<BR>(command "_line" p1 p2 p3 p4 p5 p6 p7 p8 "c")<BR>(command "select" "all" "r" ss0 "")<BR>(setq ss1(ssget "p"))<BR>这是其中一种方法

Mr0sky 发表于 2024-6-20 02:10:20

感谢各位大佬,学习到了!

davinlee 发表于 2006-3-22 19:28:00

<P>2楼楼主,谢谢您,问题解决了.</P>
<P>还有其他的方法,也能说一下吗.想学呢!</P>
<P>感谢您.</P>

ljpnb 发表于 2006-3-23 06:35:00

方法二:
(setq en(ssadd)
      enw (entlast)
)
(command "_line" p1 p2 p3 p4 p5 p6 p7 p8 "c")
(if enw
(while (setq enw (entnext enw))
    (setq en (ssadd enw en))
)
(setq en (ssget "x"))
)

davinlee 发表于 2006-3-23 12:02:00

<P>(setq ss0(ssget "x"))<BR>(command "_line" p1 p2 p3 p4 p5 p6 p7 p8 "c")<BR>(command "select" "all" "r" ss0 "")<BR>(setq ss1(ssget "p"))<BR>之后要再加入新图元</P>
<P>(setvar "clayer" "center")<BR>&nbsp;&nbsp; (setq cen_line2 (ssadd))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;宣告新选择集cen_line2<BR>&nbsp;&nbsp; (command "_.line"&nbsp; p17 p18 "")<BR>&nbsp;&nbsp; (setq cen_line2 (ssadd (entlast) cen_line2))<BR>&nbsp;&nbsp; (command "_.line"&nbsp; p19 p20 "")<BR>&nbsp;&nbsp; (setq cen_line2 (ssadd (entlast) cen_line2))<BR>&nbsp;&nbsp; (setq ss1 (ssadd cen_line2 ss1)) ;;&lt;&lt;这一行有问题,</P>

ljpnb 发表于 2006-3-23 12:16:00

<P>引用:(setq ss1 (ssadd cen_line2 ss1)) ;;&lt;&lt;这一行有问题,</P>
<P>你看看帮助里ssadd的用法,<FONT face=华文行楷>&nbsp;格式:</FONT><FONT size=3>(ssadd ])&nbsp;&nbsp;</FONT></P>

davinlee 发表于 2006-3-23 13:20:00

<P>格式:<FONT size=3>(ssadd ])&nbsp;&nbsp; ename must be an entity.</FONT></P>
<P><FONT size=3>所以ename不可以是选择集.</FONT></P>
<P><FONT size=3>若是想将二个选择集合併就不可以如此编辑.</FONT></P>

xyp1964 发表于 2006-3-23 13:54:00

供参考:
(defun c:test ()
(setq ptlst1 '(p1 p2 p3 p4 p5 p6 p7 p8)
ss   (ssadd)
ptlst2 (cdr ptlst1)
)
(command "line" p1)
(foreach pt ptlst2
    (command pt)
    (setq ss (ssadd (entlast) ss))
)
(command "c")
(setq ss (ssadd (entlast) ss))
ss
)

davinlee 发表于 2006-3-24 16:07:00

<P>如果原本就存在ss1选择集,</P>
<P>而另外有一ss2选择集要加入到ss1选择集(ss1与ss2合併)</P>
<P>程序:</P>
<P>(defun merge_ss(ss1 ss2/i)</P>
<P>(setq i 0)</P>
<P>(repeat (sslength ss2)</P>
<P>&nbsp;(setq ss1 (ssadd (ssname ss2 i) ss1))</P>
<P>&nbsp;(setq i (1 + i))</P>
<P>)</P>
<P>有没有直接合併的函数可以用.</P>

ljpnb 发表于 2006-3-24 16:33:00

<P>也可以这样</P>
<P>(command "select" ss1 ss2 "")<BR>(setq ss1(ssget "p"))<BR></P>
页: [1] 2
查看完整版本: [LISP]选择集