本帖最后由 llsheng_73 于 2022-7-19 17:58 编辑
- ;|(Mpurge DOC'((groups t)(Layouts)(SelectionSets )(blocks)(layers)(textstyles)(dimstyles)(Linetypes)(Viewports)(Views)(UserCoordinateSystems)))
- 清理Doc文档下的空组、删除布局、空选择集、清理未引用块、字体样式、标注样式、线型、视口、视图、ucs;
- lst表每一项第一个为文档下的各种集合,出现第二项且非nilt时,清理该集合下的空对象,无第二项或第二项非真时,尽可能删除集合下所有对象;
- DOC为当前CAD对象下的任一文档对象或dbx对象,doc为nil或非文档对象时,被自动设置为当前文档|;
- (defun Mpurge(DOC LST / l n)
- (or(not(VL-CATCH-ALL-ERROR-P(VL-CATCH-ALL-APPLY'vlax-get-property(List doc 'Database))))
- (setq DOC(vlax-get-property(vlax-get-acad-object)'ActiveDocument)))
- (vl-every(function(lambda(x / a b)
- (or(VL-CATCH-ALL-ERROR-P(setq a(VL-CATCH-ALL-APPLY 'vlax-get-property(list doc(car x)))))
- (progn(setq n(1+(vlax-get-property a'count)))
- (while(<(setq l(vlax-get-property a'count))n)
- (setq n l)
- (vlax-for y a
- (and(if(cdr x)(<(vlax-get-property y'count)1)t)
- (VL-CATCH-ALL-APPLY 'vlax-invoke-method(list y 'delete))))))
- t)))LST))
测试时,我换2台电脑用2006清理嵌套块出错,但其它版本CAD下测试正常,不知道究竟是电脑问题还是CAD2006的问题
|