DXF檔案解析顯示(讀取,合併,儲存)
阿新 • • 發佈:2019-02-04
專案來源:
這個專案是一個老師在外面接的。最後轉給我來弄了。
專案要求:
1.C#自定義控制元件,可以顯示DXF檔案,支援多張顯示(合併為一個圖)。
2.要求可以儲存合併後的圖形,儲存格式為DXF檔案。
一個專案介紹面面俱到,對我還是有些困難。我就拿出一些值得寫的點吧。如果您正好也在做DXF解析,可能會有些作用。
1.讀取的主要方法。
while (line2 != "EOF") { while (line1 == "0" && line2 != "EOF") { if (line2 == "LINE") LineModule(reader, out line1, out line2); else if (line2 == "LWPOLYLINE") PolylineModule(reader, out line1, out line2); else if (line2 == "CIRCLE") CircleModule(reader, out line1, out line2); else if (line2 == "ARC") ArcModule(reader, out line1, out line2); else if (line2 == "TEXT" || line2 == "MTEXT") TextModule(reader,out line1,out line2); else GetLineCouple(reader, out line1, out line2); } if (line2 != "EOF") GetLineCouple(reader, out line1, out line2); }
這段程式碼用來分揀不同的實體。GetLineCouple(reader, out line1, out line2)這個方法是讀取DXF兩行內容。Reader是StreamReader類的實體,指向讀取的問津,line1和line2是讀取的兩行。
下面的程式碼描述的是LineModule的主要讀取程式碼
do { GetLineCouple(reader, out line1, out line2); Line1 = Convert.ToInt32(line1); switch (Line1) { case 5: Debug.WriteLine(line2); break; case 10: x1 = Convert.ToDouble(line2); if (x1 > XMax) XMax = x1; if (x1 < XMin) XMin = x1; break; case 20: y1 = Convert.ToDouble(line2); if (y1 > YMax) YMax = y1; if (y1 < YMin) YMin = y1; break; case 11: x2 = Convert.ToDouble(line2); if (x2 > XMax) XMax = x2; if (x2 < XMin) XMin = x2; break; case 21: y2 = Convert.ToDouble(line2); if (y2 > YMax) YMax = y2; if (y2 < YMin) YMin = y2; break; case 62: color = Convert.ToInt16(line2); c = IndexToRGB(color, r, g, b); break; } } while (line1 != "0");
其中XMin、YMin等表示這張圖的座標。 最後我會根據這些資訊來決定顯示的縮放比和位移量。