X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMeasureGUI%2FMeasureGUI_CheckCompoundOfBlocksDlg.cxx;h=c69b3db710c9acb2bcd7eb09c89b6ffc6f227f70;hb=c1d63ef1f803d255b61ee99fb618bf471add07f4;hp=596179b37eb7a68eeb5416e91f4230292d53aead;hpb=e180c20f73ffa96c2d039106f2a2a868c8bc0df1;p=modules%2Fgeom.git diff --git a/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.cxx b/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.cxx index 596179b37..c69b3db71 100644 --- a/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_CheckCompoundOfBlocksDlg.cxx @@ -1,62 +1,48 @@ -// GEOM GEOMGUI : GUI for Geometry component +// Copyright (C) 2007-2023 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 +// 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. +// 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. +// 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 +// 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// -// -// File : MeasureGUI_CheckCompoundOfBlocksDlg.cxx -// Author : VKN -// Module : GEOM -// $Header$ +// GEOM GEOMGUI : GUI for Geometry component +// File : MeasureGUI_CheckCompoundOfBlocksDlg.cxx +// Author : Vladimir KLYACHIN, Open CASCADE S.A.S. (vladimir.klyachin@opencascade.com) +// +#include "MeasureGUI.h" #include "MeasureGUI_CheckCompoundOfBlocksDlg.h" -#include "MeasureGUI_1Sel1TextView_QTD.h" -#include "utilities.h" -#include "SUIT_Session.h" -#include "LightApp_SelectionMgr.h" -#include "SalomeApp_Tools.h" -#include "SalomeApp_Application.h" +#include +#include +#include +#include +#include #include #include #include -#include "GEOMBase.h" -#include "GEOMImpl_Types.hxx" - -#include -#include -#include -#include -#include -#include -// QT Includes -#include -#include -#include - -//VRV: porting on Qt 3.0.5 -#if QT_VERSION >= 0x030005 -#include -#endif -//VRV: porting on Qt 3.0.5 + +#include +#include +#include +#include + +#include #define TEXTEDIT_FONT_FAMILY "Courier" #define TEXTEDIT_FONT_SIZE 11 @@ -66,64 +52,86 @@ // purpose : Constructs a MeasureGUI_CheckCompoundOfBlocksDlg 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_CheckCompoundOfBlocksDlg::MeasureGUI_CheckCompoundOfBlocksDlg( GeometryGUI* GUI, QWidget* parent ) - : GEOMBase_Skeleton(GUI, parent, "MeasureGUI_CheckCompoundOfBlocksDlg", false, WStyle_Customize | - WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose) + : 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"))); - QPixmap image1 (aResMgr->loadPixmap("GEOM", tr("ICON_SELECT"))); + QPixmap image0( aResMgr->loadPixmap( "GEOM", tr( "ICON_DLG_CHECK_COMPOUND_OF_BLOCKS" ) ) ); + QPixmap image1( aResMgr->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) ); - setCaption( tr( "GEOM_CHECK_BLOCKS_COMPOUND" ) ); + setWindowTitle( tr( "GEOM_CHECK_BLOCKS_COMPOUND" ) ); /***************************************************************/ - GroupConstructors->setTitle( tr( "GEOM_CHECK_BLOCKS_COMPOUND" ) ); - RadioButton1->setPixmap( image0 ); - RadioButton2->close( TRUE ); - RadioButton3->close( TRUE ); - - myGrp = new MeasureGUI_1Sel1TextView_QTD( this, "myGrp" ); - myGrp->GroupBox1->setTitle( tr( "GEOM_CHECK_INFOS" ) ); - myGrp->TextLabel1->setText( tr( "GEOM_OBJECT" ) ); - - myGrp->TextEdit1->setReadOnly( TRUE ); - QFont aFont( TEXTEDIT_FONT_FAMILY, TEXTEDIT_FONT_SIZE ); - aFont.setStyleHint( QFont::TypeWriter, QFont::PreferAntialias ); - myGrp->TextEdit1->setFont( aFont ); - - myGrp->PushButton1->setPixmap( image1 ); - myGrp->LineEdit1->setReadOnly( true ); + mainFrame()->GroupConstructors->setTitle( tr( "GEOM_CHECK_BLOCKS_COMPOUND" ) ); + mainFrame()->RadioButton1->setIcon( image0 ); + mainFrame()->RadioButton2->setAttribute( Qt::WA_DeleteOnClose ); + mainFrame()->RadioButton2->close(); + mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose ); + mainFrame()->RadioButton3->close(); + + 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( aGrpParams ); - /***************************************************************/ - QGridLayout* aGBLayout = new QGridLayout( myGrp->GroupBox1->layout() ); - aGBLayout->setAlignment( Qt::AlignTop ); - QGridLayout* Layout2 = new QGridLayout( 0, 1, 1, 0, 6, "Layout2"); - myErrorsLbl = new QLabel( tr( "GEOM_CHECK_BLOCKS_COMPOUND_ERRORS" ), myGrp, "Errors" ); - Layout2->addWidget( myErrorsLbl, 0, 0 ); - - myErrorsLBox = new QListBox( myGrp, "ListBlockCompoundErrors" ); - myErrorsLBox->setMinimumSize( 100, 100 ); - Layout2->addWidget( myErrorsLBox, 1, 0 ); - - mySubShapesLbl = new QLabel( tr( "GEOM_CHECK_BLOCKS_COMPOUND_SUBSHAPES" ), - myGrp, "BlockCompoundSubShapes" ); - Layout2->addWidget( mySubShapesLbl, 0, 1 ); - - mySubShapesLBox = new QListBox( myGrp, "ListSubShapes" ); - mySubShapesLBox->setMinimumSize( 100, 100 ); - mySubShapesLBox->setSelectionMode(QListBox::Extended); - Layout2->addWidget( mySubShapesLBox, 1, 1 ); - aGBLayout->addLayout( Layout2, 1, 0 ); - - Layout1->addWidget( myGrp, 2, 0 ); - - connect( myErrorsLBox, SIGNAL( selectionChanged() ), SLOT( onErrorsListSelectionChanged() ) ); - connect( mySubShapesLBox, SIGNAL( selectionChanged() ), SLOT( onSubShapesListSelectionChanged() ) ); /***************************************************************/ - myHelpFileName = "files/salome2_sp3_measuregui_functions.htm#Check_comp_blocks"; + myHelpFileName = "check_compound_of_blocks_page.html"; /* Initialisation */ Init(); @@ -143,26 +151,33 @@ 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( 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())); + connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ), + this, SLOT( SelectionIntoArgument() ) ); initName( tr( "GEOM_BLOCKS_COMPOUND") ); - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); + buttonOk()->setEnabled( false ); + buttonApply()->setEnabled( false ); activateSelection(); SelectionIntoArgument(); - - // displays Dialog - this->show(); } //================================================================================= @@ -171,7 +186,7 @@ void MeasureGUI_CheckCompoundOfBlocksDlg::Init() //================================================================================= void MeasureGUI_CheckCompoundOfBlocksDlg::ClickOnOk() { - if (ClickOnApply()) + if ( ClickOnApply() ) ClickOnCancel(); } @@ -197,26 +212,29 @@ void MeasureGUI_CheckCompoundOfBlocksDlg::SelectionIntoArgument() erasePreview(); myObj = GEOM::GEOM_Object::_nil(); - if (IObjectCount() != 1) { - myGrp->LineEdit1->setText(""); + LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr(); + SALOME_ListIO aSelList; + aSelMgr->selectedObjects(aSelList); + + if (aSelList.Extent() != 1) { + myObjectName->setText( "" ); processObject(); return; } - Standard_Boolean testResult = Standard_False; GEOM::GEOM_Object_var aSelectedObject = - GEOMBase::ConvertIOinGEOMObject( firstIObject(), testResult ); + GEOMBase::ConvertIOinGEOMObject( aSelList.First() ); - if (!testResult || aSelectedObject->_is_nil()) { - myGrp->LineEdit1->setText(""); + if ( aSelectedObject->_is_nil() ) { + myObjectName->setText( "" ); processObject(); return; } myObj = aSelectedObject; - myGrp->LineEdit1->setText(GEOMBase::GetName(myObj)); + myObjectName->setText( GEOMBase::GetName( myObj ) ); processObject(); - displayPreview(); + DISPLAY_PREVIEW_MACRO; } //================================================================================= @@ -225,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 : @@ -237,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(); } } @@ -252,11 +281,11 @@ void MeasureGUI_CheckCompoundOfBlocksDlg::ActivateThisDialog() GEOMBase_Skeleton::ActivateThisDialog(); LightApp_SelectionMgr* aSel = myGeomGUI->getApp()->selectionMgr(); - if (aSel) - connect(aSel, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); + if ( aSel ) + connect( aSel, SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); activateSelection(); - displayPreview(); + DISPLAY_PREVIEW_MACRO } //================================================================================= @@ -264,26 +293,31 @@ void MeasureGUI_CheckCompoundOfBlocksDlg::ActivateThisDialog() // purpose : //================================================================================= bool MeasureGUI_CheckCompoundOfBlocksDlg::getBCErrors( bool& theIsCompoundOfBlocks, - GEOM::GEOM_IBlocksOperations::BCErrors& theErrors) + GEOM::GEOM_IBlocksOperations::BCErrors& theErrors) { if ( myObj->_is_nil() ) return false; - else - { - try - { + else { + GEOM::GEOM_IBlocksOperations_var anOper = GEOM::GEOM_IBlocksOperations::_narrow( getOperation() ); + try { GEOM::GEOM_IBlocksOperations::BCErrors_var aErrs; - theIsCompoundOfBlocks = - GEOM::GEOM_IBlocksOperations::_narrow( getOperation() )->CheckCompoundOfBlocks( myObj, aErrs ); - theErrors = 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; } - catch( const SALOME::SALOME_Exception& e ) - { + catch ( const SALOME::SALOME_Exception& e ) { SalomeApp_Tools::QtCatchCorbaException( e ); return false; } - return getOperation()->IsDone(); + return anOper->IsDone(); } } @@ -293,28 +327,29 @@ bool MeasureGUI_CheckCompoundOfBlocksDlg::getBCErrors( bool& theIsCompoundOfBloc //================================================================================= void MeasureGUI_CheckCompoundOfBlocksDlg::processObject() { - QString aMsg (""); + QString aMsg ( "" ); bool isCompoundOfBlocks; GEOM::GEOM_IBlocksOperations::BCErrors aErrs; - if ( !getBCErrors( isCompoundOfBlocks, aErrs ) ) - { - myGrp->TextEdit1->setText( aMsg ); - myErrorsLBox->clear(); - mySubShapesLBox->clear(); + if ( !getBCErrors( isCompoundOfBlocks, aErrs ) ) { + aMsg += tr( "GEOM_CHECK_BLOCKS_COMPOUND_FAILED" ); + myTextView->setText( aMsg ); + myListBox1->clear(); + myListBox2->clear(); erasePreview(); return; } - if (isCompoundOfBlocks) { + if ( isCompoundOfBlocks ) { aMsg += tr( "GEOM_CHECK_BLOCKS_COMPOUND_HAS_NO_ERRORS" ); - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - } else { + buttonOk()->setEnabled( false ); + buttonApply()->setEnabled( false ); + } + else { aMsg += tr( "GEOM_CHECK_BLOCKS_COMPOUND_HAS_ERRORS" ); - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); + buttonOk()->setEnabled( true ); + buttonApply()->setEnabled( true ); } - myGrp->TextEdit1->setText(aMsg); + myTextView->setText( aMsg ); QStringList aErrList; QString aErrStr( "" ); @@ -322,43 +357,35 @@ void MeasureGUI_CheckCompoundOfBlocksDlg::processObject() QString aGluedSfx( " # " ); int aConNum = 1; int aGluedNum = 1; - for ( int i = 0, n = aErrs.length(); i < n; i++ ) - { + for ( int i = 0, n = aErrs.length(); i < n; i++ ) { aErrStr = ""; - switch ( aErrs[i].error ) - { + switch ( aErrs[i].error ) { case GEOM::GEOM_IBlocksOperations::NOT_BLOCK : - aErrStr = "Not a Block"; + aErrStr = tr("GEOM_CHECK_BLOCKS_NOT_BLOCK"); break; case GEOM::GEOM_IBlocksOperations::EXTRA_EDGE : - aErrStr = "Extra Edge"; + aErrStr = tr("GEOM_CHECK_BLOCKS_EXTRA_EDGE"); break; case GEOM::GEOM_IBlocksOperations::INVALID_CONNECTION : - aErrStr = "Invalid Connection"; - aErrStr += aConSfx; - aErrStr += QString::number(aConNum); - aConNum++; + aErrStr = tr("GEOM_CHECK_BLOCKS_INVALID_CONNECTION").arg(aConNum++); break; case GEOM::GEOM_IBlocksOperations::NOT_CONNECTED : - aErrStr = "Not Connected"; + aErrStr = tr("GEOM_CHECK_BLOCKS_NOT_CONNECTED"); break; case GEOM::GEOM_IBlocksOperations::NOT_GLUED : - aErrStr = "Not Glued"; - aErrStr += aGluedSfx; - aErrStr += QString::number(aGluedNum); - aGluedNum++; + aErrStr = tr("GEOM_CHECK_BLOCKS_NOT_GLUED").arg(aGluedNum++); break; default : - aErrStr = ""; - break; + aErrStr = ""; + break; } if ( !aErrStr.isEmpty() ) - aErrList.append(aErrStr); + aErrList.append( aErrStr ); } - myErrorsLBox->clear(); - mySubShapesLBox->clear(); - myErrorsLBox->insertStringList(aErrList); + myListBox1->clear(); + myListBox2->clear(); + myListBox1->addItems( aErrList ); } //================================================================================= @@ -367,7 +394,7 @@ void MeasureGUI_CheckCompoundOfBlocksDlg::processObject() //================================================================================= GEOM::GEOM_IOperations_ptr MeasureGUI_CheckCompoundOfBlocksDlg::createOperation() { - return getGeomEngine()->GetIBlocksOperations(getStudyId()); + return getGeomEngine()->GetIBlocksOperations(); } //================================================================================= @@ -377,42 +404,37 @@ GEOM::GEOM_IOperations_ptr MeasureGUI_CheckCompoundOfBlocksDlg::createOperation( void MeasureGUI_CheckCompoundOfBlocksDlg::onErrorsListSelectionChanged() { erasePreview(); - int aCurItem = myErrorsLBox->currentItem(); + int aCurItem = myListBox1->currentRow(); if ( aCurItem < 0 ) return; bool isCompoundOfBlocks; GEOM::GEOM_IBlocksOperations::BCErrors aErrs; - if ( !getBCErrors( isCompoundOfBlocks, aErrs ) ) - { - myGrp->TextEdit1->setText( "" ); - myErrorsLBox->clear(); - mySubShapesLBox->clear(); + if ( !getBCErrors( isCompoundOfBlocks, aErrs ) ) { + myTextView->setText( "" ); + myListBox1->clear(); + myListBox2->clear(); return; } - - GEOM::GEOM_IBlocksOperations::BCError aErr = aErrs[aCurItem]; - GEOM::ListOfLong aObjLst = aErr.incriminated; - TopoDS_Shape aSelShape; - TopoDS_Shape aSubShape; - TopTools_IndexedMapOfShape anIndices; - QStringList aSubShapeList; - QString aSubShapeName(""); - Standard_CString aTypeString; - if ( !myObj->_is_nil() && GEOMBase::GetShape( myObj, aSelShape ) ) - { - TopExp::MapShapes( aSelShape, anIndices); - for ( int i = 0, n = aObjLst.length(); i < n; i++ ) - { - aSubShapeName = ""; - aSubShape = anIndices.FindKey(aObjLst[i]); - if ( GEOMBase::GetShapeTypeString( aSubShape, aTypeString ) ) - aSubShapeName = QString(aTypeString) + QString("_") + QString::number(aObjLst[i]); - if ( !aSubShapeName.isEmpty() ) - aSubShapeList.append(aSubShapeName); + + myListBox2->clear(); + + if (aCurItem < (int)aErrs.length()) { + GEOM::GEOM_IBlocksOperations::BCError aErr = aErrs[aCurItem]; + GEOM::ListOfLong aObjLst = aErr.incriminated; + QStringList aSubShapeList; + TopoDS_Shape aSelShape; + if ( !myObj->_is_nil() && GEOMBase::GetShape( myObj, aSelShape ) ) { + TopTools_IndexedMapOfShape anIndices; + TopExp::MapShapes( aSelShape, anIndices ); + for ( int i = 0, n = aObjLst.length(); i < n; i++ ) { + TopoDS_Shape aSubShape = anIndices.FindKey( aObjLst[i] ); + QString aType = GEOMBase::GetShapeTypeString( aSubShape ); + if ( !aType.isEmpty() ) + aSubShapeList.append( QString( "%1_%2" ).arg( aType ).arg( aObjLst[i] ) ); + } } + myListBox2->addItems( aSubShapeList ); } - mySubShapesLBox->clear(); - mySubShapesLBox->insertStringList(aSubShapeList); } //================================================================================= @@ -422,62 +444,66 @@ void MeasureGUI_CheckCompoundOfBlocksDlg::onErrorsListSelectionChanged() void MeasureGUI_CheckCompoundOfBlocksDlg::onSubShapesListSelectionChanged() { erasePreview(); - int aErrCurItem = myErrorsLBox->currentItem(); + int aErrCurItem = myListBox1->currentRow(); if ( aErrCurItem < 0 ) return; - QValueList aIds; - for ( int i = 0, n = mySubShapesLBox->count(); i < n; i++ ) - { - if ( mySubShapesLBox->isSelected( i ) ) + QList aIds; + for ( int i = 0, n = myListBox2->count(); i < n; i++ ) { + if ( myListBox2->item( i )->isSelected() ) aIds.append( i ); } if ( aIds.count() < 1 ) return; bool isCompoundOfBlocks; GEOM::GEOM_IBlocksOperations::BCErrors aErrs; - if ( !getBCErrors( isCompoundOfBlocks, aErrs ) ) - { - myGrp->TextEdit1->setText( "" ); - myErrorsLBox->clear(); - mySubShapesLBox->clear(); + if ( !getBCErrors( isCompoundOfBlocks, aErrs ) ) { + myTextView->setText( "" ); + myListBox1->clear(); + myListBox2->clear(); return; } - + GEOM::GEOM_IBlocksOperations::BCError aErr = aErrs[aErrCurItem]; GEOM::ListOfLong aObjLst = aErr.incriminated; TopoDS_Shape aSelShape; - TopoDS_Shape aSubShape; + TopoDS_Shape aSubShape; TopTools_IndexedMapOfShape anIndices; - if ( !myObj->_is_nil() && GEOMBase::GetShape( myObj, aSelShape ) ) - { + if ( !myObj->_is_nil() && GEOMBase::GetShape( myObj, aSelShape ) ) { QString aMess; - if ( !isValid( aMess ) ) - { + if ( !isValid( aMess ) ) { return; } SALOME_Prs* aPrs = 0; TopExp::MapShapes( aSelShape, anIndices); - QValueList::iterator it; - for ( it = aIds.begin(); it != aIds.end(); ++it ) - { + QList::iterator it; + for ( it = aIds.begin(); it != aIds.end(); ++it ) { aSubShape = anIndices.FindKey(aObjLst[(*it)]); - try - { + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + int w = resMgr->integerValue("Geometry", "preview_edge_width", 1); + try { getDisplayer()->SetColor( Quantity_NOC_RED ); - getDisplayer()->SetWidth( 3 ); + getDisplayer()->SetWidth( w ); getDisplayer()->SetToActivate( false ); aPrs = !aSubShape.IsNull() ? getDisplayer()->BuildPrs( aSubShape ) : 0; if ( aPrs ) - displayPreview( aPrs, true ); + displayPreview( aPrs, true ); } - catch( const SALOME::SALOME_Exception& e ) - { + catch ( const SALOME::SALOME_Exception& e ) { SalomeApp_Tools::QtCatchCorbaException( e ); } } } } +//================================================================================= +// function : onDisplayPreview +// purpose : +//================================================================================= +void MeasureGUI_CheckCompoundOfBlocksDlg::onDisplayPreview() +{ + DISPLAY_PREVIEW_MACRO; +} + //================================================================================= // function : activateSelection // purpose : activate selection of faces, shells, and solids @@ -494,9 +520,9 @@ void MeasureGUI_CheckCompoundOfBlocksDlg::activateSelection() // function : enterEvent() // purpose : //================================================================================= -void MeasureGUI_CheckCompoundOfBlocksDlg::enterEvent(QEvent* e) +void MeasureGUI_CheckCompoundOfBlocksDlg::enterEvent( QEvent* ) { - if (!GroupConstructors->isEnabled()) + if ( !mainFrame()->GroupConstructors->isEnabled() ) ActivateThisDialog(); } @@ -504,9 +530,9 @@ void MeasureGUI_CheckCompoundOfBlocksDlg::enterEvent(QEvent* e) // 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()); } //================================================================================= @@ -515,12 +541,11 @@ bool MeasureGUI_CheckCompoundOfBlocksDlg::isValid( QString& ) //================================================================================= bool MeasureGUI_CheckCompoundOfBlocksDlg::execute( ObjectList& objects ) { - GEOM::GEOM_Object_var anObj; - - anObj = GEOM::GEOM_IBlocksOperations::_narrow(getOperation())->CheckAndImprove(myObj); + GEOM::GEOM_IBlocksOperations_var anOper = GEOM::GEOM_IBlocksOperations::_narrow( getOperation() ); + GEOM::GEOM_Object_var anObj = anOper->CheckAndImprove( myObj ); - if (!anObj->_is_nil()) - objects.push_back(anObj._retn()); + if ( !anObj->_is_nil() ) + objects.push_back( anObj._retn() ); return true; }