Beispiel #1
0
        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);
        }
Beispiel #2
0
        public static void ResetVertexPosition(ref double[] backupPos,ref NonManifoldMesh mesh)
        {
            if (backupPos == null)
                return;

            Copy(backupPos, mesh.VertexPos);
            mesh.ComputeDualPosition();
            mesh.ComputeFaceNormal();
            mesh.ComputeVertexNormal();
        }
Beispiel #3
0
        public static void ResetVertexPosition(ref double[] backupPos, ref NonManifoldMesh mesh)
        {
            if (backupPos == null)
            {
                return;
            }

            Copy(backupPos, mesh.VertexPos);
            mesh.ComputeDualPosition();
            mesh.ComputeFaceNormal();
            mesh.ComputeVertexNormal();
        }
Beispiel #4
0
        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;
        }