乐筑天下

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

[编程交流] 交换图层名和的值

[复制链接]

23

主题

132

帖子

112

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
114
发表于 2022-7-6 09:14:53 | 显示全部楼层 |阅读模式
你好
我在一家国际公司工作,我们有一个层次结构,其中层名称是当地语言,层描述是英文层名称。
 
有人知道一个允许用户交换这些值的例程吗?
 
即。
 
图层名称图层描述
Schraffur舱口
 
运行代码
 
后果
 
图层名称图层描述
Hatch Schraffur公司
 
我知道层转换器存在,但这可能会更好地满足我们的需要。
 
谢谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:23:29 | 显示全部楼层
正如在AUGI上发布的,为了CADTutor的读者:
 
  1. ([color=BLUE]defun[/color] c:test [color=BLUE]nil[/color] ([color=BLUE]vl-load-com[/color])
  2. ([color=BLUE]vlax-for[/color] layer ([color=BLUE]vla-get-layers[/color] ([color=BLUE]vla-get-activedocument[/color] ([color=BLUE]vlax-get-acad-object[/color])))
  3.    ([color=BLUE]vl-catch-all-apply[/color]
  4.      ([color=BLUE]function[/color]
  5.        ([color=BLUE]lambda[/color] ( [color=BLUE]/[/color] ln ld )
  6.          ([color=BLUE]setq[/color] ln ([color=BLUE]vla-get-name[/color] layer)
  7.                ld ([color=BLUE]vla-get-description[/color] layer)
  8.          )
  9.          ([color=BLUE]vla-put-description[/color] layer ln)
  10.          ([color=BLUE]vla-put-name[/color] layer ld)
  11.        )
  12.      )
  13.    )
  14. )
  15. ([color=BLUE]princ[/color])
  16. )
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:27:44 | 显示全部楼层
这些应该给你一个跳跃的开始。。。
 
一次一层:
  1. (defun c:LAYSWAP (/ layerName activeDoc layerItem oldDescription)
  2. (princ "\rLAYER SWAP ")
  3. (vl-load-com)
  4. (if (and (setq layerName (getstring T "\nEnter layer name to swap: "))
  5.           (setq layerName (cdr (assoc 2 (tblsearch "layer" layerName)))))
  6.    (progn
  7.      (vla-startundomark
  8.        (setq activeDoc (vla-get-activedocument (vlax-get-acad-object))))
  9.      (setq layerItem (vla-item (vla-get-layers activeDoc) layerName))
  10.      (setq oldDescription (vla-get-description layerItem))
  11.      (vla-put-description layerItem layerName)
  12.      (vla-put-name layerItem oldDescription)        
  13.      (vla-endundomark activeDoc))
  14.    (prompt "\n** Layer does not exist ** "))
  15. (princ))

 
这将一次处理所有层:
  1. (defun c:LAYSWAP (/ *error* _layswap activeDoc layerName)
  2. (princ "\rLAYER SWAP ")
  3. (vl-load-com)
  4. (defun *error*  (msg)
  5.    (vla-endundomark activeDoc)
  6.    (cond ((not msg))                                                   ; Normal exit
  7.          ((member msg '("Function cancelled" "quit / exit abort")))    ; <esc> or (quit)
  8.          ((princ (strcat "\n** Error: " msg " ** "))))                 ; Fatal error, display it
  9.    (princ))
  10. (defun _layswap  (layerName / oLayers layerDesc)
  11.    (if
  12.      (and
  13.        (setq
  14.          layerItem (vla-item
  15.                      (setq oLayers (vla-get-layers activeDoc))
  16.                      layerName))
  17.        (setq layerDesc (vla-get-description layerItem))
  18.        (setq layerName (vla-get-name layerItem)))
  19.       (progn
  20.         (vla-put-name layerItem layerDesc)
  21.         (vla-put-description layerItem layerName))))
  22. (vla-startundomark
  23.        (setq activeDoc (vla-get-activedocument (vlax-get-acad-object))))
  24. (vlax-for x (vla-get-layers activeDoc)
  25.    (if (not (vl-position (strcase (setq layerName (vla-get-name x))) '("0" "DEFPOINTS")))
  26.      (_layswap layerName)))
  27. (vla-endundomark activeDoc)
  28. (princ))

 
请注意,如果层名称中已经存在重复的层描述,则此功能将失败。试着自己修复一下,我会在必要时帮助缓解。
 
希望这有帮助!
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:29:55 | 显示全部楼层
看来李(又)揍了我一拳叹气:
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:34:10 | 显示全部楼层
 
但你的答案更完整
回复

使用道具 举报

59

主题

327

帖子

268

银币

后起之秀

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

铜币
295
发表于 2022-7-6 09:40:11 | 显示全部楼层
 
伙计们,很高兴你们两个都不是在一个“出类拔萃的牛仔游戏”。
有人可能会受伤。。。
 
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 09:43:00 | 显示全部楼层
 
很酷,马可。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:49:15 | 显示全部楼层
 
谢谢李,你这么说真是太好了。
 
我想问问你对此的看法;包括开始和结束撤消标记等,我是否过火了。?简洁是智慧的灵魂,好吧,与你的代码相比,我自己的代码当然不那么聪明。英雄联盟
 
当你看到它们(你的代码和我的代码)并排出现时,你会觉得开销很大。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:52:43 | 显示全部楼层
 
这是我的步枪,这是我的迭代LayersCollection,因此已经有了VLA层对象(绑定到变量“x”)。然后,获得每个层对象的名称,将其传递给sub,sub继续获取Layers集合(再次),并检索在遍历vlax for循环时首先已经拥有的层对象(再次)。
 
 
 
谢谢feargt
 
请注意,我刚刚纠正了上述代码中的一个拼写错误(遗漏了一个“layer”变量)。
回复

使用道具 举报

23

主题

132

帖子

112

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
114
发表于 2022-7-6 09:57:43 | 显示全部楼层
等等,还有一条这样的线?!?!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 06:31 , Processed in 0.340739 second(s), 72 queries .

© 2020-2025 乐筑天下

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