PAL9163. Fix GetFaceNormal() for badly shaped quadrangles

This commit is contained in:
eap 2005-06-14 10:19:12 +00:00
parent 2a39de2aeb
commit 5467bb25d4

View File

@ -536,6 +536,15 @@ bool SMDS_VolumeTool::GetFaceNormal (int faceIndex, double & X, double & Y, doub
XYZ aVec13( p3 - p1 ); XYZ aVec13( p3 - p1 );
XYZ cross = aVec12.Crossed( aVec13 ); XYZ cross = aVec12.Crossed( aVec13 );
if ( myFaceNbNodes[ faceIndex ] == 4 ) {
XYZ p4 ( myFaceNodes[3] );
XYZ aVec14( p4 - p1 );
XYZ cross2 = aVec13.Crossed( aVec14 );
cross.x += cross2.x;
cross.y += cross2.y;
cross.z += cross2.z;
}
double size = cross.Magnitude(); double size = cross.Magnitude();
if ( size <= DBL_MIN ) if ( size <= DBL_MIN )
return false; return false;
@ -952,8 +961,9 @@ bool SMDS_VolumeTool::setFace( int faceIndex )
// set face nodes // set face nodes
myFaceNodes = new const SMDS_MeshNode* [myFaceNbNodes + 1]; myFaceNodes = new const SMDS_MeshNode* [myFaceNbNodes + 1];
for ( int iNode = 0; iNode <= myFaceNbNodes; iNode++ ) for ( int iNode = 0; iNode < myFaceNbNodes; iNode++ )
myFaceNodes[ iNode ] = myVolumeNodes[ myFaceNodeIndices[ iNode ]]; myFaceNodes[ iNode ] = myVolumeNodes[ myFaceNodeIndices[ iNode ]];
myFaceNodes[ myFaceNbNodes ] = myFaceNodes[ 0 ];
} }
myCurFace = faceIndex; myCurFace = faceIndex;