我希望去掉它的“entsel”部分,只让lisp选择图形中的唯一实体,而不需要用户的任何输入。
我认为OP不想选择任何块,因此需要使用模式为“_X”的ssget函数,逐个迭代选择集实体名称。 Chiimayred,我已经更新了我在上一页发布的代码。根据您的描述,我假设当您使用此命令时,图形中只有一个块。
Tharwat,请检查我的更新,并让我知道我是否在正确的轨道上(当然,如果时间允许)
很好,但请在下面的例程中查找代码的新更改。
让我们希望用户将所有层解锁,以避免意外的错误消息。
(defun c:test (/ sset blk newscl n)
(if (setq sset (ssget "_x" (list '(0 . "INSERT") (cons 410 (getvar "ctab")))))
(repeat (setq n (sslength sset))
(setq blk (ssname sset (setq n (1- n))))
(entmod(append(entget blk) (list (cons 41 1.025) (cons 42 1.025))))
(command "_.explode" blk "")
)
(prompt "\nNo blocks in drawing!")
)
(princ)
)
我懂了!以防出现多个块,对吗?
如果你说的是代码中的变化,那么是正确的,但是如果你说的是第二段,那么我可以告诉你,如果在锁定层中的任何选定块,代码不能改变比例,也不能分解它。
是的,我在回复第一段。但我会记住这两点 (defun c:utm2bp (/ blk)
(command
"_.scale"
"_all"
""
'(0 0)
3.28084
"_block"
"1"
'(0 0)
"_all"
""
)
(if (setq sset (ssget "_x" (list '(0 . "INSERT") (cons 410 (getvar "ctab")))))
(repeat (setq n (sslength sset))
(setq blk (ssname sset (setq n (1- n))))
(entmod(append(entget blk) (list (cons 41 1.025) (cons 42 1.025))))
(command "_.explode" blk "")
)
(prompt "\nNo blocks in drawing!")
)
(princ)
)
下面是它的样子。。。当我运行这个lisp时,我不断得到一个“绘图中没有块”提示。。。 我建议如下:
(defun c:utm2bp ( / blk sel )
(if (= 1 (getvar 'cvport))
(princ "\nCommand only available in Modelspace.")
(if (setq sel (ssget "_X" '((410 . "Model"))))
(progn
(setq blk 0)
(while (tblsearch "block" (itoa (setq blk (1+ blk)))))
(setq blk (itoa blk))
(command
"_.scale" sel "" "_non" '(0 0) 3.28084
"_.-block"blk"_non" '(0 0) sel ""
"_.-insert" blk"_non" '(0 0) 1.025 1.025 0.0
"_.explode" (entlast)
"_.-purge" "_b" blk "_N"
)
)
(princ "\nNo objects found in Modelspace.")
)
)
(princ)
)
嘿,我现在正在试。。。你能解释一下while命令、tblsearch、progn和这段代码的用法吗
(setq blk 0)
(while (tblsearch "block" (itoa (setq blk (1+ blk)))))
(setq blk (itoa blk))
谢谢你的时间、帮助和耐心。
页:
1
[2]