From 7b3e0f97ee3cbeabbbe6aae8a48e7ba80ddd77f7 Mon Sep 17 00:00:00 2001 From: skv Date: Fri, 23 Jan 2015 17:39:09 +0300 Subject: [PATCH] 0022775: Update CheckCompoundOfBlocks to have same bahavior as GetNonBlocks --- idl/GEOM_Gen.idl | 4 + .../AdvancedEngine_IOperations.cxx | 2 +- src/BlockFix/BlockFix_CheckTool.cxx | 113 ++++++++++- src/BlockFix/BlockFix_CheckTool.hxx | 11 +- src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx | 4 +- src/GEOMImpl/GEOMImpl_IBlocksOperations.hxx | 1 + src/GEOM_I/GEOM_IBlocksOperations_i.cc | 4 +- src/GEOM_I/GEOM_IBlocksOperations_i.hh | 1 + src/GEOM_I_Superv/GEOM_Superv_i.cc | 2 +- src/GEOM_SWIG/geomBuilder.py | 34 +++- .../MeasureGUI_CheckCompoundOfBlocksDlg.cxx | 179 ++++++++++++------ .../MeasureGUI_CheckCompoundOfBlocksDlg.h | 21 +- 12 files changed, 307 insertions(+), 69 deletions(-) diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index 890d9b52b..c30f67405 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -2761,10 +2761,14 @@ module GEOM * - The glue between two quadrangle faces should be applied. * \note Single block is also accepted as a valid compound of blocks. * \param theCompound The compound to check. + * \param theToleranceC1 the tolerance to check if two neighbor edges are + * collinear in the common vertex with this tolerance. Negative + * value means that C1 criterion is not used (old implementation). * \param theErrors Structure, containing discovered errors and incriminated sub-shapes. * \return TRUE, if the given shape is a compound of blocks. */ boolean CheckCompoundOfBlocks (in GEOM_Object theCompound, + in double theToleranceC1, out BCErrors theErrors); /*! diff --git a/src/AdvancedEngine/AdvancedEngine_IOperations.cxx b/src/AdvancedEngine/AdvancedEngine_IOperations.cxx index 5d1b96999..ad7650b00 100644 --- a/src/AdvancedEngine/AdvancedEngine_IOperations.cxx +++ b/src/AdvancedEngine/AdvancedEngine_IOperations.cxx @@ -1583,7 +1583,7 @@ bool AdvancedEngine_IOperations::MakePipeTShapePartition(Handle(GEOM_Object) the // Last verification: result should be a block std::list errList; - if (!myBlocksOperations->CheckCompoundOfBlocks(Te3,errList)) { + if (!myBlocksOperations->CheckCompoundOfBlocks(Te3, -1, errList)) { SetErrorCode("TShape is not a compound of block"); return false; } diff --git a/src/BlockFix/BlockFix_CheckTool.cxx b/src/BlockFix/BlockFix_CheckTool.cxx index 32c0714be..36e527550 100644 --- a/src/BlockFix/BlockFix_CheckTool.cxx +++ b/src/BlockFix/BlockFix_CheckTool.cxx @@ -28,6 +28,11 @@ #include +#include + +#include +#include + #include #include @@ -36,8 +41,10 @@ #include #include #include +#include #include +#include #include #include #include @@ -49,6 +56,7 @@ BlockFix_CheckTool::BlockFix_CheckTool( ) { myHasCheck = Standard_False; + myAngTolerance = -1.; myPossibleBlocks.Clear(); } @@ -63,6 +71,17 @@ void BlockFix_CheckTool::SetShape(const TopoDS_Shape& aShape) myPossibleBlocks.Clear(); } +//======================================================================= +//function : SetAngTolerance +//purpose : +//======================================================================= +void BlockFix_CheckTool::SetAngTolerance(const Standard_Real theTolerance) +{ + myHasCheck = Standard_False; + myAngTolerance = theTolerance; + myPossibleBlocks.Clear(); +} + //======================================================================= //function : Perform //purpose : @@ -159,7 +178,6 @@ void BlockFix_CheckTool::Perform() if (nbe < 12) IsBlock = Standard_False; if (nbe > 12) { - IsBlock = Standard_False; // check edges unification // creating map of edge faces TopTools_IndexedDataMapOfShapeListOfShape aMapEdgeFaces; @@ -194,9 +212,19 @@ void BlockFix_CheckTool::Perform() Standard_Integer i = 1; for (; i <= aMapFacesEdges.Extent(); i++) { const TopTools_ListOfShape& ListEdges = aMapFacesEdges.FindFromIndex(i); - if (ListEdges.Extent() > 1) break; + if (ListEdges.Extent() > 1) { + if (myAngTolerance < 0.) { + break; + } + + // Check if edges have C1 continuity. + if (!isC1(ListEdges)) { + break; + } + } } if (i <= aMapFacesEdges.Extent()) { + IsBlock = Standard_False; MayBeUE = Standard_True; break; } @@ -265,3 +293,84 @@ void BlockFix_CheckTool::DumpCheckResult(Standard_OStream& S) const S<<" number of impossible blocks = "<D1(aParam1, aPnt, aVec1); + aCurve2->D1(aParam2, aPnt, aVec2); + + if (anEdge1.Orientation() != anEdge2.Orientation()) { + // Orientations are different. One vector should be reversed. + aVec1.Reverse(); + } + + const Standard_Real anAngle = aVec1.Angle(aVec2); + + if (anAngle > myAngTolerance) { + // There is no C1 continuity. + break; + } + } else { + // Non-manifold case. + break; + } + } + + return (i > aNbVtx && aNbEnds == 2); +} diff --git a/src/BlockFix/BlockFix_CheckTool.hxx b/src/BlockFix/BlockFix_CheckTool.hxx index 83bd5b3c1..66711433c 100644 --- a/src/BlockFix/BlockFix_CheckTool.hxx +++ b/src/BlockFix/BlockFix_CheckTool.hxx @@ -30,6 +30,7 @@ #include class TopoDS_Shape; +class TopTools_ListOfShape; #include #include @@ -38,14 +39,20 @@ class BlockFix_CheckTool { public: Standard_EXPORT BlockFix_CheckTool(); - Standard_EXPORT void SetShape(const TopoDS_Shape& aShape) ; + Standard_EXPORT void SetShape(const TopoDS_Shape& aShape); + Standard_EXPORT void SetAngTolerance(const Standard_Real theTolerance); Standard_EXPORT void Perform() ; Standard_EXPORT Standard_Integer NbPossibleBlocks() const; Standard_EXPORT TopoDS_Shape PossibleBlock(const Standard_Integer num) const; Standard_EXPORT void DumpCheckResult(Standard_OStream& S) const; private: - TopoDS_Shape myShape; + + Standard_Boolean isC1(const TopTools_ListOfShape &theEdges) const; + +private: + TopoDS_Shape myShape; + Standard_Real myAngTolerance; Standard_Boolean myHasCheck; Standard_Integer myNbSolids; Standard_Integer myNbBlocks; diff --git a/src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx b/src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx index 8eb8f09da..2a733c51e 100644 --- a/src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx @@ -1808,6 +1808,7 @@ void GEOMImpl_IBlocksOperations::AddBlocksFrom (const TopoDS_Shape& theShape, // Check, if there are seam or degenerated edges BlockFix_CheckTool aTool; aTool.SetShape(theShape); + aTool.SetAngTolerance(theToleranceC1); aTool.Perform(); if (aTool.NbPossibleBlocks() > 0) { EXT.Append(theShape); @@ -2139,6 +2140,7 @@ TCollection_AsciiString GEOMImpl_IBlocksOperations::PrintBCErrors //============================================================================= Standard_Boolean GEOMImpl_IBlocksOperations::CheckCompoundOfBlocks (Handle(GEOM_Object) theCompound, + const Standard_Real theToleranceC1, std::list& theErrors) { SetErrorCode(KO); @@ -2157,7 +2159,7 @@ Standard_Boolean GEOMImpl_IBlocksOperations::CheckCompoundOfBlocks TopTools_ListOfShape EXT; // Hexahedral solids, having degenerated and/or seam edges TopTools_ListOfShape BLO; // All blocks from the given compound TopTools_ListOfShape NOQ; // All non-quadrangular faces - AddBlocksFrom(aBlockOrComp, BLO, NOT, EXT, NOQ, -1.); + AddBlocksFrom(aBlockOrComp, BLO, NOT, EXT, NOQ, theToleranceC1); // Report non-blocks if (NOT.Extent() > 0) { diff --git a/src/GEOMImpl/GEOMImpl_IBlocksOperations.hxx b/src/GEOMImpl/GEOMImpl_IBlocksOperations.hxx index 34162d6ed..568872a08 100644 --- a/src/GEOMImpl/GEOMImpl_IBlocksOperations.hxx +++ b/src/GEOMImpl/GEOMImpl_IBlocksOperations.hxx @@ -126,6 +126,7 @@ class GEOMImpl_IBlocksOperations : public GEOM_IOperations { }; Standard_EXPORT Standard_Boolean CheckCompoundOfBlocks (Handle(GEOM_Object) theCompound, + const Standard_Real theToleranceC1, std::list& theErrors); Standard_EXPORT TCollection_AsciiString PrintBCErrors (Handle(GEOM_Object) theCompound, diff --git a/src/GEOM_I/GEOM_IBlocksOperations_i.cc b/src/GEOM_I/GEOM_IBlocksOperations_i.cc index 572cdd7f9..513ffa752 100644 --- a/src/GEOM_I/GEOM_IBlocksOperations_i.cc +++ b/src/GEOM_I/GEOM_IBlocksOperations_i.cc @@ -614,6 +614,7 @@ CORBA::Boolean GEOM_IBlocksOperations_i::IsCompoundOfBlocks //============================================================================= CORBA::Boolean GEOM_IBlocksOperations_i::CheckCompoundOfBlocks (GEOM::GEOM_Object_ptr theCompound, + const CORBA::Double theToleranceC1, GEOM::GEOM_IBlocksOperations::BCErrors_out theErrors) { CORBA::Boolean isComp = false; @@ -627,7 +628,8 @@ CORBA::Boolean GEOM_IBlocksOperations_i::CheckCompoundOfBlocks //Check std::list errList; - isComp = GetOperations()->CheckCompoundOfBlocks(aCompound, errList); + isComp = GetOperations()->CheckCompoundOfBlocks + (aCompound, theToleranceC1, errList); if (!GetOperations()->IsDone()) return isComp; diff --git a/src/GEOM_I/GEOM_IBlocksOperations_i.hh b/src/GEOM_I/GEOM_IBlocksOperations_i.hh index 482ea8a8e..7755eeb64 100644 --- a/src/GEOM_I/GEOM_IBlocksOperations_i.hh +++ b/src/GEOM_I/GEOM_IBlocksOperations_i.hh @@ -116,6 +116,7 @@ class GEOM_I_EXPORT GEOM_IBlocksOperations_i : CORBA::Long& theNbBlocks); CORBA::Boolean CheckCompoundOfBlocks (GEOM::GEOM_Object_ptr theCompound, + const CORBA::Double theToleranceC1, GEOM::GEOM_IBlocksOperations::BCErrors_out theErrors); char* PrintBCErrors (GEOM::GEOM_Object_ptr theCompound, diff --git a/src/GEOM_I_Superv/GEOM_Superv_i.cc b/src/GEOM_I_Superv/GEOM_Superv_i.cc index 867a5c6f7..0324e6e59 100644 --- a/src/GEOM_I_Superv/GEOM_Superv_i.cc +++ b/src/GEOM_I_Superv/GEOM_Superv_i.cc @@ -2713,7 +2713,7 @@ CORBA::Boolean GEOM_Superv_i::CheckCompoundOfBlocks beginService( " GEOM_Superv_i::CheckCompoundOfBlocks" ); MESSAGE("GEOM_Superv_i::CheckCompoundOfBlocks"); getBlocksOp(); - CORBA::Boolean aRes = myBlocksOp->CheckCompoundOfBlocks(theCompound, theErrors); + CORBA::Boolean aRes = myBlocksOp->CheckCompoundOfBlocks(theCompound, -1., theErrors); endService( " GEOM_Superv_i::CheckCompoundOfBlocks" ); return aRes; } diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py index 652b4173b..8cc95a262 100644 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -11393,36 +11393,62 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): ## Check, if the compound of blocks is given. # To be considered as a compound of blocks, the # given shape must satisfy the following conditions: - # - Each element of the compound should be a Block (6 faces and 12 edges). + # - Each element of the compound should be a Block (6 faces). + # - Each face should be a quadrangle, i.e. it should have only 1 wire + # with 4 edges. If theIsUseC1 is set to True and + # there are more than 4 edges in the only wire of a face, + # this face is considered to be quadrangle if it has 4 bounds + # (1 or more edge) of C1 continuity. # - A connection between two Blocks should be an entire quadrangle face or an entire edge. # - The compound should be connexe. # - The glue between two quadrangle faces should be applied. # @param theCompound The compound to check. + # @param theIsUseC1 Flag to check if there are 4 bounds on a face + # taking into account C1 continuity. + # @param theAngTolerance the angular tolerance to check if two neighbor + # edges are codirectional in the common vertex with this + # tolerance. This parameter is used only if + # theIsUseC1 is set to True. # @return TRUE, if the given shape is a compound of blocks. # If theCompound is not valid, prints all discovered errors. # # @ref tui_measurement_tools_page "Example 1" # \n @ref swig_CheckCompoundOfBlocks "Example 2" @ManageTransactions("BlocksOp") - def CheckCompoundOfBlocks(self,theCompound): + def CheckCompoundOfBlocks(self,theCompound, theIsUseC1 = False, + theAngTolerance = 1.e-12): """ Check, if the compound of blocks is given. To be considered as a compound of blocks, the given shape must satisfy the following conditions: - - Each element of the compound should be a Block (6 faces and 12 edges). + - Each element of the compound should be a Block (6 faces). + - Each face should be a quadrangle, i.e. it should have only 1 wire + with 4 edges. If theIsUseC1 is set to True and + there are more than 4 edges in the only wire of a face, + this face is considered to be quadrangle if it has 4 bounds + (1 or more edge) of C1 continuity. - A connection between two Blocks should be an entire quadrangle face or an entire edge. - The compound should be connexe. - The glue between two quadrangle faces should be applied. Parameters: theCompound The compound to check. + theIsUseC1 Flag to check if there are 4 bounds on a face + taking into account C1 continuity. + theAngTolerance the angular tolerance to check if two neighbor + edges are codirectional in the common vertex with this + tolerance. This parameter is used only if + theIsUseC1 is set to True. Returns: TRUE, if the given shape is a compound of blocks. If theCompound is not valid, prints all discovered errors. """ # Example: see GEOM_Spanner.py - (IsValid, BCErrors) = self.BlocksOp.CheckCompoundOfBlocks(theCompound) + aTolerance = -1.0 + if theIsUseC1: + aTolerance = theAngTolerance + (IsValid, BCErrors) = self.BlocksOp.CheckCompoundOfBlocks(theCompound, aTolerance) RaiseIfFailed("CheckCompoundOfBlocks", self.BlocksOp) if IsValid == 0: Descr = self.BlocksOp.PrintBCErrors(theCompound, BCErrors) diff --git a/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.cxx b/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.cxx index 8d7961412..eee95b56b 100644 --- a/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.cxx @@ -26,7 +26,6 @@ // #include "MeasureGUI.h" #include "MeasureGUI_CheckCompoundOfBlocksDlg.h" -#include "MeasureGUI_Widgets.h" #include #include @@ -43,6 +42,8 @@ #include #include +#include + #define TEXTEDIT_FONT_FAMILY "Courier" #define TEXTEDIT_FONT_SIZE 11 @@ -54,7 +55,15 @@ // true to construct a modal dialog. //================================================================================= MeasureGUI_CheckCompoundOfBlocksDlg::MeasureGUI_CheckCompoundOfBlocksDlg( GeometryGUI* GUI, QWidget* parent ) - : GEOMBase_Skeleton( GUI, parent, false ) + : GEOMBase_Skeleton(GUI, parent, false), + myObjectName (0), + mySelButton (0), + myUseC1Check (0), + myTolLbl (0), + mySpinTol (0), + myTextView (0), + myListBox1 (0), + myListBox2 (0) { SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); QPixmap image0( aResMgr->loadPixmap( "GEOM", tr( "ICON_DLG_CHECK_COMPOUND_OF_BLOCKS" ) ) ); @@ -70,29 +79,55 @@ MeasureGUI_CheckCompoundOfBlocksDlg::MeasureGUI_CheckCompoundOfBlocksDlg( Geomet mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose ); mainFrame()->RadioButton3->close(); - myGrp = new MeasureGUI_1Sel1TextView2ListBox( centralWidget() ); - myGrp->GroupBox1->setTitle( tr( "GEOM_CHECK_INFOS" ) ); - myGrp->TextLabel1->setText( tr( "GEOM_OBJECT" ) ); - - myGrp->TextView1->setReadOnly( true ); - QFont aFont( TEXTEDIT_FONT_FAMILY, TEXTEDIT_FONT_SIZE ); - aFont.setStyleHint( QFont::TypeWriter, QFont::PreferAntialias ); - myGrp->TextView1->setFont( aFont ); - - myGrp->PushButton1->setIcon( image1 ); - myGrp->LineEdit1->setReadOnly( true ); - - myGrp->TextLabel2->setText( tr( "GEOM_CHECK_BLOCKS_COMPOUND_ERRORS" ) ); - myGrp->TextLabel3->setText( tr( "GEOM_CHECK_BLOCKS_COMPOUND_SUBSHAPES" ) ); - - myGrp->ListBox2->setSelectionMode( QAbstractItemView::ExtendedSelection ); + QGroupBox *aGrpParams = + new QGroupBox(tr("GEOM_CHECK_INFOS"), centralWidget()); + QGridLayout *aParamsLayout = new QGridLayout(aGrpParams); + QLabel *anObjLbl = new QLabel(tr("GEOM_OBJECT"), aGrpParams); + QLabel *anErrorsLbl = + new QLabel(tr("GEOM_CHECK_BLOCKS_COMPOUND_ERRORS"), aGrpParams); + QLabel *aNonBlocksLbl = + new QLabel(tr("GEOM_CHECK_BLOCKS_COMPOUND_SUBSHAPES"), aGrpParams); + + myObjectName = new QLineEdit(aGrpParams); + mySelButton = new QPushButton(aGrpParams); + myUseC1Check = new QCheckBox(tr("GEOM_USE_C1_CRITERION"), aGrpParams); + myTolLbl = new QLabel(tr("GEOM_ANGULAR_TOLERANCE"), aGrpParams); + mySpinTol = new SalomeApp_DoubleSpinBox(aGrpParams); + myTextView = new QTextBrowser(aGrpParams); + myListBox1 = new QListWidget(aGrpParams); + myListBox2 = new QListWidget(aGrpParams); + + myObjectName->setReadOnly(true); + mySelButton->setIcon(image1); + mySelButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + myUseC1Check->setText(tr("GEOM_USE_C1_CRITERION")); + myUseC1Check->setChecked(true); + myTextView->setReadOnly(true); + myListBox2->setSelectionMode(QAbstractItemView::ExtendedSelection); + + // Set text view font. + QFont aFont(TEXTEDIT_FONT_FAMILY, TEXTEDIT_FONT_SIZE); + + aFont.setStyleHint(QFont::TypeWriter, QFont::PreferAntialias); + myTextView->setFont(aFont); + + aParamsLayout->setMargin(9); + aParamsLayout->setSpacing(6); + aParamsLayout->addWidget(anObjLbl, 0, 0); + aParamsLayout->addWidget(mySelButton, 0, 1); + aParamsLayout->addWidget(myObjectName, 0, 2); + aParamsLayout->addWidget(myUseC1Check, 1, 0, 1, 3); + aParamsLayout->addWidget(myTolLbl, 2, 0); + aParamsLayout->addWidget(mySpinTol, 2, 1, 1, 2); + aParamsLayout->addWidget(myTextView, 3, 0, 1, 3); + aParamsLayout->addWidget(anErrorsLbl, 4, 0); + aParamsLayout->addWidget(myListBox1, 5, 0, 1, 2); + aParamsLayout->addWidget(aNonBlocksLbl, 4, 2); + aParamsLayout->addWidget(myListBox2, 5, 2); QVBoxLayout* layout = new QVBoxLayout( centralWidget() ); layout->setMargin( 0 ); layout->setSpacing( 6 ); - layout->addWidget( myGrp ); - - connect( myGrp->ListBox1, SIGNAL( itemSelectionChanged() ), SLOT( onErrorsListSelectionChanged() ) ); - connect( myGrp->ListBox2, SIGNAL( itemSelectionChanged() ), SLOT( onSubShapesListSelectionChanged() ) ); + layout->addWidget( aGrpParams ); /***************************************************************/ @@ -116,14 +151,24 @@ MeasureGUI_CheckCompoundOfBlocksDlg::~MeasureGUI_CheckCompoundOfBlocksDlg() //================================================================================= void MeasureGUI_CheckCompoundOfBlocksDlg::Init() { - myEditCurrentArgument = myGrp->LineEdit1; + /* init variables */ + double SpecificStep = 0.0001; + double aDefaultTol = Precision::Angular(); + + initSpinBox(mySpinTol, aDefaultTol, MAX_NUMBER, SpecificStep, "ang_tol_precision"); + mySpinTol->setValue(aDefaultTol); + myEditCurrentArgument = myObjectName; // signals and slots connections connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) ); connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) ); - connect( myGrp->LineEdit1, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) ); - connect( myGrp->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) ); + connect(myObjectName, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed())); + connect(mySelButton, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); + connect(myListBox1, SIGNAL(itemSelectionChanged()), this, SLOT(onErrorsListSelectionChanged())); + connect(myListBox2, SIGNAL(itemSelectionChanged()), this, SLOT(onSubShapesListSelectionChanged())); + connect(myUseC1Check, SIGNAL(clicked()), this, SLOT(SetUseC1Tolerance())); + connect(mySpinTol, SIGNAL(valueChanged(double)), this, SLOT(processObject())); connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); @@ -172,7 +217,7 @@ void MeasureGUI_CheckCompoundOfBlocksDlg::SelectionIntoArgument() aSelMgr->selectedObjects(aSelList); if (aSelList.Extent() != 1) { - myGrp->LineEdit1->setText( "" ); + myObjectName->setText( "" ); processObject(); return; } @@ -181,13 +226,13 @@ void MeasureGUI_CheckCompoundOfBlocksDlg::SelectionIntoArgument() GEOMBase::ConvertIOinGEOMObject( aSelList.First() ); if ( aSelectedObject->_is_nil() ) { - myGrp->LineEdit1->setText( "" ); + myObjectName->setText( "" ); processObject(); return; } myObj = aSelectedObject; - myGrp->LineEdit1->setText( GEOMBase::GetName( myObj ) ); + myObjectName->setText( GEOMBase::GetName( myObj ) ); processObject(); DISPLAY_PREVIEW_MACRO; } @@ -198,11 +243,22 @@ void MeasureGUI_CheckCompoundOfBlocksDlg::SelectionIntoArgument() //================================================================================= void MeasureGUI_CheckCompoundOfBlocksDlg::SetEditCurrentArgument() { - myGrp->LineEdit1->setFocus(); - myEditCurrentArgument = myGrp->LineEdit1; + myObjectName->setFocus(); + myEditCurrentArgument = myObjectName; SelectionIntoArgument(); } +//================================================================================= +// function : SetUseC1Tolerance() +// purpose : +//================================================================================= +void MeasureGUI_CheckCompoundOfBlocksDlg::SetUseC1Tolerance() +{ + myTolLbl->setEnabled(myUseC1Check->isChecked()); + mySpinTol->setEnabled(myUseC1Check->isChecked()); + processObject(); +} + //================================================================================= // function : LineEditReturnPressed() // purpose : @@ -210,8 +266,8 @@ void MeasureGUI_CheckCompoundOfBlocksDlg::SetEditCurrentArgument() void MeasureGUI_CheckCompoundOfBlocksDlg::LineEditReturnPressed() { QLineEdit* send = (QLineEdit*)sender(); - if ( send == myGrp->LineEdit1 ) { - myEditCurrentArgument = myGrp->LineEdit1; + if ( send == myObjectName ) { + myEditCurrentArgument = myObjectName; GEOMBase_Skeleton::LineEditReturnPressed(); } } @@ -245,7 +301,13 @@ bool MeasureGUI_CheckCompoundOfBlocksDlg::getBCErrors( bool& theIsCompoundOfBloc GEOM::GEOM_IBlocksOperations_var anOper = GEOM::GEOM_IBlocksOperations::_narrow( getOperation() ); try { GEOM::GEOM_IBlocksOperations::BCErrors_var aErrs; - theIsCompoundOfBlocks = anOper->CheckCompoundOfBlocks( myObj, aErrs ); + double aC1Tol = -1.; + + if (myUseC1Check->isChecked()) { + aC1Tol = mySpinTol->value(); + } + + theIsCompoundOfBlocks = anOper->CheckCompoundOfBlocks( myObj, aC1Tol, aErrs ); if (anOper->IsDone() && aErrs->length() > 0) //if (anOper->IsDone() && !aErrs._is_nil()) theErrors = aErrs; @@ -270,9 +332,9 @@ void MeasureGUI_CheckCompoundOfBlocksDlg::processObject() GEOM::GEOM_IBlocksOperations::BCErrors aErrs; if ( !getBCErrors( isCompoundOfBlocks, aErrs ) ) { aMsg += tr( "GEOM_CHECK_BLOCKS_COMPOUND_FAILED" ); - myGrp->TextView1->setText( aMsg ); - myGrp->ListBox1->clear(); - myGrp->ListBox2->clear(); + myTextView->setText( aMsg ); + myListBox1->clear(); + myListBox2->clear(); erasePreview(); return; } @@ -287,7 +349,7 @@ void MeasureGUI_CheckCompoundOfBlocksDlg::processObject() buttonOk()->setEnabled( true ); buttonApply()->setEnabled( true ); } - myGrp->TextView1->setText( aMsg ); + myTextView->setText( aMsg ); QStringList aErrList; QString aErrStr( "" ); @@ -321,9 +383,9 @@ void MeasureGUI_CheckCompoundOfBlocksDlg::processObject() aErrList.append( aErrStr ); } - myGrp->ListBox1->clear(); - myGrp->ListBox2->clear(); - myGrp->ListBox1->addItems( aErrList ); + myListBox1->clear(); + myListBox2->clear(); + myListBox1->addItems( aErrList ); } //================================================================================= @@ -342,19 +404,19 @@ GEOM::GEOM_IOperations_ptr MeasureGUI_CheckCompoundOfBlocksDlg::createOperation( void MeasureGUI_CheckCompoundOfBlocksDlg::onErrorsListSelectionChanged() { erasePreview(); - int aCurItem = myGrp->ListBox1->currentRow(); + int aCurItem = myListBox1->currentRow(); if ( aCurItem < 0 ) return; bool isCompoundOfBlocks; GEOM::GEOM_IBlocksOperations::BCErrors aErrs; if ( !getBCErrors( isCompoundOfBlocks, aErrs ) ) { - myGrp->TextView1->setText( "" ); - myGrp->ListBox1->clear(); - myGrp->ListBox2->clear(); + myTextView->setText( "" ); + myListBox1->clear(); + myListBox2->clear(); return; } - myGrp->ListBox2->clear(); + myListBox2->clear(); if (aCurItem < aErrs.length()) { GEOM::GEOM_IBlocksOperations::BCError aErr = aErrs[aCurItem]; @@ -371,7 +433,7 @@ void MeasureGUI_CheckCompoundOfBlocksDlg::onErrorsListSelectionChanged() aSubShapeList.append( QString( "%1_%2" ).arg( aType ).arg( aObjLst[i] ) ); } } - myGrp->ListBox2->addItems( aSubShapeList ); + myListBox2->addItems( aSubShapeList ); } } @@ -382,12 +444,12 @@ void MeasureGUI_CheckCompoundOfBlocksDlg::onErrorsListSelectionChanged() void MeasureGUI_CheckCompoundOfBlocksDlg::onSubShapesListSelectionChanged() { erasePreview(); - int aErrCurItem = myGrp->ListBox1->currentRow(); + int aErrCurItem = myListBox1->currentRow(); if ( aErrCurItem < 0 ) return; QList aIds; - for ( int i = 0, n = myGrp->ListBox2->count(); i < n; i++ ) { - if ( myGrp->ListBox2->item( i )->isSelected() ) + for ( int i = 0, n = myListBox2->count(); i < n; i++ ) { + if ( myListBox2->item( i )->isSelected() ) aIds.append( i ); } if ( aIds.count() < 1 ) @@ -395,9 +457,9 @@ void MeasureGUI_CheckCompoundOfBlocksDlg::onSubShapesListSelectionChanged() bool isCompoundOfBlocks; GEOM::GEOM_IBlocksOperations::BCErrors aErrs; if ( !getBCErrors( isCompoundOfBlocks, aErrs ) ) { - myGrp->TextView1->setText( "" ); - myGrp->ListBox1->clear(); - myGrp->ListBox2->clear(); + myTextView->setText( "" ); + myListBox1->clear(); + myListBox2->clear(); return; } @@ -433,6 +495,15 @@ void MeasureGUI_CheckCompoundOfBlocksDlg::onSubShapesListSelectionChanged() } } +//================================================================================= +// function : onDisplayPreview +// purpose : +//================================================================================= +void MeasureGUI_CheckCompoundOfBlocksDlg::onDisplayPreview() +{ + DISPLAY_PREVIEW_MACRO; +} + //================================================================================= // function : activateSelection // purpose : activate selection of faces, shells, and solids @@ -459,9 +530,9 @@ void MeasureGUI_CheckCompoundOfBlocksDlg::enterEvent( QEvent* ) // function : isValid // purpose : //================================================================================= -bool MeasureGUI_CheckCompoundOfBlocksDlg::isValid( QString& ) +bool MeasureGUI_CheckCompoundOfBlocksDlg::isValid( QString &msg) { - return !myObj->_is_nil(); + return !myObj->_is_nil() && mySpinTol->isValid(msg, !IsPreview()); } //================================================================================= diff --git a/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.h b/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.h index e6a93c4f0..b2d43ca1f 100644 --- a/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.h +++ b/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.h @@ -29,7 +29,13 @@ #include -class MeasureGUI_1Sel1TextView2ListBox; +class QCheckBox; +class QLabel; +class QLineEdit; +class QListWidget; +class QPushButton; +class QTextBrowser; +class SalomeApp_DoubleSpinBox; //================================================================================= // class : MeasureGUI_CheckCompoundOfBlocksDlg @@ -47,7 +53,7 @@ public: protected: // redefined from GEOMBase_Helper and GEOMBase_Skeleton virtual GEOM::GEOM_IOperations_ptr createOperation(); - virtual bool isValid( QString& ); + virtual bool isValid( QString &msg ); virtual bool execute( ObjectList& ); virtual void processObject(); @@ -61,6 +67,8 @@ private slots: void onErrorsListSelectionChanged(); void onSubShapesListSelectionChanged(); + void SetUseC1Tolerance(); + void onDisplayPreview(); private: void Init(); @@ -71,7 +79,14 @@ private: private: GEOM::GEOM_Object_var myObj; - MeasureGUI_1Sel1TextView2ListBox* myGrp; + QLineEdit *myObjectName; + QPushButton *mySelButton; + QCheckBox *myUseC1Check; + QLabel *myTolLbl; + SalomeApp_DoubleSpinBox *mySpinTol; + QTextBrowser *myTextView; + QListWidget *myListBox1; + QListWidget *myListBox2; }; #endif // MEASUREGUI_CHECKCOMPOUNDOFBLOCKSDLG_H -- 2.39.2