Mantis issue 0020508: EDF 1059 GEOM : Selection of a group in Suppress Faces.

This commit is contained in:
jfa 2010-01-14 09:45:03 +00:00
parent 784d3e17cd
commit cdc804c6f7
6 changed files with 194 additions and 186 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -13,8 +13,8 @@ available in <b>OCC Viewer</b> only.
\n <b>TUI Command:</b> <em>geompy.SuppressFaces(Shape, ListOfID),</em> \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 where \em Shape is a shape to be processed, \em ListOfID is a list of faces
ID's to be removed. ID's to be removed.
\n <b>Arguments:</b> Name + Faces which should be removed (you can \n <b>Arguments:</b> Name + 1 shape + Faces which should be removed
select them in the 3D viewer). (you can select them in the 3D viewer).
\image html repair2.png \image html repair2.png

View File

@ -18,7 +18,7 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
#include <Standard_Stream.hxx> #include <Standard_Stream.hxx>
#include <GEOMImpl_HealingDriver.hxx> #include <GEOMImpl_HealingDriver.hxx>
@ -66,12 +66,10 @@ const Standard_GUID& GEOMImpl_HealingDriver::GetID()
return aHealingDriver; return aHealingDriver;
} }
//======================================================================= //=======================================================================
//function : GEOMImpl_HealingDriver //function : GEOMImpl_HealingDriver
//purpose : //purpose :
//======================================================================= //=======================================================================
GEOMImpl_HealingDriver::GEOMImpl_HealingDriver() GEOMImpl_HealingDriver::GEOMImpl_HealingDriver()
{ {
} }
@ -195,7 +193,9 @@ Standard_Boolean GEOMImpl_HealingDriver::SuppressFaces (GEOMImpl_IHealing* theHI
if (aFaces.IsNull()) // remove all faces if (aFaces.IsNull()) // remove all faces
{ {
aResult = aHealer.Perform(); aResult = aHealer.Perform();
} else { }
else
{
TopTools_SequenceOfShape aShapesFaces; TopTools_SequenceOfShape aShapesFaces;
TopTools_IndexedMapOfShape aShapes; TopTools_IndexedMapOfShape aShapes;
TopExp::MapShapes(theOriginalShape, aShapes); TopExp::MapShapes(theOriginalShape, aShapes);
@ -445,7 +445,5 @@ const Handle(GEOMImpl_HealingDriver) Handle(GEOMImpl_HealingDriver)::DownCast(co
} }
} }
return _anOtherObject ; return _anOtherObject;
} }

View File

