X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMeasureGUI%2FMeasureGUI_BndBoxDlg.cxx;h=56b10a09266558c06319c3dd6100fa6ed24c42b2;hb=6c8fca7b1fc27090ae4fd7dae2f2c6fec07739ba;hp=225195de5abe38ba197a85cc989826dcf75e6e25;hpb=9499b99fe2dcb53e1ea364f97986f8f432b04600;p=modules%2Fgeom.git diff --git a/src/MeasureGUI/MeasureGUI_BndBoxDlg.cxx b/src/MeasureGUI/MeasureGUI_BndBoxDlg.cxx index 225195de5..56b10a092 100644 --- a/src/MeasureGUI/MeasureGUI_BndBoxDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_BndBoxDlg.cxx @@ -1,73 +1,71 @@ -// GEOM GEOMGUI : GUI for Geometry component +// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE // -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// Copyright (C) 2003-2007 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, or (at your option) any later version. // +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// File : MeasureGUI_BndBoxDlg.cxx -// Author : Nicolas REJNERI -// Module : GEOM -// $Header$ + +// GEOM GEOMGUI : GUI for Geometry component +// File : MeasureGUI_BndBoxDlg.cxx +// Author : Nicolas REJNERI, Open CASCADE S.A.S. #include "MeasureGUI_BndBoxDlg.h" -#include "MeasureGUI_1Sel6LineEdit_QTD.h" +#include "MeasureGUI_Widgets.h" -#include "GEOMBase.h" -#include "GEOM_Displayer.h" +#include "GeometryGUI.h" -#include +#include +#include -#include "utilities.h" -#include "SUIT_Session.h" -#include "SalomeApp_Tools.h" +#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include //================================================================================= // class : MeasureGUI_BndBoxDlg() -// purpose : Constructs a MeasureGUI_BndBoxDlg which is a child of 'parent', with the +// purpose : Constructs a MeasureGUI_BndBoxDlg 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. +// true to construct a modal dialog. //================================================================================= -MeasureGUI_BndBoxDlg::MeasureGUI_BndBoxDlg( GeometryGUI* GUI, QWidget* parent ) -: MeasureGUI_Skeleton( GUI, parent, "MeasureGUI_PropertiesDlg" ) +MeasureGUI_BndBoxDlg::MeasureGUI_BndBoxDlg (GeometryGUI* GUI, QWidget* parent) + : GEOMBase_Skeleton(GUI, parent) { - QPixmap image0( SUIT_Session::session()->resourceMgr()->loadPixmap( - "GEOM",tr( "ICON_DLG_BOUNDING_BOX" ) ) ); - QPixmap image1( SUIT_Session::session()->resourceMgr()->loadPixmap( - "GEOM",tr( "ICON_SELECT" ) ) ); + QPixmap image0 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_BOUNDING_BOX"))); + QPixmap image1 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT"))); - setCaption( tr( "GEOM_BNDBOX_TITLE" ) ); + setWindowTitle(tr("GEOM_BNDBOX_TITLE")); /***************************************************************/ - - GroupConstructors->setTitle( tr( "GEOM_BNDBOX" ) ); - RadioButton1->setPixmap( image0 ); - myGrp = new MeasureGUI_1Sel6LineEdit_QTD( this, "myGrp" ); + mainFrame()->GroupConstructors->setTitle(tr("GEOM_BNDBOX")); + mainFrame()->RadioButton1->setIcon(image0); + mainFrame()->RadioButton2->setAttribute( Qt::WA_DeleteOnClose ); + mainFrame()->RadioButton2->close(); + mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose ); + mainFrame()->RadioButton3->close(); + + myGrp = new MeasureGUI_1Sel6LineEdit (centralWidget()); myGrp->GroupBox1->setTitle( tr( "GEOM_BNDBOX_OBJDIM" ) ); myGrp->TextLabel1->setText( tr( "GEOM_OBJECT" ) ); myGrp->TextLabel2->setText( tr( "GEOM_MIN" ) ); @@ -75,26 +73,33 @@ MeasureGUI_BndBoxDlg::MeasureGUI_BndBoxDlg( GeometryGUI* GUI, QWidget* parent ) myGrp->TextLabel4->setText( tr( "GEOM_X" ) ); myGrp->TextLabel5->setText( tr( "GEOM_Y" ) ); myGrp->TextLabel6->setText( tr( "GEOM_Z" ) ); - myGrp->LineEdit11->setReadOnly( TRUE ); - myGrp->LineEdit12->setReadOnly( TRUE ); - myGrp->LineEdit21->setReadOnly( TRUE ); - myGrp->LineEdit22->setReadOnly( TRUE ); - myGrp->LineEdit31->setReadOnly( TRUE ); - myGrp->LineEdit32->setReadOnly( TRUE ); - myGrp->PushButton1->setPixmap( image1 ); + myGrp->LineEdit11->setReadOnly( true ); + myGrp->LineEdit12->setReadOnly( true ); + myGrp->LineEdit21->setReadOnly( true ); + myGrp->LineEdit22->setReadOnly( true ); + myGrp->LineEdit31->setReadOnly( true ); + myGrp->LineEdit32->setReadOnly( true ); + myGrp->LineEdit11->setMinimumWidth(120); + myGrp->LineEdit12->setMinimumWidth(120); + myGrp->LineEdit21->setMinimumWidth(120); + myGrp->LineEdit22->setMinimumWidth(120); + myGrp->LineEdit31->setMinimumWidth(120); + myGrp->LineEdit32->setMinimumWidth(120); + myGrp->PushButton1->setIcon( image1 ); myGrp->LineEdit1->setReadOnly( true ); - Layout1->addWidget( myGrp, 1, 0 ); - + QVBoxLayout* layout = new QVBoxLayout( centralWidget() ); + layout->setMargin( 0 ); layout->setSpacing( 6 ); + layout->addWidget( myGrp ); + /***************************************************************/ - myHelpFileName = "files/salome2_sp3_measuregui_functions.htm#Bounding_box"; + myHelpFileName = "bounding_box_page.html"; /* Initialisation */ Init(); } - //================================================================================= // function : ~MeasureGUI_BndBoxDlg() // purpose : Destroys the object and frees any allocated resources @@ -103,16 +108,73 @@ MeasureGUI_BndBoxDlg::~MeasureGUI_BndBoxDlg() { } - //================================================================================= // function : Init() // purpose : //================================================================================= void MeasureGUI_BndBoxDlg::Init() { - mySelBtn = myGrp->PushButton1; - mySelEdit = myGrp->LineEdit1; - MeasureGUI_Skeleton::Init(); + myEditCurrentArgument = myGrp->LineEdit1; + + connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk())); + connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply())); + connect(myGrp->PushButton1, SIGNAL(clicked()), this, SLOT(SelectionIntoArgument())); + + connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), + this, SLOT(SelectionIntoArgument())); + + initName(tr("GEOM_BNDBOX")); + activateSelection(); + SelectionIntoArgument(); +} + +//================================================================================= +// function : ClickOnOk() +// purpose : +//================================================================================= +void MeasureGUI_BndBoxDlg::ClickOnOk() +{ + if (ClickOnApply()) + ClickOnCancel(); +} + +//================================================================================= +// function : ClickOnApply() +// purpose : +//================================================================================= +bool MeasureGUI_BndBoxDlg::ClickOnApply() +{ + if (!onAccept()) + return false; + + initName(); + activateSelection(); + return true; +} + +//================================================================================= +// function : ActivateThisDialog() +// purpose : +//================================================================================= +void MeasureGUI_BndBoxDlg::ActivateThisDialog() +{ + GEOMBase_Skeleton::ActivateThisDialog(); + + connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), + this, SLOT(SelectionIntoArgument())); + + activateSelection(); + redisplayPreview(); +} + +//================================================================================= +// function : enterEvent() +// purpose : +//================================================================================= +void MeasureGUI_BndBoxDlg::enterEvent(QEvent*) +{ + if (!mainFrame()->GroupConstructors->isEnabled()) + ActivateThisDialog(); } //================================================================================= @@ -123,27 +185,27 @@ void MeasureGUI_BndBoxDlg::processObject() { double aXMin, aXMax, aYMin, aYMax, aZMin, aZMax; - if ( !getParameters( aXMin, aXMax, aYMin, aYMax, aZMin, aZMax ) ) - { - mySelEdit->setText( "" ); - myGrp->LineEdit11->setText( "" ); - myGrp->LineEdit12->setText( "" ); - myGrp->LineEdit21->setText( "" ); - myGrp->LineEdit22->setText( "" ); - myGrp->LineEdit31->setText( "" ); - myGrp->LineEdit32->setText( "" ); + if (!getParameters(aXMin, aXMax, aYMin, aYMax, aZMin, aZMax)) { + myEditCurrentArgument->setText(""); + myGrp->LineEdit11->setText(""); + myGrp->LineEdit12->setText(""); + myGrp->LineEdit21->setText(""); + myGrp->LineEdit22->setText(""); + myGrp->LineEdit31->setText(""); + myGrp->LineEdit32->setText(""); } - else - { - - myGrp->LineEdit11->setText( tr( "%1" ).arg( aXMin, 12, 'f', 6 ) ); - myGrp->LineEdit12->setText( tr( "%1" ).arg( aXMax, 12, 'f', 6 ) ); + else { + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + int aPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 ); + + myGrp->LineEdit11->setText( DlgRef::PrintDoubleValue( aXMin, aPrecision ) ); + myGrp->LineEdit12->setText( DlgRef::PrintDoubleValue( aXMax, aPrecision ) ); - myGrp->LineEdit21->setText( tr( "%1" ).arg( aYMin, 12, 'f', 6 ) ); - myGrp->LineEdit22->setText( tr( "%1" ).arg( aYMax, 12, 'f', 6 ) ); + myGrp->LineEdit21->setText( DlgRef::PrintDoubleValue( aYMin, aPrecision ) ); + myGrp->LineEdit22->setText( DlgRef::PrintDoubleValue( aYMax, aPrecision ) ); - myGrp->LineEdit31->setText( tr( "%1" ).arg( aZMin, 12, 'f', 6 ) ); - myGrp->LineEdit32->setText( tr( "%1" ).arg( aZMax, 12, 'f', 6 ) ); + myGrp->LineEdit31->setText( DlgRef::PrintDoubleValue( aZMin, aPrecision ) ); + myGrp->LineEdit32->setText( DlgRef::PrintDoubleValue( aZMax, aPrecision ) ); } } @@ -151,27 +213,17 @@ void MeasureGUI_BndBoxDlg::processObject() // function : getParameters // purpose : //================================================================================= -bool MeasureGUI_BndBoxDlg::getParameters( double& theXmin, double& theXmax, +bool MeasureGUI_BndBoxDlg::getParameters (double& theXmin, double& theXmax, double& theYmin, double& theYmax, - double& theZmin, double& theZmax ) + double& theZmin, double& theZmax) { - if ( myObj->_is_nil() ) + if (!myObj) return false; - else - { - try - { - GEOM::GEOM_IMeasureOperations::_narrow( getOperation() )->GetBoundingBox( - myObj, theXmin, theXmax, theYmin, theYmax, theZmin, theZmax ); - } - catch( const SALOME::SALOME_Exception& e ) - { - SalomeApp_Tools::QtCatchCorbaException( e ); - return false; - } - - return getOperation()->IsDone(); - } + + GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation()); + anOper->GetBoundingBox(myObj.get(), true, theXmin, theXmax, theYmin, theYmax, theZmin, theZmax); + + return anOper->IsDone(); } //================================================================================= @@ -182,12 +234,132 @@ SALOME_Prs* MeasureGUI_BndBoxDlg::buildPrs() { double aXMin, aYMin, aZMin, aXMax, aYMax, aZMax; - if ( myObj->_is_nil() || !getParameters( aXMin, aXMax, aYMin, aYMax, aZMin, aZMax ) ) + if (!getParameters(aXMin, aXMax, aYMin, aYMax, aZMin, aZMax)) return 0; - TopoDS_Shape aShape = BRepPrimAPI_MakeBox( gp_Pnt( aXMin, aYMin, aZMin ), - gp_Pnt( aXMax, aYMax, aZMax ) ).Shape(); - - return !aShape.IsNull() ? getDisplayer()->BuildPrs( aShape ) : 0; + TopoDS_Shape aShape = BRepPrimAPI_MakeBox(gp_Pnt(aXMin, aYMin, aZMin), + gp_Pnt(aXMax, aYMax, aZMax)).Shape(); + + return !aShape.IsNull() ? getDisplayer()->BuildPrs(aShape) : 0; +} + +//================================================================================= +// function : SelectionIntoArgument() +// purpose : Called when selection as changed or other case +//================================================================================= +void MeasureGUI_BndBoxDlg::SelectionIntoArgument() +{ + myEditCurrentArgument->setText(""); + myObj.nullify(); + + QList aTypes; + aTypes << TopAbs_VERTEX << TopAbs_EDGE << TopAbs_WIRE << TopAbs_FACE << TopAbs_SHELL << TopAbs_SOLID << TopAbs_COMPSOLID << TopAbs_COMPOUND << TopAbs_SHAPE; + myObj = getSelected( aTypes ); + + if ( !myObj ) { + processObject(); + erasePreview(); + return; + } + + myEditCurrentArgument->setText(GEOMBase::GetName(myObj.get())); + processObject(); + redisplayPreview(); +} + +//================================================================================= +// function : createOperation +// purpose : +//================================================================================= +GEOM::GEOM_IOperations_ptr MeasureGUI_BndBoxDlg::createOperation() +{ + return getGeomEngine()->GetIMeasureOperations(getStudyId()); +} +//================================================================================= +// function : isValid +// purpose : +//================================================================================= +bool MeasureGUI_BndBoxDlg::isValid (QString&) +{ + return myObj; +} + +//================================================================================= +// function : execute +// purpose : +//================================================================================= +bool MeasureGUI_BndBoxDlg::execute (ObjectList& objects) +{ + GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation()); + GEOM::GEOM_Object_var anObj = anOper->MakeBoundingBox(myObj.get(), true); + + if (!anObj->_is_nil()) + objects.push_back(anObj._retn()); + + return true; +} + +//================================================================================= +// function : activateSelection() +// purpose : +//================================================================================= +void MeasureGUI_BndBoxDlg::activateSelection() +{ + globalSelection( GEOM_ALLSHAPES ); + std::list needTypes; + needTypes.push_back( TopAbs_SHAPE ), needTypes.push_back( TopAbs_VERTEX ), needTypes.push_back( TopAbs_EDGE ); + needTypes.push_back( TopAbs_WIRE ), needTypes.push_back( TopAbs_FACE ), needTypes.push_back( TopAbs_SHELL ); + needTypes.push_back( TopAbs_SOLID ), needTypes.push_back( TopAbs_COMPSOLID ), needTypes.push_back( TopAbs_COMPOUND ); + localSelection(GEOM::GEOM_Object::_nil(), needTypes ); +} + +//================================================================================= +// function : redisplayPreview() +// purpose : +//================================================================================= +void MeasureGUI_BndBoxDlg::redisplayPreview() +{ + QString aMess; + if (!isValid(aMess)) { + erasePreview(true); + return; + } + + erasePreview(false); + + try { + SUIT_OverrideCursor wc; + + getDisplayer()->SetColor(Quantity_NOC_VIOLET); + getDisplayer()->SetToActivate(false); + + if (SALOME_Prs* aPrs = buildPrs()) + displayPreview(aPrs); + } + catch (const SALOME::SALOME_Exception& e) { + SalomeApp_Tools::QtCatchCorbaException(e); + } + catch (...) { + } +} + +//================================================================================= +// function : addSubshapeToStudy +// purpose : virtual method to add new SubObjects if local selection +//================================================================================= +void MeasureGUI_BndBoxDlg::addSubshapesToStudy() +{ + GEOMBase::PublishSubObject( myObj.get() ); +} + +//================================================================================= +// function : getSourceObjects +// purpose : virtual method to get source objects +//================================================================================= +QList MeasureGUI_BndBoxDlg::getSourceObjects() +{ + QList res; + res << myObj; + return res; }