From c2a497190b48059c752b3e2019009aca3a00ee44 Mon Sep 17 00:00:00 2001 From: eap Date: Thu, 8 Aug 2013 12:34:43 +0000 Subject: [PATCH] 0022297: BR_new_bop3/Occdev_3f4689a163 => Faces are missing after an extrusion Fix IsFreeFace() for a polyhedron --- src/SMDS/SMDS_VolumeTool.cxx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/SMDS/SMDS_VolumeTool.cxx b/src/SMDS/SMDS_VolumeTool.cxx index 982942827..56e7a3132 100644 --- a/src/SMDS/SMDS_VolumeTool.cxx +++ b/src/SMDS/SMDS_VolumeTool.cxx @@ -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() ) { -- 2.39.2