1. 程式人生 > >DXF檔案解析顯示(讀取,合併,儲存)

DXF檔案解析顯示(讀取,合併,儲存)

專案來源:

這個專案是一個老師在外面接的。最後轉給我來弄了。

專案要求:

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兩行內容。ReaderStreamReader類的實體,指向讀取的問津,line1line2是讀取的兩行。

下面的程式碼描述的是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");

其中XMinYMin等表示這張圖的座標。 最後我會根據這些資訊來決定顯示的縮放比和位移量。