adrianqy 发表于 2022-7-5 20:26:43

创建图层描述时

大家好,我正在创建一个自定义下拉菜单,用于创建层,该菜单创建层名称、描述并设置层颜色、线型和线宽。我对宏和lisp真的很陌生,所以我真的不知道最好的方法。我是在浏览了不同的网站后想到这个的。
 
^C^C^C(setq clyr (getvar "clayer"))(setq LayObj(vla-add(vla-get-layers(vla-get-ActiveDocument(vlax-get-acad-object)))"A-004-DOOR_ID"))(vla-Put-Description layObj "Identification Tags Doors numbers")(vla-put-Color layObj "9")(vla-put-LineType layObj "CONTINUOUS")(SETVAR "CLAYER" "A-004-DOOR_ID")(setvar "clayer" CLYR)
 
谁能帮我做一下这个动作吗。我希望层也成为当前层。我只是不知道为什么不工作。
 
我还有一个问题,这是从下拉菜单创建层的最简单方法,因为我的列表中有1000层。
 
 
干杯
阿德里安

TimSpangler 发表于 2022-7-5 20:30:59

这对于宏(100层)来说是一项繁重的工作,请尝试以下操作:
分层生成器
 
你想做什么都可以,但我认为你最好从菜单上用Lisp程序的语言。如果你愿意走这条路,我可以帮你。
 
提姆

adrianqy 发表于 2022-7-5 20:36:58

嗨,蒂姆,我得说,我很喜欢你的方法。然而,在我们的办公室里,我们决定采用下拉菜单的方式,因为我们在全国有几个办公室,我需要想出一些整洁的东西,让最终用户从网络上轻松获得。我开始创建这个cui文件,开始时,我使用此例程将图层引入到我的文件中:
 
^C^C.-layer m A-002-ANTN c 6 A-002-ANTN lt CONTINUOUS;;;

这种方法唯一的一点是,它不包括层管理器中的层描述。因此,在进一步挖掘之后,我发现了另一个惯例,但它在2008年不起作用:
 
^C^C-la;m;A-001-BLK_INSRT;c;2;A-001-BLK_INSRT;lw;0.35;;l;continuous;A-001-BLK_INSRT;_D;(Bearings,Distances,Co-ordinates);A-001-BLK_INSRT;;

如果你有时间,我会非常感谢你的帮助,非常感谢
 
阿德里安

CmdrDuh 发表于 2022-7-5 20:38:05

嗯,从管家的角度来看,我认为你正在制造一场管理噩梦。您所做的一切都会奏效,但您必须在cui编辑器中手动编程每个层,这可能需要很长时间。最重要的是,如果你必须进行更改,你必须将CUI发送给每个需要它的人,以更新他们的机器。您应该研究LISP或VBA解决方案,该解决方案可以读取可以发布在用户指向的网络上进行更新的外部文件。通过这种方式,您可以在网络上更新文件,一旦单击“保存”,用户就会被更新。我在网络上使用XML作为我的文件,这让我可以做任何你想做的事情。然后可以从cui文件下拉菜单中调用它。您还可以为不同的办公室或不同的项目创建多个文件。

adrianqy 发表于 2022-7-5 20:44:18

你好,CmdrDuh
非常感谢您的回复,请您帮我处理xml文件,好吗?我不知道该怎么做,我认为这肯定是一个比我更好的解决方案。
干杯
 
阿德里安

rkmcswain 发表于 2022-7-5 20:46:00

是的,不要对宏执行此操作。
 
单向-在Excel中创建一个CSV文件,该文件存储图层名称、颜色、线型等。
然后编写一个lisp例程来读取该文件并创建层。
通过这种方式,您可以随时更改CSV,并立即更新例程。

CmdrDuh 发表于 2022-7-5 20:48:12

当然,如果XML是您想要的方式。正如RK所说,您也可以使用CSV文件。这是我的XML文件的一小部分,接下来我将发布读取它的VBA代码

CmdrDuh 发表于 2022-7-5 20:51:34

这是读取文件的大部分代码
      On Error GoTo Err_Control
   Dim objXML As New DOMDocument
   Dim objRoot As IXMLDOMElement
   Dim objLNode As IXMLDOMElement
   Dim objLayer As AcadLayer
   Dim strFile As String
   ThisDrawing.ActiveLayer = ThisDrawing.Layers("0")
   
   strFile = "C:\Program Files\autocad 2008\TEP SUPPORT\TEPLayers.xml"
   objXML.Load strFile
   Set objRoot = objXML.documentElement
   For Each objLNode In objRoot.childNodes
         Set objLayer = ThisDrawing.Layers.Add(objLNode.childNodes(0).Text)
         If Not ThisDrawing.ActiveLayer.Name = objLayer.Name Then
               objLayer.Freeze = objLNode.childNodes(1).Text
               objLayer.LayerOn = objLNode.childNodes(2).Text
   'objLayer.Lock = objLNode.childNodes(3).Text
               objLayer.Linetype = objLNode.childNodes(4).Text
               objLayer.color = objLNode.childNodes(5).Text
               objLayer.Description = objLNode.childNodes(6).Text
         End If
   Next objLNode
   Set objXML = Nothing
   Exit Sub

CmdrDuh 发表于 2022-7-5 20:57:38

希望这有帮助

rkmcswain 发表于 2022-7-5 20:58:46

 
...Excel也可以将数据保存为XML。
页: [1] 2
查看完整版本: 创建图层描述时