交换图层名和的值
你好我在一家国际公司工作,我们有一个层次结构,其中层名称是当地语言,层描述是英文层名称。
有人知道一个允许用户交换这些值的例程吗?
即。
图层名称图层描述
Schraffur舱口
运行代码
后果
图层名称图层描述
Hatch Schraffur公司
我知道层转换器存在,但这可能会更好地满足我们的需要。
谢谢 正如在AUGI上发布的,为了CADTutor的读者:
(defun c:test nil (vl-load-com)
(vlax-for layer (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
(vl-catch-all-apply
(function
(lambda ( / ln ld )
(setq ln (vla-get-name layer)
ld (vla-get-description layer)
)
(vla-put-description layer ln)
(vla-put-name layer ld)
)
)
)
)
(princ)
)
这些应该给你一个跳跃的开始。。。
一次一层:
(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))
请注意,如果层名称中已经存在重复的层描述,则此功能将失败。试着自己修复一下,我会在必要时帮助缓解。
希望这有帮助! 看来李(又)揍了我一拳叹气:
但你的答案更完整
伙计们,很高兴你们两个都不是在一个“出类拔萃的牛仔游戏”。
有人可能会受伤。。。
很酷,马可。
谢谢李,你这么说真是太好了。
我想问问你对此的看法;包括开始和结束撤消标记等,我是否过火了。?简洁是智慧的灵魂,好吧,与你的代码相比,我自己的代码当然不那么聪明。英雄联盟
当你看到它们(你的代码和我的代码)并排出现时,你会觉得开销很大。
这是我的步枪,这是我的迭代LayersCollection,因此已经有了VLA层对象(绑定到变量“x”)。然后,获得每个层对象的名称,将其传递给sub,sub继续获取Layers集合(再次),并检索在遍历vlax for循环时首先已经拥有的层对象(再次)。
谢谢feargt
请注意,我刚刚纠正了上述代码中的一个拼写错误(遗漏了一个“layer”变量)。 等等,还有一条这样的线?!?!
页:
[1]
2