小毛草 发表于 2025-1-17 16:26:22

切换快捷键图层时检查图层是否存在,如果不存在则按给定的图层颜色、线型等创建相...

;;;;;;;;切换图层时检查图层是否存在,如果不存在则按给定的图层颜色、线型等创建相应图层
(defun create-layer-if-not-exists (layer-name color linetype)
(if (not (tblsearch "LAYER" layer-name))
    (progn
      (entmake (list
               (cons 0 "LAYER")
;;;;;;;;切换图层时检查图层是否存在,如果不存在则按给定的图层颜色、线型等创建相应图层

(defun create-layer-if-not-exists (layer-name color linetype)

(if (not (tblsearch "LAYER" layer-name))

    (progn

      (entmake (list

               (cons 0 "LAYER")

               (cons 100 "AcDbSymbolTableRecord")

               (cons 100 "AcDbLayerTableRecord")

               (cons 2 layer-name)

               (cons 70 0)

               (cons 62 color)

               (cons 6 linetype)

               ))

      (princ (strcat "\n图层 " layer-name " 已创建。"))

    )

)

)



(defun set-layer (layer-name color linetype)

(create-layer-if-not-exists layer-name color linetype)

(setvar "clayer" layer-name)

(princ (strcat "\n已经切换到:" layer-name))

)



(defun c:F1 () (set-layer "A-ELEV-LIN1-立面外轮廓线" 42 "Continuous"))

(defun c:F2 () (set-layer "A-ELEV-LIN2-立面中轮廓线" 2 "Continuous"))

(defun c:F3 () (set-layer "A-ELEV-LIN3-立面细轮廓线" 153 "Continuous"))

(defun c:F4 () (set-layer "A-FURN-绘图层" 2 "Continuous"))

(defun c:F5 () (set-layer "0-PM-固定家具" 251 "Continuous"))

(defun c:F6 () (set-layer "Area【区域轮廓不打印】" 250 "Continuous"))

(defun c:FFC () (set-layer "DOTE" 1 "dote"))

(defun c:FFD () (set-layer "DOOR" 4 "Continuous"))

(defun c:FFDD () (set-layer "DOOR-NAME" 4 "Continuous"))

(defun c:FFW () (set-layer "WINDOW" 4 "Continuous"))

(defun c:FFWW () (set-layer "WINDOW_TEXT" 4 "Continuous"))

(defun c:FW () (set-layer "WALL" 42 "Continuous"))

(defun c:FFX () (set-layer "0-PM-建筑面积计算" 5 "Continuous"))

(defun c:D1 () (set-layer "0-DM-地面填充" 251 "Continuous"))

(defun c:D2 () (set-layer "0-DM-地面尺寸标注" 3 "Continuous"))

(defun c:D3 () (set-layer "0-DM-地坪分割线" 251 "Continuous"))

(defun c:T1 () (set-layer "0-TF-天花布置" 251 "Continuous"))

(defun c:T2 () (set-layer "0-TF-天花尺寸标注" 3 "Continuous"))

(defun c:T3 () (set-layer "0-TF-天花灯具布置" 6 "Continuous"))
               (cons 100 "AcDbSymbolTableRecord")
               (cons 100 "AcDbLayerTableRecord")
               (cons 2 layer-name)
               (cons 70 0)
               (cons 62 color)
               (cons 6 linetype)
               ))
      (princ (strcat "\n图层 " layer-name " 已创建。"))
    )
)
)


(defun set-layer (layer-name color linetype)
(create-layer-if-not-exists layer-name color linetype)
(setvar "clayer" layer-name)
(princ (strcat "\n已经切换到:" layer-name))
)


(defun c:F1 () (set-layer "A-ELEV-LIN1-立面外轮廓线" 42 "Continuous"))
(defun c:F2 () (set-layer "A-ELEV-LIN2-立面中轮廓线" 2 "Continuous"))
(defun c:F3 () (set-layer "A-ELEV-LIN3-立面细轮廓线" 153 "Continuous"))
(defun c:F4 () (set-layer "A-FURN-绘图层" 2 "Continuous"))
(defun c:F5 () (set-layer "0-PM-固定家具" 251 "Continuous"))
(defun c:F6 () (set-layer "Area【区域轮廓不打印】" 250 "Continuous"))
(defun c:FFC () (set-layer "DOTE" 1 "dote"))
(defun c:FFD () (set-layer "DOOR" 4 "Continuous"))
(defun c:FFDD () (set-layer "DOOR-NAME" 4 "Continuous"))
(defun c:FFW () (set-layer "WINDOW" 4 "Continuous"))
(defun c:FFWW () (set-layer "WINDOW_TEXT" 4 "Continuous"))
(defun c:FW () (set-layer "WALL" 42 "Continuous"))
(defun c:FFX () (set-layer "0-PM-建筑面积计算" 5 "Continuous"))
(defun c:D1 () (set-layer "0-DM-地面填充" 251 "Continuous"))
(defun c:D2 () (set-layer "0-DM-地面尺寸标注" 3 "Continuous"))
(defun c:D3 () (set-layer "0-DM-地坪分割线" 251 "Continuous"))
(defun c:T1 () (set-layer "0-TF-天花布置" 251 "Continuous"))
(defun c:T2 () (set-layer "0-TF-天花尺寸标注" 3 "Continuous"))
(defun c:T3 () (set-layer "0-TF-天花灯具布置" 6 "Continuous"))

zmzk 发表于 2025-1-18 07:33:15

收藏了!有一天可能会用到

panliang9 发表于 2025-1-18 09:44:57

谢谢楼主分享,很不错!!!

moranyuyan 发表于 2025-1-18 20:40:24

谢谢分享
页: [1]
查看完整版本: 切换快捷键图层时检查图层是否存在,如果不存在则按给定的图层颜色、线型等创建相...