1 // Copyright (C) 2007-2014 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()
154 //=================================================================================
155 // function : ActivateThisDialog()
157 //=================================================================================
158 void MeasureGUI_BndBoxDlg::ActivateThisDialog()
160 GEOMBase_Skeleton::ActivateThisDialog();
162 connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
163 this, SLOT(SelectionIntoArgument()));
169 //=================================================================================
170 // function : enterEvent()
172 //=================================================================================
173 void MeasureGUI_BndBoxDlg::enterEvent(QEvent*)
175 if (!mainFrame()->GroupConstructors->isEnabled())
176 ActivateThisDialog();
179 //=================================================================================
180 // function : processObject
182 //=================================================================================
183 void MeasureGUI_BndBoxDlg::processObject()
185 double aXMin, aXMax, aYMin, aYMax, aZMin, aZMax;
187 if (!getParameters(aXMin, aXMax, aYMin, aYMax, aZMin, aZMax)) {
188 myEditCurrentArgument->setText("");
189 myGrp->LineEdit11->setText("");
190 myGrp->LineEdit12->setText("");
191 myGrp->LineEdit21->setText("");
192 myGrp->LineEdit22->setText("");
193 myGrp->LineEdit31->setText("");
194 myGrp->LineEdit32->setText("");
197 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
198 int aPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 );
200 myGrp->LineEdit11->setText( DlgRef::PrintDoubleValue( aXMin, aPrecision ) );
201 myGrp->LineEdit12->setText( DlgRef::PrintDoubleValue( aXMax, aPrecision ) );
203 myGrp->LineEdit21->setText( DlgRef::PrintDoubleValue( aYMin, aPrecision ) );
204 myGrp->LineEdit22->setText( DlgRef::PrintDoubleValue( aYMax, aPrecision ) );
206 myGrp->LineEdit31->setText( DlgRef::PrintDoubleValue( aZMin, aPrecision ) );
207 myGrp->LineEdit32->setText( DlgRef::PrintDoubleValue( aZMax, aPrecision ) );
211 //=================================================================================
212 // function : getParameters
214 //=================================================================================
215 bool MeasureGUI_BndBoxDlg::getParameters (double& theXmin, double& theXmax,
216 double& theYmin, double& theYmax,
217 double& theZmin, double& theZmax)
219 if (myObj->_is_nil())
222 GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation());
223 anOper->GetBoundingBox(myObj, true, theXmin, theXmax, theYmin, theYmax, theZmin, theZmax);
225 return anOper->IsDone();
228 //=================================================================================
229 // function : buildPrs
231 //=================================================================================
232 SALOME_Prs* MeasureGUI_BndBoxDlg::buildPrs()
234 double aXMin, aYMin, aZMin, aXMax, aYMax, aZMax;
236 if (!getParameters(aXMin, aXMax, aYMin, aYMax, aZMin, aZMax))
239 TopoDS_Shape aShape = BRepPrimAPI_MakeBox(gp_Pnt(aXMin, aYMin, aZMin),
240 gp_Pnt(aXMax, aYMax, aZMax)).Shape();
242 return !aShape.IsNull() ? getDisplayer()->BuildPrs(aShape) : 0;
245 //=================================================================================
246 // function : SelectionIntoArgument()
247 // purpose : Called when selection as changed or other case
248 //=================================================================================
249 void MeasureGUI_BndBoxDlg::SelectionIntoArgument()
251 myEditCurrentArgument->setText("");
252 myObj = GEOM::GEOM_Object::_nil();
254 LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
255 SALOME_ListIO aSelList;
256 aSelMgr->selectedObjects(aSelList);
258 if (aSelList.Extent() != 1) {
264 GEOM::GEOM_Object_var aSelectedObject = GEOMBase::ConvertIOinGEOMObject(aSelList.First());
266 if (aSelectedObject->_is_nil()) {
272 myObj = aSelectedObject;
273 myEditCurrentArgument->setText(GEOMBase::GetName(myObj));
278 //=================================================================================
279 // function : createOperation
281 //=================================================================================
282 GEOM::GEOM_IOperations_ptr MeasureGUI_BndBoxDlg::createOperation()
284 return getGeomEngine()->GetIMeasureOperations(getStudyId());
287 //=================================================================================
288 // function : isValid
290 //=================================================================================
291 bool MeasureGUI_BndBoxDlg::isValid (QString&)
293 return !myObj->_is_nil();
296 //=================================================================================
297 // function : execute
299 //=================================================================================
300 bool MeasureGUI_BndBoxDlg::execute (ObjectList& objects)
302 GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation());
303 GEOM::GEOM_Object_var anObj = anOper->MakeBoundingBox(myObj, true);
305 if (!anObj->_is_nil())
306 objects.push_back(anObj._retn());
311 //=================================================================================
312 // function : redisplayPreview()
314 //=================================================================================
315 void MeasureGUI_BndBoxDlg::redisplayPreview()
318 if (!isValid(aMess)) {
326 SUIT_OverrideCursor();
328 getDisplayer()->SetColor(Quantity_NOC_VIOLET);
329 getDisplayer()->SetToActivate(false);
331 if (SALOME_Prs* aPrs = buildPrs())
332 displayPreview(aPrs);
334 catch (const SALOME::SALOME_Exception& e) {
335 SalomeApp_Tools::QtCatchCorbaException(e);