汤俊萱 2019-07-04 20:36 采纳率: 0%
浏览 530

C#读取STL文件ASCII类型,记录的数组被后面的数据覆盖,每一项都变成了最后一次的数据

我能取出单个三角的四个数据(三个坐标(分别放在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;
        }

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-07-04 21:44
    关注

    while ((line = sr.ReadLine()) != null)
    下面加上
    triangle = new Triangle();

    否则都是同一个对象

    评论

报告相同问题?

悬赏问题

  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?