From cdc804c6f772dbb67eb41efa94303bd9d89d1a71 Mon Sep 17 00:00:00 2001 From: jfa Date: Thu, 14 Jan 2010 09:45:03 +0000 Subject: [PATCH] Mantis issue 0020508: EDF 1059 GEOM : Selection of a group in Suppress Faces. --- doc/salome/gui/GEOM/images/repair2.png | Bin 16315 -> 19213 bytes .../GEOM/input/suppress_faces_operation.doc | 6 +- src/GEOMImpl/GEOMImpl_HealingDriver.cxx | 12 +- src/GEOMImpl/GEOMImpl_IHealingOperations.cxx | 26 +- src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx | 298 ++++++++++-------- src/RepairGUI/RepairGUI_SuppressFacesDlg.h | 40 +-- 6 files changed, 195 insertions(+), 187 deletions(-) diff --git a/doc/salome/gui/GEOM/images/repair2.png b/doc/salome/gui/GEOM/images/repair2.png index 8049d60e8d601a86def03e5b8e192eae3c15edd4..de86a8c7c9704f3255f62ff4176f33582657c11d 100755 GIT binary patch literal 19213 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 X2&aTZ3Q*vod_0BcsxqZdO@jUpruzNp diff --git a/doc/salome/gui/GEOM/input/suppress_faces_operation.doc b/doc/salome/gui/GEOM/input/suppress_faces_operation.doc index 67dbd6313..4606cb609 100644 --- a/doc/salome/gui/GEOM/input/suppress_faces_operation.doc +++ b/doc/salome/gui/GEOM/input/suppress_faces_operation.doc @@ -13,8 +13,8 @@ available in OCC Viewer only. \n TUI Command: geompy.SuppressFaces(Shape, ListOfID), where \em Shape is a shape to be processed, \em ListOfID is a list of faces ID's to be removed. -\n Arguments: Name + Faces which should be removed (you can -select them in the 3D viewer). +\n Arguments: Name + 1 shape + Faces which should be removed +(you can select them in the 3D viewer). \image html repair2.png @@ -27,4 +27,4 @@ select them in the 3D viewer). Our TUI Scripts provide you with useful examples of the use of \ref tui_suppress_faces "Repairing Operations". -*/ \ No newline at end of file +*/ diff --git a/src/GEOMImpl/GEOMImpl_HealingDriver.cxx b/src/GEOMImpl/GEOMImpl_HealingDriver.cxx index e0c272651..2b937b450 100644 --- a/src/GEOMImpl/GEOMImpl_HealingDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_HealingDriver.cxx @@ -18,7 +18,7 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// + #include #include @@ -66,12 +66,10 @@ const Standard_GUID& GEOMImpl_HealingDriver::GetID() return aHealingDriver; } - //======================================================================= //function : GEOMImpl_HealingDriver //purpose : //======================================================================= - GEOMImpl_HealingDriver::GEOMImpl_HealingDriver() { } @@ -195,7 +193,9 @@ Standard_Boolean GEOMImpl_HealingDriver::SuppressFaces (GEOMImpl_IHealing* theHI if (aFaces.IsNull()) // remove all faces { aResult = aHealer.Perform(); - } else { + } + else + { TopTools_SequenceOfShape aShapesFaces; TopTools_IndexedMapOfShape aShapes; TopExp::MapShapes(theOriginalShape, aShapes); @@ -445,7 +445,5 @@ const Handle(GEOMImpl_HealingDriver) Handle(GEOMImpl_HealingDriver)::DownCast(co } } - return _anOtherObject ; + return _anOtherObject; } - - diff --git a/src/GEOMImpl/GEOMImpl_IHealingOperations.cxx b/src/GEOMImpl/GEOMImpl_IHealingOperations.cxx index f22b9c038..7c90d1e2c 100644 --- a/src/GEOMImpl/GEOMImpl_IHealingOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IHealingOperations.cxx @@ -18,7 +18,7 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// + #ifdef WNT #pragma warning( disable:4786 ) #endif @@ -224,7 +224,7 @@ void GEOMImpl_IHealingOperations::GetShapeProcessParameters (std::list& theParams, std::list& theValues ) { @@ -323,27 +323,27 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::SuppressFaces // set error code, check parameters SetErrorCode(KO); - if ( theObject.IsNull() ) // if theFaces.IsNull() - it's OK, it means that ALL faces must be removed.. + if (theObject.IsNull()) // if theFaces.IsNull() - it's OK, it means that ALL faces must be removed.. return NULL; Handle(GEOM_Function) aFunction, aLastFunction = theObject->GetLastFunction(); - if(aLastFunction.IsNull()) return NULL; //There is no function which creates an object to be processed + if (aLastFunction.IsNull()) return NULL; //There is no function which creates an object to be processed // Add a new object - Handle(GEOM_Object) aNewObject = GetEngine()->AddObject( GetDocID(), GEOM_COPY ); + Handle(GEOM_Object) aNewObject = GetEngine()->AddObject(GetDocID(), GEOM_COPY); //Add the function aFunction = aNewObject->AddFunction(GEOMImpl_HealingDriver::GetID(), SUPPRESS_FACES); - if(aFunction.IsNull()) return NULL; + if (aFunction.IsNull()) return NULL; //Check if the function is set correctly - if(aFunction->GetDriverGUID() != GEOMImpl_HealingDriver::GetID()) return NULL; + if (aFunction->GetDriverGUID() != GEOMImpl_HealingDriver::GetID()) return NULL; // prepare "data container" class IHealing - GEOMImpl_IHealing HI(aFunction); - HI.SetFaces( theFaces ); - HI.SetOriginal( aLastFunction ); + GEOMImpl_IHealing HI (aFunction); + HI.SetFaces(theFaces); + HI.SetOriginal(aLastFunction); //Compute the translation try { @@ -358,7 +358,7 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::SuppressFaces } catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); SetErrorCode(aFail->GetMessageString()); return NULL; } @@ -376,7 +376,6 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::SuppressFaces return aNewObject; } - //============================================================================= /*! * CloseContour @@ -811,7 +810,7 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::ChangeOrientation (Handle(GEOM_ } Handle(GEOM_Function) aFunction, aLastFunction = theObject->GetLastFunction(); - if (aLastFunction.IsNull()) + if (aLastFunction.IsNull()) return NULL; //There is no function which creates an object to be processed //Add the function @@ -908,4 +907,3 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::ChangeOrientationCopy (Handle(G SetErrorCode(OK); return aNewObject; } - diff --git a/src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx b/src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx index 8186438fd..a51768540 100644 --- a/src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx +++ b/src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx @@ -19,28 +19,27 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// GEOM GEOMGUI : GUI for Geometry component -// File : RepairGUI_SuppressFacesDlg.cxx -// Author : Lucien PIGNOLONI, Open CASCADE S.A.S. -// +// GEOM GEOMGUI : GUI for Geometry component +// File : RepairGUI_SuppressFacesDlg.cxx +// Author : Lucien PIGNOLONI, Open CASCADE S.A.S. + #include "RepairGUI_SuppressFacesDlg.h" #include #include #include +#include +#include #include #include -#include -#include -#include - -#include +// OCCT Includes #include +#include #include -#include +#include //================================================================================= // class : RepairGUI_SuppressFacesDlg() @@ -49,40 +48,43 @@ // The dialog will by default be modeless, unless you set 'modal' to // TRUE to construct a modal dialog. //================================================================================= -RepairGUI_SuppressFacesDlg::RepairGUI_SuppressFacesDlg( GeometryGUI* theGeometryGUI, QWidget* parent, - bool modal ) - : GEOMBase_Skeleton( theGeometryGUI, parent, modal ) +RepairGUI_SuppressFacesDlg::RepairGUI_SuppressFacesDlg (GeometryGUI* theGeometryGUI, QWidget* parent, + bool modal) + : GEOMBase_Skeleton(theGeometryGUI, parent, modal) { - QPixmap image0( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_SUPRESS_FACE" ) ) ); - QPixmap image1( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) ); - - setWindowTitle( tr("GEOM_SUPRESSFACE_TITLE" ) ); + QPixmap image0 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_SUPRESS_FACE"))); + QPixmap image1 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT"))); + + setWindowTitle(tr("GEOM_SUPRESSFACE_TITLE")); /***************************************************************/ mainFrame()->GroupConstructors->setTitle(tr("GEOM_SUPRESSFACE")); - mainFrame()->RadioButton1->setIcon( image0 ); - mainFrame()->RadioButton2->setAttribute( Qt::WA_DeleteOnClose ); + mainFrame()->RadioButton1->setIcon(image0); + mainFrame()->RadioButton2->setAttribute(Qt::WA_DeleteOnClose); mainFrame()->RadioButton2->close(); - mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose ); + mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose); mainFrame()->RadioButton3->close(); - GroupPoints = new DlgRef_1Sel( centralWidget() ); - GroupPoints->GroupBox1->setTitle( tr( "Faces to remove" ) ); - GroupPoints->TextLabel1->setText( tr( "Faces" ) ); - GroupPoints->PushButton1->setIcon( image1 ); - GroupPoints->LineEdit1->setReadOnly( true ); + GroupArgs = new DlgRef_2Sel(centralWidget()); + GroupArgs->GroupBox1->setTitle(tr("Faces to remove")); + GroupArgs->TextLabel1->setText(tr("GEOM_SELECTED_SHAPE")); + GroupArgs->PushButton1->setIcon(image1); + GroupArgs->LineEdit1->setReadOnly(true); - QVBoxLayout* layout = new QVBoxLayout( centralWidget() ); - layout->setMargin( 0 ); layout->setSpacing( 6 ); - layout->addWidget( GroupPoints ); + GroupArgs->TextLabel2->setText(tr("Faces to remove")); + GroupArgs->PushButton2->setIcon(image1); + GroupArgs->LineEdit2->setReadOnly(true); + + QVBoxLayout* layout = new QVBoxLayout(centralWidget()); + layout->setMargin(0); layout->setSpacing(6); + layout->addWidget(GroupArgs); /***************************************************************/ - - setHelpFileName( "suppress_faces_operation_page.html" ); + + setHelpFileName("suppress_faces_operation_page.html"); Init(); } - //================================================================================= // function : ~RepairGUI_SuppressFacesDlg() // purpose : Destroys the object and frees any allocated resources @@ -91,44 +93,43 @@ RepairGUI_SuppressFacesDlg::~RepairGUI_SuppressFacesDlg() { } - //================================================================================= // function : Init() // purpose : //================================================================================= void RepairGUI_SuppressFacesDlg::Init() { - /* init variables */ - myEditCurrentArgument = GroupPoints->LineEdit1; + // init variables + GroupArgs->LineEdit1->clear(); + GroupArgs->LineEdit2->clear(); + myObject = GEOM::GEOM_Object::_nil(); + myFacesInd = new GEOM::short_array(); + myFacesInd->length(0); - myObjects = new GEOM::ListOfGO(); - myObjects->length( 0 ); + // signals and slots connections + connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk())); + connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply())); - //myGeomGUI->SetState( 0 ); - initSelection(); - - /* signals and slots connections */ - connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) ); - connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) ); + connect(GroupArgs->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); + connect(GroupArgs->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - connect( GroupPoints->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) ); - connect( GroupPoints->LineEdit1, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) ); + connect(GroupArgs->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed())); + connect(GroupArgs->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed())); - connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), - SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); + initName(tr("SUPRESS_FACE_NEW_OBJ_NAME")); - initName( tr( "SUPRESS_FACE_NEW_OBJ_NAME" ) ); + GroupArgs->PushButton1->click(); + SelectionIntoArgument(); resize(100,100); } - //================================================================================= // function : ClickOnOk() // purpose : Same than click on apply but close this dialog. //================================================================================= void RepairGUI_SuppressFacesDlg::ClickOnOk() { - if ( ClickOnApply() ) + if (ClickOnApply()) ClickOnCancel(); } @@ -138,78 +139,67 @@ void RepairGUI_SuppressFacesDlg::ClickOnOk() //================================================================================= bool RepairGUI_SuppressFacesDlg::ClickOnApply() { - if ( !onAccept() ) + if (!onAccept()) return false; initName(); - - myEditCurrentArgument->setText( "" ); - myObjects->length( 0 ); - myFaces.clear(); - - initSelection(); - + // activate first line edit + GroupArgs->PushButton1->click(); return true; } - //================================================================================= // function : SelectionIntoArgument() -// purpose : Called when selection as changed or other case -// : used only by SelectButtonC1A1 (LineEditC1A1) +// purpose : Called when selection is changed or on dialog initialization or activation //================================================================================= void RepairGUI_SuppressFacesDlg::SelectionIntoArgument() { - myEditCurrentArgument->setText( "" ); + myEditCurrentArgument->setText(""); + // the second argument depends on the first one + GroupArgs->LineEdit2->setText(""); + myFacesInd->length(0); - Standard_Boolean aRes = Standard_False; - int i = 0; - int numFaces = 0; + if (myEditCurrentArgument == GroupArgs->LineEdit1) + myObject = GEOM::GEOM_Object::_nil(); LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr(); SALOME_ListIO aSelList; aSelMgr->selectedObjects(aSelList); - myObjects->length( aSelList.Extent() ); - myFaces.clear(); - - for (SALOME_ListIteratorOfListIO anIt (aSelList); anIt.More(); anIt.Next()) { - Handle(SALOME_InteractiveObject) anIO = anIt.Value(); - GEOM::GEOM_Object_var aSelectedObject = GEOMBase::ConvertIOinGEOMObject( anIO, aRes ); - if ( !CORBA::is_nil( aSelectedObject ) && aRes ) { - TopoDS_Shape aShape; - if ( GEOMBase::GetShape( aSelectedObject, aShape, TopAbs_SHAPE ) ) { - if ( aShape.ShapeType() <= TopAbs_FACE ) { // FACE, SHELL, SOLID, COMPOUND - GEOM::short_array anIndexes; - - TColStd_IndexedMapOfInteger aMap; - aSelMgr->GetIndexes( anIO, aMap ); - - if ( !aMap.IsEmpty() ) { - Convert( aMap, anIndexes ); - myObjects[i++] = aSelectedObject; // append the object - myFaces.append( anIndexes ); // append faces' indexes - numFaces += anIndexes.length();// just for text field output - } - } + if (aSelList.Extent() == 1) { + Handle(SALOME_InteractiveObject) anIO = aSelList.First(); + + if (myEditCurrentArgument == GroupArgs->LineEdit1) { + Standard_Boolean aRes; + myObject = GEOMBase::ConvertIOinGEOMObject(anIO, aRes); + if (aRes && GEOMBase::IsShape(myObject)) { + myEditCurrentArgument->setText(GEOMBase::GetName(myObject)); + TopoDS_Shape aShape; + if (GEOMBase::GetShape(myObject, aShape, TopAbs_FACE)) + GroupArgs->LineEdit2->setText(myEditCurrentArgument->text()); + + // clear selection + disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0); + myGeomGUI->getApp()->selectionMgr()->clearSelected(); + connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), + this, SLOT(SelectionIntoArgument())); + + GroupArgs->PushButton2->click(); } + else + myObject = GEOM::GEOM_Object::_nil(); + } + else if (myEditCurrentArgument == GroupArgs->LineEdit2) { + TColStd_IndexedMapOfInteger aMap; + aSelMgr->GetIndexes(anIO, aMap); + const int n = aMap.Extent(); + myFacesInd->length(n); + for (int i = 1; i <= n; i++) + myFacesInd[i-1] = aMap(i); + if (n) + myEditCurrentArgument->setText(QString::number(n) + "_" + tr("GEOM_FACE") + tr("_S_")); } } - myObjects->length( i ); // this is the right length, smaller of equal to the previously set - if ( numFaces ) - myEditCurrentArgument->setText( QString::number( numFaces ) + "_" + tr( "GEOM_FACE" ) + tr( "_S_" ) ); -} - -//================================================================================= -// function : Convert() -// purpose : -//================================================================================= -void RepairGUI_SuppressFacesDlg::Convert( const TColStd_IndexedMapOfInteger& theMap, GEOM::short_array& theOutSeq ) -{ - const int n = theMap.Extent(); - theOutSeq.length( n ); - for ( int i = 0; i < n; i++ ) - theOutSeq[i] = theMap( i+1 ); } //================================================================================= @@ -218,13 +208,35 @@ void RepairGUI_SuppressFacesDlg::Convert( const TColStd_IndexedMapOfInteger& the //================================================================================= void RepairGUI_SuppressFacesDlg::SetEditCurrentArgument() { - if ( sender() == GroupPoints->PushButton1 ) { - GroupPoints->LineEdit1->setFocus(); - myEditCurrentArgument = GroupPoints->LineEdit1; + QPushButton* send = (QPushButton*)sender(); + + bool isEffective = false; + + if (send == GroupArgs->PushButton1) { + isEffective = true; + myEditCurrentArgument = GroupArgs->LineEdit1; + + GroupArgs->PushButton2->setDown(false); + GroupArgs->LineEdit2->setEnabled(false); + } + else if (send == GroupArgs->PushButton2 && !myObject->_is_nil()) { + isEffective = true; + myEditCurrentArgument = GroupArgs->LineEdit2; + + GroupArgs->PushButton1->setDown(false); + GroupArgs->LineEdit1->setEnabled(false); } - SelectionIntoArgument(); -} + if (isEffective) { + initSelection(); + + // enable line edit + myEditCurrentArgument->setEnabled(true); + myEditCurrentArgument->setFocus(); + // after setFocus(), because it will be setDown(false) when loses focus + send->setDown(true); + } +} //================================================================================= // function : LineEditReturnPressed() @@ -232,13 +244,13 @@ void RepairGUI_SuppressFacesDlg::SetEditCurrentArgument() //================================================================================= void RepairGUI_SuppressFacesDlg::LineEditReturnPressed() { - if ( sender() == GroupPoints->LineEdit1 ) { - myEditCurrentArgument = GroupPoints->LineEdit1; + const QObject* send = sender(); + if (send == GroupArgs->LineEdit1 || send == GroupArgs->LineEdit2) { + myEditCurrentArgument = (QLineEdit*)send; GEOMBase_Skeleton::LineEditReturnPressed(); } } - //================================================================================= // function : ActivateThisDialog() // purpose : @@ -246,67 +258,62 @@ void RepairGUI_SuppressFacesDlg::LineEditReturnPressed() void RepairGUI_SuppressFacesDlg::ActivateThisDialog() { GEOMBase_Skeleton::ActivateThisDialog(); - connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), - SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); + connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ), + this, SLOT( SelectionIntoArgument() ) ); + + myEditCurrentArgument = GroupArgs->LineEdit1; + myEditCurrentArgument->setText( "" ); + GroupArgs->LineEdit2->setText( "" ); + myObject = GEOM::GEOM_Object::_nil(); + myFacesInd->length( 0 ); - //myGeomGUI->SetState( 0 ); initSelection(); } - //================================================================================= // function : enterEvent() // purpose : Mouse enter onto the dialog to activate it //================================================================================= -void RepairGUI_SuppressFacesDlg::enterEvent( QEvent* ) +void RepairGUI_SuppressFacesDlg::enterEvent (QEvent*) { - if ( !mainFrame()->GroupConstructors->isEnabled() ) + if (!mainFrame()->GroupConstructors->isEnabled()) ActivateThisDialog(); } - //================================================================================= // function : createOperation // purpose : //================================================================================= GEOM::GEOM_IOperations_ptr RepairGUI_SuppressFacesDlg::createOperation() { - return getGeomEngine()->GetIHealingOperations( getStudyId() ); + return getGeomEngine()->GetIHealingOperations(getStudyId()); } //================================================================================= // function : isValid // purpose : //================================================================================= -bool RepairGUI_SuppressFacesDlg::isValid( QString& ) +bool RepairGUI_SuppressFacesDlg::isValid (QString&) { - const int objL = myObjects->length(), facesL = myFaces.size(); - return ( objL && objL == facesL ); + TopoDS_Shape aTmpShape; + return !myObject->_is_nil() && (myFacesInd->length() || + GEOMBase::GetShape(myObject, aTmpShape, TopAbs_WIRE)); } //================================================================================= // function : execute // purpose : //================================================================================= -bool RepairGUI_SuppressFacesDlg::execute( ObjectList& objects ) +bool RepairGUI_SuppressFacesDlg::execute (ObjectList& objects) { - QStringList anErrorObjNames; - for ( int i = 0; i < myObjects->length(); i++ ) { - GEOM::GEOM_Object_var obj = myObjects[i]; - GEOM::short_array faces = myFaces[i]; - //MESSAGE(">>>> Dlg, passing faces.. len = " << faces.length()); - GEOM::GEOM_IHealingOperations_var anOper = GEOM::GEOM_IHealingOperations::_narrow( getOperation() ); - GEOM::GEOM_Object_var anObj = anOper->SuppressFaces( obj, faces ); - if ( anObj->_is_nil() ) - anErrorObjNames << GEOMBase::GetName( obj ); - else - objects.push_back( anObj._retn() ); - } + GEOM::GEOM_IHealingOperations_var anOper = GEOM::GEOM_IHealingOperations::_narrow(getOperation()); + GEOM::GEOM_Object_var anObj = anOper->SuppressFaces(myObject, myFacesInd); - if ( !anErrorObjNames.empty() ) - MESSAGE( "ERRORS occured while processing the following objects: " << anErrorObjNames.join( " " ).toLatin1().data() ); + bool aResult = !anObj->_is_nil(); + if (aResult) + objects.push_back(anObj._retn()); - return anErrorObjNames.size() < myObjects->length(); // true if at least one object was OK, false if ALL objects were nil after Healing. + return aResult; } //================================================================================= @@ -315,6 +322,21 @@ bool RepairGUI_SuppressFacesDlg::execute( ObjectList& objects ) //================================================================================= void RepairGUI_SuppressFacesDlg::initSelection() { - GEOM::GEOM_Object_var aNullGeomObject; - localSelection( aNullGeomObject, TopAbs_FACE ); // load local selection on ALL objects + disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0); + + if (myEditCurrentArgument == GroupArgs->LineEdit1) { + TColStd_MapOfInteger aTypes; + aTypes.Add(GEOM_COMPOUND); + aTypes.Add(GEOM_SOLID); + aTypes.Add(GEOM_SHELL); + aTypes.Add(GEOM_FACE); + + globalSelection(aTypes); + } + else if (myEditCurrentArgument == GroupArgs->LineEdit2) { + localSelection(myObject, TopAbs_FACE); + } + + connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), + this, SLOT(SelectionIntoArgument())); } diff --git a/src/RepairGUI/RepairGUI_SuppressFacesDlg.h b/src/RepairGUI/RepairGUI_SuppressFacesDlg.h index b67613118..f53a74197 100644 --- a/src/RepairGUI/RepairGUI_SuppressFacesDlg.h +++ b/src/RepairGUI/RepairGUI_SuppressFacesDlg.h @@ -19,26 +19,23 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// GEOM GEOMGUI : GUI for Geometry component -// File : RepairGUI_SuppressFacesDlg.h -// Author : Lucien PIGNOLONI, Open CASCADE S.A.S. -// +// GEOM GEOMGUI : GUI for Geometry component +// File : RepairGUI_SuppressFacesDlg.h +// Author : Lucien PIGNOLONI, Open CASCADE S.A.S. + #ifndef REPAIRGUI_SUPPRESSFACESDLG_H #define REPAIRGUI_SUPPRESSFACESDLG_H #include -#include - -class DlgRef_1Sel; -class TColStd_IndexedMapOfInteger; +class DlgRef_2Sel; //================================================================================= // class : RepairGUI_SuppressFacesDlg // purpose : //================================================================================= class RepairGUI_SuppressFacesDlg : public GEOMBase_Skeleton -{ +{ Q_OBJECT public: @@ -49,32 +46,25 @@ protected: // redefined from GEOMBase_Helper virtual GEOM::GEOM_IOperations_ptr createOperation(); virtual bool isValid( QString& ); - virtual bool execute( ObjectList& ); + virtual bool execute( ObjectList& ); private: void Init(); void enterEvent( QEvent* ); - - void Convert( const TColStd_IndexedMapOfInteger&, - GEOM::short_array& ); - void initSelection(); - + private: - GEOM::ListOfGO_var myObjects; - QList myFaces; - // GEOM::short_array-s contain indexes of selected faces, - // index of a GEOM::short_array in myFaces list equals to index of - // GEOM::GEOM_Object in myObjects list to which the faces belong to. - - DlgRef_1Sel* GroupPoints; - + GEOM::GEOM_Object_var myObject; + GEOM::short_array_var myFacesInd; + + DlgRef_2Sel* GroupArgs; + private slots: void ClickOnOk(); bool ClickOnApply(); - + void ActivateThisDialog(); - + void LineEditReturnPressed(); void SelectionIntoArgument(); void SetEditCurrentArgument(); -- 2.39.2