/// <summary> /// Adds a rectangular mesh defined by a two-dimensional arrary of points. /// </summary> /// <param name="points"> /// The points. /// </param> /// <param name="texCoords"> /// The texture coordinates (optional). /// </param> /// <param name="closed0"> /// set to <c>true</c> if the mesh is closed in the 1st dimension. /// </param> /// <param name="closed1"> /// set to <c>true</c> if the mesh is closed in the 2nd dimension. /// </param> public void AddRectangularMesh(Point3D[,] points, Point[,] texCoords = null, bool closed0 = false, bool closed1 = false) { if (points == null) { throw new ArgumentNullException("points"); } int rows = points.GetUpperBound(0) + 1; int columns = points.GetUpperBound(1) + 1; int index0 = this.positions.Count; for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { this.positions.Add(points[i, j]); } } this.AddRectangularMeshTriangleIndices(index0, rows, columns, closed0, closed1); if (this.normals != null) { this.AddRectangularMeshNormals(index0, rows, columns); } if (this.textureCoordinates != null) { if (texCoords != null) { for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { this.textureCoordinates.Add(texCoords[i, j]); } } } else { this.AddRectangularMeshTextureCoordinates(rows, columns); } } }