|
另类Purge
- 偶尔遇到一种特别大的DWG,上百兆了,打开后看着也没有多少Entity,用Purge显示没有可清的东西,经过分析Dwg中附加的信息太多,可能包括Xdat、Dict、Xrecord等等,如果一个个处理可能要逐一分析,太麻烦,下面用简单的步骤和简单的几个语句实现另类“Purge”
- 1 打开Dwg,这里太大的DWG可能在32bit系统和CAD会很慢,为了最简单处理,确保CAD仅有这一个文档打开
- 2 文件-〉新建一个文档,用默认设置
- 3 打开Vlisp编辑器
- 4 把下面几句粘贴进去,加载,慢慢等待,Ok
- 5 保存图形,前后对比看看能瘦身多少
- 说明:
- a:字体样式复制是必须的,否则可能无法显示部分字体
- b: 图块复制也是必须的,否则Insert无法生成
- c:图层复制非必须,复制仅是为了保持原汁原味,否则可能都是一种白色
- 声明:本语句处理有风险,后果自负!
- [pcode=lisp,true]
- (setq *acad* (vlax-get-acad-object)
- doc (vla-item (vla-get-documents *acad*) 0)
- )
- ;;复制另外图形图层
- (vlax-for lay (vla-get-layers doc)
- (entmake (entget (vlax-vla-object->ename lay)))
- )
- ;;复制另外图形字体
- (vlax-for sty (vla-get-textstyles doc)
- (entmake (entget (vlax-vla-object->ename sty)))
- )
- ;;构造另外图块定义
- (vlax-for obj (vla-get-blocks doc)
- (if (not (wcmatch (strcase (vla-get-name obj)) "*SPACE*"))
- (setq bl (cons obj bl))
- )
- )
- ;;拷贝另外图块定义
- (vla-CopyObjects
- doc
- (vlax-safearray-fill
- (vlax-make-safearray
- vlax-vbObject
- (cons 0 (1- (length bl)))
- )
- bl
- )
- (vla-get-blocks (vla-get-activedocument *acad*))
- )
- ;;复制另外图形实体
- (vlax-for obj (vla-get-modelspace doc)
- ;;如果保留扩展数据用下面这句
- ;;(entmake (entget (vlax-vla-object->ename obj) '("*")))
- ;;不保留扩展数据
- (entmake (entget (vlax-vla-object->ename obj)))
- )
- ;;回收变量
- (vlax-release-object *acad*)
- (vlax-release-object doc)
- (setq bl nil
- *acad* nil
- doc nil
- )[/pcode]
复制代码 |
|