1 // Copyright (C) 2007-2016 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, or (at your option) any later version.
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
23 // GEOM GEOMGUI : GUI for Geometry component
24 // File : MeasureGUI_BndBoxDlg.cxx
25 // Author : Nicolas REJNERI, Open CASCADE S.A.S.
27 #include "MeasureGUI_BndBoxDlg.h"
28 #include "MeasureGUI_Widgets.h"
30 #include "GeometryGUI.h"
35 #include <BRepPrimAPI_MakeBox.hxx>
37 #include <SUIT_Session.h>
38 #include <SUIT_ResourceMgr.h>
39 #include <SUIT_OverrideCursor.h>
40 #include <SalomeApp_Application.h>
41 #include <SalomeApp_Tools.h>
42 #include <LightApp_SelectionMgr.h>
44 //=================================================================================
45 // class : MeasureGUI_BndBoxDlg()
46 // purpose : Constructs a MeasureGUI_BndBoxDlg which is a child of 'parent', with the
47 // name 'name' and widget flags set to 'f'.
48 // The dialog will by default be modeless, unless you set 'modal' to
49 // true to construct a modal dialog.
50 //=================================================================================
51 MeasureGUI_BndBoxDlg::MeasureGUI_BndBoxDlg (GeometryGUI* GUI, QWidget* parent)
52 : GEOMBase_Skeleton(GUI, parent)
54 QPixmap image0 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_BOUNDING_BOX")));
55 QPixmap image1 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT")));
57 setWindowTitle(tr("GEOM_BNDBOX_TITLE"));
59 /***************************************************************/
61 mainFrame()->GroupConstructors->setTitle(tr("GEOM_BNDBOX"));
62 mainFrame()->RadioButton1->setIcon(image0);
63 mainFrame()->RadioButton2->setAttribute( Qt::WA_DeleteOnClose );
64 mainFrame()->RadioButton2->close();
65 mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose );
66 mainFrame()->RadioButton3->close();
68 myGrp = new MeasureGUI_1Sel6LineEdit (centralWidget());
69 myGrp->GroupBox1->setTitle( tr( "GEOM_BNDBOX_OBJDIM" ) );
70 myGrp->TextLabel1->setText( tr( "GEOM_OBJECT" ) );
71 myGrp->TextLabel2->setText( tr( "GEOM_MIN" ) );
72 myGrp->TextLabel3->setText( tr( "GEOM_MAX" ) );
73 myGrp->TextLabel4->setText( tr( "GEOM_X" ) );
74 myGrp->TextLabel5->setText( tr( "GEOM_Y" ) );
75 myGrp->TextLabel6->setText( tr( "GEOM_Z" ) );
76 myGrp->LineEdit11->setReadOnly( true );
77 myGrp->LineEdit12->setReadOnly( true );
78 myGrp->LineEdit21->setReadOnly( true );
79 myGrp->LineEdit22->setReadOnly( true );
80 myGrp->LineEdit31->setReadOnly( true );
81 myGrp->LineEdit32->setReadOnly( true );
82 myGrp->LineEdit11->setMinimumWidth(120);
83 myGrp->LineEdit12->setMinimumWidth(120);
84 myGrp->LineEdit21->setMinimumWidth(120);
85 myGrp->LineEdit22->setMinimumWidth(120);
86 myGrp->LineEdit31->setMinimumWidth(120);
87 myGrp->LineEdit32->setMinimumWidth(120);
88 myGrp->PushButton1->setIcon( image1 );
89 myGrp->LineEdit1->setReadOnly( true );
91 QVBoxLayout* layout = new QVBoxLayout( centralWidget() );
92 layout->setMargin( 0 ); layout->setSpacing( 6 );
93 layout->addWidget( myGrp );
95 /***************************************************************/
97 myHelpFileName = "bounding_box_page.html";
103 //=================================================================================
104 // function : ~MeasureGUI_BndBoxDlg()
105 // purpose : Destroys the object and frees any allocated resources
106 //=================================================================================
107 MeasureGUI_BndBoxDlg::~MeasureGUI_BndBoxDlg()
111 //=================================================================================
114 //=================================================================================
115 void MeasureGUI_BndBoxDlg::Init()
117 myEditCurrentArgument = myGrp->LineEdit1;
119 connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk()));
120 connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
121 connect(myGrp->PushButton1, SIGNAL(clicked()), this, SLOT(SelectionIntoArgument()));
123 connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
124 this, SLOT(SelectionIntoArgument()));
126 initName(tr("GEOM_BNDBOX"));
128 SelectionIntoArgument();
131 //=================================================================================
132 // function : ClickOnOk()
134 //=================================================================================
135 void MeasureGUI_BndBoxDlg::ClickOnOk()
141 //=================================================================================
142 // function : ClickOnApply()
144 //=================================================================================
145 bool MeasureGUI_BndBoxDlg::ClickOnApply()
155 //=================================================================================
156 // function : ActivateThisDialog()
158 //=================================================================================
159 void MeasureGUI_BndBoxDlg::ActivateThisDialog()
161 GEOMBase_Skeleton::ActivateThisDialog();
163 connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
164 this, SLOT(SelectionIntoArgument()));
170 //=================================================================================
171 // function : enterEvent()
173 //=================================================================================
174 void MeasureGUI_BndBoxDlg::enterEvent(QEvent*)
176 if (!mainFrame()->GroupConstructors->isEnabled())
177 ActivateThisDialog();
180 //=================================================================================
181 // function : processObject
183 //=================================================================================
184 void MeasureGUI_BndBoxDlg::processObject()
186 double aXMin, aXMax, aYMin, aYMax, aZMin, aZMax;
188 if (!getParameters(aXMin, aXMax, aYMin, aYMax, aZMin, aZMax)) {
189 myEditCurrentArgument->setText("");
190 myGrp->LineEdit11->setText("");
191 myGrp->LineEdit12->setText("");
192 myGrp->LineEdit21->setText("");
193 myGrp->LineEdit22->setText("");
194 myGrp->LineEdit31->setText("");
195 myGrp->LineEdit32->setText("");
198 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
199 int aPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 );
201 myGrp->LineEdit11->setText( DlgRef::PrintDoubleValue( aXMin, aPrecision ) );
202 myGrp->LineEdit12->setText( DlgRef::PrintDoubleValue( aXMax, aPrecision ) );
204 myGrp->LineEdit21->setText( DlgRef::PrintDoubleValue( aYMin, aPrecision ) );
205 myGrp->LineEdit22->setText( DlgRef::PrintDoubleValue( aYMax, aPrecision ) );
207 myGrp->LineEdit31->setText( DlgRef::PrintDoubleValue( aZMin, aPrecision ) );
208 myGrp->LineEdit32->setText( DlgRef::PrintDoubleValue( aZMax, aPrecision ) );
212 //=================================================================================
213 // function : getParameters
215 //=================================================================================
216 bool MeasureGUI_BndBoxDlg::getParameters (double& theXmin, double& theXmax,
217 double& theYmin, double& theYmax,
218 double& theZmin, double& theZmax)
223 GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation());
224 anOper->GetBoundingBox(myObj.get(), true, theXmin, theXmax, theYmin, theYmax, theZmin, theZmax);
226 return anOper->IsDone();
229 //=================================================================================
230 // function : buildPrs
232 //=================================================================================
233 SALOME_Prs* MeasureGUI_BndBoxDlg::buildPrs()
235 double aXMin, aYMin, aZMin, aXMax, aYMax, aZMax;
237 if (!getParameters(aXMin, aXMax, aYMin, aYMax, aZMin, aZMax))
240 TopoDS_Shape aShape = BRepPrimAPI_MakeBox(gp_Pnt(aXMin, aYMin, aZMin),
241 gp_Pnt(aXMax, aYMax, aZMax)).Shape();
243 return !aShape.IsNull() ? getDisplayer()->BuildPrs(aShape) : 0;
246 //=================================================================================
247 // function : SelectionIntoArgument()
248 // purpose : Called when selection as changed or other case
249 //=================================================================================
250 void MeasureGUI_BndBoxDlg::SelectionIntoArgument()
252 myEditCurrentArgument->setText("");
255 QList<TopAbs_ShapeEnum> aTypes;
256 aTypes << TopAbs_VERTEX << TopAbs_EDGE << TopAbs_WIRE << TopAbs_FACE << TopAbs_SHELL << TopAbs_SOLID << TopAbs_COMPSOLID << TopAbs_COMPOUND << TopAbs_SHAPE;
257 myObj = getSelected( aTypes );
265 myEditCurrentArgument->setText(GEOMBase::GetName(myObj.get()));
270 //=================================================================================
271 // function : createOperation
273 //=================================================================================
274 GEOM::GEOM_IOperations_ptr MeasureGUI_BndBoxDlg::createOperation()
276 return getGeomEngine()->GetIMeasureOperations(getStudyId());
279 //=================================================================================
280 // function : isValid
282 //=================================================================================
283 bool MeasureGUI_BndBoxDlg::isValid (QString&)
288 //=================================================================================
289 // function : execute
291 //=================================================================================
292 bool MeasureGUI_BndBoxDlg::execute (ObjectList& objects)
294 GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation());
295 GEOM::GEOM_Object_var anObj = anOper->MakeBoundingBox(myObj.get(), true);
297 if (!anObj->_is_nil())
298 objects.push_back(anObj._retn());
303 //=================================================================================
304 // function : activateSelection()
306 //=================================================================================
307 void MeasureGUI_BndBoxDlg::activateSelection()
309 globalSelection( GEOM_ALLSHAPES );
310 localSelection( TopAbs_SHAPE );
313 //=================================================================================
314 // function : redisplayPreview()
316 //=================================================================================
317 void MeasureGUI_BndBoxDlg::redisplayPreview()
320 if (!isValid(aMess)) {
328 SUIT_OverrideCursor wc;
330 getDisplayer()->SetColor(Quantity_NOC_VIOLET);
331 getDisplayer()->SetToActivate(false);
333 if (SALOME_Prs* aPrs = buildPrs())
334 displayPreview(aPrs);
336 catch (const SALOME::SALOME_Exception& e) {
337 SalomeApp_Tools::QtCatchCorbaException(e);
343 //=================================================================================
344 // function : addSubshapeToStudy
345 // purpose : virtual method to add new SubObjects if local selection
346 //=================================================================================
347 void MeasureGUI_BndBoxDlg::addSubshapesToStudy()
349 GEOMBase::PublishSubObject( myObj.get() );
352 //=================================================================================
353 // function : getSourceObjects
354 // purpose : virtual method to get source objects
355 //=================================================================================
356 QList<GEOM::GeomObjPtr> MeasureGUI_BndBoxDlg::getSourceObjects()
358 QList<GEOM::GeomObjPtr> res;