本帖最后由 happysheep 于 2014-3-14 16:31 编辑
在论坛上从诸位前辈的代码中学到了很多东西,谢谢大家!
程序使用LAY启动,功能如下:
单选反锁(S)<默认>:选择一个对象,除此对象所在层以外的所有层,锁定并变成灰色;
锁定指定层(L):选择一个或多个对象,其所在的层锁定并变成灰色。如果对象是外部引用或块,其内部的层也如此处理。此命令对嵌套的外部引用或块同样有效。
单独解锁一层(U):选择一个或多个对象,其所在的层解锁并恢复原色。如果对象是外部引用或块,其内部的层也如此处理。此命令对嵌套的外部引用或块同样有效。
全部解锁(UU) :将图中所有图层解锁并恢复颜色。
程序现在的问题是,
1. 标注中的数字,原本是白色,锁定时被变为随层,解锁时变回来。但程序中用的是命令entupd,运行时间较长,有没有更好的办法?
变为随层:
- (if (= (vla-get-ObjectName obj) "AcDbRotatedDimension")
- (vla-put-textcolor obj acbylayer)
- )
变回白色:
- (if (= (vla-get-ObjectName obj) "AcDbRotatedDimension")
- (vla-put-textcolor obj acWhite)
- )
2. 为了解决标注文字颜色不随层的问题,单独把嵌套的外部引用中的所有对象递归遍历了一遍,造成程序运行时间较长,如何解决?
- (defun Dim-Restore-Recursion (obj / SubObj)
- (if (= (vla-get-ObjectName obj) "AcDbRotatedDimension")</span>
- (vla-put-textcolor obj acWhite)
- )
- (if (= (vla-get-ObjectName obj) "AcDbBlockReference")</span>
- (vlax-for SubObj
- (vla-item (vla-get-blocks doc)
- (vla-get-name obj) ;获得块名
- )
- (Dim-Restore-Recursion SubObj)
- )
- )
- )
以下是程序全文: |