读.DXF文件[关闭](Reading .DXF files [closed])

2019-06-23 09:30发布

有谁知道的源代码,最好是在C#或类似的,用于读取。DXF文件(13759 AutoCAD的等)? 如果没有代码,则表示出了各种代码(元素/块/等)和它们的含义?

我写一个读者自己,并有死树的文档,详细的格式,但我尽量避免从每个255种ACI颜色为RGB的写作如转换器...谢谢!

Answer 1:

Cadlib从WoutWare我已经使用了一对夫妇的效果也不错的项目。



Answer 2:

我在开发自己的工作了几年DXF-浏览器在Java (你可以将你自己的DXF文件,或在浏览器上的URL)的二维图纸。
从AutoCAD公开信息是一个很好的基础,但并不说明它是如何工作的。
成为开放式设计联盟的成员,会给你几个CAD格式转换为DXF的可能性。 这可能是一个好主意,如果你正在开发一个商业产品。
有一个德国图书( http://www.crlf.de/Verlag/DXF-intern/DXF-intern.html )约DXF其真正解释这种格式。 它是昂贵的,但可以节省搜索的天。
在DXF格式的颜色进行索引,你必须有一个ACI转换器,RGB。 小心将具有特殊的意义值0和1。

问候。



Answer 3:

幸运的AutoCAD这里发布DXF格式的信息: DXF格式



Answer 4:

你可能想尝试开放式设计联盟 。 这是一段时间,因为我看着它自己,但他们有C库的负载处理各种AutoCAD文件。



Answer 5:

这里是一个CodeProject上DXF阅读器的链接; 它似乎非常有限的(而不是特别好做)虽然。



Answer 6:

更新万一有人仍在期待...
这是相同的库,只是其中两个链接。

https://github.com/haplokuon/netDxf
https://www.nuget.org/packages/netDXF/



Answer 7:

这里是另一个开源DXF阅读器,Java中。 然而越野车!



Answer 8:

我已经写了一些C#代码相同的代码来读点/线/弧提供的所有ASCII DXF版本的那一刻
您可以BIJ只是用正确的名字添加更多的子程序添加更多对象
(看看里面DXF)。

它能做什么:

  1. 你送你与读者导入到该程序的整个文件
  2. 然后它搜索实体块(这是人的几何形状被存储)
  3. 然后,它搜索的对象(点/线/弧)
    (R12 R14为止使用点/线/ ARC)
    (R2000直到R2013使用AcDbPoint / AcDbLine / AcDbArc或AcDbCircle如果它包含的角度)
  4. 然后它检查层名称
  5. 然后它检查是否可变码是有
  6. 然后,你可以做一些与数据

      private void ReadDxfFile (string DxfFile) { string Layer = ""; string[] D = DxfFile.Split(new[] { Environment.NewLine }, StringSplitOptions.None); int iEntities = 0; for(int i = 0; i < D.Length; i++) { if (D[i] == "ENTITIES") {iEntities = i; break; } } for (int i = iEntities; i < D.Length; i++) { if (D[i] == "POINT" || D[i] == "AcDbPoint") { int iEntity = i; if (D[i].StartsWith("AcDb")) { for (iEntity = i; D[iEntity] != "AcDbEntity"; iEntity--) ; } Layer = ""; for (int iLayer = iEntity; iLayer < i + 10 && Layer == ""; iLayer++) { if (D[iLayer] == " 8") { Layer = D[iLayer + 1]; }; } for (int iWaarden = i; iWaarden < i + 8; iWaarden++) { if (D[iWaarden] == " 10" && D[iWaarden + 2] == " 20") { //Here you can store the following data in a list for later use //LayerName = Layer //X = D[iWaarden + 1] //Y = D[iWaarden + 3] //Z = D[iWaarden + 5] } } } if (D[i] == "LINE" || D[i] == "AcDbLine") { int iEntity = i; if (D[i].StartsWith("AcDb")) { for (iEntity = i; D[iEntity] != "AcDbEntity"; iEntity--) ; } Layer = ""; for (int iLayer = iEntity; iLayer < i + 10 && Layer == ""; iLayer++) { if (D[iLayer] == " 8") { Layer = D[iLayer + 1]; }; } for (int iWaarden = i; iWaarden < i + 10; iWaarden++) { if (D[iWaarden] == " 10" && D[iWaarden + 2] == " 20") { //Here you can store the following data in a list for later use //LayerName = Layer //Xbegin = D[iWaarden + 1] //Ybegin = D[iWaarden + 3] //Zbegin = D[iWaarden + 5] //Xend = D[iWaarden + 7] //Yend = D[iWaarden + 9] //Zend = D[iWaarden + 11] } } } if (D[i] == "ARC" || D[i] == "AcDbArc" || D[i] == "AcDbCircle") { int iEntity = i; if (D[i].StartsWith("AcDb")) { for (iEntity = i; D[iEntity] != "AcDbEntity"; iEntity--) ; } Layer = ""; for (int iLayer = iEntity; iLayer < i + 10 && Layer == ""; iLayer++) { if (D[iLayer] == " 8") { Layer = D[iLayer + 1]; }; } for (int iWaarden = i; iWaarden < i + 10; iWaarden++) { if (D[iWaarden] == " 10" && D[iWaarden + 2] == " 20" && D[iWaarden + 10] == " 51") { //Here you can store the following data in a list for later use //LayerName = Layer //Xmid = D[iWaarden + 1] //Ymid = D[iWaarden + 3] //Zmid = D[iWaarden + 5] //Radius = D[iWaarden + 7] //StartAngle = D[iWaarden + 9] //StartAngle = D[iWaarden + 11] } if (D[iWaarden] == " 10" && D[iWaarden + 2] == " 20" && D[iWaarden + 12] == " 51") { //Here you can store the following data in a list for later use //LayerName = Layer //Xmid = D[iWaarden + 1] //Ymid = D[iWaarden + 3] //Zmid = D[iWaarden + 5] //Radius = D[iWaarden + 7] //StartAngle = D[iWaarden + 11] //StartAngle = D[iWaarden + 13] } } } } } 


文章来源: Reading .DXF files [closed]
标签: c# autocad dxf