乐筑天下

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

[编程交流] 块中的许多Attdribute标记

[复制链接]

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 12:28:17 | 显示全部楼层 |阅读模式
在我开始之前,这是一个很棒的网站,非常有用
 
现在回答我的问题。
 
我有这个项目,我们正在使用客户区块。在需要编辑的块中,有许多属性有自己的“标签”。
 
例如:
 
块名称
ABC_123
 
标记值
AAAA级####
标记值
BBBB####
等等
 
我想给他们每个不同的值。在这种情况下,一个简单的查找和替换就可以了,但使用的每个块中都有相同的标记,我不想全部更新。
我想知道是否有一种方法可以根据标记名而不是值进行搜索和替换。就像搜索标记AAAA并将其值替换为4321一样,标记BBBB并将其值替换为8765。这些值将用于整个图形集。
 
有人能帮我解决这个问题吗?
 
 
 
 
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2022-7-6 12:46:54 | 显示全部楼层
你好
 
这是一个快捷方式
 
  1. (defun c:setAtt (/ ent elst val ss tag)
  2. (if
  3.    (and
  4.      (setq ent (car (nentsel "\nSelect the attribute: ")))
  5.      (setq elst (entget ent))
  6.      (= (cdr (assoc 0 elst)) "ATTRIB")
  7.      (setq val (getstring "\nNew value: "))
  8.      (princ "\nSelect blocks to be edited (Enter for all)")
  9.      (or
  10.        (setq
  11.          ss
  12.           (ssget (list '(0 . "INSERT") (assoc 2 (entget (cdr (assoc 330 elst))))))
  13.        )
  14.        (setq
  15.          ss
  16.           (ssget "_X"
  17.                  (list '(0 . "INSERT") (assoc 2 (entget (cdr (assoc 330 elst)))))
  18.           )
  19.        )
  20.      )
  21.      (setq tag (cdr (assoc 2 elst)))
  22.      (setq n 0)
  23.    )
  24.     (progn
  25.       (while (setq ent (ssname ss n))
  26.         (SetAttValue ent tag val)
  27.         (setq n (1+ n))
  28.       )
  29.     )
  30.     (princ "\nInvalid input")
  31. )
  32. (princ)
  33. )
  34. ;;; SetAttValue (gile)
  35. ;;; Sets a value to an attribute
  36. ;;;
  37. ;;; Arguments
  38. ;;; blk : block ename
  39. ;;; tag : attribute tag
  40. ;;; val : new value
  41. (defun SetAttValue (blk tag val / lst loop)
  42. (setq    lst  (entget (entnext blk))
  43.    loop (= "ATTRIB" (cdr (assoc 0 lst)))
  44. )
  45. (while loop
  46.    (if    (= (strcase tag) (cdr (assoc 2 lst)))
  47.      (progn
  48.    (entmod (subst (cons 1 val) (assoc 1 lst) lst))
  49.    (setq loop nil)
  50.    (entupd blk)
  51.      )
  52.      (setq lst     (entget (entnext (cdr (assoc -1 lst))))
  53.        loop (= "ATTRIB" (cdr (assoc 0 lst)))
  54.      )
  55.    )
  56. )
  57. )
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 13:00:24 | 显示全部楼层
给我,但我是lisp格式的新手。但当我运行它时,它给了我一个错误。
 
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2022-7-6 13:08:43 | 显示全部楼层
抱歉,出现错误,我编辑了代码。
试试新的。
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 13:21:24 | 显示全部楼层
几乎
 
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 13:34:52 | 显示全部楼层
哎呀,我明白了。我认为我的代码副本缺少最后一部分。
 
 
但它现在起作用了,非常感谢!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 06:15 , Processed in 0.740583 second(s), 64 queries .

© 2020-2025 乐筑天下

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