Salome HOME
NPAL18017: EDF GEOM V3.2.9rc1 : Exception raised when getShapeOn... function return...
[modules/geom.git] / src / GEOMBase / GEOMBase.cxx
index 9e7925e683d0eb01c7eac9dc9dd7979a9e361ccc..83dc547b783c66b1cc6ea4961d703970e476ae1a 100644 (file)
@@ -1,50 +1,61 @@
 //  GEOM GEOMGUI : GUI for Geometry component
 //
 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
-// 
-//  This library is free software; you can redistribute it and/or 
-//  modify it under the terms of the GNU Lesser General Public 
-//  License as published by the Free Software Foundation; either 
-//  version 2.1 of the License. 
-// 
-//  This library is distributed in the hope that it will be useful, 
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-//  Lesser General Public License for more details. 
-// 
-//  You should have received a copy of the GNU Lesser General Public 
-//  License along with this library; if not, write to the Free Software 
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
-// 
-//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //
 //
 //  File   : GEOMBase.cxx
 //  Author : Damien COQUERET
 //  Module : GEOM
-//  $Header
+//  $Header$
 
-using namespace std;
 #include "GEOMBase.h"
+#include "GeometryGUI.h"
+#include "GEOMBase_aParameterDlg.h"
+
+#include "GEOM_Client.hxx"
 
 ////  SALOME Includes
-# include "Utils_ORB_INIT.hxx"
-# include "Utils_SINGLETON.hxx"
+#include "Utils_ORB_INIT.hxx"
+#include "Utils_SINGLETON.hxx"
 
-#include "QAD_RightFrame.h"
-#include "QAD_MessageBox.h"
-#include "QAD_Resource.h"
+#include "SALOME_LifeCycleCORBA.hxx"
 
 #include "GEOM_AssemblyBuilder.h"
-#include "VTKViewer_ViewFrame.h"
+#include "GEOM_Actor.h"
+#include "SVTK_RenderWindowInteractor.h"
+#include "SVTK_ViewModel.h"
+#include "SVTK_ViewWindow.h"
 #include "OCCViewer_ViewPort3d.h"
-#include "OCCViewer_Viewer3d.h"
+#include "OCCViewer_ViewModel.h"
+#include "OCCViewer_ViewWindow.h"
 
+#include "SALOME_ListIO.hxx"
 #include "SALOME_ListIteratorOfListIO.hxx"
-#include "SALOMEGUI_ImportOperation.h"
-#include "SALOMEGUI_NameDlg.h"            
+#include "GEOM_AISTrihedron.hxx"
+
+#include "SUIT_Session.h"
+#include "SUIT_ViewWindow.h"
+#include "SUIT_MessageBox.h"
+#include "SalomeApp_Application.h"
+#include "SalomeApp_Study.h"
 
 // // Open CASCADE Includes
 #include <BRep_Tool.hxx>
@@ -54,6 +65,7 @@ using namespace std;
 
 #include <Geom_Circle.hxx>
 #include <AIS_ListIteratorOfListOfInteractive.hxx>
+#include <AIS_ListOfInteractive.hxx>
 
 #include <TopAbs.hxx>
 #include <TopExp.hxx>
@@ -62,725 +74,21 @@ using namespace std;
 #include <TopoDS_Compound.hxx>
 #include <TopTools_MapOfShape.hxx>
 #include <TopTools_ListIteratorOfListOfShape.hxx>
+#include <TopTools_IndexedMapOfShape.hxx>
 
 #include <Precision.hxx>
 
