private void ConstructFaceNormal(MeshGeometry3D themesh, int faceindex) { Point3D centroid = Tools3D.ComputeTriangleCentroid(themesh, faceindex); Vector3D facenormal = Tools3D.ComputeTriangleNormal(themesh, faceindex); ConstructAnnotationArrow(centroid, facenormal, CONTAINERfacenormals); }
private void ConstructVertexNormalsMatchingFaceNormal(MeshGeometry3D themesh, int faceindex) { Vector3D facenormal = Tools3D.ComputeTriangleNormal(themesh, faceindex); ConstructAnnotationArrow(themesh.Positions[themesh.TriangleIndices[faceindex * 3]], facenormal, CONTAINERfacenormals); ConstructAnnotationArrow(themesh.Positions[themesh.TriangleIndices[faceindex * 3 + 1]], facenormal, CONTAINERfacenormals); ConstructAnnotationArrow(themesh.Positions[themesh.TriangleIndices[faceindex * 3 + 2]], facenormal, CONTAINERfacenormals); }
private void ConstructVertexNormalsForTwoFaceSituation(MeshGeometry3D themesh) { Vector3D facenormal0 = Tools3D.ComputeTriangleNormal(themesh, 0); Vector3D facenormal1 = Tools3D.ComputeTriangleNormal(themesh, 1); // The edge vertices (non-shared) use the face normal as-is ConstructAnnotationArrow(themesh.Positions[1], facenormal0, CONTAINERfacenormals); ConstructAnnotationArrow(themesh.Positions[3], facenormal1, CONTAINERfacenormals); // The shared vertices 0 and 2 use the average of the two normals. Vector3D normalavgd = (facenormal0 + facenormal1); normalavgd.Normalize(); ConstructAnnotationArrow(themesh.Positions[0], normalavgd, CONTAINERfacenormals); ConstructAnnotationArrow(themesh.Positions[2], normalavgd, CONTAINERfacenormals); }