Salome HOME
#17096 [CEA 16891] SMesh::CopyMeshWithGeom : discrepeancies in copied groups volumes.
[modules/smesh.git] / src / SMESH_I / SMESH_Gen_i.cxx
index 09ea4c2fe85042e88438fff295d779bd485527a8..51c78a1306a1511d8cd03b14a7dbfc5e226d2996 100644 (file)
@@ -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