-// // QT Includes
-#include <qmessagebox.h>
-
-#include "GEOMBase_aParameterDlg.h"
-
-//=================================================================================
-// class   : CustomItem
-// purpose : Set Font to a text.
-//=================================================================================
-class CustomItem : public QCustomMenuItem
-{
-public:
-    CustomItem(const QString& s, const QFont& f)
-      :string(s), font(f){};
-    ~CustomItem(){}
-  
-    void paint(QPainter* p, const QColorGroup& /*cg*/, bool /*act*/,
-              bool /*enabled*/, int x, int y, int w, int h)
-    {
-      p->setFont(font);
-      p->drawText(x, y, w, h, AlignHCenter | AlignVCenter | ShowPrefix | DontClip, string);
-    }
-
-    QSize sizeHint()
-    {
-      return QFontMetrics(font).size(AlignHCenter | AlignVCenter | ShowPrefix | DontClip, string);
-    }
-
-private:
-  QString string;
-  QFont font;
-
-};
-
-
-//=======================================================================
-// function : GEOMBase()
-// purpose  : Constructor
-//=======================================================================
-GEOMBase::GEOMBase() :
-  QObject()
-{
-  myGeomGUI = GEOMContext::GetGeomGUI();
-  myGeom = myGeomGUI->myComponentGeom;
-
-  /* Shading Color */
-  QString SCr = QAD_CONFIG->getSetting("Geometry:SettingsShadingColorRed");
-  QString SCg = QAD_CONFIG->getSetting("Geometry:SettingsShadingColorGreen");
-  QString SCb = QAD_CONFIG->getSetting("Geometry:SettingsShadingColorBlue");
-  if(!SCr.isEmpty() && !SCg.isEmpty() && !SCb.isEmpty())   
-    myShadingColor = Quantity_Color(SCr.toInt()/255., SCg.toInt()/255., SCb.toInt()/255., Quantity_TOC_RGB);
-  else
-    myShadingColor = Quantity_Color(Quantity_NOC_GOLDENROD);
-
-  QString AddInStudy = QAD_CONFIG->getSetting("Geometry:SettingsAddInStudy");
-  if(!AddInStudy.isEmpty())
-    mySettings_AddInStudy = AddInStudy.toInt();
-  else
-    mySettings_AddInStudy = 1;
-}
-
-
-//=======================================================================
-// function : ~GEOMBase()
-// purpose  : Destructor
-//=======================================================================
-GEOMBase::~GEOMBase()
-{
-}
-
-
-//=================================================================================
-// function : CustomPopup()
-// purpose  : [static]
-//=================================================================================
-bool GEOMBase::CustomPopup(QAD_Desktop* parent, QPopupMenu* popup, const QString& theContext,
-                          const QString& theParent, const QString& theObject)
-{
-  GEOMBase* myGeomBase = new GEOMBase();
-  QAD_Study* ActiveStudy = parent->getActiveStudy();
-
-  /* Deactivate any non modal dialog box to get the neutral point */
-  myGeomBase->myGeomGUI->EmitSignalDeactivateDialog();
-
-  SALOME_Selection* Sel = SALOME_Selection::Selection(ActiveStudy->getSelection());
-  int nbSel = Sel->IObjectCount();
-  
-  if((nbSel == 0))
-    return false;
-
-  if(ActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC) {
-    OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)ActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
-    Handle(AIS_InteractiveContext) ic = v3d->getAISContext();
-    if(theParent.compare("Viewer") == 0) {
-      if(theObject.compare("Component") == 0) {
-       popup->removeItem(QAD_DisplayOnly_Popup_ID);
-       return true;
-      }
-      else {
-       QFont f = QApplication::font();
-       f.setBold(TRUE);
-       if(nbSel == 1) {
-         Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
-         popup->removeItem(QAD_TopLabel_Popup_ID);
-         popup->insertItem(new CustomItem (QString(IObject->getName()), f), QAD_TopLabel_Popup_ID, 0);
-         if(IObject->hasEntry())
-           popup->setItemEnabled(804, false); //Add in Study Menu
-         else
-           popup->setItemEnabled(804, true);  //Add in Study Menu
-    
-         if(IObject->IsKind(STANDARD_TYPE(GEOM_InteractiveObject))) {
-           Standard_Boolean found;
-           Handle(GEOM_AISShape) Result = myGeomBase->ConvertIOinGEOMAISShape(IObject, found, true);
-
-           if(found) {
-             if(Result->DisplayMode() == 1)
-               popup->changeItem(8031, tr("GEOM_MEN_WIREFRAME")); //Shading/Wireframe Menu
-             else
-               popup->changeItem(8031, tr("GEOM_MEN_SHADING"));   //Shading/Wireframe Menu
-           }
-         }
-
-         if(!(v3d->isInViewer(IObject) && v3d->isVisible(IObject)))
-           popup->removeItem(QAD_Erase_Popup_ID);
-         else
-           popup->removeItem(QAD_Display_Popup_ID);    
-       }
-       else {
-         popup->removeItem(QAD_DisplayOnly_Popup_ID);
-         popup->removeItem(QAD_TopLabel_Popup_ID);
-         popup->insertItem(new CustomItem (tr("GEOM_MEN_POPUP_NAME").arg(nbSel), f), QAD_TopLabel_Popup_ID, 0);
-         popup->setItemEnabled(804, false); //Add in Study Menu
-       }
-      }
-      return true;
-    }
-    else if(theParent.compare("ObjectBrowser") == 0) {
-      popup->removeItem(QAD_TopLabel_Popup_ID);
-      int id = popup->idAt(0); // separator
-      if(id < 0)
-       popup->removeItem(id);
-           
-      // checking for GEOM label in the selected list
-      SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
-      Handle(SALOME_InteractiveObject) anIObject;
-
-      bool useSubItems = false;
-      bool needOpen = false;
-      bool needDisplay = false;
-      bool needErase = false;
-      SALOMEDS::GenericAttribute_var aTmpAttr;
-      for(;It.More();It.Next()) {
-       anIObject = It.Value();
-       if(!anIObject->hasEntry())
-         continue;
-
-       if(v3d->isInViewer(anIObject) && v3d->isVisible(anIObject)) 
-         needErase = true; 
-       else 
-         needDisplay = true;
-       SALOMEDS::SObject_var obj = ActiveStudy->getStudyDocument()->FindObjectID(anIObject->getEntry());
-       if(!obj->_is_nil()) {
-         if (strcmp(obj->GetFatherComponent()->GetName(), "GEOM")) continue;
-         GEOM::GEOM_Shape_var aShape;
-         if(obj->FindAttribute(aTmpAttr, "AttributeIOR")) {
-           char *str = SALOMEDS::AttributeIOR::_narrow(aTmpAttr)->Value();
-           if(str && strlen(str))
-             aShape = myGeomBase->myGeom->GetIORFromString(str);
-         }
-         else if(obj->FindAttribute(aTmpAttr, "AttributePersistentRef"))
-           needOpen = true;
-         
-         if(aShape->_is_nil()) {
-           SALOMEDS::ChildIterator_var anIter = ActiveStudy->getStudyDocument()->NewChildIterator(obj);
-           while(anIter->More()) {
-             SALOMEDS::SObject_var subobj = anIter->Value();
-             if(subobj->FindAttribute(aTmpAttr, "AttributeIOR")) {
-               useSubItems = true;
-               needErase = true;
-               needDisplay = true;
-             }
-             else if(subobj->FindAttribute(aTmpAttr, "AttributePersistentRef")) {
-               needOpen = true;
-               useSubItems = true;
-             }
-             anIter->Next();
-           }
-         }
-       }
-      }
-      // remove useless popup items
-      if(nbSel != 1)
-       popup->removeItem(901); // rename
-      if(useSubItems)
-       popup->removeItem(QAD_DisplayOnly_Popup_ID); // display only
-
-      if(!needOpen) {
-       int index = popup->indexOf(9024);  // open
-       popup->removeItem(9024);
-       popup->removeItemAt(index); // separator under Open
-
-       if (!needDisplay)
-         popup->removeItem(QAD_Display_Popup_ID);
-       if (!needErase)
-         popup->removeItem(QAD_Erase_Popup_ID);
-
-       if(!needDisplay && !needErase) {
-         int id = popup->idAt(popup->count()-1); // last item
-         popup->removeItem(id); // separator
-       }
-      }
-      else {
-       popup->removeItem(QAD_DisplayOnly_Popup_ID); // display only
-       popup->removeItem(QAD_Display_Popup_ID);
-       popup->removeItem(QAD_Erase_Popup_ID);
-       if (nbSel != 1) {
-         int id = popup->idAt(popup->count()-1); // last item
-         popup->removeItem(id); // separator
-       }
-      }
-      return true;
-    }
-  }
-  else if(ActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
-    // MESSAGE ( " CUSTOM POPUP VIEWER VTK ")
-    if((theParent.compare("Viewer") == 0)) {
-      popup->setItemEnabled(8034, false); //Isos Menu
-      if(theObject.compare("Component") == 0) {
-       popup->removeItem(QAD_DisplayOnly_Popup_ID);
-       return true;
-      }
-
-      //int id = popup->idAt(0);
-      QFont f = QApplication::font();
-      f.setBold(TRUE);
-  
-      if(nbSel == 1) {
-       Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
-       popup->removeItem(QAD_TopLabel_Popup_ID);
-       popup->insertItem(new CustomItem (QString(IObject->getName()), f), QAD_TopLabel_Popup_ID, 0);
-       if(IObject->hasEntry()) {
-         popup->setItemEnabled(804, false); //Add in Study Menu
-         SALOMEDS::Study_var aStudy = ActiveStudy->getStudyDocument();
-         SALOMEDS::SObject_var SO = aStudy->FindObjectID(IObject->getEntry());
-         SALOMEDS::GenericAttribute_var anAttr;
-         SALOMEDS::AttributeIOR_var anIOR;
-         if(!SO->_is_nil()) {
-           if(SO->FindAttribute(anAttr, "AttributeIOR")) {
-             anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
-             Standard_Boolean found;
-             GEOM_Actor* Result = myGeomBase->ConvertIORinGEOMActor(anIOR->Value(), found, true);
-             if(found) {
-               if(Result->getDisplayMode() == 1)
-                 popup->changeItem(8031, tr("GEOM_MEN_WIREFRAME")); //Shading/Wireframe Menu
-               else
-                 popup->changeItem(8031, tr("GEOM_MEN_SHADING"));   //Shading/Wireframe Menu
-                             
-               if(!Result->GetVisibility())
-                 popup->removeItem(QAD_Erase_Popup_ID);
-               else
-                 popup->removeItem(QAD_Display_Popup_ID);                
-             }
-             else
-               popup->removeItem(QAD_Erase_Popup_ID);
-           }
-         }
-       }
-       else
-         popup->setItemEnabled(804, true); //Add in Study Menu
-      }
-      else {
-       popup->removeItem(QAD_DisplayOnly_Popup_ID);
-       popup->removeItem(QAD_TopLabel_Popup_ID);
-       popup->insertItem( new CustomItem (tr("GEOM_MEN_POPUP_NAME").arg(nbSel), f), QAD_TopLabel_Popup_ID, 0);
-       popup->setItemEnabled(804, false); //Add in Study Menu
-      }
-      return true;
-    }
-    else if(theParent.compare("ObjectBrowser") == 0) {
-      popup->removeItem(QAD_TopLabel_Popup_ID);
-      int id = popup->idAt(0); // separator
-      if(id < 0)
-       popup->removeItem(id);
-
-      // checking for GEOM label in the selected list
-      SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
-      Handle(SALOME_InteractiveObject) anIObject;
-      
-      bool useSubItems = false;
-      bool needOpen = false;
-      bool needDisplay = false;
-      bool needErase = false;
-      SALOMEDS::GenericAttribute_var aTmpAttr;
-      VTKViewer_RenderWindowInteractor* myRenderInter = ((VTKViewer_ViewFrame*)ActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
-      for(;It.More();It.Next()) {
-       anIObject = It.Value();
-       if(!anIObject->hasEntry())
-         continue;
-
-       if(myRenderInter->isInViewer(anIObject) && myRenderInter->isVisible(anIObject)) 
-         needErase = true; 
-       else 
-         needDisplay = true;
-
-       SALOMEDS::SObject_var obj = ActiveStudy->getStudyDocument()->FindObjectID(anIObject->getEntry());
-       if(!obj->_is_nil()) {
-         if (strcmp(obj->GetFatherComponent()->GetName(), "GEOM")) continue;
-         GEOM::GEOM_Shape_var aShape;
-         if(obj->FindAttribute(aTmpAttr, "AttributeIOR")) {
-           char *str = SALOMEDS::AttributeIOR::_narrow(aTmpAttr)->Value();
-           if(str && strlen(str))
-             aShape = myGeomBase->myGeom->GetIORFromString(str);
-         }
-         else if(obj->FindAttribute(aTmpAttr, "AttributePersistentRef"))
-           needOpen = true;
-
-         if(aShape->_is_nil()) {
-           SALOMEDS::ChildIterator_var anIter = ActiveStudy->getStudyDocument()->NewChildIterator(obj);
-           while(anIter->More()) {
-             SALOMEDS::SObject_var subobj = anIter->Value();
-             if(subobj->FindAttribute(aTmpAttr, "AttributeIOR")) {
-               useSubItems = true;
-               needDisplay = true;
-               needErase = true;
-             }
-             else if(subobj->FindAttribute(aTmpAttr, "AttributePersistentRef")) {
-               needOpen = true;
-               useSubItems = true;
-             }
-             anIter->Next();
-           }
-         }
-       }
-      }
-      // remove useless popup items
-      if(nbSel != 1)
-       popup->removeItem(901); // rename
-      if(useSubItems)
-       popup->removeItem(QAD_DisplayOnly_Popup_ID); // display only
-
-      if(!needOpen) {
-       int index = popup->indexOf(9024); // open
-       popup->removeItem(9024);
-       popup->removeItemAt(index); // separator under Open
-         
-       if(!needDisplay)
-         popup->removeItem(QAD_Display_Popup_ID);
-       if(!needErase)
-         popup->removeItem(QAD_Erase_Popup_ID);
-       if(!needDisplay && !needErase) {
-         int id = popup->idAt(popup->count()-1); // last item
-         popup->removeItem(id); // separator
-       }
-      }
-      else {
-       popup->removeItem(QAD_DisplayOnly_Popup_ID); // display only
-       popup->removeItem(QAD_Display_Popup_ID);
-       popup->removeItem(QAD_Erase_Popup_ID);
-       if(nbSel!=1) {
-         int id = popup->idAt(popup->count()-1); // last item
-         popup->removeItem(id); // separator
-       }
-      }
-      return true;
-    }
-  } 
-  else { // other viewer types not supported.
-    while(1) {
-      int id = popup->idAt(0);
-      if(id <= QAD_TopLabel_Popup_ID && id != -1)
-       popup->removeItemAt(0);
-      else
-       break;
-    }
-    popup->removeItem(QAD_DisplayOnly_Popup_ID);       
-    popup->removeItem(QAD_Display_Popup_ID);
-    popup->removeItem(QAD_Erase_Popup_ID);
-    int id = popup->idAt(popup->count() - 1); // last item
-    if(id < 0 && id != -1)
-      popup->removeItem(id); // separator
-    return false;
-  }
-  return false;
-}
-
-
-//=====================================================================================
-// function : Display()
-// purpose  : Displays a CORBA shape
-//=====================================================================================
-bool GEOMBase::Display(GEOM::GEOM_Shape_ptr aShape, Standard_CString name)
-{
-  // MESSAGE ( "GEOMBase::Display init ") 
-  Handle(GEOM_InteractiveObject) IO;
-  SALOME_Selection* Sel = SALOME_Selection::Selection(QAD_Application::getDesktop()->getActiveStudy()->getSelection());
-  Sel->ClearIObjects();
-
-  if(aShape->_is_nil()) {
-    QAD_MessageBox::warn1 (QAD_Application::getDesktop(), tr("GEOM_WRN_WARNING"), tr("GEOM_PRP_ABORT"), tr("GEOM_BUT_OK"));
-    return false;
-  }
-  
-  TopoDS_Shape shape = myGeomGUI->GetShapeReader().GetShape(myGeom, aShape);
-  if(shape.IsNull())
-    return false;
-
-  SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
-  SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
-  SALOMEDS::GenericAttribute_var anAttr;
-  SALOMEDS::AttributeName_var aName;
-  SALOMEDS::AttributePixMap_var aPixmap;
-
-  SALOMEDS::SComponent_var father = aStudy->FindComponent("GEOM");
-  int aLocked = false;
-  if(father->_is_nil()) {
-    QAD_Operation* op = new SALOMEGUI_ImportOperation(QAD_Application::getDesktop()->getActiveStudy());
-    op->start();
-    aLocked = aStudy->GetProperties()->IsLocked();
-    if(aLocked) 
-      aStudy->GetProperties()->SetLocked(false);
-    father = aStudyBuilder->NewComponent("GEOM");
-    anAttr = aStudyBuilder->FindOrCreateAttribute(father, "AttributeName");
-    aName = SALOMEDS::AttributeName::_narrow(anAttr);
-    aName->SetValue(QAD_Application::getDesktop()->getComponentUserName("GEOM"));
-    anAttr = aStudyBuilder->FindOrCreateAttribute(father, "AttributePixMap");
-    aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
-    aPixmap->SetPixMap("ICON_OBJBROWSER_Geometry");
-    aStudyBuilder->DefineComponentInstance(father, myGeom);
-    QAD_Application::getDesktop()->getActiveStudy()->updateObjBrowser();
-    if(aLocked)
-      aStudy->GetProperties()->SetLocked(true);
-    op->finish();
-  }
-
-  father->ComponentIOR(myGeomGUI->GetFatherior());
-
-  TCollection_AsciiString nameG("");
-  Standard_CString Type;
-  if(TCollection_AsciiString(name).IsEqual(Standard_CString(""))) {
-    if(TCollection_AsciiString(aShape->NameType()).IsEqual(Standard_CString(""))) {
-      Standard_CString type;
-      GetShapeTypeString(shape,type);
-      aShape->NameType(type);
-      nameG += TCollection_AsciiString(type) + TCollection_AsciiString("_") + TCollection_AsciiString(myGeomGUI->myNbGeom++) + TCollection_AsciiString("\0");
-    } 
-    else
-      nameG += TCollection_AsciiString(aShape->NameType()) + TCollection_AsciiString("_") + TCollection_AsciiString(myGeomGUI->myNbGeom++) + TCollection_AsciiString("\0");
-  }
-  else 
-    nameG = TCollection_AsciiString(name);
-  
-  // VTK
-  if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
-    VTKViewer_RenderWindowInteractor* myRenderInter = ((VTKViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
-    
-    vtkRenderer *theRenderer = ((VTKViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer();
-    int themode = myRenderInter->GetDisplayMode();
-
-    vtkActorCollection* theActors = GEOM_AssemblyBuilder::BuildActors(shape, 0, themode, Standard_True);
-    theActors->InitTraversal();
-    vtkActor* anActor = (vtkActor*)theActors->GetNextActor();
-
-    IO = new GEOM_InteractiveObject(aShape->Name(), myGeomGUI->GetFatherior(), "GEOM");
-    while(!(anActor==NULL)) {
-      GEOM_Actor* GActor = GEOM_Actor::SafeDownCast(anActor);
-      GActor->setIO(IO);
-      GActor->setName(nameG.ToCString());
-      
-      theRenderer->AddActor(GActor);
-      anActor = (vtkActor*)theActors->GetNextActor();
-    }
-  } 
-  // OCC
-  else if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_OCC) {
-    OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
-    Handle(AIS_InteractiveContext) ic = v3d->getAISContext();
-    Handle(GEOM_AISShape) theResult = new GEOM_AISShape(shape, nameG.ToCString());
-    theResult->SetInfiniteState(shape.Infinite());
-    theResult->SetShadingColor(myShadingColor);
-    IO = new GEOM_InteractiveObject(aShape->Name(), myGeomGUI->GetFatherior(), "GEOM");
-    theResult->setIO(IO);
-    theResult->setName(nameG.ToCString());
-    
-    /* Precaution : close any local context to permit the display */
-    if(ic->HasOpenedContext())
-      ic->CloseAllContexts();
-
-    ic->Display(theResult);
-  }
-
-  // DCQ Sel->AddIObject(IO, false);
-  QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame()->Repaint();
-  if(mySettings_AddInStudy)
-    AddInStudy(false, IO);
+#include <vtkRenderer.h>
+#include <qvaluelist.h>
+#include <qstringlist.h>
 
-  return true;
-}
+#include <set>
 
+#include "GEOMImpl_Types.hxx"
 
-//=====================================================================================
-// function : AddInStudy() 
-// purpose  : anIOShape or a selected shape
-//=====================================================================================
-bool GEOMBase::AddInStudy(bool selection, const Handle(SALOME_InteractiveObject)& anIO)
-{
-  SALOME_Selection* Sel = SALOME_Selection::Selection(QAD_Application::getDesktop()->getActiveStudy()->getSelection());
-  if (!(!mySettings_AddInStudy || selection)) {
-    Sel->ClearIObjects();
-  }
-
-  SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
-  SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
-  SALOMEDS::GenericAttribute_var anAttr;
-  SALOMEDS::AttributeName_var aName;
-  SALOMEDS::AttributePixMap_var aPixmap;
-  SALOMEDS::AttributeIOR_var anIOR;
-  SALOMEDS::AttributeSelectable_var aSelAttr;
-  
-  SALOMEDS::SComponent_var father = aStudy->FindComponent("GEOM");
-  int aLocked = false;
-  if(father->_is_nil()) {
-    QAD_Operation* op = new SALOMEGUI_ImportOperation(QAD_Application::getDesktop()->getActiveStudy());
-    op->start();
-    aLocked = aStudy->GetProperties()->IsLocked();
-    if(aLocked)
-      aStudy->GetProperties()->SetLocked(false);
-    father = aStudyBuilder->NewComponent("GEOM");
-    anAttr = aStudyBuilder->FindOrCreateAttribute(father, "AttributeName");
-    aName = SALOMEDS::AttributeName::_narrow(anAttr);
-    aName->SetValue( QAD_Application::getDesktop()->getComponentUserName("GEOM"));
-    anAttr = aStudyBuilder->FindOrCreateAttribute(father, "AttributePixMap");
-    aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
-    aPixmap->SetPixMap("ICON_OBJBROWSER_Geometry");
-    aStudyBuilder->DefineComponentInstance(father, myGeom);
-    if (aLocked)
-      aStudy->GetProperties()->SetLocked(true);
-    op->finish();
-  }
-
-  father->ComponentIOR(myGeomGUI->GetFatherior());
-  
-  SALOMEDS::SObject_var fatherSF = aStudy->FindObjectID(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->entry());
-  
-  Handle(GEOM_AISShape) GAISShape;
-  GEOM_Actor* GActor;
-  Handle(GEOM_InteractiveObject) GIO;
-  bool found = false;
-
-  // VTK
-  if (QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
-    vtkRenderer *Renderer = ((VTKViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer();
-
-    vtkActorCollection* theActors = Renderer->GetActors();
-    theActors->InitTraversal();
-    vtkActor *ac = theActors->GetNextActor();
-    while(!(ac==NULL)) {
-      if(ac->IsA("GEOM_Actor")) {
-       GEOM_Actor* anActor = GEOM_Actor::SafeDownCast(ac);
-       if(anActor->hasIO()) {
-         Handle(SALOME_InteractiveObject) IO = anActor->getIO();
-         if(IO->IsKind(STANDARD_TYPE(GEOM_InteractiveObject))) {
-           GIO = Handle(GEOM_InteractiveObject)::DownCast(IO);
-           if(anIO->isSame(GIO)) {
-             found = true;
-             GActor = anActor;
-             break;
-           }
-         }
-       }
-      }
-      ac = theActors->GetNextActor();
-    }
-    
-    if(!found)
-      return false;
-  }
-  // OCC
-  else if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_OCC) {
-    OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
-    Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
-    
-    AIS_ListOfInteractive List;
-    ic->DisplayedObjects(List);
-    AIS_ListIteratorOfListOfInteractive ite(List);
-    while(ite.More()) {
-      if(ite.Value()->IsInstance(STANDARD_TYPE(GEOM_AISShape))) {
-       Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(ite.Value());
-       if(aSh->hasIO()) {
-         Handle(SALOME_InteractiveObject) IO = aSh->getIO();
-         if ( IO->IsKind(STANDARD_TYPE(GEOM_InteractiveObject))) {
-           GIO = Handle(GEOM_InteractiveObject)::DownCast(IO);
-           if(anIO->isSame(GIO)) {
-             found = true;
-             GAISShape = aSh;
-             break;
-           }
-         }
-       }
-      }
-      ite.Next();
-    }
-
-    if(!found)
-      return false;
-  }
-
-  if(!mySettings_AddInStudy || selection) {
-    QString Name = SALOMEGUI_NameDlg::getName(QAD_Application::getDesktop(), anIO->getName());
-    if(!Name.isEmpty()) {
-      // VTK
-      if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
-       char* aCopy = CORBA::string_dup(Name.latin1());
-       GActor->setName(aCopy);
-       delete(aCopy);
-      }
-      // OCC
-      else if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_OCC) {
-       char* aCopy = CORBA::string_dup(Name.latin1());
-       GAISShape->setName(aCopy);
-       delete(aCopy);
-      }
-    } 
-    else
-      return false;
-  }
-
-  // open transaction
-  QAD_Operation* op = new SALOMEGUI_ImportOperation(QAD_Application::getDesktop()->getActiveStudy());
-  op->start();
-
-  SALOMEDS::SObject_var newObj = aStudyBuilder->NewObject(father);
-
-  GEOM::GEOM_Shape_var aShape = myGeom->GetIORFromString(GIO->getIOR());
-
-  /* For the shape inserted into the study we set its field 'studyshapeid'    */
-  /* so the shape will contain its corresponding entry in the study Ocaf doc. */
-  aShape->StudyShapeId(newObj->GetID());
-
-  GIO->setEntry(newObj->GetID());
-
-  anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeIOR");
-  anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
-  anIOR->SetValue(aShape->Name());
-
-  anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeName");
-  aName = SALOMEDS::AttributeName::_narrow(anAttr);
-
-  anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributePixMap");
-  aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
-  if(aShape->ShapeType() == GEOM::COMPOUND)
-    aPixmap->SetPixMap("ICON_OBJBROWSER_COMPOUND");
-  else if(aShape->ShapeType() == GEOM::COMPSOLID)
-    aPixmap->SetPixMap("ICON_OBJBROWSER_COMPSOLID");
-  else if(aShape->ShapeType() == GEOM::SOLID)
-    aPixmap->SetPixMap("ICON_OBJBROWSER_SOLID");
-  else if(aShape->ShapeType() == GEOM::SHELL)
-    aPixmap->SetPixMap("ICON_OBJBROWSER_SHELL");
-  else if(aShape->ShapeType() == GEOM::FACE)
-    aPixmap->SetPixMap("ICON_OBJBROWSER_FACE");
-  else if(aShape->ShapeType() == GEOM::WIRE)
-    aPixmap->SetPixMap("ICON_OBJBROWSER_WIRE");
-  else if(aShape->ShapeType() == GEOM::EDGE)
-    aPixmap->SetPixMap("ICON_OBJBROWSER_EDGE");
-  else if(aShape->ShapeType() == GEOM::VERTEX)
-    aPixmap->SetPixMap("ICON_OBJBROWSER_VERTEX");
-
-  // VTK
-  if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
-    GActor->setIO(GIO);
-    aName->SetValue(GActor->getName());
-  }
-  // OCC
-  else if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_OCC) {
-    GAISShape->setIO(GIO);
-    aName->SetValue(GAISShape->getName());
-  }
-
-  SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(fatherSF);
-  aStudyBuilder->Addreference(newObj1,newObj);
-
-  GEOM::GEOM_Gen::ListOfIOR_var listIOR = new GEOM::GEOM_Gen::ListOfIOR;
-  listIOR = myGeom->GetReferencedObjects(aShape);
-
-  if(listIOR->length()>0) {
-    SALOMEDS::SObject_var Arguments = aStudyBuilder->NewObject(newObj);
-    anAttr = aStudyBuilder->FindOrCreateAttribute(Arguments, "AttributeName");
-    aName = SALOMEDS::AttributeName::_narrow(anAttr);
-    aName->SetValue(tr("GEOM_ARGUMENTS"));
-    anAttr = aStudyBuilder->FindOrCreateAttribute(Arguments, "AttributeSelectable");
-    aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
-    aSelAttr->SetSelectable(false);
-
-    bool ObjectReferenced = false;
-    for (unsigned int ind = 0; ind < listIOR->length();ind++) {
-      SALOMEDS::SObject_var theObj = aStudy->FindObjectIOR(listIOR[ind]);
-
-      if(!theObj->_is_nil()) {
-       SALOMEDS::SObject_var RefObject = aStudyBuilder->NewObject(Arguments);
-       aStudyBuilder->Addreference(RefObject, theObj);
-       ObjectReferenced = true;
-      }
-    }
-
-    if(!ObjectReferenced)
-      aStudyBuilder->RemoveObject(Arguments);
-  }
-  op->finish();
+using namespace std;
 
