From 2c66cf4f4aea1aa91fb09421ba6b2c96e9eaa324 Mon Sep 17 00:00:00 2001 From: skv Date: Tue, 18 Oct 2016 19:54:53 +0300 Subject: [PATCH] 0023272: [CEA] Add a tolerance for basic properties computation --- doc/salome/gui/GEOM/images/neo-basicprop.png | Bin 16322 -> 23891 bytes doc/salome/gui/GEOM/input/basic_prop.doc | 5 +- idl/GEOM_Gen.idl | 2 + src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx | 3 +- src/GEOMImpl/GEOMImpl_IMeasureOperations.hxx | 1 + src/GEOM_I/GEOM_IMeasureOperations_i.cc | 4 +- src/GEOM_I/GEOM_IMeasureOperations_i.hh | 1 + src/GEOM_SWIG/geomBuilder.py | 8 +- src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx | 114 +++++++++++++++---- src/MeasureGUI/MeasureGUI_PropertiesDlg.h | 14 ++- 10 files changed, 118 insertions(+), 34 deletions(-) mode change 100755 => 100644 doc/salome/gui/GEOM/images/neo-basicprop.png diff --git a/doc/salome/gui/GEOM/images/neo-basicprop.png b/doc/salome/gui/GEOM/images/neo-basicprop.png old mode 100755 new mode 100644 index e36d937f3061296781f6202d02eebf4c0f9ab385..a5b769d081364558f8ba9b1f4fdd4a55c3141c66 GIT binary patch literal 23891 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

