mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-27 09:50:34 +05:00
23440: [CEA 2093] : Merge nodes failed (test case bug_1796_mergenodes)
This commit is contained in:
parent
3dcb8f1e04
commit
fb4363102c
@ -7458,8 +7458,8 @@ void SMESH_MeshEditor::MergeNodes (TListOfListOfNodes & theGroupsOfNodes,
|
|||||||
|
|
||||||
for ( size_t i = 0; i < newElemDefs.size(); ++i )
|
for ( size_t i = 0; i < newElemDefs.size(); ++i )
|
||||||
{
|
{
|
||||||
if ( i > 0 || !mesh->ChangeElementNodes( elem, &
|
if ( i > 0 || !mesh->ChangeElementNodes( elem,
|
||||||
newElemDefs[i].myNodes[0],
|
& newElemDefs[i].myNodes[0],
|
||||||
newElemDefs[i].myNodes.size() ))
|
newElemDefs[i].myNodes.size() ))
|
||||||
{
|
{
|
||||||
if ( i == 0 )
|
if ( i == 0 )
|
||||||
@ -7553,6 +7553,30 @@ bool SMESH_MeshEditor::applyMerge( const SMDS_MeshElement* elem,
|
|||||||
toRemove = true;
|
toRemove = true;
|
||||||
nbResElems = 0;
|
nbResElems = 0;
|
||||||
|
|
||||||
|
if ( elem->IsQuadratic() && newElemDefs[0].myType == SMDSAbs_Face && nbNodes > 6 )
|
||||||
|
{
|
||||||
|
// if corner nodes stick, remove medium nodes between them from uniqueNodes
|
||||||
|
int nbCorners = nbNodes / 2;
|
||||||
|
for ( int iCur = 0; iCur < nbCorners; ++iCur )
|
||||||
|
{
|
||||||
|
int iPrev = ( iCur + 1 ) % nbCorners;
|
||||||
|
if ( curNodes[ iCur ] == curNodes[ iPrev ] ) // corners stick
|
||||||
|
{
|
||||||
|
int iMedium = iCur + nbCorners;
|
||||||
|
vector< const SMDS_MeshNode* >::iterator i =
|
||||||
|
std::find( uniqueNodes.begin() + nbCorners - nbRepl,
|
||||||
|
uniqueNodes.end(),
|
||||||
|
curNodes[ iMedium ]);
|
||||||
|
if ( i != uniqueNodes.end() )
|
||||||
|
{
|
||||||
|
--nbUniqueNodes;
|
||||||
|
for ( ; i+1 != uniqueNodes.end(); ++i )
|
||||||
|
*i = *(i+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
switch ( entity )
|
switch ( entity )
|
||||||
{
|
{
|
||||||
case SMDSEntity_Polygon:
|
case SMDSEntity_Polygon:
|
||||||
@ -7670,11 +7694,9 @@ bool SMESH_MeshEditor::applyMerge( const SMDS_MeshElement* elem,
|
|||||||
// | |
|
// | |
|
||||||
// +---+---+
|
// +---+---+
|
||||||
// 0 7 3
|
// 0 7 3
|
||||||
if (( nbUniqueNodes == 6 && nbRepl == 2 ) &&
|
if ( nbUniqueNodes == 6 &&
|
||||||
(( iRepl[0] == 1 && iRepl[1] == 4 && curNodes[1] == curNodes[0] ) ||
|
iRepl[0] < 4 &&
|
||||||
( iRepl[0] == 2 && iRepl[1] == 5 && curNodes[2] == curNodes[1] ) ||
|
( nbRepl == 1 || iRepl[1] >= 4 ))
|
||||||
( iRepl[0] == 3 && iRepl[1] == 6 && curNodes[3] == curNodes[2] ) ||
|
|
||||||
( iRepl[0] == 3 && iRepl[1] == 7 && curNodes[3] == curNodes[0] )))
|
|
||||||
{
|
{
|
||||||
toRemove = false;
|
toRemove = false;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user