gazzalp 发表于 2022-7-6 16:56:56

 
我试过了,但它所做的是打开图层(我猜,这样我可以添加一个)。更确切地说,是让它自己添加维度层,然后将维度放在“维度”上,这可能吗?
 
还希望有人知道如何在项目插入后使图层返回到原始图层,而不是对所有我想要更改的内容(图案填充、尺寸标注、继续尺寸标注、视口、文本)使用lisp例程

Lee Mac 发表于 2022-7-6 17:02:31

 
试试这个:
 
-层;“m”;“尺寸”;;

Lee Mac 发表于 2022-7-6 17:04:32

 
我知道你是从哪里来的,但我不知道如何通过点击LISP来重置层,但也许有人已经找到了一种方法。
 
如果您想继续使用LISP方式,可以很容易地修改发布的LISP以适应大多数命令。

Lee Mac 发表于 2022-7-6 17:08:48

另一个想法——为什么不只用反应堆呢?
 
这是我在另一个线程上发布的reactor-它将自动将当前层更改为特定层,然后在命令结束或中止后,原始当前层将返回。
 

; Layer Director by Lee McDonnell

(vl-load-com)

(vlr-command-reactor
   nil
   '((:vlr-commandWillstart . startCommand))
) ; end command reactor
(vlr-command-reactor
   nil
   '((:vlr-commandEnded . endcommand))
) ; end command reactor
(vlr-command-reactor
   nil
   '((:vlr-commandCancelled . cancelCommand))
) ; end command reactor

(defun startCommand (calling-reactor startcommandInfo / thecommandstart)
   (setq oldlay (getvar "clayer"))
   (setq thecommandstart (nth 0 startcommandInfo))
   (cond
   ((= thecommandstart "TEXT")
    (setvar "clayer" "TEXT")
   ) ; end condition 1
   ((= thecommandstart "MTEXT")
    (setvar "clayer" "TEXT")
   ) ; end condition 2
   ((= thecommandstart "DTEXT")
    (setvar "clayer" "TEXT")
   ) ; end condition 3

;      ---------------------------

   ((= thecommandstart "DIMLINEAR")
    (setvar "clayer" "DIM")
   ) ; end condition 4
   ((= thecommandstart "DIMALIGNED")
    (setvar "clayer" "DIM")
   ) ; end condition 5
   ((= thecommandstart "DIMRADIUS")
    (setvar "clayer" "DIM")
   ) ; end condition 6
   ((= thecommandstart "DIMDIAMETER")
    (setvar "clayer" "DIM")
   ) ; end condition 7
   ((= thecommandstart "DIMANGULAR")
    (setvar "clayer" "DIM")
   ) ; end condition 8
   ((= thecommandstart "DIMORDINATE")
    (setvar "clayer" "DIM")
   ) ; end condition 9

;      ---------------------------

   ((= thecommandstart "+VPORTS")
    (setvar "clayer" "DEFPOINTS")
   ) ; end condition 10
   ) ; end cond
   (princ)
) ; end startcommand

(defun endCommand (calling-reactor endcommandInfo / thecommandend)
   (setq thecommandend (nth 0 endcommandInfo))
   (cond
   ((= thecommandend "TEXT")
    (setvar "clayer" oldlay)
   ) ; end condition 1
   ((= thecommandend "MTEXT")
    (setvar "clayer" oldlay)
   ) ; end condition 2
   ((= thecommandend "DTEXT")
    (setvar "clayer" oldlay)
   ) ; end condition 3

;      ---------------------------

   ((= thecommandend "DIMLINEAR")
    (setvar "clayer" oldlay)
   ) ; end condition 4
   ((= thecommandend "DIMALIGNED")
    (setvar "clayer" oldlay)
   ) ; end condition 5
   ((= thecommandend "DIMRADIUS")
    (setvar "clayer" oldlay)
   ) ; end condition 6
   ((= thecommandend "DIMDIAMETER")
    (setvar "clayer" oldlay)
   ) ; end condition 7
   ((= thecommandend "DIMANGULAR")
    (setvar "clayer" oldlay)
   ) ; end condition 8
   ((= thecommandend "DIMORDINATE")
    (setvar "clayer" oldlay)
   ) ; end condition 9

;      ---------------------------

   ((= thecommandend "+VPORTS")
    (setvar "clayer" oldlay)
   ) ; end condition 10

   ) ; end cond
   (princ)
) ; end endCommand

(defun cancelCommand (calling-reactor cancelcommandInfo / thecommandcancel)
   (setq thecommandcancel (nth 0 cancelcommandInfo))
   (cond
   ((= thecommandcancel "TEXT")
    (setvar "clayer" oldlay)
   ) ; end condition 1
   ((= thecommandcancel "MTEXT")
    (setvar "clayer" oldlay)
   ) ; end condition 2
   ((= thecommandcancel "DTEXT")
    (setvar "clayer" oldlay)
   ) ; end condition 3

;      ---------------------------

   ((= thecommandcancel "DIMLINEAR")
    (setvar "clayer" oldlay)
   ) ; end condition 4
   ((= thecommandcancel "DIMALIGNED")
    (setvar "clayer" oldlay)
   ) ; end condition 5
   ((= thecommandcancel "DIMRADIUS")
    (setvar "clayer" oldlay)
   ) ; end condition 6
   ((= thecommandcancel "DIMDIAMETER")
    (setvar "clayer" oldlay)
   ) ; end condition 7
   ((= thecommandcancel "DIMANGULAR")
    (setvar "clayer" oldlay)
   ) ; end condition 8
   ((= thecommandcancel "DIMORDINATE")
    (setvar "clayer" oldlay)
   ) ; end condition 9

;      ---------------------------

   ((= thecommandcancel "+VPORTS")
    (setvar "clayer" oldlay)
   ) ; end condition 10

   ) ; end cond
   (princ)
) ; end cancelCommand

(defun makelay (lay / oldlay)
   (if    (not (tblsearch "LAYER" lay))
   (progn
       (setq oldlay (getvar "clayer"))
       (setvar "cmdecho" 0)
       (command "-layer" "m" lay "")
       (setvar "cmdecho" 1)
       (setvar "clayer" oldlay)
   ) ;_end progn
   ) ;_end if
) ;_end defun

(mapcar 'makelay '("TEXT" "DIM" "DEFPOINTS"))

 
上述内容可以修改以适应不同的层结构。

gazzalp 发表于 2022-7-6 17:11:08

和Lisp程序一样,我对反应堆不太熟悉。我试一下那个反应堆,但我怎么用呢?例如,我如何将其设置为适用于单行文字?请记住,我不知道它是如何工作的,所以我需要知道如何加载它,如果我像用lisps等保存它一样。谢谢李

Lee Mac 发表于 2022-7-6 17:12:41

 
使用reactor,将其保存到记事本文档(.lsp),就像LISP一样,然后将其加载到ACAD启动中。因为它是一个反应器,所以没有语法可以输入——它是自动运行的。
 
您可能需要修改它以适合您的层结构,但请尝试一下,看看它是否适合您的使用。

gazzalp 发表于 2022-7-6 17:15:53

李看起来不错。有一个请求,你能给它加上舱口吗?我只使用单个hatch命令,我希望它位于名为“hatch”的图层上

gazzalp 发表于 2022-7-6 17:19:25

还有李,我发现在我做了一个视口后,它并没有将图层更改回原始状态。我会自己解决它,希望能解决它,但如果没有,你能看看吗?

gazzalp 发表于 2022-7-6 17:22:56

李,我用我绝对超凡的技能自己想办法做舱口。我要感谢你,虽然有一个问题是,我看到你添加了添加图层的功能,如果它们不在DWG中,我尝试在文字“hatch”中添加,我认为它会去,所以它也适用于hatch,但由于某些原因,它没有。另外,当它生成“文本”层时,我们是否可以将其设置为黄色,而不是出现的白色?所以我的3个问题是:
 
1、图案填充层如果不存在,则不会添加到图纸中。
2、文字层变为黄色。
3.当视口已打开时,定义点不会更改为旧层。
 
