X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FSMESH_I%2FSMESH_Gen_i.cxx;h=cfc7c95b5185cb14e657b636cfb357974db1aace;hb=dacd89c7dfc779f4a8249ff08ca15f7b963408a5;hp=b255d468e476aa93a221bc5259cd810f380ea920;hpb=f4ffdc72f1381ce1cacca10a96f75e588683524e;p=modules%2Fsmesh.git diff --git a/src/SMESH_I/SMESH_Gen_i.cxx b/src/SMESH_I/SMESH_Gen_i.cxx index b255d468e..cfc7c95b5 100644 --- a/src/SMESH_I/SMESH_Gen_i.cxx +++ b/src/SMESH_I/SMESH_Gen_i.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2021 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2022 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 @@ -2613,28 +2613,31 @@ SMESH_Gen_i::ConcatenateCommon(const SMESH::ListOfIDSources& theMeshesArray, // copy elements - SMESH::array_of_ElementType_var srcElemTypes = theMeshesArray[i]->GetTypes(); - if ( srcElemTypes->length() == 1 && srcElemTypes[0] == SMESH::NODE ) // group of nodes - continue; std::vector< const SMDS_MeshElement* > newElems( initMeshDS->NbElements() + 1, 0 ); - elemIt = initImpl->GetElements( theMeshesArray[i], SMESH::ALL ); - while ( elemIt->more() ) + SMESH::array_of_ElementType_var srcElemTypes = theMeshesArray[i]->GetTypes(); + bool hasElems = (( srcElemTypes->length() > 1 ) || + ( srcElemTypes->length() == 1 && srcElemTypes[0] != SMESH::NODE )); + if ( hasElems ) { - const SMDS_MeshElement* elem = elemIt->next(); - elemType.myNodes.resize( elem->NbNodes() ); - - SMDS_NodeIteratorPtr itNodes = elem->nodeIterator(); - for ( int k = 0; itNodes->more(); k++) + elemIt = initImpl->GetElements( theMeshesArray[i], SMESH::ALL ); + while ( elemIt->more() ) { - const SMDS_MeshNode* node = itNodes->next(); - elemType.myNodes[ k ] = static_cast< const SMDS_MeshNode*> ( newNodes[ node->GetID() ]); - } + const SMDS_MeshElement* elem = elemIt->next(); + elemType.myNodes.resize( elem->NbNodes() ); - // creates a corresponding element on existent nodes in new mesh - newElems[ elem->GetID() ] = - newEditor.AddElement( elemType.myNodes, elemType.Init( elem, /*basicOnly=*/false )); + SMDS_NodeIteratorPtr itNodes = elem->nodeIterator(); + for ( int k = 0; itNodes->more(); k++) + { + const SMDS_MeshNode* node = itNodes->next(); + elemType.myNodes[ k ] = static_cast< const SMDS_MeshNode*> ( newNodes[ node->GetID() ]); + } + + // creates a corresponding element on existent nodes in new mesh + newElems[ elem->GetID() ] = + newEditor.AddElement( elemType.myNodes, elemType.Init( elem, /*basicOnly=*/false )); + } + newEditor.ClearLastCreated(); // forget the history } - newEditor.ClearLastCreated(); // forget the history // create groups of just added elements