乐筑天下

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

[编程交流] 数值全局块属性

[复制链接]

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 09:17:49 | 显示全部楼层 |阅读模式
我有一个问题要问所有你经历过的AutoCAD专家。。。
 
我有一张有许多高程点的图纸。这些点通过插入的块列出,我在其中用两个属性(路缘顶部高程和路缘底部高程)标记块。有时,客户会希望整个场地以一定的增量下降或降低。如何或可以编辑所有高程点块,使其增加或减少特定的数值?我被告知这是不可能的,但我真的希望我能找到一个更好的解决方案,然后打开每个块属性,手动编辑1.5英尺的值!(当然,通过这种方式,我还遇到了一个障碍,即试图辨别哪些块已经提高了1.5英尺,哪些还没有!)我尝试在更改每个块颜色时更改块颜色,但是我找不到将所有块颜色都更改回“bylayer”颜色的方法。由于这种原因,attedit过去没有工作。任何提示或技巧都将不胜感激。
 
~克里斯汀
回复

使用道具 举报

48

主题

1073

帖子

1043

银币

后起之秀

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

铜币
238
发表于 2022-7-6 09:28:30 | 显示全部楼层
我知道我可以用VBA来做这件事,我确信它可以用LISP来做。但是我现在在家,离AutoCAD太远了,我现在没有时间在工作中做这件事。
 
假设您的所有块都有相同的名称(并且都需要更改相同的数量),您可以将它们全部放入一个选择集中,检索值,进行求和,然后写回新值。
 
这真的需要在LISP/VBA领域,但我相信一个mod很快就会移动它。
回复

使用道具 举报

48

主题

1073

帖子

1043

银币

后起之秀

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

铜币
238
发表于 2022-7-6 09:33:21 | 显示全部楼层
好的,我本来希望一个Lisp程序的人来救我,但是,哦,好吧。
 
为了证明可以做些什么,我创建了一个包含一个矩形的块,其中有一个属性。以下代码将向该属性添加28。(注意:非常令人兴奋,但没关系)
 
  1. (defun c:bl()
  2. (setq F1 (entsel))
  3. (setq F2 (entget(entnext(car F1))))
  4. (setq V1 (assoc 1 F2))
  5. (setq V2 (+ 28 (atof (cdr V1))))
  6. (setq V3 (cons 1 (rtos V2)))
  7. (setq F2 (subst V3 V1 F2))
  8. (entmod F2)
  9. (princ)
  10. )

 
加载代码,键入BL并选择块,然后查看发生了什么。注意-没有错误检查,所以不要在有价值的图纸上尝试!
回复

使用道具 举报

4

主题

940

帖子

961

银币

初来乍到

Rank: 1

