背景

在制造业中,工艺资料,测量报告,实验报告等资料中,需要用到工程图纸中的尺寸,形位公差等信息。而这些工程图由于是不同的辅助软件生成。如 AutoCAD, UG,Catia等。需得到这些尺寸标注现实中比较常见的方式有:
1、根据图纸标注,人工手动输入到EXCEL当中。
2、通过辅助软件自身的二次开发功能,自动提取到EXCEL中。
第1项缺点明显,首先是效率低,其次容易出错,最头疼的是一旦,图纸变更,容易遗漏变更项,还必须得手动再次输入。
第2项,优点是效率高不易出错,缺点是不同公司采用的辅助软件可能不一样。要想高效的实现数据通用,学习曲线比较高。

我的解决方案

通过读取DXF文件来批量获取标注和形位公差。
DXF文件是AutoDesk公司用来与其它辅助设计软件,进行数据交换的文档格式。具体文件构架可参阅AutoDesk官网。它可以将不同的辅助设计软件的图纸另存为DXF格式,以实现通用性。对DXF文件读取的方式如下:

1、采用AutoCad二次开发来读取dwg文件的块结构来获取标注和形位公差。
缺点是:这种方式必须安装AutoCad软件,企业中实际设计时用到UG或Catia工具较多,涉及到版权之类的,这类方式实用性不强,最终放弃。
2、采用第三方控件(组件)。
优点是可独立AutoCad环境。缺点是基本上都是要收费的。有破解的对高版本DXF文件支持不友好,还有就是开发说明文档较少。最终放弃。
3、通过开源项目。
优点是可独立AutoCad环境,不收费(根据许可而定)。缺点就是有的项目编译成功率不高(视情况而定,可能跟我是一个菜鸟有关)。我本次采用的方案是一个名为NetDxf的开源项目。可从下面的连接获取。

https://github.com/haplokuon/netDxf.git
源码中有开发文档帮助和实例,但我要实现的功能实例中没有。
我将在下面的具体说明中展示。

具体的实现

有工程图纸(1.dxf)如下:

