469229020@QQ.CO 发表于 2022-11-22 08:42:09

求助一键切换回0图层,并使颜色、线型、线宽都随层

本帖最后由 highflybir 于 2022-11-30 10:41 编辑

求助一键切换回0图层,并使颜色、线型、线宽都随层

夏生生 发表于 2022-11-23 09:31:31

(defun c:tt()(mapcar'setvar '("clayer" "cecolor""celtype""celweight")'("0""bylayer""bylayer"-1)))

liufii 发表于 2022-11-22 09:44:18

这是我平时用的,你试下看看

(defun c:cc ()
(setvar "clayer" "0");设当前层为0层
(setvar "cecolor" "bylayer");设置颜色为随层
(setvar "celtype" "bylayer");设置线型为随层
(setvar "celweight" -1);设置线宽为随层
(princ)
)

kucha007 发表于 2022-11-22 17:47:46

本帖最后由 kucha007 于 2022-11-22 17:49 编辑

469229020@QQ.CO 发表于 2022-11-22 15:01
非常感谢各位大佬 ,真想给各位大佬每个人发一个红包,表示感谢。但不知道各位怎么联系。在此,谢谢各位了 ...
这是我自用的,用来复位参数。
01-若输入命令时选择了对象,就复位对象颜色线宽随层(线型不动)
01-若输入命令时未选择对象,就复位参数(0图层+当前随层+状态栏+字体样式+各种乱七八糟的东西)(defun c:FW (/ Old_Cmd)
(vl-load-com)
(setq Old_Cmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(defun K:gxl-CatchApply (fun args / result)
    (if (not
          (vl-catch-all-error-p
            (setq result (vl-catch-all-apply (if (= 'SYM (type fun)) fun (function fun))args))
          )
      )
      result
    )
)
(defun K:NewStyle (SNam Flag FNam BFNam Width / TS)
    (vl-load-com)
    (Setq TS (vla-get-TextStyles (vla-get-activedocument (vlax-get-acad-object))))
    (if (= Flag T) ;T == TTF, nil == SHX
      (progn ;TTF
          (K:gxl-CatchApply 'vla-setfont (list (vla-add TS SNam) FNam "false" "false" 1 0))
          (K:gxl-CatchApply 'vla-put-width (list (vla-add TS SNam) Width));设置宽度
      )
      (progn ;SHX
          (K:gxl-CatchApply 'vla-put-fontfile (list (vla-add TS SNam) FNam))
          (K:gxl-CatchApply 'vla-put-bigfontfile (list (vla-add TS SNam) BFNam))
          (K:gxl-CatchApply 'vla-put-width (list (vla-add TS SNam) Width));设置宽度
      )
    )
    (princ)
)
(if (= (last (ssgetfirst)) nil)
    (progn
      (command "Clayer" 0)
      (setvar "PICKSTYLE" 1);恢复编组选择
      ;DSETTINGS_状态栏复位
      (command "FILETAB");显示顶部的文件选项卡
      (command "WIPEOUT" "F" "OFF");关闭显示区域覆盖的边框
      (setvar "ConstraintInfer" 0);关闭推断约束
      ;--
      (setvar "SnapMode" 0);关闭格栅捕捉
      (setvar "GridMode" 0);关闭格栅显示
      (setvar "OrthoMode" 0);关闭正交捕捉
      (setvar "AutoSnap" 8);开启极轴追踪
      (setvar "POLARANG" (/ pi 4));设置极轴追踪增量角为45°
      (setvar "OSMode" 703);开启二维对象捕捉,并设置对象捕捉类型
      (setvar "3DOSMode" 11);关闭三维对象捕捉
      (setvar "AutoSnap" 63);开启对象捕捉追踪
      (setvar "UCSDETECT" 0);禁止动态UCS
      (setvar "DynMode" 1);开启动态输入
      (setvar "LWDisplay" 0);不显示线宽
      (setvar "LWDEFAULT" 9);设置默认线宽为0.09mm
      (setvar "TRANSPARENCYDISPLAY" 1);开启透明度显示
      (setvar "QPMODE" 0);关闭快捷特性
      (setvar "SELECTIONCYCLING" 0);关闭选择循环
      (setvar "ANNOMONITOR" 0);关闭注释监视器
      

      (while (> (getvar "CMDACTIVE") 0) (command PAUSE));等待前面的命令完成
      ;重置随层特性:颜色、线性、线宽、使用UCS标高
      (setvar "cmdecho" 0)
      (command "Cecolor" "bylayer");颜色随层
      (command "CELTYPE" "bylayer");线型随层
      (command "CELWEIGHT" -1);线宽随层
      (setvar "OSNAPZ" 1);使用当前UCS标高替换Z值
      ;Units_单位精度
      (SetVar "LUNITS" 2);设置线性单位。1 科学 2 小数 3 工程 4 建筑 5 分数
      (SetVar "LUPREC" 1);设置所有只读线性单位和可编辑线性单位(其精度小于或等于当前 luprec 的值)的小数位位数。
      (SetVar "AUNITS" 0);设置角度单位:0.十进制度数 1.度/分/秒 2.百分度 3.弧度 4.勘测单位
      (SetVar "AUPREC" 1);设置所有只读角度单位(显示在状态行上)和可编辑角度单位(其精度小于或等于当前 auprec 的值)的小数位数。
      ;LINETYPE_线型相关
      (setvar "PSLTSCALE" 0);缩放时不使用视口比例
      (setvar "LTSCALE" 10);设置全局缩放比例
      (setvar "CELTSCALE" 1);设置当前对象比例为1
      ;字体样式
      (K:NewStyle "_TCH_DIM" nil "hztxt_e" "hztxt" 0.8);SHX:使用大字体
      (setvar "TextStyle" "_TCH_DIM");将_TCH_DIM设置为当前字体样式
    )
    (progn
      (command "chprop" (ssget) ""
                              "color" "bylayer"
                              ;"ltype" "bylayer"
                              "lweight" "bylayer" ""
                        );将所选对象移动到指定图层,并设置为随层
      (while (> (getvar "CMDACTIVE") 0) (command PAUSE));等待前面的命令完成
    )
)
(setvar "cmdecho" Old_Cmd)(princ)
)

469229020@QQ.CO 发表于 2022-11-22 08:52:19

(defun c:QW()
(change "clayer" "0" " "C" "ByLayer" "LT" "ByLayer""Lw" "ByLayer""")
(princ)
)
;这个语句是一键返回0图层。但是,同时把颜色,线型,线宽都切换成随层的,不知道哪里错了,老是报错。

逍遥任我行 发表于 2022-11-22 09:04:49

应该错误出现在自定义函数change上

469229020@QQ.CO 发表于 2022-11-22 09:06:36

请教一下,切换返回图层函数是哪个

自贡黄明儒 发表于 2022-11-22 09:37:15

改为(vl-cmdf "_layer" "make" 吧。

菜卷鱼 发表于 2022-11-22 11:19:03

本帖最后由 菜卷鱼 于 2022-11-22 11:21 编辑


我一直在用
(defun c:t0 ( / tn_ss )
(setq cmds (if command-s command-s vl-cmdf))
(setvar "cmdecho" 0 )
(setq ltsc (getvar "dimscale"))
(PRINC "0层")
(setq tn_ss (ssget ))
;(undobe)
(if (= tn_ss nil)
(progn (cmds "_.-layer" "m" "0" "")(princ "\n已设置为0层"))
(cmds "chprop" tn_ss """LA" "0" "S" LTSC "c" "bylayer""")
)
;(undoe)
(setvar "cmdecho" 1 )
(prin1)
)

469229020@QQ.CO 发表于 2022-11-22 15:01:15

非常感谢各位大佬 ,真想给各位大佬每个人发一个红包,表示感谢。但不知道各位怎么联系。在此,谢谢各位了,解决我初学小白的痛苦!感谢你们,感恩有你!

lxl217114 发表于 2022-11-22 18:15:28

kucha007 发表于 2022-11-22 17:47
这是我自用的,用来复位参数。
01-若输入命令时选择了对象,就复位对象颜色线宽随层(线型不动)
01-若输 ...

很好很强大。
作品频传,点赞
页: [1] 2
查看完整版本: 求助一键切换回0图层,并使颜色、线型、线宽都随层