X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_NodesDlg.cxx;h=4b135d5913397d23bdcd67b64381d2fc52703b79;hp=5ae62afc1e539a30836af819824cf36706336dc5;hb=79b1ac2b6df9117f16f11d444b1f165d477a1813;hpb=c3bf92bd87b770fd81631a3853f7f5bb1ac6a4e8 diff --git a/src/SMESHGUI/SMESHGUI_NodesDlg.cxx b/src/SMESHGUI/SMESHGUI_NodesDlg.cxx index 5ae62afc1..4b135d591 100644 --- a/src/SMESHGUI/SMESHGUI_NodesDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_NodesDlg.cxx @@ -1,23 +1,23 @@ // SMESH SMESHGUI : GUI for SMESH component // // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // // @@ -26,27 +26,51 @@ // Module : SMESH // $Header$ -using namespace std; #include "SMESHGUI_NodesDlg.h" + #include "SMESHGUI.h" #include "SMESHGUI_SpinBox.h" - -#include "QAD_Application.h" -#include "QAD_Desktop.h" -#include "utilities.h" -#include "QAD_MessageBox.h" +#include "SMESHGUI_Utils.h" +#include "SMESHGUI_VTKUtils.h" +#include "SMESHGUI_MeshUtils.h" #include "SMESH_Actor.h" -#include -#include +#include "SMESH_ActorUtils.h" +#include "SMESH_ObjectDef.h" + +#include "SMDS_Mesh.hxx" +#include "SMDS_MeshNode.hxx" + +#include "SUIT_Session.h" +#include "SUIT_OverrideCursor.h" +#include "SUIT_ViewWindow.h" +#include "SUIT_ViewManager.h" +#include "SUIT_MessageBox.h" +#include "SUIT_Desktop.h" + +#include "SalomeApp_Study.h" +#include "LightApp_Application.h" +#include "LightApp_SelectionMgr.h" + +#include "SVTK_Selector.h" +#include "SVTK_ViewWindow.h" +#include "VTKViewer_CellLocationsArray.h" + +#include "SALOME_Actor.h" +#include "SALOME_ListIO.hxx" + +#include "utilities.h" // VTK Includes -#include -#include -#include -#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include // QT Includes #include @@ -65,165 +89,314 @@ using namespace std; #include #include +#include CORBA_SERVER_HEADER(SMESH_MeshEditor) + +using namespace std; + + +namespace SMESH { + + void AddNode (SMESH::SMESH_Mesh_ptr theMesh, float x, float y, float z) + { + SUIT_OverrideCursor wc; + try { + _PTR(SObject) aSobj = SMESH::FindSObject(theMesh); + SMESH::SMESH_MeshEditor_var aMeshEditor = theMesh->GetMeshEditor(); + aMeshEditor->AddNode(x,y,z); + _PTR(Study) aStudy = GetActiveStudyDocument(); + CORBA::Long anId = aStudy->StudyId(); + if (TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId, aSobj->GetID().c_str())) { + aVisualObj->Update(true); + } + } catch (SALOME::SALOME_Exception& exc) { + INFOS("Follow exception was cought:\n\t" << exc.details.text); + } catch (const std::exception& exc) { + INFOS("Follow exception was cought:\n\t" << exc.what()); + } catch (...) { + INFOS("Unknown exception was cought !!!"); + } + } + + class TNodeSimulation { + SVTK_ViewWindow* myViewWindow; + + SALOME_Actor *myPreviewActor; + vtkDataSetMapper* myMapper; + vtkPoints* myPoints; + + public: + TNodeSimulation(SVTK_ViewWindow* theViewWindow): + myViewWindow(theViewWindow) + { + vtkUnstructuredGrid* aGrid = vtkUnstructuredGrid::New(); + + // Create points + myPoints = vtkPoints::New(); + myPoints->SetNumberOfPoints(1); + myPoints->SetPoint(0,0.0,0.0,0.0); + + // Create cells + vtkIdList *anIdList = vtkIdList::New(); + anIdList->SetNumberOfIds(1); + + vtkCellArray *aCells = vtkCellArray::New(); + aCells->Allocate(2, 0); + + vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New(); + aCellTypesArray->SetNumberOfComponents(1); + aCellTypesArray->Allocate(1); + + anIdList->SetId(0, 0); + aCells->InsertNextCell(anIdList); + aCellTypesArray->InsertNextValue(VTK_VERTEX); + + VTKViewer_CellLocationsArray* aCellLocationsArray = VTKViewer_CellLocationsArray::New(); + aCellLocationsArray->SetNumberOfComponents(1); + aCellLocationsArray->SetNumberOfTuples(1); + + aCells->InitTraversal(); + vtkIdType npts = 0; + aCellLocationsArray->SetValue(0, aCells->GetTraversalLocation(npts)); + + aGrid->SetCells(aCellTypesArray, aCellLocationsArray, aCells); + + aGrid->SetPoints(myPoints); + aGrid->SetCells(aCellTypesArray, aCellLocationsArray,aCells); + aCellLocationsArray->Delete(); + aCellTypesArray->Delete(); + aCells->Delete(); + anIdList->Delete(); + + // Create and display actor + myMapper = vtkDataSetMapper::New(); + myMapper->SetInput(aGrid); + aGrid->Delete(); + + myPreviewActor = SALOME_Actor::New(); + myPreviewActor->SetInfinitive(true); + myPreviewActor->VisibilityOff(); + myPreviewActor->PickableOff(); + myPreviewActor->SetMapper(myMapper); + + vtkProperty* aProp = vtkProperty::New(); + aProp->SetRepresentationToPoints(); + + vtkFloatingPointType anRGB[3]; + GetColor( "SMESH", "node_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 255, 0 ) ); + aProp->SetColor( anRGB[0], anRGB[1], anRGB[2] ); + + vtkFloatingPointType aPointSize = GetFloat( "SMESH:node_size", 3 ); + aProp->SetPointSize( aPointSize ); + + myPreviewActor->SetProperty( aProp ); + aProp->Delete(); + + myViewWindow->AddActor(myPreviewActor); + } + + void SetPosition (float x, float y, float z) + { + myPoints->SetPoint(0,x,y,z); + myPoints->Modified(); + SetVisibility(true); + } + + void SetVisibility (bool theVisibility) + { + myPreviewActor->SetVisibility(theVisibility); + RepaintCurrentView(); + } + + ~TNodeSimulation() + { + myViewWindow->RemoveActor(myPreviewActor); + myPreviewActor->Delete(); + + myMapper->RemoveAllInputs(); + myMapper->Delete(); + + myPoints->Delete(); + } + }; +} //================================================================================= // class : SMESHGUI_NodesDlg() -// purpose : +// purpose : //================================================================================= -SMESHGUI_NodesDlg::SMESHGUI_NodesDlg( QWidget* parent, +SMESHGUI_NodesDlg::SMESHGUI_NodesDlg (SMESHGUI* theModule, const char* name, - SALOME_Selection* Sel, bool modal, - WFlags fl ) - : QDialog( parent, name, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ) + WFlags fl): + QDialog(SMESH::GetDesktop(theModule), + name, + modal, + WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | Qt::WDestructiveClose), + mySelector(SMESH::GetViewWindow(theModule)->GetSelector()), + mySelectionMgr(SMESH::GetSelectionMgr(theModule)), + mySMESHGUI(theModule) { - - QPixmap image0(QAD_Desktop::getResourceManager()->loadPixmap( "SMESH",tr("ICON_DLG_NODE"))); - if ( !name ) - setName( "SMESHGUI_NodesDlg" ); - resize( 303, 185 ); - setCaption( tr( "MESH_NODE_TITLE" ) ); - setSizeGripEnabled( TRUE ); - SMESHGUI_NodesDlgLayout = new QGridLayout( this ); - SMESHGUI_NodesDlgLayout->setSpacing( 6 ); - SMESHGUI_NodesDlgLayout->setMargin( 11 ); + mySimulation = new SMESH::TNodeSimulation(SMESH::GetViewWindow( mySMESHGUI )); + + QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_DLG_NODE"))); + if (!name) + setName("SMESHGUI_NodesDlg"); + resize(303, 185); + setCaption(tr("MESH_NODE_TITLE")); + setSizeGripEnabled(TRUE); + SMESHGUI_NodesDlgLayout = new QGridLayout(this); + SMESHGUI_NodesDlgLayout->setSpacing(6); + SMESHGUI_NodesDlgLayout->setMargin(11); /***************************************************************/ - GroupButtons = new QGroupBox( this, "GroupButtons" ); - GroupButtons->setGeometry( QRect( 10, 10, 281, 48 ) ); - GroupButtons->setTitle( tr( "" ) ); - GroupButtons->setColumnLayout(0, Qt::Vertical ); - GroupButtons->layout()->setSpacing( 0 ); - GroupButtons->layout()->setMargin( 0 ); - GroupButtonsLayout = new QGridLayout( GroupButtons->layout() ); - GroupButtonsLayout->setAlignment( Qt::AlignTop ); - GroupButtonsLayout->setSpacing( 6 ); - GroupButtonsLayout->setMargin( 11 ); - buttonCancel = new QPushButton( GroupButtons, "buttonCancel" ); - buttonCancel->setText( tr( "SMESH_BUT_CLOSE" ) ); - buttonCancel->setAutoDefault( TRUE ); - GroupButtonsLayout->addWidget( buttonCancel, 0, 3 ); - buttonApply = new QPushButton( GroupButtons, "buttonApply" ); - buttonApply->setText( tr( "SMESH_BUT_APPLY" ) ); - buttonApply->setAutoDefault( TRUE ); - GroupButtonsLayout->addWidget( buttonApply, 0, 1 ); - QSpacerItem* spacer_9 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ); - GroupButtonsLayout->addItem( spacer_9, 0, 2 ); - buttonOk = new QPushButton( GroupButtons, "buttonOk" ); - buttonOk->setText( tr( "SMESH_BUT_OK" ) ); - buttonOk->setAutoDefault( TRUE ); - buttonOk->setDefault( TRUE ); - GroupButtonsLayout->addWidget( buttonOk, 0, 0 ); - SMESHGUI_NodesDlgLayout->addWidget( GroupButtons, 2, 0 ); + GroupButtons = new QGroupBox(this, "GroupButtons"); + GroupButtons->setGeometry(QRect(10, 10, 281, 48)); + GroupButtons->setTitle(tr("" )); + GroupButtons->setColumnLayout(0, Qt::Vertical); + GroupButtons->layout()->setSpacing(0); + GroupButtons->layout()->setMargin(0); + GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); + GroupButtonsLayout->setAlignment(Qt::AlignTop); + GroupButtonsLayout->setSpacing(6); + GroupButtonsLayout->setMargin(11); + buttonHelp = new QPushButton(GroupButtons, "buttonHelp"); + buttonHelp->setText(tr("SMESH_BUT_HELP" )); + buttonHelp->setAutoDefault(TRUE); + GroupButtonsLayout->addWidget(buttonHelp, 0, 4); + buttonCancel = new QPushButton(GroupButtons, "buttonCancel"); + buttonCancel->setText(tr("SMESH_BUT_CLOSE" )); + buttonCancel->setAutoDefault(TRUE); + GroupButtonsLayout->addWidget(buttonCancel, 0, 3); + buttonApply = new QPushButton(GroupButtons, "buttonApply"); + buttonApply->setText(tr("SMESH_BUT_APPLY" )); + buttonApply->setAutoDefault(TRUE); + GroupButtonsLayout->addWidget(buttonApply, 0, 1); + QSpacerItem* spacer_9 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + GroupButtonsLayout->addItem(spacer_9, 0, 2); + buttonOk = new QPushButton(GroupButtons, "buttonOk"); + buttonOk->setText(tr("SMESH_BUT_OK" )); + buttonOk->setAutoDefault(TRUE); + buttonOk->setDefault(TRUE); + GroupButtonsLayout->addWidget(buttonOk, 0, 0); + SMESHGUI_NodesDlgLayout->addWidget(GroupButtons, 2, 0); /***************************************************************/ - GroupConstructors = new QButtonGroup( this, "GroupConstructors" ); - GroupConstructors->setTitle( tr( "MESH_NODE" ) ); - GroupConstructors->setExclusive( TRUE ); - GroupConstructors->setColumnLayout(0, Qt::Vertical ); - GroupConstructors->layout()->setSpacing( 0 ); - GroupConstructors->layout()->setMargin( 0 ); - GroupConstructorsLayout = new QGridLayout( GroupConstructors->layout() ); - GroupConstructorsLayout->setAlignment( Qt::AlignTop ); - GroupConstructorsLayout->setSpacing( 6 ); - GroupConstructorsLayout->setMargin( 11 ); - Constructor1 = new QRadioButton( GroupConstructors, "Constructor1" ); - Constructor1->setText( tr( "" ) ); - Constructor1->setPixmap( image0 ); - Constructor1->setChecked( TRUE ); - GroupConstructorsLayout->addWidget( Constructor1, 0, 0 ); - QSpacerItem* spacer_2 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ); - GroupConstructorsLayout->addItem( spacer_2, 0, 1 ); - SMESHGUI_NodesDlgLayout->addWidget( GroupConstructors, 0, 0 ); + GroupConstructors = new QButtonGroup(this, "GroupConstructors"); + GroupConstructors->setTitle(tr("MESH_NODE" )); + GroupConstructors->setExclusive(TRUE); + GroupConstructors->setColumnLayout(0, Qt::Vertical); + GroupConstructors->layout()->setSpacing(0); + GroupConstructors->layout()->setMargin(0); + GroupConstructorsLayout = new QGridLayout(GroupConstructors->layout()); + GroupConstructorsLayout->setAlignment(Qt::AlignTop); + GroupConstructorsLayout->setSpacing(6); + GroupConstructorsLayout->setMargin(11); + Constructor1 = new QRadioButton(GroupConstructors, "Constructor1"); + Constructor1->setText(tr("" )); + Constructor1->setPixmap(image0); + Constructor1->setChecked(TRUE); + GroupConstructorsLayout->addWidget(Constructor1, 0, 0); + QSpacerItem* spacer_2 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + GroupConstructorsLayout->addItem(spacer_2, 0, 1); + SMESHGUI_NodesDlgLayout->addWidget(GroupConstructors, 0, 0); /***************************************************************/ - GroupCoordinates = new QGroupBox( this, "GroupCoordinates" ); - GroupCoordinates->setTitle( tr( "SMESH_COORDINATES" ) ); - GroupCoordinates->setColumnLayout(0, Qt::Vertical ); - GroupCoordinates->layout()->setSpacing( 0 ); - GroupCoordinates->layout()->setMargin( 0 ); - GroupCoordinatesLayout = new QGridLayout( GroupCoordinates->layout() ); - GroupCoordinatesLayout->setAlignment( Qt::AlignTop ); - GroupCoordinatesLayout->setSpacing( 6 ); - GroupCoordinatesLayout->setMargin( 11 ); - TextLabel_X = new QLabel( GroupCoordinates, "TextLabel_X" ); - TextLabel_X->setText( tr( "SMESH_X" ) ); - GroupCoordinatesLayout->addWidget( TextLabel_X, 0, 0 ); - TextLabel_Y = new QLabel( GroupCoordinates, "TextLabel_Y" ); - TextLabel_Y->setText( tr( "SMESH_Y" ) ); - GroupCoordinatesLayout->addWidget( TextLabel_Y, 0, 2 ); - - TextLabel_Z = new QLabel( GroupCoordinates, "TextLabel_Z" ); - TextLabel_Z->setText( tr( "SMESH_Z" ) ); - GroupCoordinatesLayout->addWidget( TextLabel_Z, 0, 4 ); - - SpinBox_X = new SMESHGUI_SpinBox( GroupCoordinates, "SpinBox_X" ) ; - GroupCoordinatesLayout->addWidget( SpinBox_X, 0, 1 ); - - SpinBox_Y = new SMESHGUI_SpinBox( GroupCoordinates, "SpinBox_Y" ) ; - GroupCoordinatesLayout->addWidget( SpinBox_Y, 0, 3 ); - - SpinBox_Z = new SMESHGUI_SpinBox( GroupCoordinates, "SpinBox_Z" ) ; - GroupCoordinatesLayout->addWidget( SpinBox_Z, 0, 5 ); - - SMESHGUI_NodesDlgLayout->addWidget( GroupCoordinates, 1, 0 ); - + GroupCoordinates = new QGroupBox(this, "GroupCoordinates"); + GroupCoordinates->setTitle(tr("SMESH_COORDINATES" )); + GroupCoordinates->setColumnLayout(0, Qt::Vertical); + GroupCoordinates->layout()->setSpacing(0); + GroupCoordinates->layout()->setMargin(0); + GroupCoordinatesLayout = new QGridLayout(GroupCoordinates->layout()); + GroupCoordinatesLayout->setAlignment(Qt::AlignTop); + GroupCoordinatesLayout->setSpacing(6); + GroupCoordinatesLayout->setMargin(11); + + TextLabel_X = new QLabel(GroupCoordinates, "TextLabel_X"); + TextLabel_X->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) ); + TextLabel_X->setText(tr("SMESH_X" )); + GroupCoordinatesLayout->addWidget(TextLabel_X, 0, 0); + + TextLabel_Y = new QLabel(GroupCoordinates, "TextLabel_Y"); + //TextLabel_Y->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs ); + TextLabel_Y->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) ); + TextLabel_Y->setText(tr("SMESH_Y" )); + GroupCoordinatesLayout->addWidget(TextLabel_Y, 0, 2); + + TextLabel_Z = new QLabel(GroupCoordinates, "TextLabel_Z"); + //TextLabel_Z->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs ); + TextLabel_Z->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) ); + TextLabel_Z->setText(tr("SMESH_Z" )); + GroupCoordinatesLayout->addWidget(TextLabel_Z, 0, 4); + + SpinBox_X = new SMESHGUI_SpinBox(GroupCoordinates, "SpinBox_X"); + GroupCoordinatesLayout->addWidget(SpinBox_X, 0, 1); + + SpinBox_Y = new SMESHGUI_SpinBox(GroupCoordinates, "SpinBox_Y"); + GroupCoordinatesLayout->addWidget(SpinBox_Y, 0, 3); + + SpinBox_Z = new SMESHGUI_SpinBox(GroupCoordinates, "SpinBox_Z"); + GroupCoordinatesLayout->addWidget(SpinBox_Z, 0, 5); + + SMESHGUI_NodesDlgLayout->addWidget(GroupCoordinates, 1, 0); + + myHelpFileName = "adding_nodes_and_elements_page.html#adding_nodes_anchor"; + /* Initialisation and display */ - Init(Sel) ; + Init(); } - //======================================================================= // function : ~SMESHGUI_NodesDlg() // purpose : Destructor //======================================================================= SMESHGUI_NodesDlg::~SMESHGUI_NodesDlg() -{} - +{ + delete mySimulation; +} //================================================================================= // function : Init() // purpose : //================================================================================= -void SMESHGUI_NodesDlg::Init(SALOME_Selection* Sel) +void SMESHGUI_NodesDlg::Init () { /* Get setting of step value from file configuration */ - double step ; - // QString St = QAD_CONFIG->getSetting( "xxxxxxxxxxxxx" ) ; TODO - // step = St.toDouble() ; TODO - step = 25.0 ; - + double step; + // QString St = SUIT_CONFIG->getSetting("xxxxxxxxxxxxx"); TODO + // step = St.toDouble(); TODO + step = 25.0; + /* min, max, step and decimals for spin boxes */ - SpinBox_X->RangeStepAndValidator( -999.999, +999.999, step, 3 ) ; - SpinBox_Y->RangeStepAndValidator( -999.999, +999.999, step, 3 ) ; - SpinBox_Z->RangeStepAndValidator( -999.999, +999.999, step, 3 ) ; - SpinBox_X->SetValue( 0.0 ) ; - SpinBox_Y->SetValue( 0.0 ) ; - SpinBox_Z->SetValue( 0.0 ) ; - - mySelection = Sel ; - myMeshGUI = SMESHGUI::GetSMESHGUI() ; - myMeshGUI->SetActiveDialogBox( (QDialog*)this ) ; - + SpinBox_X->RangeStepAndValidator(COORD_MIN, COORD_MAX, step, DBL_DIGITS_DISPLAY); + SpinBox_Y->RangeStepAndValidator(COORD_MIN, COORD_MAX, step, DBL_DIGITS_DISPLAY); + SpinBox_Z->RangeStepAndValidator(COORD_MIN, COORD_MAX, step, DBL_DIGITS_DISPLAY); + SpinBox_X->SetValue(0.0); + SpinBox_Y->SetValue(0.0); + SpinBox_Z->SetValue(0.0); + + mySMESHGUI->SetActiveDialogBox((QDialog*)this); + /* signals and slots connections */ - connect( buttonOk, SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) ); - connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( ClickOnCancel() ) ); - connect( buttonApply, SIGNAL( clicked() ), this, SLOT(ClickOnApply() ) ); - - connect( SpinBox_X, SIGNAL ( valueChanged( double) ), this, SLOT( ValueChangedInSpinBox( double) ) ) ; - connect( SpinBox_Y, SIGNAL ( valueChanged( double) ), this, SLOT( ValueChangedInSpinBox( double) ) ) ; - connect( SpinBox_Z, SIGNAL ( valueChanged( double) ), this, SLOT( ValueChangedInSpinBox( double) ) ) ; - - connect( mySelection, SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); - connect( myMeshGUI, SIGNAL ( SignalDeactivateActiveDialog() ), this, SLOT( DeactivateActiveDialog() ) ) ; - /* to close dialog if study change */ - connect( myMeshGUI, SIGNAL ( SignalCloseAllDialogs() ), this, SLOT( ClickOnCancel() ) ) ; - - /* Move widget on the botton right corner of main widget */ - int x, y ; - myMeshGUI->DefineDlgPosition( this, x, y ) ; - this->move( x, y ) ; - this->show() ; + connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); + connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); + connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); + connect(buttonHelp, SIGNAL(clicked()), this, SLOT(ClickOnHelp())); + + connect(SpinBox_X, SIGNAL (valueChanged(double)), SLOT(ValueChangedInSpinBox(double))); + connect(SpinBox_Y, SIGNAL (valueChanged(double)), SLOT(ValueChangedInSpinBox(double))); + connect(SpinBox_Z, SIGNAL (valueChanged(double)), SLOT(ValueChangedInSpinBox(double))); + + connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(SelectionIntoArgument())); + connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), SLOT(DeactivateActiveDialog())); + /* to close dialog if study frame change */ + connect(mySMESHGUI, SIGNAL (SignalStudyFrameChanged()), SLOT(ClickOnCancel())); + + this->show(); + + // set selection mode + SMESH::SetPointRepresentation(true); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(NodeSelection); SelectionIntoArgument(); } @@ -232,15 +405,15 @@ void SMESHGUI_NodesDlg::Init(SALOME_Selection* Sel) // function : ValueChangedInSpinBox() // purpose : //================================================================================= -void SMESHGUI_NodesDlg::ValueChangedInSpinBox( double newValue ) +void SMESHGUI_NodesDlg::ValueChangedInSpinBox (double newValue) { - double vx = SpinBox_X->GetValue() ; - double vy = SpinBox_Y->GetValue() ; - double vz = SpinBox_Z->GetValue() ; - myMeshGUI->DisplaySimulationNode( myMesh, vx, vy, vz ); - //myMeshGUI->ViewNodes(); + if (!myMesh->_is_nil()) { + double vx = SpinBox_X->GetValue(); + double vy = SpinBox_Y->GetValue(); + double vz = SpinBox_Z->GetValue(); - return ; + mySimulation->SetPosition(vx,vy,vz); + } } //================================================================================= @@ -249,49 +422,98 @@ void SMESHGUI_NodesDlg::ValueChangedInSpinBox( double newValue ) //================================================================================= void SMESHGUI_NodesDlg::ClickOnOk() { - this->ClickOnApply() ; - this->ClickOnCancel() ; - - return ; + if (ClickOnApply()) + ClickOnCancel(); } -//======================================================================= +//================================================================================= // function : ClickOnApply() // purpose : -//======================================================================= -void SMESHGUI_NodesDlg::ClickOnApply() +//================================================================================= +bool SMESHGUI_NodesDlg::ClickOnApply() { - if ( myMeshGUI->GetActiveStudy()->getActiveStudyFrame()->getTypeView() != VIEW_VTK ) { - return; + if (mySMESHGUI->isActiveStudyLocked()) + return false; + + if (myMesh->_is_nil()) { + SUIT_MessageBox::warn1(SMESHGUI::desktop(), tr("SMESH_WRN_WARNING"), + tr("MESH_IS_NOT_SELECTED"), tr("SMESH_BUT_OK")); + return false; } - - if ( Constructor1->isChecked() ) { - /* Recup args and call method */ - double x = SpinBox_X->GetValue() ; - double y = SpinBox_Y->GetValue() ; - double z = SpinBox_Z->GetValue() ; - myMeshGUI->EraseSimulationActors() ; - myMeshGUI->AddNode( myMesh, x, y, z ) ; - myMeshGUI->ViewNodes(); - mySelection->ClearIObjects(); + + /* Recup args and call method */ + double x = SpinBox_X->GetValue(); + double y = SpinBox_Y->GetValue(); + double z = SpinBox_Z->GetValue(); + mySimulation->SetVisibility(false); + SMESH::AddNode(myMesh,x,y,z); + SMESH::SetPointRepresentation(true); + + // select myMesh + SALOME_ListIO aList; + mySelectionMgr->selectedObjects(aList); + if (aList.Extent() != 1) { + if (SVTK_ViewWindow* aViewWindow = SMESH::GetCurrentVtkView()) { + vtkActorCollection *aCollection = aViewWindow->getRenderer()->GetActors(); + aCollection->InitTraversal(); + while (vtkActor *anAct = aCollection->GetNextActor()) { + if (SMESH_Actor *anActor = dynamic_cast(anAct)) { + if (anActor->hasIO()) { + if (SMESH_MeshObj *aMeshObj = dynamic_cast(anActor->GetObject().get())) { + if (myMesh->_is_equivalent(aMeshObj->GetMeshServer())) { + aList.Clear(); + aList.Append(anActor->getIO()); + mySelectionMgr->setSelectedObjects(aList, false); + break; + } + } + } + } + } + } } + return true; } - -//======================================================================= +//================================================================================= // function : ClickOnCancel() // purpose : -//======================================================================= +//================================================================================= void SMESHGUI_NodesDlg::ClickOnCancel() { - QAD_Application::getDesktop()->SetSelectionMode( ActorSelection ); - disconnect( mySelection, 0, this, 0 ); - myMeshGUI->ResetState() ; - myMeshGUI->EraseSimulationActors() ; - reject() ; - return ; + disconnect(mySelectionMgr, 0, this, 0); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(ActorSelection); + + mySimulation->SetVisibility(false); + SMESH::SetPointRepresentation(false); + mySMESHGUI->ResetState(); + + reject(); } +//================================================================================= +// function : ClickOnHelp() +// purpose : +//================================================================================= +void SMESHGUI_NodesDlg::ClickOnHelp() +{ + LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication()); + if (app) + app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName); + else { + QString platform; +#ifdef WIN32 + platform = "winapplication"; +#else + platform = "application"; +#endif + SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"), + QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE"). + arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName), + QObject::tr("BUT_OK")); + } +} //================================================================================= // function : SelectionIntoArgument() @@ -299,118 +521,113 @@ void SMESHGUI_NodesDlg::ClickOnCancel() //================================================================================= void SMESHGUI_NodesDlg::SelectionIntoArgument() { - int nbSel = mySelection->IObjectCount(); - if(nbSel != 1) { - SpinBox_X->SetValue(0.0) ; - SpinBox_Y->SetValue(0.0) ; - SpinBox_Z->SetValue(0.0) ; - return; - } - - Standard_Boolean res; - myMesh = myMeshGUI->ConvertIOinMesh( mySelection->firstIObject(), res ); - if (!res) { - SpinBox_X->SetValue(0.0) ; - SpinBox_Y->SetValue(0.0) ; - SpinBox_Z->SetValue(0.0) ; - return ; - } - - if ( mySelection->SelectionMode() != NodeSelection ) { - SpinBox_X->SetValue(0.0) ; - SpinBox_Y->SetValue(0.0) ; - SpinBox_Z->SetValue(0.0) ; - QAD_MessageBox::warn1 ( QAD_Application::getDesktop(), tr ("SMESH_WRN_WARNING"), - tr ("SMESH_WRN_SELECTIONMODE_NODES"), tr ("SMESH_BUT_OK") ); + if (!GroupConstructors->isEnabled()) return; - } - QString aString = ""; - int nbNodes = myMeshGUI->GetNameOfSelectedNodes(mySelection, aString) ; - if(nbNodes != 1) { - SpinBox_X->SetValue(0.0) ; - SpinBox_Y->SetValue(0.0) ; - SpinBox_Z->SetValue(0.0) ; - return ; - } - - if ( nbNodes == 1 ) { - TColStd_MapOfInteger myMapIndex; - mySelection->GetIndex( mySelection->firstIObject(), myMapIndex); - TColStd_MapIteratorOfMapOfInteger ite( myMapIndex ); - int idNodes[1]; - for ( ; ite.More(); ite.Next() ) { - idNodes[0] = ite.Key(); + mySimulation->SetVisibility(false); + SMESH::SetPointRepresentation(true); + + const SALOME_ListIO& aList = mySelector->StoredIObjects(); + if (aList.Extent() == 1) { + Handle(SALOME_InteractiveObject) anIO = aList.First(); + if (anIO->hasEntry()) { + myMesh = SMESH::GetMeshByIO(anIO); + if (myMesh->_is_nil()) return; + QString aText; + if (SMESH::GetNameOfSelectedNodes(mySelector,anIO,aText) == 1) { + if (SMESH_Actor* anActor = SMESH::FindActorByObject(myMesh.in())) { + if (SMDS_Mesh* aMesh = anActor->GetObject()->GetMesh()) { + if (const SMDS_MeshNode* aNode = aMesh->FindNode(aText.toInt())) { + SpinBox_X->SetValue(aNode->X()); + SpinBox_Y->SetValue(aNode->Y()); + SpinBox_Z->SetValue(aNode->Z()); + } + } + } + } + mySimulation->SetPosition(SpinBox_X->GetValue(), + SpinBox_Y->GetValue(), + SpinBox_Z->GetValue()); } - - Standard_Boolean result; - SMESH_Actor* ac = myMeshGUI->FindActor( myMesh, result, true ); - vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::SafeDownCast( ac->GetUnstructuredGrid() ); - float *p0 = ugrid->GetPoint(idNodes[0]); - - SpinBox_X->SetValue( p0[0] ) ; - SpinBox_Y->SetValue( p0[1] ) ; - SpinBox_Z->SetValue( p0[2] ) ; - - myMeshGUI->DisplaySimulationNode( myMesh, p0[0], p0[1], p0[2] ); - // myMeshGUI->ViewNodes(); - } - - return ; + } } - -//======================================================================= +//================================================================================= // function : closeEvent() // purpose : -//======================================================================= -void SMESHGUI_NodesDlg::closeEvent(QCloseEvent* e) +//================================================================================= +void SMESHGUI_NodesDlg::closeEvent (QCloseEvent*) { - this->ClickOnCancel() ; /* same than click on cancel button */ - return ; + this->ClickOnCancel(); /* same than click on cancel button */ } +//================================================================================= +// function : hideEvent() +// purpose : caused by ESC key +//================================================================================= +void SMESHGUI_NodesDlg::hideEvent (QHideEvent*) +{ + if (!isMinimized()) + ClickOnCancel(); +} //================================================================================= // function : enterEvent() // purpose : to reactivate this dialog box when mouse enter onto the window //================================================================================= -void SMESHGUI_NodesDlg::enterEvent( QEvent* e) +void SMESHGUI_NodesDlg::enterEvent(QEvent*) { - if ( GroupConstructors->isEnabled() ) - return ; - ActivateThisDialog() ; - return ; + if (!GroupConstructors->isEnabled()) + ActivateThisDialog(); } - //================================================================================= // function : DeactivateActiveDialog() // purpose : public slot to deactivate if active //================================================================================= void SMESHGUI_NodesDlg::DeactivateActiveDialog() { - if ( GroupConstructors->isEnabled() ) { - GroupConstructors->setEnabled(false) ; - GroupCoordinates->setEnabled(false) ; - GroupButtons->setEnabled(false) ; - myMeshGUI->EraseSimulationActors() ; - myMeshGUI->ResetState() ; - myMeshGUI->SetActiveDialogBox(0) ; + if (GroupConstructors->isEnabled()) { + GroupConstructors->setEnabled(false); + GroupCoordinates->setEnabled(false); + GroupButtons->setEnabled(false); + mySimulation->SetVisibility(false); + mySMESHGUI->ResetState(); + mySMESHGUI->SetActiveDialogBox(0); } - return ; } - //================================================================================= // function : ActivateThisDialog() // purpose : //================================================================================= -void SMESHGUI_NodesDlg::ActivateThisDialog( ) +void SMESHGUI_NodesDlg::ActivateThisDialog() { - myMeshGUI->EmitSignalDeactivateDialog() ; - GroupConstructors->setEnabled(true) ; - GroupCoordinates->setEnabled(true) ; - GroupButtons->setEnabled(true) ; - return ; + mySMESHGUI->EmitSignalDeactivateDialog(); + GroupConstructors->setEnabled(true); + GroupCoordinates->setEnabled(true); + GroupButtons->setEnabled(true); + + SMESH::SetPointRepresentation(true); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(NodeSelection); + + SelectionIntoArgument(); +} + +//================================================================================= +// function : keyPressEvent() +// purpose : +//================================================================================= +void SMESHGUI_NodesDlg::keyPressEvent( QKeyEvent* e ) +{ + QDialog::keyPressEvent( e ); + if ( e->isAccepted() ) + return; + + if ( e->key() == Key_F1 ) + { + e->accept(); + ClickOnHelp(); + } }