The Buzzard 发表于 2022-7-6 10:20:28

步进选择集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))
;
;/////////////////////////////////////////////////////////////////////////////////////////
;

The Buzzard 发表于 2022-7-6 10:24:10

很抱歉过早发布,但我找到了另一种方法。在所有情况下,我都想增加属性值,但并非所有情况下都需要旋转属性。我能够将其组合成一个函数,所以我对此没有意见。我将在不久的将来发布一个完整的代码。
 
谢谢
秃鹰

David Bethel 发表于 2022-7-6 10:27:59

秃鹰,
 
当我处理修改多个属性时,我要做的一件事是在找到匹配项时设置一个标志。如果标志为T,则在SEQEND的循环结束后发出(entupd)。您确实需要在开始时将标志设置为零。
 
另一个选项根本不是调用(entupd),而是在例程结束时发出(命令“_.REGENALL”)
 
(entupd)真的会让一个大的纠察队陷入困境-大卫

The Buzzard 发表于 2022-7-6 10:31:24

你好,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)(

The Buzzard 发表于 2022-7-6 10:35:07

 
谢谢David,
 
很高兴知道,我会试试的。
还需要提及的是,如果满足某些条件,这是一个被多次修改的单一属性。
再次感谢

BlackBox 发表于 2022-7-6 10:38:44

 
 
对不起,那个只秃鹰,我一定没有完全阅读你的帖子。帖子被删除了,非常感谢。

The Buzzard 发表于 2022-7-6 10:40:32

我想我们是在同一时间发布的。

The Buzzard 发表于 2022-7-6 10:45:38

大卫,
 
我刚刚试过regenall,这是一个更好的调用,因为我可以看到它的区别。
 
谢谢

The Buzzard 发表于 2022-7-6 10:47:29

大卫,
 
通过while循环,我一次只插入一个具有一个属性的块。如前所述,在所有情况下,属性值都将增加一。在某些情况下,属性增加后,可能会根据条件进行旋转。我发现在这种情况下,regenall方法似乎较慢,尽管它有点干净,但它表明每次都在重新定义块,尽管我知道事实并非如此,因为属性刚刚更新。我想我会坚持原来的方法,直到我发布了完整的代码来评估每个人,看看在这种情况下哪个方法实际上更好。
 
尽管如此,还是要谢谢你,不过我会等你的。当我发布完整的代码时,我使用的方法对您来说会更加明显。

David Bethel 发表于 2022-7-6 10:53:21

秃鹰,
 
在整个例程结束时只发出1个regnell吗-大卫
页: [1] 2
查看完整版本: 步进选择集fo