Salome HOME
#16459 EDF 14133 - Complete Merge Nodes / Merge Elements operations
[modules/smesh.git] / src / StdMeshers / StdMeshers_QuadToTriaAdaptor.cxx
index 2e4ea50b8fb3effa05cc7ff8904de0bbbf3d0df4..a06fde4952fab068e6da774cedde2a2c3cc27fa9 100644 (file)
@@ -174,7 +174,7 @@ namespace
                PrmJ->GetNodeIndex( otherFaceNode ) >= 0 ))
           continue; // f is a base quadrangle
 
-        // check projections of face direction (baOFN) to triange normals (nI and nJ)
+        // check projections of face direction (baOFN) to triangle normals (nI and nJ)
         gp_Vec baOFN( base2, SMESH_TNodeXYZ( otherFaceNode ));
         if ( nI * baOFN > 0 && nJ * baOFN > 0 &&
              baI* baOFN > 0 && baJ* baOFN > 0 ) // issue 0023212
@@ -296,12 +296,13 @@ namespace
       SMESH_ComputeErrorPtr& err = sm->GetComputeError();
       if ( !err || err->IsOK() )
       {
-        err = SMESH_ComputeError::New( COMPERR_BAD_INPUT_MESH, msg, sm->GetAlgo() );
-        err->myBadElements.push_back( face1 );
-        err->myBadElements.push_back( face2 );
+        SMESH_BadInputElements* badElems =
+          new SMESH_BadInputElements( mesh.GetMeshDS(),COMPERR_BAD_INPUT_MESH, msg, sm->GetAlgo() );
+        badElems->add( face1 );
+        badElems->add( face2 );
+        err.reset( badElems );
       }
     }
-    //throw SALOME_Exception( msg.c_str() );
 
     return false; // == "algo fails"
   }
@@ -666,7 +667,7 @@ bool StdMeshers_QuadToTriaAdaptor::LimitHeight (gp_Pnt&
 
 //================================================================================
 /*!
- * \brief Prepare data for the given face
+ * \brief Retrieve data of the given face
  *  \param PN - coordinates of face nodes
  *  \param VN - cross products of vectors (PC-PN(i)) ^ (PC-PN(i+1))
  *  \param FNodes - face nodes
@@ -705,7 +706,8 @@ int StdMeshers_QuadToTriaAdaptor::Preparation(const SMDS_MeshElement*       face
   int nbp = 4;
 
   int j = 0;
-  for(i=1; i<4; i++) {
+  for ( i = 1; i < 4; i++ )
+  {
     j = i+1;
     for(; j<=4; j++) {
       if( PN(i).Distance(PN(j)) < 1.e-6 )
@@ -713,11 +715,10 @@ int StdMeshers_QuadToTriaAdaptor::Preparation(const SMDS_MeshElement*       face
     }
     if(j<=4) break;
   }
-  //int deg_num = IsDegenarate(PN);
-  //if(deg_num>0) {
+
   bool hasdeg = false;
-  if(i<4) {
-    //cout<<"find degeneration"<<endl;
+  if ( i < 4 )
+  {
     hasdeg = true;
     gp_Pnt Pdeg = PN(i);
 
@@ -728,7 +729,6 @@ int StdMeshers_QuadToTriaAdaptor::Preparation(const SMDS_MeshElement*       face
       gp_Pnt Ptmp(N->X(),N->Y(),N->Z());
       if(Pdeg.Distance(Ptmp)<1.e-6) {
         DegNode = N;
-        //DegNode = const_cast<SMDS_MeshNode*>(N);
         break;
       }
     }
@@ -748,6 +748,7 @@ int StdMeshers_QuadToTriaAdaptor::Preparation(const SMDS_MeshElement*       face
 
   PN.SetValue(nbp+1,PN(1));
   FNodes[nbp] = FNodes[0];
+
   // find normal direction
   gp_Vec V1(PC,PN(nbp));
   gp_Vec V2(PC,PN(1));
@@ -789,7 +790,6 @@ int StdMeshers_QuadToTriaAdaptor::Preparation(const SMDS_MeshElement*       face
     }
   }
 
-  //cout<<"  VNorm("<<VNorm.X()<<","<<VNorm.Y()<<","<<VNorm.Z()<<")"<<endl;
   return hasdeg ? DEGEN_QUAD : QUAD;
 }
 
@@ -1025,7 +1025,7 @@ bool StdMeshers_QuadToTriaAdaptor::Compute(SMESH_Mesh& aMesh)
 
   if ( !myElemSearcher )
     myElemSearcher = SMESH_MeshAlgos::GetElementSearcher( *meshDS );
-  SMESH_ElementSearcher* searcher = const_cast<SMESH_ElementSearcher*>(myElemSearcher);
+  SMESH_ElementSearcher* searcher = const_cast<SMESH_ElementSearcher*>( myElemSearcher );
   SMESHUtils::Deleter<SMESH_ElementSearcher>
     volSearcher( SMESH_MeshAlgos::GetElementSearcher( *meshDS ));
   vector< const SMDS_MeshElement* > suspectFaces, foundVolumes;
@@ -1035,7 +1035,7 @@ bool StdMeshers_QuadToTriaAdaptor::Compute(SMESH_Mesh& aMesh)
   vector<const SMDS_MeshNode*> FNodes(5);
   TColgp_SequenceOfPnt aContour;
 
-  SMDS_FaceIteratorPtr fIt = meshDS->facesIterator(/*idInceasingOrder=*/true);
+  SMDS_FaceIteratorPtr fIt = meshDS->facesIterator();
   while( fIt->more())
   {
     const SMDS_MeshElement* face = fIt->next();
@@ -1044,7 +1044,7 @@ bool StdMeshers_QuadToTriaAdaptor::Compute(SMESH_Mesh& aMesh)
     gp_Pnt PC;
     gp_Vec VNorm;
     const SMDS_MeshElement* volumes[2];
-    int what = Preparation(face, PN, VN, FNodes, PC, VNorm, volumes);
+    int what = Preparation( face, PN, VN, FNodes, PC, VNorm, volumes );
     if ( what == NOT_QUAD )
       continue;
     if ( volumes[0] && volumes[1] )
@@ -1163,7 +1163,7 @@ bool StdMeshers_QuadToTriaAdaptor::Compute(SMESH_Mesh& aMesh)
 
     if ( toFindVolumes && 0 ) // non-conformal mesh is not suitable for any mesher so far
     {
-      // there are volumes in the mesh, in a non-conformal mesh an neighbor
+      // there are volumes in the mesh, in a non-conformal mesh a neighbor
       // volume can be not found yet
       for ( int isRev = 0; isRev < 2; ++isRev )
       {
@@ -1192,7 +1192,7 @@ bool StdMeshers_QuadToTriaAdaptor::Compute(SMESH_Mesh& aMesh)
       gp_Pnt intP;
       for ( int isRev = 0; isRev < 2; ++isRev )
       {
-        if( !volumes[isRev] && HasIntersection(farPnt[isRev], PC, intP, aContour) )
+        if( !volumes[isRev] && HasIntersection( farPnt[isRev], PC, intP, aContour ))
         {
           double d = PC.Distance( intP );
           if ( d < dist2int[isRev] )