X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMeasureGUI%2FMeasureGUI_PropertiesDlg.cxx;h=d19ae362de147b761c6ffc0a088218cb4bdc3d6c;hb=09ece3edc1896e16a412b35810d76411f06d68ec;hp=80aed8c5d01be07a8d4f550e3fadeccc4b306b27;hpb=239f8109c64fa0c5a2e1d87a420bad5529b57f48;p=modules%2Fgeom.git diff --git a/src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx b/src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx index 80aed8c5d..d19ae362d 100644 --- a/src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx @@ -1,90 +1,113 @@ -// GEOM GEOMGUI : GUI for Geometry component +// Copyright (C) 2007-2023 CEA, EDF, 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_PropertiesDlg.cxx -// Author : Lucien PIGNOLONI -// Module : GEOM -// $Header$ +// GEOM GEOMGUI : GUI for Geometry component +// File : MeasureGUI_PropertiesDlg.cxx +// Author : Lucien PIGNOLONI, Open CASCADE S.A.S. +// #include "MeasureGUI_PropertiesDlg.h" -#include "MeasureGUI_1Sel3LineEdit_QTD.h" -#include "GEOM_Displayer.h" -#include "GEOMImpl_Types.hxx" -#include "GEOMBase.h" -#include "DlgRef_SpinBox.h" +#include "MeasureGUI_Widgets.h" -#include "SalomeApp_Tools.h" -#include "utilities.h" -#include "SUIT_Session.h" +#include +#include +#include + +#include +#include +#include #include -#include -#include -#include -#include -#include -#include +#define DEFAULT_TOLERANCE_VALUE 1.e-6 //================================================================================= // class : MeasureGUI_PropertiesDlg() // purpose : Constructs a MeasureGUI_PropertiesDlg 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_PropertiesDlg::MeasureGUI_PropertiesDlg( GeometryGUI* GUI, QWidget* parent ) -: MeasureGUI_Skeleton( GUI, parent, "MeasureGUI_PropertiesDlg" ) + : MeasureGUI_Skeleton(GUI, parent), + myTolerance(0), + myLength(0), + mySurface(0), + myVolume(0) { QPixmap image0( SUIT_Session::session()->resourceMgr()->loadPixmap( - "GEOM",tr( "ICON_DLG_BASICPROPERTIES" ) ) ); + "GEOM", tr( "ICON_DLG_BASICPROPERTIES" ) ) ); QPixmap image1( SUIT_Session::session()->resourceMgr()->loadPixmap( - "GEOM",tr( "ICON_SELECT" ) ) ); + "GEOM", tr( "ICON_SELECT" ) ) ); - setCaption( tr( "GEOM_PROPERTIES_TITLE" ) ); + setWindowTitle( tr( "GEOM_PROPERTIES_TITLE" ) ); /***************************************************************/ - GroupConstructors->setTitle( tr( "GEOM_PROPERTIES" ) ); - RadioButton1->setPixmap( image0 ); - - myGrp = new MeasureGUI_1Sel3LineEdit_QTD( this, "myGrp" ); - myGrp->GroupBox1->setTitle( tr( "GEOM_PROPERTIES_CONSTR" ) ); - myGrp->TextLabel1->setText( tr( "GEOM_OBJECT" ) ); - myGrp->TextLabel2->setText( tr( "GEOM_LENGTH" ) ); - myGrp->TextLabel3->setText( tr( "GEOM_PROPERTIES_SURFACE" ) ); - myGrp->TextLabel4->setText( tr( "GEOM_PROPERTIES_VOLUME" ) ); - myGrp->LineEdit2->setReadOnly( TRUE ); - myGrp->LineEdit3->setReadOnly( TRUE ); - myGrp->LineEdit4->setReadOnly( TRUE ); - myGrp->PushButton1->setPixmap( image1 ); - myGrp->LineEdit1->setReadOnly( true ); - - Layout1->addWidget( myGrp, 1, 0 ); + mainFrame()->GroupConstructors->setTitle( tr( "GEOM_PROPERTIES" ) ); + mainFrame()->RadioButton1->setIcon( image0 ); + + QGroupBox *aGrpBox = + new QGroupBox(tr("GEOM_PROPERTIES_CONSTR"), centralWidget()); + QLabel *anObjLbl = new QLabel(tr("GEOM_OBJECT"), aGrpBox); + QLabel *aTolLbl = new QLabel(tr("GEOM_TOLERANCE"), aGrpBox); + QLabel *aLenLbl = new QLabel(tr("GEOM_LENGTH"), aGrpBox); + QLabel *aSurfLbl = new QLabel(tr("GEOM_PROPERTIES_SURFACE"), aGrpBox); + QLabel *aVolLbl = new QLabel(tr("GEOM_PROPERTIES_VOLUME"), aGrpBox); + + mySelBtn = new QPushButton(aGrpBox); + mySelBtn->setIcon(image1); + mySelEdit = new QLineEdit(aGrpBox); + mySelEdit->setReadOnly(true); + myTolerance = new SalomeApp_DoubleSpinBox(aGrpBox); + myLength = new QLineEdit(aGrpBox); + mySurface = new QLineEdit(aGrpBox); + myVolume = new QLineEdit(aGrpBox); + myLength->setReadOnly(true); + mySurface->setReadOnly(true); + myVolume->setReadOnly(true); + + QGridLayout* aLayout = new QGridLayout(aGrpBox); + + aLayout->setMargin(9); + aLayout->setSpacing(6); + aLayout->addWidget(anObjLbl, 0, 0); + aLayout->addWidget(aTolLbl, 1, 0); + aLayout->addWidget(aLenLbl, 2, 0); + aLayout->addWidget(aSurfLbl, 3, 0); + aLayout->addWidget(aVolLbl, 4, 0); + aLayout->addWidget(mySelBtn, 0, 1); + aLayout->addWidget(mySelEdit, 0, 2); + aLayout->addWidget(myTolerance, 1, 1, 1, 2); + aLayout->addWidget(myLength, 2, 1, 1, 2); + aLayout->addWidget(mySurface, 3, 1, 1, 2); + aLayout->addWidget(myVolume, 4, 1, 1, 2); + + QVBoxLayout* aDlgLayout = new QVBoxLayout( centralWidget() ); + aDlgLayout->setMargin( 0 ); aDlgLayout->setSpacing( 6 ); + aDlgLayout->addWidget(aGrpBox); /***************************************************************/ - myHelpFileName = "using_measurement_tools_page.html#basic_prop_anchor"; + myHelpFileName = "basic_prop_page.html"; /* Initialisation */ Init(); @@ -106,9 +129,24 @@ MeasureGUI_PropertiesDlg::~MeasureGUI_PropertiesDlg() //================================================================================= void MeasureGUI_PropertiesDlg::Init() { - mySelBtn = myGrp->PushButton1; - mySelEdit = myGrp->LineEdit1; + mySelEdit->setMinimumSize(100, 0); + + // Obtain precision from preferences + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + int aPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 ); + + myTolerance->setPrecision(aPrecision); + // it's necessary to set decimals before the range setting, + // by default Qt rounds boundaries to 2 decimals at setRange + myTolerance->setDecimals(qAbs(aPrecision)); + myTolerance->setRange(0., 1.); + myTolerance->setSingleStep(DEFAULT_TOLERANCE_VALUE); + myTolerance->setValue(DEFAULT_TOLERANCE_VALUE); + MeasureGUI_Skeleton::Init(); + + connect(myTolerance, SIGNAL(valueChanged(double)), + this, SLOT(toleranceChanged(double))); } //================================================================================= @@ -118,10 +156,9 @@ void MeasureGUI_PropertiesDlg::Init() void MeasureGUI_PropertiesDlg::activateSelection() { static TColStd_MapOfInteger aTypes; - if ( aTypes.IsEmpty() ) - { + if ( aTypes.IsEmpty() ) { aTypes.Add( GEOM_COMPOUND ); -// aTypes.Add( TopAbs_COMPSOLID ); + // aTypes.Add( TopAbs_COMPSOLID ); aTypes.Add( GEOM_SOLID ); aTypes.Add( GEOM_SHELL ); aTypes.Add( GEOM_FACE ); @@ -130,6 +167,41 @@ void MeasureGUI_PropertiesDlg::activateSelection() } globalSelection( aTypes ); + + std::list needTypes; + 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_COMPOUND ); + localSelection( needTypes ); +} + +void MeasureGUI_PropertiesDlg::SelectionIntoArgument() +{ + myObj.nullify(); + QList aTypes; + aTypes << TopAbs_EDGE << TopAbs_WIRE << TopAbs_FACE << TopAbs_SHELL + << TopAbs_SOLID << TopAbs_COMPSOLID << TopAbs_COMPOUND; + myObj = getSelected( aTypes ); + + if (!myObj) { + mySelEdit->setText(""); + processObject(); + erasePreview(); + return; + } + + mySelEdit->setText(GEOMBase::GetName(myObj.get())); + processObject(); + redisplayPreview(); +} + +//================================================================================= +// function : isValid +// purpose : +//================================================================================= +bool MeasureGUI_PropertiesDlg::isValid(QString& msg) +{ + return myTolerance->isValid(msg) && MeasureGUI_Skeleton::isValid(msg); } //================================================================================= @@ -140,18 +212,18 @@ void MeasureGUI_PropertiesDlg::processObject() { double aLength, anArea, aVolume; - if ( !getParameters( aLength, anArea, aVolume ) ) - { + if ( !getParameters( aLength, anArea, aVolume ) ) { mySelEdit->setText( "" ); - myGrp->LineEdit2->setText( "" ); - myGrp->LineEdit3->setText( "" ); - myGrp->LineEdit4->setText( "" ); + myLength->setText( "" ); + mySurface->setText( "" ); + myVolume->setText( "" ); } - else - { - myGrp->LineEdit2->setText( DlgRef_SpinBox::PrintDoubleValue( aLength ) ); - myGrp->LineEdit3->setText( DlgRef_SpinBox::PrintDoubleValue( anArea ) ); - myGrp->LineEdit4->setText( DlgRef_SpinBox::PrintDoubleValue( aVolume ) ); + else { + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + int aPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 ); + myLength->setText( DlgRef::PrintDoubleValue( aLength, aPrecision ) ); + mySurface->setText( DlgRef::PrintDoubleValue( anArea, aPrecision ) ); + myVolume->setText( DlgRef::PrintDoubleValue( aVolume, aPrecision ) ); } } @@ -163,22 +235,19 @@ bool MeasureGUI_PropertiesDlg::getParameters( double& theLength, double& theArea, double& theVolume ) { - if ( myObj->_is_nil() ) + if ( !myObj ) return false; - else - { - try - { - GEOM::GEOM_IMeasureOperations::_narrow( getOperation() )->GetBasicProperties( - myObj, theLength, theArea, theVolume ); + else { + GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow( getOperation() ); + try { + anOper->GetBasicProperties( myObj.get(), myTolerance->value(), theLength, theArea, theVolume ); } - catch( const SALOME::SALOME_Exception& e ) - { + catch( const SALOME::SALOME_Exception& e ) { SalomeApp_Tools::QtCatchCorbaException( e ); return false; } - return getOperation()->IsDone(); + return anOper->IsDone(); } } @@ -188,16 +257,23 @@ bool MeasureGUI_PropertiesDlg::getParameters( double& theLength, //================================================================================= SALOME_Prs* MeasureGUI_PropertiesDlg::buildPrs() { - TopoDS_Shape aShape, aResult; - - if ( myObj->_is_nil() || - !GEOMBase::GetShape( myObj, aShape )|| - aShape.IsNull() || - aShape.ShapeType() != TopAbs_EDGE || - !GEOMBase::CreateArrowForLinearEdge( aShape, aResult ) || - aResult.IsNull() ) - return 0; - - return getDisplayer()->BuildPrs( aResult ); - + SALOME_Prs* prs = 0; + TopoDS_Shape shape; + + if ( GEOMBase::GetShape( myObj.get(), shape, TopAbs_EDGE ) && + getDisplayer()->IsDisplayed( GEOMBase::GetEntry(myObj.get()) ) ) { + shape = GEOMBase::CreateArrowForLinearEdge( shape ); + if ( !shape.IsNull() ) + prs = getDisplayer()->BuildPrs( shape ); + } + return prs; +} + +//================================================================================= +// function : toleranceChanged +// purpose : +//================================================================================= +void MeasureGUI_PropertiesDlg::toleranceChanged(double) +{ + processObject(); }