如果有多个块具有相同的标记,该程序将仅更改拾取块中属性的颜色。其中,使用“attsync”将更改所有类似块的属性颜色。 我的错误是,我没有首先测试代码。
看看这个。。。。。。。
(defun c:test (/ attribute b blk color i lst name obj sn ss do)
;;;;; Tharwat 01. June. 2012 ;;;;;
;;;;; This peice of code to change all ;;;;;
;;;;;selected objects (Blocks / Attribted Block / Objects) ;;;;;
(if (not acdoc)
(setq acdoc (vla-get-activedocument (vlax-get-acad-object)))
)
(if (and (setq color (acad_colordlg 7 t))
(setq ss (ssget "_:L"))
)
(progn
(vla-startundomark acdoc)
(repeat (setq i (sslength ss))
(setq obj (vlax-ename->vla-object
(setq sn (ssname ss (setq i (1- i))))
)
)
(cond
((eq (cdr (assoc 66 (entget sn))) 1)
(progn
(setq do t)
(vlax-for block (setq b (vla-item (vla-get-blocks acdoc)
(cdr (assoc 2 (entget sn)))
)
)
(vlax-for x b (vla-put-color x color))
)
(foreach attribute (vlax-invoke obj 'Getattributes)
(vla-put-color attribute color)
)
)
)
((and (eq (cdr (assoc 0 (entget sn))) "INSERT")
(not (member (cdr (assoc 2 (entget sn))) lst))
)
(progn
(setq lst (cons (cdr (assoc 2 (entget sn))) lst))
(vlax-for block
(setq blk (vla-item (vla-get-blocks acdoc)
(cdr (assoc 2 (entget sn)))
)
)
(if (eq :vlax-false (vla-get-isXref blk))
(vlax-for x blk
(if
(not
(eq "AcDbBlockReference" (vla-get-objectname x))
)
(vla-put-color x color)
)
)
)
)
)
)
(t (vla-put-color obj color))
)
)
(if do
(vl-cmdf "_.attsync"
"_name"
(cdr (assoc 2 (entget sn)))
""
)
)
(vla-regen acdoc acAllViewports)
(vla-endundomark acdoc)
)
(princ)
)
(princ "\n Written by Tharwat Al Shoufi ")
(princ)
)
@塔尔瓦特。。。现在很好。。。非常感谢。
S
谢谢你Steve 我对您的代码Tharwat有一些评论和警告,请从中吸取您的经验:
1)
如果用户选择三维多段线会怎样?
2)
我特别关注你们节目的这两部分。
因为,对于选定的每个不同的非属性块或属性块,您首先检索文档块集合,但更令人担忧的是,您正在重复迭代块定义中包含的每个对象,迭代次数等于块中对象的数量。
这是您的代码当前正在执行的操作:
因此,如果一个块包含100个对象(并非罕见,如果有任何情况,这可能是一个较低的估计值),代码将在10000个对象上迭代,因为每个对象被处理100次。。。!!!
3)
由于AttSync操作更新块引用以反映对块定义内属性所做的任何更改,因此此过程只需执行一次,而不是针对每个块引用。
编辑:我看到你已经更新了你的代码来解决这个问题,因为写这篇文章。 值得一提的是,附件是我对这项任务的看法。
附加的程序将允许用户修改图形中定义的多个块内所有对象(位于解锁层上)的颜色特性。
该程序将使用标准块、属性块和动态块。
李
BlockColorV1-0。lsp 谢谢李,这很好用。Tharwat的代码和你的代码产生了相同的结果,但将用于不同的场景。你的两个代码将使我的生活更轻松。现在我只需要将其重命名为“BCT”和“BCL”,我是一个快乐的球童。
请注意,您将其命名为bcolor_2;1.0版。这是否意味着您稍后将改进此代码并将其添加到您的程序(网站)?如果是这样,是否可以添加最后选定块的预览。我不需要它,但它可能会很酷。再次感谢各位!
哎呀,我忘了3D多边形。
这是正确的,它的循环比需要的要多。所以今天晚些时候我会继续研究,然后再回来。
谢谢 我认为现在效率要高得多。。。。
5 快速查看您的代码:
建议您交换订单。首先选择对象,然后提示输入颜色:
当前代码无法在选择时根据匿名名称识别有效名称:
页:
1
[2]