乐筑天下

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

[编程交流] 更改属性的脚本

[复制链接]

5

主题

35

帖子

38

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 11:18:47 | 显示全部楼层 |阅读模式
嘿伙计们,
 
我想知道是否有一个脚本可以用来更改实践属性的某个值。
 
这是因为我需要经常一次更改多个图形上图形的修订值,如果有脚本或Lisp或其他方法来执行此操作,而不是打开我需要更改的所有图形,则会容易得多
 
干杯
回复

使用道具 举报

10

主题

23

帖子

11

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 11:28:48 | 显示全部楼层
 
我通过VBA为一个内部工具实现了这一点。不能发布任何代码(雇佣协议禁止),但我可以说这并不难实现
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:33:10 | 显示全部楼层
可以通过VBA调用LISP吗?
 
因为编写LISP来完成这样的任务非常简单,但显然LISP无法打开和关闭图形。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 11:36:16 | 显示全部楼层
我可以在VBA中给出它,如下所示
 
  1. Public Sub issued_for_construction()
  2. ' This Updates the Issued for construction and sets rev 0
  3. Dim SS As AcadSelectionSet
  4. Dim Count As Integer
  5. Dim FilterDXFCode(1) As Integer
  6. Dim FilterDXFVal(1) As Variant
  7. Dim attribs As Variant
  8. Dim BLOCK_NAME As String
  9. On Error Resume Next
  10. FilterDXFCode(0) = 0
  11. FilterDXFVal(0) = "INSERT"
  12. FilterDXFCode(1) = 2
  13. FilterDXFVal(1) = "DA1DRTXT"
  14. BLOCK_NAME = "DA1DRTXT"
  15. Set SS = ThisDrawing.SelectionSets.Add("issued")
  16. SS.Select acSelectionSetAll, , , FilterDXFCode, FilterDXFVal
  17. For Cntr = 0 To SS.Count - 1
  18.   attribs = SS.Item(Cntr).GetAttributes
  19.        attribs(0).TextString = "ISSUED FOR CONSTRUCTION"
  20.        attribs(3).TextString = "0"
  21.        attribs(0).Update
  22.        attribs(3).Update
  23. Next Cntr
  24. ThisDrawing.SelectionSets.Item("issued").Delete
  25. 'DO AGAIN FOR REVTABLE
  26. 'DATE
  27. 'Dim MyDate
  28. 'MyDate = Date
  29. Call DashDate
  30. FilterDXFCode(1) = 2
  31. FilterDXFVal(1) = "REVTABLE"
  32. BLOCK_NAME = "REVTABLE"
  33. Set SS = ThisDrawing.SelectionSets.Add("revs")
  34. SS.Select acSelectionSetAll, , , FilterDXFCode, FilterDXFVal
  35. For Cntr = 0 To SS.Count - 1
  36.   attribs = SS.Item(Cntr).GetAttributes
  37.        attribs(0).TextString = "0"
  38.        attribs(1).TextString = DashDate
  39.        attribs(2).TextString = "ISSUED FOR CONSTRUCTION"
  40.        attribs(0).Update
  41.        attribs(1).Update
  42.        attribs(2).Update
  43. Next Cntr
  44. ThisDrawing.SelectionSets.Item("revs").Delete
  45. MsgBox "Drawing now changed to Issued for Construction"
  46. End Sub

 
 
只需在菜单等中执行以下操作,或用lisp键敲击,说“I0”
 
^C^C(vl vbaload“已发布.dvb”)(vl vbarun“已发布用于施工”)
 
 
抱歉差点忘了剧本
 
打开dwg1(vl vbaload“issued.dvb”)(vl vbarun“issued\u for_construction”)关闭y
打开dwg2(vl vbarun“issued_for_construction”)关闭y
打开dwg3(vl vbarun“issued_for_construction”)关闭y
回复

使用道具 举报

5

主题

35

帖子

38

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 11:44:57 | 显示全部楼层
这是怎么回事。它如何找到正确的属性来添加值?
回复

使用道具 举报

11

主题

117

帖子

