乐筑天下

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

[编程交流] 访问自定义ShSet属性t

[复制链接]

23

主题

132

帖子

112

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
114
发表于 2022-7-6 14:56:50 | 显示全部楼层 |阅读模式
你好
 
我前一段时间发布了一条帖子,但没有收到任何回应,所以我将使用我迄今为止取得的进展重试。
 
我希望能够访问自定义属性以获取值,然后说如果值=x,则执行Y等。
 
它应该做的是更改标题栏的可见性。自定义属性将为“当前版本”。我找到了允许我更改DB标题栏可见性的代码,但现在需要访问图纸集属性来控制可见性状态。
 
如果你能在任何方面帮助我,我将非常感激。谢谢。
 
下面是我从另一个论坛获得的saple代码,不确定是哪一个,也许这里有人能识别并给予应有的认可。该代码用于更改图形戳记的可见性。我可以修改这个来更改我的标题栏,但也需要上面的修改。
 
正如我所说的,如果您能提供任何帮助,我们将不胜感激
 
  1. ;----------------------------------------------------------- DynamicProps -----
  2. ; Function retrieve or set properties from a dynamic block
  3. ; (DynamicProps (car (entsel)) "Visibility" nil) get the visibility states from a dynamic block
  4. ; (DynamicProps (car (entsel)) "Visibility" "Construction") set the visibility from a dynamic block
  5. ; (DynamicProps (car (entsel)) "" nil) get the properties from a dynamic block
  6. ; (DynamicProps (car (entsel)) "Pipe length" 2000.0) set the properties from a dynamic block
  7. (defun DynamicProps (ename propname value / obj prpL cla cll prp)
  8. (setq obj (if (= (type ename) 'VLA-OBJECT) ename (vlax-ename->vla-object ename)))
  9. (setq prpL (vlax-invoke obj 'getdynamicblockproperties))
  10. (setq return
  11.    (if (setq prp (vl-remove-if-not (function (lambda(x)(= (vlax-get-property x 'PropertyName) propname))) prpL))
  12.      (mapcar (function (lambda(v)
  13.        (if (and (/= value nil)(vlax-property-available-p v 'Value)(/= (type value)'LIST))
  14.          (progn (vlax-put-property v 'Value value)(vla-update obj))
  15.        )
  16.        (if (and (vlax-property-available-p v 'AllowedValues) (vlax-get v 'AllowedValues))
  17.          (list (vlax-get v 'Value)(vlax-get v 'AllowedValues))
  18.   (vlax-get v 'Value)
  19.        )
  20.      )) prp)
  21.      (mapcar (function (lambda(v)(list (vla-get-propertyName v)(vlax-get v 'Value) v))) prpL)
  22.    )
  23. )
  24. return
  25. )
  26. ;------------------------------------------------ MWE:GetDBlockNames ------------------
  27. ; Function for filtering dynamic blocks
  28. ; Arguments: 1
  29. ;    arglst = list met names
  30. ; Syntax: (MWE:GetDBlockNames '("Issue Stamp")) --> (("ISSUE STAMP" "*U833" "*U841")
  31. ;function by James Allen.
  32. ;;; Returns all names used for a dynamic block, including
  33. ;;; the actual block name and all anonymous instances.
  34. ;;;
  35. ;;; (setq names (MWE:GetDBlockNames (list bname)))
  36. ;;;
  37. ;;; bname = Str - Dynamic block name
  38. ;;; names = List - List of all inserted blocks whose
  39. ;;; EffectiveName = bname
  40. ;;;
  41. ;;; (setq names (MWE:GetDBlockNames '("TestDBlock")))
  42. ;;; ("TestDBlock" "*U4" "*U5" "*U6")
  43. ;;;
  44. ;;; James Allen - 26Apr07
  45. ;;; Malicoat-Winslow Engineers, P.C.
  46. ;;;
  47. ;;; Thanks to Joe Burke for pointing out code 331
  48. ;;; and to Tony Tanzillo for prodding in that direction.
  49. ;;;
  50. (defun MWE:GetDBlockNames (arglst / blk edt enm ins name names)
  51. (mapcar 'set '(name) arglst)
  52. (setq names (list name) name (strcase name))
  53. (vl-load-com)
  54. (vlax-for blk (vla-get-Blocks (vlax-get (vlax-get-Acad-Object) 'ActiveDocument))
  55.    (if (and (setq enm (tblobjname "block" (vla-get-Name blk)))
  56.      (setq edt (entget enm))
  57.      (= (logand (cdr (assoc 70 edt)) 1) 1))
  58.      (if (and (setq edt (entget (vlax-vla-object->ename blk)))
  59.        (setq enm (cdr (assoc 331 edt)))
  60.        (setq ins (vlax-ename->vla-object enm))
  61.        (eq (vla-get-ObjectName ins) "AcDbBlockReference")
  62.        (wcmatch (strcase (vla-get-EffectiveName ins)) name))
  63.        (setq names (cons (vla-get-Name blk) names))
  64.      )
  65.    )
  66. )
  67. (reverse names)
  68. ) ;end
  69. ;------------------------------------------------ BlockNamesFilter ------------------
  70. ;; Argument example: ("TestDBlock" "*U4" "*U5" "*U6")
  71. ;; Returns: "TestDBlock,`*U4,`*U5,`*U6,"
  72. (defun BlockNamesFilter (strlst)
  73. (apply 'strcat (mapcar '(lambda (x)
  74.    (if (wcmatch x "`**,`?*")(strcat "`" x ",")(strcat x ","))) strlst)
  75. )
  76. )
  77. ;----------------------------------------------------------- ChangeVisibility -----
  78. ;; Argument example: (ChangeVisibility "Issue Stamp" "Review")
  79. ;; Returns: number of changed states
  80. (defun ChangeVisibility (BlkName state / names ss ssl tempEnt)
  81. (setq names (MWE:GetDBlockNames (list BlkName)))
  82. (prompt (strcat "\nSelect insert Name " BlkName ": "))
  83. (if (and (setq ss (ssget (list '(0 . "INSERT")(cons 2 (BlockNamesFilter names)))))
  84.    (> (setq ssl (sslength ss)) 0))
  85.    (progn
  86.      (while (setq tempEnt (ssname ss 0))
  87. (DynamicProps (vlax-ename->vla-object tempEnt) "Visibility" state)
  88.        (ssdel tempEnt ss)
  89.      )
  90.      (princ (strcat "\nChanged "(itoa ssl) " inserts to the visibility <" state ">."))
  91.      ssl
  92.    )
  93.    (princ (strcat "\nInsert " BlkName " not found."))
  94. )
  95. )
  96. ;----------------------------------------------------------- c:ChvConstruction -----
  97. (defun c:ChvConstruction ()
  98. (ChangeVisibility "Issue Stamp" "Construction")
  99. (princ)
  100. )
  101. ;----------------------------------------------------------- c:ChvReview -----
  102. (defun c:ChvReview ()
  103. (ChangeVisibility "Issue Stamp" "Review")
  104. (princ)
  105. )
  106. ;----------------------------------------------------------- c:ChvBid -----
  107. (defun c:ChvBid ()
  108. (ChangeVisibility "Issue Stamp" "Bid")
  109. (princ)
  110. )
  111. ;----------------------------------------------------------- c:ChvReference -----
  112. (defun c:ChvReference ()
  113. (ChangeVisibility "Issue Stamp" "Reference")
  114. (princ)
  115. )
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 15:34:51 | 显示全部楼层
另一个示例是如何访问动态块的可见性参数:
[code]============================================================        ;;;;                                                              ;;;;  维科。LSP-此lisp程序从;;;;复制可见性状态;;;;一个动态块传递给其他块。                         ;;;;                                                                  ;;;; ============================================================        ;;;;                                                                    ;;;;  呼叫命令:VICO;;;;        ;;;;  选择示例动态块以获取可见性状态;;;;然后选择要复制状态的块集。        ;;;;                                                                    ;;;; ============================================================        ;;;;                                                                     ;;;;  本程序及其部分内容可通过任何方法复制;;;;出于任何原因在任何媒体上。您可以使用或修改此;;;;程序或其部分完全免费。        ;;;;                                                              ;;;;  该程序提供所有故障的“原样”;;;;并明确否认对;;;的任何默示保证;;;;适销性或适合特定用途;;;;        ;;;; ============================================================        ;;;;                                                              ;;;;  V1.0,2008年4月10日,拉脱维亚里加;;;;©Aleksandr Smirnov(ASMI);;;;对于AutoCAD 2000-2008(未在后续版本中测试);;;;http://www.asmitools.com           ;;;;                                                                    ;;;; ============================================================ ;;(defun c:vico(/sBlk eBlk dyPrp cProp curBl prLst cSt efNm fLst bSet nSet errCnt)(vl load com)(if(setq sBlk(entsel“\n选择要复制可见性状态的样本块>”)(if(and(=“INSERT”(cdr(assoc 0(entget(setq eBlk(car sBlk))))(setq sBlk(vlax ename->vla object(car sBlk)))(=:vlax true(vla get IsDynamicBlock sBlk)));结束和(progn(if(setq dyPrp(vla GetDynamicBlockProperties sBlk))(progn(setq dyPrp(vlax safearray->list(vlax variant value dyPrp)))(foreach itm dyPrp(if(vlax-property-available-p itm’AllowedValues)(setq cSt(vla get value itm));如果结束);end foreach(如果cSt(progn(setq efNm(vla get EFIVENAME sBlk))errCnt 0);结束setq(princ“\n>”)(if(setq bSet(ssget'((0。“INSERT”))))(progn(setq bSet(vl remove if'listp(mapcar'cadr(ssnamex bSet)))nSet(ssadd))(foreach i bSet(setq curBl(vlax ename->vla object i))(if(and(vlax-method-applicable-p curBl'GetDynamicBlockProperties)(=efNm(vla get EffectiveName curBl)));结束和(ssadd i nSet));如果结束);结束foreach(setq nSet(mapcar'vlax ename->vla object(vl remove if'listp(mapcar'cadr(ssnamex nSet)а))(foreach bl nSet(setq prLst(vlax safearray->list(vlax variant value(vla GetDynamicBlockProperties bl))))(foreach pr prLst(if(vlax-property-available-p pr'AllowedValues)(if(vl-catch-all-error-p(vl catch all apply‘vla put Value(list pr cSt)))(setq errCnt(1+errCnt));如果结束);如果结束);结束foreach);end foreach(if(/=0 errCnt)(princ(strcat“\n>>>”(itoa errCnt)“位于锁定层上!未选择任何内容!>“可见性”参数未找到!>它不是动态块!>未选择任何内容!
回复

使用道具 举报

23

主题

132

帖子

112

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
114
发表于 2022-7-6 16:20:31 | 显示全部楼层
Asmi,
 
我对延迟回复表示歉意,但感谢您的回复。我已经决定暂时搁置这个小想法,直到晚些时候。
 
再次感谢。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 21:13 , Processed in 0.450163 second(s), 58 queries .

© 2020-2025 乐筑天下

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