cad绘图中,怎么设置才能让不同的命令在绘制时自动跳转到各自的图层?

cad绘图中,怎么设置才能让不同的命令在绘制时自动跳转到各自的图层?

我这里有一个标注时自动切换到DIM图层的二次开发小工具:你把这个文件存到cad安装目录下的Express文件下面,执行CAD文件菜单“工具\加载”,选择Express文件夹下“标注时自动归DIM层.lsp”。成功加载后,一定要点击:启动组小面 的:内容,来选中刚才的那个小程序,每次启动CAD时,自动会加载这个小程序。



,再尺寸标注时,标注就在DIM层里面了。这里怎么不能加载上传文件,悲催。下面时代码,自己到刚才上面说的Express文件夹下,随便找个后缀为.lsp的文件,复制以下,打开把下面的代码输入,保存,自己随便改个名字,让后按照上面的加载上就可以了:

[code=lisp](defun xlr-autolayer ()

;  (setvar "cmdecho" 0)

;  (if (null (tblsearch "layer" "text"))

;    (set_layer_list "text" 3 "continuous")

;  )

;  (if (null (tblsearch "layer" "dim"))

;    (set_layer_list "dim" 3 "continuous")

;  )

  (vl-load-com)

  ;; 图层初始化列表 内容:commands layers color linetype plottable

  (setq *doc (vla-get-activedocument (vlax-get-acad-object)))

  (setq *lays (vla-get-layers *doc))

  (setq        *laylst 

         (list (list "DIMANGULAR" "DIM" 3 "continuous" T)

               (list "DIMALIGNED" "DIM" 3 "continuous" T)

               (list "DIMBASELINE" "DIM" 3 "continuous" T)

               (list "DIMCENTER" "DIM" 3 "continuous" T)

               (list "DIMCONTINUE" "DIM" 3 "continuous" T)

               (list "DIMDIAMETER" "DIM" 3 "continuous" T)

               (list "DIMLINEAR" "DIM" 3 "continuous" T)

               (list "DIMORDINATE" "DIM" 3 "continuous" T)

               (list "DIMRADIUS" "DIM" 3 "continuous" T)

               (list "QDIM" "DIM" 3 "continuous" T)

               (list "QLEADER" "DIM" 3 "continuous" T)

               (list "DTEXT" "TEXT" 3 "continuous" T)

               (list "MTEXT" "TEXT" 3 "continuous" T)

               (list "TEXT" "TEXT" 3 "continuous" T)

                                        ;(list "BHATCH" "填充" 9 "continuous" T)

                                        ;(list "HATCH" "填充" 9 "continuous" T)

                                        ;(list "POINT" "点" 4 "continuous" T)

                                        ;(list "XLINE" "辅助线" 8 "continuous" T)

                                        ;(list "LINE" "0" NIL "continuous" T)

                                        ;(list "XREF" "引用" 7 "continuous" T)

                                        ;(list "pline" "多义线" 2 "center" T)

         )

  )

  (setq OldLayer nil)

  (setq *cmdlst (mapcar 'strcase (mapcar 'car *laylst)))

  (mapcar '(lambda (x) (vlr-command-reactor nil x))

          (list        '((:vlr-commandWillStart . xlr-start))

                '((:vlr-commandEnded . xlr-end))

                '((:vlr-commandCancelled . xlr-cancel))

          )

  )

  (vlr-editor-reactor

    nil

    '((:vlr-commandwillstart . xlr-edit))

  )

)

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

(defun xlr-edit        (CALL CALLBACK /)

  (foreach N *laylst

    (if        (= (strcase (car CALLBACK)) (strcase (car N)))

                                        ; 命令反应器返回信息如果与设置的命令相同.

      (progn                                ;建立图层


        (apply 'xsetlays (cdr N))

                                        ;(setvar "CLAYER" (cadr N));设为当前层.

      )

    )

  )

)

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

(defun xlr-start (calling-reactor xlr-startInfo /)

  (foreach N *laylst

    (if        (= (strcase (car xlr-startInfo)) (strcase (car N)))

                                        ; 命令反应器返回信息如果与设置的命令相同.

      (progn                                ;建立图层


        (apply 'xsetlays (cdr N))

                                        ;(setvar "CLAYER" (cadr N));设为当前层.

      )

    )

  )

)

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

(defun xlr-end (calling-reactor xlr-endInfo / cmd)

  (setq cmd (car xlr-endInfo))

  (if (member cmd *cmdlst)

    (if (/= oldlayer nil)

       (progn 

           (setvar "CLAYER" OldLayer)

           (setq OldLayer nil)

       )

    )

  )

)

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

(defun xlr-cancel (calling-reactor xlr-cancelInfo / cmd)

  (setq cmd (car xlr-cancelInfo))

  (if (member cmd *cmdlst)

    (if (/= oldlayer nil)

       (progn 

           (setvar "CLAYER" OldLayer)

           (setq OldLayer nil)

       )

    )

  )

)

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

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

(defun xsetlays        (LAY-NAM COLOR LTYPE plotk / LAYOBJ LTYPESOBJ)


  (if (tblobjname "layer" LAY-NAM)

    (progn

      (if (/= (strcase (getvar "CLAYER"))

              (strcase LAY-NAM)

          )

        (setq OldLayer (getvar "CLAYER"))

        (progn

          (if (= oldlayer nil)

            (setq OldLayer LAY-NAM)

          )

        )

      )

      (setvar "CLAYER" lay-nam)

    )

    (progn                                ;添加图层.

      (vl-catch-all-error-p

        (vl-catch-all-apply 'vla-add (list *lays LAY-NAM))

      )

      (setq LAYOBJ (vla-item *lays LAY-NAM))

      (if (not (tblobjname "ltype" LTYPE)) ;添加线型.

        (progn

          (setq LTYPESOBJ (vla-get-linetypes *doc))

          (vla-load LTYPESOBJ LTYPE (findfile "acad.lin"))

                                        ;>>> 要加强,在多个*.lin寻找

          (vlax-release-object LTYPESOBJ)

        )

      )                                        ;解冻(如冻结),解锁,设图层为当前,设图层颜色,可打印特性.

      (vla-put-layeron layobj :vlax-true)

      (vla-put-lock layobj :vlax-false)

      (if (= (strcase (getvar "CLAYER")) (strcase lay-nam)) ;解冻.

        (vla-put-freeze layobj :vlax-false)

      )

      (vla-put-color layobj color)

      (vla-put-linetype layobj LTYPE)

      (vla-put-plottable

        layobj

        (if plotk

          :vlax-true

          :vlax-false

        )

      )

    )

  )

)

(xlr-autolayer)                                ;加载启动!

(princ "\n ----命令图层反应器已加载----")

[/code]

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-12-16
命令怎么可能会跳转到图层中。图层是根据线的颜色、线型和线宽来区别的可不是根据命令来区分的。你只能设置当前图层后在使用命令去画图,建什么样的图层使用哪个图层需要手动去选择的
回答的不够完善,再补充一些。CAD本身是没有这样的功能的,安装外部插件才可以,我用的燕秀就可以把所有的标注在设置在一个图层内,不管是在哪个图层中标注只要用了燕秀的标注命令就会自动跳转到设定的标注图层。。不过它的设置图层也相对更加方便快捷一些。。反正绘图的话貌似还达不到圆自动跳转到一个图层,直线到另一个图层这样的强大。本回答被网友采纳
第2个回答  2019-02-22
没有命令,你可以点开图层,需要哪个就点那个
相似回答