乐筑天下

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

[编程交流] LISP从块中抓取层

[复制链接]

12

主题

40

帖子

28

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 06:37:52 | 显示全部楼层 |阅读模式
嘿,伙计们。我今天早上写了一个LISP,它要求插入点,抓取对象的层,然后在相关层上绘制多重引线。我让它完全工作,除非选择了块。有人能看一下代码并提供帮助吗?提前感谢!
 
  1. (defun c:wtags (/ p1 )
  2. (setq oldlayer (getvar "clayer"))  
  3. (setq os (getvar "osmode"))
  4. (setvar "osmode" 531)  
  5. (setq p1 (getpoint "\nSelect wire to tag: "))
  6. (setq ent (entget (car (nentselp p1))))
  7. (setq wlayer (cdr (assoc 8 ent)))
  8. (if (= wlayer "F-ALRM-WIRE")(setvar "clayer" "F-ANNO-TAGS"))
  9. (if (= wlayer "F-ALRM-WIRE-SPKR")(setvar "clayer" "F-ANNO-TAGS-SPKR"))
  10. (if (= wlayer "F-ALRM-WIRE-INDC")(setvar "clayer" "F-ANNO-TAGS-INDC"))
  11. (if (= wlayer "F-ALRM-WIRE-DTCT")(setvar "clayer" "F-ANNO-TAGS-DTCT"))
  12. (if (= wlayer "F-ALRM-WIRE-PWR")(setvar "clayer" "F-ANNO-TAGS-PWR"))
  13. (if (= wlayer "F-ALRM-WIRE")(SETQ TAG ""))
  14. (if (= wlayer "F-ALRM-WIRE-SPKR")(SETQ TAG "S"))
  15. (if (= wlayer "F-ALRM-WIRE-INDC")(SETQ TAG "V"))
  16. (if (= wlayer "F-ALRM-WIRE-DTCT")(SETQ TAG "M"))
  17. (if (= wlayer "F-ALRM-WIRE-PWR")(SETQ TAG "P"))
  18. (command "_MLeader" p1 pause tag)
  19. (setvar "osmode" os)
  20. (setvar "clayer" oldlayer)
  21. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 06:44:32 | 显示全部楼层
请尝试以下rwsice9:
  1. (defun c:wtags ( / *error* la pt ss vl vr wl )
  2.    (defun *error* ( msg )
  3.        (mapcar 'setvar vr vl)
  4.        (if (and msg (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*")))
  5.            (princ (strcat "\nError: " msg))
  6.        )
  7.        (princ)
  8.    )
  9.    (setq vr '(clayer osmode cmdecho)
  10.          vl  (mapcar 'getvar vr)
  11.    )
  12.    (setvar 'osmode 531)
  13.    (setvar 'cmdecho 0)
  14.    (if (setq pt (getpoint "\nSelect Wire to Tag: "))
  15.        (if (setq ss (ssget pt))
  16.            (if (wcmatch (setq wl (strcase (cdr (assoc 8 (entget (ssname ss 0)))))) "F-ALRM-WIRE*")
  17.                (progn
  18.                    (setq wl (substr wl 12)
  19.                          la (strcat "F-ANNO-TAGS" wl)
  20.                    )
  21.                    (if (tblsearch "LAYER" la)
  22.                        (command "_.-layer" "_U" la "_T" la "_ON" la "_S" la "")
  23.                        (command "_.-layer" "_M" la "")
  24.                    )
  25.                    (command "_.mleader" "_non" pt "\"
  26.                        (cond
  27.                            (   (= wl "-SPKR") "S")
  28.                            (   (= wl "-INDC") "V")
  29.                            (   (= wl "-DTCT") "M")
  30.                            (   (= wl "-PWR")  "P")
  31.                            (   ""   )
  32.                        )
  33.                    )
  34.                )
  35.                (princ "\nObject not on "F-ALRM-WIRE*" layer.")                     
  36.            )
  37.            (princ "\nNo Object found at selected point.")
  38.        )
  39.    )
  40.    (*error* nil)
  41.    (princ)
  42. )
回复

使用道具 举报

12

主题

40

帖子

28

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 06:47:08 | 显示全部楼层
谢谢李!就设置正确的图层而言,效果很好,但它现在不想填充文本。我非常感谢你的帮助!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 06:52:15 | 显示全部楼层
 
哎呀!对不起,我忘记了每个图层名图案上的连字符。现在,我已经更正了上述代码,并使用了一个cond表达式来代替关联列表,以确保安全,如果列表中没有出现层名称模式。
回复

使用道具 举报

12

主题

40

帖子

28

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 06:55:25 | 显示全部楼层
令人惊叹的非常感谢你!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:01:07 | 显示全部楼层
不客气!
询问您是否对代码有任何问题。
回复

使用道具 举报

12

主题

40

帖子

28

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 07:05:43 | 显示全部楼层
我想我至少了解代码在做什么,但不足以在没有帮助的情况下独自修改。(我想)我还有最后一个问题要问你。当选定的对象位于F-ALRM-WIRE图层上时,是否有方法提示输入多重引线值?虽然大多数层都有预设标记,但通用F-ALRM-WIRE层没有。当前代码只是在空白的多重引线中绘制。(别误会,你编写的代码太棒了)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:10:47 | 显示全部楼层
 
当然,试试这个:
  1. (defun c:wtags ( / *error* la pt ss vl vr wl )
  2.    (defun *error* ( msg )
  3.        (mapcar 'setvar vr vl)
  4.        (if (and msg (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*")))
  5.            (princ (strcat "\nError: " msg))
  6.        )
  7.        (princ)
  8.    )
  9.    (setq vr '(clayer osmode cmdecho)
  10.          vl  (mapcar 'getvar vr)
  11.    )
  12.    (setvar 'osmode 531)
  13.    (setvar 'cmdecho 0)
  14.    (if (setq pt (getpoint "\nSelect Wire to Tag: "))
  15.        (if (setq ss (ssget pt))
  16.            (if (wcmatch (setq wl (strcase (cdr (assoc 8 (entget (ssname ss 0)))))) "F-ALRM-WIRE*")
  17.                (progn
  18.                    (setq wl (substr wl 12)
  19.                          la (strcat "F-ANNO-TAGS" wl)
  20.                    )
  21.                    (if (tblsearch "LAYER" la)
  22.                        (command "_.-layer" "_U" la "_T" la "_ON" la "_S" la "")
  23.                        (command "_.-layer" "_M" la "")
  24.                    )
  25.                    (command "_.mleader" "_non" pt "\")
  26.                    (cond
  27.                        (   (= wl "-SPKR") (command "S"))
  28.                        (   (= wl "-INDC") (command "V"))
  29.                        (   (= wl "-DTCT") (command "M"))
  30.                        (   (= wl "-PWR")  (command "P"))
  31.                        (   (command "" "_.ddedit" (entlast) ""))
  32.                    )
  33.                )
  34.                (princ "\nObject not on "F-ALRM-WIRE*" layer.")                     
  35.            )
  36.            (princ "\nNo Object found at selected point.")
  37.        )
  38.    )
  39.    (*error* nil)
  40.    (princ)
  41. )
回复

使用道具 举报

12

主题

40

帖子

28

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 07:14:36 | 显示全部楼层
我可能应该能够弄清楚这个。。现在我明白了,这似乎是显而易见的解决方案。再次感谢,伙计。工作绝对完美!
回复

使用道具 举报

12

主题

40

帖子

28

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 07:18:06 | 显示全部楼层
它甚至可以在F-ALRM-WIRE-CTRL层上运行!这根本不在代码中!!令人惊叹的
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 16:05 , Processed in 0.498186 second(s), 72 queries .

© 2020-2025 乐筑天下

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