-  if(!mySettings_AddInStudy || selection)
-    QAD_Application::getDesktop()->getActiveStudy()->updateObjBrowser();
-  else {
-    QAD_Application::getDesktop()->getActiveStudy()->updateObjBrowser(false);
-    // DCQ Sel->AddIObject(GIO);
-  }
-  return true;
-}
+#include "SALOMEDSClient.hxx"
 
 
 //=====================================================================================
@@ -792,14 +100,15 @@ TopoDS_Shape GEOMBase::GetShapeFromIOR(QString IOR)
   TopoDS_Shape result;
   if(IOR.stripWhiteSpace().isEmpty())
     return result;
-  ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance();
-  CORBA::ORB_var& _orb = init.orb() ;
-  CORBA::Object_var obj = _orb->string_to_object((char*)(IOR.latin1()));
+
+  CORBA::Object_var obj = SalomeApp_Application::orb()->string_to_object((char*)(IOR.latin1()));
   if(CORBA::is_nil(obj))
     return result;
-  GEOM::GEOM_Shape_var aShape = myGeom->GetIORFromString(IOR);
-  if(!aShape->_is_nil())
-    result = myGeomGUI->GetShapeReader().GetShape(myGeom, aShape);
+  GEOM::GEOM_Object_var GeomObject = GEOM::GEOM_Object::_narrow( obj );
+  if (GeomObject->_is_nil())
+    return result;
+
+  result = GEOM_Client().GetShape(GeometryGUI::GetGeomGen(), GeomObject);
   return result;
 }
 
