SunnyTurtle 发表于 2022-7-6 07:04:10

获取dyn的可视状态

我有一个lisp可以改变块的可视状态,但我需要一个lisp,它可以做一些类似于描述的事情:
 
如果
可视性状态=输入1
将可视性状态设置为INPUT2
 
(defun c:set1 (/ ss ans i blk dp scale)

(if (and (setq ss (ssget "_:L" '((0 . "INSERT"))))
   (not (initget 1 "1:1 1:2 1:2.5 1:5 1:10 1:20 1:25 1:50 1:100 1:200 1:250 1:500 1:1000 1:2000 1:2500 1:5000 1:50000 "))
(setq ans (getkword "\nChoose Visibility : ")
   ))

(repeat (setq i (sslength ss))
    (setq blk (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
    (cond (and
      (eq (vla-get-IsDynamicBlock blk) :vlax-true)
             (setq dp (car
      (vl-remove-if-not
          '(lambda (k)
      (eq
      (vla-get-PropertyName
          k
      )
      "RMS_SCALE_VIS"
      )
         )
          (vlax-invoke
   blk
   'GetDynamicBlockProperties
          )
      )
      )
      )
         (if (eq ans "1:1") (setq scale "RTA_SCALE_1"))
                (if (eq ans "1:2") (setq scale "RTA_SCALE_2"))
         (if (eq ans "1:2.5") (setq scale "RTA_SCALE_2.5"))
         (if (eq ans "1:5") (setq scale "RTA_SCALE_5"))
         (if (eq ans "1:10") (setq scale "RTA_SCALE_10"))
         (if (eq ans "1:20") (setq scale "RTA_SCALE_20"))
         (if (eq ans "1:25") (setq scale "RTA_SCALE_25"))
         (if (eq ans "1:50") (setq scale "RTA_SCALE_50"))
         (if (eq ans "1:100") (setq scale "RTA_SCALE_100"))
         (if (eq ans "1:200") (setq scale "RTA_SCALE_200"))
         (if (eq ans "1:500") (setq scale "RTA_SCALE_500"))
         (if (eq ans "1:1000") (setq scale "RTA_SCALE_1000"))
         (if (eq ans "1:2000") (setq scale "RTA_SCALE_2000"))
         (if (eq ans "1:2500") (setq scale "RTA_SCALE_2500"))
         (if (eq ans "1:5000") (setq scale "RTA_SCALE_5000"))
         (if (eq ans "1:50000") (setq scale "RTA_SCALE_50000"))
          (vlax-put dp 'Value scale)
          )
      )
   )
)
)
(princ)

pBe 发表于 2022-7-6 07:10:34

(vlax-put dp 'Value (strcat "RTA_SCALE_" (substr ans 3)))
 
更好了
 

(member (setq scale (strcat "RTA_SCALE_" (substr ans 3))) (vlax-get dp 'AllowedValues))
        (vlax-put dp 'Value scale)
         
 
HTH公司

pBe 发表于 2022-7-6 07:15:17

 
你描述的内容很容易编码。最好在ssget过滤器上包含特定的动态块名。
所以我会这样玩:
 
选择块
检索动态特性
获取允许值的列表
选择“what is”
选择“what will”
更改可见性
 
编辑:像这样
 

(defun c:repv (/ _dp ss allowed n el el2 vs vsn blk dp)
;;;                                pBe 08Jan2013                        ;;;
(defun _dp (enpn m / vis)
                                (setq vis (car(vl-remove-if-not
                                       '(lambda (k) (eq(vla-get-PropertyName k
                                                            )
                                                      pn ))
                                       (vlax-invoke en 'GetDynamicBlockProperties))))
   (if (and vis m)   (vlax-get vis 'AllowedValues) vis))
(Setq same (lambda (f b)
                (Eq (Strcase (vla-get-effectivename f))
                     (strcase b))))
(if (and (setq ss (ssget "_:L" '((0 . "INSERT")(2 . "BLOCKNAME,`*U*"))))
         (same(vlax-ename->vla-object (ssname ss 0)) "BLOCKNAME")
                  (setq allowed (_dp (vlax-ename->vla-object (ssname ss 0))"RMS_SCALE_VIS" t))
         (setq n -1)
         (not (textscr))
         (foreach itm allowed
               (print (list (setq n (1+ n)) itm)))
         (not (initget 1))
         (setq el (getint "\nChoose Visibility to find : "))
         (setq vs (nth el allowed))
         (setq el2 (getint (strcat "\nChoose Visibility for " vs " : ")))
         (setq vsn (nth el2 allowed))
          )
                                (repeat (setq i (sslength ss))
                                            (setq blk (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
             (cond ((and
                     (sameblk "BLOCKNAME")
                                                     (setq dp(_dp blk "RMS_SCALE_VIS" nil))
                     (eq (vlax-get dp 'Value) vs)
                     (vlax-put dp 'value vsn)
                     )
                  )
                   )
               )
   )(princ)
   )

 
 
或者更简单的方法。
选择块
获取允许值的列表
选择要查找的Visibility属性
(sssetfirst nil sset)
然后使用属性更改可见性
 
除我们将使用(sssetfirst nil coll)外,几乎与上述相同
 
HTH公司

SunnyTurtle 发表于 2022-7-6 07:18:29

谢谢,我还得再看一下
但是这些描述非常有用。
 
谢谢你的帮助

pBe 发表于 2022-7-6 07:26:32

 
很高兴为您服务,随时通知我们

BlackBox 发表于 2022-7-6 07:27:54

FWIW-http://www.cadtutor.net/forum/showthread.php?61221-动态块计数&p=415884&viewfull=1#post415884

pBe 发表于 2022-7-6 07:35:55

 
漂亮的林奇·伦德曼。我很久以前就放弃了寻找一种方法来捕捉“Visibility”paramater的名字,现在我已经看到了它是如何做到的。书签。。点击点击
 
谢谢你这么说

Lee Mac 发表于 2022-7-6 07:37:35

 
可见性参数不一定称为“可见性…”

pBe 发表于 2022-7-6 07:42:54

 
这正是我的意思,这就是为什么我用双引号将单词visibility括起来,以提醒其他人它并不总是被命名为“visibility”,并阅读RM的linky。
 
抱歉给你带来困惑

Lee Mac 发表于 2022-7-6 07:49:47

 
哦,对了,很抱歉弄糊涂了,不管它值多少钱,这就是我用的。
 
干杯
页: [1] 2
查看完整版本: 获取dyn的可视状态