乐筑天下

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

[编程交流] 获取动态块属性b

[复制链接]

23

主题

132

帖子

112

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
114
发表于 2022-7-6 07:25:25 | 显示全部楼层 |阅读模式
你好
 
有人能帮我解决以下问题吗。
 
我有一个具有多个可见性状态的动态块。(例如Vis1到Vis5)
 
在每一个可视性中,我都有两个独特的属性。
 
因此,在Vis1中有两个attibute标记,称为Length1和Width1
........Vis2有两个attibute标签,称为Length2&Width2
......
 
我想获得当前可见性状态下属性的值,并将其保存为变量Var1和Var2。
 
搜索中唯一的乐趣是我在李的网站上找到的东西,但我一直无法在他的代码上取得任何进展。(见下文)
 
谢谢你在这方面的帮助
 
  1. Get Attribute Value
  2. Select all ;;----------------=={ Get Attribute Value
  3. }==-----------------;;
  4. ;;                                                            
  5. ;;
  6. ;;  Returns the attribute value associated with the specified
  7. ;;
  8. ;;  tag, within the supplied block, if
  9. present.               
  10. ;;
  11. ;;------------------------------------------------------------;;
  12. ;;  
  13. Author: Lee Mac, Copyright © 2010 - [url="http://www.lee-mac.com"]www.lee-mac.com[/url]      
  14. ;;
  15. ;;------------------------------------------------------------;;
  16. ;;  
  17. Arguments:                                                
  18. ;;
  19. ;;  block - VLA Block Reference
  20. Object                        
  21. ;;
  22. ;;  tag   - Attribute
  23. TagString                              
  24. ;;
  25. ;;------------------------------------------------------------;;
  26. ;;  
  27. Returns:  Attribute TextString, else
  28. nil                  
  29. ;;
  30. ;;------------------------------------------------------------;;
  31. (defun LM:vl-GetAttributeValue ( block tag )
  32.    (setq tag
  33. (strcase tag))
  34.    
  35. (vl-some
  36.       
  37. (function
  38.            
  39. (lambda ( attrib
  40. )
  41.                
  42. (if (eq tag (strcase (vla-get-Tagstring
  43. attrib)))
  44.                   
  45. (vla-get-TextString
  46. attrib)
  47.                
  48. )
  49.            
  50. )
  51.       
  52. )
  53.        (vlax-invoke block
  54. 'GetAttributes)
  55.    )
  56. )
  57. (defun c:test ( / ss )  
  58.    (if (setq ss (ssget
  59. "_+.:E:S" '((0 . "INSERT") (66 .
  60. 1))))
  61.       
  62. (princ
  63.            
  64. (LM:vl-GetAttributeValue
  65.                
  66. (vlax-ename->vla-object (ssname ss
  67. 0))
  68.                
  69. (getstring "\nSpecify Tag String:
  70. ")
  71.            
  72. )
  73.        )
  74.    
  75. )
  76.    (princ)
  77. )
  78. (vl-load-com)
  79. ;;----------------=={ Get Visibility State
  80. }==----------------;;
  81. ;;                                                            
  82. ;;
  83. ;;  Returns the value of the Visibility Parameter of
  84. a        ;;
  85. ;;  Dynamic Block (if
  86. present)                                
  87. ;;
  88. ;;------------------------------------------------------------;;
  89. ;;  
  90. Author: Lee Mac, Copyright © 2011 - [url="http://www.lee-mac.com"]www.lee-mac.com[/url]      
  91. ;;
  92. ;;------------------------------------------------------------;;
  93. ;;  
  94. Arguments:                                                
  95. ;;
  96. ;;  block  -  VLA (Dynamic) Block Reference
  97. Object            
  98. ;;
  99. ;;------------------------------------------------------------;;
  100. ;;  
  101. Returns:  Value of Visibility Parameter, else
  102. nil         
  103. ;;
  104. ;;------------------------------------------------------------;;
  105. (defun LM:GetVisibilityState ( block )
  106.    
  107. (
  108.        (lambda ( name
  109. )
  110.            
  111. (vl-some
  112.                
  113. (function
  114.                   
  115. (lambda ( prop
  116. )
  117.                        
  118. (if (eq name (vla-get-propertyname
  119. prop))
  120.                            
  121. (vlax-get prop
  122. 'value)
  123.                        
  124. )
  125.                   
  126. )
  127.                
  128. )
  129.                
  130. (vlax-invoke block
  131. 'getdynamicblockproperties)
  132.            
  133. )
  134.       
  135. )
  136.        (LM:GetVisibilityParameterName
  137. block)
  138.    )
  139. )
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 07:47:29 | 显示全部楼层
由于每个可见性的标记都不同,因此可以像通常一样检索属性,并使用标记名来标识要分配给变量Var1和Var2的文本字符串值。
回复

使用道具 举报

23

主题

132

帖子

112

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
114
发表于 2022-7-6 08:23:07 | 显示全部楼层
你好
 
谢谢
 
理想情况下,我可以找到包含部分标记名的标记的属性值,即当前可见性状态下的长度和宽度。
 
对于实际可见状态
(setq var 1(获取包含字符串“length”的标记的属性值)
(setq var 2(获取包含字符串“width”的标记的属性值)
 
但我不知道该怎么做,也不知道这是否可行。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 08:43:09 | 显示全部楼层
 
这是可能的
这很容易。由于您是自己的动态块的作者,并且正如我之前提到的,在每个可见性中,您都有一个特定的标记后缀,因此您可以确定当前的可见性,并且使用列表可以针对特定的标记。
 
  1. (setq lst '(("Vis1" . ("LENGTH1" "WIDTH1"))("Vis2" . ("LENGTH2" "WIDTH2"))("Vis3" . ("LENGTH3" "WIDTH3"))))

使用Lee Mac的子LM:GETVISIBILITYSTATE/LM:GetVisibilityParameterName,您可以轻松确定当前状态:
 
假设当前可见性名称为“Vis2”
 
  1. (setq targetTags (assoc "Vis2" lst))

 
如果你不介意张贴你的帖子,我可以为你指出正确的方向。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 05:20 , Processed in 0.472448 second(s), 71 queries .

© 2020-2025 乐筑天下

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