找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1314|回复: 7

[原创]:保存或恢复图层状态(可用于程序或命令行)

[复制链接]
发表于 2004-12-10 16:09:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
利用ET扩展工具中的图层管理器,实现了在程序中或命令行对当前图层状态的保存或恢复。
1、当用于程序中时,可以保证程序运行后所有图层状态保持不变,与运行前完全一样。
2、在命令行使用时,可以在你对图层进行开关等操作前保存,之后任意时刻都能恢复。
3、程序需要ET扩展工具的支持,当未安装或不能加载时有提示。
4、保存命令为“Q1”,恢复命令为“Q2”。
5、当在命令行键入“Q1”后,运行“LMAN”(图层管理器)会发现有一个保存的文件“GELEI”。键入“Q2”后再查看会发现已删除。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2004-12-10 16:11:23 | 显示全部楼层
忘记上传程序了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-10 17:11:36 | 显示全部楼层
这个不需要ET.保存恢复都是sls
[php](defun c:sls()(c:zf:save_layer_state))
(defun c:zf:save_layer_state (/ *ACADDOCUMENT* *ACADOBJECT* *LAYER* *MSPACE* )
  (vl-load-com)
  (if zf:ly-state
    (progn
      (foreach la (reverse zf:ly-state)
        (if (equal la (last zf:ly-state))
          (progn
            (vlax-put (car la) 'layeron (cadr la))
            (vlax-put (car la) 'lock (caddr la))
            (if (/= (vla-get-name (car la)) (getvar "clayer"))
              (vlax-put (car la) 'freeze (cadddr la))
              )
            (setvar "clayer" (vla-get-name (car la)))
          )
          (progn
            (vlax-put (car la) 'layeron (cadr la))
            (vlax-put (car la) 'lock (caddr la))
            (vlax-put (car la) 'freeze (cadddr la))
          )
        )
      )
      (setq zf:ly-state nil)
    )
    (progn
      (Setq *Acadobject* (Vlax-Get-Acad-Object))
      (Setq *Acaddocument* (Vla-Get-Activedocument *Acadobject*))      
      (setq *layer* (vla-get-layers *Acaddocument*))
      (vlax-for        la *layer*
        (if (= (vla-get-name la) (getvar "clayer"))
          (setq        zf:ly-state
                 (append zf:ly-state
                         (list (list la (vlax-get la 'layeron) (vlax-get la 'lock) (vlax-get la 'freeze) (vlax-get la 'name))
                         )

                 )
          )
          (setq        zf:ly-state
                 (cons
                   (list la (vlax-get la 'layeron) (vlax-get la 'lock) (vlax-get la 'freeze) (vlax-get la 'name))
                   zf:ly-state
                 )
          )
        )
      )
    )
  )
  (if zf:ly-state (princ "\n图层状态已保存.")(princ "\n图层状态已恢复."))
  (princ)
)
(princ "\n保存恢复图层状态 WRITTEN BY WKAI @ XDCAD.NET")
(princ "\n启动命令:SLS")
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-10 19:21:49 | 显示全部楼层
A Functions      

acet-layerp-mark Function



  


Places beginning and ending marks for Layer Previous recording

(acet-layerp-mark [status])

The acet-layerp-mark function allows you to group multiple layer commands into a single transaction so that they can be undone by issuing LAYERP a single time. LAYERPMODE must be on in order to set marks.

Arguments

status

Specifying T sets a begin mark. Specifying nil sets an end mark, clearing the begin mark.

If status is omitted, acet-layerp-mark returns the current mark status for layer settings.

Return Values

T if a begin mark is in effect; otherwise nil.

Examples

The following code changes layer 0 to blue, and then makes several additional layer changes between a set of begin and end marks. If you issue LAYERP after running this code, layer 0 reverts to blue.

(defun TestLayerP ()
  ;; Turn LAYERPMODE on, if it isn't already
  (if (not (acet-layerp-mode))
    (acet-layerp-mode T)
  )

  ;; Set layer 0 to the color blue
  (command "_.layer" "_color" "blue" "0" "")
  
  ;; Set a begin mark
  (acet-layerp-mark T)

  ;; Issue a series of layer commands, and then set an end mark
  (command "_.layer" "_color" "green" "0" "")
  (command "_.layer" "_thaw" "*" "")
  (command "_.layer" "_unlock" "*" "")
  (command "_.layer" "_ltype" "hidden" "0" "")
  (command "_.layer" "_color" "red" "0" "")

  ;; Set an end mark
  (acet-layerp-mark nil)
)
See Also

The LAYERP command.

   Comments?  
LAYERP 命令  
    概念        操作步骤        参考      




放弃对图层设置所做的上一个或一组更改

“图层”工具栏:

命令行:  layerp

放弃已对图层设置(例如颜色或线型)做的修改。如果设置被恢复,AutoCAD 将显示“已恢复上一个图层状态”信息。

LAYERP(上一图层)没有放弃以下修改:

重命名图层:如果重命名图层并修改其特性,“上一图层”将恢复初始特性,但不恢复初始名称。
删除的图层:如果删除或清理图层,使用“上一个图层”不能将其恢复。
添加的图层:如果在图形中添加新图层,使用“上一个图层”不能将其删除。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-11 21:58:03 | 显示全部楼层
wkai斑竹的activeX程序我有些读不懂,大概理解成为SLS为保存图层状态的开关(是否此方法只能保存一个状态?--功能似乎比系统自带的要弱了?)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-13 11:04:22 | 显示全部楼层
最初由 xxxyzxx 发布
[B]wkai斑竹的activeX程序我有些读不懂,大概理解成为SLS为保存图层状态的开关(是否此方法只能保存一个状态?--功能似乎比系统自带的要弱了?) [/B]


  事实上我最初的想法是在程序运行后能完全恢复程序运行前的图层状态,包括开、关、锁、冻等,只保存一个状态就足够了。斑主也是这样想的吧。如果要保存好多状态,直接用LMAN就行了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 208个

财富等级: 日进斗金

发表于 2006-12-4 23:08:29 | 显示全部楼层
acet自带的函数.
(bns_sl "ACET-lAYISO") ;保存图层状态名.
(bns_rl "ACET-LAYISO") ;恢复复图层状态名.
(bns_dl "ACET-LAYISO") ;删除图层状态名.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-12-5 11:34:28 | 显示全部楼层
这帖子有技术含量lisp编程确实要避开command这个东东,能不用尽量不用,太依赖cad内部命令对编程没好处
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-29 19:27 , Processed in 0.172563 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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