[bos #24169] [CEA 24168] Error in AffectedElemGroupsInRegion

This commit is contained in:
eap 2021-04-23 14:10:04 +03:00
parent 2283860a0a
commit a11ec0f515
4 changed files with 10 additions and 5 deletions

View File

@ -1438,7 +1438,7 @@ int SMDS_Mesh::GetElementsByNodes(const std::vector<const SMDS_MeshNode *>& node
} }
foundElems.clear(); foundElems.clear();
if ( n0 ) if ( n0 && minNbInverse > 0 )
{ {
foundElems.reserve( minNbInverse ); foundElems.reserve( minNbInverse );
SMDS_ElemIteratorPtr eIt = n0->GetInverseElementIterator( type ); SMDS_ElemIteratorPtr eIt = n0->GetInverseElementIterator( type );

View File

@ -10241,6 +10241,7 @@ namespace // automatically find theAffectedElems for DoubleNodes()
if ( maxX < 0 ) if ( maxX < 0 )
{ {
_elems[0]->setIsMarked( false ); _elems[0]->setIsMarked( false );
if ( _elems[1] )
_elems[1]->setIsMarked( true ); _elems[1]->setIsMarked( true );
} }
} }
@ -10413,7 +10414,11 @@ namespace // automatically find theAffectedElems for DoubleNodes()
{ {
fissure.reserve( theElemsOrNodes.size() ); fissure.reserve( theElemsOrNodes.size() );
for ( ; elIt != theElemsOrNodes.end(); ++elIt ) for ( ; elIt != theElemsOrNodes.end(); ++elIt )
{
fissure.push_back( std::move( FissureBorder( *elIt, elemsByFacet ))); fissure.push_back( std::move( FissureBorder( *elIt, elemsByFacet )));
if ( !fissure.back()._elems[1] )
fissure.pop_back();
}
} }
if ( fissure.empty() ) if ( fissure.empty() )
return; return;
@ -10920,7 +10925,7 @@ namespace {
\brief Identify the elements that will be affected by node duplication (actual duplication is not performed). \brief Identify the elements that will be affected by node duplication (actual duplication is not performed).
This method is the first step of DoubleNodeElemGroupsInRegion. This method is the first step of DoubleNodeElemGroupsInRegion.
\param theElems - list of groups of elements (edges or faces) to be replicated \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 \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 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). (select elements with a gravity center on the side given by faces normals).

View File

@ -100,7 +100,7 @@ class SMESH_EXPORT SMESH_MesherHelper
* \brief Load nodes bound to face into a map of node columns * \brief Load nodes bound to face into a map of node columns
* \param theParam2ColumnMap - map of node columns to fill * \param theParam2ColumnMap - map of node columns to fill
* \param theFace - the face on which nodes are searched for * \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 * \param theMesh - the mesh containing nodes
* \retval bool - false if something is wrong * \retval bool - false if something is wrong
* *

View File

@ -6671,7 +6671,7 @@ SMESH_MeshEditor_i::DoubleNodeElemGroupsInRegion(const SMESH::ListOfGroups& theE
duplication is not performed. duplication is not performed.
This method is the first step of DoubleNodeElemGroupsInRegion. This method is the first step of DoubleNodeElemGroupsInRegion.
\param theElems - list of groups of elements (edges or faces) to be replicated \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 \param theShape - shape to detect affected elements (element which geometric center
located on or inside shape). located on or inside shape).
The replicated nodes should be associated to affected elements. The replicated nodes should be associated to affected elements.