Salome HOME
Update of CheckDone
[modules/smesh.git] / src / PluginUtils / GeomSelectionTools.cxx
index 0a9be930932a69e3e95ac543e7661c1813c439b0..a24664c260b5e47ebb0fb7332b6c5ddd5b2062b3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -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>
 
 /*!
  * Constructor
- * @param aStudy pointer to the Study
  *
  */
-GeomSelectionTools::GeomSelectionTools(_PTR(Study) aStudy)
+GeomSelectionTools::GeomSelectionTools()
 {
-  myStudy = aStudy;
-}
-
-/*!
- * Accessor to the Study used by this GeomSelectionTools object
- * @return The study used by the GeomSelectionTools class
- */
-_PTR(Study) GeomSelectionTools::getMyStudy()
-{
-    return myStudy;
 }
 
 /*!
@@ -137,7 +127,7 @@ std::string GeomSelectionTools::getFirstSelectedEntry()
  */
 std::string GeomSelectionTools::getEntryOfObject(Handle(SALOME_InteractiveObject) anIO){
   std::string entry="";
-  _PTR(SObject) aSO = myStudy->FindObjectID(anIO->getEntry());
+  _PTR(SObject) aSO = SalomeApp_Application::getStudy()->FindObjectID(anIO->getEntry());
   if (aSO){
     _PTR(SObject) aRefSObj;
     // If selected object is a reference
@@ -155,9 +145,10 @@ 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 = myStudy->FindObjectID(entry);
+  _PTR(SObject) aSO = SalomeApp_Application::getStudy()->FindObjectID(entry);
   if (aSO){
     _PTR(SObject) aRefSObj;
     // If selected object is a reference
@@ -180,7 +171,7 @@ std::string GeomSelectionTools::getFirstSelectedComponentDataType()
   Handle(SALOME_InteractiveObject) anIO;
   std::string DataType="";
   anIO=GeomSelectionTools::getFirstSelectedSalomeObject();
-  _PTR(SObject) aSO = myStudy->FindObjectID(anIO->getEntry());
+  _PTR(SObject) aSO = SalomeApp_Application::getStudy()->FindObjectID(anIO->getEntry());
   if (aSO){
     _PTR(SObject) aRefSObj;
     // If selected object is a reference
@@ -197,56 +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 = myStudy->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());
-    if (  strcmp(aSO->GetFatherComponent()->ComponentDataType().c_str(),"GEOM") == 0)
-      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","GEOM" );
-        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(myStudy->StudyId());
-          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;
 }
 
@@ -256,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());
 }
 
 /*!