找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2621|回复: 9

[LISP程序]:DWG压缩工具

[复制链接]
发表于 2009-9-16 17:13:53 | 显示全部楼层 |阅读模式

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

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

×
(vl-load-com)

(defun  DelWrongGrp (  / doc  err grpsobj num grpobj rtn nn)  
  ;;功能:删除冗余组,返回删除的个数
  ;;冗余组:匿名组、不包括任何图形对象的组
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (setq err (vl-catch-all-apply 'vla-get-groups (list doc)));;错误图形
  (if (vl-catch-all-error-p err)
    (setq rtn nil)
    (progn
      (setq grpsobj (vla-get-groups doc))
      (setq num (vla-get-count grpsobj) rtn 0 nn 0)
      (repeat num
        (setq grpobj (vla-item grpsobj nn))
        (if (= (vla-get-count grpobj) 0)
          (progn
            (vla-delete grpobj)
            (setq rtn (1+ rtn))
            )
          (progn
            (if (= "*" (substr (vla-get-name grpobj) 1 1))
              (progn
                (vla-delete grpobj)
                (setq rtn (1+ rtn))
                )
              (setq nn (1+ nn))
              )
            )
          )
        )
      )
    )
  rtn
  )
(defun DelAllLayFilter(/ doc lays dicts err1 err2 rtn)
  ;;功能:删除图层过滤器
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (setq lays (vla-get-layers doc))
  (setq dicts (vla-GetExtensionDictionary lays))
  (vl-catch-all-apply 'vla-remove (list dicts "ACAD_LAYERFILTERS"))
  (setq err1 (vl-catch-all-apply 'vla-remove (list dicts "ACAD_LAYERFILTERS")))
  (vl-catch-all-apply 'vla-remove (list dicts "AcLyDictionary"))
  (setq err2 (vl-catch-all-apply 'vla-remove (list dicts "AcLyDictionary")))
  (if  (vl-catch-all-error-p err1)
    (setq rtn T)
    (vla-remove dicts "ACAD_LAYERFILTERS")   
    )
  (if (null (vl-catch-all-error-p err2))
    (vla-remove dicts "AcLyDictionary")
    )
  rtn
  )

(defun ImageLst ( / dicts  err imgdict num nn img rtn)
  ;;功能:获取图中插入的图像
  (setq dicts (vla-get-dictionaries (vla-get-activedocument (vlax-get-acad-object))))
  (setq err (vl-catch-all-apply 'vla-item (list dicts "ACAD_IMAGE_DICT")))
  (if (vl-catch-all-error-p err)
    (setq rtn nil)
    (progn
      (setq imgdict (vla-item dicts "ACAD_IMAGE_DICT"))
      (setq num (vla-get-count imgdict) rtn'() nn 0)
      (repeat num
        (setq img (vla-item imgdict nn) nn (1+ nn))
        (setq rtn (cons img rtn))
        )
      )
    )
  rtn
  )

(defun c:DelImage()
  ;;功能:清除所有图像
  (if (imagelst)
    (command "-image" "d"  "*")
    )
  (prin1)
  )

;;;压缩开始
(DelAllLayFilter)
(delwronggrp)
(c:DelImage)
(command "-purge" "all" "*" "n")

使用方法:复制上面的代码,另存为*.lsp,直接在CAD里加载(appload)即可。

本帖被以下淘专辑推荐:

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2009-9-16 22:52:34 | 显示全部楼层
有些图档其实没什么内容,但是文件却特别大,所有线段加起来也就一万来条,还有几个block图框,但是文件却显得非常大,还有些图档在cad2005里打开图层特性管理器要等待半分钟以上的时间才蹦出对话框,用楼主的程序办法管用吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-16 23:33:21 | 显示全部楼层
可以用,是图层过滤器特别多导致的,程序可以解决。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-9-18 00:06:45 | 显示全部楼层
直接用PU不行么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-9-18 01:55:24 | 显示全部楼层
我 也想问和直接用pu有不同吗
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-19 15:42:45 | 显示全部楼层
当有多余的组信息时,文件会变得很大,所以那些要清除。还有高低版本之间转换时,会产生多余的图层过滤器,也会使文件体积膨胀,这些问题的产生,仅通过purge是清理不了的。



你可以做个测试,画几条线,然后将他们编组,将编组后的图形狂复制N份后,再删除他们,保存文件后,就会发现虽然图里没有图形要素,不过体积仍然很大,这时你用pu是没用的。这些没用的编组(我称之为冗余组)信息通过我给的方法就能很方便的删除,大大缩小文件体积。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-9-21 00:20:37 | 显示全部楼层
确实如楼主所说,高低版本转换是存在多余的看不见的东东在里面,还有一个3MB的dwg转换dxf文件后有11mb以上之多,不晓得也管用不!

先谢谢楼主,收藏先!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-9-22 01:54:11 | 显示全部楼层

我需要这个,谢谢

我需要这个,谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2017-11-15 21:56:15 | 显示全部楼层
命令多少呀
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 403个

财富等级: 日进斗金

发表于 2017-11-16 07:59:04 | 显示全部楼层
什么压缩原理?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-21 19:01 , Processed in 0.184922 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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