更改表格属性
大家好,我想在这里做一件简单的事,但我想不出来。我正在尝试将图形中所有表格的默认文本颜色更改为黑色。我可以通过选择每个表,转到“属性”,然后将列表顶部的“颜色”属性更改为黑色(如附件中的“ByLayer”图片),但我正在尝试在autolisp中执行此操作
(vlax-for
tablestyle
(vla-item (vla-get-Dictionaries (vla-get-ActiveDocument (vlax-get-acad-object))) "acad_tablestyle")
(vlax-put-property tablestyle 'Color 0 0 0)
)
上面是我尝试改变桌子的样式(似乎比浏览每张桌子都要容易),但玩了几个小时后,我仍然一事无成。有人能给我指出正确的方向吗?
如果我答对了,如果您试图更改图形中已经存在的多个表的颜色,只需创建一个全局选择集并迭代每个表对象,然后使用函数vla put color更改颜色,并使用所需的颜色。
HTH。 我原以为更改样式会更容易,但你说得对-在选择集中循环要容易得多。谢谢你的想法!
任何感兴趣的人的解决方案:
(vl-load-com)
(if (setq sset (ssget "X" '((0 . "ACAD_TABLE"))))
(progn
(setq ctr 0)
(repeat (sslength sset)
(setq item (ssname sset ctr))
(setq item (vlax-ename->vla-object item))
(setq check (vlax-property-available-p item "Color" T))
(if check
(vlax-put-property item 'Color 0)
)
(setq ctr (1+ ctr))
)
)
(princ)
)
仔细看看这个。
(defun c:Test (/ ss i vl)
(if (setq ss (ssget "_X" '((0 . "ACAD_TABLE"))))
(repeat (setq i (sslength ss))
(if (vlax-write-enabled-p (setq vl (vlax-ename->vla-object (ssname ss (setq i (1- i))))))
(vla-put-color vl 0)
)
)
)
(princ)
)(vl-load-com) 除了检查块是否已启用写之外,看起来与我发布的内容相同。我不希望区块受到保护,但我认为最好检查一下。
我注意到的一件事是,这对块内的表不起作用:/但希望不会发生这种情况
尝试此例程,阅读例程顶部的注释以了解更多信息。
(defun c:Test (/ doc ss i vl)
;; Tharwat 08.July.2014 ;;
;; Function to change the color of ;;
;; AutoCAD Tables in all layouts and ;;
;; Blocks as well . ;;
;; ----------------------------- ;;
;; Tables on LOCKED layers should ;;
;; be ignored ;;
(defun *error* (msg)
(and doc (vla-endundomark doc))
(if (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*EXIT*")
(princ msg)
(princ (strcat "\n** Error: " msg " **"))
)
(princ)
)
(vla-startUndomark (setq doc (vla-get-activedocument (vlax-get-acad-object))))
(if (ssget "_X" '((0 . "ACAD_TABLE")))
(progn (vlax-for tbl (setq ss (vla-get-activeselectionset doc))
(if (vlax-write-enabled-p tbl)
(vla-put-color tbl 0)
)
)
(vla-delete ss)
)
)
(vlax-for bks (vla-get-blocks doc)
(if (and (eq :vlax-false (vla-get-isxref bks)) (eq :vlax-false (vla-get-islayout bks)))
(vlax-for bk bks
(if (and (eq (vla-get-objectname bk) "AcDbTable") (vlax-write-enabled-p bk))
(vla-put-color bk 0)
)
)
)
)
(vla-regen doc AcAllviewports)
(vla-endundomark doc)
(princ)
)(vl-load-com)
有道理;首先更改所有表,然后查看块内部并在那里更改表。我对vla get blocks命令不太了解,看起来我需要仔细阅读它。
在调用vlax命令时,重新定义错误函数有什么特别的原因吗?或者这只是标准过程吗?
很好。
一个很好的问题。
实际上,我添加了error函数来确保如果发生任何错误,那么error函数应该结束已经启动的start undo标记。
由于模型空间和图纸空间块包含在文档的块集合中,因此不需要单独检索和迭代非嵌套表的选择集:
还要注意,ACI颜色0是ByBlock,而不是黑色-对于黑色,您需要使用真彩色。 谢谢李的留言。
是的,我完全忘记了用块集合迭代空间的方法。
页:
[1]