明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1135|回复: 3

[经验] 多重引线属性快中属性修改的方法

[复制链接]
发表于 2018-4-6 12:16 | 显示全部楼层 |阅读模式
修改多重引线块中属性的方法,包含几个子函数,需要的朋友可参考。等空了录个gif演示下。
  1. ;;子函数:
  2. ;;1.获取多重引线对象某个属性
  3. ;;2.设置多重引线某个属性的值
  4. ;;3.获取多重引线的属性值列表
  5. ;;4.批量设置某多重引线属性值
  6. ;;5.对vla对象集合中,将多重引线中符合wcmatch的属性标签的多重引线筛选出来

  7. ;;1.(zr-ml-getatt vl-ml flagstr att-tag) -> value
  8. ;;调用:(zr-ml-getatt (vl-en0) "PROMPTSTRING" "尺寸")
  9. ;;说明:获取多重引线对象某个属性
  10. ;;参数:vlen0:多重引线的vla对象
  11. ;;参数:flagstr:标签,可选择"PROMPTSTRING"或"TAGSTRING"
  12. ;;参数:att-tag:块中属性的标签,可按PROMPTSTRING或TAGSTRING进行选择
  13. ;;返回:属性值
  14. (defun zr-ml-getatt (vlen0 flagstr att-tag / )  
  15.   (cdr (assoc att-tag (zr-ml-getatts vlen0 flagstr)))  
  16. )

  17. ;;2.(zr-ml-setatt vl-ml flagstr att-tag att-value) -> Attribute value if successful, else nil.
  18. ;;调用 (zr-ml-setatt (vl-en0) "PROMPTSTRING" "尺寸" "500*500")
  19. ;;说明:设置多重引线某个属性的值
  20. ;;参数:vlen0:多重引线的vla对象
  21. ;;参数:flagstr:标签,可选择"PROMPTSTRING"或"TAGSTRING"
  22. ;;参数:att-tag:块中属性的标签,可按PROMPTSTRING或TAGSTRING进行选择
  23. ;;参数:att-value:要设置的属性值
  24. ;;返回:无
  25. (defun zr-ml-setatt (vlen0 flagstr att-tag att-value / id blk-name blk)
  26.   (if (or (= (strcase flagstr) "PROMPTSTRING") (= (strcase flagstr) "TAGSTRING"))
  27.     (progn
  28.       (if (not (= "" (setq blk-name (vla-get-ContentBlockName vlen0))))
  29.         (progn
  30.           (setq blk (vla-Item (vla-get-Blocks (zr-dqwd)) blk-name))
  31.           (vlax-for o blk
  32.             (if (= "AcDbAttributeDefinition" (vla-get-ObjectName o))
  33.               (if (= (strcase (vlax-get-property o flagstr)) (strcase att-tag))
  34.                 (setq id (vla-get-ObjectID o))
  35.               )              
  36.             )   
  37.           )
  38.         )
  39.       )      
  40.     )
  41.   )
  42.   (vla-SetBlockAttributeValue vlen0 id att-value)
  43.   (princ)
  44. )
  45. ;;3.(zr-ml-getatts vl-ml flagstr) -> association list
  46. ;;调用:(zr-ml-getatts (vl-en0) "PROMPTSTRING")
  47. ;;调用:(zr-ml-getatts (vl-en0) "TAGSTRING")
  48. ;;说明:获取多重引线的属性值列表
  49. ;;参数:vlen0:多重引线的vla对象
  50. ;;参数:flagstr:标签,可选择"PROMPTSTRING"或"TAGSTRING"
  51. ;;返回:多重引线的属性值列表
  52. (defun zr-ml-getatts (vlen0 flagstr /  blk-name blk l3)
  53.   (if (or (= (strcase flagstr) "PROMPTSTRING") (= (strcase flagstr) "TAGSTRING"))
  54.     (progn
  55.       (if (not (= "" (setq blk-name (vla-get-ContentBlockName vlen0))))
  56.         (progn
  57.           (setq blk (vla-Item (vla-get-Blocks (zr-dqwd)) blk-name))
  58.           (vlax-for o blk
  59.             (if (= "AcDbAttributeDefinition" (vla-get-ObjectName o))
  60.               (setq l3
  61.                 (cons
  62.                   (cons
  63.                     (vlax-get-property o flagstr) (vla-GetBlockAttributeValue vlen0 (vla-get-ObjectID o))
  64.                   )
  65.                   l3
  66.                 )        
  67.               )
  68.             )   
  69.           )
  70.         )
  71.       )
  72.       (setq l3 (reverse l3))
  73.     )
  74.   )      
  75. )

  76. ;;4.(zr-ml-setatts vl-ml flagstr ((<tag> . <value>)...))
  77. ;;调用:(zr-ml-setatts (vl-en0) "PROMPTSTRING" '(("尺寸" . "100*100") ("个数" . 2)))
  78. ;;说明:批量设置某多重引线属性值
  79. ;;参数:vlen0:多重引线的vla对象
  80. ;;参数:flagstr:标签,可选择"PROMPTSTRING"或"TAGSTRING"
  81. ;;参数:asslist:关联表,形如((<tag> . <value>)...))样式
  82. ;;返回:无
  83. (defun zr-ml-setatts (vlen0 flagstr asslist / )
  84.   (mapcar '(lambda (x) (zr-ml-setatt vlen0 flagstr (car x) (cdr x)))
  85.     asslist
  86.   )  
  87.   (princ)
  88. )

  89. ;;5.(zr-ml-searchatts ss flagstr att-tag match-str) -> vla list which att-tag match match-str
  90. ;;调用:(zr-ml-searchatts (ss->ssvlalist (ssget "_X" '((0 . "MULTILEADER")))) "PROMPTSTRING" "风口" "GP")
  91. ;;说明:对vla对象集合中,将多重引线中符合wcmatch的属性标签的多重引线筛选出来
  92. ;;参数:vlalist:vla对象的list,可由ss->ssvlalist函数将ss转化而来
  93. ;;参数:flagstr:"PROMPTSTRING" 或 "TAGSTRING",用于指定按属性的哪种标签选择
  94. ;;参数:att-tag:属性的标签,如“风口”
  95. ;;参数:match-str:属性的值所要匹配的字符串模式,如风口为AV AV/D,模式为AV*,选择所有AV开头的风口
  96. ;;返回:list,里面为符合条件的vla对象
  97. (defun zr-ml-searchatts (vlalist flagstr att-tag match-str / i vlen0 sum blk-name blk)
  98.   (foreach vlen0 vlalist
  99.     (if (and
  100.           (strcase= (vla-get-ObjectName vlen0) "AcDbMLeader")
  101.           (not (= "" (setq blk-name (vla-get-ContentBlockName vlen0))))         
  102.         )
  103.       (progn
  104.         (setq blk (vla-Item (vla-get-Blocks (zr-dqwd)) blk-name))
  105.         (vlax-for o blk
  106.           (if (= "AcDbAttributeDefinition" (vla-get-ObjectName o))
  107.             (if (strcase= (vlax-get-property o flagstr) att-tag)
  108.               (if (strcase-wcmatch (vla-GetBlockAttributeValue vlen0 (vla-get-ObjectID o)) match-str)
  109.                 (setq sum (cons vlen0 sum))
  110.               )
  111.             )              
  112.           )   
  113.         )
  114.       )         
  115.     )
  116.   )  
  117.   (setq sum (reverse sum))
  118. )


  1. ;;其余功能子函数
  2. (defun zr-dqwd ( / )
  3.   (vla-get-ActiveDocument (vlax-get-acad-object)))
  4. (defun strcase= (a b / )
  5.   (if (and (= (type a) 'STR) (= (type b) 'STR))
  6.     (= (strcase a) (strcase b))
  7.     (= a b)
  8.   )
  9. )
  10. (defun strcase-wcmatch (str pat / )
  11.   (wcmatch (strcase str) (strcase pat))
  12. )





发表于 2018-4-13 23:49 | 显示全部楼层
感谢 Zrrrrr 分享程序!!!!
发表于 2018-12-7 13:57 | 显示全部楼层
学习一下,谢谢楼主分享
发表于 2019-6-19 17:13 | 显示全部楼层
这是好东西啊,为啥没人顶呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-23 16:06 , Processed in 0.289129 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表