Vlisp访问动态块的定制属性(不知道是不是这个名字)问题?
附件中是从论坛下载的一个动态块,用这个程序看,属性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中,只显示图片上的那几个,显示的这几个与其它的在属性上有什么不同?是如何得到的?
本帖最后由 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函数只能对不同的动态块进行个例操作,通用性不强。因此我认为得到这个答案的意义不是很大。
本帖最后由 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 12:17
小白问个弱智问题,怎么知道getdynamicblockproperties有哪些属性的?propertyName、allowedValues什么的 ...
是这个意思吗?
(setq OBJ(vlax-ename->vla-object (car (entsel))))
(mapcar '(lambda (X) (vlax-get X 'PropertyName))
(vlax-invoke OBJ 'getDynamicBlockProperties)
) 顶一下,继续求助 楼主之所以看到的没有程序获得的属性多,是因为该动态块包含不可见的状态,而每个状态包含若干的动态属性 请版主再明示,我要得到显示的那五个特性,如何判断不可见的状态?有的特性还会随着“Visibility"的值不同跟随变化。 版主辛苦了,这么晚还不睡,谢谢!
要是没有办法,我也就死心了,这个问题是我在完善选择易的时候发现的,动态特性太多,对话框都显示不出来了 学习的精神,值得学习. caoyin 发表于 2011-5-26 23:59
(defun c:TT ()
(setq OBJ(vlax-ename->vla-object (car (entsel))))
;;获取动态块的属性
小白问个弱智问题,怎么知道getdynamicblockproperties有哪些属性的?propertyName、allowedValues什么的,
我把getdynamicblockproperties换成其他的就错误了。
页:
[1]
2