Salome HOME
Copyright update 2021
[modules/geom.git] / src / GEOMBase / GEOMBase.cxx
index e10909ddca19a73d142a7305a86791d3eeadbd55..257bb3a1e312c2cd1d18da39c216769ac0c494cf 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2015  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2021  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
@@ -307,7 +307,7 @@ Handle(GEOM_AISShape) GEOMBase::ConvertIORinGEOMAISShape(const QString& IOR, boo
             if ( it.Value()->IsInstance( STANDARD_TYPE(GEOM_AISShape) ) ) {
               Handle(GEOM_AISShape) sh = Handle(GEOM_AISShape)::DownCast( it.Value() );
               if ( !sh.IsNull() && sh->hasIO() ) {
-                Handle(SALOME_InteractiveObject) IO = Handle(SALOME_InteractiveObject)::DownCast( sh->getIO() );
+                Handle(SALOME_InteractiveObject) IO = sh->getIO();
                 if ( !IO.IsNull() && IO->hasEntry() && obj->GetID() == IO->getEntry() )
                   shape = sh;
               }
@@ -354,7 +354,7 @@ GEOM_Actor* GEOMBase::ConvertIORinGEOMActor(const QString& IOR, bool onlyInActiv
             if ( a->IsA( "GEOM_Actor" ) ) {
               GEOM_Actor* ga = GEOM_Actor::SafeDownCast( a );
               if ( ga && ga->hasIO() ) {
-                Handle(SALOME_InteractiveObject) IO = Handle(SALOME_InteractiveObject)::DownCast( ga->getIO() );
+                Handle(SALOME_InteractiveObject) IO = ga->getIO();
                 if ( !IO.IsNull() && IO->hasEntry() && obj->GetID() == IO->getEntry() )
                   actor = ga;
               }
@@ -374,7 +374,7 @@ GEOM_Actor* GEOMBase::ConvertIORinGEOMActor(const QString& IOR, bool onlyInActiv
 // purpose  :
 //=======================================================================
 Handle(AIS_InteractiveObject) GEOMBase::GetAIS( const Handle(SALOME_InteractiveObject)& IO,
-                                                bool onlyInActiveView, bool onlyGeom )
+                                                bool onlyInActiveView, bool /*onlyGeom*/ )
 {
   Handle(AIS_InteractiveObject) aisObject;
 
@@ -450,12 +450,11 @@ GEOM::GEOM_Object_ptr GEOMBase::ConvertIOinGEOMObject( const Handle(SALOME_Inter
     SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
     if ( study ) {
       _PTR(Study) studyDS = study->studyDS();
-      _PTR(SObject) obj( studyDS->FindObjectID( IO->getEntry() ) );
-      if ( obj ) {
-        CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject( obj );
-        if ( !CORBA::is_nil( corbaObj ) )
+      _PTR(SObject)   obj = studyDS->FindObjectID( IO->getEntry() );
+      if ( GeometryGUI::IsInGeomComponent( obj )) {
+          CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject( obj );
           object = GEOM::GEOM_Object::_narrow( corbaObj );
-      }
+        }
     }
   }
   return object._retn();
@@ -489,7 +488,6 @@ void GEOMBase::ConvertListOfIOInListOfGO( const SALOME_ListIO& IObjects,
   }
 }
 
-
 //=================================================================================
 // function : CreateArrowForLinearEdge()
 // purpose  : Create a cone topology to be used to display an arrow in the middle
@@ -526,7 +524,7 @@ TopoDS_Shape GEOMBase::CreateArrowForLinearEdge( const TopoDS_Shape& shape )
         }
       }
     }
-    catch ( Standard_Failure ) {
+    catch ( Standard_Failure& ) {
       // OCC failures are hard to catch in GUI.
       // This is because of the position for #include <Standard_ErrorHandler.hxx> that is very critical to find
       // in SALOME environment : compilation error !
@@ -626,7 +624,7 @@ bool GEOMBase::SelectionByNameInDialogs( QWidget* widget, const QString& objectU
   /* Create a SALOME_InteractiveObject with a SALOME::SObject */
   Handle(SALOME_InteractiveObject) IO = new SALOME_InteractiveObject( listSO[0]->GetID().c_str(),
                                                                       "GEOM",
-                                                                      objectUserName.toLatin1().constData() );
+                                                                      objectUserName.toUtf8().constData() );
 
   /* Add as a selected object       */
   /* Clear any previous selection : */
@@ -710,7 +708,7 @@ void GEOMBase::ShowErrorMessage( const QString& errorCode, const QString& commen
   if ( !errorCode.isEmpty() )
     text << QObject::tr( errorCode.toLatin1().constData() );
   if ( !comment.isEmpty() )
-    text << QObject::tr( comment.toLatin1().constData() );
+    text << QObject::tr( comment.toUtf8().constData() );
 
   SUIT_MessageBox::critical( SUIT_Session::session()->activeApplication()->desktop(),
                              QObject::tr( "GEOM_ERROR" ),
@@ -747,7 +745,10 @@ bool GEOMBase::GetShape( GEOM::GEOM_Object_ptr object, TopoDS_Shape& shape, cons
   if ( !CORBA::is_nil( object ) ) {
     TopAbs_ShapeEnum stype = (TopAbs_ShapeEnum)( object->GetShapeType() );
     if ( type == TopAbs_SHAPE || type == stype )
-      shape = GEOM_Client::get_client().GetShape(  GeometryGUI::GetGeomGen(), object );
+    {
+      GEOM::GEOM_Gen_var gen = object->GetGen();
+      shape = GEOM_Client::get_client().GetShape( gen, object );
+    }
   }
   return !shape.IsNull();
 }
@@ -859,7 +860,7 @@ QString GEOMBase::GetEntry( GEOM::GEOM_Object_ptr object )
 // Function : PublishSubObject
 // Purpose  : Publish sub-shape under the main object
 //================================================================
-void GEOMBase::PublishSubObject( GEOM::GEOM_Object_ptr object )
+void GEOMBase::PublishSubObject( GEOM::GEOM_Object_ptr object, const QString& name )
 {
   SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
   if ( study && !CORBA::is_nil( object ) ) {
@@ -868,9 +869,8 @@ void GEOMBase::PublishSubObject( GEOM::GEOM_Object_ptr object )
     GEOM::GEOM_Object_var father = object->GetMainShape();
     QString fatherEntry = GetEntry( father );
     if ( entry.isEmpty() && !CORBA::is_nil( father ) && !fatherEntry.isEmpty() ) {
-      QString name = GetName( object );
-      GeometryGUI::GetGeomGen()->AddInStudy( GeometryGUI::ClientStudyToStudy( studyDS ),
-                                             object, name.toLatin1().data(), father.in() );
+      QString aName = !name.isEmpty() ? name : GetName( object );
+      GeometryGUI::GetGeomGen()->AddInStudy( object, aName.toUtf8().data(), father.in() );
     }
   }
 }