]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
DCQ : New Archi
authordcq <dcq@opencascade.com>
Tue, 6 Jan 2004 16:27:03 +0000 (16:27 +0000)
committerdcq <dcq@opencascade.com>
Tue, 6 Jan 2004 16:27:03 +0000 (16:27 +0000)
src/GEOMToolsGUI/GEOMToolsGUI.cxx [new file with mode: 0644]
src/GEOMToolsGUI/GEOMToolsGUI.h [new file with mode: 0644]
src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.cxx [new file with mode: 0644]
src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.h [new file with mode: 0644]
src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.cxx [new file with mode: 0644]
src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.h [new file with mode: 0644]
src/GEOMToolsGUI/Makefile.in [new file with mode: 0644]

diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.cxx b/src/GEOMToolsGUI/GEOMToolsGUI.cxx
new file mode 100644 (file)
index 0000000..fe0e3cc
--- /dev/null
@@ -0,0 +1,911 @@
+//  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 
+//
+//
+//
+//  File   : GEOMBase_Tools.cxx
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+using namespace std;
+#include "GEOMToolsGUI.h"
+
+#include "QAD_Config.h"
+#include "QAD_FileDlg.h"
+#include "QAD_Tools.h"
+#include "QAD_MessageBox.h"
+#include "QAD_RightFrame.h"
+
+#include "OCCViewer_Viewer3d.h"
+#include "VTKViewer_ViewFrame.h"
+
+#include "SALOME_ListIteratorOfListIO.hxx"
+#include "SALOMEGUI_NameDlg.h"
+#include "SALOMEGUI_ImportOperation.h"
+#include "SALOMEGUI_QtCatchCorbaException.hxx"
+
+#include <AIS_Drawer.hxx>
+#include <AIS_ListIteratorOfListOfInteractive.hxx>
+#include <Prs3d_IsoAspect.hxx>
+
+#include <vtkBMPReader.h>
+#include <vtkTexture.h>
+#include <vtkTextureMapToPlane.h>
+#include <vtkTransformTextureCoords.h>
+#include <vtkDataSetMapper.h>
+
+#include <qfileinfo.h>
+#include <qcolordialog.h>
+#include <qspinbox.h>
+
+#include "GEOMToolsGUI_NbIsosDlg.h"        // Method ISOS adjustement
+#include "GEOMToolsGUI_TransparencyDlg.h"  // Method TRANSPARENCY adjustement
+
+//=======================================================================
+// function : GEOMToolsGUI()
+// purpose  : Constructor
+//=======================================================================
+GEOMToolsGUI::GEOMToolsGUI() :
+  QObject()
+{
+  myGeomBase = new GEOMBase();
+  myGeomGUI = GEOMContext::GetGeomGUI();
+  myGeom = myGeomGUI->myComponentGeom;
+}
+
+
+//=======================================================================
+// function : ~GEOMToolsGUI()
+// purpose  : Destructor
+//=======================================================================
+GEOMToolsGUI::~GEOMToolsGUI()
+{
+}
+
+
+//=======================================================================
+// function : OnGUIEvent()
+// purpose  : 
+//=======================================================================
+bool GEOMToolsGUI::OnGUIEvent(int theCommandID, QAD_Desktop* parent)
+{
+  GEOMToolsGUI* myGEOMToolsGUI = new GEOMToolsGUI();
+  myGEOMToolsGUI->myGeomGUI->EmitSignalDeactivateDialog();
+  SALOME_Selection* Sel = SALOME_Selection::Selection(QAD_Application::getDesktop()->getActiveStudy()->getSelection());
+
+  SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
+  switch (theCommandID)
+    {
+    case 31: // COPY
+      {
+       myGEOMToolsGUI->OnEditCopy();
+       break;
+      }
+    case 33: // DELETE
+      {
+       myGEOMToolsGUI->OnEditDelete();
+       break;
+      }
+    case 111: // IMPORT BREP
+      {
+       myGEOMToolsGUI->Import(theCommandID);
+       break;
+      }
+    case 112: // IMPORT IGES
+      {
+       myGEOMToolsGUI->Import(theCommandID);
+       break;
+      }
+    case 113: // IMPORT STEP
+      {
+       myGEOMToolsGUI->Import(theCommandID);
+       break;
+      }
+    case 121: // EXPORT BREP
+      {
+       myGEOMToolsGUI->Export(theCommandID);
+       break;
+      }
+    case 122: // EXPORT IGES
+      {
+       myGEOMToolsGUI->Export(theCommandID);
+       break;
+      }
+    case 123: // EXPORT STEP
+      {
+       myGEOMToolsGUI->Export(theCommandID);
+       break;
+      }
+    case 411: // SETTINGS - ADD IN STUDY
+      {
+       QMenuBar* Mb = QAD_Application::getDesktop()->getMainMenuBar();
+       QMenuData* pp;
+       QMenuItem* item = parent->menuBar()->findItem(411, &pp);
+       bool check = !pp->isItemChecked(411);
+       pp->setItemChecked(411,check);
+       //myGEOMToolsGUI->myGeomGUI->GetSettings_AddInStudy() = check;
+       QAD_CONFIG->addSetting("Geometry:SettingsAddInStudy", check);
+       break;
+      }
+    case 412: // SETTINGS - SHADING COLOR
+      {
+       if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() > VIEW_OCC)
+         break;
+
+       OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
+       Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
+
+       QString SCr = QAD_CONFIG->getSetting("Geometry:SettingsShadingColorRed");
+       QString SCg = QAD_CONFIG->getSetting("Geometry:SettingsShadingColorGreen");
+       QString SCb = QAD_CONFIG->getSetting("Geometry:SettingsShadingColorBlue");
+       QColor color;
+       if(!SCr.isEmpty() && !SCg.isEmpty() && !SCb.isEmpty()) {          
+         color = QColor (SCr.toInt(), SCg.toInt(), SCb.toInt());
+       } 
+       else {
+         Quantity_Color Default = Quantity_Color();
+         color = QColor ((int)Default.Red()  * 255.0, (int)Default.Green()* 255.0, (int)Default.Blue() * 255.0);
+       }
+       
+       QColor c = QColorDialog::getColor(color, QAD_Application::getDesktop());
+       if(c.isValid()) {
+         //myGEOMToolsGUI->myGeomGUI->GetShadingColor() = Quantity_Color(c.red() / 255.0, c.green() / 255.0, c.blue() / 255.0, Quantity_TOC_RGB);
+         
+         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());
+             aSh->SetShadingColor(Quantity_Color(c.red() / 255.0, c.green() / 255.0, c.blue() / 255.0, Quantity_TOC_RGB));
+             ic->Redisplay(aSh, Standard_True, Standard_True);
+           }
+           ite.Next();
+         }
+         
+         ic->UpdateCurrentViewer();
+               
+         QAD_CONFIG->addSetting("Geometry:SettingsShadingColorRed", c.red());
+         QAD_CONFIG->addSetting("Geometry:SettingsShadingColorGreen", c.green());
+         QAD_CONFIG->addSetting("Geometry:SettingsShadingColorBlue", c.blue());        
+       }
+       break;
+      }
+    case 413: // SETTINGS - ISOS
+      {
+       if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() > VIEW_OCC)
+         break;
+
+       OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
+       Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
+
+       QString IsoU = QAD_CONFIG->getSetting("Geometry:SettingsIsoU");
+       QString IsoV = QAD_CONFIG->getSetting("Geometry:SettingsIsoV");
+       if(!IsoU.isEmpty())
+         ic->DefaultDrawer()->UIsoAspect()->SetNumber(IsoU.toInt());
+       else
+         IsoU = "1";
+       if (!IsoV.isEmpty())
+         ic->DefaultDrawer()->VIsoAspect()->SetNumber(IsoV.toInt());
+       else
+         IsoV = "1";
+       
+       GEOMBase_NbIsosDlg* NbIsosDlg = new GEOMBase_NbIsosDlg(QAD_Application::getDesktop(), tr("GEOM_MEN_ISOS"), TRUE);       
+       int UIso = IsoU.toInt();
+       int VIso = IsoV.toInt();
+       
+       NbIsosDlg->SpinBoxU->setValue(UIso);
+       NbIsosDlg->SpinBoxV->setValue(VIso);
+
+       if(NbIsosDlg->exec()) {
+         UIso = NbIsosDlg->SpinBoxU->text().toInt();
+         VIso = NbIsosDlg->SpinBoxV->text().toInt();
+         
+         ic->DefaultDrawer()->UIsoAspect()->SetNumber(UIso);
+         ic->DefaultDrawer()->VIsoAspect()->SetNumber(VIso);
+         QAD_CONFIG->addSetting("Geometry:SettingsIsoU", NbIsosDlg->SpinBoxU->text()); /* text format */
+         QAD_CONFIG->addSetting("Geometry:SettingsIsoV", NbIsosDlg->SpinBoxV->text()); /* text format */
+       }
+
+       AIS_ListOfInteractive List;
+       ic->DisplayedObjects(List);
+       AIS_ListOfInteractive List1;
+       ic->ObjectsInCollector(List1);
+       List.Append(List1);
+       
+       AIS_ListIteratorOfListOfInteractive ite(List);
+       ic->InitCurrent();
+       if(ic->NbCurrents())
+         while(ite.More()) {
+           if(ite.Value()->IsInstance(STANDARD_TYPE(GEOM_AISShape))) {
+             Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(ite.Value());
+             Handle (AIS_Drawer) CurDrawer;
+             CurDrawer = aSh->Attributes();
+             CurDrawer->UIsoAspect()->SetNumber(UIso);
+             CurDrawer->VIsoAspect()->SetNumber(VIso);
+             ic->SetLocalAttributes(aSh, CurDrawer);
+             ic->Redisplay(aSh);       
+           }
+           ite.Next();
+         }
+       ic->UpdateCurrentViewer();
+       break;
+      }
+    case 414: // SETTINGS : STEP VALUE FOR SPIN BOXES
+      {
+       QString step = QAD_CONFIG->getSetting("Geometry:SettingsGeomStep");
+       if(step.isEmpty())
+         step = "100.0";
+
+       Standard_Boolean res = false;
+       double dd = myGEOMToolsGUI->myGeomBase->Parameter(res, QString("%1").arg(step), tr("GEOM_MEN_STEP_LABEL"), tr("GEOM_STEP_TITLE"), 0.001, 10000.0, 3);
+       if(res) {
+         QAD_CONFIG->addSetting("Geometry:SettingsGeomStep", QString("%1").arg(dd));
+
+         /* Emit signal to GeometryGUI_SpinBoxes */
+         myGEOMToolsGUI->myGeomGUI->EmitSignalDefaultStepValueChanged(dd);
+       }
+       else
+         parent->putInfo(tr("GEOM_PRP_ABORT"));
+       break;
+      }
+    case 804: // ADD IN STUDY - POPUP VIEWER
+      {
+       const SALOME_ListIO& ListSelected = Sel->StoredIObjects();
+       SALOME_ListIteratorOfListIO It(ListSelected);
+       for(; It.More(); It.Next()) {
+         Handle(SALOME_InteractiveObject) IObject = It.Value();
+         myGEOMToolsGUI->myGeomBase->AddInStudy(true, IObject);
+       }
+       /* Is set on the dialog box */
+       QApplication::restoreOverrideCursor();
+       break;
+      }
+    case 901: // RENAME
+      {
+       SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
+       for(; It.More(); It.Next()) {
+         Handle(SALOME_InteractiveObject) IObject = It.Value();
+
+         SALOMEDS::SObject_var obj = aStudy->FindObjectID(IObject->getEntry());
+          SALOMEDS::GenericAttribute_var anAttr;
+          SALOMEDS::AttributeName_var aName;
+         if(!obj->_is_nil()) {
+           if(obj->FindAttribute(anAttr, "AttributeName")) {
+              aName = SALOMEDS::AttributeName::_narrow(anAttr);
+
+             QString nm = QString(aName->Value());
+             nm = SALOMEGUI_NameDlg::getName(QAD_Application::getDesktop(), nm);
+             if(!nm.isEmpty()) {
+               QApplication::setOverrideCursor(Qt::waitCursor);
+               QAD_Application::getDesktop()->getActiveStudy()->renameIObject(IObject, nm);
+               QApplication::restoreOverrideCursor();
+             }
+           }
+         }
+       }
+       break;
+      }
+    case 5103: // CHECK GEOMETRY
+      {
+       QAD_PyEditor* PyEditor = QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getPyEditor();
+       PyEditor->setText("from GEOM_usinggeom import *\n");
+       PyEditor->setText(">>> ");
+       PyEditor->handleReturn();
+       break;
+      }
+    case 5104: // LOAD SCRIPT
+      {
+       QStringList filtersList;
+       filtersList.append(tr("GEOM_MEN_LOAD_SCRIPT"));
+       filtersList.append(tr("GEOM_MEN_ALL_FILES"));
+
+       QString aFile = QAD_FileDlg::getFileName(QAD_Application::getDesktop(), "", filtersList, tr("GEOM_MEN_IMPORT"), true);
+       if(!aFile.isEmpty()) {
+         QFileInfo file = aFile;
+         QApplication::setOverrideCursor(Qt::waitCursor);
+         QAD_PyEditor* PyEditor = QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getPyEditor();
+
+         PyEditor->setText("import geompy\n");
+         PyEditor->handleReturn();
+
+         QStringList aTextList = QStringList::split(".", file.fileName());
+         PyEditor->setText("geompy.Path('" + file.dirPath() + "')\n");
+         PyEditor->handleReturn();
+
+         PyEditor->setText("from " + aTextList.first() + " import *\n");
+         PyEditor->handleReturn();
+       }
+       QApplication::restoreOverrideCursor();
+       break;
+      }
+    case 8032: // COLOR - POPUP VIEWER
+      {
+       if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
+         // VTK
+         VTKViewer_RenderWindowInteractor* myRenderInter = ((VTKViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
+         
+         SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
+         Handle(SALOME_InteractiveObject) FirstIOS =  Sel->firstIObject();
+         if(!FirstIOS.IsNull()) {
+           QColor initcolor = myRenderInter->GetColor(FirstIOS);
+           QColor c = QColorDialog::getColor( initcolor, QAD_Application::getDesktop());
+           
+           if(c.isValid()) {
+             QApplication::setOverrideCursor(Qt::waitCursor);
+             for(;It.More();It.Next()) {
+               Handle(SALOME_InteractiveObject) IOS = It.Value();
+               myRenderInter->SetColor(IOS,c);
+             }
+           }
+           QApplication::restoreOverrideCursor();
+         }
+       }
+       else if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_OCC) {
+         Handle(SALOME_InteractiveObject) IO = Sel->firstIObject();
+         Standard_Boolean found;
+         Handle(GEOM_AISShape) Shape = myGEOMToolsGUI->myGeomBase->ConvertIOinGEOMAISShape(IO, found, true);
+         if(found) {
+           Quantity_Color CSFColor;
+           Shape->Color(CSFColor);
+           
+           QColor c = QColorDialog::getColor(QColor(CSFColor.Red()  * 255.0, CSFColor.Green()* 255.0, CSFColor.Blue() * 255.0), QAD_Application::getDesktop());
+           
+           if(c.isValid()) {
+             CSFColor = Quantity_Color (c.red()/255., c.green()/255., c.blue()/255., Quantity_TOC_RGB);
+             QApplication::setOverrideCursor( Qt::waitCursor );
+           
+             SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
+             for(;It.More();It.Next()) {
+               Handle(SALOME_InteractiveObject) IObject = It.Value();
+               Standard_Boolean found;
+               Handle(GEOM_AISShape) Shape = myGEOMToolsGUI->myGeomBase->ConvertIOinGEOMAISShape(IObject, found, true);
+               if(found) {
+                 Shape->SetColor(CSFColor);
+                 Shape->SetShadingColor(CSFColor);
+               }
+             }
+           }
+         }
+       }
+       QApplication::restoreOverrideCursor();
+       break;
+      }
+    case 8033: // TRANSPARENCY - POPUP VIEWER
+      {
+       OCCViewer_Viewer3d* v3d;
+       Handle(AIS_InteractiveContext) ic;
+       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();
+       }
+       GEOMBase_TransparencyDlg *aDlg = new GEOMBase_TransparencyDlg(parent, "", Sel, ic);
+       break;
+      }
+    case 8034: // ISOS - POPUP VIEWER
+      {
+       if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() > VIEW_OCC)
+         break;
+
+       OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
+       Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
+
+       ic->InitCurrent();
+       if(ic->MoreCurrent()) {
+         Handle(GEOM_AISShape) CurObject = Handle(GEOM_AISShape)::DownCast(ic->Current());
+         QString IsoU = QAD_CONFIG->getSetting("Geometry:SettingsIsoU");
+         QString IsoV = QAD_CONFIG->getSetting("Geometry:SettingsIsoV");
+
+         if(!IsoU.isEmpty())
+           ic->DefaultDrawer()->UIsoAspect()->SetNumber(IsoU.toInt());
+         else
+           IsoU = "1";
+         if (!IsoV.isEmpty())
+           ic->DefaultDrawer()->VIsoAspect()->SetNumber(IsoV.toInt());
+         else
+           IsoV = "1";
+           
+         GEOMBase_NbIsosDlg * NbIsosDlg =
+           new GEOMBase_NbIsosDlg(QAD_Application::getDesktop(), tr("GEOM_MEN_ISOS"), TRUE);
+    
+         NbIsosDlg->SpinBoxU->setValue(IsoU.toInt());
+         NbIsosDlg->SpinBoxV->setValue(IsoV.toInt());
+
+         if(NbIsosDlg->exec()) {
+           QApplication::setOverrideCursor(Qt::waitCursor);
+           for(; ic->MoreCurrent(); ic->NextCurrent()) {
+             Handle(AIS_Drawer) CurDrawer;
+             
+             CurDrawer = ic->Current()->Attributes();
+             CurDrawer->UIsoAspect()->SetNumber(NbIsosDlg->SpinBoxU->text().toInt());
+             CurDrawer->VIsoAspect()->SetNumber(NbIsosDlg->SpinBoxV->text().toInt());
+               
+             ic->SetLocalAttributes(CurObject, CurDrawer);
+             ic->Redisplay(CurObject);
+           }
+         }
+       }
+       QApplication::restoreOverrideCursor();
+       break;
+      }
+    case 9024 : // OPEN - OBJBROSER POPUP
+      {
+       SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
+       Handle(SALOME_InteractiveObject) anIObject;
+       for(;It.More();It.Next()) {
+         anIObject = It.Value();
+         SALOMEDS::SObject_var obj = aStudy->FindObjectID(anIObject->getEntry());
+         SALOMEDS::AttributePersistentRef_var aPersist;
+         SALOMEDS::AttributeIOR_var anIOR;
+         if(!obj->_is_nil()) {
+           // this SObject may be GEOM module root SObject
+           SALOMEDS::ChildIterator_var anIter = aStudy->NewChildIterator(obj);
+           SALOMEDS::GenericAttribute_var anAttr;
+           bool useSubItems = false;
+           while (anIter->More() && !useSubItems) {
+             SALOMEDS::SObject_var subobj = anIter->Value();
+             if (subobj->FindAttribute(anAttr, "AttributePersistentRef")) {
+               useSubItems = true;
+               obj = subobj;
+             }
+             else 
+               anIter->Next();
+           }
+           obj->FindAttribute(anAttr, "AttributePersistentRef");
+             
+           while(useSubItems?anIter->More():!anAttr->_is_nil()) { 
+             if(!obj->FindAttribute(anAttr, "AttributeIOR") &&
+                 obj->FindAttribute(anAttr, "AttributePersistentRef")) {
+               // load
+               Engines::Component_var comp = QAD_Application::getDesktop()->getEngine("FactoryServer","GEOM");
+               if (!CORBA::is_nil(comp)) {
+                 SALOMEDS::Driver_var driver = SALOMEDS::Driver::_narrow(comp);
+                 SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
+                 aStudyBuilder->LoadWith(aStudy->FindComponent("GEOM"),driver);
+               } 
+               else {
+                 MESSAGE("Component is null");
+               }
+             }
+             if(useSubItems) {
+               anIter->Next();
+               obj = anIter->Value();
+             } 
+             else 
+               anAttr = SALOMEDS::GenericAttribute::_nil();
+           }
+         }
+       }
+       break;
+      }
+    default:
+      {
+       parent->putInfo(tr("GEOM_PRP_COMMAND").arg(theCommandID));
+       break;
+      }
+    }
+  return true;
+}
+
+
+//===============================================================================
+// function : OnEditDelete()
+// purpose  :
+//===============================================================================
+void GEOMToolsGUI::OnEditDelete()
+{
+  SALOME_Selection* Sel = SALOME_Selection::Selection(QAD_Application::getDesktop()->getActiveStudy()->getSelection());
+  if(Sel->IObjectCount() == 0)
+    return;
+
+  if(QAD_MessageBox::warn2(QAD_Application::getDesktop(), tr("GEOM_WRN_WARNING"), tr("GEOM_REALLY_DELETE"), tr("GEOM_BUT_YES"), tr("GEOM_BUT_NO"), 1, 0, 0) != 1)
+    return;
+       
+  int nbSf = QAD_Application::getDesktop()->getActiveStudy()->getStudyFramesCount();
+    
+  Standard_Boolean found;
+  SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
+  SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
+  SALOMEDS::GenericAttribute_var anAttr;
+  SALOMEDS::AttributeIOR_var anIOR;
+  
+  SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
+  for(;It.More();It.Next()) {
+    Handle(SALOME_InteractiveObject) IObject = It.Value();
+    if(IObject->hasEntry()) {
+      SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
+      SALOMEDS::SObject_var SO = aStudy->FindObjectID(IObject->getEntry());
+      
+      /* Erase child graphical objects */
+      SALOMEDS::ChildIterator_var it = aStudy->NewChildIterator(SO);
+      for(; it->More();it->Next()) {
+       SALOMEDS::SObject_var CSO= it->Value();
+       if(CSO->FindAttribute(anAttr, "AttributeIOR") ) {
+          anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
+         /* Delete child(s) shape in Client : */
+         const TCollection_AsciiString ASCior(anIOR->Value()) ;
+         myGeomGUI->GetShapeReader().RemoveShapeFromBuffer(ASCior);
+
+         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) myContext = v3d->getAISContext();
+             Handle(GEOM_AISShape) Result = myGeomBase->ConvertIORinGEOMAISShape(anIOR->Value(), found);
+             if(found)
+               myContext->Erase(Result, true, false);
+           }
+           else if(sf->getTypeView() == VIEW_VTK) {
+             //vtkRenderer* Renderer = ((VTKViewer_ViewFrame*)sf->getRightFrame()->getViewFrame())->getRenderer();
+             VTKViewer_RenderWindowInteractor* myRenderInter = ((VTKViewer_ViewFrame*)sf->getRightFrame()->getViewFrame())->getRWInteractor();
+             GEOM_Actor* ac = myGeomBase->ConvertIORinGEOMActor(anIOR->Value(), found);
+             if(found) {
+               //Renderer->RemoveActor(ac);
+               if(ac->hasIO()) 
+                 myRenderInter->Remove(ac->getIO());
+             }
+           }
+         }
+       }
+      }
+      
+      /* Erase main graphical object */
+      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) myContext = v3d->getAISContext();
+         Handle(GEOM_AISShape) Result = myGeomBase->ConvertIOinGEOMAISShape(IObject, found );
+         if(found)
+           myContext->Erase(Result, true, false);
+       }
+       else if(sf->getTypeView() == VIEW_VTK) {
+         VTKViewer_RenderWindowInteractor* myRenderInter= ((VTKViewer_ViewFrame*)sf->getRightFrame()->getViewFrame())->getRWInteractor();
+         myRenderInter->Remove( IObject );
+       }
+      }
+      
+      /* Delete main shape in Client : */
+      if(SO->FindAttribute(anAttr, "AttributeIOR")) {
+        anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
+       const TCollection_AsciiString ASCIor(anIOR->Value()) ;
+       myGeomGUI->GetShapeReader().RemoveShapeFromBuffer(ASCIor);
+      }
+
+      /* Erase objects in Study */
+      SALOMEDS::SObject_var obj = aStudy->FindObjectID(IObject->getEntry());
+      if(!obj->_is_nil()) {
+       QAD_Operation* op = new SALOMEGUI_ImportOperation(QAD_Application::getDesktop()->getActiveStudy());
+       op->start();
+       aStudyBuilder->RemoveObject(obj);
+       op->finish();
+      }
+
+    } /* IObject->hasEntry() */
+  }   /* more/next           */
+
+  /* Clear any previous selection */
+  Sel->ClearIObjects(); 
+  QAD_Application::getDesktop()->getActiveStudy()->updateObjBrowser();
+}
+
+
+//==============================================================================
+// function : OnEditCopy()
+// purpose  :
+//==============================================================================
+void GEOMToolsGUI::OnEditCopy()
+{
+  SALOME_Selection* Sel = SALOME_Selection::Selection(QAD_Application::getDesktop()->getActiveStudy()->getSelection() );
+  GEOM::GEOM_Gen::ListOfIOR_var listIOR = new GEOM::GEOM_Gen::ListOfIOR;
+
+  const SALOME_ListIO& List = Sel->StoredIObjects();
+
+  myGeomBase->ConvertListOfIOInListOfIOR(List, listIOR);
+
+  Sel->ClearIObjects();
+
+  for (unsigned int ind = 0; ind < listIOR->length();ind++) {
+    GEOM::GEOM_Shape_var aShapeInit = myGeom->GetIORFromString(listIOR[ind]);
+    try {
+      GEOM::GEOM_Shape_var result = myGeom->MakeCopy(aShapeInit) ;
+      result->NameType( aShapeInit->NameType() );
+      myGeomBase->Display(result);
+    }
+    catch  (const SALOME::SALOME_Exception& S_ex) {
+      QtCatchCorbaException(S_ex);
+    }
+  }
+  
+  QAD_Application::getDesktop()->putInfo(tr("GEOM_PRP_READY"));
+}
+
+
+//=====================================================================================
+// function : Import
+// purpose  : BRep, Iges, Step
+//=====================================================================================
+bool GEOMToolsGUI::Import(int aState)
+{
+  SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
+  SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
+  
+  GEOM::GEOM_Shape_var aShape;
+  QString file;
+  QStringList filtersList;
+  
+  switch(aState)
+    {
+    case 111 : // Import BREP
+      {
+       filtersList.append(tr("GEOM_MEN_IMPORT_BREP"));
+       filtersList.append(tr("GEOM_MEN_ALL_FILES"));
+
+       file = QAD_FileDlg::getFileName(QAD_Application::getDesktop(), "", filtersList, tr("GEOM_MEN_IMPORT"), true);
+       if(!file.isEmpty()) {
+         QApplication::setOverrideCursor(Qt::waitCursor);
+         try {
+           aShape = myGeom->ImportBREP(file.latin1());
+         }
+         catch(const SALOME::SALOME_Exception& S_ex) {
+           QtCatchCorbaException(S_ex);
+         }
+       }
+       break;
+      }
+    case 112 : // Import IGES
+      {
+       filtersList.append( tr("GEOM_MEN_IMPORT_IGES") ) ;
+       filtersList.append( tr("GEOM_MEN_ALL_FILES") ) ;
+
+       file = QAD_FileDlg::getFileName(QAD_Application::getDesktop(),
+                                       "",
+                                       filtersList,
+                                       tr("GEOM_MEN_IMPORT"),
+                                       true);
+       if ( !file.isEmpty() ) {
+         QApplication::setOverrideCursor( Qt::waitCursor );
+         try {
+           aShape = myGeom->ImportIGES( file.latin1() );
+         }
+         catch (const SALOME::SALOME_Exception& S_ex) {
+           QtCatchCorbaException(S_ex);
+         }
+       }
+       break;
+      }
+    case 113 : // Import STEP
+      {
+       filtersList.append( tr("GEOM_MEN_IMPORT_STEP") ) ;
+       filtersList.append( tr("GEOM_MEN_ALL_FILES") ) ;
+
+       file = QAD_FileDlg::getFileName(QAD_Application::getDesktop(),
+                                       "",
+                                       filtersList,
+                                       tr("GEOM_MEN_IMPORT"),
+                                       true);
+       if ( !file.isEmpty() ) {
+         QApplication::setOverrideCursor( Qt::waitCursor );
+         try {
+           aShape = myGeom->ImportSTEP( file.latin1() );
+         }
+         catch  (const SALOME::SALOME_Exception& S_ex) {
+           QtCatchCorbaException(S_ex);
+         }
+       }
+       break;
+      }
+    }
+  
+  if ( !file.isEmpty() ) {
+    QAD_Application::getDesktop()->putInfo( tr("GEOM_PRP_LOADING").arg(QAD_Tools::getFileNameFromPath( file )) );
+
+    SALOMEDS::SComponent_var father = aStudy->FindComponent("GEOM");
+    SALOMEDS::SObject_var fatherSF = aStudy->FindObjectID(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->entry());
+    SALOMEDS::GenericAttribute_var anAttr;
+    SALOMEDS::AttributeName_var    aName;
+    SALOMEDS::AttributePixMap_var  aPixmap;
+    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( tr("GEOM_MEN_COMPONENT") );
+      aName->SetValue(QAD_Application::getDesktop()->getComponentUserName( "GEOM" ) );
+      anAttr = aStudyBuilder->FindOrCreateAttribute(father, "AttributePixMap");
+      aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
+      aPixmap->SetPixMap( "ICON_OBJBROWSER_Geometry" );
+      if (aLocked) aStudy->GetProperties()->SetLocked(true);
+      op->finish();
+    }
+//      if (aLocked) return false;
+    aStudyBuilder->DefineComponentInstance( father, myGeom );
+    father->ComponentIOR(myGeomGUI->GetFatherior());
+
+    QString nameShape = QAD_Tools::getFileNameFromPath(file,false) +  QString("_%1").arg(myGeomGUI->GetNbGeom()++);
+
+    if(myGeomBase->Display(aShape, strdup(nameShape.latin1()))) {
+      QAD_Application::getDesktop()->getActiveStudy()->setMessage( tr("GEOM_INF_LOADED").arg(QAD_Tools::getFileNameFromPath( file )) );
+      QAD_Application::getDesktop()->putInfo( tr("GEOM_PRP_READY"));
+    }
+  }
+  QApplication::restoreOverrideCursor();
+  return true;
+}
+
+
+//=====================================================================================
+// function : Export
+// purpose  : BRep, Iges, Step
+//=====================================================================================
+bool GEOMToolsGUI::Export(int aState)
+{
+  SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
+  SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
+
+  GEOM::GEOM_Shape_var aShape;
+
+  static QString filters[] = { tr("GEOM_MEN_IMPORT_BREP"),
+                              tr("GEOM_MEN_IMPORT_IGES"),
+                              tr("GEOM_MEN_IMPORT_STEP") };
+  
+  SALOME_Selection* Sel = SALOME_Selection::Selection(QAD_Application::getDesktop()->getActiveStudy()->getSelection());
+  SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
+
+  switch (aState)
+    {
+    case 121 :
+      {
+       for(;It.More();It.Next()) {
+         QApplication::restoreOverrideCursor();
+         Handle(SALOME_InteractiveObject) IObject = It.Value();
+         Standard_Boolean found;
+         GEOM::GEOM_Shape_var aShape = myGeomBase->ConvertIOinGEOMShape(IObject, found);
+         //      Handle(GEOM_AISShape) Shape = myGeomGUI->ConvertIOinGEOMAISShape(IObject, found, true);
+         if ( found ) {
+           QString file = QAD_FileDlg::getFileName(QAD_Application::getDesktop(), 
+                                                   QString( IObject->getName() ) + ".brep",
+                                                   tr("GEOM_MEN_IMPORT_BREP"),
+                                                   tr("GEOM_MEN_EXPORT"),
+                                                   false);
+           if ( !file.isEmpty() && !aShape->_is_nil() ) {
+             QApplication::setOverrideCursor( Qt::waitCursor );
+             //      Standard_Boolean result = BRepTools::Write(Shape->Shape(), strdup(file.latin1()) );
+             try {
+               myGeom->ExportBREP(strdup( file.latin1()), aShape);
+             }  
+             catch (const SALOME::SALOME_Exception& S_ex) {
+               QtCatchCorbaException(S_ex);
+             }
+           }
+         }
+       }
+       break;
+      }
+    case 122 :
+      {
+       for(;It.More();It.Next()) {
+         QApplication::restoreOverrideCursor();
+         Handle(SALOME_InteractiveObject) IObject = It.Value();
+         Standard_Boolean found;
+         GEOM::GEOM_Shape_var aShape = myGeomBase->ConvertIOinGEOMShape(IObject, found);
+         //      Handle(GEOM_AISShape) Shape = myGeomGUI->ConvertIOinGEOMAISShape(IObject, found, true);
+         if ( found ) {
+           QString file = QAD_FileDlg::getFileName(QAD_Application::getDesktop(), 
+                                                   QString( IObject->getName() ) + ".igs",
+                                                   tr("GEOM_MEN_IMPORT_IGES"),
+                                                   tr("GEOM_MEN_EXPORT"),
+                                                   false);
+           if ( !file.isEmpty() && !aShape->_is_nil() ) {
+             QApplication::setOverrideCursor( Qt::waitCursor );
+             try {
+               myGeom->ExportIGES(strdup( file.latin1()), aShape);
+             }  
+             catch (const SALOME::SALOME_Exception& S_ex) {
+               QtCatchCorbaException(S_ex);
+             }
+//           //VRV: OCC 4.0 migration
+//           IGESControl_Controller::Init();
+//           IGESControl_Writer ICW (Interface_Static::CVal("XSTEP.iges.unit"),
+//                                      Interface_Static::IVal("XSTEP.iges.writebrep.mode"));
+//           //VRV: OCC 4.0 migration
+
+//           ICW.AddShape (Shape->Shape());
+//           ICW.ComputeModel();
+//           Standard_Boolean result = ICW.Write( strdup(file.latin1()) );
+           }
+         }
+       }
+       break;
+      }
+
+    case 123 :
+      {
+//     bool test = false ;
+//     IFSelect_ReturnStatus status ;
+//     //VRV: OCC 4.0 migration
+//     STEPControl_Writer aWriter;
+//     //VRV: OCC 4.0 migration
+       QString file;
+
+       for( ; It.More(); It.Next() ) {
+//       GEOM::GEOM_Shape_var aShape = myGeomBase->ConvertIOinGEOMShape(IObject, found);
+         QApplication::restoreOverrideCursor();
+         Handle(SALOME_InteractiveObject) IObject = It.Value();
+         Standard_Boolean found;
+         GEOM::GEOM_Shape_var aShape = myGeomBase->ConvertIOinGEOMShape(IObject, found);
+         //      Handle(GEOM_AISShape) Shape = myGeomBase->ConvertIOinGEOMAISShape(IObject, found, true);
+         if ( found ) {
+           file = QAD_FileDlg::getFileName(QAD_Application::getDesktop(), 
+                                           QString( IObject->getName() ) + ".stp",
+                                           tr("GEOM_MEN_IMPORT_STEP"),
+                                           tr("GEOM_MEN_EXPORT"),
+                                           false);
+           if ( !file.isEmpty() && !aShape->_is_nil() ) {
+
+             QApplication::setOverrideCursor( Qt::waitCursor ) ;       
+             try {   
+               myGeom->ExportSTEP(strdup( file.latin1()), aShape);   
+             }  
+             catch (const SALOME::SALOME_Exception& S_ex) {
+               QtCatchCorbaException(S_ex);
+             }
+//           //VRV: OCC 4.0 migration
+//           status = aWriter.Transfer( Shape->Shape(), STEPControl_ManifoldSolidBrep ) ;
+//           //VRV: OCC 4.0 migration
+//           test = true ;
+//           if ( status != IFSelect_RetDone ) {
+//             QApplication::restoreOverrideCursor() ;
+//             return false ;
+//           }
+           }
+         }
+       }
+//     if(test) {
+//       status = aWriter.Write( strdup(file.latin1()) ) ;
+//       QApplication::restoreOverrideCursor() ;
+//       return status ;
+//     }
+       break;
+      }
+
+    }
+  QApplication::restoreOverrideCursor() ;
+}
+
+
+//=====================================================================================
+// EXPORTED METHODS
+//=====================================================================================
+extern "C"
+{
+  bool OnGUIEvent(int theCommandID, QAD_Desktop* parent)
+  {return GEOMToolsGUI::OnGUIEvent(theCommandID, parent);}
+}
diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.h b/src/GEOMToolsGUI/GEOMToolsGUI.h
new file mode 100644 (file)
index 0000000..8296fdb
--- /dev/null
@@ -0,0 +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 
+//
+//
+//
+//  File   : GEOMBase_Tools.h
+//  Author : Damien COQUERET
+//  Module : GEOM
+//  $Header: 
+
+#ifndef GEOMTOOLSGUI_H
+#define GEOMTOOLSGUI_H
+
+#include "GEOMBase.h"
+
+//=================================================================================
+// class    : GEOMBase_Tools
+// purpose  :
+//=================================================================================
+class GEOMToolsGUI : public QObject
+{
+  Q_OBJECT /* for QT compatibility */
+
+public :
+  GEOMToolsGUI();
+  ~GEOMToolsGUI();
+
+  static bool OnGUIEvent(int theCommandID, QAD_Desktop* parent);
+
+  /* Import and export topology methods */
+  bool Import(int aState);
+  bool Export(int aState); 
+  
+  void OnEditCopy();
+  void OnEditDelete();
+
+  GEOMBase* myGeomBase;
+  GEOMContext* myGeomGUI;
+  GEOM::GEOM_Gen_var myGeom;   /* Current Geom Component */
+
+};
+
+#endif
diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.cxx
new file mode 100644 (file)
index 0000000..5ef80f6
--- /dev/null
@@ -0,0 +1,131 @@
+//  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 
+//
+//
+//
+//  File   : GEOMBase_NbIsosDlg.cxx
+//  Author : 
+//  Module : GEOM
+//  $Header: 
+
+using namespace std;
+#include "GEOMToolsGUI_NbIsosDlg.h"
+#include "QAD_Tools.h"
+
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qgroupbox.h>
+#include <qlayout.h>
+#include <qspinbox.h>
+
+//=================================================================================
+// class    : GEOMBase_NbIsosDlg()
+// purpose  : Constructs a GEOMBase_NbIsosDlg which is a child of 'parent', with the 
+//            name 'name' and widget flags set to 'f'.
+//            The dialog will by default be modeless, unless you set 'modal' to
+//            TRUE to construct a modal dialog.
+//=================================================================================
+GEOMBase_NbIsosDlg::GEOMBase_NbIsosDlg(QWidget* parent, const char* name, bool modal, WFlags fl)
+  :QDialog( parent, name, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu)
+{
+  if( !name )
+    setName("GEOMBase_NbIsosDlg");
+  setCaption(name);
+  setSizeGripEnabled(TRUE);
+  QGridLayout* MyDialogLayout = new QGridLayout(this); 
+  MyDialogLayout->setSpacing(6);
+  MyDialogLayout->setMargin(11);
+  
+  /***************************************************************/
+  QGroupBox* GroupC1 = new QGroupBox( this, "GroupC1" );
+  GroupC1->setColumnLayout(0, Qt::Vertical );
+  GroupC1->layout()->setSpacing( 0 );
+  GroupC1->layout()->setMargin( 0 );
+  QGridLayout* GroupC1Layout = new QGridLayout( GroupC1->layout() );
+  GroupC1Layout->setAlignment( Qt::AlignTop );
+  GroupC1Layout->setSpacing( 6 );
+  GroupC1Layout->setMargin( 11 );
+  
+  TextLabel1 = new QLabel( GroupC1, "TextLabel1" );
+  TextLabel1->setText( tr( "GEOM_MEN_ISOU") );
+  GroupC1Layout->addWidget( TextLabel1, 0, 0 );
+  
+  SpinBoxU = new QSpinBox( GroupC1, "SpinBoxU" );
+  SpinBoxU->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
+  SpinBoxU->setMinValue( 1 );
+  SpinBoxU->setValue( 1 );
+  GroupC1Layout->addWidget( SpinBoxU, 0, 1 );
+
+  TextLabel2 = new QLabel( GroupC1, "TextLabel2" );
+  TextLabel2->setText( tr( "GEOM_MEN_ISOV") ) ;
+  GroupC1Layout->addWidget( TextLabel2, 0, 2 );
+
+  SpinBoxV = new QSpinBox( GroupC1, "SpinBoxV");
+  SpinBoxV->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
+  SpinBoxV->setValue( 1 );
+  SpinBoxV->setMinValue( 1 );
+  GroupC1Layout->addWidget( SpinBoxV, 0, 3 );
+  
+  /***************************************************************/
+  QGroupBox* GroupButtons = new QGroupBox( this, "GroupButtons" );
+  GroupButtons->setColumnLayout(0, Qt::Vertical );
+  GroupButtons->layout()->setSpacing( 0 );
+  GroupButtons->layout()->setMargin( 0 );
+  QGridLayout* GroupButtonsLayout = new QGridLayout( GroupButtons->layout() );
+  GroupButtonsLayout->setAlignment( Qt::AlignTop );
+  GroupButtonsLayout->setSpacing( 6 );
+  GroupButtonsLayout->setMargin( 11 );
+  
+  buttonOk = new QPushButton( GroupButtons, "buttonOk" );
+  buttonOk->setText( tr( "GEOM_BUT_OK" ) ) ;
+  buttonOk->setAutoDefault( TRUE );
+  buttonOk->setDefault( TRUE );
+  GroupButtonsLayout->addWidget( buttonOk, 0, 0 );
+  
+  GroupButtonsLayout->addItem( new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ), 0, 1 );
+  
+  buttonCancel = new QPushButton( GroupButtons, "buttonCancel" );
+  buttonCancel->setText( tr( "GEOM_BUT_CANCEL" ) ) ;
+  buttonCancel->setAutoDefault( TRUE );
+  GroupButtonsLayout->addWidget( buttonCancel, 0, 2 );
+  /***************************************************************/
+  
+  MyDialogLayout->addWidget(GroupC1, 0, 0);
+  MyDialogLayout->addWidget(GroupButtons, 1, 0);
+  
+  // signals and slots connections
+  connect(buttonOk, SIGNAL(clicked()), this, SLOT(accept()));
+  connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject()));
+  
+  /* Move widget on the botton right corner of main widget */
+  QAD_Tools::centerWidget(this, parent);
+}
+
+
+//=================================================================================
+// function : ~GEOMBase_NbIsosDlg()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+GEOMBase_NbIsosDlg::~GEOMBase_NbIsosDlg()
+{
+    // no need to delete child widgets, Qt does it all for us
+}
diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.h b/src/GEOMToolsGUI/GEOMToolsGUI_NbIsosDlg.h
new file mode 100644 (file)
index 0000000..48c70c5
--- /dev/null
@@ -0,0 +1,59 @@
+//  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 
+//
+//
+//
+//  File   : GEOMBase_NbIsosDlg.h
+//  Author : 
+//  Module : GEOM
+//  $Header: 
+
+#ifndef GEOMBASE_NBISOSDLG_H
+#define GEOMBASE_NBISOSDLG_H
+
+#include <qdialog.h>
+
+class QLabel;
+class QSpinBox;
+class QPushButton;
+
+//=================================================================================
+// class    : GEOMBase_NbIsosDlg
+// purpose  :
+//=================================================================================
+class GEOMBase_NbIsosDlg : public QDialog
+{ 
+    Q_OBJECT
+
+public:
+    GEOMBase_NbIsosDlg(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0);
+    ~GEOMBase_NbIsosDlg();
+
+    QPushButton* buttonOk;
+    QPushButton* buttonCancel;
+    QLabel* TextLabel1;
+    QLabel* TextLabel2;
+    QSpinBox* SpinBoxU;
+    QSpinBox* SpinBoxV;
+
+};
+
+#endif // GEOMETRYGUI_NBISOSDLG_H
diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.cxx
new file mode 100644 (file)
index 0000000..6fab217
--- /dev/null
@@ -0,0 +1,239 @@
+//  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 
+//
+//
+//
+//  File   : GEOMBase_TransparencyDlg.cxx
+//  Author : Lucien PIGNOLONI
+//  Module : GEOM
+
+using namespace std;
+#include "GEOMToolsGUI_TransparencyDlg.h"
+
+#include "QAD_RightFrame.h"
+#include "SALOME_ListIteratorOfListIO.hxx"
+#include <AIS_InteractiveContext.hxx>
+
+#include <qframe.h>
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qslider.h>
+#include <qlayout.h>
+#include <qvariant.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include <qapplication.h>
+#include <qgroupbox.h>
+
+#include "VTKViewer_ViewFrame.h"
+#include "VTKViewer_RenderWindowInteractor.h"
+
+//=================================================================================
+// class    : GEOMBase_TransparencyDlg()
+// purpose  : Constructs a GEOMBase_SUBSHAPE which is a child of 'parent', with the
+//            name 'name' and widget flags set to 'f'.
+//
+//          : WARNING : this dialog is modal !
+//
+//=================================================================================
+GEOMBase_TransparencyDlg::GEOMBase_TransparencyDlg(QWidget* parent, const char* name, SALOME_Selection* Sel, const Handle(AIS_InteractiveContext)& ic, bool modal, WFlags fl)
+  :QDialog(parent, name, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu)
+{
+  if(!name)
+    setName("GEOMBase_TransparencyDlg");
+  resize(152, 107); 
+  setCaption(tr("GEOM_TRANSPARENCY_TITLE"));
+  setSizeGripEnabled(TRUE);
+  GEOMBase_TransparencyDlgLayout = new QGridLayout(this); 
+  GEOMBase_TransparencyDlgLayout->setSpacing(6);
+  GEOMBase_TransparencyDlgLayout->setMargin(11);
+
+  /*************************************************************************/
+  QGroupBox* GroupButtons = new QGroupBox( this, "GroupButtons" );
+  GroupButtons->setColumnLayout(0, Qt::Vertical );
+  GroupButtons->layout()->setSpacing( 0 );
+  GroupButtons->layout()->setMargin( 0 );
+  QGridLayout* GroupButtonsLayout = new QGridLayout( GroupButtons->layout() );
+  GroupButtonsLayout->setAlignment( Qt::AlignTop );
+  GroupButtonsLayout->setSpacing( 6 );
+  GroupButtonsLayout->setMargin( 11 );
+  
+  buttonOk = new QPushButton( GroupButtons, "buttonOk" );
+  buttonOk->setText( tr( "GEOM_BUT_OK" ) );
+  buttonOk->setAutoDefault( TRUE );
+  buttonOk->setDefault( TRUE );
+  GroupButtonsLayout->addItem( new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, 0 );
+  GroupButtonsLayout->addWidget( buttonOk, 0, 1 );
+  GroupButtonsLayout->addItem( new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, 2 );
+
+  /*************************************************************************/
+  QGroupBox* GroupC1 = new QGroupBox( this, "GroupC1" );
+  GroupC1->setColumnLayout(0, Qt::Vertical );
+  GroupC1->layout()->setSpacing( 0 );
+  GroupC1->layout()->setMargin( 0 );
+  QGridLayout* GroupC1Layout = new QGridLayout( GroupC1->layout() );
+  GroupC1Layout->setAlignment( Qt::AlignTop );
+  GroupC1Layout->setSpacing( 6 );
+  GroupC1Layout->setMargin( 11 );
+  
+  TextLabelOpaque = new QLabel( GroupC1, "TextLabelOpaque" );
+  TextLabelOpaque->setText( tr( "GEOM_TRANSPARENCY_OPAQUE"  ) );
+  TextLabelOpaque->setAlignment( int( QLabel::AlignLeft ) );
+  GroupC1Layout->addWidget( TextLabelOpaque, 0, 0 );
+  GroupC1Layout->addItem( new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ), 0, 1 );
+  
+  TextLabelTransparent = new QLabel( GroupC1, "TextLabelTransparent" );
+  TextLabelTransparent->setText( tr( "GEOM_TRANSPARENCY_TRANSPARENT"  ) );
+  TextLabelTransparent->setAlignment( int( QLabel::AlignRight ) );
+  GroupC1Layout->addWidget( TextLabelTransparent, 0, 2 );
+  
+  Slider1 = new QSlider( 0, 10, 1, 5, Horizontal, GroupC1, "Slider1" );
+  Slider1->setMinimumSize( 300, 0 );
+  Slider1->setTickmarks( QSlider::Left );
+  GroupC1Layout->addMultiCellWidget( Slider1, 1, 1, 0, 2 );
+  /*************************************************************************/
+  
+  GEOMBase_TransparencyDlgLayout->addWidget(GroupC1, 0,  0);
+  GEOMBase_TransparencyDlgLayout->addWidget(GroupButtons, 1, 0);
+  
+  /* Initialisations */
+  this->myGeomGUI = GEOMContext::GetGeomGUI();
+  this->myGeomBase = new GEOMBase();
+  this->myIc = ic;
+  this->mySel = Sel;
+  
+  /* First call valueChanged() method for initialisation               */
+  /* The default value of transparency will change with the selection  */
+  this->myFirstInit = true;
+//  Slider1->setMaxValue( 10 );
+//  Slider1->setValue( 5 ) ;
+  this->ValueHasChanged(Slider1->value());
+  
+  // signals and slots connections : after ValueHasChanged()
+  connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
+  connect(Slider1, SIGNAL(valueChanged(int)), this, SLOT(ValueHasChanged(int)));
+  
+  /* Move widget on the botton right corner of main widget */
+  int x, y ;
+  myGeomBase->DefineDlgPosition(this, x, y);
+  this->move(x, y) ;
+  this->show() ; /* Displays this Dialog */
+}
+
+
+//=================================================================================
+// function : ~GEOMBase_TransparencyDlg()
+// purpose  :
+//=================================================================================
+GEOMBase_TransparencyDlg::~GEOMBase_TransparencyDlg()
+{
+    // no need to delete child widgets, Qt does it all for us
+}
+
+
+//=======================================================================
+// function : ClickOnOk()
+// purpose  :
+//=======================================================================
+void GEOMBase_TransparencyDlg::ClickOnOk()
+{
+  accept();
+  return;
+}
+
+
+//=======================================================================
+// function : ClickOnClose()
+// purpose  :
+//=======================================================================
+void GEOMBase_TransparencyDlg::ClickOnClose()
+{
+  accept();
+  return;
+}
+
+
+//=================================================================================
+// function : ValueHasChanged()
+// purpose  : Called when value of slider change
+//          : or the first time as initilisation
+//=================================================================================
+void GEOMBase_TransparencyDlg::ValueHasChanged(int newValue)
+{
+  if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
+    // VTK
+    VTKViewer_RenderWindowInteractor* myRenderInter= ((VTKViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
+    SALOME_ListIteratorOfListIO It(this->mySel->StoredIObjects());
+
+    Handle(SALOME_InteractiveObject) FirstIOS =  mySel->firstIObject();
+    if(!FirstIOS.IsNull()) {
+      /* The first time as initialisation */
+      if(this->myFirstInit) {  
+       this->myFirstInit = false;
+       float transp = (myRenderInter->GetTransparency(FirstIOS))*10.0;
+        this->Slider1->setValue(int(transp));
+      }
+    }
+    
+    QApplication::setOverrideCursor(Qt::waitCursor);
+    for(;It.More(); It.Next()) {
+      Handle(SALOME_InteractiveObject) IOS = It.Value();
+      myRenderInter->SetTransparency(IOS, newValue/10.0);
+    }
+    QApplication::restoreOverrideCursor();
+  }
+
+  else if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_OCC) {
+    // OCC  
+    SALOME_ListIteratorOfListIO It(this->mySel->StoredIObjects());
+    Handle(SALOME_InteractiveObject) FirstIOS = mySel->firstIObject();
+    if(!FirstIOS.IsNull()) {
+      
+      /* The first time as initialisation */
+      if(this->myFirstInit) {
+       this->myFirstInit = false;
+       Standard_Boolean found;
+       Handle(GEOM_AISShape) Shape = myGeomBase->ConvertIOinGEOMAISShape(FirstIOS, found);
+       if(!found)
+         return;
+       float transp = (int(Shape->Transparency() * 10.0 + 0.001));
+        this->Slider1->setValue(int(transp));
+       return;
+      }
+    }
+
+    QApplication::setOverrideCursor(Qt::waitCursor);
+    for(;It.More(); It.Next()) {
+      Handle(SALOME_InteractiveObject) IObject = It.Value();
+      Standard_Boolean found;
+      Handle(GEOM_AISShape) Shape = myGeomBase->ConvertIOinGEOMAISShape(IObject, found);      
+      if(!found) {
+       QApplication::restoreOverrideCursor();
+       return;
+      }
+      this->myIc->SetTransparency(Shape, newValue / 10.0, false);
+      myIc->Redisplay(Shape, Standard_False, Standard_True);
+    }
+    myIc->UpdateCurrentViewer();
+  }
+  QApplication::restoreOverrideCursor();
+  return;
+}
diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.h b/src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.h
new file mode 100644 (file)
index 0000000..fbcc4ef
--- /dev/null
@@ -0,0 +1,98 @@
+//  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 
+//
+//
+//
+//  File   : GEOMBase_TransparencyDlg.h
+//  Author : Lucien PIGNOLONI
+//  Module : GEOM
+//  $Header$
+
+#ifndef DIALOGBOX_TRANSPARENCYDLG_H
+#define DIALOGBOX_TRANSPARENCYDLG_H
+
+#include <qvariant.h>
+#include <qdialog.h>
+
+/* #include "SALOME_Selection.h" */
+/* #include "SALOME_InteractiveObject.hxx" */
+/* #include "GEOM_InteractiveObject.hxx" */
+/* #include "GEOM_AISShape.hxx" */
+
+#include "GEOMBase.h"
+
+
+class QVBoxLayout;
+class QHBoxLayout;
+class QGridLayout;
+class QFrame;
+class QLabel;
+class QPushButton;
+class QSlider;
+
+
+
+//=================================================================================
+// class    : GEOMBase_TransparencyDlg
+// purpose  :
+//          : WARNING : that is a MODAL dialog.
+//=================================================================================
+class GEOMBase_TransparencyDlg : public QDialog
+{ 
+    Q_OBJECT
+
+public:
+    GEOMBase_TransparencyDlg( QWidget* parent = 0,
+                                const char* name = 0,
+                                SALOME_Selection* Sel = 0,
+                                const Handle(AIS_InteractiveContext)& ic = 0,
+                                bool modal = TRUE,
+                                WFlags fl = 0 );
+
+    ~GEOMBase_TransparencyDlg();
+
+private :
+
+    GEOMContext*                     myGeomGUI ;     /* Current GeomGUI object     */
+    GEOMBase*                     myGeomBase ;     /* Current GeomGUI object     */
+    bool                             myFirstInit ;   /* Inform for the first init  */
+    SALOME_Selection*                mySel;          /* User selection             */
+    Handle(AIS_InteractiveContext)   myIc ;          /* Interactive context        */
+    
+    QPushButton* buttonOk;
+    QLabel* TextLabelOpaque;
+    QLabel* TextLabelTransparent;
+    QSlider* Slider1;
+
+public slots:
+      
+    void ClickOnOk();
+    void ClickOnClose();
+    void ValueHasChanged( int newValue ) ;
+    
+protected:
+    QGridLayout* GEOMBase_TransparencyDlgLayout;
+    QHBoxLayout* Layout1;
+    QHBoxLayout* Layout2;
+};
+
+#endif // DIALOGBOX_TRANSPARENCYDLG_H
+
diff --git a/src/GEOMToolsGUI/Makefile.in b/src/GEOMToolsGUI/Makefile.in
new file mode 100644 (file)
index 0000000..95cc8b8
--- /dev/null
@@ -0,0 +1,63 @@
+#  GEOM GEOMTOOLSGUI : 
+#
+#  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 
+#
+#
+#
+#  File   : Makefile.in
+#  Author : Damien COQUERET (OCC)
+#  Module : GEOM
+#  $Header: 
+
+top_srcdir=@top_srcdir@
+top_builddir=../..
+srcdir=@srcdir@
+VPATH=.:@srcdir@:@top_srcdir@/idl
+
+
+@COMMENCE@
+
+# Libraries targets
+LIB = libGEOMToolsGUI.la
+
+# header files 
+EXPORT_HEADERS= 
+
+LIB_SRC =      GEOMToolsGUI.cxx \
+               GEOMToolsGUI_NbIsosDlg.cxx \
+               GEOMToolsGUI_TransparencyDlg.cxx
+
+LIB_MOC = \
+               GEOMToolsGUI.h \
+               GEOMToolsGUI_NbIsosDlg.h \
+               GEOMToolsGUI_TransparencyDlg.h
+
+LIB_CLIENT_IDL = SALOMEDS_Attributes.idl
+
+LIB_SERVER_IDL = 
+
+# additionnal information to compil and link file
+
+CPPFLAGS += $(QT_INCLUDES) $(VTK_INCLUDES) $(OCC_INCLUDES) $(PYTHON_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome
+CXXFLAGS += -I${KERNEL_ROOT_DIR}/include/salome
+
+LDFLAGS += -lGEOMFiltersSelection -lGEOMBase
+
+@CONCLUDE@