实现批量提取尺寸,尺寸公差和形位公差的代码如下:
1、首先需要编译这个开源项目在debug目录中会生成一个netdxf.dll的库文件。
2、新建C#控制台程序。
3、在项目引用中导入netdxf.dll库。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using netDxf;
using netDxf.IO;
using netDxf.Entities;
using netDxf.Tables;
using netDxf.Blocks;namespace Mdxf
{static class Program{/// <summary>/// 应用程序的主入口点。/// </summary>[STAThread]static void Main(){DxfDocument dxfDocument = DxfDocument.Load("1.dxf");//载入1.dxf文件List<EntityObject> Dimlist = new List<EntityObject>();//声明一个Dimlist列表,用于存放dxf文件中尺寸标注。List<EntityObject> TolList = new List<EntityObject>();//声明一个TolList列表,用于存放形位公差。foreach (Block block in dxfDocument.Blocks){//遍历dxf文档中的块。if (block.Name.Contains("*D")){//*D为dxf文件架构中用于存储标注的匿名块。foreach (EntityObject entityObject in block.Entities){Dimlist.Add(entityObject);//将获取到的标注块添加到Dimlist列表中。}}else if (block.Name.Contains("*Model_Space")){//*Model_Space指AutoCAD软件的模型界面。只有从这里才能获取到形位公差。foreach (EntityObject entityObject in block.Entities){TolList.Add(entityObject);//将获取到的形位公差添加到TolList列表中。}}}//下面是批量输出尺寸及公差。Dimlist.ForEach((i) => {if (i.GetType() == typeof(MText))//首先要判断,列表中的类型是不MText(多行文本类型){MText DimText = (MText)i;//由于EntityObject是一个抽象类,所以这里要强制转换具体的实现类MText)i。Console.WriteLine(DimText.Value);//控制台输出尺寸及公差。};});//下面是批量输出形位公差。TolList.ForEach((i) =>{if (i.GetType() == typeof(Tolerance))//首先要判断,列表中的类型是不Tolerance(公差类型){Tolerance TolText = (Tolerance)i;//由于EntityObject是一个抽象类,所以这里要强制转换具体的实现类(Tolerance)i。Console.WriteLine(TolText.ToStringRepresentation());//控制台输出尺寸及公差。};});Console.ReadKey();}}
}

输出结果及与工程对纸的关系如下图:

输出最终字符串如下。
\A1;12.8721
\A1;?4.4818
\A1;90°±1°
\A1;7.9439±0.2000
\A1;R2.2409\S+0.1000^ -0.0000;
\A1;12.8721\S+0.0000^ -0.1000;
\A1;90°\S+0°^ -1°;
\A1;90°\S+1°^ -0°;
\A1;14.6007
\A1;11.2820
{\Fgdt;j}%%v0.1%%v%%vA%%v%%v
{\Fgdt;r}%%v0.2%%v%%vA%%vB%%v
{\Fgdt;j}%%v0.3%%v%%vA%%vB%%vC
{\Fgdt;j}%%v{\Fgdt;n}0.4{\Fgdt;m}%%v%%vA%%vB%%vC
{\Fgdt;j}%%v{\Fgdt;n}0.5{\Fgdt;m}%%v%%vA{\Fgdt;m}%%vB{\Fgdt;m}%%vC
{\Fgdt;j}%%v{\Fgdt;n}0.6{\Fgdt;m}%%v%%vA%%vB%%vC^J{\Fgdt;j}%%v{\Fgdt;n}0.7%%v%%vA%%vB%%v
{\Fgdt;j}%%v{\Fgdt;n}0.8{\Fgdt;m}%%v%%vA{\Fgdt;m}%%vB{\Fgdt;m}%%vC{\Fgdt;m}^J{\Fgdt;a}%%v0.9%%v%%vA%%v%%v

这些输出是DXF文件的控制码。可以通过字符串处理方式最终实现下图所示的效果,在这里我就不再加以说明。希望对需要的人有一定的帮助。

C#批量提取DXF文件中的尺寸,公差和形位公差相关推荐

  1. python批量提取pdf的数据_Python批量提取PDF文件中文本的脚本

    本文实例为大家分享了Python批量提取PDF文件中文本的具体代码,供大家参考,具体内容如下 首先需要执行命令pip install pdfminer3k来安装处理PDF文件的扩展库. import ...

  2. Tips--利用shell脚本批量提取txt文件中任意字段

    利用shell脚本批量提取txt文件中任意字段 前言 0. 一个例子 1. cat命令 2. '|'符号与'>'符号 3. grep命令 4. awk命令 前言 对于测试中出现的log,我们经常 ...

  3. Python工具源码,Python批量提取PPT文件中的图片

    在办公场景当中,同样也有这样一个需求,那就是快速批量把PPT文件中的图片提取出来,毕竟一个个点击另存为太过于繁琐,以及耗费时间,前面本渣渣分享过如何应用Python批量提取PDF文件中的图片,而这一篇 ...

  4. Python脚本工具,PyMuPDF批量提取PDF文件中的图片

    如何批量快速提取出PDF中的图片文件,你是否遇到这样的一个问题,尤其是PPT文件转换为PDF文件,需要快速提取其中的图片文件,如果你恰好会那么一点py,同时复制粘贴没问题的话,那么相信你也能够很轻松的 ...

  5. Python批量提取Excel文件中的图片

    推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月第1次印刷,2021年7月第9次印刷,山东省一流本科 ...

  6. Python批量提取PowerPoint文件中所有幻灯片标题和备注文本

    小知识: 在制作PowerPoint演示文档时,可以在幻灯片下面添加备注,在双屏播放PPT并设置了演讲者视图时可以给讲者提供一些提示信息,防止忘词,也可以提示下一页幻灯片的内容是什么使得讲者能够完美过 ...

  7. 怎么批量提取html文件中的链接,excel怎么批量提取超链接

    excel中有很多内容是添加超链接的,现在想直接提取所有内容的超链接,该如何进行批量提取呢?下面就跟学习啦小编一起来看看吧. excel批量提取超链接的步骤 1.通常我们从网站后台导出的标题是带日期的 ...

  8. Python批量提取Excel文件中文本框组件里的文本

    开学第一课:拜托,一定不要这样问Python问题 中国大学MOOC"Python程序设计基础"免费学习地址 2020年秋季学期Python教材推荐与选用参考 推荐图书: <P ...

  9. Python批量提取PDF文件中的文本

    首先需要执行命令pip install pdfminer3k来安装处理PDF文件的扩展库. import os import sys import time pdfs = (pdfs for pdfs ...

  10. 使用Python批量修改PPTX文件中文本框格式

    问题描述:最近正在整理Python教材的配套PPT,原来的PPT是4:3的,考虑到现在很多屏幕都是宽屏的,于是打算重新整理一下.对于正常的幻灯片,直接在"页面设置"中修改一下就可以 ...

最新文章

  1. Be a person
  2. 公司用的 MySQL 团队开发规范,非常详细,建议收藏!
  3. python续行符是啥_python续行符
  4. pycharm 敲代码时的效果插件_精选Pycharm里6大神器插件
  5. CRM Fiori Opportunity应用的新建Opportunity操作的实现
  6. error:lnk2005 已经在*.obj中定义_如何在 Spring 中自定义 scope
  7. 数字人民币如何操作使用?
  8. 推荐游戏玩家使用金山密保保护帐号安全
  9. ICEM 二维块的拉伸
  10. ITIL规范(持续更新)
  11. JPG如何免费压缩大小并且保证清晰度
  12. Rhythmbox乱码的解决办法
  13. AR游戏能否摘掉“噱头”的帽子跻身主流产业?
  14. Avoiding 16 Common OpenGL Pitfalls(避免 16 个常见的 OpenGL 陷阱)
  15. 计算机二级:公共基础部分
  16. 12年前的作品──《美绿中国象棋》制作过程及算法简介
  17. sqlmap之sqlmapapi
  18. 【Excel VBA】VBE
  19. word中三线表的制作(及续表的制作)
  20. 开关电源芯片TOP264vg

热门文章

  1. 图画日记怎么画_画画提高的一个方法: 绘画日记!
  2. 软件 可靠性测试项目有哪些,可靠性测试
  3. B-JUI 实践 之 带搜索与编辑的Datagrid
  4. 大龄程序员找工作,为什么这么难?
  5. w7计算机文件夹打开怎么设置密码,w7文件夹怎么设密码_w7文件夹设置密码操作方法...
  6. android音视频播放技术背景,Android音视频开发-入门(一)
  7. 汇编c语言环境搭建原理,什么是一个精简的C语言环境 怎么搭建?
  8. One Last Kiss风格封面生成器;程序内存分析工具;Python入门课程资料;神经文本语音合成教程;前沿论文 | ShowMeAI资讯日报
  9. Unity中制作图片字体
  10. 微信摇一摇——iBeacon基站(一):USB蓝牙模式