乐筑天下

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

[编程交流] 图层标准例程

[复制链接]

12

主题

31

帖子

19

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 23:33:28 | 显示全部楼层 |阅读模式
我有下面的代码。这将把我们公司的所有图层插入到一个新的绘图中。。。如果他们还不在那里。如果图层已在图形中,是否有方法将图形中的现有图层特性(颜色和线型)更改为插入块的特性?这将非常有帮助,因为我正在更新我们的颜色标准。
 
  1. (defun c:SAA ()
  2. (command "_.layer" "_set" "0" "")
  3. (command "_purge" "blocks" "LAYERS" "y" "y")
  4. (setq new (getpoint "\n SPECIFY INSERTION POINT:"))
  5. (command "_insert" "LAYERS" new "1" "" "0" "")  
  6. (command "explode" (entlast) "")
  7. (command "change" (entlast) "" "properties" "la" "0" "")
  8. (princ)
  9. )
回复

使用道具 举报

4

主题

194

帖子

192

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 23:44:10 | 显示全部楼层
看起来你在一个名为“layers”的块中拥有所有层,为什么你会关心插入点,只需指定点“0,0”。
 
如果您将所有层都列在一个外部“txt”文件中,您可以循环安装所有层。
“txt”文件更易于编辑和添加,您可以使用Excel创建文件。。。。
回复

使用道具 举报

4

主题

194

帖子

192

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 23:46:58 | 显示全部楼层
另一种选择是在acad中创建层。lsp文件,因此每次打开图形时,它都确保具有所有正确的图层,而无需用户参与。(只是不喜欢分解块法)
 
BricsCAD中的“acad.lsp”或“on_start.lsp”中的类似内容应该可以做到这一点(下面的代码包含两层“test1”和“test2”)
 
  1. (foreach x '(( "test1" "yellow") ( "test2" "green" ) )
  2. (vl-cmdf "_.layer" "N" (car x) "C" (cadr x) (car x) "")
  3. )

 
这还具有更新现有图层上的线型、颜色或输入的任何其他信息的附加好处。(你正在努力实现的目标)
回复

使用道具 举报

12

主题

31

帖子

19

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 23:53:14 | 显示全部楼层
 
 
雪果。。。我使用块方法,以便人们可以简单地匹配属性。因此,在指定的屏幕点插入的块具有所有层名称(在正确的层上)和每个名称下的一行,每个名称也在正确的层上。插入点不能在0,0,因为这是我们平面图左下角的位置。
回复

使用道具 举报

12

主题

31

帖子

19

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 00:03:24 | 显示全部楼层
 
我负责开发我们办公室的CAD标准,我从一个非常初级的分层系统变成了一个相当复杂的系统。我已经设置了所有图层名称,但在过去一年中,我已经更改了几次颜色。我想让这个例程有能力被插入到一个已经有图层,但可能与旧的颜色,并改变颜色到新的更新版本的绘图。。。
回复

使用道具 举报

4

主题

194

帖子

192

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 00:05:54 | 显示全部楼层
使用我发布的方法也将更新现有图层上的颜色,这就是为什么我使用该颜色作为示例。(也可以使用颜色编号而不是名称)
 
实施CAD标准的更好方法之一是在acad中这样做。lsp文件(也可以将其设置为加密的FAS文件,这样用户就不会弄乱它),这确保了每次打开图形时都会强制执行标准。(同样,不需要用户输入)
回复

使用道具 举报

12

主题

31

帖子

19

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 00:10:29 | 显示全部楼层
所以在你发布的方法中,我必须用所有层替换“test1”和“test2”。。。对的
只是想弄清楚我将把你的代码部分放在我的代码中的什么地方,以及我需要多深入。
回复

使用道具 举报

4

主题

194

帖子

192

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 00:19:14 | 显示全部楼层
我的代码“test1”和“test2”只是示例层名称。您需要按照我用于示例层的格式列出所有层和颜色。(带引号和括号,如图所示)
回复

使用道具 举报

12

主题

31

帖子

19

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 00:23:42 | 显示全部楼层
好啊所以我还是个新手。。。你能告诉我这些函数实际上是做什么的吗?
现有的颜色需要放在图层名称的旁边,还是只需要列出我想要的颜色?
第二行以vl cmdf开头。。。我需要修改你的代码吗?
回复

使用道具 举报

4

主题

194

帖子

192

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 00:30:16 | 显示全部楼层
您根本不需要现有的颜色,层名称旁边的颜色是新颜色(它必须在那里…)。谁知道用户对图层颜色做了什么。。。
 
如果你只需要图层名和颜色,你不需要对代码做任何事情,只需要创建列表。要设置线型和宽度等,还需要将其添加到代码中。要关闭图层,请使用负数作为颜色。
 
vl cmdf是vl相当于“command”(您在代码中使用的命令),它在完成时返回T,而不是像command那样返回nil。它运行得更干净。。。。(除其他外)
 
foreach行使foreach中列出的操作(在本例中是vl cmdf)应用于列表中的每个项目,列表中的每个项目每次都通过函数分配给“x”,其中“x”通过列表索引直到完成。
 
在这种情况下,主列表中有子列表,子列表(“test1”“黄色”)等。。每层一个,共同构成主列表。
 
运算符创建列表。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 00:10 , Processed in 0.388567 second(s), 72 queries .

© 2020-2025 乐筑天下

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