[求助]有关编组的问题
<TABLE height="100%"><TBODY>
<TR>
<TD colSpan=2><FONT id=text1 style="FONT-SIZE: 10pt" face="宋体,verdana, arial, helvetica">CAD中用GROUP命令可以对对象进行编组,<BR>请问各位:<BR>1、如何知道某一实体是否属于一个编组?<BR>2、如何得知该编组是否是可选择的?<BR>3、如何用LISP函数修改一个编组的可选择属性?<BR><BR>望指教,先谢了。</FONT> </TD></TR>
<TR>
<TD vAlign=bottom colSpan=2><BR></TD></TR></TBODY></TABLE> (defun c:test ( / ent ent1 ent2 groupname )<BR> (setq ent (assoc 330 (entget (car (entsel)))))<BR> (setq ent1 (entget (cdr ent)))<BR> (setq ent2 (entget (cdr (assoc 330 ent1))))<BR> (setq groupname (cdr (assoc 3 ent2)))<BR> <BR>) (defun c:test ( / ent ent1 ent2 groupname )<BR> (setq ent (assoc 330 (entget (car (entsel)))))<BR> (setq ent1 (entget (cdr ent)))<BR> (setq ent2 (entget (cdr (assoc 330 ent1))))<BR> (setq groupname (cdr (assoc 3 ent2)))<BR> (if ( = (cdr (assoc 71 ent1)) 1)<BR> (princ (strcat "\n" groupname " can be selectable"))<BR> (princ (strcat "\n" groupname " can not be selectable"))<BR> )<BR> (princ)<BR>) <P>谢谢<A name=7639><FONT color=#990000><B>citykunan</B></FONT></A>的指教</P>
<P>用你的代码,我确实得到了编组名,</P>
<P>我提完问题后,也查过的实体的数据表,知道定义完编组后,实体数据表中有一个102组,在102组中有一330子组指向一实体(表中其它地方还有330组),再查该实体的数据,有以下一些数据(不是全部数据)</P>
<P>(0 . "GROUP") (5 . "11C") (102 . "{ACAD_REACTORS") <BR>(330 . <图元名: 7ef51c68>) (102 . "}")</P>
<P>其102组中又有一330组,再查其数据,包含下列数据(不全)</P>
<P>(0 . "DICTIONARY") (5 . "D") (102 . <BR>"{ACAD_REACTORS") (330 . <图元名: 7ef51c60>) (102 . "}") (330 . <图元名: <BR>7ef51c60>) (100 . "AcDbDictionary") (280 . 0) (281 . 1) (3 . "AAA") (350 . <BR><图元名: 7ef51ee0>))</P>
<P>在这个数据表中有我定义的编组名 (3 . "AAA") ,</P>
<P>我现在想搞清楚的是:由于上述的各数据表中都有多个330组数据,用你所给的代码,每次都取第一个330组,这样是不是能确保所取的图元名都有是我想要取得的,也就是说,这样取下来是不是一定得到编组名,会不会在取图元名中取到其它的图元名而出错,</P> <P><A name=7641><FONT color=#990000><B>citykunan</B></FONT></A>:</P>
<P>我刚才又反复试过,如果在图形中定义了多个编组,返回的总是同一个编组名,而不管我选择哪一个编组中的实体。</P> <P>try this.</P>
<P>(defun c:test ( / ent ent1 ent2 groupname groupname_list entname gro_ent_list entname )<BR> (setq ent (assoc 330 (entget (car (entsel)))))<BR> (setq ent1 (entget (cdr ent)))<BR> (setq ent2 (entget (cdr (assoc 330 ent1))))<BR> <BR> (setq groupname_list (MASSOC 3 ent2))<BR> (setq entname (MASSOC 350 ent2))</P>
<P> (while entname<BR> (setq gro_ent_list (append (list (list (car entname) (car groupname_list))) gro_ent_list))<BR> (setq entname (cdr entname))<BR> (setq groupname_list (cdr groupname_list ))<BR> )<BR> (setq gro_ent_list (reverse gro_ent_list))</P>
<P> (setq entname (cdr (assoc -1 ent1)))<BR> (setq groupname nil)</P>
<P> (while (= groupname nil)<BR> (if (equal (car (car gro_ent_list)) entname)<BR> (setq groupname (cadr (car gro_ent_list)))<BR> )<BR> <BR> (setq gro_ent_list (cdr gro_ent_list))<BR> )<BR> <BR> </P>
<P> (if ( = (cdr (assoc 71 ent1)) 1)<BR> (princ (strcat "\n" groupname " can be selectable"))<BR> (princ (strcat "\n" groupname " can not be selectable"))<BR> )<BR> (princ)<BR> </P>
<P>)</P>
<P><BR>;(MASSOC 10 (entget obj))<BR>(defun massoc (key alist / x nlist)<BR> (foreach x alist<BR> (if (eq key (car x))<BR> (setq nlist (cons (cdr x) nlist))<BR> )<BR> )<BR> (setq nlist (reverse nlist))<BR> nlist<BR>)</P>
<P> </P> ;|************************(for 任意重的组名)--------------lxx.2004.5 ok!!
;1.求实体所属组定义列表 -> (组定义1 组定义2 ...):
;测试: (xgpdef (car(entsel)))
|;
(defun xgpdef (gpe / el lst a gpdf gplst)
(setq el (entget gpe))
(if (setq lst (member '(102 . "{ACAD_REACTORS") el))
(while (and(setq lst (cdr lst))(= 330 (car(setq a (car lst)))))
(if(= "GROUP" (cdr (assoc 0 (setq gpdf (entget(cdr a))))))
(setq gplst (cons gpdf gplst))
)
)
)(reverse gplst)
)
页:
[1]