Salome HOME
Regression of SMESH_TEST/Grids/smesh/mesh_Quadratic/B6
authoreap <eap@opencascade.com>
Thu, 19 Apr 2012 14:43:20 +0000 (14:43 +0000)
committereap <eap@opencascade.com>
Thu, 19 Apr 2012 14:43:20 +0000 (14:43 +0000)
fix GetFaceNormal() for quadratic volumes

src/SMDS/SMDS_VolumeTool.cxx

index eb8443aae4e47cec2bba3d72e3cc7f511d52d16c..841d2354078e16761d4f199c4c189b93391d6c91 100644 (file)
@@ -1017,16 +1017,16 @@ bool SMDS_VolumeTool::GetFaceNormal (int faceIndex, double & X, double & Y, doub
   if ( !setFace( faceIndex ))
     return false;
 
-  XYZ p1 ( myFaceNodes[0] );
-  XYZ p2 ( myFaceNodes[1] );
-  XYZ p3 ( myFaceNodes[2] );
+  const int iQuad = ( myFaceNbNodes > 6 && !myPolyedre ) ? 2 : 1;
+  XYZ p1 ( myFaceNodes[0*iQuad] );
+  XYZ p2 ( myFaceNodes[1*iQuad] );
+  XYZ p3 ( myFaceNodes[2*iQuad] );
   XYZ aVec12( p2 - p1 );
   XYZ aVec13( p3 - p1 );
   XYZ cross = aVec12.Crossed( aVec13 );
 
-  //if ( myFaceNbNodes == 4 ) {
-  if ( myFaceNbNodes >3 ) {
-    XYZ p4 ( myFaceNodes[3] );
+  if ( myFaceNbNodes >3*iQuad ) {
+    XYZ p4 ( myFaceNodes[3*iQuad] );
     XYZ aVec14( p4 - p1 );
     XYZ cross2 = aVec13.Crossed( aVec14 );
     cross = cross + cross2;