@ -18,7 +18,7 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
#ifdef WNT #ifdef WNT
#pragma warning( disable:4786 ) #pragma warning( disable:4786 )
#endif #endif
@ -323,27 +323,27 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::SuppressFaces
// set error code, check parameters // set error code, check parameters
SetErrorCode(KO); 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; return NULL;
Handle(GEOM_Function) aFunction, aLastFunction = theObject->GetLastFunction(); 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 // 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 //Add the function
aFunction = aNewObject->AddFunction(GEOMImpl_HealingDriver::GetID(), SUPPRESS_FACES); 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 //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 // prepare "data container" class IHealing
GEOMImpl_IHealing HI(aFunction); GEOMImpl_IHealing HI (aFunction);
HI.SetFaces( theFaces ); HI.SetFaces(theFaces);
HI.SetOriginal( aLastFunction ); HI.SetOriginal(aLastFunction);
//Compute the translation //Compute the translation
try { try {
@ -358,7 +358,7 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::SuppressFaces
} }
catch (Standard_Failure) catch (Standard_Failure)
{ {
Handle(Standard_Failure) aFail = Standard_Failure::Caught(); Handle(Standard_Failure) aFail = Standard_Failure::Caught();
SetErrorCode(aFail->GetMessageString()); SetErrorCode(aFail->GetMessageString());
return NULL; return NULL;
} }
@ -376,7 +376,6 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::SuppressFaces
return aNewObject; return aNewObject;
} }
//============================================================================= //=============================================================================
/*! /*!
* CloseContour * CloseContour
@ -908,4 +907,3 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::ChangeOrientationCopy (Handle(G
SetErrorCode(OK); SetErrorCode(OK);
return aNewObject; return aNewObject;
} }

View File

@ -19,28 +19,27 @@
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// GEOM GEOMGUI : GUI for Geometry component // GEOM GEOMGUI : GUI for Geometry component
// File : RepairGUI_SuppressFacesDlg.cxx // File : RepairGUI_SuppressFacesDlg.cxx
// Author : Lucien PIGNOLONI, Open CASCADE S.A.S. // Author : Lucien PIGNOLONI, Open CASCADE S.A.S.
//
#include "RepairGUI_SuppressFacesDlg.h" #include "RepairGUI_SuppressFacesDlg.h"
#include <DlgRef.h> #include <DlgRef.h>
#include <GeometryGUI.h> #include <GeometryGUI.h>
#include <GEOMBase.h> #include <GEOMBase.h>
#include <SUIT_Session.h>
#include <SUIT_ResourceMgr.h>
#include <SalomeApp_Application.h> #include <SalomeApp_Application.h>
#include <LightApp_SelectionMgr.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 <TopAbs.hxx>
#include <TColStd_MapOfInteger.hxx>
#include <TColStd_IndexedMapOfInteger.hxx> #include <TColStd_IndexedMapOfInteger.hxx>
#include <utilities.h> #include <GEOMImpl_Types.hxx>
//================================================================================= //=================================================================================
// class : RepairGUI_SuppressFacesDlg() // class : RepairGUI_SuppressFacesDlg()
@ -49,40 +48,43 @@
// The dialog will by default be modeless, unless you set 'modal' to // The dialog will by default be modeless, unless you set 'modal' to
// TRUE to construct a modal dialog. // TRUE to construct a modal dialog.
//================================================================================= //=================================================================================
RepairGUI_SuppressFacesDlg::RepairGUI_SuppressFacesDlg( GeometryGUI* theGeometryGUI, QWidget* parent, RepairGUI_SuppressFacesDlg::RepairGUI_SuppressFacesDlg (GeometryGUI* theGeometryGUI, QWidget* parent,
bool modal ) bool modal)
: GEOMBase_Skeleton( theGeometryGUI, parent, modal ) : GEOMBase_Skeleton(theGeometryGUI, parent, modal)
{ {
QPixmap image0( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_SUPRESS_FACE" ) ) ); QPixmap image0 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_SUPRESS_FACE")));
QPixmap image1( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) ); QPixmap image1 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT")));
setWindowTitle( tr("GEOM_SUPRESSFACE_TITLE" ) ); setWindowTitle(tr("GEOM_SUPRESSFACE_TITLE"));
/***************************************************************/ /***************************************************************/
mainFrame()->GroupConstructors->setTitle(tr("GEOM_SUPRESSFACE")); mainFrame()->GroupConstructors->setTitle(tr("GEOM_SUPRESSFACE"));
mainFrame()->RadioButton1->setIcon( image0 ); mainFrame()->RadioButton1->setIcon(image0);
mainFrame()->RadioButton2->setAttribute( Qt::WA_DeleteOnClose ); mainFrame()->RadioButton2->setAttribute(Qt::WA_DeleteOnClose);
mainFrame()->RadioButton2->close(); mainFrame()->RadioButton2->close();
mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose ); mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose);
mainFrame()->RadioButton3->close(); mainFrame()->RadioButton3->close();
GroupPoints = new DlgRef_1Sel( centralWidget() ); GroupArgs = new DlgRef_2Sel(centralWidget());
GroupPoints->GroupBox1->setTitle( tr( "Faces to remove" ) ); GroupArgs->GroupBox1->setTitle(tr("Faces to remove"));
GroupPoints->TextLabel1->setText( tr( "Faces" ) ); GroupArgs->TextLabel1->setText(tr("GEOM_SELECTED_SHAPE"));
GroupPoints->PushButton1->setIcon( image1 ); GroupArgs->PushButton1->setIcon(image1);
GroupPoints->LineEdit1->setReadOnly( true ); GroupArgs->LineEdit1->setReadOnly(true);
QVBoxLayout* layout = new QVBoxLayout( centralWidget() ); GroupArgs->TextLabel2->setText(tr("Faces to remove"));
layout->setMargin( 0 ); layout->setSpacing( 6 ); GroupArgs->PushButton2->setIcon(image1);
layout->addWidget( GroupPoints ); 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(); Init();
} }
//================================================================================= //=================================================================================
// function : ~RepairGUI_SuppressFacesDlg() // function : ~RepairGUI_SuppressFacesDlg()
// purpose : Destroys the object and frees any allocated resources // purpose : Destroys the object and frees any allocated resources
@ -91,44 +93,43 @@ RepairGUI_SuppressFacesDlg::~RepairGUI_SuppressFacesDlg()
{ {
} }
//================================================================================= //=================================================================================
// function : Init() // function : Init()
// purpose : // purpose :
//================================================================================= //=================================================================================
void RepairGUI_SuppressFacesDlg::Init() void RepairGUI_SuppressFacesDlg::Init()
{ {
/* init variables */ // init variables
myEditCurrentArgument = GroupPoints->LineEdit1; GroupArgs->LineEdit1->clear();
GroupArgs->LineEdit2->clear();
myObject = GEOM::GEOM_Object::_nil();
myFacesInd = new GEOM::short_array();
myFacesInd->length(0);
myObjects = new GEOM::ListOfGO(); // signals and slots connections
myObjects->length( 0 ); connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk()));
connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
//myGeomGUI->SetState( 0 ); connect(GroupArgs->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
initSelection(); connect(GroupArgs->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
/* signals and slots connections */ connect(GroupArgs->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) ); connect(GroupArgs->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) );
connect( GroupPoints->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) ); initName(tr("SUPRESS_FACE_NEW_OBJ_NAME"));
connect( GroupPoints->LineEdit1, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) );
connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), GroupArgs->PushButton1->click();
SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); SelectionIntoArgument();
initName( tr( "SUPRESS_FACE_NEW_OBJ_NAME" ) );
resize(100,100); resize(100,100);
} }
//================================================================================= //=================================================================================
// function : ClickOnOk() // function : ClickOnOk()
// purpose : Same than click on apply but close this dialog. // purpose : Same than click on apply but close this dialog.
//================================================================================= //=================================================================================
void RepairGUI_SuppressFacesDlg::ClickOnOk() void RepairGUI_SuppressFacesDlg::ClickOnOk()
{ {
if ( ClickOnApply() ) if (ClickOnApply())
ClickOnCancel(); ClickOnCancel();
} }
@ -138,78 +139,67 @@ void RepairGUI_SuppressFacesDlg::ClickOnOk()
//================================================================================= //=================================================================================
bool RepairGUI_SuppressFacesDlg::ClickOnApply() bool RepairGUI_SuppressFacesDlg::ClickOnApply()
{ {
if ( !onAccept() ) if (!onAccept())
return false; return false;
initName(); initName();
// activate first line edit
myEditCurrentArgument->setText( "" ); GroupArgs->PushButton1->click();
myObjects->length( 0 );
myFaces.clear();
initSelection();
return true; return true;
} }
//================================================================================= //=================================================================================
// function : SelectionIntoArgument() // function : SelectionIntoArgument()
// purpose : Called when selection as changed or other case // purpose : Called when selection is changed or on dialog initialization or activation
// : used only by SelectButtonC1A1 (LineEditC1A1)
//================================================================================= //=================================================================================
void RepairGUI_SuppressFacesDlg::SelectionIntoArgument() 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; if (myEditCurrentArgument == GroupArgs->LineEdit1)
int i = 0; myObject = GEOM::GEOM_Object::_nil();
int numFaces = 0;
LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr(); LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
SALOME_ListIO aSelList; SALOME_ListIO aSelList;
aSelMgr->selectedObjects(aSelList); aSelMgr->selectedObjects(aSelList);
myObjects->length( aSelList.Extent() ); if (aSelList.Extent() == 1) {
myFaces.clear(); Handle(SALOME_InteractiveObject) anIO = aSelList.First();
for (SALOME_ListIteratorOfListIO anIt (aSelList); anIt.More(); anIt.Next()) { if (myEditCurrentArgument == GroupArgs->LineEdit1) {
Handle(SALOME_InteractiveObject) anIO = anIt.Value(); Standard_Boolean aRes;
GEOM::GEOM_Object_var aSelectedObject = GEOMBase::ConvertIOinGEOMObject( anIO, aRes ); myObject = GEOMBase::ConvertIOinGEOMObject(anIO, aRes);
if ( !CORBA::is_nil( aSelectedObject ) && aRes ) { if (aRes && GEOMBase::IsShape(myObject)) {
TopoDS_Shape aShape; myEditCurrentArgument->setText(GEOMBase::GetName(myObject));
if ( GEOMBase::GetShape( aSelectedObject, aShape, TopAbs_SHAPE ) ) { TopoDS_Shape aShape;
if ( aShape.ShapeType() <= TopAbs_FACE ) { // FACE, SHELL, SOLID, COMPOUND if (GEOMBase::GetShape(myObject, aShape, TopAbs_FACE))
GEOM::short_array anIndexes; GroupArgs->LineEdit2->setText(myEditCurrentArgument->text());
TColStd_IndexedMapOfInteger aMap; // clear selection
aSelMgr->GetIndexes( anIO, aMap ); disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
myGeomGUI->getApp()->selectionMgr()->clearSelected();
connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
this, SLOT(SelectionIntoArgument()));
if ( !aMap.IsEmpty() ) { GroupArgs->PushButton2->click();
Convert( aMap, anIndexes );
myObjects[i++] = aSelectedObject; // append the object
myFaces.append( anIndexes ); // append faces' indexes
numFaces += anIndexes.length();// just for text field output
}
}
} }
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() void RepairGUI_SuppressFacesDlg::SetEditCurrentArgument()
{ {
if ( sender() == GroupPoints->PushButton1 ) { QPushButton* send = (QPushButton*)sender();
GroupPoints->LineEdit1->setFocus();
myEditCurrentArgument = GroupPoints->LineEdit1;
}
SelectionIntoArgument();
}
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);
}
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() // function : LineEditReturnPressed()
@ -232,13 +244,13 @@ void RepairGUI_SuppressFacesDlg::SetEditCurrentArgument()
//================================================================================= //=================================================================================
void RepairGUI_SuppressFacesDlg::LineEditReturnPressed() void RepairGUI_SuppressFacesDlg::LineEditReturnPressed()
{ {
if ( sender() == GroupPoints->LineEdit1 ) { const QObject* send = sender();
myEditCurrentArgument = GroupPoints->LineEdit1; if (send == GroupArgs->LineEdit1 || send == GroupArgs->LineEdit2) {
myEditCurrentArgument = (QLineEdit*)send;
GEOMBase_Skeleton::LineEditReturnPressed(); GEOMBase_Skeleton::LineEditReturnPressed();
} }
} }
//================================================================================= //=================================================================================
// function : ActivateThisDialog() // function : ActivateThisDialog()
// purpose : // purpose :
@ -246,67 +258,62 @@ void RepairGUI_SuppressFacesDlg::LineEditReturnPressed()
void RepairGUI_SuppressFacesDlg::ActivateThisDialog() void RepairGUI_SuppressFacesDlg::ActivateThisDialog()
{ {
GEOMBase_Skeleton::ActivateThisDialog(); GEOMBase_Skeleton::ActivateThisDialog();
connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ),
SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); this, SLOT( SelectionIntoArgument() ) );
myEditCurrentArgument = GroupArgs->LineEdit1;
myEditCurrentArgument->setText( "" );
GroupArgs->LineEdit2->setText( "" );
myObject = GEOM::GEOM_Object::_nil();
myFacesInd->length( 0 );
//myGeomGUI->SetState( 0 );
initSelection(); initSelection();
} }
//================================================================================= //=================================================================================
// function : enterEvent() // function : enterEvent()
// purpose : Mouse enter onto the dialog to activate it // 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(); ActivateThisDialog();
} }
//================================================================================= //=================================================================================
// function : createOperation // function : createOperation
// purpose : // purpose :
//================================================================================= //=================================================================================
GEOM::GEOM_IOperations_ptr RepairGUI_SuppressFacesDlg::createOperation() GEOM::GEOM_IOperations_ptr RepairGUI_SuppressFacesDlg::createOperation()
{ {
return getGeomEngine()->GetIHealingOperations( getStudyId() ); return getGeomEngine()->GetIHealingOperations(getStudyId());
} }
//================================================================================= //=================================================================================
// function : isValid // function : isValid
// purpose : // purpose :
//================================================================================= //=================================================================================
bool RepairGUI_SuppressFacesDlg::isValid( QString& ) bool RepairGUI_SuppressFacesDlg::isValid (QString&)
{ {
const int objL = myObjects->length(), facesL = myFaces.size(); TopoDS_Shape aTmpShape;
return ( objL && objL == facesL ); return !myObject->_is_nil() && (myFacesInd->length() ||
GEOMBase::GetShape(myObject, aTmpShape, TopAbs_WIRE));
} }
//================================================================================= //=================================================================================
// function : execute // function : execute
// purpose : // purpose :
//================================================================================= //=================================================================================
bool RepairGUI_SuppressFacesDlg::execute( ObjectList& objects ) bool RepairGUI_SuppressFacesDlg::execute (ObjectList& objects)
{ {
QStringList anErrorObjNames; GEOM::GEOM_IHealingOperations_var anOper = GEOM::GEOM_IHealingOperations::_narrow(getOperation());
for ( int i = 0; i < myObjects->length(); i++ ) { GEOM::GEOM_Object_var anObj = anOper->SuppressFaces(myObject, myFacesInd);
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() );
}
if ( !anErrorObjNames.empty() ) bool aResult = !anObj->_is_nil();
MESSAGE( "ERRORS occured while processing the following objects: " << anErrorObjNames.join( " " ).toLatin1().data() ); 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() void RepairGUI_SuppressFacesDlg::initSelection()
{ {
GEOM::GEOM_Object_var aNullGeomObject; disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
localSelection( aNullGeomObject, TopAbs_FACE ); // load local selection on ALL objects
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()));
} }

