动态块x Autolisp
有人知道如何使用autolisp将动作的值更改为动态块长度吗?非常感谢。 您可以使用我的设置动态块属性值函数,这是我的动态块函数的一部分。 令人印象深刻的是,我怀疑这正是所需要的。但由于我什么都不懂,我不知道如何使用它。
使用他们的例程,下面是我试图将动态块的标签距离值设置为“1”的步骤。
当然,它不起作用。
(defun c:test ( blk prp val )
(setq blk (car (entsel))) ; block name
(setq prp "distance1") ; label distance
(setq val 1) ; distance value
(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)
)
)
非常感谢。 你的代码有些地方出错了,我重写了它,它很好。
(defun c:test (/ blk prp val)
(setq blk (vlax-ename->vla-object (car (entsel)))) ; block object
(setq prp "distance1") ; label distance
(setq val 1) ; distance value
(setq prp (strcase prp))
(vl-some
'(lambda (x)
(if (= prp (strcase (vla-get-propertyname x)))
(vla-put-valuex (vlax-make-variant val (vlax-variant-type (vla-get-value x))))
)
)
(vlax-invoke blk 'getdynamicblockproperties)
)
)
请注意,没有必要以任何方式修改我的代码-
您应该使用所需的参数调用函数,例如:
(defun c:test ( / blk )
(if (and (setq blk (car (entsel "\nSelect dynamic block: ")))
(setq blk (vlax-ename->vla-object blk))
(= "AcDbBlockReference" (vla-get-objectname blk))
(= :vlax-true (vla-get-isdynamicblock blk))
)
(LM:setdynpropvalue blk "distance1" 1.0)
)
(princ)
)
;; 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
(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)
)
)
(vl-load-com) (princ)
如果您在使用我的代码时保留我的代码头,我将不胜感激。 对不起,李,我不知道这是你的密码。
别担心。 它工作得很好。我会接受你的评论。为什么不呢?非常感谢。 不客气,法比奥,很乐意帮忙。 FabioDG,
请阅读代码发布指南并编辑您的帖子,将代码包含在代码标签中。
页:
[1]