133

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
52
发表于 2022-7-6 11:47:40 | 显示全部楼层
这是ASMI的一个非常好的例子。
  1. ;; ====================================================================    ;;
  2. ;;                                                                   ;;
  3. ;;  CHAT.LSP - The program for change attributes with the chosen       ;;
  4. ;;              value in dynamic and ordinary blocks.                   ;;
  5. ;;                                                                   ;;
  6. ;; ==================================================================== ;;
  7. ;;                                                                   ;;
  8. ;;  Command(s) to call: CHAT                                           ;;
  9. ;;                                                                   ;;
  10. ;;  Pick sample attribute for filter creation, and after that select    ;;
  11. ;;  blocks containing this attribute. The program will request to enter ;;
  12. ;;  replaced value (the specified attribute by default) and if          ;;
  13. ;;  attributes are found will highlight blocks and will request         ;;
  14. ;;  new value.                                                          ;;
  15. ;;                                                                   ;;
  16. ;; ====================================================================    ;;
  17. ;;                                                                   ;;
  18. ;;  THIS PROGRAM AND PARTS OF IT MAY REPRODUCED BY ANY METHOD ON ANY       ;;
  19. ;;  MEDIUM FOR ANY REASON. YOU CAN USE OR MODIFY THIS PROGRAM OR      ;;
  20. ;;  PARTS OF IT ABSOLUTELY FREE.                             ;;
  21. ;;                                                                   ;;
  22. ;;  THIS PROGRAM PROVIDES THIS PROGRAM 'AS IS' WITH ALL FAULTS AND      ;;
  23. ;;  SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY         ;;
  24. ;;  OR FITNESS FOR A PARTICULAR USE.                         ;;
  25. ;;                                                                   ;;
  26. ;; ====================================================================    ;;
  27. ;;                                                                   ;;
  28. ;;  V1.1, 18th Aug 2008, Riga, Latvia                                      ;;
  29. ;;  © Aleksandr Smirnov (ASMI)                                     ;;
  30. ;;  For AutoCAD 2000 - 2008 (isn't tested in a next versions)        ;;
  31. ;;                                                                   ;;
  32. ;;                                      http://www.asmitools.com       ;;
  33. ;;                                     ;;
  34. ;; ====================================================================    ;;
  35. (defun c:chat(/ cAtt cBl cTag efNm sStr nLst fSet oVal fLst exLst
  36.           fStr actDoc atLst pLst cFrom cTo sucCnt errCnt wSet)
  37. (vl-load-com)
  38. (if
  39.    (and
  40.      (setq cAtt(nentsel "\nPick sample attribute > "))
  41.      (= "ATTRIB"(cdr(assoc 0(entget(car cAtt)))))
  42.      ); end and
  43.    (progn
  44.      (setq actDoc(vla-get-ActiveDocument
  45.            (vlax-get-acad-object))
  46.        cBl(vla-ObjectIDtoObject actDoc
  47.         (vla-get-OwnerID
  48.           (setq cAtt
  49.             (vlax-ename->vla-object(car cAtt)))))
  50.        cTag(vla-get-TagString cAtt)
  51.        sucCnt 0 errCnt 0
  52.        wSet(ssadd)
  53.        ); end setq
  54.      (if(vlax-property-available-p cBl 'EffectiveName)
  55.    (progn
  56.      (setq fStr(vla-get-EffectiveName cBl)
  57.        nLst(mapcar 'vla-get-Name
  58.               (vl-remove-if-not
  59.                 (function(lambda(x)
  60.               (equal fStr(vla-get-EffectiveName x))))
  61.                     (mapcar 'vlax-ename->vla-object
  62.                       (vl-remove-if 'listp
  63.                                 (mapcar 'cadr(ssnamex
  64.                       (ssget "_X" '((0 . "INSERT")
  65.                     (66 . 1)(2 . "`*U*,")))))))))
  66.        ); end setq
  67.       (foreach n nLst
  68.         (if(not(member n exLst))
  69.             (setq fStr(strcat "`" n "*," fStr)
  70.               exLst(cons n exLst)
  71.               ); end setq
  72.           ); end if
  73.         ); end foreach
  74.      (setq fLst(list '(0 . "INSERT")(cons 2 fStr)))
  75.      ); end progn
  76.    (setq fLst(list '(0 . "INSERT")(cons 2(vla-getName cBl))))
  77.    ); end if
  78.      (princ "\n<<< Select blocks >>> ")
  79.      (if(setq fSet(ssget fLst))
  80.    (progn
  81.      (princ(strcat "\n" (itoa(sslength fSet)) " block(s) found. "))
  82.        (setq cFrom(getstring T
  83.             (strcat "\nChange from <"
  84.                 (setq oVal(vla-get-TextString cAtt)) ">: ")))
  85.      (if(= "" cFrom)(setq cFrom oVal))
  86.      (foreach b(mapcar 'vlax-ename->vla-object
  87.                       (vl-remove-if 'listp
  88.                                 (mapcar 'cadr(ssnamex fSet))))
  89.        (setq atLst(vlax-safearray->list
  90.             (vlax-variant-value
  91.               (vla-GetAttributes b))))
  92.        (foreach at atLst
  93.             (if(and
  94.               (equal(vla-get-TagString at)cTag)
  95.               (equal(vla-get-TextString at)cFrom)
  96.              ); end and
  97.             (progn
  98.               (setq pLst(cons at pLst))
  99.               (ssadd(vlax-vla-object->ename b)wSet)
  100.             ); end progn
  101.           ); end if
  102.          ); end foreacn
  103.        ); end foreach
  104.      (if(/= 0(length pLst))
  105.        (progn
  106.          (princ
  107.        (strcat "\n" (itoa(length pLst)) " attribute(s) found. ")
  108.        ); end princ
  109.          (sssetfirst nil wSet)
  110.          (if
  111.            (and
  112.              (setq cTo(getstring T "\nChange to: "))
  113.              (/= "" cTo)
  114.              ); end and
  115.            (progn
  116.         (sssetfirst nil nil)
  117.             (vla-StartUndoMark actDoc)
  118.              (foreach a pLst
  119.                 (if(vl-catch-all-error-p
  120.                  (vl-catch-all-apply 'vla-put-TextString
  121.                      (list a cTo)))
  122.                   (setq errCnt(1+ errCnt))
  123.                   (setq sucCnt(1+ sucCnt))
  124.                   ); end if
  125.                ); end foreach
  126.             (princ
  127.               (strcat "\n" (itoa sucCnt) " of "
  128.               (itoa(length pLst))" attributes changed. ")
  129.           ); end princ
  130.         (if(/= 0 errCnt)
  131.           (princ(strcat(itoa errCnt) " were on locked layer! "))
  132.           ); end if
  133.         (vla-EndUndoMark actDoc)
  134.         ); end progn
  135.        ); end if
  136.      ); end progn
  137.        (princ
  138.          (strcat "\nCan't to find attributes with '"
  139.              cFrom "' value!"))
  140.        ); end if
  141.      ); end progn
  142.    ); end if
  143.      ); end progn
  144.    (princ "\n It isn't attribute  ")
  145.    ); end if
  146. (princ)
  147. ); end of c:chatt
  148. (princ "\n*** Type CHAT for change of attributes with the chosen value. ***")
  149.          
回复

使用道具 举报

0

主题

252

帖子

290

银币

限制会员

铜币
-8
发表于 2022-7-6 11:55:21 | 显示全部楼层
我使用VBA,按名称调用块,然后按名称调用标记。然后只需编辑值
回复

使用道具 举报

0

主题

252

帖子

290

银币

限制会员

铜币
-8
发表于 2022-7-6 11:59:12 | 显示全部楼层
比格尔在这里做
  1. FilterDXFCode(0) = 0
  2. FilterDXFVal(0) = "INSERT"
  3. FilterDXFCode(1) = 2
  4. FilterDXFVal(1) = "DA1DRTXT"
  5. BLOCK_NAME = "DA1DRTXT"
  6. Set SS = ThisDrawing.SelectionSets.Add("issued")
  7. SS.Select acSelectionSetAll, , , FilterDXFCode, FilterDXFVal
  8. For Cntr = 0 To SS.Count - 1
  9.   attribs = SS.Item(Cntr).GetAttributes
  10.        attribs(0).TextString = "ISSUED FOR CONSTRUCTION"
  11.        attribs(3).TextString = "0"
  12.        attribs(0).Update
  13.        attribs(3).Update
  14. Next Cntr

如果他知道4个(假定)属性中的这一个,他希望更新#1和#4(基于0)
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 12:04:21 | 显示全部楼层
对不起,伙计们,还有一点信息DA1DRTXT是一个A1标题栏,这就是它的名称。它有大约10个属性,但我只需要更改第一个和第四个ie属性(0)和属性(3)。
 
使用块名尝试代码,只需更改从0开始的属性编号,以查看需要使用的编号。
 
还可以双击你的区块,这时会出现“eattedit”,只需在屏幕上编辑属性以计算出数字的信息中从零开始倒计时。
 
你可能会发现,如果你多次运行它,它会给出一个错误,因为它是第二次创建选择集,只需添加
此图纸。选择集。项目(“已发行”)。删去
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 12:08:49 | 显示全部楼层
你好
我需要有关AutoCAD脚本的小帮助。我使用AutoCAD map 2009,并尝试制作脚本,将块(块名“kc”)中的颜色从红色更改为ByLayer!!该脚本需要对图纸中每个名为“kc”的块执行此操作。我感谢您的帮助!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 03:13 , Processed in 1.363835 second(s), 72 queries .

© 2020-2025 乐筑天下

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