获取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) (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公司
你描述的内容很容易编码。最好在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公司 谢谢,我还得再看一下
但是这些描述非常有用。
谢谢你的帮助
很高兴为您服务,随时通知我们 FWIW-http://www.cadtutor.net/forum/showthread.php?61221-动态块计数&p=415884&viewfull=1#post415884
漂亮的林奇·伦德曼。我很久以前就放弃了寻找一种方法来捕捉“Visibility”paramater的名字,现在我已经看到了它是如何做到的。书签。。点击点击
谢谢你这么说
可见性参数不一定称为“可见性…”
这正是我的意思,这就是为什么我用双引号将单词visibility括起来,以提醒其他人它并不总是被命名为“visibility”,并阅读RM的linky。
抱歉给你带来困惑
哦,对了,很抱歉弄糊涂了,不管它值多少钱,这就是我用的。
干杯
页:
[1]
2