View File

@ -19,19 +19,16 @@
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// GEOM GEOMGUI : GUI for Geometry component // GEOM GEOMGUI : GUI for Geometry component
// File : RepairGUI_SuppressFacesDlg.h // File : RepairGUI_SuppressFacesDlg.h
// Author : Lucien PIGNOLONI, Open CASCADE S.A.S. // Author : Lucien PIGNOLONI, Open CASCADE S.A.S.
//
#ifndef REPAIRGUI_SUPPRESSFACESDLG_H #ifndef REPAIRGUI_SUPPRESSFACESDLG_H
#define REPAIRGUI_SUPPRESSFACESDLG_H #define REPAIRGUI_SUPPRESSFACESDLG_H
#include <GEOMBase_Skeleton.h> #include <GEOMBase_Skeleton.h>
#include <QList> class DlgRef_2Sel;
class DlgRef_1Sel;
class TColStd_IndexedMapOfInteger;
//================================================================================= //=================================================================================
// class : RepairGUI_SuppressFacesDlg // class : RepairGUI_SuppressFacesDlg
@ -54,20 +51,13 @@ protected:
private: private:
void Init(); void Init();
void enterEvent( QEvent* ); void enterEvent( QEvent* );
void Convert( const TColStd_IndexedMapOfInteger&,
GEOM::short_array& );
void initSelection(); void initSelection();
private: private:
GEOM::ListOfGO_var myObjects; GEOM::GEOM_Object_var myObject;
QList<GEOM::short_array> myFaces; GEOM::short_array_var myFacesInd;
// 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; DlgRef_2Sel* GroupArgs;
private slots: private slots:
void ClickOnOk(); void ClickOnOk();