e 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 I+$iw>0l76xC;$Ke diff --git a/doc/salome/gui/GEOM/input/basic_prop.doc b/doc/salome/gui/GEOM/input/basic_prop.doc index 4210731ca..e9feb5d84 100644 --- a/doc/salome/gui/GEOM/input/basic_prop.doc +++ b/doc/salome/gui/GEOM/input/basic_prop.doc @@ -15,8 +15,9 @@ in the viewer to navigate between selectable objects. For more details, please refer to the \em "Functionality common for OCC and VTK viewers" chapter of the GUI module's documentation. -TUI Command: geompy.BasicProperties(Shape), where -\em Shape is a shape whose properties are inquired. +TUI Command: geompy.BasicProperties(Shape, theTolerance=1.e-6), +where \em Shape is a shape whose properties are inquired, \em theTolerance is +maximal relative error of area and volume computation. See also a \ref tui_basic_properties_page "TUI example". diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index 1d275720c..66f23e436 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -4337,12 +4337,14 @@ module GEOM * \brief Get summarized length of all wires, * area of surface and volume of the given shape. * \param theShape Shape to define properties of. + * \param theTolerance maximal relative error of area and volume computation. * \param theLength Output. Summarized length of all wires of the given shape. * \param theSurfArea Output. Area of surface of the given shape. * \param theVolume Output. Volume of the given shape. * \return Returns shape properties through the last three arguments. */ void GetBasicProperties (in GEOM_Object theShape, + in double theTolerance, out double theLength, out double theSurfArea, out double theVolume); diff --git a/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx b/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx index 6cebe14bc..f713b4666 100644 --- a/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx @@ -965,6 +965,7 @@ Handle(GEOM_Object) GEOMImpl_IMeasureOperations::GetNormal */ //============================================================================= void GEOMImpl_IMeasureOperations::GetBasicProperties (Handle(GEOM_Object) theShape, + const Standard_Real theTolerance, Standard_Real& theLength, Standard_Real& theSurfArea, Standard_Real& theVolume) @@ -984,7 +985,7 @@ void GEOMImpl_IMeasureOperations::GetBasicProperties (Handle(GEOM_Object) theSha //Compute the parameters GProp_GProps LProps, SProps; - Standard_Real anEps = 1.e-6; + Standard_Real anEps = theTolerance >= 0 ? theTolerance : 1.e-6; try { OCC_CATCH_SIGNALS; BRepGProp::LinearProperties(aShape, LProps); diff --git a/src/GEOMImpl/GEOMImpl_IMeasureOperations.hxx b/src/GEOMImpl/GEOMImpl_IMeasureOperations.hxx index 6943814dd..abc02def7 100644 --- a/src/GEOMImpl/GEOMImpl_IMeasureOperations.hxx +++ b/src/GEOMImpl/GEOMImpl_IMeasureOperations.hxx @@ -119,6 +119,7 @@ class GEOMImpl_IMeasureOperations : public GEOM_IOperations { Handle(GEOM_Object) theOptionalPoint); Standard_EXPORT void GetBasicProperties (Handle(GEOM_Object) theShape, + const Standard_Real theTolerance, Standard_Real& theLength, Standard_Real& theSurfArea, Standard_Real& theVolume); diff --git a/src/GEOM_I/GEOM_IMeasureOperations_i.cc b/src/GEOM_I/GEOM_IMeasureOperations_i.cc index 7babefba8..97e8df969 100644 --- a/src/GEOM_I/GEOM_IMeasureOperations_i.cc +++ b/src/GEOM_I/GEOM_IMeasureOperations_i.cc @@ -495,6 +495,7 @@ GEOM::GEOM_Object_ptr GEOM_IMeasureOperations_i::GetNormal */ //============================================================================= void GEOM_IMeasureOperations_i::GetBasicProperties (GEOM::GEOM_Object_ptr theShape, + CORBA::Double theTolerance, CORBA::Double& theLength, CORBA::Double& theSurfArea, CORBA::Double& theVolume) @@ -507,7 +508,8 @@ void GEOM_IMeasureOperations_i::GetBasicProperties (GEOM::GEOM_Object_ptr theSha if (aShape.IsNull()) return; // Get shape parameters - GetOperations()->GetBasicProperties(aShape, theLength, theSurfArea, theVolume); + GetOperations()->GetBasicProperties(aShape, theTolerance, theLength, + theSurfArea, theVolume); } //============================================================================= diff --git a/src/GEOM_I/GEOM_IMeasureOperations_i.hh b/src/GEOM_I/GEOM_IMeasureOperations_i.hh index 9311fb946..80b55c2c1 100644 --- a/src/GEOM_I/GEOM_IMeasureOperations_i.hh +++ b/src/GEOM_I/GEOM_IMeasureOperations_i.hh @@ -52,6 +52,7 @@ class GEOM_I_EXPORT GEOM_IMeasureOperations_i : CORBA::Double& Xx, CORBA::Double& Xy, CORBA::Double& Xz); void GetBasicProperties (GEOM::GEOM_Object_ptr theShape, + CORBA::Double theTolerance, CORBA::Double& theLength, CORBA::Double& theSurfArea, CORBA::Double& theVolume); diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py index 29161717f..b46ff1c66 100644 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -10579,6 +10579,8 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): ## Get summarized length of all wires, # area of surface and volume of the given shape. # @param theShape Shape to define properties of. + # @param theTolerance maximal relative error of area + # and volume computation. # @return [theLength, theSurfArea, theVolume]\n # theLength: Summarized length of all wires of the given shape.\n # theSurfArea: Area of surface of the given shape.\n @@ -10586,13 +10588,15 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_basic_properties_page "Example" @ManageTransactions("MeasuOp") - def BasicProperties(self,theShape): + def BasicProperties(self,theShape, theTolerance=1.e-6): """ Get summarized length of all wires, area of surface and volume of the given shape. Parameters: theShape Shape to define properties of. + theTolerance maximal relative error of area + and volume computation. Returns: [theLength, theSurfArea, theVolume] @@ -10601,7 +10605,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theVolume: Volume of the given shape. """ # Example: see GEOM_TestMeasures.py - aTuple = self.MeasuOp.GetBasicProperties(theShape) + aTuple = self.MeasuOp.GetBasicProperties(theShape, theTolerance) RaiseIfFailed("GetBasicProperties", self.MeasuOp) return aTuple diff --git a/src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx b/src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx index dbf95b024..38a06a7e0 100644 --- a/src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx @@ -37,6 +37,8 @@ #include +#define DEFAULT_TOLERANCE_VALUE 1.e-6 + //================================================================================= // class : MeasureGUI_PropertiesDlg() // purpose : Constructs a MeasureGUI_PropertiesDlg which is a child of 'parent', with the @@ -45,7 +47,11 @@ // true to construct a modal dialog. //================================================================================= MeasureGUI_PropertiesDlg::MeasureGUI_PropertiesDlg( GeometryGUI* GUI, QWidget* parent ) - : MeasureGUI_Skeleton( GUI, parent ) + : MeasureGUI_Skeleton(GUI, parent), + myTolerance(0), + myLength(0), + mySurface(0), + myVolume(0) { QPixmap image0( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_BASICPROPERTIES" ) ) ); @@ -59,21 +65,45 @@ MeasureGUI_PropertiesDlg::MeasureGUI_PropertiesDlg( GeometryGUI* GUI, QWidget* p mainFrame()->GroupConstructors->setTitle( tr( "GEOM_PROPERTIES" ) ); mainFrame()->RadioButton1->setIcon( image0 ); - myGrp = new MeasureGUI_1Sel3LineEdit( centralWidget() ); - 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->LineEdit1->setReadOnly( true ); - myGrp->PushButton1->setIcon( image1 ); - myGrp->LineEdit2->setReadOnly( true ); - myGrp->LineEdit3->setReadOnly( true ); - myGrp->LineEdit4->setReadOnly( true ); - - QVBoxLayout* layout = new QVBoxLayout( centralWidget() ); - layout->setMargin( 0 ); layout->setSpacing( 6 ); - layout->addWidget( myGrp ); + 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); /***************************************************************/ @@ -99,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))); } //================================================================================= @@ -146,6 +191,16 @@ void MeasureGUI_PropertiesDlg::SelectionIntoArgument() processObject(); redisplayPreview(); } + +//================================================================================= +// function : isValid +// purpose : +//================================================================================= +bool MeasureGUI_PropertiesDlg::isValid(QString& msg) +{ + return myTolerance->isValid(msg) && MeasureGUI_Skeleton::isValid(msg); +} + //================================================================================= // function : processObject // purpose : @@ -156,16 +211,16 @@ void MeasureGUI_PropertiesDlg::processObject() if ( !getParameters( aLength, anArea, aVolume ) ) { mySelEdit->setText( "" ); - myGrp->LineEdit2->setText( "" ); - myGrp->LineEdit3->setText( "" ); - myGrp->LineEdit4->setText( "" ); + myLength->setText( "" ); + mySurface->setText( "" ); + myVolume->setText( "" ); } else { SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); int aPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 ); - myGrp->LineEdit2->setText( DlgRef::PrintDoubleValue( aLength, aPrecision ) ); - myGrp->LineEdit3->setText( DlgRef::PrintDoubleValue( anArea, aPrecision ) ); - myGrp->LineEdit4->setText( DlgRef::PrintDoubleValue( aVolume, aPrecision ) ); + myLength->setText( DlgRef::PrintDoubleValue( aLength, aPrecision ) ); + mySurface->setText( DlgRef::PrintDoubleValue( anArea, aPrecision ) ); + myVolume->setText( DlgRef::PrintDoubleValue( aVolume, aPrecision ) ); } } @@ -182,7 +237,7 @@ bool MeasureGUI_PropertiesDlg::getParameters( double& theLength, else { GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow( getOperation() ); try { - anOper->GetBasicProperties( myObj.get(), theLength, theArea, theVolume ); + anOper->GetBasicProperties( myObj.get(), myTolerance->value(), theLength, theArea, theVolume ); } catch( const SALOME::SALOME_Exception& e ) { SalomeApp_Tools::QtCatchCorbaException( e ); @@ -210,3 +265,12 @@ SALOME_Prs* MeasureGUI_PropertiesDlg::buildPrs() } return prs; } + +//================================================================================= +// function : toleranceChanged +// purpose : +//================================================================================= +void MeasureGUI_PropertiesDlg::toleranceChanged(double) +{ + processObject(); +} diff --git a/src/MeasureGUI/MeasureGUI_PropertiesDlg.h b/src/MeasureGUI/MeasureGUI_PropertiesDlg.h index ae759610c..660f0ce10 100644 --- a/src/MeasureGUI/MeasureGUI_PropertiesDlg.h +++ b/src/MeasureGUI/MeasureGUI_PropertiesDlg.h @@ -29,7 +29,8 @@ #include "MeasureGUI_Skeleton.h" -class MeasureGUI_1Sel3LineEdit; +class SalomeApp_DoubleSpinBox; +class QLineEdit; //================================================================================= // class : MeasureGUI_PropertiesDlg @@ -46,6 +47,7 @@ public: protected: // redefined from GEOMBase_Helper and MeasureGUI_Skeleton + virtual bool isValid( QString& ); virtual void processObject(); virtual void activateSelection(); virtual void SelectionIntoArgument(); @@ -57,8 +59,14 @@ private: double&, double& ); -private: - MeasureGUI_1Sel3LineEdit* myGrp; +private: + SalomeApp_DoubleSpinBox *myTolerance; + QLineEdit *myLength; + QLineEdit *mySurface; + QLineEdit *myVolume; + +private slots: + void toleranceChanged(double); }; #endif // MEASUREGUI_PROPERTIESDLG_H -- 2.30.2