一键将所有选择内容更改为251号颜色,含所有块、块内文字、尺寸标志及所有尺寸内容- ;; ;; 一键改变所有选择内容为251号色。
- (defun c:ts (/ ss doc blks)
- (vl-load-com) ; 加载 ActiveX 支持
- (setvar "cmdecho" 0) ; 关闭命令回显
- ;; 解锁所有图层
- (command "layer" "u" "*" "s" "0" "")
- ;; 获取当前文档和块集合
- (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
- (setq blks (vla-get-blocks doc))
- ;; 遍历所有块并修改块名为 _archtick 的块颜色
- (vlax-for blk blks
- (if (= (vla-get-name blk) "_archtick")
- (vlax-for obj blk
- (vla-put-color obj 251) ; 修改块内对象颜色
- )
- )
- )
- ;; 选择对象
- (setq ss (ssget)) ; 选择对象
- ;; 如果选择集不为空
- (if ss
- (progn
- ;; 遍历选择集并修改颜色
- (vlax-for obj (vla-get-ActiveSelectionSet doc)
- (ChColor obj) ; 调用递归函数修改颜色
- )
- ;; 清除选择集
- (vla-delete (vla-get-ActiveSelectionSet doc))
- (princ "\n所有选择对象颜色已修改为 251 号色。")
- )
- (princ "\n未选择到任何对象。")
- )
- (princ)
- )
- ;; 递归函数:修改对象及其子对象的颜色
- (defun ChColor (obj / blkName)
- ;; 修改当前对象的颜色
- (vla-put-color obj 251)
- ;; 如果是块参照,递归处理块内的对象
- (if (and (= (vla-get-ObjectName obj) "AcDbBlockReference")
- (setq blkName (vla-get-name obj)))
- (progn
- ;; 递归处理块内对象
- (vlax-for subObj (vla-item blks blkName)
- (ChColor subObj) ; 递归处理块内对象
- )
- ;; 处理块内的属性文字
- (if (= (vla-get-HasAttributes obj) :vlax-true)
- (foreach att (vlax-invoke obj 'GetAttributes)
- (vla-put-color att 251) ; 修改属性文字颜色
- )
- )
- )
- )
- ;; 如果是属性文字,修改颜色
- (if (= (vla-get-ObjectName obj) "AcDbAttributeDefinition")
- (vla-put-color obj 251)
- )
- ;; 如果是多行文字或单行文字,修改颜色
- (if (wcmatch (vla-get-ObjectName obj) "*Text")
- (vla-put-color obj 251)
- )
- ;; 如果是尺寸标注,修改尺寸线、尺寸文字、尺寸界线等颜色
- (if (wcmatch (vla-get-ObjectName obj) "*Dimension")
- (progn
- (vla-put-DimensionLineColor obj 251) ; 尺寸线颜色
- (vla-put-ExtensionLineColor obj 251) ; 尺寸界线颜色
- (vla-put-TextColor obj 251) ; 尺寸文字颜色
- )
- )
- )
|