明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1702|回复: 17

[提问] 输入字体时候自动切换到指定图层

[复制链接]
发表于 2020-9-9 23:40 | 显示全部楼层 |阅读模式
从网上看到个源码,试用了下,功能是只要输入字体图层就自动改为指定的图层,填充和标注同理。
请问各位可不可以帮忙改成输入字体时候只是输入的字体本身是指定的图层,但是当前图层不变的。填充和标注也是这种效果的。

(vl-load-com)
(if (not COMSTART)
  (setq    COMSTART
     (vlr-editor-reactor
       NIL
       '((:vlr-commandwillstart . COMS)
         ;;(:vlr-commandended . COME)
        )
     )
  )
)

(defun COMS (OBJREACTOR LSTCOMMAND)
  (setq    lst1 '("DIMLINEAR"     "DIMANGULAR"       "DIMARC"
           "DIMDIAMETER"     "DIMORDINATE"       "DIMRADIUS"
           "DIMJOGGED"     "DIMALIGNED"       "DIMCONTINUE"
           "DIMBASELINE"
          )
  )
(setq    lst2 '("HATCH" "BHATCH"))
(setq    lst3 '("TEXT" "DTEXT" "MTEXT"))
  (COND    ((member (car LSTCOMMAND) lst2)
     (IF (/= (GETVAR "CLAYER") "HATCH")
       (setvar "clayer" "001-建筑-墙体填充") ;_打剖面线时自动切换到"001-建筑-墙体填充"层
     )
    )
    ((member (car LSTCOMMAND) lst1)
     (IF (/= (GETVAR "CLAYER") "DIM")
       (setvar "clayer" "001-建筑-标注")   ;_标注尺寸时自动切换到"001-建筑-标注"层
     )
    )
    ((member (car LSTCOMMAND) lst3)
     (IF (/= (GETVAR "CLAYER") "TXT")
       (setvar "clayer" "002-平面-文字")   ;_打文字时自动切换到"002-平面-文字"层
     )
    )
  )
  (princ)
)

发表于 2020-9-10 14:11 | 显示全部楼层
对反应器不熟,大概改了下还能用

(vl-load-com)
(if (not COMSTART)
  (setq    COMSTART
     (vlr-editor-reactor
       NIL
       (list '(:vlr-commandwillstart . COMS) '(:vlr-commandended . COME))
     )
  )
)

(defun COMS (OBJREACTOR LSTCOMMAND / lst1 lst2 lst3)
  (setq    lst1 '("DIMLINEAR"     "DIMANGULAR"       "DIMARC"
           "DIMDIAMETER"     "DIMORDINATE"       "DIMRADIUS"
           "DIMJOGGED"     "DIMALIGNED"       "DIMCONTINUE"
           "DIMBASELINE"
          )
  )
(setq    lst2 '("HATCH" "BHATCH"))
(setq    lst3 '("TEXT" "DTEXT" "MTEXT"))
  (COND    ((member (car LSTCOMMAND) lst2)
                                                 (setq clayer (GETVAR "CLAYER"))
     (IF (/= (GETVAR "CLAYER") "HATCH")
       (setvar "clayer" "001-建筑-墙体填充") ;_打剖面线时自动切换到"001-建筑-墙体填充"层
     )
    )
    ((member (car LSTCOMMAND) lst1)
                        (setq clayer (GETVAR "CLAYER"))
     (IF (/= (GETVAR "CLAYER") "DIM")
       (setvar "clayer" "001-建筑-标注")   ;_标注尺寸时自动切换到"001-建筑-标注"层
     )
    )
    ((member (car LSTCOMMAND) lst3)
                        (setq clayer (GETVAR "CLAYER"))
     (IF (/= (GETVAR "CLAYER") "TXT")
       (setvar "clayer" "002-平面-文字")   ;_打文字时自动切换到"002-平面-文字"层
     )
    )
  )
       
  (princ)
)

(defun COME (OBJREACTOR LSTCOMMAND / lst1 lst2 lst3)
  (setq    lst1 '("DIMLINEAR"     "DIMANGULAR"       "DIMARC"
           "DIMDIAMETER"     "DIMORDINATE"       "DIMRADIUS"
           "DIMJOGGED"     "DIMALIGNED"       "DIMCONTINUE"
           "DIMBASELINE"
          )
  )
(setq    lst2 '("HATCH" "BHATCH"))
(setq    lst3 '("TEXT" "DTEXT" "MTEXT"))
  (if (or (member (car LSTCOMMAND) lst1) (member (car LSTCOMMAND) lst2) (member (car LSTCOMMAND) lst3)) (setvar "clayer" clayer))
  (princ)
)
发表于 2020-9-10 08:10 | 显示全部楼层
  1. (vl-load-com)
  2. (setq olayer (GETVAR "CLAYER"))
  3. (if (not COMSTART)
  4.   (setq COMSTART
  5.    (vlr-editor-reactor
  6.      NIL
  7.      '((:vlr-commandwillstart . COMS)
  8.        ;;(:vlr-commandended . COME)
  9.        )
  10.      )
  11.   )
  12.   )
  13. (defun COMS (OBJREACTOR LSTCOMMAND)
  14.   (setq    lst1 '("DIMLINEAR"    "DIMANGULAR"    "DIMARC"
  15.       "DIMDIAMETER"  "DIMORDINATE"   "DIMRADIUS"
  16.       "DIMJOGGED"    "DIMALIGNED"    "DIMCONTINUE"
  17.       "DIMBASELINE"
  18.       )
  19.      )
  20.   (setq lst2 '("HATCH" "BHATCH"))
  21.   (setq lst3 '("TEXT" "DTEXT" "MTEXT"))
  22.   (COND    ((member (car LSTCOMMAND) lst2)
  23.       (IF (/= olayer "HATCH")
  24.         (setvar "clayer" "001-建筑-墙体填充") ;_打剖面线时自动切换到"001-建筑-墙体填充"层
  25.         )
  26.       )
  27.      ((member (car LSTCOMMAND) lst1)
  28.       (IF (/= olayer "DIM")
  29.         (setvar "clayer" "001-建筑-标注")   ;_标注尺寸时自动切换到"001-建筑-标注"层
  30.         )
  31.       )
  32.      ((member (car LSTCOMMAND) lst3)
  33.       (IF (/= olayer "TXT")
  34.         (setvar "clayer" "002-平面-文字")   ;_打文字时自动切换到"002-平面-文字"层
  35.         )
  36.       )
  37.      (t (setvar "clayer" olayer))
  38.      )
  39.   (princ)
  40.   )
  41. (setvar "clayer" olayer)
输入完文字后需要手动re一下才能恢复原图层
 楼主| 发表于 2020-9-10 08:30 | 显示全部楼层
845245015 发表于 2020-9-10 08:10
输入完文字后需要手动re一下才能恢复原图层

刚刚试验了下,我当前层是“0”,加载程序后,我输入文字(填充/标注),文字(填充/标注)确实改成了指定层,re或者输入其它命令,自动变为“0”层。(到这一步没问题)
但是有个问题是:我后来手动切换到其它层后,re或者输入其它命令,它还是会自动换回“0”层。
 楼主| 发表于 2020-9-10 15:27 | 显示全部楼层
start4444 发表于 2020-9-10 14:11
对反应器不熟,大概改了下还能用

(vl-load-com)

非常感谢!正是我想要的效果。
发表于 2020-9-10 17:56 | 显示全部楼层
AutoCAD 现在已经默认提供了你所需的功能。
Hatch,Dimension, Text/Mtext都可以设置创建的默认图层。
发表于 2020-9-11 14:44 | 显示全部楼层
e2002 发表于 2020-9-10 17:56
AutoCAD 现在已经默认提供了你所需的功能。
Hatch,Dimension, Text/Mtext都可以设置创建的默认图层。

什么版本cad才有这功能?

点评

从 2020.1 版开始, 对应的系统变量: TEXTLAYER  发表于 2020-9-13 00:40
发表于 2020-9-14 10:22 | 显示全部楼层
luohonghe 发表于 2020-9-11 14:44
什么版本cad才有这功能?

大佬,这个要怎么设置,怎么使用?
发表于 2020-9-14 10:23 | 显示全部楼层
e2002 发表于 2020-9-10 17:56
AutoCAD 现在已经默认提供了你所需的功能。
Hatch,Dimension, Text/Mtext都可以设置创建的默认图层。

大佬,这个要怎么设置,怎么使用?
发表于 2020-9-14 11:17 | 显示全部楼层
出个教程,可以吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-3 00:39 , Processed in 0.218421 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表