martymoose 发表于 2022-7-6 17:09:43

插入块并继承层f

我有一个几百个街区的街区图书馆。我将其中许多块插入到我的图形中(一次一个),并捕捉到图形中已有的线条。当我插入并捕捉到这些线时,我需要块来获取我要捕捉到的线的层。我只是不知道如何做到这一点。
最近,在插入块后,我将使用“matchproperties”命令,但只需单击一下就可以了。这会节省我很多时间!!我的所有块都是在第0层上创建的,因此它们可以获取这些线的属性。我通常捕捉到最近的或端点。
我感谢你的帮助。

borgunit 发表于 2022-7-6 17:36:51

Vb还是lisp?

martymoose 发表于 2022-7-6 17:42:02

lisp会很棒。

lpseifert 发表于 2022-7-6 18:04:27

又快又脏。可以修改以满足您的需要

(defun c:test (/ oldecho oldlayer ent p1 entlst layname blkname)
(vl-load-com)
;======ERROR TRAP=======
(setq temperr *error*            ;store *error*
   *error* errortrap            ;re-assign *error*
   oldecho (getvar "cmdecho")    ;store variables as needed
   oldlayer (getvar "clayer")
   )
;======ERROR TRAP=======

(setq oldlayer (getvar "clayer")
   oldecho (getvar "cmdecho")
   ent (entsel "\nPick insert point on line for block: ")
   p1 (vlax-curve-getclosestpointto (car ent) (cadr ent))
   entlst (entget (car ent))
   layname (cdr (assoc 8 entlst))
   blkname (getstring "\nEnter block name: ")
);setq
(setvar "clayer" layname)
(initdia)
(command "-insert" blkname p1 "" "")
;(while (> (getvar 'CmdActive) 0) (command pause))
(setvar "clayer" oldlayer)
(setvar "cmdecho" oldecho)
(princ)
);defun

;======ERROR TRAP=======

(defun errortrap (msg)                  
   (setvar "cmdecho" oldecho)            ;restore variables
   (setvar "clayer" oldlayer)            
   (setq *error* temperr)            ;restore *error*
   (prompt "\nError or break encountered...Resetting System Variables ")    ;inform user
(princ)
);defun
;======ERROR TRAP=======

martymoose 发表于 2022-7-6 18:21:36

在选择我的点并插入我的块后,层暂时更改为我捕捉到的线,但最终还是在我的当前层上结束,就像以前一样。
这是我想的更多。。。
 
1.像往常一样插入我的块,像往常一样捕捉到我的线(至少这样我可以在插入块时在光标上预览块)
 
2.运行lisp,获取“lastpoint”的层,并使其成为我的当前层或“clayer”。
 
3.运行“laymch”命令,将“last”块转换为当前层。
 
4.layerp层
 
如果这能起作用,我认为它会起作用,那么我需要上面#2的帮助。我只是不懂lisp,或者我可以自己做。
页: [1]
查看完整版本: 插入块并继承层f