Salome HOME
#19078 [CEA] Mesh Group - Group on filter
authoreap <eap@opencascade.com>
Fri, 8 May 2020 16:27:33 +0000 (19:27 +0300)
committereap <eap@opencascade.com>
Fri, 8 May 2020 16:32:46 +0000 (19:32 +0300)
 fix places where component name "GEOM" is used

src/PluginUtils/GeomSelectionTools.cxx
src/PluginUtils/GeomSelectionTools.h
src/SMESHFiltersSelection/SMESH_NumberFilter.cxx
src/SMESHGUI/SMESHGUI.cxx
src/SMESHGUI/SMESHGUI_FilterDlg.cxx
src/SMESH_I/SMESH_Filter_i.cxx
src/SMESH_I/SMESH_Gen_i_1.cxx
src/StdMeshersGUI/StdMeshersGUI_CartesianParamCreator.cxx
src/StdMeshersGUI/StdMeshersGUI_QuadrangleParamWdg.cxx

index 8e634b1f055b93b3975d2442402b5a1353a01ce4..6ef5b88b567158ea8ab39e005f3b67cc5ebce141 100644 (file)
@@ -28,6 +28,7 @@
 #include <SalomeApp_Application.h>
 #include <SUIT_Session.h>
 
+#include <GEOMBase.h>
 #include <GEOMImpl_Types.hxx>
 #include <GEOM_Client.hxx>
 #include <GEOM_wrap.hxx>
