mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2024-12-24 16:30:35 +05:00
0022751: [EDF] Publish results of the Check Free Faces operation
This commit is contained in:
parent
db4ad95d8e
commit
de6fb7721d
Binary file not shown.
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 12 KiB |
@ -8,6 +8,8 @@ A free face is a face, which is not shared between several sub-shapes of the sha
|
||||
|
||||
\image html repair10.png
|
||||
|
||||
Press \b Apply or <b>Apply and Close</b> button to publish the corresponding faces in the study.
|
||||
|
||||
<b>TUI Command:</b> <em>GetFreeFacesIDs(Shape),</em> where \em Shape is
|
||||
a shape to be checked.
|
||||
|
||||
|
@ -836,6 +836,10 @@ Please, select face, shell or solid and try again</translation>
|
||||
<source>GEOM_FREE_FACES</source>
|
||||
<translation>Free faces</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_FREE_FACES_NAME</source>
|
||||
<translation>Free_face</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_FREE_FACES_TITLE</source>
|
||||
<translation>Free faces</translation>
|
||||
|
@ -26,38 +26,35 @@
|
||||
//
|
||||
#include "RepairGUI_FreeFacesDlg.h"
|
||||
|
||||
#include <LightApp_Application.h>
|
||||
#include <LightApp_SelectionMgr.h>
|
||||
#include <SalomeApp_Application.h>
|
||||
#include <SalomeApp_Tools.h>
|
||||
#include <SalomeApp_Study.h>
|
||||
|
||||
#include <SUIT_MessageBox.h>
|
||||
#include <SUIT_Session.h>
|
||||
#include <SUIT_OverrideCursor.h>
|
||||
#include <SUIT_Desktop.h>
|
||||
#include <SUIT_ResourceMgr.h>
|
||||
#include <SUIT_ViewWindow.h>
|
||||
#include <SUIT_ViewManager.h>
|
||||
|
||||
#include <GEOMBase.h>
|
||||
#include <GeometryGUI.h>
|
||||
#include <GEOMImpl_Types.hxx>
|
||||
#include <GEOM_Constants.h>
|
||||
|
||||
#include <TopTools_IndexedMapOfShape.hxx>
|
||||
#include <LightApp_Application.h>
|
||||
#include <LightApp_SelectionMgr.h>
|
||||
#include <SalomeApp_Application.h>
|
||||
#include <SalomeApp_Study.h>
|
||||
#include <SalomeApp_Tools.h>
|
||||
#include <SUIT_Desktop.h>
|
||||
#include <SUIT_OverrideCursor.h>
|
||||
#include <SUIT_ResourceMgr.h>
|
||||
#include <SUIT_Session.h>
|
||||
#include <SUIT_ViewManager.h>
|
||||
#include <SUIT_ViewWindow.h>
|
||||
|
||||
#include <TColStd_MapOfInteger.hxx>
|
||||
#include <TopExp.hxx>
|
||||
#include <TopTools_IndexedMapOfShape.hxx>
|
||||
|
||||
#include <GEOMBase.h>
|
||||
#include <GeometryGUI.h>
|
||||
#include <GEOM_Displayer.h>
|
||||
|
||||
#include <QLineEdit>
|
||||
#include <QLabel>
|
||||
#include <QGroupBox>
|
||||
#include <QPushButton>
|
||||
#include <QHBoxLayout>
|
||||
#include <QLabel>
|
||||
#include <QLineEdit>
|
||||
#include <QPushButton>
|
||||
#include <QRadioButton>
|
||||
#include <QVBoxLayout>
|
||||
#include <QKeyEvent>
|
||||
|
||||
|
||||
#define SPACING 6
|
||||
#define MARGIN 9
|
||||
@ -72,26 +69,31 @@
|
||||
//=================================================================================
|
||||
RepairGUI_FreeFacesDlg::RepairGUI_FreeFacesDlg( GeometryGUI* GUI, QWidget* parent,
|
||||
bool modal)
|
||||
: QDialog( parent, 0 ),
|
||||
GEOMBase_Helper( dynamic_cast<SUIT_Desktop*>( parent ) ),
|
||||
myGeomGUI( GUI ),
|
||||
myDisplayer( 0 )
|
||||
: GEOMBase_Skeleton(GUI, parent, modal),
|
||||
myDisplayer (0),
|
||||
myEdit (0)
|
||||
{
|
||||
setAttribute( Qt::WA_DeleteOnClose );
|
||||
|
||||
setSizeGripEnabled( true );
|
||||
|
||||
QPixmap image0 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_FREE_FACES")));
|
||||
QPixmap image1( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) );
|
||||
|
||||
setWindowTitle( tr( "GEOM_FREE_FACES_TITLE" ) );
|
||||
|
||||
/***************************************************************/
|
||||
|
||||
mainFrame()->GroupConstructors->setTitle(tr("GEOM_FREE_FACES"));
|
||||
mainFrame()->RadioButton1->setIcon(image0);
|
||||
mainFrame()->RadioButton2->setAttribute(Qt::WA_DeleteOnClose);
|
||||
mainFrame()->RadioButton2->close();
|
||||
mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose);
|
||||
mainFrame()->RadioButton3->close();
|
||||
|
||||
mainFrame()->GroupBoxName->hide();
|
||||
|
||||
QGroupBox* aMainGrp = new QGroupBox( tr( "GEOM_SELECTED_SHAPE" ), this );
|
||||
|
||||
QLabel* lab = new QLabel( tr( "GEOM_OBJECT" ), aMainGrp );
|
||||
mySelBtn = new QPushButton( aMainGrp );
|
||||
mySelBtn->setIcon( image1 );
|
||||
QPushButton *aSelBtn = new QPushButton( aMainGrp );
|
||||
aSelBtn->setIcon( image1 );
|
||||
myEdit = new QLineEdit( aMainGrp );
|
||||
myEdit->setReadOnly( true );
|
||||
myEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
|
||||
@ -101,37 +103,19 @@ RepairGUI_FreeFacesDlg::RepairGUI_FreeFacesDlg( GeometryGUI* GUI, QWidget* paren
|
||||
aMainLay->setSpacing( SPACING );
|
||||
aMainLay->setMargin( MARGIN );
|
||||
aMainLay->addWidget( lab );
|
||||
aMainLay->addWidget( mySelBtn );
|
||||
aMainLay->addWidget( aSelBtn );
|
||||
aMainLay->addWidget( myEdit );
|
||||
|
||||
QFrame* aFrame = new QFrame( this );
|
||||
aFrame->setFrameStyle( QFrame::Box | QFrame::Sunken );
|
||||
QPushButton* aCloseBtn = new QPushButton( tr( "GEOM_BUT_CLOSE" ), aFrame );
|
||||
QPushButton* aHelpBtn = new QPushButton( tr( "GEOM_BUT_HELP" ), aFrame );
|
||||
|
||||
QHBoxLayout* aBtnLay = new QHBoxLayout( aFrame );
|
||||
aBtnLay->setSpacing( SPACING );
|
||||
aBtnLay->setMargin( MARGIN );
|
||||
aBtnLay->addWidget( aCloseBtn );
|
||||
aBtnLay->addSpacing( SPACING );
|
||||
aBtnLay->addStretch();
|
||||
aBtnLay->addWidget( aHelpBtn );
|
||||
|
||||
QVBoxLayout* aLay = new QVBoxLayout( this );
|
||||
QVBoxLayout* aLay = new QVBoxLayout (centralWidget());
|
||||
aLay->setSpacing(SPACING);
|
||||
aLay->setMargin(MARGIN);
|
||||
aLay->addWidget(aMainGrp);
|
||||
aLay->addStretch();
|
||||
aLay->addWidget( aFrame );
|
||||
|
||||
resize(minimumSizeHint());
|
||||
/***************************************************************/
|
||||
|
||||
myHelpFileName = "free_faces_page.html";
|
||||
|
||||
connect( aCloseBtn, SIGNAL( clicked() ), SLOT( onClose() ) );
|
||||
connect( aHelpBtn, SIGNAL( clicked() ), SLOT( onHelp() ) );
|
||||
connect( mySelBtn, SIGNAL( clicked() ),
|
||||
this, SLOT ( onSetEditCurrentArgument() ) );
|
||||
/***************************************************************/
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
@ -145,70 +129,6 @@ RepairGUI_FreeFacesDlg::~RepairGUI_FreeFacesDlg()
|
||||
}
|
||||
|
||||
|
||||
//=================================================================================
|
||||
// function : onClose
|
||||
// purpose : SLOT. Called when "close" button pressed. Close dialog
|
||||
//=================================================================================
|
||||
void RepairGUI_FreeFacesDlg::onClose()
|
||||
{
|
||||
globalSelection();
|
||||
disconnect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), 0, this, 0 );
|
||||
myGeomGUI->SetActiveDialogBox( 0 );
|
||||
reject();
|
||||
erasePreview();
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : onHelp()
|
||||
// purpose :
|
||||
//=================================================================================
|
||||
void RepairGUI_FreeFacesDlg::onHelp()
|
||||
{
|
||||
LightApp_Application* app = (LightApp_Application*)( SUIT_Session::session()->activeApplication() );
|
||||
if ( app )
|
||||
app->onHelpContextModule( myGeomGUI ? app->moduleName( myGeomGUI->moduleName() ) : QString(""), myHelpFileName );
|
||||
else {
|
||||
QString platform;
|
||||
#ifdef WIN32
|
||||
platform = "winapplication";
|
||||
#else
|
||||
platform = "application";
|
||||
#endif
|
||||
SUIT_MessageBox::warning( this,
|
||||
tr( "WRN_WARNING" ),
|
||||
tr( "EXTERNAL_BROWSER_CANNOT_SHOW_PAGE" ).
|
||||
arg( app->resourceMgr()->stringValue( "ExternalBrowser",
|
||||
platform ) ).
|
||||
arg( myHelpFileName ) );
|
||||
}
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : onDeactivate
|
||||
// purpose : Deactivate this dialog
|
||||
//=================================================================================
|
||||
void RepairGUI_FreeFacesDlg::onDeactivate()
|
||||
{
|
||||
setEnabled( false );
|
||||
globalSelection();
|
||||
disconnect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), 0, this, 0 );
|
||||
myGeomGUI->SetActiveDialogBox( 0 );
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : onActivate
|
||||
// purpose : Activate this dialog
|
||||
//=================================================================================
|
||||
void RepairGUI_FreeFacesDlg::onActivate()
|
||||
{
|
||||
myGeomGUI->EmitSignalDeactivateDialog();
|
||||
setEnabled( true );
|
||||
myGeomGUI->SetActiveDialogBox( this );
|
||||
connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(),
|
||||
SIGNAL( currentSelectionChanged() ), SLOT( onSelectionDone() ) );
|
||||
activateSelection();
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : Init()
|
||||
// purpose :
|
||||
@ -216,22 +136,76 @@ void RepairGUI_FreeFacesDlg::onActivate()
|
||||
void RepairGUI_FreeFacesDlg::Init()
|
||||
{
|
||||
myObj = GEOM::GEOM_Object::_nil();
|
||||
myEditCurrentArgument = myEdit;
|
||||
|
||||
/* signals and slots connections */
|
||||
connect( myGeomGUI, SIGNAL( SignalDeactivateActiveDialog() ), SLOT ( onDeactivate() ) );
|
||||
connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(),
|
||||
SIGNAL( currentSelectionChanged() ), SLOT ( onSelectionDone() ) );
|
||||
connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk()));
|
||||
connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
|
||||
connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
|
||||
this, SLOT(SelectionIntoArgument()));
|
||||
|
||||
initName(tr("GEOM_FREE_FACES_NAME"));
|
||||
buttonOk()->setEnabled(false);
|
||||
buttonApply()->setEnabled(false);
|
||||
activateSelection();
|
||||
onSelectionDone();
|
||||
SelectionIntoArgument();
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : onSelectionDone
|
||||
// function : ClickOnOk()
|
||||
// purpose :
|
||||
//=================================================================================
|
||||
void RepairGUI_FreeFacesDlg::ClickOnOk()
|
||||
{
|
||||
if (ClickOnApply())
|
||||
ClickOnCancel();
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : ClickOnApply()
|
||||
// purpose :
|
||||
//=================================================================================
|
||||
bool RepairGUI_FreeFacesDlg::ClickOnApply()
|
||||
{
|
||||
if (!onAccept())
|
||||
return false;
|
||||
|
||||
initName();
|
||||
return true;
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : ActivateThisDialog()
|
||||
// purpose :
|
||||
//=================================================================================
|
||||
void RepairGUI_FreeFacesDlg::ActivateThisDialog()
|
||||
{
|
||||
GEOMBase_Skeleton::ActivateThisDialog();
|
||||
|
||||
connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
|
||||
this, SLOT(SelectionIntoArgument()));
|
||||
|
||||
activateSelection();
|
||||
displayPreview(true);
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : enterEvent()
|
||||
// purpose :
|
||||
//=================================================================================
|
||||
void RepairGUI_FreeFacesDlg::enterEvent(QEvent*)
|
||||
{
|
||||
if (!mainFrame()->GroupConstructors->isEnabled())
|
||||
ActivateThisDialog();
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : SelectionIntoArgument
|
||||
// purpose : SLOT. Called when selection changed.
|
||||
//=================================================================================
|
||||
void RepairGUI_FreeFacesDlg::onSelectionDone()
|
||||
void RepairGUI_FreeFacesDlg::SelectionIntoArgument()
|
||||
{
|
||||
myEditCurrentArgument->setText("");
|
||||
myObj = GEOM::GEOM_Object::_nil();
|
||||
erasePreview();
|
||||
|
||||
LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
|
||||
@ -239,7 +213,8 @@ void RepairGUI_FreeFacesDlg::onSelectionDone()
|
||||
aSelMgr->selectedObjects(aSelList);
|
||||
|
||||
if ( aSelList.Extent() != 1 ) {
|
||||
myEdit->setText( "" );
|
||||
buttonOk()->setEnabled(false);
|
||||
buttonApply()->setEnabled(false);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -247,27 +222,19 @@ void RepairGUI_FreeFacesDlg::onSelectionDone()
|
||||
GEOMBase::ConvertIOinGEOMObject( aSelList.First() );
|
||||
|
||||
if ( !GEOMBase::IsShape( anObj ) ) {
|
||||
myEdit->setText( "" );
|
||||
buttonOk()->setEnabled(false);
|
||||
buttonApply()->setEnabled(false);
|
||||
return;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
myObj = anObj;
|
||||
myEditCurrentArgument->setText(GEOMBase::GetName(myObj));
|
||||
displayPreview( true, false, true, true, 3 );
|
||||
}
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : enterEvent()
|
||||
// purpose : Mouse enter onto the dialog to activate it
|
||||
//=================================================================================
|
||||
void RepairGUI_FreeFacesDlg::enterEvent( QEvent* )
|
||||
{
|
||||
onActivate();
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : activateSelection
|
||||
// purpose : activate selection of faces, shells, and solids
|
||||
// purpose : activate selection of solids
|
||||
//=================================================================================
|
||||
void RepairGUI_FreeFacesDlg::activateSelection()
|
||||
{
|
||||
@ -277,15 +244,6 @@ void RepairGUI_FreeFacesDlg::activateSelection()
|
||||
globalSelection( aMap );
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : closeEvent()
|
||||
// purpose :
|
||||
//=================================================================================
|
||||
void RepairGUI_FreeFacesDlg::closeEvent( QCloseEvent* )
|
||||
{
|
||||
onClose();
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : createOperation
|
||||
// purpose :
|
||||
@ -316,11 +274,15 @@ bool RepairGUI_FreeFacesDlg::execute( ObjectList& objects )
|
||||
TopoDS_Shape aSelShape;
|
||||
TopoDS_Shape aFace;
|
||||
TopTools_IndexedMapOfShape anIndices;
|
||||
int aNbObj = 0;
|
||||
|
||||
if ( !myObj->_is_nil() && GEOMBase::GetShape( myObj, aSelShape ) ) {
|
||||
myEdit->setText( GEOMBase::GetName( myObj ) );
|
||||
QString aMess;
|
||||
if ( !isValid( aMess ) ) {
|
||||
erasePreview( true );
|
||||
buttonOk()->setEnabled(false);
|
||||
buttonApply()->setEnabled(false);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -350,7 +312,10 @@ bool RepairGUI_FreeFacesDlg::execute( ObjectList& objects )
|
||||
}
|
||||
}
|
||||
|
||||
for ( int i = 0, n = aFaceLst->length(); i < n; i++ ) {
|
||||
int i;
|
||||
int n = aFaceLst->length();
|
||||
|
||||
for (i = 0; i < n; i++ ) {
|
||||
aFace = anIndices.FindKey( aFaceLst[i] );
|
||||
try {
|
||||
getDisplayer()->SetColor( Quantity_NOC_RED );
|
||||
@ -363,9 +328,27 @@ bool RepairGUI_FreeFacesDlg::execute( ObjectList& objects )
|
||||
catch( const SALOME::SALOME_Exception& e )
|
||||
{
|
||||
SalomeApp_Tools::QtCatchCorbaException( e );
|
||||
buttonOk()->setEnabled(false);
|
||||
buttonApply()->setEnabled(false);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Create sub-objects
|
||||
GEOM::ListOfGO_var aList = anOper->MakeSubShapes(myObj, aFaceLst);
|
||||
|
||||
aNbObj = aList->length();
|
||||
|
||||
for (i = 0; i < aNbObj; i++) {
|
||||
objects.push_back(GEOM::GEOM_Object::_duplicate(aList[i]));
|
||||
}
|
||||
|
||||
aResult = true;
|
||||
}
|
||||
|
||||
buttonOk()->setEnabled(aNbObj > 0);
|
||||
buttonApply()->setEnabled(aNbObj > 0);
|
||||
|
||||
return aResult;
|
||||
}
|
||||
|
||||
@ -380,28 +363,12 @@ GEOM_Displayer* RepairGUI_FreeFacesDlg::getDisplayer()
|
||||
return myDisplayer;
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : SetEditCurrentArgument
|
||||
// purpose :
|
||||
//=================================================================================
|
||||
void RepairGUI_FreeFacesDlg::onSetEditCurrentArgument()
|
||||
//================================================================
|
||||
// Function : getFather
|
||||
// Purpose : Get father object for object to be added in study
|
||||
// (called with addInStudy method)
|
||||
//================================================================
|
||||
GEOM::GEOM_Object_ptr RepairGUI_FreeFacesDlg::getFather (GEOM::GEOM_Object_ptr)
|
||||
{
|
||||
myEdit->setFocus();
|
||||
onSelectionDone();
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : keyPressEvent()
|
||||
// purpose :
|
||||
//=================================================================================
|
||||
void RepairGUI_FreeFacesDlg::keyPressEvent( QKeyEvent* e )
|
||||
{
|
||||
QDialog::keyPressEvent( e );
|
||||
if ( e->isAccepted() )
|
||||
return;
|
||||
|
||||
if ( e->key() == Qt::Key_F1 ) {
|
||||
e->accept();
|
||||
onHelp();
|
||||
}
|
||||
return myObj;
|
||||
}
|
||||
|
@ -27,11 +27,9 @@
|
||||
#ifndef REPAIRGUI_FREEFACESDLG_H
|
||||
#define REPAIRGUI_FREEFACESDLG_H
|
||||
|
||||
#include <QDialog>
|
||||
#include <GEOMBase_Helper.h>
|
||||
#include <GEOMBase_Skeleton.h>
|
||||
|
||||
class GEOM_Displayer;
|
||||
class QPushButton;
|
||||
class QLineEdit;
|
||||
class GeometryGUI;
|
||||
|
||||
@ -39,8 +37,7 @@ class GeometryGUI;
|
||||
// class : RepairGUI_FreeFacesDlg
|
||||
// purpose :
|
||||
//=================================================================================
|
||||
class RepairGUI_FreeFacesDlg : public QDialog,
|
||||
public GEOMBase_Helper
|
||||
class RepairGUI_FreeFacesDlg : public GEOMBase_Skeleton
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
@ -53,30 +50,24 @@ protected:
|
||||
virtual GEOM::GEOM_IOperations_ptr createOperation();
|
||||
virtual bool isValid( QString& );
|
||||
virtual bool execute( ObjectList& );
|
||||
virtual GEOM::GEOM_Object_ptr getFather (GEOM::GEOM_Object_ptr);
|
||||
|
||||
private:
|
||||
void Init();
|
||||
void enterEvent( QEvent* );
|
||||
void closeEvent( QCloseEvent* );
|
||||
void keyPressEvent( QKeyEvent* );
|
||||
void activateSelection();
|
||||
GEOM_Displayer* getDisplayer();
|
||||
|
||||
private slots:
|
||||
void onClose();
|
||||
void onHelp();
|
||||
void onDeactivate();
|
||||
void onActivate();
|
||||
void onSelectionDone();
|
||||
void onSetEditCurrentArgument();
|
||||
void ClickOnOk();
|
||||
bool ClickOnApply();
|
||||
void SelectionIntoArgument();
|
||||
void ActivateThisDialog();
|
||||
|
||||
private:
|
||||
GEOM_Displayer* myDisplayer;
|
||||
GEOM::GEOM_Object_var myObj;
|
||||
QPushButton* mySelBtn;
|
||||
QLineEdit* myEdit;
|
||||
GeometryGUI* myGeomGUI;
|
||||
QString myHelpFileName;
|
||||
};
|
||||
|
||||
#endif // REPAIRGUI_FREEFACESDLG_H
|
||||
|
Loading…
Reference in New Issue
Block a user