public static Mesh CreateQuadMesh(Mesh mesh, Point3f[] vertices, Color[] colors, int xStride, int yStride) { int xd = xStride; // The x-dimension of the data int yd = yStride; // They y-dimension of the data if (mesh.Faces.Count != (xStride - 2) * (yStride - 2)) { mesh = new Mesh(); mesh.Vertices.Capacity = vertices.Length; // Don't resize array mesh.Vertices.UseDoublePrecisionVertices = false; mesh.Vertices.AddVertices(vertices); for (int y = 1; y < yd - 1; y++) // Iterate over y dimension { for (int x = 1; x < xd - 1; x++) // Iterate over x dimension { int i = y * xd + x; int j = (y - 1) * xd + x; mesh.Faces.AddFace(j - 1, j, i, i - 1); } } } else { mesh.Vertices.UseDoublePrecisionVertices = false; unsafe { using (var meshAccess = mesh.GetUnsafeLock(true)) { int arrayLength; Point3f *points = meshAccess.VertexPoint3fArray(out arrayLength); for (int i = 0; i < arrayLength; i++) { points->Z = vertices[i].Z; points++; } mesh.ReleaseUnsafeLock(meshAccess); } } } if (colors.Length > 0) // Colors only provided if the mesh style permits { mesh.VertexColors.SetColors(colors); } return(mesh); }
public static extern unsafe int core_Mat_nGetPoint3f(IntPtr obj, int row, int col, Point3f *vals, int valsLength);