铜币
12
发表于 2022-7-6 09:38:43 | 显示全部楼层
您可以尝试此操作,注意它将编辑dwg中的所有属性,并显示2个小数点(可以编辑代码以更改该值)
  1. ;Adds a numerical value to attributes (caution: edits ALL attributes in drawing)
  2. (defun AddNumAtt (add tag / e ei et txt)
  3. `
  4. (setq e (entnext)
  5. tag (strcase tag))
  6. (while (setq e (entnext e))
  7. (setq ei (entget e)
  8. et (cdr (assoc 0 ei)))
  9. (and (= "ATTRIB" et)
  10. (wcmatch (cdr (assoc 2 ei)) tag)
  11. (setq txt (cdr (assoc 1 ei)))
  12. (numberp (setq num (read txt)))
  13. (entmod
  14. (subst (cons 1 (rtos (+ add num) 2 2)) (assoc 1 ei) ei))
  15. (entupd e)))
  16. (princ))
  17. (alert "This will edit all attributes in the drawing!!!")
  18. (setq addreal (getreal "Enter amount to add: "))
  19. (AddNumAtt addreal "*")
  20. ;(AddNumAtt 1.00 "*")

我不能接受功劳,大部分是国有企业的功劳。
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 09:46:34 | 显示全部楼层
谢谢你的帮助。我98年上大学时学过一门简单的AutoCAD基础课程,但直到今年我开始工作(跟随我的军事丈夫在欧洲周游了6年),才发现我在大学里学到的最基本的东西已经蒸发了!再加上自……以来的所有改进。。。什么R14?我真是一团糟。。。再次感谢你的帮助。
 
~克里斯汀
 
(嘿,lpseifert…看起来我们在同一个地区!)
回复

使用道具 举报

4

主题

940

帖子

961

银币

初来乍到

Rank: 1

铜币
12
发表于 2022-7-6 09:49:21 | 显示全部楼层
欢迎如果你在宾夕法尼亚州,你拼写匹兹堡错了(不过德克萨斯州、加利福尼亚州和加利福尼亚州都有匹兹堡)
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 09:56:41 | 显示全部楼层
好吧,看看这个!我想我还是习惯在德国!刚搬到这里。谢谢你的更正。
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 10:05:43 | 显示全部楼层
如果您的属性仅包含数字,则它将起作用。
 
  1. (defun c:addn(/ aLst bLst bSet cAtt cDel cNum fLst nAtt)
  2. (vl-load-com)
  3. (if
  4.    (and
  5.      (setq cAtt(nentsel "\nPick attribute > "))
  6.      (= "ATTRIB"(cdr(assoc 0(entget(setq cAtt(car cAtt))))))
  7.      ); end and
  8.    (progn
  9.      (setq cAtt(vlax-ename->vla-object cAtt)
  10.     fLst(vl-remove-if-not '
  11.           (lambda(x)(member x '(0 2)))
  12.             (entget(vlax-vla-object->ename
  13.               (vla-ObjectIDtoObject
  14.                 (vla-get-ActiveDocument
  15.                   (vlax-get-acad-object))
  16.                     (vla-get-OwnerID cAtt)))))
  17.     nAtt(vla-get-TagString cAtt)
  18.     ); end setq
  19.      (princ "\n<<< Select blocks >>>")
  20.       (if(setq bSet(ssget fLst))
  21. (progn
  22.    (setq bLst(mapcar 'vlax-ename->vla-object
  23.                 (vl-remove-if 'listp
  24.                          (mapcar 'cadr(ssnamex bSet))))
  25.          cDel(getreal "\nSpecify number to Add/Subtract: ")
  26.          ); end setq
  27.    (foreach b bLst
  28.      (setq aLst(vlax-safearray->list
  29.                   (vlax-variant-value
  30.                     (vla-getAttributes b))))
  31.      (foreach at aLst
  32.        (if(= nAtt(setq cAtt(vla-get-TagString at)))
  33.          (if(setq cNum(atof(vla-get-TextString at)))
  34.            (vla-put-TextString at(rtos(+ cNum cDel)2 1))
  35.            ); end if
  36.          ); end if
  37.        ); end foreach
  38.      ); end foreach
  39.    ); end progn
  40. ); end if
  41.      ); end progn
  42.    ); end if
  43. (princ)
  44. ); end of c:addn
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:06:28 | 显示全部楼层
你好
 
非常感谢你的Lisp程序。我有一个问题,如果我们运行脚本,它会将“+7.00”更改为“8”,它不会保留“+”符号或十进制数字。
 
有办法解决这个问题吗?我们有大约15000个属性,海拔像(-07.22),我们必须从中减去7。
 
 
再次感谢你的帮助。
回复

使用道具 举报

14

主题

719

帖子

706

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 10:13:03 | 显示全部楼层
您好,欢迎来到论坛。
 
你指的是什么Lisp程序?这个线程中有三个。
 
顺便说一句,这个帖子大约有3年了,如果你也在说ASMIs Lisp,他在这里已经不太活跃了,所以如果你没有得到回复,考虑开始一个新的帖子,在那里提出你的问题。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 03:05 , Processed in 0.693288 second(s), 72 queries .

© 2020-2025 乐筑天下

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