我能取出单个三角的四个数据(三个坐标(分别放在tt1,tt2,tt3中)和一个法向量(放在tt中)),也能将数据加入数组triangles,但是几次下来以后后面的数据会覆盖之前的数据,例如整个运行一次,数组的第一项储存的是我的第一个数据,但是运行三次以后,数组的每一项都是我最后加入的数据即第三个数据,也就是数组里的每个数据永远都是一样的,之前的数据被后来的覆盖了...是否和triangle实例是全局变量有关的,如果是的话如何修改呢,因为在中间重新实例化Triangle的话,后面switch的域内无法搜索到triangle,谢谢大噶。
public struct Coordinate
{
public float X;
public float Y;
public float Z;
internal static Coordinate ReadAscii(string[] points)
{
Coordinate coor = new Coordinate();
coor.X = float.Parse(points[1]);
coor.Y = float.Parse(points[2]);
coor.Z = float.Parse(points[3]);
return coor;
}
}
```public class Triangle
{
public Coordinate NormalVector { get; set; }
public Coordinate Vertex1 { get; set; }
public Coordinate Vertex2 { get; set; }
public Coordinate Vertex3 { get; set; }
}
```public static Triangle triangle = new Triangle();
public static List<Triangle> triangles = new List<Triangle>();
public static int i = 1;
public static List<Triangle> ReadAscii(string fileName)
{
//以流的方式读取文件
StreamReader sr = new StreamReader(fileName);
string line;
while ((line = sr.ReadLine()) != null)
{
line = line.TrimStart();
if (line.StartsWith("facet normal"))
{
line = line.Substring(12);
string[] tt = line.Split(' ');
triangle.NormalVector = Coordinate.ReadAscii(tt);
}
else
{
if (line.StartsWith("vertex"))
{
switch (i)
{
case 1:
line = line.Substring(6);
string[] tt1 = line.Split(' ');
triangle.Vertex1 = Coordinate.ReadAscii(tt1);
i++;
break;
case 2:
line = line.Substring(6);
string[] tt2 = line.Split(' ');
triangle.Vertex2 = Coordinate.ReadAscii(tt2);
i++;
break;
case 3:
line = line.Substring(6);
string[] tt3 = line.Split(' ');
triangle.Vertex3 = Coordinate.ReadAscii(tt3);
i = 1;
triangles.Add(triangle);
break;
}
}
}
}
return triangles;
}