]> SALOME platform Git repositories - modules/geom.git/blob - src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.cxx
Salome HOME
Integration of PAL/SALOME V2.1.0c from OCC
[modules/geom.git] / src / GEOMToolsGUI / GEOMToolsGUI_TransparencyDlg.cxx
1 //  GEOM GEOMGUI : GUI for Geometry component
2 //
3 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
5 // 
6 //  This library is free software; you can redistribute it and/or 
7 //  modify it under the terms of the GNU Lesser General Public 
8 //  License as published by the Free Software Foundation; either 
9 //  version 2.1 of the License. 
10 // 
11 //  This library is distributed in the hope that it will be useful, 
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of 
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
14 //  Lesser General Public License for more details. 
15 // 
16 //  You should have received a copy of the GNU Lesser General Public 
17 //  License along with this library; if not, write to the Free Software 
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
19 // 
20 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
21 //
22 //
23 //
24 //  File   : GEOMBase_TransparencyDlg.cxx
25 //  Author : Lucien PIGNOLONI
26 //  Module : GEOM
27
28 using namespace std;
29 #include "GEOMToolsGUI_TransparencyDlg.h"
30
31 #include "QAD_Desktop.h"
32 #include "QAD_RightFrame.h"
33 #include "SALOME_ListIteratorOfListIO.hxx"
34 #include "OCCViewer_Viewer3d.h"
35 #include <AIS_InteractiveContext.hxx>
36
37 #include <qframe.h>
38 #include <qlabel.h>
39 #include <qpushbutton.h>
40 #include <qslider.h>
41 #include <qlayout.h>
42 #include <qvariant.h>
43 #include <qtooltip.h>
44 #include <qwhatsthis.h>
45 #include <qapplication.h>
46 #include <qgroupbox.h>
47
48 #include "VTKViewer_ViewFrame.h"
49 #include "VTKViewer_RenderWindowInteractor.h"
50
51 //=================================================================================
52 // class    : GEOMBase_TransparencyDlg()
53 // purpose  : Constructs a GEOMBase_SUBSHAPE which is a child of 'parent', with the
54 //            name 'name' and widget flags set to 'f'.
55 //
56 //          : WARNING : this dialog is modal !
57 //
58 //=================================================================================
59 GEOMBase_TransparencyDlg::GEOMBase_TransparencyDlg(QWidget* parent, const char* name, SALOME_Selection* Sel, const Handle(AIS_InteractiveContext)& ic, bool modal, WFlags fl)
60   :QDialog(parent, name, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu)
61 {
62   if(!name)
63     setName("GEOMBase_TransparencyDlg");
64   resize(152, 107); 
65   setCaption(tr("GEOM_TRANSPARENCY_TITLE"));
66   setSizeGripEnabled(TRUE);
67   GEOMBase_TransparencyDlgLayout = new QGridLayout(this); 
68   GEOMBase_TransparencyDlgLayout->setSpacing(6);
69   GEOMBase_TransparencyDlgLayout->setMargin(11);
70
71   /*************************************************************************/
72   QGroupBox* GroupButtons = new QGroupBox( this, "GroupButtons" );
73   GroupButtons->setColumnLayout(0, Qt::Vertical );
74   GroupButtons->layout()->setSpacing( 0 );
75   GroupButtons->layout()->setMargin( 0 );
76   QGridLayout* GroupButtonsLayout = new QGridLayout( GroupButtons->layout() );
77   GroupButtonsLayout->setAlignment( Qt::AlignTop );
78   GroupButtonsLayout->setSpacing( 6 );
79   GroupButtonsLayout->setMargin( 11 );
80   
81   buttonOk = new QPushButton( GroupButtons, "buttonOk" );
82   buttonOk->setText( tr( "GEOM_BUT_OK" ) );
83   buttonOk->setAutoDefault( TRUE );
84   buttonOk->setDefault( TRUE );
85   GroupButtonsLayout->addItem( new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, 0 );
86   GroupButtonsLayout->addWidget( buttonOk, 0, 1 );
87   GroupButtonsLayout->addItem( new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, 2 );
88
89   /*************************************************************************/
90   QGroupBox* GroupC1 = new QGroupBox( this, "GroupC1" );
91   GroupC1->setColumnLayout(0, Qt::Vertical );
92   GroupC1->layout()->setSpacing( 0 );
93   GroupC1->layout()->setMargin( 0 );
94   QGridLayout* GroupC1Layout = new QGridLayout( GroupC1->layout() );
95   GroupC1Layout->setAlignment( Qt::AlignTop );
96   GroupC1Layout->setSpacing( 6 );
97   GroupC1Layout->setMargin( 11 );
98   
99   TextLabelOpaque = new QLabel( GroupC1, "TextLabelOpaque" );
100   TextLabelOpaque->setText( tr( "GEOM_TRANSPARENCY_OPAQUE"  ) );
101   TextLabelOpaque->setAlignment( int( QLabel::AlignLeft ) );
102   GroupC1Layout->addWidget( TextLabelOpaque, 0, 0 );
103   GroupC1Layout->addItem( new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ), 0, 1 );
104   
105   TextLabelTransparent = new QLabel( GroupC1, "TextLabelTransparent" );
106   TextLabelTransparent->setText( tr( "GEOM_TRANSPARENCY_TRANSPARENT"  ) );
107   TextLabelTransparent->setAlignment( int( QLabel::AlignRight ) );
108   GroupC1Layout->addWidget( TextLabelTransparent, 0, 2 );
109   
110   Slider1 = new QSlider( 0, 10, 1, 5, Horizontal, GroupC1, "Slider1" );
111   Slider1->setMinimumSize( 300, 0 );
112   Slider1->setTickmarks( QSlider::Left );
113   GroupC1Layout->addMultiCellWidget( Slider1, 1, 1, 0, 2 );
114   /*************************************************************************/
115   
116   GEOMBase_TransparencyDlgLayout->addWidget(GroupC1, 0,  0);
117   GEOMBase_TransparencyDlgLayout->addWidget(GroupButtons, 1, 0);
118   
119   /* Initialisations */
120   this->myGeomBase = new GEOMBase();
121   this->myIc = ic;
122   this->mySel = Sel;
123   
124   /* First call valueChanged() method for initialisation               */
125   /* The default value of transparency will change with the selection  */
126   this->myFirstInit = true;
127 //  Slider1->setMaxValue( 10 );
128 //  Slider1->setValue( 5 ) ;
129   this->ValueHasChanged(Slider1->value());
130   
131   // signals and slots connections : after ValueHasChanged()
132   connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
133   connect(Slider1, SIGNAL(valueChanged(int)), this, SLOT(ValueHasChanged(int)));
134   
135   /* Move widget on the botton right corner of main widget */
136   int x, y ;
137   myGeomBase->DefineDlgPosition(this, x, y);
138   this->move(x, y) ;
139   this->show() ; /* Displays this Dialog */
140 }
141
142
143 //=================================================================================
144 // function : ~GEOMBase_TransparencyDlg()
145 // purpose  :
146 //=================================================================================
147 GEOMBase_TransparencyDlg::~GEOMBase_TransparencyDlg()
148 {
149     // no need to delete child widgets, Qt does it all for us
150 }
151
152
153 //=======================================================================
154 // function : ClickOnOk()
155 // purpose  :
156 //=======================================================================
157 void GEOMBase_TransparencyDlg::ClickOnOk()
158 {
159   accept();
160   return;
161 }
162
163
164 //=======================================================================
165 // function : ClickOnClose()
166 // purpose  :
167 //=======================================================================
168 void GEOMBase_TransparencyDlg::ClickOnClose()
169 {
170   accept();
171   return;
172 }
173
174
175 //=================================================================================
176 // function : ValueHasChanged()
177 // purpose  : Called when value of slider change
178 //          : or the first time as initilisation
179 //=================================================================================
180 void GEOMBase_TransparencyDlg::ValueHasChanged(int newValue)
181 {
182   if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
183     // VTK
184     VTKViewer_RenderWindowInteractor* myRenderInter= ((VTKViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
185     SALOME_ListIteratorOfListIO It(this->mySel->StoredIObjects());
186
187     Handle(SALOME_InteractiveObject) FirstIOS =  mySel->firstIObject();
188     if(!FirstIOS.IsNull()) {
189       /* The first time as initialisation */
190       if(this->myFirstInit) {   
191         this->myFirstInit = false;
192         float transp = (myRenderInter->GetTransparency(FirstIOS))*10.0;
193         this->Slider1->setValue(int(transp));
194         return;
195       }
196     }
197     
198     QApplication::setOverrideCursor(Qt::waitCursor);
199     for(;It.More(); It.Next()) {
200       Handle(SALOME_InteractiveObject) IOS = It.Value();
201       myRenderInter->SetTransparency(IOS, newValue/10.0);
202     }
203     myRenderInter->Render();
204     QApplication::restoreOverrideCursor();
205   }
206
207   else if(QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getTypeView() == VIEW_OCC) {
208     // OCC  
209     SALOME_ListIteratorOfListIO It(this->mySel->StoredIObjects());
210     Handle(SALOME_InteractiveObject) FirstIOS = mySel->firstIObject();
211     if(!FirstIOS.IsNull()) {
212       
213       /* The first time as initialisation */
214       if(this->myFirstInit) {
215         this->myFirstInit = false;
216         Standard_Boolean found;
217         Handle(GEOM_AISShape) Shape = myGeomBase->ConvertIOinGEOMAISShape(FirstIOS, found);
218         if(!found)
219           return;
220         float transp = (int(Shape->Transparency() * 10.0 + 0.001));
221         this->Slider1->setValue(int(transp));
222         return;
223       }
224     }
225
226     QApplication::setOverrideCursor(Qt::waitCursor);
227     OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
228     Handle (AIS_InteractiveContext) ic = v3d->getAISContext();
229     for(;It.More(); It.Next()) {
230       Handle(SALOME_InteractiveObject) IObject = It.Value();
231       Standard_Boolean found;
232       Handle(GEOM_AISShape) Shape = myGeomBase->ConvertIOinGEOMAISShape(IObject, found);      
233       if(!found) {
234         QApplication::restoreOverrideCursor();
235         return;
236       }
237       ic->SetTransparency(Shape, newValue / 10.0, false);
238       ic->Redisplay(Shape, Standard_False, Standard_True);
239     }
240     ic->UpdateCurrentViewer();
241   }
242   QApplication::restoreOverrideCursor();
243   return;
244 }