TheyCallMeJohn 发表于 2022-7-5 17:37:34

翻转参数,动态块

有人知道使用auto-lisp-visual lisp切换指定翻转参数的干净方法吗?
 
我使用getdynprops、getdynpropvalue、PutdynnPropValue[由Jeff Mishler根据Steve Doman、Herman Mayfarth和Tony Tanzillo的代码编写]来满足大多数动态块更改需求,但我无法实现,它们似乎不适用于flip参数。

Lee Mac 发表于 2022-7-5 17:43:48

考虑以下功能:

;; Toggle Flip State-Lee Mac
(defun toggleflipstate ( obj )
   (if
       (and
         (= "AcDbBlockReference" (vla-get-objectname obj))
         (= :vlax-true (vla-get-isdynamicblock obj))
       )
       (vl-some
         (function
               (lambda ( p )
                   (if (equal '(0 1) (vlax-get p 'allowedvalues)) ;; likely to be a flip parameter
                     (vla-put-value p (vlax-make-variant (- 1 (vlax-get p 'value)) vlax-vbinteger))
                   )
               )
         )
         (vlax-invoke obj 'getdynamicblockproperties)
       )
   )
)
用法:
示例程序:
(defun c:flip ( / obj )
   (if (setq obj (car (entsel)))
       (toggleflipstate (vlax-ename->vla-object obj))
   )
   (princ)
)
(vl-load-com) (princ)

TheyCallMeJohn 发表于 2022-7-5 17:50:43

李·麦克,
我有多个翻转状态。有没有办法把我想设置的名称和参数传递给它?有些是用户可以访问的,有些不是,因为它们是由查找参数控制的。
 

Lee Mac 发表于 2022-7-5 17:56:45

 
当然,通常可以使用我的Set Dynamic Property Value函数。
 
对于您的情况:
(LM:SetDynamicPropValue <VLA-Object> "UB_FLIP" 1)
或:
(LM:SetDynamicPropValue <VLA-Object> "UB_FLIP" 0)

chowter 发表于 2022-7-5 18:00:23

您好,我在设置翻转参数方面有一些问题。我使用了您的“设置动态属性值”代码:
 
运行脚本后出现错误:
 
6
 
我的翻转参数名称:
翻转状态0
翻转状态1
 
我的动态块名称:
F\u MOD\u DIP\u SW\u水平
 
我需要一些帮助。。。

Lee Mac 发表于 2022-7-5 18:08:28

第一个参数必须是有效的VLA对象——有关如何向函数提供VLA对象,请参阅我前面的示例程序。

BrianTFC 发表于 2022-7-5 18:15:17

李,
我知道这是一个老线程,但是,有没有办法让代码通过窗口选择来翻转多个块?
 
(defun c:flip ( / obj )
   (if (setq obj (car (entsel)))
       (toggleflipstate (vlax-ename->vla-object obj))
   )
   (princ)
)
(vl-load-com) (princ)

Lee Mac 发表于 2022-7-5 18:16:08

 
当然可以-请尝试以下操作:
从这里切换翻转状态功能。

Louderjohn 发表于 2022-7-5 18:22:09

李,
做翻转动作。lsp程序仅翻转遇到的第一个翻转参数?如果动态块中定义了多个翻转参数,该怎么办?

BrianTFC 发表于 2022-7-5 18:28:50

李,
 
非常感谢!!!!
 
布瑞恩
页: [1] 2
查看完整版本: 翻转参数,动态块