]> SALOME platform Git repositories - modules/smesh.git/commitdiff
Salome HOME
0022297: BR_new_bop3/Occdev_3f4689a163 => Faces are missing after an extrusion
authoreap <eap@opencascade.com>
Thu, 8 Aug 2013 12:34:43 +0000 (12:34 +0000)
committereap <eap@opencascade.com>
Thu, 8 Aug 2013 12:34:43 +0000 (12:34 +0000)
Fix IsFreeFace() for a polyhedron

src/SMDS/SMDS_VolumeTool.cxx

index 982942827e4894c135d20277b890179ff61fdc6c..56e7a31321a8652fa5cab03984cda43ae9ecdb69 100644 (file)
@@ -1507,17 +1507,21 @@ bool SMDS_VolumeTool::IsFreeFace( int faceIndex, const SMDS_MeshElement** otherV
   const SMDS_MeshNode** nodes = GetFaceNodes( faceIndex );
 
   // a set of facet nodes w/o medium ones and w/o nodes[0]
-  set< const SMDS_MeshNode* > nodeSet;
+  set< const SMDS_MeshElement* > nodeSet;
   const int di = myVolume->IsQuadratic() ? 2 : 1;
   for ( int i = di; i < myFaceNbNodes; i += di )
     nodeSet.insert( nodes[i] );
 
   SMDS_ElemIteratorPtr eIt = nodes[0]->GetInverseElementIterator( SMDSAbs_Volume );
+  SMDS_ElemIteratorPtr nIt;
   while ( eIt->more() ) {
     const SMDS_MeshElement* vol = eIt->next();
     if ( vol != myVolume ) {
       size_t nbShared = 0;
-      SMDS_NodeIteratorPtr nIt = vol->nodeIterator();
+      if ( const SMDS_VtkVolume* v = dynamic_cast< const SMDS_VtkVolume* >( vol ))
+        nIt = v->uniqueNodesIterator();
+      else
+        nIt = vol->nodesIterator();
       while ( nIt->more() )
         if (( nbShared += nodeSet.count( nIt->next() )) == nodeSet.size() )
         {