From a11ec0f515b86d30e1617e522a2294d3320cb3c7 Mon Sep 17 00:00:00 2001 From: eap Date: Fri, 23 Apr 2021 14:10:04 +0300 Subject: [PATCH] [bos #24169] [CEA 24168] Error in AffectedElemGroupsInRegion --- src/SMDS/SMDS_Mesh.cxx | 2 +- src/SMESH/SMESH_MeshEditor.cxx | 9 +++++++-- src/SMESH/SMESH_MesherHelper.hxx | 2 +- src/SMESH_I/SMESH_MeshEditor_i.cxx | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/SMDS/SMDS_Mesh.cxx b/src/SMDS/SMDS_Mesh.cxx index b01e7c9c4..eaaea6803 100644 --- a/src/SMDS/SMDS_Mesh.cxx +++ b/src/SMDS/SMDS_Mesh.cxx @@ -1438,7 +1438,7 @@ int SMDS_Mesh::GetElementsByNodes(const std::vector& node } foundElems.clear(); - if ( n0 ) + if ( n0 && minNbInverse > 0 ) { foundElems.reserve( minNbInverse ); SMDS_ElemIteratorPtr eIt = n0->GetInverseElementIterator( type ); diff --git a/src/SMESH/SMESH_MeshEditor.cxx b/src/SMESH/SMESH_MeshEditor.cxx index 0d5a0a91c..22695bac0 100644 --- a/src/SMESH/SMESH_MeshEditor.cxx +++ b/src/SMESH/SMESH_MeshEditor.cxx @@ -10241,7 +10241,8 @@ namespace // automatically find theAffectedElems for DoubleNodes() if ( maxX < 0 ) { _elems[0]->setIsMarked( false ); - _elems[1]->setIsMarked( true ); + if ( _elems[1] ) + _elems[1]->setIsMarked( true ); } } @@ -10413,7 +10414,11 @@ namespace // automatically find theAffectedElems for DoubleNodes() { fissure.reserve( theElemsOrNodes.size() ); for ( ; elIt != theElemsOrNodes.end(); ++elIt ) + { fissure.push_back( std::move( FissureBorder( *elIt, elemsByFacet ))); + if ( !fissure.back()._elems[1] ) + fissure.pop_back(); + } } if ( fissure.empty() ) return; @@ -10920,7 +10925,7 @@ namespace { \brief Identify the elements that will be affected by node duplication (actual duplication is not performed). This method is the first step of DoubleNodeElemGroupsInRegion. \param theElems - list of groups of elements (edges or faces) to be replicated - \param theNodesNot - list of groups of nodes not to replicated + \param theNodesNot - list of groups of nodes not to replicate \param theShape - shape to detect affected elements (element which geometric center located on or inside shape). If the shape is null, detection is done on faces orientations (select elements with a gravity center on the side given by faces normals). diff --git a/src/SMESH/SMESH_MesherHelper.hxx b/src/SMESH/SMESH_MesherHelper.hxx index 5950ec931..d48318877 100644 --- a/src/SMESH/SMESH_MesherHelper.hxx +++ b/src/SMESH/SMESH_MesherHelper.hxx @@ -100,7 +100,7 @@ class SMESH_EXPORT SMESH_MesherHelper * \brief Load nodes bound to face into a map of node columns * \param theParam2ColumnMap - map of node columns to fill * \param theFace - the face on which nodes are searched for - * \param theBaseSide - the edges holding nodes on which columns' bases + * \param theBaseSide - the edges holding nodes on which columns base * \param theMesh - the mesh containing nodes * \retval bool - false if something is wrong * diff --git a/src/SMESH_I/SMESH_MeshEditor_i.cxx b/src/SMESH_I/SMESH_MeshEditor_i.cxx index 14ed601a6..d96c5c99e 100644 --- a/src/SMESH_I/SMESH_MeshEditor_i.cxx +++ b/src/SMESH_I/SMESH_MeshEditor_i.cxx @@ -6671,7 +6671,7 @@ SMESH_MeshEditor_i::DoubleNodeElemGroupsInRegion(const SMESH::ListOfGroups& theE duplication is not performed. This method is the first step of DoubleNodeElemGroupsInRegion. \param theElems - list of groups of elements (edges or faces) to be replicated - \param theNodesNot - list of groups of nodes not to replicated + \param theNodesNot - list of groups of nodes not to replicate \param theShape - shape to detect affected elements (element which geometric center located on or inside shape). The replicated nodes should be associated to affected elements.