public static double[] ComputeDualLap(ref NonManifoldMesh mesh) { int vn = mesh.VertexCount; int fn = mesh.FaceCount; double[] dLap = new double[fn * 3]; mesh.ComputeDualPosition(); for (int i = 0, j = 0; i < fn; i++, j += 3) { Vector3D u = new Vector3D(mesh.DualVertexPos, j); Vector3D v1 = new Vector3D(mesh.DualVertexPos, mesh.AdjFF[i][0] * 3); Vector3D v2 = new Vector3D(mesh.DualVertexPos, mesh.AdjFF[i][1] * 3); Vector3D v3 = new Vector3D(mesh.DualVertexPos, mesh.AdjFF[i][2] * 3); Vector3D normal = ((v1 - v3).Cross(v2 - v3)).Normalize(); Matrix3D m = new Matrix3D(v1 - v3, v2 - v3, normal); Vector3D coord = m.Inverse() * (u - v3); //dLap[j] = coord.x; //dLap[j + 1] = coord.y; //dLap[j + 2] = coord.z; dLap[j] = normal.x * coord[2]; dLap[j + 1] = normal.x * coord[2]; dLap[j + 2] = normal.x * coord[2]; } return(dLap); }
public static void ResetVertexPosition(ref double[] backupPos,ref NonManifoldMesh mesh) { if (backupPos == null) return; Copy(backupPos, mesh.VertexPos); mesh.ComputeDualPosition(); mesh.ComputeFaceNormal(); mesh.ComputeVertexNormal(); }
public static void ResetVertexPosition(ref double[] backupPos, ref NonManifoldMesh mesh) { if (backupPos == null) { return; } Copy(backupPos, mesh.VertexPos); mesh.ComputeDualPosition(); mesh.ComputeFaceNormal(); mesh.ComputeVertexNormal(); }
public static double[] ComputeDualLap(ref NonManifoldMesh mesh) { int vn = mesh.VertexCount; int fn = mesh.FaceCount; double[] dLap = new double[fn * 3]; mesh.ComputeDualPosition(); for (int i = 0, j = 0; i < fn; i++, j += 3) { Vector3D u = new Vector3D(mesh.DualVertexPos, j); Vector3D v1 = new Vector3D(mesh.DualVertexPos, mesh.AdjFF[i][0] * 3); Vector3D v2 = new Vector3D(mesh.DualVertexPos, mesh.AdjFF[i][1] * 3); Vector3D v3 = new Vector3D(mesh.DualVertexPos, mesh.AdjFF[i][2] * 3); Vector3D normal = ((v1 - v3).Cross(v2 - v3)).Normalize(); Matrix3D m = new Matrix3D(v1 - v3, v2 - v3, normal); Vector3D coord = m.Inverse() * (u - v3); //dLap[j] = coord.x; //dLap[j + 1] = coord.y; //dLap[j + 2] = coord.z; dLap[j] = normal.x * coord[2]; dLap[j + 1] = normal.x * coord[2]; dLap[j + 2] = normal.x * coord[2]; } return dLap; }