当我开始写Edit_bloc(2004)的时候,我的目标就是避免做你已经做过的事情:因为它们的创建单元而缩放引用。。。
这是一个根据插入比例重新定义块的快捷方法。
它不处理非均匀缩放的引用。
嵌套块的不可预测结果(因为它们可以在父块中重新定义和重新缩放)。
- (defun c:rescaleBlocks (/ acdoc blocks ss scl name def base)
- (vl-load-com)
- (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object))
- blocks (vla-get-Blocks acdoc)
- )
- (if (ssget "_X" '((0 . "iNSERT")))
- (progn
- (vla-StartUndoMark acdoc)
- (vlax-for b (setq ss (vla-get-ActiveSelectionSet acdoc))
- (setq scl (vla-get-XScaleFactor b))
- (if (and (= scl (vla-get-YScaleFactor b) (vla-get-ZScaleFactor b))
- (/= 1.0 scl)
- (setq name (vla-get-Name b))
- (setq def (vla-item blocks name))
- )
- (progn
- (setq base (vla-get-Origin def))
- (vlax-for o def
- (vla-ScaleEntity o base scl)
- )
- (vla-put-XScaleFactor b 1.0)
- (vla-put-YScaleFactor b 1.0)
- (vla-put-ZScaleFactor b 1.0)
- (if (vla-get-HasAttributes b)
- (vl-cmdf "_.attsync" "_name" name)
- )
- )
- )
- )
- (vla-Delete ss)
- (vla-Regen acdoc acAllViewports)
- (vla-EndUndoMark acdoc)
- )
- )
- (princ)
- )
|