这些应该给你一个跳跃的开始。。。
一次一层:
- (defun c:LAYSWAP (/ layerName activeDoc layerItem oldDescription)
- (princ "\rLAYER SWAP ")
- (vl-load-com)
- (if (and (setq layerName (getstring T "\nEnter layer name to swap: "))
- (setq layerName (cdr (assoc 2 (tblsearch "layer" layerName)))))
- (progn
- (vla-startundomark
- (setq activeDoc (vla-get-activedocument (vlax-get-acad-object))))
- (setq layerItem (vla-item (vla-get-layers activeDoc) layerName))
- (setq oldDescription (vla-get-description layerItem))
- (vla-put-description layerItem layerName)
- (vla-put-name layerItem oldDescription)
- (vla-endundomark activeDoc))
- (prompt "\n** Layer does not exist ** "))
- (princ))
这将一次处理所有层:
- (defun c:LAYSWAP (/ *error* _layswap activeDoc layerName)
- (princ "\rLAYER SWAP ")
- (vl-load-com)
- (defun *error* (msg)
- (vla-endundomark activeDoc)
- (cond ((not msg)) ; Normal exit
- ((member msg '("Function cancelled" "quit / exit abort"))) ; <esc> or (quit)
- ((princ (strcat "\n** Error: " msg " ** ")))) ; Fatal error, display it
- (princ))
- (defun _layswap (layerName / oLayers layerDesc)
- (if
- (and
- (setq
- layerItem (vla-item
- (setq oLayers (vla-get-layers activeDoc))
- layerName))
- (setq layerDesc (vla-get-description layerItem))
- (setq layerName (vla-get-name layerItem)))
- (progn
- (vla-put-name layerItem layerDesc)
- (vla-put-description layerItem layerName))))
-
- (vla-startundomark
- (setq activeDoc (vla-get-activedocument (vlax-get-acad-object))))
- (vlax-for x (vla-get-layers activeDoc)
- (if (not (vl-position (strcase (setq layerName (vla-get-name x))) '("0" "DEFPOINTS")))
- (_layswap layerName)))
- (vla-endundomark activeDoc)
- (princ))
请注意,如果层名称中已经存在重复的层描述,则此功能将失败。试着自己修复一下,我会在必要时帮助缓解。
希望这有帮助! |