请教下使用lisp或者VBA获取动态块中的阵列参数和修改
如图所示,可以使用编程获取到行列偏移的值吗
(defun c:tt()
(SETQ E (CAR (ENTSEL))
BLK (vlax-ename->vla-object E)
)
(princ(LM:getdynpropvalue blk "标注"))
(LM:setdynpropvalueblk "标注" 2000 )
)
;; Get Dynamic Block Property Value-Lee Mac
;; Returns the value of a Dynamic Block property (if present)
;; blk - VLA Dynamic Block Reference object
;; prp - Dynamic Block property name (case-insensitive)
(defun LM:getdynpropvalue ( blk prp )
(setq prp (strcase prp))
(vl-some '(lambda ( x ) (if (= prp (strcase (vla-get-propertyname x))) (vlax-get x 'value)))
(vlax-invoke blk 'getdynamicblockproperties)
)
)
;; Set Dynamic Block Property Value-Lee Mac
;; Modifies the value of a Dynamic Block property (if present)
;; blk - VLA Dynamic Block Reference object
;; prp - Dynamic Block property name (case-insensitive)
;; val - New value for property
;; Returns: New value if successful, else nil
;; 设置动态块特性值-Lee Mac
;; 修改动态块特性的值(如果存在)
;; blk-vla动态块引用对象
;; prp-动态块属性名称(不区分大小写)
;; val-属性的新值
;; 返回:如果成功,则返回新值,否则返回nil
;;;设置动态块属性值
(defun LM:setdynpropvalue (blk prp val)
(setq prp (strcase prp))
(vl-some
'(lambda (x)
(if (= prp (strcase (vla-get-propertyname x)))
(progn
(vla-put-value
x
(vlax-make-variant
val
(vlax-variant-type (vla-get-value x))
)
)
(cond (val)
(t)
)
)
)
)
(vlax-invoke blk 'getdynamicblockproperties)
)
)
可以去找找leemac的函数
注意:vba和lisp只能是获取改变已经有的参数,无法创建新的。想要创建动态块需要net和arx liuhe 发表于 2023-9-18 16:45
可以去找找leemac的函数
好像不行,要获取的数据不在块参照上,我要获取动态块里面指定的阵列动作的列偏移的数据。这个数据好像是不显示在块参照的特性面板上显示的,我并不是要获取“标注”这个属性的数据,而是图片中箭头处的数据 guankuiwu 发表于 2023-9-22 16:16
感觉这个块有些问题吧,那个阵列固定了1500间隔了。这样的块在cad里做不出来的话程序应该不能实现。
你不用管那个标注的1500,标注的那个1500和这个列偏移的1500是有本质区别的,只要获取到列偏移中的这个数值即可 不能,桌子没有开放提供接口 liuhe 发表于 2023-9-18 16:45
可以去找找leemac的函数
那能不能算出来阵列个数呢? kozmosovia 发表于 2023-9-18 16:26
不能,桌子没有开放提供接口
这偏移的值是新建阵列动作时指定的。官方没有开放获取和修改这个值的接口是吗
是的,这个数据是附着在参数动作实体上的,没有函数能获取动作实体。
要获取,只能进入块编辑器,遍历所有实体找 ObjectARX 有接口。 本帖最后由 guankuiwu 于 2023-9-19 16:54 编辑
可以的,{:1_1:}做好动态块,用修改动态块属性值的就可以修改。搜下,论坛里有相关的函数 guankuiwu 发表于 2023-9-19 15:51
可以的,
通过什么方式实现?请教下