C#批量提取DXF文件中的尺寸,公差和形位公差
背景
在制造业中,工艺资料,测量报告,实验报告等资料中,需要用到工程图纸中的尺寸,形位公差等信息。而这些工程图由于是不同的辅助软件生成。如 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文件中的尺寸,公差和形位公差相关推荐
- python批量提取pdf的数据_Python批量提取PDF文件中文本的脚本
本文实例为大家分享了Python批量提取PDF文件中文本的具体代码,供大家参考,具体内容如下 首先需要执行命令pip install pdfminer3k来安装处理PDF文件的扩展库. import ...
- Tips--利用shell脚本批量提取txt文件中任意字段
利用shell脚本批量提取txt文件中任意字段 前言 0. 一个例子 1. cat命令 2. '|'符号与'>'符号 3. grep命令 4. awk命令 前言 对于测试中出现的log,我们经常 ...
- Python工具源码,Python批量提取PPT文件中的图片
在办公场景当中,同样也有这样一个需求,那就是快速批量把PPT文件中的图片提取出来,毕竟一个个点击另存为太过于繁琐,以及耗费时间,前面本渣渣分享过如何应用Python批量提取PDF文件中的图片,而这一篇 ...
- Python脚本工具,PyMuPDF批量提取PDF文件中的图片
如何批量快速提取出PDF中的图片文件,你是否遇到这样的一个问题,尤其是PPT文件转换为PDF文件,需要快速提取其中的图片文件,如果你恰好会那么一点py,同时复制粘贴没问题的话,那么相信你也能够很轻松的 ...
- Python批量提取Excel文件中的图片
推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月第1次印刷,2021年7月第9次印刷,山东省一流本科 ...
- Python批量提取PowerPoint文件中所有幻灯片标题和备注文本
小知识: 在制作PowerPoint演示文档时,可以在幻灯片下面添加备注,在双屏播放PPT并设置了演讲者视图时可以给讲者提供一些提示信息,防止忘词,也可以提示下一页幻灯片的内容是什么使得讲者能够完美过 ...
- 怎么批量提取html文件中的链接,excel怎么批量提取超链接
excel中有很多内容是添加超链接的,现在想直接提取所有内容的超链接,该如何进行批量提取呢?下面就跟学习啦小编一起来看看吧. excel批量提取超链接的步骤 1.通常我们从网站后台导出的标题是带日期的 ...
- Python批量提取Excel文件中文本框组件里的文本
开学第一课:拜托,一定不要这样问Python问题 中国大学MOOC"Python程序设计基础"免费学习地址 2020年秋季学期Python教材推荐与选用参考 推荐图书: <P ...
- Python批量提取PDF文件中的文本
首先需要执行命令pip install pdfminer3k来安装处理PDF文件的扩展库. import os import sys import time pdfs = (pdfs for pdfs ...
- 使用Python批量修改PPTX文件中文本框格式
问题描述:最近正在整理Python教材的配套PPT,原来的PPT是4:3的,考虑到现在很多屏幕都是宽屏的,于是打算重新整理一下.对于正常的幻灯片,直接在"页面设置"中修改一下就可以 ...
最新文章
- Be a person
- 公司用的 MySQL 团队开发规范,非常详细,建议收藏!
- python续行符是啥_python续行符
- pycharm 敲代码时的效果插件_精选Pycharm里6大神器插件
- CRM Fiori Opportunity应用的新建Opportunity操作的实现
- error:lnk2005 已经在*.obj中定义_如何在 Spring 中自定义 scope
- 数字人民币如何操作使用?
- 推荐游戏玩家使用金山密保保护帐号安全
- ICEM 二维块的拉伸
- ITIL规范(持续更新)
- JPG如何免费压缩大小并且保证清晰度
- Rhythmbox乱码的解决办法
- AR游戏能否摘掉“噱头”的帽子跻身主流产业?
- Avoiding 16 Common OpenGL Pitfalls(避免 16 个常见的 OpenGL 陷阱)
- 计算机二级:公共基础部分
- 12年前的作品──《美绿中国象棋》制作过程及算法简介
- sqlmap之sqlmapapi
- 【Excel VBA】VBE
- word中三线表的制作(及续表的制作)
- 开关电源芯片TOP264vg
热门文章
- 图画日记怎么画_画画提高的一个方法: 绘画日记!
- 软件 可靠性测试项目有哪些,可靠性测试
- B-JUI 实践 之 带搜索与编辑的Datagrid
- 大龄程序员找工作,为什么这么难?
- w7计算机文件夹打开怎么设置密码,w7文件夹怎么设密码_w7文件夹设置密码操作方法...
- android音视频播放技术背景,Android音视频开发-入门(一)
- 汇编c语言环境搭建原理,什么是一个精简的C语言环境 怎么搭建?
- One Last Kiss风格封面生成器;程序内存分析工具;Python入门课程资料;神经文本语音合成教程;前沿论文 | ShowMeAI资讯日报
- Unity中制作图片字体
- 微信摇一摇——iBeacon基站(一):USB蓝牙模式