/// <summary> /// 加载管理器和边框. /// </summary> static void LoadBinary(string path, GeomManager geomManager, List<Vector3> borderVertices) { FileStream fs = new FileStream(path, FileMode.Open); BinaryReader reader = new BinaryReader(fs); // 加载边框. borderVertices.Clear(); int count = reader.ReadInt32(); borderVertices.Capacity = count; for (int i = 0; i < count; ++i) { borderVertices.Add(reader.readVector3()); } // 加载顶点. Vertex.VertexIDGenerator.ReadBinary(reader); count = reader.ReadInt32(); for (int i = 0; i < count; ++i) { geomManager.CreateVertex(reader); } // 加载边. HalfEdge.HalfEdgeIDGenerator.ReadBinary(reader); List<Vertex> vertices = geomManager.AllVertices; Dictionary<int, HalfEdge> container = new Dictionary<int, HalfEdge>(); count = reader.ReadInt32(); for (int i = 0; i < count; ++i) { geomManager.CreateEdge(reader, vertices, container); } // 加载三角形. Triangle.TriangleIDGenerator.ReadBinary(reader); count = reader.ReadInt32(); for (int i = 0; i < count; ++i) { geomManager.CreateTriangle(reader, container); } // 加载障碍物. Obstacle.ObstacleIDGenerator.ReadBinary(reader); count = reader.ReadInt32(); for (int i = 0; i < count; ++i) { geomManager.CreateObstacle(reader, container); } // 加载边集. BorderSet.BorderSetIDGenerator.ReadBinary(reader); count = reader.ReadInt32(); for (int i = 0; i < count; ++i) { geomManager.CreateBorderSet(reader, container); } reader.Close(); fs.Close(); foreach (HalfEdge edge in container.Values) { geomManager.AddUnserializedEdge(edge); } }