Salome HOME
bos #29469: Advanced geometry features: Detect type of shape
[modules/geom.git] / src / GEOM_I / GEOM_BaseObject_i.cc
index f63c3c5e89a290e6dd39c359c8f7cb071bdb24f5..0a9bd821734d0303bc77c7ac4de2b7a3ae89c92e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2014  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2022  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -51,7 +51,7 @@
 
 GEOM_BaseObject_i::GEOM_BaseObject_i (PortableServer::POA_ptr thePOA,
                                       GEOM::GEOM_Gen_ptr      theEngine,
-                                      Handle(GEOM_BaseObject) theImpl)
+                                      Handle(::GEOM_BaseObject) theImpl)
   : SALOME::GenericObj_i( thePOA ), _engine(theEngine), _impl(theImpl)
 {
 }
@@ -64,7 +64,7 @@ GEOM_BaseObject_i::GEOM_BaseObject_i (PortableServer::POA_ptr thePOA,
 
 GEOM_BaseObject_i::~GEOM_BaseObject_i()
 {
-  MESSAGE("GEOM_BaseObject_i::~GEOM_BaseObject_i");
+  //MESSAGE("GEOM_BaseObject_i::~GEOM_BaseObject_i");
   GEOM_Engine::GetEngine()->RemoveObject(_impl);
 }
 
@@ -83,17 +83,6 @@ char* GEOM_BaseObject_i::GetEntry()
   return CORBA::string_dup(anEntstr);
 }
 
-//=============================================================================
-/*!
- *  GetStudyID
- */
-//=============================================================================
-
-CORBA::Long GEOM_BaseObject_i::GetStudyID()
-{
-   return _impl->GetDocID();
-}
-
 //=============================================================================
 /*!
  *  GetType
@@ -181,10 +170,10 @@ GEOM::ListOfGBO* GEOM_BaseObject_i::GetDependency()
   TCollection_AsciiString anEntry;
 
   for (int i = 1; i<=aLength; i++) {
-    Handle(GEOM_BaseObject) anObj = Handle(GEOM_BaseObject)::DownCast(aSeq->Value(i));
+    Handle(::GEOM_BaseObject) anObj = Handle(::GEOM_BaseObject)::DownCast(aSeq->Value(i));
     if (anObj.IsNull()) continue;
     TDF_Tool::Entry(anObj->GetEntry(), anEntry);
-    GEOM::GEOM_BaseObject_var obj = _engine->GetObject(anObj->GetDocID(), (char*) anEntry.ToCString());
+    GEOM::GEOM_BaseObject_var obj = _engine->GetObject((char*) anEntry.ToCString());
     aList[i-1] = obj;
   }
 
@@ -211,10 +200,9 @@ GEOM::ListOfGBO* GEOM_BaseObject_i::GetLastDependency()
   TCollection_AsciiString anEntry;
 
   for (int i = 1; i<=aLength; i++) {
-     Handle(GEOM_BaseObject) anObj = Handle(GEOM_BaseObject)::DownCast(aSeq->Value(i));
+     Handle(::GEOM_BaseObject) anObj = Handle(::GEOM_BaseObject)::DownCast(aSeq->Value(i));
      if (anObj.IsNull()) continue;
-     GEOM::GEOM_BaseObject_var obj = _engine->GetObject(anObj->GetDocID(),
-                                                        anObj->GetEntryString().ToCString());
+     GEOM::GEOM_BaseObject_var obj = _engine->GetObject(anObj->GetEntryString().ToCString());
      aList[i-1] = GEOM::GEOM_BaseObject::_duplicate( obj );
   }
 
@@ -268,50 +256,70 @@ char* GEOM_BaseObject_i::GetParameters()
  */
 //================================================================================
 