@@ -808,42 +117,16 @@ TopoDS_Shape GEOMBase::GetShapeFromIOR(QString IOR)
 // function : GetIndex()
 // purpose  : Get the index of a sub shape in a main shape : index start at 1
 //=====================================================================================
-int GEOMBase::GetIndex(const TopoDS_Shape& subshape, const TopoDS_Shape& shape, int /*ShapeType*/) 
-{ 
-  if(shape.IsNull() || subshape.IsNull()) 
-    return -1; 
-  
-  int index = 1; 
-  if(subshape.ShapeType() == TopAbs_COMPOUND) { 
-    TopoDS_Iterator it; 
-    TopTools_ListOfShape CL; 
-    CL.Append(shape); 
-    TopTools_ListIteratorOfListOfShape itC; 
-    for(itC.Initialize(CL); itC.More(); itC.Next()) { 
-      for(it.Initialize(itC.Value()); it.More(); it.Next()) { 
-       if(it.Value().ShapeType() == TopAbs_COMPOUND) {
-         if(it.Value().IsSame(subshape)) 
-           return index; 
-         else 
-           index++; 
-         CL.Append(it.Value()); 
-       }
-      } 
-    }
-  }
-  else { 
-    TopExp_Explorer Exp(shape, subshape.ShapeType()); 
-    TopTools_MapOfShape M; 
-    while(Exp.More()) {
-      if(M.Add(Exp.Current())) { 
-       if(Exp.Current().IsSame(subshape)) 
-         return index; 
-       index++; 
-      } 
-      Exp.Next(); 
-    } 
-  } 
-  return -1; 
+int GEOMBase::GetIndex(const TopoDS_Shape& subshape, const TopoDS_Shape& shape, int /*ShapeType*/)
+{
+  if(shape.IsNull() || subshape.IsNull())
+    return -1;
+
+  TopTools_IndexedMapOfShape anIndices;
+  TopExp::MapShapes(shape, anIndices);
+  if(anIndices.Contains(subshape)) return anIndices.FindIndex(subshape);
+
+  return -1;
 }
 
 
@@ -851,22 +134,24 @@ int GEOMBase::GetIndex(const TopoDS_Shape& subshape, const TopoDS_Shape& shape,
 // function : GetTopoFromSelection()
 // purpose  : Define tds from a single selection and retuen true
 //=======================================================================
-bool GEOMBase::GetTopoFromSelection(SALOME_Selection *Sel, TopoDS_Shape& tds) 
+bool GEOMBase::GetTopoFromSelection(const SALOME_ListIO& aList, TopoDS_Shape& tds)
 {
-  if(Sel->IObjectCount() != 1)
+  if(aList.Extent() != 1)
     return false;
-  
-  Handle(SALOME_InteractiveObject) IO = Sel->firstIObject();
+
+  Handle(SALOME_InteractiveObject) IO = aList.First();
   /* case SObject */
   if(IO->hasEntry()) {
-    SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
-    SALOMEDS::SObject_var obj = aStudy->FindObjectID(IO->getEntry());
-    SALOMEDS::GenericAttribute_var anAttr;
-    SALOMEDS::AttributeIOR_var anIOR;
-    if(!obj->_is_nil()) {
+    SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
+    if ( !appStudy ) return false;
+    _PTR(Study) aStudy = appStudy->studyDS();
+
+    _PTR(SObject) obj ( aStudy->FindObjectID(IO->getEntry()) );
+    _PTR(GenericAttribute) anAttr;
+    if( obj ) {
       if(obj->FindAttribute(anAttr, "AttributeIOR")) {
-       anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
-       tds = this->GetShapeFromIOR(anIOR->Value());
+       _PTR(AttributeIOR) anIOR ( anAttr );
+       tds = GetShapeFromIOR(anIOR->Value().c_str());
        if(tds.IsNull())
          return false;
        else
@@ -875,36 +160,56 @@ bool GEOMBase::GetTopoFromSelection(SALOME_Selection *Sel, TopoDS_Shape& tds)
     }
   }
 
-  if(IO->IsInstance(STANDARD_TYPE(GEOM_InteractiveObject))) {
-    Standard_CString ior = "";
-    Handle(GEOM_InteractiveObject) GIObject = Handle(GEOM_InteractiveObject)::DownCast(IO);
-    ior = GIObject->getIOR();
-    tds = this->GetShapeFromIOR(ior);
-    if(tds.IsNull())
-      return false;
-    else
-      return true;
-  }
-  
   return false;
 }
 
-
 //=======================================================================
 // function : GetNameOfSelectedIObjects()
 // purpose  : Define the name geom++ or other name of mono or multi sel.
 //=======================================================================
-int GEOMBase::GetNameOfSelectedIObjects(SALOME_Selection* Sel, QString& aName)
+int GEOMBase::GetNameOfSelectedIObjects( const SALOME_ListIO& aList,
+                                         QString&          theName,
+                                         const bool        theShapesOnly )
 {
-  int nbSel = Sel->IObjectCount();
-  if(nbSel == 1) {
-    Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
-    aName = IObject->getName();
-  } 
-  else {
-    aName = tr("%1_objects").arg(nbSel);
-  }
-  return nbSel;
+  if ( !theShapesOnly )
+    {
+      int nbSel = aList.Extent();
+      if ( nbSel == 1 )
+       {
+         Handle(SALOME_InteractiveObject) anIObj = aList.First();
+         if(anIObj->hasEntry()) {
+           SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
+           if ( !appStudy ) return nbSel;
+           _PTR(Study) aStudy = appStudy->studyDS();
+
+           _PTR(SObject) obj ( aStudy->FindObjectID(anIObj->getEntry()) );
+
+           _PTR(GenericAttribute) anAttr;
+
+           if ( obj && obj->FindAttribute( anAttr, "AttributeName") )
+             {
+               _PTR(AttributeName) aNameAttr ( anAttr );
+               theName = aNameAttr->Value().c_str();
+             }
+         }
+       }
+      else
+       theName = QObject::tr("%1_objects").arg(nbSel);
+
+      return nbSel;
+    }
+  else
+    {
+      GEOM::ListOfGO anObjs;
+      ConvertListOfIOInListOfGO( aList, anObjs, theShapesOnly );
+      if ( anObjs.length() == 1 ) {
+       theName = GetName( anObjs[ 0 ] );
+      }
+      else
+       theName = QString( "%1_objects" ).arg( anObjs.length() );
+
+      return anObjs.length();
+    }
 }
 
 
@@ -922,55 +227,55 @@ bool GEOMBase::GetShapeTypeString(const TopoDS_Shape& aShape, Standard_CString&
     {
     case TopAbs_COMPOUND:
       {
-       aTypeString = CORBA::string_dup(tr("GEOM_COMPOUND"));
+       aTypeString = CORBA::string_dup(QObject::tr("GEOM_COMPOUND"));
        return true;
       }
     case  TopAbs_COMPSOLID:
       {
-       aTypeString = CORBA::string_dup(tr("GEOM_COMPOUNDSOLID")) ; 
+       aTypeString = CORBA::string_dup(QObject::tr("GEOM_COMPOUNDSOLID")) ;
        return true ;
       }
     case TopAbs_SOLID:
       {
-       aTypeString = CORBA::string_dup(tr("GEOM_SOLID")) ; 
+       aTypeString = CORBA::string_dup(QObject::tr("GEOM_SOLID")) ;
        return true ;
       }
     case TopAbs_SHELL:
       {
-       aTypeString = CORBA::string_dup(tr("GEOM_SHELL")) ; 
+       aTypeString = CORBA::string_dup(QObject::tr("GEOM_SHELL")) ;
        return true ;
       }
     case TopAbs_FACE:
-      { 
+      {
        BRepAdaptor_Surface surf(TopoDS::Face(aShape));
        if(surf.GetType() == GeomAbs_Plane) {
-         aTypeString = CORBA::string_dup(tr("GEOM_PLANE"));
+         aTypeString = CORBA::string_dup(QObject::tr("GEOM_PLANE"));
          return true;
        }
        else if(surf.GetType() == GeomAbs_Cylinder) {
-         aTypeString = CORBA::string_dup(tr("GEOM_SURFCYLINDER"));
+         aTypeString = CORBA::string_dup(QObject::tr("GEOM_SURFCYLINDER"));
          return true;
        }
        else if(surf.GetType() == GeomAbs_Sphere) {
-         aTypeString = CORBA::string_dup(tr("GEOM_SURFSPHERE"));
+         aTypeString = CORBA::string_dup(QObject::tr("GEOM_SURFSPHERE"));
          return true ;
        }
        else if(surf.GetType() == GeomAbs_Torus) {
-         aTypeString = CORBA::string_dup(tr("GEOM_SURFTORUS"));
+         aTypeString = CORBA::string_dup(QObject::tr("GEOM_SURFTORUS"));
          return true ;
        }
        else if(surf.GetType() == GeomAbs_Cone) {
-         aTypeString = CORBA::string_dup(tr("GEOM_SURFCONE"));
+         aTypeString = CORBA::string_dup(QObject::tr("GEOM_SURFCONE"));
          return true ;
        }
        else {
-         aTypeString = CORBA::string_dup(tr("GEOM_FACE"));
+         aTypeString = CORBA::string_dup(QObject::tr("GEOM_FACE"));
          return true;
        }
       }
     case TopAbs_WIRE:
       {
-       aTypeString = CORBA::string_dup(tr("GEOM_WIRE")); 
+       aTypeString = CORBA::string_dup(QObject::tr("GEOM_WIRE"));
        return true;
       }
     case TopAbs_EDGE:
@@ -978,31 +283,31 @@ bool GEOMBase::GetShapeTypeString(const TopoDS_Shape& aShape, Standard_CString&
        BRepAdaptor_Curve curv(TopoDS::Edge(aShape));
        if(curv.GetType() == GeomAbs_Line) {
          if((Abs(curv.FirstParameter()) >= 1E6) || (Abs(curv.LastParameter()) >= 1E6))
-           aTypeString = CORBA::string_dup(tr("GEOM_LINE"));
+           aTypeString = CORBA::string_dup(QObject::tr("GEOM_LINE"));
          else
-           aTypeString = CORBA::string_dup(tr("GEOM_EDGE"));
+           aTypeString = CORBA::string_dup(QObject::tr("GEOM_EDGE"));
          return true;
        }
        else if(curv.GetType() == GeomAbs_Circle) {
          if(curv.IsClosed())
-           aTypeString = CORBA::string_dup(tr("GEOM_CIRCLE"));
+           aTypeString = CORBA::string_dup(QObject::tr("GEOM_CIRCLE"));
          else
-           aTypeString = CORBA::string_dup(tr("GEOM_ARC"));
+           aTypeString = CORBA::string_dup(QObject::tr("GEOM_ARC"));
        return true;
-      } 
+      }
        else {
-         aTypeString = CORBA::string_dup(tr("GEOM_EDGE"));
+         aTypeString = CORBA::string_dup(QObject::tr("GEOM_EDGE"));
          return true;
        }
       }
     case TopAbs_VERTEX:
       {
-       aTypeString = CORBA::string_dup(tr("GEOM_VERTEX"));
+       aTypeString = CORBA::string_dup(QObject::tr("GEOM_VERTEX"));
        return true;
       }
     case TopAbs_SHAPE:
       {
-       aTypeString = CORBA::string_dup(tr("GEOM_SHAPE"));
+       aTypeString = CORBA::string_dup(QObject::tr("GEOM_SHAPE"));
        return true;
       }
     }
@@ -1018,12 +323,20 @@ Handle(GEOM_AISShape) GEOMBase::ConvertIORinGEOMAISShape(const char * IOR, Stand
 {
   Handle(GEOM_AISShape) resultShape;
   testResult = false;
-  int nbSf = QAD_Application::getDesktop()->getActiveStudy()->getStudyFramesCount();
-  for(int i = 0; i < nbSf; i++) {
-    QAD_StudyFrame* sf = QAD_Application::getDesktop()->getActiveStudy()->getStudyFrame(i);
-    if(sf->getTypeView() == VIEW_OCC) {
-      OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)sf->getRightFrame()->getViewFrame())->getViewer();
-      Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
+
+  SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
+  if ( !appStudy ) return resultShape;
+  _PTR(Study) aStudy = appStudy->studyDS();
+
+  _PTR(SObject) anObj ( aStudy->FindObjectIOR( IOR ) );
+  if ( !anObj )
+    return resultShape;
+
+  QPtrList<SUIT_ViewWindow> aViewWindowsList = SUIT_Session::session()->activeApplication()->desktop()->windows();
+
+  for ( QPtrListIterator<SUIT_ViewWindow> it( aViewWindowsList ); it.current(); ++it ) {
+    if (it.current()->getViewManager()->getType() == OCCViewer_Viewer::Type()) {
+      Handle (AIS_InteractiveContext) ic = ((OCCViewer_Viewer*)it.current()->getViewManager()->getViewModel())->getAISContext();
 
       AIS_ListOfInteractive List;
       ic->DisplayedObjects(List);
@@ -1036,26 +349,19 @@ Handle(GEOM_AISShape) GEOMBase::ConvertIORinGEOMAISShape(const char * IOR, Stand
        if(ite.Value()->IsInstance(STANDARD_TYPE(GEOM_AISShape))) {
          Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(ite.Value());
          if(aSh->hasIO()) {
-           Handle(GEOM_InteractiveObject) GIO = Handle(GEOM_InteractiveObject)::DownCast(aSh->getIO());
-           Standard_CString theIOR = GIO->getIOR();
-           if(strcmp(IOR, theIOR) == 0) {
-             if(onlyInActiveView) {
-               if(sf == QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()) {
-                 testResult = true;
-                 resultShape = aSh;
-                 return resultShape; 
-               }
-             } 
-             else {
+           Handle(SALOME_InteractiveObject) GIO = Handle(SALOME_InteractiveObject)::DownCast(aSh->getIO());
+           if(GIO->hasEntry() && strcmp(GIO->getEntry(), anObj->GetID().c_str()) == 0) {
+             if(!onlyInActiveView ||
+                it.current() == SUIT_Session::session()->activeApplication()->desktop()->activeWindow()) {
                testResult = true;
                resultShape = aSh;
-               return resultShape; 
+               return resultShape;
              }
            }
          }
        }
        ite.Next();
-      }  
+      }
     }
   }
   return  resultShape;
@@ -1068,11 +374,24 @@ Handle(GEOM_AISShape) GEOMBase::ConvertIORinGEOMAISShape(const char * IOR, Stand
 //=======================================================================
 GEOM_Actor* GEOMBase::ConvertIORinGEOMActor(const char* IOR, Standard_Boolean& testResult, bool onlyInActiveView)
 {
-  int nbSf = QAD_Application::getDesktop()->getActiveStudy()->getStudyFramesCount();
-  for(int i = 0; i < nbSf; i++) {
-    QAD_StudyFrame* sf = QAD_Application::getDesktop()->getActiveStudy()->getStudyFrame(i);
-    if(sf->getTypeView() == VIEW_VTK) {
-      vtkRenderer* Renderer = ((VTKViewer_ViewFrame*)sf->getRightFrame()->getViewFrame())->getRenderer();
+  testResult = false;
+
+  SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
+  if ( !appStudy ) return GEOM_Actor::New();
+  _PTR(Study) aStudy = appStudy->studyDS();
+
+  _PTR(SObject) anObj ( aStudy->FindObjectIOR( IOR ) );
+  if ( !anObj )
+    return GEOM_Actor::New();
+
+  QPtrList<SUIT_ViewWindow> aViewWindowsList = SUIT_Session::session()->activeApplication()->desktop()->windows();
+
+  for ( QPtrListIterator<SUIT_ViewWindow> it( aViewWindowsList ); it.current(); ++it ) {
+    if (it.current()->getViewManager()->getType() == SVTK_Viewer::Type()) {
+      SVTK_ViewWindow* aVTKViewWindow = dynamic_cast<SVTK_ViewWindow*>( it.current() );
+      if( !aVTKViewWindow )
+       continue;
+      vtkRenderer* Renderer = aVTKViewWindow->getRenderer();
       vtkActorCollection* theActors = Renderer->GetActors();
       theActors->InitTraversal();
       vtkActor *ac = theActors->GetNextActor();
@@ -1080,16 +399,10 @@ GEOM_Actor* GEOMBase::ConvertIORinGEOMActor(const char* IOR, Standard_Boolean& t
        if( ac->IsA("GEOM_Actor")) {
          GEOM_Actor* anActor = GEOM_Actor::SafeDownCast(ac);
          if(anActor->hasIO()) {
-           Handle(GEOM_InteractiveObject) GIO = Handle(GEOM_InteractiveObject)::DownCast(anActor->getIO());
-           Standard_CString theIOR = GIO->getIOR();
-           if(strcmp(IOR, theIOR) == 0) {
-             if(onlyInActiveView) {
-               if(sf == QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()) {
-                 testResult = true;
-                 return anActor;
-               }
-             } 
-             else {
+           Handle(SALOME_InteractiveObject) GIO = Handle(SALOME_InteractiveObject)::DownCast(anActor->getIO());
+           if(GIO->hasEntry() && strcmp(GIO->getEntry(), anObj->GetID().c_str()) == 0) {
+             if(!onlyInActiveView ||
+                it.current() == SUIT_Session::session()->activeApplication()->desktop()->activeWindow()) {
                testResult = true;
                return anActor;
              }
@@ -1104,6 +417,49 @@ GEOM_Actor* GEOMBase::ConvertIORinGEOMActor(const char* IOR, Standard_Boolean& t
   return GEOM_Actor::New();
 }
 
+//=======================================================================
+// function : GetAIS()
+// purpose  :
+//=======================================================================
+Handle(AIS_InteractiveObject) GEOMBase::GetAIS( const Handle(SALOME_InteractiveObject)& theIO,
+                                                const bool                              isOnlyInActiveView )
+{
+  if ( theIO.IsNull() || !theIO->hasEntry() )
+    return Handle(AIS_InteractiveObject)();
+
+  QPtrList<SUIT_ViewWindow> aViewWindowsList = SUIT_Session::session()->activeApplication()->desktop()->windows();
+
+  for ( QPtrListIterator<SUIT_ViewWindow> it( aViewWindowsList ); it.current(); ++it ) {
+    if (it.current()->getViewManager()->getType() != OCCViewer_Viewer::Type())
+      continue;
+    Handle (AIS_InteractiveContext) anIC = ((OCCViewer_Viewer*)it.current()->getViewManager()->getViewModel())->getAISContext();
+
+    AIS_ListOfInteractive aList;
+    anIC->DisplayedObjects( aList );
+    anIC->ObjectsInCollector( aList );
+
+    AIS_ListIteratorOfListOfInteractive anIter( aList );
+    for ( ; anIter.More(); anIter.Next() )
+    {
+      Handle(SALOME_InteractiveObject) anObj =
+        Handle(SALOME_InteractiveObject)::DownCast( anIter.Value()->GetOwner() );
+
+      if( !anObj.IsNull() && strcmp( anObj->getEntry(), theIO->getEntry() ) == 0 )
+      {
+        if( isOnlyInActiveView )
+        {
+          if ( it.current() == SUIT_Session::session()->activeApplication()->desktop()->activeWindow() )
+            return anIter.Value();
+        }
+        else
+          return anIter.Value();
+      }
+    }
+  }
+
+  return Handle(AIS_InteractiveObject)();
+}
+
 
 //=======================================================================
 // function : ConvertIOinGEOMAISShape()
@@ -1112,41 +468,53 @@ GEOM_Actor* GEOMBase::ConvertIORinGEOMActor(const char* IOR, Standard_Boolean& t
 Handle(GEOM_AISShape) GEOMBase::ConvertIOinGEOMAISShape(const Handle(SALOME_InteractiveObject)& IO, Standard_Boolean& testResult, bool onlyInActiveView)
 {
   Handle(GEOM_AISShape) res;
-  int nbSf = QAD_Application::getDesktop()->getActiveStudy()->getStudyFramesCount();
-  for(int i = 0; i < nbSf; i++) {
-    QAD_StudyFrame* sf = QAD_Application::getDesktop()->getActiveStudy()->getStudyFrame(i);
-    if(sf->getTypeView() == VIEW_OCC) {
-      OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)sf->getRightFrame()->getViewFrame())->getViewer();
-      Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
+
+  if ( !IO->hasEntry() )
+  {
+    testResult = false;
+    return res;
+  }
+
+  QPtrList<SUIT_ViewWindow> aViewWindowsList = SUIT_Session::session()->activeApplication()->desktop()->windows();
+
+  for ( QPtrListIterator<SUIT_ViewWindow> it( aViewWindowsList ); it.current(); ++it ) {
+    if (it.current()->getViewManager()->getType() == OCCViewer_Viewer::Type()) {
+      Handle (AIS_InteractiveContext) ic = ((OCCViewer_Viewer*)it.current()->getViewManager()->getViewModel())->getAISContext();
 
       AIS_ListOfInteractive List;
       ic->DisplayedObjects(List);
       AIS_ListOfInteractive List1;
       ic->ObjectsInCollector(List1);
       List.Append(List1);
-      
+
       AIS_ListIteratorOfListOfInteractive ite(List);
-      while(ite.More()) {
-       if(ite.Value()->IsInstance(STANDARD_TYPE(GEOM_AISShape))) {
-         Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(ite.Value());
-         if(aSh->hasIO()) {
-           Handle(GEOM_InteractiveObject) GIO = Handle(GEOM_InteractiveObject)::DownCast(aSh->getIO());
-           if(GIO->isSame(IO)) {
-             if(onlyInActiveView) {
-               if(sf == QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()) {
-                 testResult = true;
-                 return aSh;
-               }
-             } 
-             else {
-               testResult = true;
-               return aSh;
-             }
-           }
-         }
-       }
-       ite.Next();
-      }  
+      while(ite.More())
+      {
+        if(ite.Value()->IsInstance(STANDARD_TYPE(GEOM_AISShape)))
+        {
+          Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(ite.Value());
+          if( aSh->hasIO() )
+          {
+            if( strcmp( aSh->getIO()->getEntry(), IO->getEntry() ) == 0 )
+            {
+              if(onlyInActiveView)
+              {
+                if(it.current() == SUIT_Session::session()->activeApplication()->desktop()->activeWindow())
+                {
+                  testResult = true;
+                  return aSh;
+                }
+              }
+              else
+              {
+                testResult = true;
+                return aSh;
+              }
+            }
+          }
+        }
+        ite.Next();
+      }
     }
   }
   testResult = false;
@@ -1158,150 +526,132 @@ Handle(GEOM_AISShape) GEOMBase::ConvertIOinGEOMAISShape(const Handle(SALOME_Inte
 // function : ConvertIOinGEOMShape()
 // purpose  :
 //=======================================================================
-GEOM::GEOM_Shape_ptr GEOMBase::ConvertIOinGEOMShape(const Handle(SALOME_InteractiveObject)& IO, Standard_Boolean& testResult)
+GEOM::GEOM_Object_ptr GEOMBase::ConvertIOinGEOMShape(const Handle(SALOME_InteractiveObject)& IO, Standard_Boolean& testResult)
 {
-  GEOM::GEOM_Shape_var aShape;
+  GEOM::GEOM_Object_var aShape;
   testResult = false;
-  
+
   /* case SObject */
   if(IO->hasEntry()) {
-    SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
-    SALOMEDS::SObject_var obj = aStudy->FindObjectID(IO->getEntry());
-    SALOMEDS::GenericAttribute_var anAttr;
-    SALOMEDS::AttributeIOR_var anIOR;
-    if(!obj->_is_nil()) {
+    SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
+    if ( !appStudy ) return GEOM::GEOM_Object::_nil();
+    _PTR(Study) aStudy = appStudy->studyDS();
+
+    _PTR(SObject) obj ( aStudy->FindObjectID(IO->getEntry()) );
+    _PTR(GenericAttribute) anAttr;
+    if(obj) {
       if(obj->FindAttribute(anAttr, "AttributeIOR")) {
-       anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
-       aShape = myGeom->GetIORFromString(anIOR->Value());
+       _PTR(AttributeIOR) anIOR ( anAttr );
+       aShape = GeometryGUI::GetGeomGen()->GetIORFromString(anIOR->Value().c_str());
        if(!CORBA::is_nil(aShape))
          testResult = true;
        return aShape._retn();
       }
     }
   }
-  /* case Graphical Object */
-  if(IO->IsInstance(STANDARD_TYPE(GEOM_InteractiveObject))) {
-    Handle(GEOM_InteractiveObject) GIObject = Handle(GEOM_InteractiveObject)::DownCast(IO);
-    Standard_CString ior = GIObject->getIOR();
-
-    aShape = myGeom->GetIORFromString(ior);
-    if(!CORBA::is_nil(aShape))
-      testResult = true;
-    return aShape._retn();
-  }
-  return aShape._retn();
+  return GEOM::GEOM_Object::_nil();
 }
 
 
 //=======================================================================
 // function : ConvertListOfIOInListOfIOR()
-// purpose  : 
+// purpose  :
 //=======================================================================
-void GEOMBase::ConvertListOfIOInListOfIOR(const SALOME_ListIO& aList, GEOM::GEOM_Gen::ListOfIOR& listIOR)
+void GEOMBase::ConvertListOfIOInListOfIOR(const SALOME_ListIO& aList, GEOM::string_array& listIOR)
 {
-  int nbSel = aList.Extent();  
+  int nbSel = aList.Extent();
   listIOR.length(nbSel);
   int j=0;
   SALOME_ListIteratorOfListIO It(aList);
-  for(int i=0; It.More(); It.Next(), i++) {
+  SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>
+    ( SUIT_Session::session()->activeApplication()->activeStudy() );
+  if ( !appStudy ) return;
+  _PTR(Study) aStudy = appStudy->studyDS();
+
+  for (int i=0; It.More(); It.Next(), i++) {
     Handle(SALOME_InteractiveObject) IObject = It.Value();
-    if(IObject->hasEntry()) {
-      SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
-      SALOMEDS::SObject_var obj = aStudy->FindObjectID(IObject->getEntry());
-      SALOMEDS::GenericAttribute_var anAttr;
-      SALOMEDS::AttributeIOR_var anIOR;
-      if(!obj->_is_nil() && obj->FindAttribute(anAttr, "AttributeIOR")) {
-       anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
-       ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance();
-       CORBA::ORB_var& _orb = init.orb();
-       CORBA::String_var theValue = anIOR->Value();
-       CORBA::Object_var theObj = _orb->string_to_object(theValue);
-       if(theObj->_is_a("IDL:GEOM/GEOM_Shape:1.0")) {
-         listIOR[j] = CORBA::string_dup(theValue);
+    if (IObject->hasEntry()) {
+      _PTR(SObject) obj ( aStudy->FindObjectID(IObject->getEntry()) );
+      _PTR(GenericAttribute) anAttr;
+      if (obj && obj->FindAttribute(anAttr, "AttributeIOR")) {
+       _PTR(AttributeIOR) anIOR (anAttr);
+        //CORBA::Object_var theObj = dynamic_cast<SALOMEDS_Study*>
+        //  (aStudy.get())->ConvertIORToObject(anIOR->Value());
+        CORBA::Object_var theObj = GeometryGUI::ClientSObjectToObject(obj);
+       if (!CORBA::is_nil(theObj) && theObj->_is_a("IDL:GEOM/GEOM_Object:1.0")) {
+         listIOR[j] = CORBA::string_dup(anIOR->Value().c_str());
          j++;
        }
       }
-    } 
-    else if(IObject->IsInstance(STANDARD_TYPE(GEOM_InteractiveObject))) {
-      Handle(GEOM_InteractiveObject) GIObject = Handle(GEOM_InteractiveObject)::DownCast(IObject);
-      Standard_CString ior = GIObject->getIOR();
-      listIOR[j] = CORBA::string_dup(ior);
-      j++;
     }
   }
   listIOR.length(j);
 }
 
 
-//================================================================================
-// function : SetDisplayedObjectList()
+//=======================================================================
+// function : ConvertIOinGEOMObject()
 // purpose  :
-//================================================================================
-// void GEOMBase::SetDisplayedObjectList()
-// {
-//   if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() > VIEW_OCC)
-//     return;
-
-//   OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
-//   myGeomGUI->GetListDisplayedObject().Clear();
+//=======================================================================
+GEOM::GEOM_Object_ptr GEOMBase::ConvertIOinGEOMObject( const Handle(SALOME_InteractiveObject)& theIO,
+                                                      Standard_Boolean& theResult )
+{
+  theResult = Standard_False;
+  GEOM::GEOM_Object_var aReturnObject;
+  if ( !theIO.IsNull() )
+  {
+    const char* anEntry = theIO->getEntry();
 
-//   Handle (AIS_InteractiveContext) aContext = v3d->getAISContext();
-//   aContext->DisplayedObjects(myGeomGUI->GetListDisplayedObject());
-// }
+    SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>
+      ( SUIT_Session::session()->activeApplication()->activeStudy() );
+    if ( !appStudy ) return  GEOM::GEOM_Object::_nil();
+    _PTR(Study) aStudy = appStudy->studyDS();
 
+    _PTR(SObject) aSObj ( aStudy->FindObjectID( anEntry ) );
 
-//=====================================================================================
-// function : DisplaySimulationShape() 
-// purpose  : Displays 'this->mySimulationShape' a pure graphical shape from a TopoDS_Shape
-//=====================================================================================
-void GEOMBase::DisplaySimulationShape(const TopoDS_Shape& S) 
-{
-  if(S.IsNull())
-    return;
-       
-  //NRI DEBUG : 14/02/2002
-  if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() > VIEW_OCC)
-    return;
-       
-  OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
-  Handle(AIS_InteractiveContext) ic = v3d->getAISContext();
-  try {
-    /* erase any previous */
-    ic->Erase(mySimulationShape, Standard_True, Standard_False);
-    ic->ClearPrs(mySimulationShape);
-    mySimulationShape = new AIS_Shape(TopoDS_Shape());
-    mySimulationShape->Set(S);
-    mySimulationShape->SetColor(Quantity_NOC_VIOLET);
-    ic->Deactivate(mySimulationShape);
-    ic->Display(mySimulationShape, Standard_False);
-    ic->UpdateCurrentViewer();
+    if (aSObj)
+    {
+      aReturnObject = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(aSObj));
+      theResult = !CORBA::is_nil( aReturnObject );
+    }
   }
-  catch(Standard_Failure) {
-    MESSAGE("Exception catched in GEOMBase::DisplaySimulationShape ");
-  } 
-  mySimulationShape->UnsetColor();
-  return;
+  return aReturnObject._retn();
 }
 
 
-//==================================================================================
-// function : EraseSimulationShape()
-// purpose  : Clears the display of 'mySimulationShape' a pure graphical shape
-//==================================================================================
-void GEOMBase::EraseSimulationShape()
+//=======================================================================
+// function : ConvertListOfIOInListOfGO()
+// purpose  :
+//=======================================================================
+void GEOMBase::ConvertListOfIOInListOfGO( const SALOME_ListIO& theList,
+                                          GEOM::ListOfGO&      theListGO,
+                                          const bool           theShapesOnly )
 {
-  int count = QAD_Application::getDesktop()->getActiveStudy()->getStudyFramesCount();
-  for(int i = 0; i < count; i++) {
-    if(QAD_Application::getDesktop()->getActiveStudy()->getStudyFrame(i)->getTypeView() == VIEW_OCC) {
-      OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getStudyFrame(i)->getRightFrame()->getViewFrame())->getViewer();
-      Handle(AIS_InteractiveContext) ic = v3d->getAISContext();
-      ic->Erase(mySimulationShape, Standard_True, Standard_False);
-      ic->ClearPrs(mySimulationShape);
-      ic->UpdateCurrentViewer();
-    } 
+  int nbSel = theList.Extent();
+  theListGO.length( nbSel );
+  SALOME_ListIteratorOfListIO anIter( theList );
+
+  SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
+  if ( !appStudy ) return;
+  _PTR(Study) aStudy = appStudy->studyDS();
+
+  int j = 0;
+  for ( int i=0; anIter.More(); anIter.Next(), i++ )
+  {
+    Handle(SALOME_InteractiveObject) anIObj = anIter.Value();
+    _PTR(SObject) aSObj ( aStudy->FindObjectID( anIObj->getEntry() ) );
+
+    if ( aSObj )
+    {
+      GEOM::GEOM_Object_var aGeomObj =
+       GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(aSObj));
+      if ( !CORBA::is_nil( aGeomObj ) && ( !theShapesOnly || IsShape( aGeomObj ) ) )
+        theListGO[ j++ ] = aGeomObj;
+    }
   }
-}
 
+  theListGO.length( j );
+}
 
 //=================================================================================
 // function : CreateArrowForLinearEdge()
@@ -1310,15 +660,16 @@ void GEOMBase::EraseSimulationShape()
 //=================================================================================
 bool GEOMBase::CreateArrowForLinearEdge(const TopoDS_Shape& tds, TopoDS_Shape& ArrowCone)
 {
-  if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() != VIEW_OCC || tds.ShapeType() != TopAbs_EDGE)
+  if(SUIT_Session::session()->activeApplication()->desktop()->activeWindow()->getViewManager()->getType()
+     != OCCViewer_Viewer::Type() || tds.ShapeType() != TopAbs_EDGE)
     return false;
-  
-  OCCViewer_ViewPort* vp = ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewPort();
-  Handle( V3d_View) view3d = ((OCCViewer_ViewPort3d*)vp)->getView();
+
+  OCCViewer_ViewPort3d* vp3d = ((OCCViewer_ViewWindow*)SUIT_Session::session()->activeApplication()->desktop()->activeWindow())->getViewPort();
+  Handle( V3d_View) view3d = vp3d->getView();
   Standard_Real Width, Height;
   view3d->Size(Width, Height);
   const Standard_Real aHeight = (Width + Height) / 50.0;
-  
+
   try {
     Standard_Real first, last;
     Handle(Geom_Curve) curv = BRep_Tool::Curve(TopoDS::Edge(tds), first, last);
@@ -1331,11 +682,11 @@ bool GEOMBase::CreateArrowForLinearEdge(const TopoDS_Shape& tds, TopoDS_Shape& A
     curv->D1( param, middleParamPoint, V1);
     if(V1.Magnitude() < Precision::Confusion())
       return false;
-    
+
     /* Topology orientation not geom orientation */
     if(tds.Orientation() == TopAbs_REVERSED)
       V1 *= -1.0;
-    
+
     gp_Ax2 anAxis( middleParamPoint, gp_Dir(V1));
     const Standard_Real radius1 = aHeight / 5.0;
     if(radius1 > 10.0 * Precision::Confusion() && aHeight > 10.0 * Precision::Confusion()) {
@@ -1345,7 +696,7 @@ bool GEOMBase::CreateArrowForLinearEdge(const TopoDS_Shape& tds, TopoDS_Shape& A
   }
   catch(Standard_Failure) {
     // OCC failures are hard to catch in GUI.
-    // This  because of the position for  #include <Standard_ErrorHandler.hxx> that is very critic to find 
+    // This  because of the position for  #include <Standard_ErrorHandler.hxx> that is very critic to find
     // in SALOME environment : compilation error !
   }
   return false;
@@ -1367,7 +718,7 @@ bool GEOMBase::VertexToPoint(const TopoDS_Shape& S, gp_Pnt& P)
 
 //=================================================================================
 // function : GetBipointDxDyDz()
-// purpose  : 
+// purpose  :
 //=================================================================================
 void GEOMBase::GetBipointDxDyDz(gp_Pnt P1, gp_Pnt P2, double& dx, double& dy, double& dz)
 {
@@ -1415,13 +766,14 @@ bool GEOMBase::LinearEdgeExtremities(const TopoDS_Shape& S,  gp_Pnt& P1, gp_Pnt&
 //=======================================================================
 double GEOMBase::Parameter(Standard_Boolean& res, const char* aValue1, const char* aTitle1, const char* aTitle, const double bottom, const double top, const int decimals)
 {
-  GEOMBase_aParameterDlg * Dialog = new GEOMBase_aParameterDlg(aValue1, aTitle1, QAD_Application::getDesktop(), aTitle, TRUE, 0, bottom, top, decimals);
+  GEOMBase_aParameterDlg * Dialog = new GEOMBase_aParameterDlg(aValue1, aTitle1, SUIT_Session::session()->activeApplication()->desktop(),
+                                                              aTitle, TRUE, 0, bottom, top, decimals);
   int r = Dialog->exec();
   float X = 0.0;
   if(r == QDialog::Accepted) {
     res = Standard_True;
     X = Dialog->getValue();
-  } 
+  }
   else
     res = Standard_False;
   delete Dialog;
@@ -1432,44 +784,47 @@ double GEOMBase::Parameter(Standard_Boolean& res, const char* aValue1, const cha
 //=======================================================================
 // function : SelectionByNameInDialogs()
 // purpose  : Called when user has entered a name of object in a LineEdit.
-//          : The selection is changed. Dialog box will receive the 
+//          : The selection is changed. Dialog box will receive the
 //          : corresponding signal to manage this event.
 //=======================================================================
-bool GEOMBase::SelectionByNameInDialogs(QWidget* aWidget, const QString& objectUserName, SALOME_Selection* Sel)
+bool GEOMBase::SelectionByNameInDialogs(QWidget* aWidget, const QString& objectUserName, const SALOME_ListIO& aList)
 {
   /* Find SObject with name in component GEOM */
-  SALOMEDS::Study_var ST = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
-  SALOMEDS::Study::ListOfSObject_var listSO = new SALOMEDS::Study::ListOfSObject;
-  listSO = ST->FindObjectByName(objectUserName, "GEOM");
-  
-  if(listSO->length() < 1) {
-    const QString caption  = tr("GEOM_WRN_WARNING");
-    const QString text = tr("GEOM_NAME_INCORRECT");
-    const QString button0  = tr("GEOM_BUT_OK");
-    QMessageBox::warning(aWidget, caption, text, button0);
+  SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
+  if ( !appStudy ) return false;
+  _PTR(Study) ST = appStudy->studyDS();
+
+  std::vector<_PTR(SObject)> listSO;
+  listSO = ST->FindObjectByName(objectUserName.latin1(), "GEOM");
+
+  if(listSO.size() < 1) {
+    const QString caption  = QObject::tr("GEOM_WRN_WARNING");
+    const QString text = QObject::tr("GEOM_NAME_INCORRECT");
+    const QString button0  = QObject::tr("GEOM_BUT_OK");
+    SUIT_MessageBox::error1(aWidget, caption, text, button0);
     return false;
   }
   /* More than one object with same name */
-  if(listSO->length() > 1) {
-    const QString caption  = tr("GEOM_WRN_WARNING");
-    const QString text = tr("GEOM_IDENTICAL_NAMES_SELECT_BY_MOUSE");
-    const QString button0  = tr("GEOM_BUT_OK") ;
-    QMessageBox::warning(aWidget, caption, text, button0) ;
+  if(listSO.size() > 1) {
+    const QString caption  = QObject::tr("GEOM_WRN_WARNING");
+    const QString text = QObject::tr("GEOM_IDENTICAL_NAMES_SELECT_BY_MOUSE");
+    const QString button0  = QObject::tr("GEOM_BUT_OK") ;
+    SUIT_MessageBox::error1(aWidget, caption, text, button0) ;
+    listSO.clear();
     return false;
   }
 
-  SALOMEDS::SObject_var theObj = listSO[0];
+  _PTR(SObject) theObj ( listSO[0] );
   /* Create a SALOME_InteractiveObject with a SALOME::SObject */
-  Standard_CString anEntry = theObj->GetID();
   char* aCopyobjectUserName = CORBA::string_dup(objectUserName);
-  Handle(SALOME_InteractiveObject) SI = new SALOME_InteractiveObject(anEntry, "GEOM", aCopyobjectUserName);
+  Handle(SALOME_InteractiveObject) SI = new SALOME_InteractiveObject(theObj->GetID().c_str(), "GEOM", aCopyobjectUserName);
   delete(aCopyobjectUserName);
 
   /* Add as a selected object       */
   /* Clear any previous selection : */
-  /* Warning the LineEdit is purged because of signal currentSelectionChanged ! */ 
-  Sel->ClearIObjects(); 
-  Sel->AddIObject(SI);
+  /* Warning the LineEdit is purged because of signal currentSelectionChanged ! */
+  // Sel->ClearIObjects(); //mzn
+  // Sel->AddIObject(SI); //mzn
   return true;
 }
 
@@ -1481,36 +836,143 @@ bool GEOMBase::SelectionByNameInDialogs(QWidget* aWidget, const QString& objectU
 bool GEOMBase::DefineDlgPosition(QWidget* aDlg, int& x, int& y)
 {
   /* Here the position is on the bottom right corner - 10 */
-  QAD_Desktop* PP = QAD_Application::getDesktop();
+  SUIT_Desktop* PP = SUIT_Session::session()->activeApplication()->desktop();
   x = abs(PP->x() + PP->size().width() - aDlg->size().width() - 10);
   y = abs(PP->y() + PP->size().height() - aDlg->size().height() - 10);
-  return true;  
+  return true;
 }
 
+
+//=======================================================================
+// function : GetDefaultName()
+// purpose  : Generates default names
+//=======================================================================
 QString GEOMBase::GetDefaultName(const QString& theOperation)
 {
-  SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
-  int aNumber = 0;
-  QString aName;
-  SALOMEDS::SObject_var obj;
+  QString aName = "";
+
+  // collect all object names of GEOM component
+  SalomeApp_Study* appStudy =
+    dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
+  if ( !appStudy ) return aName;
+  _PTR(Study) aStudy = appStudy->studyDS();
+
+  std::set<std::string> aSet;
+  _PTR(SComponent) aGeomCompo (aStudy->FindComponent("GEOM"));
+  if (aGeomCompo) {
+    _PTR(ChildIterator) it (aStudy->NewChildIterator(aGeomCompo));
+    _PTR(SObject) obj;
+    for (it->InitEx(true); it->More(); it->Next()) {
+      obj = it->Value();
+      aSet.insert(obj->GetName());
+    }
+  }
 
-  do 
-    {
-      aName = theOperation+"_"+QString::number(++aNumber);
-      obj = aStudy->FindObject(aName);
-    } 
-  while (!obj->_is_nil());
+  // build a unique name
+  int aNumber = 0;
+  bool isUnique = false;
+  while (!isUnique) {
+    aName = theOperation + "_" + QString::number(++aNumber);
+    isUnique = (aSet.count(aName.latin1()) == 0);
+  }
 
   return aName;
 }
 
 
-//=====================================================================================
-// EXPORTED METHODS
-//=====================================================================================
-extern "C"
+//=======================================================================
+// function : ShowErrorMessage()
+// purpose  : Shows message box with error code and comment
+//=======================================================================
+void GEOMBase::ShowErrorMessage(const char* theErrorCode, const char* theComment)
+{
+  QString anErrorCode(theErrorCode);
+  QString aComment(theComment);
+
+  QString aText = "";
+  if (!anErrorCode.isEmpty())
+    aText.append("\n" + QObject::tr(anErrorCode));
+  if (!aComment.isEmpty())
+    aText.append("\n" + QString(theComment));
+
+  SUIT_MessageBox::error1( SUIT_Session::session()->activeApplication()->desktop(), QObject::tr( "GEOM_ERROR" ),
+                          QObject::tr("GEOM_PRP_ABORT") + aText, "OK" );
+}
+
+
+//=======================================================================
+// function : GetObjectFromIOR()
+// purpose  : returns a GEOM_Object by given IOR (string)
+//=======================================================================
+GEOM::GEOM_Object_ptr GEOMBase::GetObjectFromIOR( const char* theIOR )
+{
+  GEOM::GEOM_Object_var anObject;
+  if ( theIOR == NULL || strlen( theIOR ) == 0 )
+    return anObject._retn(); // returning nil object
+
+  anObject = GEOM::GEOM_Object::_narrow( SalomeApp_Application::orb()->string_to_object( theIOR ) );
+  return anObject._retn();
+}
+
+//=======================================================================
+// function : GetIORFromObject()
+// purpose  : returns IOR of a given GEOM_Object
+//=======================================================================
+char* GEOMBase::GetIORFromObject( const GEOM::GEOM_Object_ptr& theObject )
+{
+  if ( CORBA::is_nil( theObject ) )
+    return NULL;
+
+  return SalomeApp_Application::orb()->object_to_string( theObject );
+}
+
+//=======================================================================
+// function : GetShape()
+// purpose  : returns a TopoDS_Shape stored in GEOM_Object
+//=======================================================================
+bool GEOMBase::GetShape( const GEOM::GEOM_Object_ptr& theObject, TopoDS_Shape& theShape, const TopAbs_ShapeEnum theType )
+{
+  if ( !CORBA::is_nil( theObject ) )
+  {
+    TopoDS_Shape aTopoDSShape = GEOM_Client().GetShape(  GeometryGUI::GetGeomGen(), theObject );
+    if ( !aTopoDSShape.IsNull() && ( theType == TopAbs_SHAPE || theType == aTopoDSShape.ShapeType() ) )
+    {
+       theShape = aTopoDSShape;
+       return true;
+    }
+  }
+  return false;
+}
+
+//=======================================================================
+// function : GetName()
+// purpose  : Get name of object
+//=======================================================================
+QString GEOMBase::GetName( GEOM::GEOM_Object_ptr theObj )
+{
+  SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
+
+  if ( appStudy )
+  {
+    string anIOR = SalomeApp_Application::orb()->object_to_string( theObj );
+    if ( anIOR != "" )
+    {
+      _PTR(SObject) aSObj ( appStudy->studyDS()->FindObjectIOR( anIOR ) );
+
+      _PTR(GenericAttribute) anAttr;
+
+      if ( aSObj && aSObj->FindAttribute( anAttr, "AttributeName") )
+      {
+        _PTR(AttributeName) aNameAttr ( anAttr );
+       return QString( aNameAttr->Value().c_str() );
+      }
+    }
+  }
+
+  return QString("");
+}
+
+bool GEOMBase::IsShape( GEOM::GEOM_Object_ptr theObj )
 {
-  bool CustomPopup(QAD_Desktop* parent, QPopupMenu* popup, const QString & theContext,
-                  const QString & theParent, const QString & theObject)
-  {return GEOMBase::CustomPopup(parent, popup, theContext, theParent, theObject);}
+  return !theObj->_is_nil() && theObj->IsShape();
 }