mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-02-21 00:09:42 +05:00
Mantis issue 0020508: EDF 1059 GEOM : Selection of a group in Suppress Faces.
This commit is contained in:
parent
784d3e17cd
commit
cdc804c6f7
Binary file not shown.
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 19 KiB |
@ -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".
|
||||
|
||||
*/
|
||||
*/
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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 <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()
|
||||
@ -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();
|
||||
if (aSelList.Extent() == 1) {
|
||||
Handle(SALOME_InteractiveObject) anIO = aSelList.First();
|
||||
|
||||
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;
|
||||
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());
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
// 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;
|
||||
}
|
||||
SelectionIntoArgument();
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
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()));
|
||||
}
|
||||
|
@ -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 <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();
|
||||
|
Loading…
Reference in New Issue
Block a user