FabioDG 发表于 2022-7-5 22:22:17

动态块x Autolisp

有人知道如何使用autolisp将动作的值更改为动态块长度吗?非常感谢。

Lee Mac 发表于 2022-7-5 22:33:47

您可以使用我的设置动态块属性值函数,这是我的动态块函数的一部分。

FabioDG 发表于 2022-7-5 22:41:41

令人印象深刻的是,我怀疑这正是所需要的。
但由于我什么都不懂,我不知道如何使用它。
使用他们的例程,下面是我试图将动态块的标签距离值设置为“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)
   )

)

 
非常感谢。

7o7 发表于 2022-7-5 22:46:05

你的代码有些地方出错了,我重写了它,它很好。

(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)
)
)

Lee Mac 发表于 2022-7-5 22:51:08

请注意,没有必要以任何方式修改我的代码-
您应该使用所需的参数调用函数,例如:
(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)
如果您在使用我的代码时保留我的代码头,我将不胜感激。

7o7 发表于 2022-7-5 22:58:44

对不起,李,我不知道这是你的密码。

Lee Mac 发表于 2022-7-5 23:05:36

 
别担心。

FabioDG 发表于 2022-7-5 23:10:34

它工作得很好。我会接受你的评论。为什么不呢?非常感谢。

Lee Mac 发表于 2022-7-5 23:16:47

不客气,法比奥,很乐意帮忙。

SLW210 发表于 2022-7-5 23:23:19

FabioDG,
 
请阅读代码发布指南并编辑您的帖子,将代码包含在代码标签中。
页: [1]
查看完整版本: 动态块x Autolisp