winabcd 发表于 2006-4-13 09:08:00

[求助]有关编组的问题

<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>

citykunan 发表于 2006-4-13 09:46:00

(defun c:test ( / ent ent1 ent2 groupname )<BR>&nbsp;&nbsp; (setq ent (assoc 330 (entget (car (entsel)))))<BR>&nbsp;&nbsp; (setq ent1 (entget (cdr ent)))<BR>&nbsp;&nbsp; (setq ent2 (entget (cdr (assoc 330 ent1))))<BR>&nbsp;&nbsp; (setq groupname&nbsp; (cdr (assoc 3 ent2)))<BR>&nbsp; <BR>)

citykunan 发表于 2006-4-13 10:00:00

(defun c:test ( / ent ent1 ent2 groupname )<BR>&nbsp;&nbsp; (setq ent (assoc 330 (entget (car (entsel)))))<BR>&nbsp;&nbsp; (setq ent1 (entget (cdr ent)))<BR>&nbsp;&nbsp; (setq ent2 (entget (cdr (assoc 330 ent1))))<BR>&nbsp;&nbsp; (setq groupname&nbsp; (cdr (assoc 3 ent2)))<BR>&nbsp;&nbsp; (if ( =&nbsp; (cdr (assoc 71 ent1)) 1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ (strcat "\n" groupname " can be selectable"))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ (strcat "\n" groupname " can not be selectable"))<BR>&nbsp;&nbsp; )<BR>&nbsp; (princ)<BR>)

winabcd 发表于 2006-4-13 10:17:00

<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 . &lt;图元名: 7ef51c68&gt;) (102 . "}")</P>
<P>其102组中又有一330组,再查其数据,包含下列数据(不全)</P>
<P>(0 . "DICTIONARY") (5 . "D") (102 . <BR>"{ACAD_REACTORS") (330 . &lt;图元名: 7ef51c60&gt;) (102 . "}") (330 . &lt;图元名: <BR>7ef51c60&gt;) (100 . "AcDbDictionary") (280 . 0) (281 . 1) (3 . "AAA") (350 . <BR>&lt;图元名: 7ef51ee0&gt;))</P>
<P>在这个数据表中有我定义的编组名 (3 . "AAA") ,</P>
<P>我现在想搞清楚的是:由于上述的各数据表中都有多个330组数据,用你所给的代码,每次都取第一个330组,这样是不是能确保所取的图元名都有是我想要取得的,也就是说,这样取下来是不是一定得到编组名,会不会在取图元名中取到其它的图元名而出错,</P>

winabcd 发表于 2006-4-13 11:06:00

<P><A name=7641><FONT color=#990000><B>citykunan</B></FONT></A>:</P>
<P>我刚才又反复试过,如果在图形中定义了多个编组,返回的总是同一个编组名,而不管我选择哪一个编组中的实体。</P>

citykunan 发表于 2006-4-13 14:59:00

<P>try this.</P>
<P>(defun c:test ( / ent ent1 ent2 groupname groupname_list entname gro_ent_list entname )<BR>&nbsp;&nbsp; (setq ent (assoc 330 (entget (car (entsel)))))<BR>&nbsp;&nbsp; (setq ent1 (entget (cdr ent)))<BR>&nbsp;&nbsp; (setq ent2 (entget (cdr (assoc 330 ent1))))<BR>&nbsp;<BR>&nbsp;&nbsp; (setq groupname_list (MASSOC 3 ent2))<BR>&nbsp;&nbsp; (setq entname (MASSOC 350 ent2))</P>
<P>&nbsp;&nbsp; (while entname<BR>&nbsp;&nbsp;&nbsp;&nbsp; (setq gro_ent_list (append (list (list (car entname) (car groupname_list))) gro_ent_list))<BR>&nbsp;&nbsp;&nbsp;&nbsp; (setq entname (cdr entname))<BR>&nbsp;&nbsp;&nbsp;&nbsp; (setq groupname_list (cdr groupname_list ))<BR>&nbsp;&nbsp; )<BR>&nbsp; (setq gro_ent_list (reverse gro_ent_list))</P>
<P>&nbsp;&nbsp; (setq entname (cdr (assoc -1 ent1)))<BR>&nbsp;&nbsp; (setq groupname nil)</P>
<P>&nbsp;&nbsp; (while (= groupname nil)<BR>&nbsp;&nbsp;&nbsp;&nbsp; (if (equal (car (car gro_ent_list)) entname)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq groupname (cadr (car gro_ent_list)))<BR>&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq gro_ent_list (cdr gro_ent_list))<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp; <BR>&nbsp;</P>
<P>&nbsp;&nbsp; (if ( =&nbsp; (cdr (assoc 71 ent1)) 1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ (strcat "\n" groupname " can be selectable"))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ (strcat "\n" groupname " can not be selectable"))<BR>&nbsp;&nbsp; )<BR>&nbsp; (princ)<BR>&nbsp;</P>
<P>)</P>
<P><BR>;(MASSOC 10 (entget obj))<BR>(defun massoc (key alist / x nlist)<BR>&nbsp; (foreach x alist<BR>&nbsp;&nbsp;&nbsp; (if (eq key (car x))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq nlist (cons (cdr x) nlist))<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp; )<BR>&nbsp; (setq nlist (reverse nlist))<BR>&nbsp; nlist<BR>)</P>
<P>&nbsp;</P>

狂刀无痕 发表于 2006-4-14 19:55:00

;|************************(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]
查看完整版本: [求助]有关编组的问题