From bb1e4b11d8f1c4b90fe7b2c9c59a65c1d30c37f4 Mon Sep 17 00:00:00 2001 From: eap Date: Thu, 11 Jul 2019 18:42:52 +0300 Subject: [PATCH] #17096 [CEA 16891] SMesh::CopyMeshWithGeom : discrepeancies in copied groups volumes. --- src/SMESH_I/SMESH_Gen_i.cxx | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/SMESH_I/SMESH_Gen_i.cxx b/src/SMESH_I/SMESH_Gen_i.cxx index 09ea4c2fe..51c78a130 100644 --- a/src/SMESH_I/SMESH_Gen_i.cxx +++ b/src/SMESH_I/SMESH_Gen_i.cxx @@ -3109,6 +3109,11 @@ namespace // utils for CopyMeshWithGeom() { findNewIDs( oldIndices[i], newIndices ); } + if ( newIndices.size() < oldIndices->length() ) // issue #17096 + { + newIndices.clear(); + newShape = getInPlace( oldShape ); + } if ( !newIndices.empty() ) { try @@ -3292,6 +3297,27 @@ namespace // utils for CopyMeshWithGeom() } } + //================================================================================ + /*! + * \brief Get new sub-shape by calling GetInPlace() + */ + GEOM::GEOM_Object_ptr getInPlace( GEOM::GEOM_Object_ptr oldShape ) + { + GEOM::GEOM_Object_var newShape; + + GEOM::GEOM_Object_var mainShapeNew = myNewMesh_i->GetShapeToMesh(); + GEOM::GEOM_Gen_var geomGen = myGen_i->GetGeomEngine(); + GEOM::GEOM_IShapesOperations_wrap op = geomGen->GetIShapesOperations(); + try + { + newShape = op->GetInPlace( mainShapeNew, oldShape ); + } + catch( ... ) + { + } + return newShape._retn(); + } + //================================================================================ /*! * \brief Find a new sub-shape indices by an old one in myGIPMap. Return -- 2.30.2