Salome HOME
#17096 [CEA 16891] SMesh::CopyMeshWithGeom : discrepeancies in copied groups volumes.
authoreap <eap@opencascade.com>
Thu, 11 Jul 2019 15:42:52 +0000 (18:42 +0300)
committereap <eap@opencascade.com>
Thu, 11 Jul 2019 15:42:52 +0000 (18:42 +0300)
src/SMESH_I/SMESH_Gen_i.cxx

index 09ea4c2..51c78a1 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
@@ -3294,6 +3299,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
      *        number of found IDs
      */