本帖最后由 自贡黄明儒 于 2012-8-21 12:25 编辑
;;减少图层时,力求不影响打印效果
;;用户只有一个选择[根据颜色/根据线型/根据线宽],因而操作容易
;;在明经泡了这么久,一直没有找到这样的工具.通过不断打坐和冥想,现在基本上写成现在的这个样子
;;有时,从设计院来的图,经过几个专业之后,图层有几百个之多,对于后来的处理实在麻烦,我一直想有减少图层的工具,在我的日志上贴出了一个不太成熟的东西
;;本程序是根据highflybird的改变块的颜色改编而来,在此对highflybird表示鸣谢!!!
;;对于颜色我是按索引号处理,虽然我不是色盲,对于颜色转换也不知怎么处理,尽管highflybird和C版都发表有相关程序
;;图中有尺寸时,Defpoints是删不掉的.
;;图层的删除我是用下面(HH:purge)命令删除的.有些软件生成的层(比如<钢构>),尽管图中没有它生成的任何对象,也删不掉图层,不知他们是怎么搞的
 - (defun HH:purge ()
- (vl-Catch-All-Apply
- '(lambda ()
- (vla-Remove
- (vla-GetExtensionDictionary
- (vla-Get-Layers
- (vla-Get-ActiveDocument (vlax-Get-Acad-Object))
- )
- )
- "ACAD_LAYERFILTERS"
- )
- )
- )
- (repeat 3
- (vla-purgeall
- (vla-get-activedocument (vlax-get-acad-object))
- )
- )
- )
- ;;下面的命令(DeleteLayer LayerName)删除图层好象也不太好使,不知哪位有没有更好的办法?
- ;;删除图层
- (defun DeleteLayer (LayerName / AcadDocument LayerSel LayerObj)
- (setq AcadDocument (vla-get-activedocument (vlax-get-acad-object)))
- (setq LayerSel (vla-get-layers AcadDocument))
- (setq LayerObj (vl-catch-all-apply 'vla-item (list LayerSel LayerName)))
- (cond
- ((vl-catch-all-error-p LayerObj)
- (princ
- (strcat "\nError occurs when deleting Layer " LayerName "!")
- )
- )
- ((= (vla-get-name (vla-get-activelayer AcadDocument))
- LayerName
- )
- (princ (strcat "\nLayer " LayerName " is current layer!"))
- )
- (t (vla-delete LayerObj))
- )
- )
|