1 // Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // GEOM GEOMGUI : GUI for Geometry component
23 // File : MeasureGUI_BndBoxDlg.cxx
24 // Author : Nicolas REJNERI, Open CASCADE S.A.S.
26 #include "MeasureGUI_BndBoxDlg.h"
27 #include "MeasureGUI_Widgets.h"
29 #include "GeometryGUI.h"
34 #include <BRepPrimAPI_MakeBox.hxx>
36 #include <SUIT_Session.h>
37 #include <SUIT_ResourceMgr.h>
38 #include <SUIT_OverrideCursor.h>
39 #include <SalomeApp_Application.h>
40 #include <SalomeApp_Tools.h>
41 #include <LightApp_SelectionMgr.h>
43 //=================================================================================
44 // class : MeasureGUI_BndBoxDlg()
45 // purpose : Constructs a MeasureGUI_BndBoxDlg which is a child of 'parent', with the
46 // name 'name' and widget flags set to 'f'.
47 // The dialog will by default be modeless, unless you set 'modal' to
48 // true to construct a modal dialog.
49 //=================================================================================
50 MeasureGUI_BndBoxDlg::MeasureGUI_BndBoxDlg (GeometryGUI* GUI, QWidget* parent)
51 : GEOMBase_Skeleton(GUI, parent)
53 QPixmap image0 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_BOUNDING_BOX")));
54 QPixmap image1 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT")));
56 setWindowTitle(tr("GEOM_BNDBOX_TITLE"));
58 /***************************************************************/
60 mainFrame()->GroupConstructors->setTitle(tr("GEOM_BNDBOX"));
61 mainFrame()->RadioButton1->setIcon(image0);
62 mainFrame()->RadioButton2->setAttribute( Qt::WA_DeleteOnClose );
63 mainFrame()->RadioButton2->close();
64 mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose );
65 mainFrame()->RadioButton3->close();
67 myGrp = new MeasureGUI_1Sel6LineEdit (centralWidget());
68 myGrp->GroupBox1->setTitle( tr( "GEOM_BNDBOX_OBJDIM" ) );
69 myGrp->TextLabel1->setText( tr( "GEOM_OBJECT" ) );
70 myGrp->TextLabel2->setText( tr( "GEOM_MIN" ) );
71 myGrp->TextLabel3->setText( tr( "GEOM_MAX" ) );
72 myGrp->TextLabel4->setText( tr( "GEOM_X" ) );
73 myGrp->TextLabel5->setText( tr( "GEOM_Y" ) );
74 myGrp->TextLabel6->setText( tr( "GEOM_Z" ) );
75 myGrp->LineEdit11->setReadOnly( true );
76 myGrp->LineEdit12->setReadOnly( true );
77 myGrp->LineEdit21->setReadOnly( true );
78 myGrp->LineEdit22->setReadOnly( true );
79 myGrp->LineEdit31->setReadOnly( true );
80 myGrp->LineEdit32->setReadOnly( true );
81 myGrp->LineEdit11->setMinimumWidth(120);
82 myGrp->LineEdit12->setMinimumWidth(120);
83 myGrp->LineEdit21->setMinimumWidth(120);
84 myGrp->LineEdit22->setMinimumWidth(120);
85 myGrp->LineEdit31->setMinimumWidth(120);
86 myGrp->LineEdit32->setMinimumWidth(120);
87 myGrp->PushButton1->setIcon( image1 );
88 myGrp->LineEdit1->setReadOnly( true );
90 QVBoxLayout* layout = new QVBoxLayout( centralWidget() );
91 layout->setMargin( 0 ); layout->setSpacing( 6 );
92 layout->addWidget( myGrp );
94 /***************************************************************/
96 myHelpFileName = "bounding_box_page.html";
102 //=================================================================================
103 // function : ~MeasureGUI_BndBoxDlg()
104 // purpose : Destroys the object and frees any allocated resources
105 //=================================================================================
106 MeasureGUI_BndBoxDlg::~MeasureGUI_BndBoxDlg()
110 //=================================================================================
113 //=================================================================================
114 void MeasureGUI_BndBoxDlg::Init()
116 myEditCurrentArgument = myGrp->LineEdit1;
118 connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk()));
119 connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
120 connect(myGrp->PushButton1, SIGNAL(clicked()), this, SLOT(SelectionIntoArgument()));
122 connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
123 this, SLOT(SelectionIntoArgument()));
125 initName(tr("GEOM_BNDBOX"));
127 SelectionIntoArgument();
130 //=================================================================================
131 // function : ClickOnOk()
133 //=================================================================================
134 void MeasureGUI_BndBoxDlg::ClickOnOk()
140 //=================================================================================
141 // function : ClickOnApply()
143 //=================================================================================
144 bool MeasureGUI_BndBoxDlg::ClickOnApply()
153 //=================================================================================
154 // function : ActivateThisDialog()
156 //=================================================================================
157 void MeasureGUI_BndBoxDlg::ActivateThisDialog()
159 GEOMBase_Skeleton::ActivateThisDialog();
161 connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
162 this, SLOT(SelectionIntoArgument()));
168 //=================================================================================
169 // function : enterEvent()
171 //=================================================================================
172 void MeasureGUI_BndBoxDlg::enterEvent(QEvent*)
174 if (!mainFrame()->GroupConstructors->isEnabled())
175 ActivateThisDialog();
178 //=================================================================================
179 // function : processObject
181 //=================================================================================
182 void MeasureGUI_BndBoxDlg::processObject()
184 double aXMin, aXMax, aYMin, aYMax, aZMin, aZMax;
186 if (!getParameters(aXMin, aXMax, aYMin, aYMax, aZMin, aZMax)) {
187 myEditCurrentArgument->setText("");
188 myGrp->LineEdit11->setText("");
189 myGrp->LineEdit12->setText("");
190 myGrp->LineEdit21->setText("");
191 myGrp->LineEdit22->setText("");
192 myGrp->LineEdit31->setText("");
193 myGrp->LineEdit32->setText("");
196 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
197 int aPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 );
199 myGrp->LineEdit11->setText( DlgRef::PrintDoubleValue( aXMin, aPrecision ) );
200 myGrp->LineEdit12->setText( DlgRef::PrintDoubleValue( aXMax, aPrecision ) );
202 myGrp->LineEdit21->setText( DlgRef::PrintDoubleValue( aYMin, aPrecision ) );
203 myGrp->LineEdit22->setText( DlgRef::PrintDoubleValue( aYMax, aPrecision ) );
205 myGrp->LineEdit31->setText( DlgRef::PrintDoubleValue( aZMin, aPrecision ) );
206 myGrp->LineEdit32->setText( DlgRef::PrintDoubleValue( aZMax, aPrecision ) );
210 //=================================================================================
211 // function : getParameters
213 //=================================================================================
214 bool MeasureGUI_BndBoxDlg::getParameters (double& theXmin, double& theXmax,
215 double& theYmin, double& theYmax,
216 double& theZmin, double& theZmax)
218 if (myObj->_is_nil())
221 GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation());
222 anOper->GetBoundingBox(myObj, theXmin, theXmax, theYmin, theYmax, theZmin, theZmax);
224 return anOper->IsDone();
227 //=================================================================================
228 // function : buildPrs
230 //=================================================================================
231 SALOME_Prs* MeasureGUI_BndBoxDlg::buildPrs()
233 double aXMin, aYMin, aZMin, aXMax, aYMax, aZMax;
235 if (!getParameters(aXMin, aXMax, aYMin, aYMax, aZMin, aZMax))
238 TopoDS_Shape aShape = BRepPrimAPI_MakeBox(gp_Pnt(aXMin, aYMin, aZMin),
239 gp_Pnt(aXMax, aYMax, aZMax)).Shape();
241 return !aShape.IsNull() ? getDisplayer()->BuildPrs(aShape) : 0;
244 //=================================================================================
245 // function : SelectionIntoArgument()
246 // purpose : Called when selection as changed or other case
247 //=================================================================================
248 void MeasureGUI_BndBoxDlg::SelectionIntoArgument()
250 myEditCurrentArgument->setText("");
251 myObj = GEOM::GEOM_Object::_nil();
253 LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
254 SALOME_ListIO aSelList;
255 aSelMgr->selectedObjects(aSelList);
257 if (aSelList.Extent() != 1) {
263 GEOM::GEOM_Object_var aSelectedObject = GEOMBase::ConvertIOinGEOMObject(aSelList.First());
265 if (aSelectedObject->_is_nil()) {
271 myObj = aSelectedObject;
272 myEditCurrentArgument->setText(GEOMBase::GetName(myObj));
277 //=================================================================================
278 // function : createOperation
280 //=================================================================================
281 GEOM::GEOM_IOperations_ptr MeasureGUI_BndBoxDlg::createOperation()
283 return getGeomEngine()->GetIMeasureOperations(getStudyId());
286 //=================================================================================
287 // function : isValid
289 //=================================================================================
290 bool MeasureGUI_BndBoxDlg::isValid (QString&)
292 return !myObj->_is_nil();
295 //=================================================================================
296 // function : execute
298 //=================================================================================
299 bool MeasureGUI_BndBoxDlg::execute (ObjectList& objects)
301 GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation());
302 GEOM::GEOM_Object_var anObj = anOper->MakeBoundingBox(myObj);
304 if (!anObj->_is_nil())
305 objects.push_back(anObj._retn());
310 //=================================================================================
311 // function : redisplayPreview()
313 //=================================================================================
314 void MeasureGUI_BndBoxDlg::redisplayPreview()
317 if (!isValid(aMess)) {
325 SUIT_OverrideCursor();
327 getDisplayer()->SetColor(Quantity_NOC_VIOLET);
328 getDisplayer()->SetToActivate(false);
330 if (SALOME_Prs* aPrs = buildPrs())
331 displayPreview(aPrs);
333 catch (const SALOME::SALOME_Exception& e) {
334 SalomeApp_Tools::QtCatchCorbaException(e);