public double v2FaceWVal(Mesh M, List <double> Vv, int i) { double fV = 0, fDist = 0, dists = 0; MeshFace f = M.Faces.GetFace(i); if (f.IsValid(M.Vertices.Count)) { Point3d fc = getFaceCenter(M, i); fDist = fc.DistanceTo(M.Vertices[f.A]); dists += fDist; fV += Vv[f.A] * fDist; fDist = fc.DistanceTo(M.Vertices[f.B]); dists += fDist; fV += Vv[f.B] * fDist; fDist = fc.DistanceTo(M.Vertices[f.C]); dists += fDist; fV += Vv[f.C] * fDist; if (f.IsQuad) { fDist = fc.DistanceTo(M.Vertices[f.D]); dists += fDist; fV += Vv[f.D] * fDist; } fV /= dists; } return(fV); }
private Mesh meshFromFace(Mesh M, List <int> fInd) { Mesh mOut = new Mesh(); for (int i = 0; i < fInd.Count; i++) { Mesh M1 = new Mesh(); MeshFace f = M.Faces.GetFace(fInd[i]); if (f.IsValid(M.Vertices.Count)) { M1.Vertices.Add(M.Vertices[f.A]); M1.Vertices.Add(M.Vertices[f.B]); M1.Vertices.Add(M.Vertices[f.C]); if (f.IsTriangle) { M1.Faces.AddFace(0, 1, 2); } else if (f.IsQuad) { M1.Vertices.Add(M.Vertices[f.D]); M1.Faces.AddFace(0, 1, 2, 3); } } mOut.Append(M1); } return(mOut); }
public Point3d getFaceCenter(Mesh M, int fInd) { MeshFace f = M.Faces[fInd]; Point3d c = new Point3d(); if (f.IsValid(M.Vertices.Count)) { c = Point3d.Add(c, (Point3d)M.Vertices[f.A]); c = Point3d.Add(c, (Point3d)M.Vertices[f.B]); c = Point3d.Add(c, (Point3d)M.Vertices[f.C]); if (f.IsQuad) { c = Point3d.Add(c, (Point3d)M.Vertices[f.D]); } } c /= f.IsQuad ? 4 : 3; return(c); }
public double v2FaceVal(Mesh M, List <double> Vv, int i) { double fV = 0; int count = 0; MeshFace f = M.Faces.GetFace(i); if (f.IsValid(M.Vertices.Count)) { fV += Vv[f.A]; fV += Vv[f.B]; fV += Vv[f.C]; count = 3; if (f.IsQuad) { fV += Vv[f.D]; count = 4; } fV /= count; } return(fV); }