这是我的代码:
; Layer Director by Lee McDonnell
(vl-load-com)
(vlr-command-reactor
   nil
   '((:vlr-commandWillstart . startCommand))
) ; end command reactor
(vlr-command-reactor
   nil
   '((:vlr-commandEnded . endcommand))
) ; end command reactor
(vlr-command-reactor
   nil
   '((:vlr-commandCancelled . cancelCommand))
) ; end command reactor
(defun startCommand (calling-reactor startcommandInfo / thecommandstart)
   (setq oldlay (getvar "clayer"))
   (setq thecommandstart (nth 0 startcommandInfo))
   (cond
   ((= thecommandstart "TEXT")
    (setvar "clayer" "TEXT")
   ) ; end condition 1
   ((= thecommandstart "MTEXT")
    (setvar "clayer" "TEXT")
   ) ; end condition 2
   ((= thecommandstart "DTEXT")
    (setvar "clayer" "TEXT")
   ) ; end condition 3
;      ---------------------------
   ((= thecommandstart "DIMLINEAR")
    (setvar "clayer" "DIMENSIONS")
   ) ; end condition 4
   ((= thecommandstart "DIMALIGNED")
    (setvar "clayer" "DIMENSIONS")
   ) ; end condition 5
   ((= thecommandstart "DIMRADIUS")
    (setvar "clayer" "DIMENSIONS")
   ) ; end condition 6
   ((= thecommandstart "DIMCONTINUE")
    (setvar "clayer" "DIMENSIONS")
   ) ; end condition 7
   ((= thecommandstart "DIMANGULAR")
    (setvar "clayer" "DIMENSIONS")
   ) ; end condition 8
   ((= thecommandstart "QLEADER")
    (setvar "clayer" "DIMENSIONS")
   ) ; end condition 9
;      ---------------------------

   ((= thecommandstart "BHATCH")
    (setvar "clayer" "HATCH")
   ) ; end condition 11
;      ---------------------------
   ((= thecommandstart "+VPORTS")
    (setvar "clayer" "DEFPOINTS")
   ) ; end condition 10
   ) ; end cond
   (princ)
) ; end startcommand
(defun endCommand (calling-reactor endcommandInfo / thecommandend)
   (setq thecommandend (nth 0 endcommandInfo))
   (cond
   ((= thecommandend "TEXT")
    (setvar "clayer" oldlay)
   ) ; end condition 1
   ((= thecommandend "MTEXT")
    (setvar "clayer" oldlay)
   ) ; end condition 2
   ((= thecommandend "DTEXT")
    (setvar "clayer" oldlay)
   ) ; end condition 3
;      ---------------------------
   ((= thecommandend "DIMLINEAR")
    (setvar "clayer" oldlay)
   ) ; end condition 4
   ((= thecommandend "DIMALIGNED")
    (setvar "clayer" oldlay)
   ) ; end condition 5
   ((= thecommandend "DIMRADIUS")
    (setvar "clayer" oldlay)
   ) ; end condition 6
   ((= thecommandend "DIMCONTINUE")
    (setvar "clayer" oldlay)
   ) ; end condition 7
   ((= thecommandend "DIMANGULAR")
    (setvar "clayer" oldlay)
   ) ; end condition 8
   ((= thecommandend "QLEADER")
    (setvar "clayer" oldlay)
   ) ; end condition 9
   ((= thecommandend "BHATCH")
    (setvar "clayer" oldlay)
   ) ; end condition 11
;      ---------------------------
   ((= thecommandend "+VPORTS")
    (setvar "clayer" oldlay)
   ) ; end condition 10
   ) ; end cond
   (princ)
) ; end endCommand
(defun cancelCommand (calling-reactor cancelcommandInfo / thecommandcancel)
   (setq thecommandcancel (nth 0 cancelcommandInfo))
   (cond
   ((= thecommandcancel "TEXT")
    (setvar "clayer" oldlay)
   ) ; end condition 1
   ((= thecommandcancel "MTEXT")
    (setvar "clayer" oldlay)
   ) ; end condition 2
   ((= thecommandcancel "DTEXT")
    (setvar "clayer" oldlay)
   ) ; end condition 3
;      ---------------------------
   ((= thecommandcancel "DIMLINEAR")
    (setvar "clayer" oldlay)
   ) ; end condition 4
   ((= thecommandcancel "DIMALIGNED")
    (setvar "clayer" oldlay)
   ) ; end condition 5
   ((= thecommandcancel "DIMRADIUS")
    (setvar "clayer" oldlay)
   ) ; end condition 6
   ((= thecommandcancel "DIMCONTINUE")
    (setvar "clayer" oldlay)
   ) ; end condition 7
   ((= thecommandcancel "DIMANGULAR")
    (setvar "clayer" oldlay)
   ) ; end condition 8
   ((= thecommandcancel "QLEADER")
    (setvar "clayer" oldlay)
   ) ; end condition 9
   ((= thecommandcancel "BHATCH")
    (setvar "clayer" oldlay)
   ) ; end condition 11
;      ---------------------------
   ((= thecommandcancel "+VPORTS")
    (setvar "clayer" oldlay)
   ) ; end condition 10
   ) ; end cond
   (princ)
) ; end cancelCommand
(defun makelay (lay / oldlay)
   (if    (not (tblsearch "LAYER" lay))
   (progn
       (setq oldlay (getvar "clayer"))
       (setvar "cmdecho" 0)
       (command "-layer" "m" lay "")
       (setvar "cmdecho" 1)
       (setvar "clayer" oldlay)
   ) ;_end progn
   ) ;_end if
) ;_end defun
(mapcar 'makelay '("TEXT" "Dimensions" "DEFPOINTS"))xt" "Dimensions" "Defpoints"))

Lee Mac 发表于 2022-7-6 17:25:36

我已经更新了LISP以包括这一点。 
同样,LISP已经更新,以包括这一点。 
我似乎没有这个问题:我去查看>视口>新视口>然后绘制视口,在完成绘制视口后,图层将恢复为原始图层。 
无论如何,试试这个:
 
3
页: 1 [2]
查看完整版本: 将特定图层指定给工具