-GEOM::CreationInformation* GEOM_BaseObject_i::GetCreationInformation()
+GEOM::CreationInformationSeq* GEOM_BaseObject_i::GetCreationInformation()
 {
-  GEOM::CreationInformation_var info = new GEOM::CreationInformation;
+  GEOM::CreationInformationSeq_var info = new GEOM::CreationInformationSeq();
 
-  Handle(GEOM_BaseDriver) driver =
-    Handle(GEOM_BaseDriver)::DownCast( _impl->GetCreationDriver() );
-  if ( !driver.IsNull() )
+  int nbFun = _impl->GetNbFunctions();
+  info->length( nbFun );
+  int nbI = 0;
+  for ( int i = 1; i <= nbFun; ++i )
   {
-    std::vector<GEOM_Param> params;
-    std::string             operationName;
-    try
+    Handle(::GEOM_BaseDriver) driver =
+      Handle(::GEOM_BaseDriver)::DownCast( _impl->GetCreationDriver( i ));
+    if ( !driver.IsNull() )
     {
-      OCC_CATCH_SIGNALS;
-      if ( driver->GetCreationInformation( operationName, params ))
+      std::vector<GEOM_Param> params;
+      std::string             operationName;
+      try
       {
-        info->operationName = operationName.c_str();
-        info->params.length( params.size() );
-        for ( size_t i = 0; i < params.size(); ++i )
+        OCC_CATCH_SIGNALS;
+        if ( driver->GetCreationInformation( operationName, params ))
         {
-          info->params[i].name  = params[i].name.c_str();
-          info->params[i].value = params[i].value.c_str();
+          info[nbI].operationName = operationName.c_str();
+          info[nbI].params.length( params.size() );
+          for ( size_t i = 0; i < params.size(); ++i )
+          {
+            info[nbI].params[i].name  = params[i].name.c_str();
+            info[nbI].params[i].value = params[i].value.c_str();
+          }
+          nbI++;
         }
-      }
 #ifdef _DEBUG_
-      if ( operationName.empty() )
-      {
-        cout << endl << endl << endl << "Warning: " << endl << "Dear developer!!!" << endl
-             << "  Consider implementing "
-             <<    typeid(*(driver.operator->())).name() << "::GetCreationInformation() " << endl
-             << "  for the case of operation which has created '" << GetName() << "' object" << endl
-             << "PLEEEEEEEASE" << endl
-             << "\tPLEEEEEEEASE" << endl
-             << "\t\tPLEEEEEEEASE" << endl
-             << "\t\t\tPLEEEEEEEASE" << endl
-             << "\t\t\t\tPLEEEEEEEASE" << endl;
-      }
+        if ( operationName.empty() )
+        {
+          std::cout << std::endl << std::endl << std::endl << "Warning: " << std::endl << "Dear developer!!!" << std::endl
+                    << "  Consider implementing "
+                    <<    typeid(*(driver.operator->())).name() << "::GetCreationInformation() " << std::endl
+                    << "  for the case of operation which has created '" << GetName() << "' object" << std::endl
+                    << "PLEEEEEEEASE" << std::endl
+                    << "\tPLEEEEEEEASE" << std::endl
+                    << "\t\tPLEEEEEEEASE" << std::endl
+                    << "\t\t\tPLEEEEEEEASE" << std::endl
+                    << "\t\t\t\tPLEEEEEEEASE" << std::endl;
+        }
 #endif
-    }
-    catch(...)
-    {
+      }
+      catch(...)
+      {
 #ifdef _DEBUG_
-      cout << "Ecxeption in GEOM_BaseObject_i::GetCreationInformation()" << endl;
+        std::cout << "Ecxeption in GEOM_BaseObject_i::GetCreationInformation()" << std::endl;
 #endif
+      }
     }
   }
+  info->length( nbI );
+
   return info._retn();
 }
+
+//================================================================================
+/*!
+ * \brief Return the engine creating this object
+ */
+//================================================================================
+
+GEOM::GEOM_Gen_ptr GEOM_BaseObject_i::GetGen()
+{
+  return GEOM::GEOM_Gen::_duplicate( _engine );
+}