明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5200|回复: 17

图层控制---------减少图层

  [复制链接]
发表于 2012-8-13 10:58 | 显示全部楼层 |阅读模式
本帖最后由 自贡黄明儒 于 2012-8-21 12:25 编辑

;;减少图层时,力求不影响打印效果
;;用户只有一个选择[根据颜色/根据线型/根据线宽],因而操作容易
;;在明经泡了这么久,一直没有找到这样的工具.通过不断打坐和冥想,现在基本上写成现在的这个样子
;;有时,从设计院来的图,经过几个专业之后,图层有几百个之多,对于后来的处理实在麻烦,我一直想有减少图层的工具,在我的日志上贴出了一个不太成熟的东西
;;本程序是根据highflybird的改变块的颜色改编而来,在此对highflybird表示鸣谢!!!
;;对于颜色我是按索引号处理,虽然我不是色盲,对于颜色转换也不知怎么处理,尽管highflybird和C版都发表有相关程序
;;图中有尺寸时,Defpoints是删不掉的.
;;图层的删除我是用下面(HH:purge)命令删除的.有些软件生成的层(比如<钢构>),尽管图中没有它生成的任何对象,也删不掉图层,不知他们是怎么搞的
  1. (defun HH:purge ()
  2.     (vl-Catch-All-Apply
  3.       '(lambda ()
  4.   (vla-Remove
  5.     (vla-GetExtensionDictionary
  6.       (vla-Get-Layers
  7.         (vla-Get-ActiveDocument (vlax-Get-Acad-Object))
  8.       )
  9.     )
  10.     "ACAD_LAYERFILTERS"
  11.   )
  12.        )
  13.     )
  14.     (repeat 3
  15.       (vla-purgeall
  16. (vla-get-activedocument (vlax-get-acad-object))
  17.       )
  18.     )
  19.   )
  20. ;;下面的命令(DeleteLayer LayerName)删除图层好象也不太好使,不知哪位有没有更好的办法?
  21. ;;删除图层
  22.   (defun DeleteLayer (LayerName / AcadDocument LayerSel LayerObj)
  23.     (setq AcadDocument (vla-get-activedocument (vlax-get-acad-object)))
  24.     (setq LayerSel (vla-get-layers AcadDocument))
  25.     (setq LayerObj (vl-catch-all-apply 'vla-item (list LayerSel LayerName)))
  26.     (cond
  27.       ((vl-catch-all-error-p LayerObj)
  28.        (princ
  29.   (strcat "\nError occurs when deleting Layer " LayerName "!")
  30.        )
  31.       )
  32.       ((= (vla-get-name (vla-get-activelayer AcadDocument))
  33.    LayerName
  34.        )
  35.        (princ (strcat "\nLayer " LayerName " is current layer!"))
  36.       )
  37.       (t (vla-delete LayerObj))
  38.     )
  39.   )


本帖子中包含更多资源

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

x

点评

还是不能彻底删除,这个问题也困惑我到现在  发表于 2012-8-16 23:40
"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

  • · 工具|主题: 71, 订阅: 4
 楼主| 发表于 2012-8-16 09:13 | 显示全部楼层
;;;***********图层控制小工具 黄明儒 2012.8.15 命令:TC
;;ET把图层控制放在了首位,可见其重要性
;;本程序主要根据higflybird改变块而改写,同时参阅了C版、gu_xl等程序,在此不一一例举,并对他们表示感谢!!!
;;本程序根据我自己的需要而写,简洁的界面是我的习惯
;;在higflybird的符号管理器中,其实也包括了图层合并

本帖子中包含更多资源

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

x

点评

开关图层的速度怎么也这么慢?合并图层速度不能忍受  发表于 2012-8-16 23:29
 楼主| 发表于 2012-8-16 09:14 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2012-8-21 12:28 编辑

整合一下.部分代码
[hide=lisp]
  ;;1.1解锁所有图层
  (defun UnLock_All_Layers ()
    (vlax-for n (vla-get-layers
    (vla-get-ActiveDocument (vlax-get-acad-object))
  )
      (vla-put-lock n :vlax-false)
    )
  )
  ;;1.2锁所有图层
  (defun Lock_All_Layers ()
    (vlax-for n (vla-get-layers
    (vla-get-ActiveDocument (vlax-get-acad-object))
  )
      (vla-put-lock n :vlax-true)
    )
  )
  ;;2.1 解冻所有图层
  (defun UnFreeze_All_Layers ()
    (vlax-for n (vla-get-layers
    (vla-get-ActiveDocument (vlax-get-acad-object))
  )
      (if (/= (vla-get-name n) (getvar "clayer"))
;;也可以用 (not (equal (vla-get-activelayer adoc) item))判断
(vla-put-Freeze n :vlax-false)
      )
    )
  )
  ;;2.2 冻结所有图层
  (defun Freeze_All_Layers ()
    (vlax-for n (vla-get-layers
    (vla-get-ActiveDocument (vlax-get-acad-object))
  )
      (if (/= (vla-get-name n) (getvar "clayer"))
;;也可以用 (not (equal (vla-get-activelayer adoc) item))判断
(vla-put-Freeze n :vlax-true)
      )
    )
  )
  ;;3.1 开 所有图层
  (defun On_All_Layers ()
    (vlax-for n (vla-get-layers
    (vla-get-ActiveDocument (vlax-get-acad-object))
  )
      (vla-put-layeron n :vlax-true)
    )
  )
  ;;3.2 关 所有图层
  (defun Off_All_Layers ()
    (vlax-for n (vla-get-layers
    (vla-get-ActiveDocument (vlax-get-acad-object))
  )
      (vla-put-layeron n :vlax-false)
    )
  )
  ;;4.1 解冻 解锁 开 所有图层
  (defun UnLock_On_UnFreeze_All ()
    (vlax-for n (vla-get-layers
    (vla-get-ActiveDocument (vlax-get-acad-object))
  )
      (vla-put-lock n :vlax-false)
      (if (/= (vla-get-name n) (getvar "clayer"))
;;也可以用 (not (equal (vla-get-activelayer adoc) item))判断
(vla-put-Freeze n :vlax-false)
      )
      (vla-put-layeron n :vlax-true)
    )
    (vl-cmdf "regen")
  )
  ;;4.2 冻结 锁定 关所有图层
  (defun Lock_Off_Freeze_All ()
    (vlax-for n (vla-get-layers
    (vla-get-ActiveDocument (vlax-get-acad-object))
  )
      (vla-put-lock n :vlax-true)
      (if (/= (vla-get-name n) (getvar "clayer"))
;;也可以用 (not (equal (vla-get-activelayer adoc) item))判断
(vla-put-Freeze n :vlax-true)
      )
      (vla-put-layeron n :vlax-false)
    )
  )
  ;;5.1 解冻 解锁 开指定图层
  (defun UnLock_UnFreeze_On (strLayer / N)
    (setq n (vla-item (vla-get-layers
   (vla-get-activedocument
     (vlax-get-acad-object)
   )
        )
        strLayer
     )
    )
    (vla-put-lock n :vlax-false)
    (if (/= (vla-get-name n) (getvar "clayer"))
      ;;也可以用 (not (equal (vla-get-activelayer adoc) item))判断
      (vla-put-Freeze n :vlax-false)
    )
    (vla-put-layeron n :vlax-true)
  )
  ;;5.2 冻结 锁定 关指定图层
  (defun Lock_Freeze_Off (strLayer / N)
    (setq n (vla-item (vla-get-layers
   (vla-get-activedocument
     (vlax-get-acad-object)
   )
        )
        strLayer
     )
    )
    (vla-put-lock n :vlax-true)
    (if (/= (vla-get-name n) (getvar "clayer"))
      ;;也可以用 (not (equal (vla-get-activelayer adoc) item))判断
      (vla-put-Freeze n :vlax-true)
    )
    (vla-put-layeron n :vlax-false)
  )
  ;;6.1 开  实体所在图层
  (defun UnLock_UnFreeze_On_Objects (ss / N STRLAYER)
    (Lock_Off_Freeze_All)
    (repeat (setq n (sslength ss))
      (setq
strLayer (cdr (assoc 8 (entget (ssname ss (setq n (1- n))))))
      )
      (UnLock_UnFreeze_On strLayer)
    )
    (princ)
  )
  ;;6.2 关  实体所在图层
  (defun Lock_Freeze_Off_Objects (ss / N STRLAYER)
    (UnLock_On_UnFreeze_All)
    (repeat (setq n (sslength ss))
      (setq
strLayer (cdr (assoc 8 (entget (ssname ss (setq n (1- n))))))
      )
      (Lock_Freeze_Off strLayer)
    )
    (princ)
  )
[/hide]

本帖子中包含更多资源

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

x
发表于 2012-8-16 12:09 | 显示全部楼层
Defpoints层 可以通过 CAD 的图层合并删除
发表于 2012-8-16 15:03 | 显示全部楼层
自带的清理可以自动删除无效图层,这个比较安全

点评

你是说命令PU吗?  发表于 2012-8-17 22:38
发表于 2012-8-16 15:32 来自手机 | 显示全部楼层
我来凑个热闹学习学习。
发表于 2012-8-16 21:06 | 显示全部楼层
学习学习,借鉴借鉴  
发表于 2012-8-16 22:58 | 显示全部楼层
源码就好了,不过还是感谢
 楼主| 发表于 2012-8-17 09:11 | 显示全部楼层
tianyi1230 发表于 2012-8-16 22:58
源码就好了,不过还是感谢

如果需求的人多,源码放在100层
发表于 2012-10-10 01:21 | 显示全部楼层
感谢楼主共享,摇鼠标同仁敬上!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 04:36 , Processed in 0.221470 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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