项目来源:
这个项目是一个老师在外面接的。最后转给我来弄了。
项目要求:
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等表示这张图的坐标。 最后我会根据这些信息来决定显示的缩放比和位移量。