willj 发表于 2023-9-18 14:56:35

请教下使用lisp或者VBA获取动态块中的阵列参数和修改




如图所示,可以使用编程获取到行列偏移的值吗






liuhe 发表于 2023-9-18 16:45:46

(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

willj 发表于 2023-9-18 17:25:30

liuhe 发表于 2023-9-18 16:45
可以去找找leemac的函数




好像不行,要获取的数据不在块参照上,我要获取动态块里面指定的阵列动作的列偏移的数据。这个数据好像是不显示在块参照的特性面板上显示的,我并不是要获取“标注”这个属性的数据,而是图片中箭头处的数据

willj 发表于 2023-9-22 17:28:46

guankuiwu 发表于 2023-9-22 16:16
感觉这个块有些问题吧,那个阵列固定了1500间隔了。这样的块在cad里做不出来的话程序应该不能实现。

你不用管那个标注的1500,标注的那个1500和这个列偏移的1500是有本质区别的,只要获取到列偏移中的这个数值即可

kozmosovia 发表于 2023-9-18 16:26:47

不能,桌子没有开放提供接口

liuhe 发表于 2023-9-18 17:06:50

liuhe 发表于 2023-9-18 16:45
可以去找找leemac的函数




那能不能算出来阵列个数呢?

willj 发表于 2023-9-18 18:00:36

kozmosovia 发表于 2023-9-18 16:26
不能,桌子没有开放提供接口

这偏移的值是新建阵列动作时指定的。官方没有开放获取和修改这个值的接口是吗

kozmosovia 发表于 2023-9-18 23:42:27

是的,这个数据是附着在参数动作实体上的,没有函数能获取动作实体。
要获取,只能进入块编辑器,遍历所有实体找

gzxl 发表于 2023-9-19 09:47:27

ObjectARX 有接口。

guankuiwu 发表于 2023-9-19 15:51:29

本帖最后由 guankuiwu 于 2023-9-19 16:54 编辑

可以的,{:1_1:}做好动态块,用修改动态块属性值的就可以修改。搜下,论坛里有相关的函数

willj 发表于 2023-9-19 16:38:50

guankuiwu 发表于 2023-9-19 15:51
可以的,

通过什么方式实现?请教下
页: [1] 2 3
查看完整版本: 请教下使用lisp或者VBA获取动态块中的阵列参数和修改