neeboy74 发表于 2022-7-5 17:33:49

尝试修改mu的LISP

大家好:
 
我有一些LISP,可以将单个选定实体移动到图形中的不同层。这些对象都在块内。
 
我现在需要扩展功能,以便可以选择多个对象
并将其移动到指定层。
 
我已尝试修改所附的示例文件;选择过程是可行的,但我不断得到“糟糕的参数类型:consp”
我附上了Lisp程序;我做错了什么?需要移动的有问题的对象都是直线、其他几何体等。我已经尝试阅读了有关此操作的选择标准,但这是我无法理解的。
到_层。lsp

Tharwat 发表于 2022-7-5 17:51:45


(defun c:tolayer(/ doc ss sn)
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(vla-endundomark doc)
(vla-startundomark doc)
(cond
   ((not (tblsearch "LAYER" "HILMOT-ARROWS"))
    (princ (strcat "\nLayer < HILMOT-ARROWS > is not found !")))
   ((and (princ "\nSelect object to move to layer < HILMOT-ARROWS >")
         (setq ss (ssget "_:L" '((0 . "~VIEWPORT"))))
         )
    (while (setq sn (ssname ss 0))
      (entmod (append (entget sn) '((8 . "HILMOT-ARROWS"))))
      (ssdel sn ss))
    )
   )
(vla-endundomark doc)
(princ)
) (vl-load-com)

neeboy74 发表于 2022-7-5 18:00:33

Tharwat,感谢您的贡献,但我认为您的代码正在将整个块移动到指定的层。我需要能够在块内移动多个选定的单个项目,而不是整个块本身。

Tharwat 发表于 2022-7-5 18:06:04

我只是修改了一下你的附加代码。
你可以按常规移动到块内拾取的对象层吗?这就是你想要的吗?

neeboy74 发表于 2022-7-5 18:21:17

我在寻找我选择的人。。。当我说选择时,我的意思是用普通的“拖动窗口”方法进行选择。我尽量避免挑选每一个单独的物体,其中一些是不到一英寸长的线,这有点令人不安,试图分别挑选20-30条真正的小线。我必须定期修改50-150个唯一(当然)块定义。我正在尽可能地节省时间,而不是每次都必须打开/关闭块编辑器,这正是我想要的。
 
我已经涵盖了“全部移动”选项。

pkenewell 发表于 2022-7-5 18:33:19

 
 
不幸的是,SSGET函数无法在块内进行多次选择,除非您处于refedit环境中。我知道的唯一方法是使用(nentsel),这只是一个单一的选择。如果这里的其他人知道另一种方法-很好,但我不认为你的要求与VL是可能的。
 
 
作为一种替代方法:是否可以在这些块中搜索公共图层或线型(或任何其他公共特性)?如果是这种情况,您可以使用lisp在块定义中搜索并进行更改。

neeboy74 发表于 2022-7-5 18:42:19

是的,这就是我害怕的,没有真正的解决办法。。。。我目前正在开发LISP,它可以自动化几乎所有的东西,但我在考虑万一“一切”都不是最终可以实现的解决方案。谢谢你的回复!
页: [1]
查看完整版本: 尝试修改mu的LISP