예제 #1
0
		/// <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);
			}
		}