jmerch 发表于 2022-7-6 08:07:23

插入块并更改图层

我四处搜索,找不到完整的答案。我只想在用户选择的端点上插入一个块。但我也希望块更改为用户选择端点的对象层。因此,我只希望用户必须选择插入点,从该点获得对象的层,并在稍后的LISP中将其用作块插入点,而无需用户再次选择。以下是我到目前为止掌握的内容(不包括LISP的开头和结尾):
 
(setq cmdecho (getvar "cmdecho"))
   (setvar "CMDECHO" 0)
   (setq clayer (getvar "clayer"))
   (setq osmode (getvar "osmode"))
   (setvar "OSMODE" 1)
   (setq Pick (entsel "\nPick Point"))
   (if(null Pick)
       (command "clayer")
       (setvar "CLAYER" (cdr (assoc 8 (entget (car Pick)))))
   )
   (command "insert" "ISO-VTR" pause "" "" pause)
   (setvar "OSMODE" osmode)
   (setvar "CMDECHO" cmdecho)
   (setvar "CLAYER" clayer)
 
我知道我想的不是简单的事情,希望有人能帮我解决。
 
谢谢

MSasu 发表于 2022-7-6 08:21:16

怎么样:
(if (setq Pick (entsel "\nPick Point"))
(command "insert" "ISO-VTR" pause "" "" pause
         "_CHPROP" (entlast) "" "_LA" (cdr (assoc 8 (entget (car Pick)))) "")
)
 
我还将把选择提示器更改为更相关的内容-你不在那里选择点,而是选择一个实体。
 
当做
米尔恰

jmerch 发表于 2022-7-6 08:25:18

这仍然需要选择2个点,不是吗?我需要将拾取的点(最好是用户选择的线的端点)也放在块插入后第一个“暂停”的位置。

MSasu 发表于 2022-7-6 08:40:57

要使用用户选择的实体中的一个点作为块的插入点,应根据实体类型提取该信息;对于线路,端点存储在DXF代码10和11中(使用ENTGET获得);应比较从这些点到ENTSEL返回的选择点的距离,以使用哪个距离更近。
 
要使用点作为块插入的参数,请执行以下操作:
 
(command "insert" "ISO-VTR" (cadr Pick) "" "" pause)
 
当做
米尔恰

jmerch 发表于 2022-7-6 08:45:16

啊,非常感谢!我试着用(getpoint)。

MSasu 发表于 2022-7-6 08:53:03

线条示例:
 
问候,
米尔恰

jmerch 发表于 2022-7-6 09:04:39

明白了,我来玩玩。再次感谢!

MSasu 发表于 2022-7-6 09:15:56

很高兴见到你!
 
当做
米尔恰
页: [1]
查看完整版本: 插入块并更改图层