-// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2019 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
}
else if ( theGroupName[0] ) // find/create a group of segments
{
- SMESH_Mesh::GroupIteratorPtr grpIt = myMesh->GetGroups();
- while ( !groupDS && grpIt->more() )
- {
- SMESH_Group* group = grpIt->next();
- if ( group->GetGroupDS()->GetType() == SMDSAbs_Edge &&
- strcmp( group->GetName(), theGroupName ) == 0 )
- {
- groupDS = dynamic_cast< SMESHDS_Group* >( group->GetGroupDS() );
- }
- }
+ // SMESH_Mesh::GroupIteratorPtr grpIt = myMesh->GetGroups();
+ // while ( !groupDS && grpIt->more() )
+ // {
+ // SMESH_Group* group = grpIt->next();
+ // if ( group->GetGroupDS()->GetType() == SMDSAbs_Edge &&
+ // strcmp( group->GetName(), theGroupName ) == 0 )
+ // {
+ // groupDS = dynamic_cast< SMESHDS_Group* >( group->GetGroupDS() );
+ // }
+ // }
if ( !groupDS )
{
SMESH::SMESH_Group_var groupVar = myMesh_i->CreateGroup( SMESH::EDGE, theGroupName );
//================================================================================
/*!
* \brief Create a slot of given width around given 1D elements lying on a triangle mesh.
- * The slot is consrtucted by cutting faces by cylindrical surfaces made
+ * The slot is constructed by cutting faces by cylindrical surfaces made
* around each segment. Segments are expected to be created by MakePolyLine().
* \return Edges located at the slot boundary
*/
SMESHDS_Mesh* meshDS = getMeshDS();
+ // get standalone face groups to be updated
+ std::vector< SMDS_MeshGroup* > faceGroups;
+ const std::set<SMESHDS_GroupBase*>& allGroups = meshDS->GetGroups();
+ std::set<SMESHDS_GroupBase*>::const_iterator grIt = allGroups.begin();
+ for ( ; grIt != allGroups.end(); ++grIt )
+ if ( const SMESHDS_Group* gr = dynamic_cast< const SMESHDS_Group* >( *grIt ))
+ if ( gr->GetType() == SMDSAbs_Face )
+ faceGroups.push_back( & const_cast< SMESHDS_Group* >( gr )->SMDSGroup() );
+
std::vector< SMESH_MeshAlgos::Edge > edges =
SMESH_MeshAlgos::MakeSlot( SMESH_Mesh_i::GetElements( theSegments, SMESH::EDGE ),
- theWidth, meshDS );
+ theWidth, meshDS, faceGroups );
resultEdges->length( edges.size() );
for ( size_t i = 0; i < edges.size(); ++i )