From: jfa Date: Thu, 14 Jan 2010 09:45:03 +0000 (+0000) Subject: Mantis issue 0020508: EDF 1059 GEOM : Selection of a group in Suppress Faces. X-Git-Tag: PARAVIS_29012010~15 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=cdc804c6f772dbb67eb41efa94303bd9d89d1a71;p=modules%2Fgeom.git Mantis issue 0020508: EDF 1059 GEOM : Selection of a group in Suppress Faces. --- diff --git a/doc/salome/gui/GEOM/images/repair2.png b/doc/salome/gui/GEOM/images/repair2.png index 8049d60e8..de86a8c7c 100755 Binary files a/doc/salome/gui/GEOM/images/repair2.png and b/doc/salome/gui/GEOM/images/repair2.png differ 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();