乐筑天下

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

[编程交流] 单属性编辑LISP

[复制链接]

47

主题

257

帖子

216

银币

后起之秀

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

铜币
229
发表于 2022-7-5 18:20:06 | 显示全部楼层 |阅读模式
大家好,我只是需要一些帮助来编辑我在浏览网页时发现的一个例程,这将非常有用。
 
我希望我的CAD人员能够在命令行中键入他们的缩写,并自动更改图形中的修订缩写。这些首字母位于标题栏中(名称是随机的,因为多年来业余CAD管理员对“标准”一无所知),因此我想将该块视为通配符。然后我想在块中搜索标记“REVBY”,然后我想搜索的首字母是通配符。接下来,我想用运行代码的CAD操作员的首字母替换这些值。一旦我运行它,我将为它们各自的首字母进行自定义。请在下面查看。我卡住了
 
  1. (defun changeAttribValue (ent atttag oldval newval / entl)
  2. (while (and ent (/= "SEQEND" (cdr (assoc 0 (setq entl (entget ent))))))
  3.    (and (= atttag (cdr (assoc 2 entl)))
  4.         (= oldval (cdr (assoc 1 entl))) ;<- could use WCMATCH instead
  5.         (entmod (subst (cons 1 newval) (assoc 1 entl) entl))
  6.         (entupd ent)
  7.         (mapcar 'princ (list "\n" oldval " -> " newval))
  8.    )
  9.    (setq ent (entnext ent))
  10. )
  11. )
  12. (defun C:TJM (/ ss a attag bname oldval newval)
  13. (and (/= "" (setq bname "*"))
  14.       (/= "" (setq attag "REVBY"))
  15.       (/= "" (setq oldval "*"))
  16.       (/= "" (setq newval "T.J.M."))
  17.       (setq a  0
  18.             ss (ssget "X" (list '(0 . "INSERT") '(66 . 1) (cons 2 bname)))
  19.       )
  20.       (repeat (sslength ss)
  21.         (changeAttribValue (ssname ss a) attag oldval newval)
  22.         (setq a (1+ a))
  23.       )
  24. )
  25. )
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 18:24:27 | 显示全部楼层
什么是bname变量值?我认为它是零-所以ssget不会被创建
回复

使用道具 举报

10

主题

253

帖子

75

银币

后起之秀

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

铜币
223
发表于 2022-7-5 18:27:07 | 显示全部楼层
嘿,马克,谢谢你的回复,我已经尝试了你修改的代码,但没有结果。唯一不同的是它在命令行返回“1 found”,没有对REVBY标记的属性值进行更改。
 
嘿,kpblc,谢谢你的来电。bname变量是通配符,因为并非每个标题栏在每个图形中的名称都相同。有时是TBLOCK、BLOCKT或ASDFG。这就是为什么我决定通配符块名,然后在该块中搜索标记名为REVBY的属性标记。任何其他帮助都将不胜感激。我会继续评估。
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

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

铜币
229
发表于 2022-7-5 18:30:02 | 显示全部楼层
这是可以工作的原始代码,但它会提示用户输入块名、标记名、旧值和新值。这违背了目的。我希望我的人能够键入他们的首字母(我将复制他们各自的代码),它会自动更新REVBY首字母,无论块名是什么,他们的首字母。自动执行一条命令,无需提示。
 
  1. (defun changeAttribValue ( ent atttag oldval newval / entl )
  2. (while (and ent (/= "SEQEND" (cdr (assoc 0 (setq entl (entget ent))))))
  3.    (and (= atttag (cdr (assoc 2 entl)))
  4.         (wcmatch oldval (cdr (assoc 1 entl)))
  5.         (entmod (subst (cons 1 newval) (assoc 1 entl) entl))
  6.         (entupd ent)
  7.    )
  8.    (setq ent (entnext ent))
  9. )
  10. )
  11. (defun C:TJM ( / ss a attag bname oldval newval )
  12. (and (/= "" (setq bname "*"))
  13.       (/= "" (setq attag "REVBY"))
  14.       (/= "" (setq oldval "*"))
  15.       (/= "" (setq newval "T.J.M."))
  16.       (setq a  0
  17.             ss (ssget "_X" (list '(0 . "INSERT") '(66 . 1) (cons 2 bname)))
  18.       )
  19.       (not (equal '(nil nil) (sssetfirst nil ss)))
  20.       (setq ss (ssget "_:L"))
  21.       (sssetfirst nil nil)
  22.       (repeat (sslength ss)
  23.         (changeAttribValue (ssname ss a) attag oldval newval)
  24.         (setq a (1+ a))
  25.       )
  26. )
  27. (princ)
  28. )

 
 
-大卫
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

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

铜币
229
发表于 2022-7-5 18:35:45 | 显示全部楼层
漂亮的工作善良的先生!
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 18:37:17 | 显示全部楼层
不客气。我倾向于采取一种过于简单的方法-大卫
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

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

铜币
229
发表于 2022-7-5 18:41:48 | 显示全部楼层
可能为首字母添加此方法,然后只需要1个版本的代码。
 
  1. (defun changeAttribValue (ent atttag oldval newval / entl)
  2. (while (and ent (/= "SEQEND" (cdr (assoc 0 (setq entl (entget ent))))))
  3.    (and (= atttag (cdr (assoc 2 entl)))
  4.         (= oldval (cdr (assoc 1 entl))) ;<- could use WCMATCH instead
  5.         (entmod (subst (cons 1 newval) (assoc 1 entl) entl))
  6.         (entupd ent)
  7.         (mapcar 'princ (list "\n" oldval " -> " newval))
  8.    )
  9.    (setq ent (entnext ent))
  10. )
  11. )
  12. (defun C:CHATTRIB (/ ss a attag bname oldval newval)
  13. (and (/= "" (setq bname (getstring "\nBlock name: ")))
  14.       (/= "" (setq attag (getstring T "\nTag: ")))
  15.       (/= "" (setq oldval (getstring T "\nOld value: ")))
  16.       (/= "" (setq newval (getstring T "\nNew value: ")))
  17.       (setq a  0
  18.             ss (ssget "X" (list '(0 . "INSERT") '(66 . 1) (cons 2 bname)))
  19.       )
  20.       (repeat (sslength ss)
  21.         (changeAttribValue (ssname ss a) attag oldval newval)
  22.         (setq a (1+ a))
  23.       )
  24. )
  25. )

 
  1. [b][color=BLACK]([/color][/b]defun c:revby [b][color=FUCHSIA]([/color][/b]/ by ss i en an ad f[b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]setq by [color=#2f4f4f]"T.J.M."[/color][b][color=FUCHSIA])[/color][/b]
  3. [b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget [color=#2f4f4f]"X"[/color] [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]cons 0 [color=#2f4f4f]"INSERT"[/color][b][color=BLUE])[/color][/b][b][color=BLUE]([/color][/b]cons 66 1[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  4.       [b][color=NAVY]([/color][/b]setq i 0[b][color=NAVY])[/color][/b]
  5.       [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]setq en [b][color=GREEN]([/color][/b]ssname ss i[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  6.              [b][color=MAROON]([/color][/b]setq f nil
  7.                   an [b][color=GREEN]([/color][/b]entnext en[b][color=GREEN])[/color][/b]
  8.                   ad [b][color=GREEN]([/color][/b]entget an[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  9.              [b][color=MAROON]([/color][/b]while [b][color=GREEN]([/color][/b]= [color=#2f4f4f]"ATTRIB"[/color] [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 0 ad[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  10.                     [b][color=GREEN]([/color][/b]and [b][color=BLUE]([/color][/b]= [color=#2f4f4f]"REVBY"[/color] [b][color=RED]([/color][/b]cdr [b][color=PURPLE]([/color][/b]assoc 2 ad[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  11.                          [b][color=BLUE]([/color][/b]setq f T[b][color=BLUE])[/color][/b]
  12.                          [b][color=BLUE]([/color][/b]entmod [b][color=RED]([/color][/b]subst [b][color=PURPLE]([/color][/b]cons 1 by[b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]assoc 1 ad[b][color=PURPLE])[/color][/b] ad[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  13.                     [b][color=GREEN]([/color][/b]setq an [b][color=BLUE]([/color][/b]entnext an[b][color=BLUE])[/color][/b]
  14.                           ad [b][color=BLUE]([/color][/b]entget an[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  15.              [b][color=MAROON]([/color][/b]if f [b][color=GREEN]([/color][/b]entupd en[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  16.              [b][color=MAROON]([/color][/b]setq i [b][color=GREEN]([/color][/b]1+ i[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  17. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 18:44:53 | 显示全部楼层
嘿,David,我如何在同一代码中包含另一个标记变体?例如,我想让代码看看标记“REVBY”和“REVBY”。。。我现在看到了不同的变化。。谢谢
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:47:44 | 显示全部楼层
1种方式是:
  1. (setq lst (list "tjm" "T.J.M" "tmelancon" "BIGAL")
  2. (AT:ListSelect "Rev update" "pick your name"  12 12 "False" lst)
  3. (setq REVBY (nth (atoi item) lst))

 
 
只需在(成员)调用中继续将变体(所有大写)添加到列表中即可
 
-大卫
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

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

铜币
229
发表于 2022-7-5 18:51:01 | 显示全部楼层
把它插上电源,我们现场直播!谢谢大卫。上帝保佑!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 19:28 , Processed in 0.919828 second(s), 72 queries .

© 2020-2025 乐筑天下

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