dwg文件比较,望优化能对比更多对象
论坛dwg文件比较的帖子不是很多,今天发一个文件比较的功能,根据句柄不同判断图形是否一致。由于只判断了句柄,因此图元的位置,颜色改动都无法识别。;;写入句柄到txt,两个图形都要执行一次写入组码
(defun c:tt23( / path name newname shell reply ent entg hand i openff ss EL ENTALL)
(setvar "cmdecho" 0)
(setq Path (getvar "dwgprefix"))
(setq newname (strcat path (vl-string-right-trim ".dwg" (getvar "dwgname") ) "句柄.txt"))
(setq ss (ssget "x"))
(repeat (setq i (sslength ss))
(setq ent (ssname ss (setq i (1- i))))
(setq entg (entget ent))
(setq el (vl-remove-if
'(lambda (x)
(or
(= (car x) 340)
(= (car x) 350)
;(/= (car x) 5)
(= (car x) -1)
(= (car x) 330)
)
)
entg
)
)
(setq entall (cons el entall));想把群码写入txt中比较,但不知道怎么将表写入txt???
(setq hand (cons (cdr (assoc 5 entg)) hand));当前只识别句柄,如果图元移动位置或者改色都不能识别
)
(setq openff(open newname"w"))
(foreach e hand
(write-line e openff )
)
(close openff)
(princ (strcat "写入句柄" newname " 成功"))
(princ)
)
;;;选择不相同的部分
(defun c:tt3 (/ getpath en hd name newname oldos openff path ss)
(setvar "cmdecho" 0)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq ss (ssadd))
(setq getpath(getvar "Dwgprefix") )
(setq path (getfiled "" (strcat "" getpath "") "txt" 0) )
;读取文件列表
(setq openff(open path "r"))
(while (setq hd (read-line openff)) ;循环读取每一行
(if (setq en (handent hd));根据句柄判断图形中是否有此对象 如果有就加入选择集
(setq ss (ssadd en ss))
)
);_ 结束while
(close openff)
(setvar "osmode" oldos)
(setvar "cmdecho" 1)
(command ".select" "all" "r" ss "")
(sssetfirst nil (ssget "p") );反选
(princ)
)
用tt23生成两个文件的句柄,然后再用tt3调用另一个文件的名柄来找出和本图的不同之处!
想法不错,顶起来,希望楼主的东西能引来更多的好东西! 这方法漏洞太多,不靠谱。。。
如楼主所言,只比较句柄,那么只要句柄一样,改颜色图层线宽甚至圆半径顶点什么的,都不能检查。
如果图元删掉原样重画,站在图形角度来说是一样的,但句柄不一样,这个程序会当做不一样。
应该说没有通用的判断图形是否一样的算法,要取决于你的具体情况才能针对性的检查。比如首尾相同的直线和多段线,算不算一样?线宽不一样,算不算一样? mikewolf2k 发表于 2017-8-16 15:41
这方法漏洞太多,不靠谱。。。
如楼主所言,只比较句柄,那么只要句柄一样,改颜色图层线宽甚至圆半径顶点 ...
确实不靠谱,句柄一样移动了位置或者改了颜色都判断不出来。 jun353835273 发表于 2017-8-16 21:57
确实不靠谱,句柄一样移动了位置或者改了颜色都判断不出来。
所以说要针对具体情况。如果确定这批图纸不会有人做移动或者改颜色这种操作,句柄不失为一种判断方法。如果仅有可能改颜色,那么输出句柄和颜色两项进行比较亦可。 能否不开CAD的情况下进行对比呢?
页:
[1]