明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5497|回复: 13

Vlisp访问动态块的定制属性(不知道是不是这个名字)问题?

[复制链接]
发表于 2011-5-25 14:49 | 显示全部楼层 |阅读模式
附件中是从论坛下载的一个动态块,用这个程序看,属性N多:(defun c:tdb ()
(setq obj (vlax-ename->vla-object (car (entsel))))
(if (= (vlax-get-property obj 'isdynamicblock) :vlax-true)
(progn
(setq v (vla-getdynamicblockproperties obj))
(setq vval (vlax-variant-value v))
(setq sal (vlax-safearray->list vval))
(setq salnth (length sal))
(setq count 0)
(while (/= count salnth)
(vlax-dump-object (nth count sal))
(setq count (+ count 1))
)
)
(print "Not a dynamic block")
)
(setq count nil)
(princ)
)

但在ACAD中,只显示图片上的那几个,显示的这几个与其它的在属性上有什么不同?是如何得到的?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2011-5-26 23:59 | 显示全部楼层
本帖最后由 caoyin 于 2011-5-27 01:15 编辑

(defun c:TT ()
(setq OBJ  (vlax-ename->vla-object (car (entsel))))
;;获取动态块的属性
(setq PROS (vlax-invoke OBJ 'getdynamicblockproperties))
;;;----------------------------------------------------------
;;获取属性名
(mapcar '(lambda (V) (vlax-get V 'propertyName)) PROS)
;;获取属性是否为只读
(mapcar 'vla-get-readOnly PROS)
;;获取属性是否显示
(mapcar 'vla-get-show PROS)
;;获取所有属性的允许值
(mapcar '(lambda (V) (vlax-get V 'allowedValues)) PROS)
;;获取所有属性的当前值
(mapcar '(lambda (V) (vlax-get V 'Value)) PROS)
)
终于明白楼主的意思了,研究了一晚上也没有搞定。
不过,由于动态块是VLISP所无法直接创建的,而且具有很多的不可确定性,用现有的VLA函数只能对不同的动态块进行个例操作,通用性不强。因此我认为得到这个答案的意义不是很大。

回复 支持 1 反对 0

使用道具 举报

发表于 2021-1-19 15:32 | 显示全部楼层
本帖最后由 caoyin 于 2021-1-19 15:34 编辑

十年前的帖子被翻出来了,哈哈
动态块的很多数据都在扩展词典里,读取应该问题不大,修改好像挺麻烦的!
(setq BLK (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
                 (vla-get-effectivename (vlax-ename->vla-object (car (entsel))))
              )
       DIC (dictsearch
                (vlax-vla-object->ename (vla-getextensiondictionary BLK))
              "ACAD_ENHANCEDBLOCK"
          )
)
发表于 2021-1-19 15:38 | 显示全部楼层
无尽的手残 发表于 2021-1-19 12:17
小白问个弱智问题,怎么知道getdynamicblockproperties有哪些属性的?propertyName、allowedValues什么的 ...

是这个意思吗?
(setq OBJ  (vlax-ename->vla-object (car (entsel))))
(mapcar '(lambda (X) (vlax-get X 'PropertyName))
          (vlax-invoke OBJ 'getDynamicBlockProperties)
  )
 楼主| 发表于 2011-5-26 19:22 | 显示全部楼层
顶一下,继续求助
发表于 2011-5-26 20:04 | 显示全部楼层
楼主之所以看到的没有程序获得的属性多,是因为该动态块包含不可见的状态,而每个状态包含若干的动态属性
 楼主| 发表于 2011-5-26 22:10 | 显示全部楼层
请版主再明示,我要得到显示的那五个特性,如何判断不可见的状态?有的特性还会随着“Visibility"的值不同跟随变化。
 楼主| 发表于 2011-5-27 08:35 | 显示全部楼层
版主辛苦了,这么晚还不睡,谢谢!
要是没有办法,我也就死心了,这个问题是我在完善选择易的时候发现的,动态特性太多,对话框都显示不出来了
发表于 2011-5-28 10:14 | 显示全部楼层
学习的精神,值得学习.
发表于 2021-1-19 12:17 | 显示全部楼层
caoyin 发表于 2011-5-26 23:59
(defun c:TT ()
(setq OBJ  (vlax-ename->vla-object (car (entsel))))
;;获取动态块的属性

小白问个弱智问题,怎么知道getdynamicblockproperties有哪些属性的?propertyName、allowedValues什么的,
我把getdynamicblockproperties换成其他的就错误了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 00:02 , Processed in 0.417782 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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