步进选择集fo
大家好,我发布的代码效果很好,但我似乎觉得为同一个属性再次单步遍历选择集有些过分。我尝试了几种不同的方法,在单个选择集中多次编辑属性都无济于事,但无法使其正常工作。如蒙指导,不胜感激。
提前感谢,
秃鹰
;/////////////////////////////////////////////////////////////////////////////////////////
;
; F06 - Increment Attribute Value.
;
(defun CIT_IAV ()
(cond
((= CIT:IDFS "0")(setq ATAG$ (strcat ""FLRN$"-"BTAG$"-"SEQN$"")))
((= CIT:IDFS "1")(setq ATAG$ (strcat ""FLRN$""IDFR$"-"BTAG$"-"SEQN$""))))
(setq SSET(ssget "_l" (list (cons 0 "INSERT")(cons 66 1)))
INDX 0
ENAM(ssname SSET INDX)
ELST (entget ENAM))
(while
(/= (cdr (assoc 0 ELST)) "SEQEND")
(setq ELST (entget ENAM))
(if
(= "ID-TAG" (cdr (assoc 2 ELST)))
(progn
(entmod (subst (cons 1 ATAG$)(assoc 1 ELST) ELST))
(entupd ENAM)))
(setq ENAM (entnext ENAM)))
(setq INDX (1+ INDX)
SEQN# (atoi SEQN$)
SEQN# (+ SEQN# 1)
SEQN$ (itoa SEQN#)
SEQN$ (CIT_AT:NumFix SEQN$ 3)
CIT:SEQN SEQN$)
(CIT_RA)
(princ))
;
;/////////////////////////////////////////////////////////////////////////////////////////
;
; F07 - Rotate Attribute.
;
(defun CIT_RA ()
(setq SSET (ssget "_l" (list (cons 0 "INSERT")(cons 66 1)))
INDX 0
ENAM (ssname SSET INDX)
ELST (entget ENAM))
(while
(/= (cdr (assoc 0 ELST)) "SEQEND")
(setq ELST (entget ENAM))
(if
(= "ID-TAG" (cdr (assoc 2 ELST)))
(progn
(entmod (subst (cons 50 RAD#)(assoc 50 ELST) ELST))
(entupd ENAM)))
(setq ENAM (entnext ENAM)))
(setq INDX (1+ INDX))
(princ))
;
;/////////////////////////////////////////////////////////////////////////////////////////
; 很抱歉过早发布,但我找到了另一种方法。在所有情况下,我都想增加属性值,但并非所有情况下都需要旋转属性。我能够将其组合成一个函数,所以我对此没有意见。我将在不久的将来发布一个完整的代码。
谢谢
秃鹰 秃鹰,
当我处理修改多个属性时,我要做的一件事是在找到匹配项时设置一个标志。如果标志为T,则在SEQEND的循环结束后发出(entupd)。您确实需要在开始时将标志设置为零。
另一个选项根本不是调用(entupd),而是在例程结束时发出(命令“_.REGENALL”)
(entupd)真的会让一个大的纠察队陷入困境-大卫 你好,RenderMan,
我可以发布我所做的,但如果没有我仍在开发的完整代码,任何人都无法理解。正如我提到的,我将在不久的将来发布这段代码,这段代码很快就会实现,但它将位于一个完全不同的线程上。
我也是这么做的。我使用If语句来避免在属性不满足这些条件时旋转属性。
谢谢你的邀请。
;//////////////////////////////////////////////////////////////////////////////////////////////////////////////////;;F06-编辑属性值。;(defun CIT\u EAV()(cond(=CIT:IDFS“0”)(setq ATAG$(strcat”“FLRN$”-“BTAG$”-“SEQN$)((=CIT:IDFS“1”)(setq ATAG$(strcat”“FLRN$”“IDFR$”-“BTAG$”-“SEQN$)(setq SSET(ssget“\u l”(list(cons 0“INSERT”)(cons 66 1)))INDX 0 ENAM(ssname SSET INDX)ELST(entget ENAM))(而(/=(cdr(assoc 0 ELST))“SEQEND”)(setq ELST(entget ENAM))(if(=“ID-TAG”(cdr(assoc 2 ELST))(progn(entmod(subst(cons 1 ATAG$)(assoc 1 ELST)ELST))(entupd ENAM))(setq ENAM(entnext ENAM))(setq INDX(1+INDX)SEQN#(atoi SEQN$)SEQN#(+SEQN#1)SEQN$(itoa SEQN#)SEQN$(CIT U AT:NumFix SEQN$3)CIT:SEQN SEQN#)(if(and(>DEG#90.0)(
谢谢David,
很高兴知道,我会试试的。
还需要提及的是,如果满足某些条件,这是一个被多次修改的单一属性。
再次感谢
对不起,那个只秃鹰,我一定没有完全阅读你的帖子。帖子被删除了,非常感谢。 我想我们是在同一时间发布的。 大卫,
我刚刚试过regenall,这是一个更好的调用,因为我可以看到它的区别。
谢谢 大卫,
通过while循环,我一次只插入一个具有一个属性的块。如前所述,在所有情况下,属性值都将增加一。在某些情况下,属性增加后,可能会根据条件进行旋转。我发现在这种情况下,regenall方法似乎较慢,尽管它有点干净,但它表明每次都在重新定义块,尽管我知道事实并非如此,因为属性刚刚更新。我想我会坚持原来的方法,直到我发布了完整的代码来评估每个人,看看在这种情况下哪个方法实际上更好。
尽管如此,还是要谢谢你,不过我会等你的。当我发布完整的代码时,我使用的方法对您来说会更加明显。 秃鹰,
在整个例程结束时只发出1个regnell吗-大卫
页:
[1]
2