@@ -144,7 +145,8 @@ std::string GeomSelectionTools::getEntryOfObject(Handle(SALOME_InteractiveObject
  * @param entry the entry of the object
  * @return the name of the object
  */
-std::string GeomSelectionTools::getNameFromEntry(std::string entry){
+std::string GeomSelectionTools::getNameFromEntry(const std::string& entry)
+{
   std::string name = "";
   _PTR(SObject) aSO = SalomeApp_Application::getStudy()->FindObjectID(entry);
   if (aSO){
@@ -186,57 +188,38 @@ std::string GeomSelectionTools::getFirstSelectedComponentDataType()
  * Retrieve the shape type from the entry
  * @return the shape type from the entry, return TopAbs_SHAPE if the object does not define a shape or a group.
  */
-TopAbs_ShapeEnum GeomSelectionTools::entryToShapeType(std::string entry){
-//   MESSAGE("GeomSelectionTools::entryToShapeType"<<entry );
-  TopoDS_Shape S = TopoDS_Shape();
+TopAbs_ShapeEnum GeomSelectionTools::entryToShapeType(const std::string& entry)
+{
   TopAbs_ShapeEnum ShapeType = TopAbs_SHAPE;
-   _PTR(SObject) aSO = SalomeApp_Application::getStudy()->FindObjectID(entry);
-  if (aSO){
+  if ( _PTR(SObject) aSO = SalomeApp_Application::getStudy()->FindObjectID(entry))
+  {
     _PTR(SObject) aRefSObj;
-    GEOM::GEOM_Object_var aShape;
-    // MESSAGE("Got a SO");
-    // If selected object is a reference
-    if ( aSO->ReferencedObject( aRefSObj ))
+    if ( aSO->ReferencedObject( aRefSObj ))    // If selected object is a reference
       aSO = aRefSObj;
-    // MESSAGE("aSO->GetFatherComponent()->ComponentDataType(): " << aSO->GetFatherComponent()->ComponentDataType());
-    std::string aComponentType = aSO->GetFatherComponent()->ComponentDataType();
-    if (aComponentType == "GEOM" || aComponentType == "SHAPERSTUDY")
-      aShape = SMESH::SObjectToInterface<GEOM::GEOM_Object>(aSO);
-    if ( !aShape->_is_nil() ){
-      // MESSAGE("Got the Geom Object ");
-      // MESSAGE("Geom Object Type "<< aShape->GetType());
-      SalomeApp_Application* anApp = GetSalomeApplication();
-      if (anApp) {
-//         MESSAGE("Got Application");
-        Engines::EngineComponent_var component = anApp->lcc()->FindOrLoad_Component( "FactoryServer", aComponentType.c_str());
-        GEOM::GEOM_Gen_var _geomEngine = GEOM::GEOM_Gen::_narrow(component);
-//         MESSAGE("Got GEOM engine");
-        // if the Geom Object is a group
-        if (aShape->GetType() == GEOM_GROUP){
-//           MESSAGE("It's a group");
-          GEOM::GEOM_IGroupOperations_wrap aGroupOp =
-            _geomEngine->GetIGroupOperations();
-          ShapeType= (TopAbs_ShapeEnum)aGroupOp->GetType(aShape);
-        }
-        // if not
-        else {
-          GEOM_Client* aClient = new GEOM_Client();
-          if ( aClient && !_geomEngine->_is_nil() ) {
-//             MESSAGE("GEOM client is OK and GEOM engine is not null");
-            S = aClient->GetShape( _geomEngine, aShape );
-            ShapeType=S.ShapeType();
-            if ( ShapeType == TopAbs_COMPOUND )
-            {
-              TopoDS_Iterator it( S );
-              if ( it.More() )
-                ShapeType = it.Value().ShapeType();
-            }
-          }
+    GEOM::GEOM_Object_var aShape = SMESH::SObjectToInterface<GEOM::GEOM_Object>(aSO);
+    if ( !aShape->_is_nil() )
+    {
+      ShapeType= (TopAbs_ShapeEnum)aShape->GetShapeType();
+      // if the Geom Object is a group
+      if (aShape->GetType() == GEOM_GROUP)
+      {
+        GEOM::GEOM_Gen_var _geomEngine = aShape->GetGen();
+        GEOM::GEOM_IGroupOperations_wrap aGroupOp = _geomEngine->GetIGroupOperations();
+        ShapeType= (TopAbs_ShapeEnum)aGroupOp->GetType(aShape);
+      }
+      // if not
+      else if ( ShapeType == TopAbs_COMPOUND )
+      {
+        TopoDS_Shape shape;
+        if (GEOMBase::GetShape(aShape, shape))
+        {
+          TopoDS_Iterator it( shape );
+          if ( it.More() )
+            ShapeType = it.Value().ShapeType();
         }
       }
     }
   }
-//   MESSAGE("ShapeType returned is " << ShapeType);
   return ShapeType;
 }
 
@@ -246,9 +229,8 @@ TopAbs_ShapeEnum GeomSelectionTools::entryToShapeType(std::string entry){
  */
 TopAbs_ShapeEnum GeomSelectionTools:: getFirstSelectedShapeType()
 {
- Handle(SALOME_InteractiveObject) anIO;
- anIO=GeomSelectionTools::getFirstSelectedSalomeObject();
- return entryToShapeType(anIO->getEntry());
+  Handle(SALOME_InteractiveObject) anIO=GeomSelectionTools::getFirstSelectedSalomeObject();
+  return entryToShapeType(anIO->getEntry());
 }
 
 /*!
index d0e2c9b6e527c2fe4be538a208ea99e03c951e29..6228f3492654f442c510898f8ca16132ca6a2698 100644 (file)
@@ -58,10 +58,10 @@ public:
   Handle(SALOME_InteractiveObject) getFirstSelectedSalomeObject();
   std::string getFirstSelectedEntry();
   std::string getEntryOfObject(Handle(SALOME_InteractiveObject));
-  std::string getNameFromEntry(std::string);
+  std::string getNameFromEntry(const std::string& );
   std::string getFirstSelectedComponentDataType();
   TopAbs_ShapeEnum getFirstSelectedShapeType();
-  TopAbs_ShapeEnum entryToShapeType(std::string );
+  TopAbs_ShapeEnum entryToShapeType(const std::string& );
   GeomAbs_SurfaceType getFaceInformation(TopoDS_Shape);
 };
 
index 9a11b1b2bbaa054fe7990172c841a59b6358f06f..e5d480e35520b8650847e86d54e0fcb0e4a63b31 100644 (file)
@@ -107,17 +107,14 @@ bool SMESH_NumberFilter::isOk (const SUIT_DataOwner* theDataOwner) const
     return false;
 
   // Get GEOM engine
-  Engines::EngineComponent_var comp =
-    SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
-  GEOM::GEOM_Gen_var geomEngine = GEOM::GEOM_Gen::_narrow( comp );
-  if ( CORBA::is_nil( geomEngine ) )
+  GEOM::GEOM_Gen_var geomEngine = aGeomObj->GetGen();
+  if ( CORBA::is_nil( geomEngine ))
     return false;
 
   // Get shape from geom object and verify its parameters
   GEOM_Client aGeomClient;
   TopoDS_Shape aShape = aGeomClient.GetShape(geomEngine.in(), aGeomObj);
-  if (aShape.IsNull() ||
-      !myShapeTypes.Contains(aShape.ShapeType()))
+  if (aShape.IsNull() || !myShapeTypes.Contains(aShape.ShapeType()))
     return false;
 
   if (myIsClosedOnly && aShape.ShapeType() == TopAbs_SHELL && !aShape.Closed())
@@ -129,16 +126,11 @@ bool SMESH_NumberFilter::isOk (const SUIT_DataOwner* theDataOwner) const
     if (aMainShape.IsNull())
       return false;
 
-    bool isFound = false;
-    TopAbs_ShapeEnum aShapeType = aShape.ShapeType();
-    TopExp_Explorer anExp (aMainShape, aShapeType);
-    for (; anExp.More(); anExp.Next()) {
-      if (anExp.Current() == aShape) {
-        isFound = true;
+    TopExp_Explorer anExp (aMainShape, aShape.ShapeType());
+    for (; anExp.More(); anExp.Next())
+      if (anExp.Current() == aShape)
         break;
-      }
-    }
-    if (!isFound)
+    if (!anExp.More())
       return false;
   }
 
index b4bba728b4c23385e3ec64abac78ef7036d7d83c..28862787daa3b8614bb156b8678091824669913e 100644 (file)
 
 #include "SMESH_version.h"
 
-#include "SMESH_ControlsDef.hxx"
 #include "SMESH_Actor.h"
 #include "SMESH_ActorUtils.h"
 #include "SMESH_Client.hxx"
+#include "SMESH_Comment.hxx"
+#include "SMESH_ControlsDef.hxx"
 #include "SMESH_ScalarBarActor.h"
-#include <SMESH_Comment.hxx>
 #include "SMESH_TypeFilter.hxx"
 
 // SALOME GUI includes
@@ -5068,8 +5068,9 @@ bool SMESHGUI::isSelectionCompatible()
   SALOME_ListIteratorOfListIO It( selected );
   for ( ; isCompatible && It.More(); It.Next())
     isCompatible =
-      ( strcmp("GEOM", It.Value()->getComponentDataType()) == 0 ) ||
-      ( strcmp("SMESH", It.Value()->getComponentDataType()) == 0 );
+      ( strcmp("GEOM",        It.Value()->getComponentDataType()) == 0 ) ||
+      ( strcmp("SHAPERSTUDY", It.Value()->getComponentDataType()) == 0 ) ||
+      ( strcmp("SMESH",       It.Value()->getComponentDataType()) == 0 );
 
   return isCompatible;
 }
@@ -6332,8 +6333,6 @@ void SMESHGUI::restoreVisualParameters (int savePoint)
 
   // componentName is used for encoding of entries when storing them in IParameters
   std::string componentName = myComponentSMESH->ComponentDataType();
-  //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
-  //if (!aSComponent) return;
 
   // IParameters
   _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
index 2fe2548d4e1abf346b82f91b8563a13d36e0924d..5d7f16093eef3261faa7071b1484c2efe8d0ff45 100644 (file)
@@ -3203,6 +3203,8 @@ bool SMESHGUI_FilterDlg::isValid() const
       myTable->GetThreshold(i, aName);
 
       std::vector<_PTR(SObject)> aList = SMESH::getStudy()->FindObjectByName(aName.toUtf8().constData(), "GEOM");
+      if (aList.size() == 0)
+        aList = SMESH::getStudy()->FindObjectByName(aName.toUtf8().constData(), "SHAPERSTUDY");
       if (aList.size() == 0) {
         SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"),
                                      tr("BAD_SHAPE_NAME").arg(aName));
index e354fe87289f9c17f56f344d65899fc36b880ac7..ae97ce1c664fd6f444e9127a111055f543ae2a02 100644 (file)
@@ -137,6 +137,8 @@ static TopoDS_Shape getShapeByName( const char* theName )
   {
     SMESH_Gen_i* aSMESHGen     = SMESH_Gen_i::GetSMESHGen();
     SALOMEDS::Study::ListOfSObject_var aList = SMESH_Gen_i::getStudyServant()->FindObjectByName( theName, "GEOM" );
+    if ( aList->length() == 0 )
+      aList = SMESH_Gen_i::getStudyServant()->FindObjectByName( theName, "SHAPERSTUDY" );
     if ( aList->length() > 0 )
     {
       CORBA::Object_var        anObj = aList[ 0 ]->GetObject();
index 94df9beb3b21a299ca327ba8126adac5dadf510d..4c78e23167b83c632d3dcaf13a2b4473ef68c776 100644 (file)
@@ -196,10 +196,15 @@ bool SMESH_Gen_i::CanPublishInStudy(CORBA::Object_ptr theIOR)
 SALOMEDS::SObject_ptr SMESH_Gen_i::ObjectToSObject(CORBA::Object_ptr theObject)
 {
   SALOMEDS::SObject_wrap aSO;
-  if ( !CORBA::is_nil( theObject ))
+  try {
+    if ( !CORBA::is_nil( theObject ))
+    {
+      CORBA::String_var objStr = SMESH_Gen_i::GetORB()->object_to_string( theObject );
+      aSO = getStudyServant()->FindObjectIOR( objStr.in() );
+    }
+  }
+  catch (...)
   {
-    CORBA::String_var objStr = SMESH_Gen_i::GetORB()->object_to_string( theObject );
-    aSO = getStudyServant()->FindObjectIOR( objStr.in() );
   }
   return aSO._retn();
 }
index e08e9e150aed023e563212846c3b6654e1139c73..a1a4f6712115b8720671cd5392e04e57c44319c8 100644 (file)
@@ -955,9 +955,7 @@ QFrame* StdMeshersGUI_CartesianParamCreator::buildFrame()
   if ( !shapeEntry.isEmpty() )
   {
     // find origin
-    Handle(SALOME_InteractiveObject) io =
-      new SALOME_InteractiveObject( shapeEntry.toStdString().c_str(), "GEOM" );
-    GEOM::GEOM_Object_var geomObj = SMESH::IObjectToInterface<GEOM::GEOM_Object>( io );
+    GEOM::GEOM_Object_var geomObj = SMESH::EntryToInterface<GEOM::GEOM_Object>( shapeEntry );
     if ( GEOMBase::GetShape( geomObj, shape ) && !shape.IsNull())
     {
       Bnd_Box box;
@@ -1394,9 +1392,7 @@ void StdMeshersGUI_CartesianParamCreator::onOptimalAxes(bool)
   if ( shapeEntry.isEmpty() )
     return;
 
-  Handle(SALOME_InteractiveObject) io =
-    new SALOME_InteractiveObject( shapeEntry.toStdString().c_str(), "GEOM" );
-  GEOM::GEOM_Object_var geomObj = SMESH::IObjectToInterface<GEOM::GEOM_Object>( io );
+  GEOM::GEOM_Object_var geomObj = SMESH::EntryToInterface<GEOM::GEOM_Object>( shapeEntry );
   if ( geomObj->_is_nil() )
     return;
 
index aa04fa8c4278f4ec3f6a6ec0f6d30c7123ba5c4e..c6905e049046f568f07a47631a574c999fdc5392 100644 (file)
@@ -288,9 +288,7 @@ QString  StdMeshersGUI_QuadrangleParamCreator::storeParams() const
   {
     QListWidgetItem* item = myShapesList->item(i);
     QString         entry = item->data( Qt::UserRole ).toString();
-    Handle(SALOME_InteractiveObject) io =
-      new SALOME_InteractiveObject( entry.toStdString().c_str(), "GEOM" );
-    GEOM::GEOM_Object_var go = GEOMBase::ConvertIOinGEOMObject( io );
+    GEOM::GEOM_Object_var go = SMESH::EntryToInterface<GEOM::GEOM_Object>( entry );
     if ( !go->_is_nil() )
       goList[ nbShapes++ ] = go;
   }