Mình đang nghiên cứu ra rồi nhé. sử dụng hàm (getpropertyvalue [ename] [property])
property là string có dạng : "AcDbDynBlockProperty" + "distance..."
nếu có giá trị là hiện nếu error là ẩn.
đi kèm với cặp lệnh vl-catch-all-error-p vl-catch-all-apply thì ok luôn.
(defun c:test (/ ent lst lstcheck lstparavisible )
(setq
ent (car (entsel))
lst (LM:getdynprops (vlax-ename->vla-object ent))
lst (vl-remove-if-not '(lambda (x) (eq 'REAL (type (cdr x)))) lst)
lst (mapcar '(lambda (x) (strcat "AcDbDynBlockProperty" (car x)) ) lst)
lstcheck (mapcar '(lambda (x) (vl-catch-all-apply 'getpropertyvalue (list ent x))) lst)
lstparavisible (mapcar
'(lambda (a b)
(if (not (vl-catch-all-error-p b))
(cons (substr a 21) b)
)
)
lst lstcheck
)
)
(vl-remove nil lstparavisible)
)
(defun LM:getdynprops (blk)
(mapcar '(lambda (x)
(cons (vla-get-propertyname x) (vlax-get x 'value))
)
(vlax-invoke blk 'getdynamicblockproperties)
)
)