]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
Mantis issue 0020508: EDF 1059 GEOM : Selection of a group in Suppress Faces.
authorjfa <jfa@opencascade.com>
Thu, 14 Jan 2010 09:45:03 +0000 (09:45 +0000)
committerjfa <jfa@opencascade.com>
Thu, 14 Jan 2010 09:45:03 +0000 (09:45 +0000)
doc/salome/gui/GEOM/images/repair2.png
doc/salome/gui/GEOM/input/suppress_faces_operation.doc
src/GEOMImpl/GEOMImpl_HealingDriver.cxx
src/GEOMImpl/GEOMImpl_IHealingOperations.cxx
src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx
src/RepairGUI/RepairGUI_SuppressFacesDlg.h

index 8049d60e8d601a86def03e5b8e192eae3c15edd4..de86a8c7c9704f3255f62ff4176f33582657c11d 100755 (executable)
Binary files a/doc/salome/gui/GEOM/images/repair2.png and b/doc/salome/gui/GEOM/images/repair2.png differ
index 67dbd6313d71f4edb12c1b6410b9c3348b0781bc..4606cb6098ca55a2478f98f8753f4f96e849649a 100644 (file)
@@ -13,8 +13,8 @@ available in <b>OCC Viewer</b> only.
 \n <b>TUI Command:</b> <em>geompy.SuppressFaces(Shape, ListOfID),</em>
 where \em Shape is a shape to be processed, \em ListOfID is a list of faces
 ID's to be removed.
-\n <b>Arguments:</b> Name + Faces which should be removed (you can
-select them in the 3D viewer).
+\n <b>Arguments:</b> 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 <b>TUI Scripts</b> provide you with useful examples of the use of
 \ref tui_suppress_faces "Repairing Operations".
 
-*/
\ No newline at end of file
+*/
index e0c272651daa3ec5eef83f2dc0dbbe83df3e92cd..2b937b4505f41a1506d76090e98b3bed743bd417 100644 (file)
@@ -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 <Standard_Stream.hxx>
 
 #include <GEOMImpl_HealingDriver.hxx>
@@ -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;
 }
-
-
index f22b9c038039f713cb8ec81a6e48a415e7000fb1..7c90d1e2cf589b2718b498a937fd396974a4756e 100644 (file)
@@ -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<std::stri
  *  GetOperatorParameters
  */
 //=============================================================================
-bool GEOMImpl_IHealingOperations::GetOperatorParameters( const std::string theOperation, 
+bool GEOMImpl_IHealingOperations::GetOperatorParameters( const std::string theOperation,
                                                          std::list<std::string>& theParams,
                                                          std::list<std::string>& 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;
 }
-
index 8186438fd107130b104ffa0433cbea2bc9e00937..a517685406f6ff0744c8d5fa7af6729a56360eed 100644 (file)
 //
 //  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 <DlgRef.h>
 #include <GeometryGUI.h>
 #include <GEOMBase.h>
 
+#include <SUIT_Session.h>
+#include <SUIT_ResourceMgr.h>
 #include <SalomeApp_Application.h>
 #include <LightApp_SelectionMgr.h>
-#include <SUIT_ResourceMgr.h>
-#include <SUIT_Session.h>
-#include <SALOME_ListIteratorOfListIO.hxx>
-
-#include <GEOMImpl_Types.hxx>
 
+// OCCT Includes
 #include <TopAbs.hxx>
+#include <TColStd_MapOfInteger.hxx>
 #include <TColStd_IndexedMapOfInteger.hxx>
 
-#include <utilities.h>
+#include <GEOMImpl_Types.hxx>
 
 //=================================================================================
 // class    : RepairGUI_SuppressFacesDlg()
 //            The dialog will by default be modeless, unless you set 'modal' to
 //            TRUE to construct a modal dialog.
 //=================================================================================
-RepairGUI_SuppressFacesDlg::RepairGUI_SuppressFacesDlgGeometryGUI* 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()));
 }
index b67613118bd4d850437dfe978d1c957da954cf55..f53a7419714fe7b17def974bdbdf337993ab698d 100644 (file)
 //
 //  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 <GEOMBase_Skeleton.h>
 
-#include <QList>
-
-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<GEOM::short_array>           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();