最初由 Cyberyll 发布
[B]如果不都是DWG图呢,比如一张是,而另一张不是!! [/B]
开什么玩笑,DWG和TXT比较什么?
提供一种思路。使用方法: 首先打开其中的一张图,加载以下代码,执行命令选择要比较的文件,第二个图形修改的实体以红色显示,打开的图形中不同的实体显示黄色,两种实体位于特殊的图层。

- (defun c:Compfl
- (/ cel cfi chd cms e eacad el el1 hd hdl ms thisdrawing)
- (if (setq fi (getfiled "选择比较文件" "Dwg" "" 9))
- (progn
- (setq eAcad (vlax-get-acad-object)
- docs (vla-get-documents eAcad)
- thisdrawing (vlax-get-property eAcad 'activedocument)
- ms (vla-get-modelspace thisdrawing)
- )
- (vla-open docs fi :vlax-false)
- (setq cFi (vla-item docs (strcat (vl-filename-base fi) ".dwg"))
- cMs (vla-get-modelspace cfi)
- )
- ;;检查彼图修改的实体
- (vlax-for i cMs
- (setq cel (entget (vlax-vla-object->ename i))
- cel (vl-remove-if
- '(lambda (x)
- (or (= (car x) 62) ;去除颜色
- (= (car x) 8) ;去除层
- (= (car x) 6) ;去除线形
- (= (car x) -1) ;Entity Name
- (= (car x) 330) ;扩展,不好比较
- )
- )
- cel
- )
- chd (vla-get-handle i)
- e (handent chd) ;当前图形中的实体
- )
- (if e
- (progn
- (setq el (vl-remove-if
- '(lambda (x)
- (or (= (car x) 62) ;去除颜色
- (= (car x) 8) ;去除层
- (= (car x) 6) ;去除线形
- (= (car x) -1) ;Entity Name
- (= (car x) 330) ;扩展,不好比较
- )
- )
- (entget e)
- )
- )
- (if (not (equal cel el))
- (entmake (append cel '((8 . "Ea_cchg_lyr") (62 . 1))))
- )
- (setq hdl (cons chd hdl))
- )
- (entmake (append cel '((8 . "Ea_cchg_lyr") (62 . 1))))
- )
- )
- ;;检查此图修改的实体
- (vlax-for c ms
- (setq hd (vla-get-handle c))
- (if (and (not (vl-position hd hdl))
- (/= (strcase (vla-get-layer c)) "EA_CCHG_LYR")
- )
- (progn
- (setq el1 (entget (vlax-vla-object->ename c)))
- (if (setq cel1 (assoc 62 el1))
- (setq el1 (subst '(62 . 2)
- cel1
- el1
- )
- )
- (setq el1 (append el1 '((62 . 2))))
- )
- (entmake (subst '(8 . "Ea_nchg_lyr")
- (assoc 8 el1)
- el1
- )
- )
- )
- )
- )
- (vla-close (vla-item docs (strcat (vl-filename-base fi) ".dwg"))
- :vlax-false
- )
- )
- )
- (princ)
- )
|