乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 64|回复: 17

[编程交流] 创建图层描述时

[复制链接]

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 20:26:43 | 显示全部楼层 |阅读模式
大家好,我正在创建一个自定义下拉菜单,用于创建层,该菜单创建层名称、描述并设置层颜色、线型和线宽。我对宏和lisp真的很陌生,所以我真的不知道最好的方法。我是在浏览了不同的网站后想到这个的。
 
  1. ^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层。
 
 
干杯
阿德里安
回复

使用道具 举报

15

主题

209

帖子

121

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
163
发表于 2022-7-5 20:30:59 | 显示全部楼层
这对于宏(100层)来说是一项繁重的工作,请尝试以下操作:
分层生成器
 
你想做什么都可以,但我认为你最好从菜单上用Lisp程序的语言。如果你愿意走这条路,我可以帮你。
 
提姆
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

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

这种方法唯一的一点是,它不包括层管理器中的层描述。因此,在进一步挖掘之后,我发现了另一个惯例,但它在2008年不起作用:
 
  1. ^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;;

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

使用道具 举报

0

主题

252

帖子

290

银币

限制会员

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

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 20:44:18 | 显示全部楼层
你好,CmdrDuh
非常感谢您的回复,请您帮我处理xml文件,好吗?我不知道该怎么做,我认为这肯定是一个比我更好的解决方案。
干杯
 
阿德里安
回复

使用道具 举报

24

主题

1265

帖子

1028

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
362
发表于 2022-7-5 20:46:00 | 显示全部楼层
是的,不要对宏执行此操作。
 
单向-在Excel中创建一个CSV文件,该文件存储图层名称、颜色、线型等。
然后编写一个lisp例程来读取该文件并创建层。
通过这种方式,您可以随时更改CSV,并立即更新例程。
回复

使用道具 举报

0

主题

252

帖子

290

银币

限制会员

铜币
-8
发表于 2022-7-5 20:48:12 | 显示全部楼层
当然,如果XML是您想要的方式。正如RK所说,您也可以使用CSV文件。这是我的XML文件的一小部分,接下来我将发布读取它的VBA代码
回复

使用道具 举报

0

主题

252

帖子

290

银币

限制会员

铜币
-8
发表于 2022-7-5 20:51:34 | 显示全部楼层
这是读取文件的大部分代码
  1.       On Error GoTo Err_Control
  2.      Dim objXML As New DOMDocument
  3.      Dim objRoot As IXMLDOMElement
  4.      Dim objLNode As IXMLDOMElement
  5.      Dim objLayer As AcadLayer
  6.      Dim strFile As String
  7.      ThisDrawing.ActiveLayer = ThisDrawing.Layers("0")
  8.      
  9.      strFile = "C:\Program Files\autocad 2008\TEP SUPPORT\TEPLayers.xml"
  10.      objXML.Load strFile
  11.      Set objRoot = objXML.documentElement
  12.      For Each objLNode In objRoot.childNodes
  13.            Set objLayer = ThisDrawing.Layers.Add(objLNode.childNodes(0).Text)
  14.            If Not ThisDrawing.ActiveLayer.Name = objLayer.Name Then
  15.                  objLayer.Freeze = objLNode.childNodes(1).Text
  16.                  objLayer.LayerOn = objLNode.childNodes(2).Text
  17.      'objLayer.Lock = objLNode.childNodes(3).Text
  18.                  objLayer.Linetype = objLNode.childNodes(4).Text
  19.                  objLayer.color = objLNode.childNodes(5).Text
  20.                  objLayer.Description = objLNode.childNodes(6).Text
  21.            End If
  22.      Next objLNode
  23.      Set objXML = Nothing
  24.      Exit Sub
回复

使用道具 举报

0

主题

252

帖子

290

银币

限制会员

铜币
-8
发表于 2022-7-5 20:57:38 | 显示全部楼层
希望这有帮助
回复

使用道具 举报

24

主题

1265

帖子

1028

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
362
发表于 2022-7-5 20:58:46 | 显示全部楼层
 
...Excel也可以将数据保存为XML。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 08:53 , Processed in 0.424963 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表