明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1154|回复: 4

dwg文件比较,望优化能对比更多对象

[复制链接]
发表于 2017-8-8 08:35 | 显示全部楼层 |阅读模式
论坛dwg文件比较的帖子不是很多,今天发一个文件比较的功能,根据句柄不同判断图形是否一致。由于只判断了句柄,因此图元的位置,颜色改动都无法识别。
  1. ;;写入句柄到txt,两个图形都要执行一次写入组码
  2. (defun c:tt23( / path name newname shell reply ent entg hand i openff ss EL ENTALL)
  3. (setvar "cmdecho" 0)
  4. (setq Path (getvar "dwgprefix"))
  5. (setq newname (strcat path (vl-string-right-trim ".dwg" (getvar "dwgname") ) "句柄.txt"))
  6. (setq ss (ssget "x"))
  7. (repeat (setq i (sslength ss))
  8. (setq ent (ssname ss (setq i (1- i))))
  9. (setq entg (entget ent))
  10. (setq el (vl-remove-if
  11.                     '(lambda (x)
  12.                        (or
  13.         (= (car x) 340)                  
  14.                           (= (car x) 350)                  
  15.                            ;(/= (car x) 5)                  
  16.                            (= (car x) -1)                  
  17.                            (= (car x) 330)                  
  18.                        )
  19.                      )
  20.                     entg
  21.                   )
  22.         )

  23. (setq entall (cons el entall))  ;想把群码写入txt中比较,但不知道怎么将表写入txt???
  24. (setq hand (cons (cdr (assoc 5 entg)) hand));当前只识别句柄,如果图元移动位置或者改色都不能识别
  25.   )
  26. (setq openff(open newname  "w"))
  27. (foreach e hand
  28. (write-line e openff )
  29.   )
  30. (close openff)
  31. (princ (strcat "写入句柄" newname " 成功"))
  32. (princ)
  33. )

  34. ;;;选择不相同的部分
  35. (defun c:tt3 (/ getpath en hd name newname oldos openff path ss)
  36. (setvar "cmdecho" 0)
  37. (setq oldos (getvar "osmode"))
  38. (setvar "osmode" 0)
  39. (setq ss (ssadd))
  40. (setq getpath(getvar "Dwgprefix") )
  41. (setq path (getfiled "" (strcat "" getpath "") "txt"   0) )
  42.     ;读取文件列表

  43. (setq openff(open path   "r"))
  44. (while (setq hd (read-line openff)) ;循环读取每一行
  45. (if (setq en (handent hd));根据句柄判断图形中是否有此对象 如果有就加入选择集
  46. (setq ss (ssadd en ss))
  47.      )
  48.      );_ 结束while
  49. (close openff)
  50. (setvar "osmode" oldos)
  51. (setvar "cmdecho" 1)
  52. (command ".select" "all" "r" ss "")
  53. (sssetfirst nil (ssget "p") );反选
  54. (princ)
  55.    )


本帖子中包含更多资源

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

x
发表于 2017-8-8 14:59 | 显示全部楼层
用tt23生成两个文件的句柄,然后再用tt3调用另一个文件的名柄来找出和本图的不同之处!

想法不错,顶起来,希望楼主的东西能引来更多的好东西!
发表于 2017-8-16 15:41 | 显示全部楼层
这方法漏洞太多,不靠谱。。。
如楼主所言,只比较句柄,那么只要句柄一样,改颜色图层线宽甚至圆半径顶点什么的,都不能检查。
如果图元删掉原样重画,站在图形角度来说是一样的,但句柄不一样,这个程序会当做不一样。
应该说没有通用的判断图形是否一样的算法,要取决于你的具体情况才能针对性的检查。比如首尾相同的直线和多段线,算不算一样?线宽不一样,算不算一样?
 楼主| 发表于 2017-8-16 21:57 | 显示全部楼层
mikewolf2k 发表于 2017-8-16 15:41
这方法漏洞太多,不靠谱。。。
如楼主所言,只比较句柄,那么只要句柄一样,改颜色图层线宽甚至圆半径顶点 ...

确实不靠谱,句柄一样移动了位置或者改了颜色都判断不出来。
发表于 2017-8-17 09:30 | 显示全部楼层
jun353835273 发表于 2017-8-16 21:57
确实不靠谱,句柄一样移动了位置或者改了颜色都判断不出来。

所以说要针对具体情况。如果确定这批图纸不会有人做移动或者改颜色这种操作,句柄不失为一种判断方法。如果仅有可能改颜色,那么输出句柄和颜色两项进行比较亦可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 06:02 , Processed in 0.397620 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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