接到DXF文件解析任务后,就在什么都有的万能互联网上找,找得顺利还好,不顺利的话,看10多篇博文,下载十多个例子都没能找到合适自己要的。很是折腾。
以下为DXF文件格式的解析,也能说是DXF数据的提取,得到DXF的数据后,爱什么的就什么的。
数据提取,肯定要有个规范的数据格式。有找到官方文档,就基本不需要看其他的资料,看看以下的链接就好。
DXF格式官方说明:http://docs.autodesk.com/ACD/2011/CHS/filesDXF/WSfacf1429558a55de185c428100849a0ab7-5f35.htm
数据格式知道了,那就完成了?
当然可以这么做,但你得有10天,半个月的时间去深入研究。虽然说直线很简单,但直线有很多类型,比如:样条曲线,多线段等。说实话硬是肝,也能弄。但容易漏掉一些细节,导致解析不全。故不推荐肝,当然我在没有熟悉netDxf之前,确实有肝过几天,一行一行的读取,判断等等。很磨练人,,,
netDxf是个开源的DXF文件解析工具,源码链接如下:
解析工具netDxf源代码:https://github.com/haplokuon/netDxf
这个网站都是英文,好怕!!!
别怕,不管黑猫白猫抓到耗子就是好猫,怕它做肾,只要能把源码下载下来,得到DLL,其他什么都没事。
就分三步,如下:
1、Code
2、Downlod ZIP
3、等待下载完成
还有个偷懒的办法,使用NuGet,项目右键,按着下面的图片,一步一步来即可。当然的,得有外网,没外网,这个方法忽略。
由于我已经下载,也就没有点开(点击5的位置),故上图的“6”是空白,点击5后会有下载按钮,点击下载后,想着静静,等待加载完成就好,就能直接在代码里使用。
以上和标题说的有出入,不符。无关的说太多了?
但会了之后,DXF的解析确实也就,想要什么就拿什么。开始我也是不相信的,这就看吧:
准备工作就不多说:
1、加载DXF文件:(就一行代码)
DxfDocument dxfDocument = DxfDocument.Load(dxfFileFullPath);
dxfFileFullPath:为DXF文件的完整路径
2、你想要什么?圆、样条曲线、标注?
2.1、解析圆的数据:
2.1.1、打开官方文档网站,去找圆,图形对象是ENTITIES 段
2.1.2、通过netDxf工具读取圆的参数
IEnumerable<netDxf.Entities.Circle> circle =
(IEnumerable<netDxf.Entities.Circle>)dxfDocument.Circles.GetEnumerator();
foreach (netDxf.Entities.Circle item in circle)
{
item.Center.X.ToString();//圆心X
item.Center.Y.ToString();//圆心Y
item.Radius.ToString();//圆半径
}
圆的所有参数,开源F12查看Circle,即可,如:
namespace netDxf.Entities
{
public class Circle : EntityObject
{
public Circle();
public Circle(Vector3 center, double radius);
public Circle(Vector2 center, double radius);
public Vector3 Center { get; set; }
public double Radius { get; set; }
public double Thickness { get; set; }
public override object Clone();
public List<Vector2> PolygonalVertexes(int precision);
public LwPolyline ToPolyline(int precision);
public override void TransformBy(Matrix3 transformation, Vector3 translation);
}
}
2.2、解析样条曲线数据:不说太多,一样的方法,看 SPLINE;
2.7、获取标注:不说了,一样的方法,看 DIMENSION;
是不是DXF文件解析也没有说明的。
到了这里,是不是DXF想要什么就拿什么,对吧,没错吧,应该没错的。