示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }