]> SALOME platform Git repositories - modules/smesh.git/commitdiff
Salome HOME
23605: [EDF] HYDRO: parent mesh for Copy mesh with new geometry
authoreap <eap@opencascade.com>
Wed, 17 Oct 2018 14:13:24 +0000 (17:13 +0300)
committereap <eap@opencascade.com>
Wed, 17 Oct 2018 14:13:24 +0000 (17:13 +0300)
23606: [EDF] HYDRO: Help for option Copy mesh with new geometry is absent

doc/salome/examples/creating_meshes_ex08.py
doc/salome/gui/SMESH/images/copy_mesh_dlg.png
doc/salome/gui/SMESH/input/copy_mesh.rst
src/SMESHFiltersSelection/SMESH_TypeFilter.hxx
src/SMESHGUI/SMESHGUI_CopyMeshDlg.cxx
src/SMESHGUI/SMESHGUI_CopyMeshDlg.h
src/SMESHGUI/SMESH_msg_en.ts
src/SMESH_I/SMESH_Gen_i.cxx

index 0cb4b229f54375aa01601e9d9bf1a6260e84d118..049aff6dda241b2554bcf4e284b87c1b9496bf3d 100644 (file)
@@ -45,3 +45,12 @@ newMesh = smesh.CopyMesh( mesh.GetIDSource( nodeIds, SMESH.NODE), "some nodes co
 
 # 6. copy a sub-mesh
 newMesh = smesh.CopyMesh( subMesh, "sub-mesh copy" )
+
+
+# make a new mesh with same hypotheses on a modified geometry
+
+smallBox = geompy.MakeScaleAlongAxes( box, None, 1, 0.5, 0.5 )
+cutBox = geompy.MakeCut( box, smallBox, theName="box - smallBox" )
+
+ok, newMesh, groups, submehses, hyps, invIDs = smesh.CopyMeshWithGeom( mesh, cutBox, "cutBox" )
+newMesh.Compute()
index c959e680f6f20123999988deef191927db99fd4c..97ca1cac7ad153d74e006363744a9dbf17d377da 100644 (file)
Binary files a/doc/salome/gui/SMESH/images/copy_mesh_dlg.png and b/doc/salome/gui/SMESH/images/copy_mesh_dlg.png differ
index 501352a005d23fef222af46aa4553c570679b882..1d1b975ebbc426015d6d3cb4effa910b6739cf8a 100644 (file)
@@ -41,7 +41,13 @@ In the dialog:
 
 * Click **Apply** or **Apply and Close** button to confirm the operation.
 
-When copying the mesh to the new geometry, it can happen that a sub-shape used to define a sub-mesh, group or hypotheses is not found in the new geometry. In this case a new object depending on the not found sub-shape is marked with red color in the Object Browser in order to allow identifying such objects and to fix them, either by modifying their definition or by removing. If a depending object is a group on geometry, a standalone group is created instead. You can't transform it to a group on geometry, it can only be removed and re-created anew.
+---------------------------------------------------
+Limitations of copying the mesh to the new geometry
+---------------------------------------------------
+
+It can happen that a sub-shape used to define a sub-mesh, group or hypotheses is not found in the new geometry. In this case a new object depending on the not found sub-shape is marked with red color in the Object Browser in order to allow identifying such objects and to fix them, either by modifying their definition or by removing. If a depending object is a group on geometry, a standalone group is created instead. You can't transform it to a group on geometry, it can only be removed and re-created anew.
+
+Empty standalone groups are not constructed.
 
 **See Also** a sample script of :ref:`tui_copy_mesh`.
 
index 85d99b6201cf7869a4c55649a6e3ce79c529d09c..f77372138f803ab260a89877ad44de0f64d4e66f 100644 (file)
@@ -39,6 +39,7 @@ public:
 
   virtual bool isOk (const SUIT_DataOwner*) const;
   SMESH::MeshObjectType type() const;
+  void setType( SMESH::MeshObjectType theType ) { myType = theType; }
 
 protected:
   SMESH::MeshObjectType myType;
index 1e6c7396cacbdceae2b285795a76beee41cfe443..385c283dcc5964806bff53c5d6fa723db787edf5 100644 (file)
@@ -351,7 +351,7 @@ QString SMESHGUI_CopyMeshDlg::getErrorMsg( SMESH::string_array_var theInvalidEnt
                                            QStringList &           theEntriesToBrowse )
 {
   if ( theInvalidEntries->length() == 0 )
-    return tr("SMESH_OPERATION_FAILED");
+    return tr("OPERATION_FAILED");
 
   // theInvalidEntries - SObject's that hold geometry objects whose
   // counterparts are not found in the newGeometry, followed by SObject's
@@ -509,7 +509,6 @@ bool SMESHGUI_CopyMeshDlg::ClickOnApply()
     anApp->browseObjects( anEntryList, toShowObjects );
 
   Init(false);
-  mySelectedObject = SMESH::SMESH_IDSource::_nil();
   SelectionIntoArgument();
 
   return true;
@@ -686,6 +685,16 @@ void SMESHGUI_CopyMeshDlg::SelectionIntoArgument()
     mySelectedObject = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO );
     if ( mySelectedObject->_is_nil() )
       return;
+
+    if ( isWithGeomMode() ) // only mesh selection allowed
+    {
+      myMesh = SMESH::SMESH_Mesh::_narrow( mySelectedObject );
+      if ( myMesh->_is_nil() )
+      {
+        myLineEditElements->setText("");
+        return;
+      }
+    }
   }
   else if ( !geom->_is_nil() )
   {
@@ -717,12 +726,10 @@ void SMESHGUI_CopyMeshDlg::SelectionIntoArgument()
   else if ( !geom->_is_nil() )
   {
     myGeomNameEdit->setText( aString );
-    ok = ok && !myLineEditElements->text().isEmpty();
   }
 
-  if ( ok && isWithGeomMode() && !myMesh->_is_nil() )
-    ok = myMesh->HasShapeToMesh();
-
+  if ( ok && isWithGeomMode() )
+    ok = ( !myMesh->_is_nil() && myMesh->HasShapeToMesh() && !myNewGeometry->_is_nil() );
 
   buttonOk->setEnabled(ok);
   buttonApply->setEnabled(ok);
index 2566e7aa66a6f0f7aa02dba05a372e5d01da0724..6939b1b13828a465a536cab79a97975ad93956d9 100644 (file)
@@ -44,13 +44,13 @@ class QLineEdit;
 class QPushButton;
 class QButtonGroup;
 
+class LightApp_SelectionMgr;
 class SMESHGUI;
-class SMESHGUI_IdValidator;
 class SMESHGUI_FilterDlg;
+class SMESHGUI_IdValidator;
 class SMESH_Actor;
+class SMESH_TypeFilter;
 class SVTK_Selector;
-class LightApp_SelectionMgr;
-class SUIT_SelectionFilter;
 
 //=================================================================================
 // class    : SMESHGUI_CopyMeshDlg
@@ -90,7 +90,7 @@ private:
   SMESH::SMESH_Mesh_var  myMesh;
   GEOM::GEOM_Object_var  myNewGeometry;
   SMESH_Actor*           myActor;
-  SUIT_SelectionFilter*  myIdSourceFilter;
+  SMESH_TypeFilter*      myIdSourceFilter;
 
   SMESH::SMESH_IDSource_var mySelectedObject;
 
index ab98955dd5f3b9dd6f0953be3d09ca3b90d39a17..29d0401f04dd24ea7c69a06acc77146195b5b4dd 100644 (file)
@@ -8089,6 +8089,10 @@ as they are of improper type:
         <source>COPY_ELEMENTS</source>
         <translation>Copy Mesh Elements</translation>
     </message>
+    <message>
+        <source>OPERATION_FAILED</source>
+        <translation>Not all mesh sub-objects have been copied</translation>
+    </message>
     <message>
         <source>SUBSHAPES_NOT_FOUND_MSG</source>
         <translation>
index 2e3753f733f33d0e960e7e0bc5792686e84f16a7..fa2034183ffe30b7fc70928b1d5b5f0b4f617204 100644 (file)
@@ -3160,8 +3160,12 @@ namespace // utils for CopyMeshWithGeom()
 
       if ( 0 < oldID && oldID < (int)myGIPMap->length() )
       {
-        if ( myGIPMap[ oldID ].length() == 1 )
+        if (( myGIPMap[ oldID ].length() == 1 ) ||
+            ( myGIPMap[ oldID ].length() > 1 &&
+              getShapeType( mySrcMesh_i, oldID ) == TopAbs_VERTEX ))
+        {
           newID = myGIPMap[ oldID ][ 0 ];
+        }
       }
       return newID;
     }
@@ -3573,9 +3577,9 @@ throw ( SALOME::SALOME_Exception )
 
 
   // copy mesh elements, keeping IDs
+  SMESHDS_Mesh* newMeshDS = newMesh_i->GetImpl().GetMeshDS();
   if ( theToCopyElements && theSourceMesh->NbNodes() > 0 )
   {
-    SMESHDS_Mesh* newMeshDS = newMesh_i->GetImpl().GetMeshDS();
     ::SMESH_MeshEditor editor( &newMesh_i->GetImpl() );
     ::SMESH_MeshEditor::ElemFeatures elemData;
 
@@ -3656,12 +3660,19 @@ throw ( SALOME::SALOME_Exception )
 
     if ( !stdlGroup->_is_nil() )
     {
-      if ( theToCopyElements )
+      if ( newMeshDS->GetMeshInfo().NbElements( SMDSAbs_ElementType( elemType )) > 0 )
       {
         SMESH::long_array_var elemIDs = stdlGroup->GetIDs();
-        stdlGroup = theNewMesh->CreateGroup( elemType, name );
-        stdlGroup->Add( elemIDs );
-        newGroup = SMESH::SMESH_GroupBase::_narrow( stdlGroup );
+        CORBA::ULong iE = 0;
+        for ( ; iE < elemIDs->length(); ++iE ) // check if elements have been copied
+          if ( newMeshDS->GetElementType( elemIDs[ iE ], elemType != SMESH::NODE ))
+            break;
+        if ( iE < elemIDs->length() )
+        {
+          stdlGroup = theNewMesh->CreateGroup( elemType, name );
+          stdlGroup->Add( elemIDs );
+          newGroup = SMESH::SMESH_GroupBase::_narrow( stdlGroup );
+        }
       }
     }
     else if ( !geomGroup->_is_nil() )
@@ -3776,7 +3787,7 @@ throw ( SALOME::SALOME_Exception )
     SALOMEDS::SObject_wrap newSO = ObjectToSObject( study, newGroup );
     if ( !srcSO->_is_nil() )
     {
-      CORBA::String_var srcID, newID;
+      CORBA::String_var srcID, newID("");
       srcID = srcSO->GetID();
       if ( !newSO->_is_nil() )
         newID = newSO->GetID();