乐筑天下

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

[编程交流] 通过选择o创建层

[复制链接]

10

主题

45

帖子

35

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 11:49:46 | 显示全部楼层 |阅读模式
大家好,
 
我正在寻找一个lisp例程,通过选择一个对象来创建一个新层。想法是这样的:我在相应的层上有一系列对象,它们将成为整体设计“未来”扩展的一部分。因此,我想创建后缀为“-future”的独立层,以便可以相应地设置层属性(半色调等)。理想情况下,我希望它提供一个选项来选择对象,然后从该对象中获取层名称,并创建一个带有后缀的新层,然后将该对象放在该层上。这样我可以选择未来的对象,它将创建所有层并为我放置它们。任何帮助都将不胜感激。
 
当做
回复

使用道具 举报

20

主题

344

帖子

325

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 11:53:17 | 显示全部楼层
快速启动,如果有效,请告诉我:
 
  1. (defun c:obtol( / layLst ss ssEnts echo)
  2. (vl-load-com)
  3. (setq echo (getvar "cmdecho"))
  4. (setvar "cmdecho" 0)
  5. (setq ss (ssget))
  6. (if ss (setq ssEnts (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
  7. (foreach forVar ssEnts
  8.    (if (member (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") (layer-list))
  9.      (vl-cmdf "chprop" forVar "" "LAYER" (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") "")
  10.      (vl-cmdf "-layer" "make" (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") ""
  11.           "chprop" forVar "" "LAYER" (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") "")
  12.      )
  13.    )
  14. (setvar "cmdecho" echo)
  15. (princ)
  16. )
  17. (defun layer-list( / layLst)
  18. (vl-load-com)
  19. (vlax-for vFor (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
  20.    (setq layLst (cons (vla-get-name vFor) layLst)))
  21. )

 
*等等,我错过了什么。。给我一点时间重新做。
回复

使用道具 举报

10

主题

45

帖子

35

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 11:58:05 | 显示全部楼层
很好,谢谢。现在有一种方法可以在创建层时设置层的属性。也就是说,我想将颜色设置为252,线型设置为“隐藏”
 
再次感谢!
回复

使用道具 举报

20

主题

344

帖子

325

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 12:02:13 | 显示全部楼层
我没有过滤掉已经在“*-未来”层上的对象,所以它最终将它们放在了“*-未来-未来”层上。。我解决了这个问题。
 
这是带有图层特性集的更新代码,但是您需要确保加载了“隐藏”线型,否则我很确定它会出错。
 
编辑是的,我很清楚这是怎么回事。”
 
*编辑编辑*啊,不更改属性。。自我提醒:除非代码很棒,否则不要提交代码。
 
*编辑编辑*确定我的错误。。只要该层不存在,它就应该可以工作。。
回复

使用道具 举报

10

主题

45

帖子

35

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 12:03:37 | 显示全部楼层
嘿,只要它能用就行。我非常感谢!我的目标是创建两个按钮,一个用于打开未来,另一个用于关闭未来。这样,当它回到正在实现的未来的东西时,我会很容易地将它们切换回正常的层(没有“-future”后缀)。这可能更容易做到,因为已经创建了层,只需将其移动到另一层即可。例如,我有一个变压器,我想放在未来。所以我会用它来选择它,并将其移动到层“transformer future”。之后在这个项目中,我想把它移回“transformer”层。。。等
 
再次感谢!
 
编辑:正确,如果图层已存在,则不会更改它。这可能吗?
回复

使用道具 举报

20

主题

344

帖子

325

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 12:07:22 | 显示全部楼层
任何事情都有可能,这只是一个如何实现的问题。
 
  1. (defun c:obtol( / layLst ss ssEnts echo)
  2. (vl-load-com)
  3. (setq echo (getvar "cmdecho"))
  4. (setvar "cmdecho" 0)
  5. (setq ss (ssget))
  6. (if ss (setq ssEnts (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
  7. (foreach forVar ssEnts
  8.    (if (not (wcmatch (cdr (assoc 8 (entget forVar))) "* - FUTURE"))
  9.      (if (member (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") (layer-list))
  10.    (vl-cmdf "-layer" "Ltype" "hidden" (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") ""
  11.         "-layer" "Color" "252" (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") ""
  12.         "chprop" forVar "" "LAYER" (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") "")
  13.    (vl-cmdf "-layer" "new" (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") ""
  14.         "-layer" "Ltype" "hidden" (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") ""
  15.         "-layer" "Color" "252" (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") ""
  16.         "chprop" forVar "" "LAYER" (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") "")
  17.    )
  18.      )
  19.    )
  20. (setvar "cmdecho" echo)
  21. (princ)
  22. )
  23. (defun layer-list( / layLst)
  24. (vl-load-com)
  25. (vlax-for vFor (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
  26.    (setq layLst (cons (vla-get-name vFor) layLst)))
  27. )

 
... 当然,“怎么样?”对于那些花时间关心的人来说,这起到了很大的作用"
回复

使用道具 举报

10

主题

45

帖子

35

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 12:09:26 | 显示全部楼层
我该如何编写一个单独的例程,在需要时将它们更改回原始层。(见上文)
回复

使用道具 举报

20

主题

344

帖子

325

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 12:13:17 | 显示全部楼层
又快又脏:
 
  1. (defun c:ftoo( / layLst ss ssEnts echo)
  2. (vl-load-com)
  3. (setq echo (getvar "cmdecho"))
  4. (setvar "cmdecho" 0)
  5. (setq ss (ssget "_X" '((8 . "* - FUTURE"))))
  6. (if ss (setq ssEnts (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
  7. (if ssEnts
  8.    (mapcar (function (lambda (x) (vl-cmdf "chprop" x "" "layer"
  9.                       (substr (cdr (assoc 8 (entget x))) (- (strlen (cdr (assoc 8 (entget x)))) 9)) ""))) ssEnts)
  10.    )
  11. (setvar "cmdecho" echo)
  12. (princ)
  13. )
回复

使用道具 举报

10

主题

45

帖子

35

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 12:15:51 | 显示全部楼层
当我试着运行这个时,这就是我得到的
 
 
我不需要它来改变层回。我想做的就是启动应用程序。。。选择我要更改回正常层的对象,然后将其移回非未来层。
回复

使用道具 举报

20

主题

344

帖子

325

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 12:21:03 | 显示全部楼层
对不起,我实际上在工作(sshh,不要告诉任何人),所以我正在努力尽快做到这一点。
 
  1. (defun c:ftoo( / layLst ss ssEnts echo)
  2. (vl-load-com)
  3. (setq echo (getvar "cmdecho"))
  4. (setvar "cmdecho" 0)
  5. (setq ss (ssget '((8 . "* - FUTURE"))))
  6. (if ss (setq ssEnts (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
  7. (foreach forVar ssEnts
  8.    (if (member (substr (cdr (assoc 8 (entget forVar))) 1 (- (strlen (cdr (assoc 8 (entget forVar)))) 9)) (layer-list))
  9.      (vl-cmdf "chprop" forVar "" "LAYER" (substr (cdr (assoc 8 (entget forVar))) 0 (- (strlen (cdr (assoc 8 (entget forVar)))) 9)) "")
  10.      (vl-cmdf "-layer" "new" (substr (cdr (assoc 8 (entget forVar))) 1 (- (strlen (cdr (assoc 8 (entget forVar)))) 9)) ""
  11.           "chprop" forVar "" "LAYER" (substr (cdr (assoc 8 (entget forVar))) 1 (- (strlen (cdr (assoc 8 (entget forVar)))) 9)) "")
  12.      )
  13.    )
  14. (setvar "cmdecho" echo)
  15. (princ)
  16. )
  17. (defun layer-list( / layLst)
  18. (vl-load-com)
  19. (vlax-for vFor (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
  20.    (setq layLst (cons (vla-get-name vFor) layLst)))
  21. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 10:26 , Processed in 0.537909 second(s), 72 queries .

© 2020-2025 乐筑天下

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