.DXFファイル(AutoCADなどで使用される)を読み取るための、理想的にはC#などのソースコードを知っている人はいますか?コードでない場合は、さまざまなコード(要素/ブロックなど)とその意味を示す表?
私は自分でリーダーを書いていて、フォーマットを詳述した枯れ木のドキュメントを持っていますが、例えば255のACIカラーのそれぞれからRGBへのコンバーター...ありがとう!
Cadlib WoutWareから、いくつかのプロジェクトに使用して、良い結果が得られました。
私は2D図面用に独自の JavaのDXf-Viewer (独自のDXFファイルまたはURLをビューアにドロップできます)の開発に数年携わっています。
AutoCADから公開された情報は優れた基盤ですが、その仕組みについては説明していません。
Open Design Allianceのメンバーになると、いくつかのCAD形式をDXFに変換できるようになります。商用製品を開発している場合は、良い考えかもしれません。
DXFに関するドイツ語の本( http://www.crlf.de/Verlag/DXF-intern/DXF-intern.html )があり、この形式を実際に説明しています。費用はかかりますが、検索の日数を節約できます。
DXF形式の色にはインデックスが付けられているため、ACIからRGBへのコンバーターが必要です。特別な意味を持つ値0と1には注意してください。
よろしく。
幸い、AutoCADはDXF形式の情報をここに公開しています: DXF形式
誰かがまだ探している場合に備えて更新してください...
両方のリンクが含まれているだけで、同じライブラリです。
https://github.com/haplokuon/netDxf
https://www.nuget.org/packages/netDXF/
ここ はCodeProjectdxfリーダーへのリンクです。しかし、それは非常に限られているようです(そして特にうまくいっていません)。
Open Design Alliance を試してみてください。自分で見てからしばらく経ちますが、さまざまなAutoCADファイルを扱うためのCライブラリがたくさんありました。
すべてのASCII DXFバージョンで現在利用可能な同じコードでポイント/ライン/アークを読み取るためのC#コードをいくつか作成しました
正しい名前のサブルーチンを追加するだけで、オブジェクトを追加できます。
(DXFの内部を見てください)。
内容:
次に、データを使用して何かを行うことができます
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]
}
}
}
}
}
Here は、Javaのもう1つのオープンソースdxfリーダーです。しかしバギー!