2003-07-10 19:18:22 +06:00
|
|
|
// 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
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// File : SMESHGUI_MoveNodesDlg.cxx
|
|
|
|
// Author : Nicolas REJNERI
|
|
|
|
// Module : SMESH
|
2003-05-19 20:07:00 +06:00
|
|
|
// $Header$
|
|
|
|
|
|
|
|
#include "SMESHGUI_MoveNodesDlg.h"
|
2004-12-01 15:48:31 +05:00
|
|
|
|
|
|
|
#include "SMESHGUI.h"
|
2003-05-19 20:07:00 +06:00
|
|
|
#include "SMESHGUI_SpinBox.h"
|
2004-12-01 15:48:31 +05:00
|
|
|
#include "SMESHGUI_IdValidator.h"
|
|
|
|
|
|
|
|
#include "SMESHGUI_Utils.h"
|
|
|
|
#include "SMESHGUI_VTKUtils.h"
|
|
|
|
#include "SMESHGUI_MeshUtils.h"
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
#include "SMESH_Actor.h"
|
2004-12-01 15:48:31 +05:00
|
|
|
#include "SMDS_Mesh.hxx"
|
|
|
|
#include "SMDS_MeshNode.hxx"
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
#include "SALOME_Selection.h"
|
|
|
|
#include "VTKViewer_ViewFrame.h"
|
2003-05-19 20:07:00 +06:00
|
|
|
#include "QAD_Desktop.h"
|
2004-12-01 15:48:31 +05:00
|
|
|
#include "QAD_RightFrame.h"
|
2003-05-19 20:07:00 +06:00
|
|
|
#include "QAD_MessageBox.h"
|
2004-12-01 15:48:31 +05:00
|
|
|
|
2003-05-19 20:07:00 +06:00
|
|
|
#include "utilities.h"
|
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
#include <vtkCell.h>
|
|
|
|
#include <vtkIdList.h>
|
|
|
|
#include <vtkIntArray.h>
|
|
|
|
#include <vtkCellArray.h>
|
|
|
|
#include <vtkUnsignedCharArray.h>
|
|
|
|
#include <vtkUnstructuredGrid.h>
|
|
|
|
#include <vtkDataSetMapper.h>
|
|
|
|
|
2003-05-19 20:07:00 +06:00
|
|
|
#include <qgroupbox.h>
|
|
|
|
#include <qlabel.h>
|
|
|
|
#include <qlineedit.h>
|
|
|
|
#include <qpushbutton.h>
|
|
|
|
#include <qradiobutton.h>
|
|
|
|
#include <qlayout.h>
|
|
|
|
#include <qpixmap.h>
|
2004-12-01 15:48:31 +05:00
|
|
|
#include <qmessagebox.h>
|
|
|
|
#include <qbuttongroup.h>
|
|
|
|
|
|
|
|
// IDL Headers
|
|
|
|
#include <SALOMEconfig.h>
|
|
|
|
#include CORBA_SERVER_HEADER(SMESH_Mesh)
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
#define MARGIN 10
|
|
|
|
#define SPACING 5
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
|
|
|
|
//=================================================================================
|
|
|
|
// class : SMESHGUI_MoveNodesDlg()
|
|
|
|
// purpose :
|
|
|
|
//=================================================================================
|
2004-12-01 15:48:31 +05:00
|
|
|
SMESHGUI_MoveNodesDlg::SMESHGUI_MoveNodesDlg( QWidget* theParent,
|
|
|
|
SALOME_Selection* theSelection,
|
|
|
|
const char* theName )
|
|
|
|
|
|
|
|
: QDialog( theParent, theName, false,
|
|
|
|
WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu )
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-12-01 15:48:31 +05:00
|
|
|
myPreviewActor = 0;
|
|
|
|
myBusy = false;
|
|
|
|
mySelection = 0;
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
setCaption( tr( "CAPTION" ) );
|
|
|
|
|
|
|
|
QVBoxLayout* aDlgLay = new QVBoxLayout( this, MARGIN, SPACING );
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
QFrame* aMainFrame = createMainFrame ( this );
|
|
|
|
QFrame* aBtnFrame = createButtonFrame( this );
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
aDlgLay->addWidget( aMainFrame );
|
|
|
|
aDlgLay->addWidget( aBtnFrame );
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
aDlgLay->setStretchFactor( aMainFrame, 1 );
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
Init( theSelection ) ;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
//=======================================================================
|
|
|
|
// name : SMESHGUI_MoveNodesDlg::createButtonFrame
|
|
|
|
// Purpose : Create frame containing buttons
|
|
|
|
//=======================================================================
|
|
|
|
QFrame* SMESHGUI_MoveNodesDlg::createButtonFrame( QWidget* theParent )
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-12-01 15:48:31 +05:00
|
|
|
QFrame* aFrame = new QFrame( theParent );
|
|
|
|
aFrame->setFrameStyle( QFrame::Box | QFrame::Sunken );
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
myOkBtn = new QPushButton( tr( "SMESH_BUT_OK" ), aFrame );
|
|
|
|
myApplyBtn = new QPushButton( tr( "SMESH_BUT_APPLY" ), aFrame );
|
|
|
|
myCloseBtn = new QPushButton( tr( "SMESH_BUT_CLOSE" ), aFrame );
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
QSpacerItem* aSpacer = new QSpacerItem( 0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum );
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
QHBoxLayout* aLay = new QHBoxLayout( aFrame, MARGIN, SPACING );
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
aLay->addWidget( myOkBtn );
|
|
|
|
aLay->addWidget( myApplyBtn );
|
|
|
|
aLay->addItem( aSpacer);
|
|
|
|
aLay->addWidget( myCloseBtn );
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
connect( myOkBtn, SIGNAL( clicked() ), SLOT( onOk() ) );
|
|
|
|
connect( myCloseBtn, SIGNAL( clicked() ), SLOT( onClose() ) ) ;
|
|
|
|
connect( myApplyBtn, SIGNAL( clicked() ), SLOT( onApply() ) );
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
return aFrame;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
//=======================================================================
|
|
|
|
// name : SMESHGUI_MoveNodesDlg::createMainFrame
|
|
|
|
// Purpose : Create frame containing dialog's input fields
|
|
|
|
//=======================================================================
|
|
|
|
QFrame* SMESHGUI_MoveNodesDlg::createMainFrame( QWidget* theParent )
|
|
|
|
{
|
|
|
|
QFrame* aFrame = new QFrame( theParent );
|
|
|
|
|
|
|
|
QPixmap iconMoveNode(
|
|
|
|
QAD_Desktop::getResourceManager()->loadPixmap( "SMESH",tr( "ICON_DLG_MOVE_NODE" ) ) );
|
|
|
|
QPixmap iconSelect(
|
|
|
|
QAD_Desktop::getResourceManager()->loadPixmap( "SMESH",tr( "ICON_SELECT" ) ) );
|
|
|
|
|
|
|
|
QButtonGroup* aPixGrp = new QButtonGroup( 1, Qt::Vertical, tr( "MESH_NODE" ), aFrame );
|
|
|
|
aPixGrp->setExclusive( TRUE );
|
|
|
|
QRadioButton* aRBut = new QRadioButton( aPixGrp );
|
|
|
|
aRBut->setPixmap( iconMoveNode );
|
|
|
|
aRBut->setChecked( TRUE );
|
|
|
|
|
|
|
|
QGroupBox* anIdGrp = new QGroupBox( 1, Qt::Vertical, tr( "SMESH_MOVE" ), aFrame );
|
|
|
|
new QLabel( tr( "NODE_ID" ), anIdGrp );
|
|
|
|
( new QPushButton( anIdGrp ) )->setPixmap( iconSelect );
|
|
|
|
myId = new QLineEdit( anIdGrp );
|
|
|
|
myId->setValidator( new SMESHGUI_IdValidator( this, "validator", 1 ));
|
|
|
|
|
|
|
|
QGroupBox* aCoordGrp = new QGroupBox( 1, Qt::Vertical, tr( "SMESH_COORDINATES" ), aFrame );
|
|
|
|
new QLabel( tr( "SMESH_X" ), aCoordGrp );
|
|
|
|
myX = new SMESHGUI_SpinBox( aCoordGrp );
|
|
|
|
new QLabel( tr( "SMESH_Y" ), aCoordGrp );
|
|
|
|
myY = new SMESHGUI_SpinBox( aCoordGrp );
|
|
|
|
new QLabel( tr( "SMESH_Z" ), aCoordGrp );
|
|
|
|
myZ = new SMESHGUI_SpinBox( aCoordGrp );
|
|
|
|
|
|
|
|
myX->RangeStepAndValidator( -999999.999, +999999.999, 25.0, 3 );
|
|
|
|
myY->RangeStepAndValidator( -999999.999, +999999.999, 25.0, 3 );
|
|
|
|
myZ->RangeStepAndValidator( -999999.999, +999999.999, 25.0, 3 );
|
|
|
|
|
|
|
|
QVBoxLayout* aLay = new QVBoxLayout( aFrame );
|
|
|
|
aLay->addWidget( aPixGrp );
|
|
|
|
aLay->addWidget( anIdGrp );
|
|
|
|
aLay->addWidget( aCoordGrp );
|
|
|
|
|
|
|
|
// connect signale and slots
|
|
|
|
connect( myX, SIGNAL ( valueChanged( double) ), this, SLOT( redisplayPreview() ) );
|
|
|
|
connect( myY, SIGNAL ( valueChanged( double) ), this, SLOT( redisplayPreview() ) );
|
|
|
|
connect( myZ, SIGNAL ( valueChanged( double) ), this, SLOT( redisplayPreview() ) );
|
|
|
|
connect( myId, SIGNAL( textChanged(const QString&) ), SLOT( onTextChange(const QString&) ));
|
|
|
|
|
|
|
|
return aFrame;
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
//=======================================================================
|
|
|
|
// name : SMESHGUI_MoveNodesDlg::~SMESHGUI_MoveNodesDlg
|
|
|
|
// Purpose :
|
|
|
|
//=======================================================================
|
|
|
|
SMESHGUI_MoveNodesDlg::~SMESHGUI_MoveNodesDlg()
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-12-01 15:48:31 +05:00
|
|
|
erasePreview();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
//=======================================================================
|
|
|
|
// name : SMESHGUI_MoveNodesDlg::Init
|
|
|
|
// Purpose : Init dialog fields
|
|
|
|
//=======================================================================
|
|
|
|
void SMESHGUI_MoveNodesDlg::Init( SALOME_Selection* theSelection )
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-12-01 15:48:31 +05:00
|
|
|
myPreviewActor = 0;
|
|
|
|
myMeshActor = 0;
|
|
|
|
myBusy = false;
|
|
|
|
mySelection = theSelection;
|
|
|
|
|
|
|
|
SMESHGUI* aSMESHGUI = SMESHGUI::GetSMESHGUI();
|
|
|
|
aSMESHGUI->SetActiveDialogBox( ( QDialog* )this ) ;
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
// selection and SMESHGUI
|
|
|
|
connect( mySelection, SIGNAL( currentSelectionChanged() ), SLOT( onSelectionDone() ) );
|
|
|
|
connect( aSMESHGUI, SIGNAL( SignalDeactivateActiveDialog() ), SLOT( onDeactivate() ) );
|
|
|
|
connect( aSMESHGUI, SIGNAL( SignalCloseAllDialogs() ), SLOT( onClose() ) );
|
|
|
|
|
|
|
|
reset();
|
|
|
|
setEnabled( true );
|
|
|
|
|
|
|
|
int x, y ;
|
|
|
|
aSMESHGUI->DefineDlgPosition( this, x, y );
|
|
|
|
this->move( x, y );
|
|
|
|
this->show();
|
|
|
|
|
|
|
|
// set selection mode
|
|
|
|
SMESH::SetPointRepresentation(true);
|
|
|
|
QAD_Application::getDesktop()->SetSelectionMode( NodeSelection, true );
|
|
|
|
onSelectionDone();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
//=======================================================================
|
|
|
|
// name : SMESHGUI_MoveNodesDlg::isValid
|
|
|
|
// Purpose : Verify validity of entry information
|
|
|
|
//=======================================================================
|
|
|
|
bool SMESHGUI_MoveNodesDlg::isValid( const bool theMess ) const
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-12-01 15:48:31 +05:00
|
|
|
if ( myId->text().isEmpty() )
|
|
|
|
{
|
|
|
|
if ( theMess )
|
|
|
|
QMessageBox::information( SMESHGUI::GetSMESHGUI()->GetDesktop(),
|
|
|
|
tr( "SMESH_WARNING" ), tr( "NODE_ID_IS_NOT_DEFINED" ), QMessageBox::Ok );
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
//=======================================================================
|
|
|
|
// name : SMESHGUI_MoveNodesDlg::reset
|
|
|
|
// Purpose : Reset the dialog state
|
|
|
|
//=======================================================================
|
|
|
|
void SMESHGUI_MoveNodesDlg::reset()
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-12-01 15:48:31 +05:00
|
|
|
myId->clear();
|
|
|
|
myX->SetValue( 0 );
|
|
|
|
myY->SetValue( 0 );
|
|
|
|
myZ->SetValue( 0 );
|
|
|
|
redisplayPreview();
|
|
|
|
updateButtons();
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
//=======================================================================
|
|
|
|
// name : SMESHGUI_MoveNodesDlg::nApply
|
|
|
|
// Purpose : SLOT called when "Apply" button pressed.
|
|
|
|
//=======================================================================
|
|
|
|
bool SMESHGUI_MoveNodesDlg::onApply()
|
|
|
|
{
|
|
|
|
if (SMESHGUI::GetSMESHGUI()->ActiveStudyLocked())
|
|
|
|
return false;
|
|
|
|
|
|
|
|
if ( !isValid( true ) )
|
|
|
|
return false;
|
|
|
|
|
|
|
|
SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO( myMeshActor->getIO() );
|
|
|
|
if(aMesh->_is_nil() )
|
|
|
|
{
|
|
|
|
QMessageBox::information( SMESHGUI::GetSMESHGUI()->GetDesktop(),
|
|
|
|
tr( "SMESH_ERROR" ), tr( "SMESHG_NO_MESH" ), QMessageBox::Ok );
|
|
|
|
return false;
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
SMESH::SMESH_MeshEditor_var aMeshEditor = aMesh->GetMeshEditor();
|
|
|
|
if ( aMeshEditor->_is_nil() )
|
|
|
|
return false;
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
int anId = myId->text().toInt();
|
|
|
|
bool aResult = false;
|
|
|
|
try
|
|
|
|
{
|
|
|
|
aResult = aMeshEditor->MoveNode( anId, myX->GetValue(), myY->GetValue(), myZ->GetValue() );
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
2004-12-01 15:48:31 +05:00
|
|
|
catch( ... )
|
|
|
|
{
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
if ( aResult )
|
|
|
|
{
|
|
|
|
Handle(SALOME_InteractiveObject) anIO = myMeshActor->getIO();
|
|
|
|
mySelection->ClearIObjects();
|
|
|
|
SMESH::UpdateView();
|
|
|
|
mySelection->AddIObject( anIO, false );
|
|
|
|
reset();
|
|
|
|
}
|
|
|
|
|
|
|
|
return aResult;
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
//=======================================================================
|
|
|
|
// name : SMESHGUI_MoveNodesDlg::onOk
|
|
|
|
// Purpose : SLOT called when "Ok" button pressed.
|
|
|
|
//=======================================================================
|
|
|
|
void SMESHGUI_MoveNodesDlg::onOk()
|
|
|
|
{
|
|
|
|
if ( onApply() )
|
|
|
|
onClose();
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
//=======================================================================
|
|
|
|
// name : SMESHGUI_MoveNodesDlg::onClose
|
|
|
|
// Purpose : SLOT called when "Close" button pressed. Close dialog
|
|
|
|
//=======================================================================
|
|
|
|
void SMESHGUI_MoveNodesDlg::onClose()
|
|
|
|
{
|
|
|
|
mySelection->ClearIObjects();
|
|
|
|
SMESH::SetPointRepresentation(false);
|
|
|
|
QAD_Application::getDesktop()->SetSelectionMode( ActorSelection );
|
|
|
|
disconnect( mySelection, 0, this, 0 );
|
|
|
|
disconnect( SMESHGUI::GetSMESHGUI(), 0, this, 0 );
|
|
|
|
SMESHGUI::GetSMESHGUI()->ResetState();
|
|
|
|
reject();
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
|
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
//=======================================================================
|
|
|
|
//function : onTextChange
|
|
|
|
//purpose :
|
|
|
|
//=======================================================================
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
void SMESHGUI_MoveNodesDlg::onTextChange(const QString& theNewText)
|
|
|
|
{
|
|
|
|
if ( myBusy ) return;
|
|
|
|
|
|
|
|
myOkBtn->setEnabled( false );
|
|
|
|
myApplyBtn->setEnabled( false );
|
|
|
|
erasePreview();
|
|
|
|
|
|
|
|
// select entered node
|
|
|
|
SMDS_Mesh* aMesh = 0;
|
|
|
|
if ( myMeshActor )
|
|
|
|
aMesh = myMeshActor->GetObject()->GetMesh();
|
|
|
|
if ( aMesh ) {
|
|
|
|
|
|
|
|
myBusy = true;
|
|
|
|
mySelection->ClearIObjects();
|
|
|
|
mySelection->AddIObject( myMeshActor->getIO() );
|
|
|
|
myBusy = false;
|
|
|
|
|
|
|
|
const SMDS_MeshElement * e = aMesh->FindElement( theNewText.toInt() );
|
|
|
|
if ( e )
|
|
|
|
mySelection->AddOrRemoveIndex (myMeshActor->getIO(), e->GetID(), true);
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
//=======================================================================
|
|
|
|
// name : SMESHGUI_MoveNodesDlg::onSelectionDone
|
|
|
|
// Purpose : SLOT called when selection changed
|
|
|
|
//=======================================================================
|
|
|
|
void SMESHGUI_MoveNodesDlg::onSelectionDone()
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-12-01 15:48:31 +05:00
|
|
|
if ( myBusy ) return;
|
|
|
|
myMeshActor = 0;
|
|
|
|
|
|
|
|
if ( mySelection->IObjectCount() == 1 ) {
|
|
|
|
myMeshActor = SMESH::FindActorByEntry(mySelection->firstIObject()->getEntry());
|
|
|
|
if ( myMeshActor )
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-12-01 15:48:31 +05:00
|
|
|
QString aText;
|
|
|
|
if ( SMESH::GetNameOfSelectedNodes( mySelection, aText ) == 1 ) {
|
|
|
|
if(SMDS_Mesh* aMesh = myMeshActor->GetObject()->GetMesh()) {
|
|
|
|
if(const SMDS_MeshNode* aNode = aMesh->FindNode(aText.toInt())) {
|
|
|
|
myBusy = true;
|
|
|
|
myId->setText( aText );
|
|
|
|
myX->SetValue( aNode->X() );
|
|
|
|
myY->SetValue( aNode->Y() );
|
|
|
|
myZ->SetValue( aNode->Z() );
|
|
|
|
myBusy = false;
|
|
|
|
erasePreview(); // avoid overlapping of a selection and a preview
|
|
|
|
updateButtons();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
}
|
2004-12-01 15:48:31 +05:00
|
|
|
}
|
|
|
|
|
|
|
|
reset();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
|
|
|
|
//=======================================================================
|
|
|
|
// name : SMESHGUI_MoveNodesDlg::onDeactivate
|
|
|
|
// Purpose : SLOT called when dialog must be deativated
|
|
|
|
//=======================================================================
|
|
|
|
void SMESHGUI_MoveNodesDlg::onDeactivate()
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-12-01 15:48:31 +05:00
|
|
|
setEnabled( false );
|
|
|
|
erasePreview();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
//=======================================================================
|
|
|
|
// name : SMESHGUI_MoveNodesDlg::enterEvent
|
|
|
|
// Purpose : Event filter
|
|
|
|
//=======================================================================
|
|
|
|
void SMESHGUI_MoveNodesDlg::enterEvent( QEvent* )
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-12-01 15:48:31 +05:00
|
|
|
if ( !isEnabled() )
|
|
|
|
{
|
|
|
|
SMESHGUI::GetSMESHGUI()->EmitSignalDeactivateDialog();
|
|
|
|
|
|
|
|
// set selection mode
|
|
|
|
SMESH::SetPointRepresentation(true);
|
|
|
|
QAD_Application::getDesktop()->SetSelectionMode( NodeSelection, true );
|
|
|
|
|
|
|
|
redisplayPreview();
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
setEnabled( true );
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//=================================================================================
|
2004-12-01 15:48:31 +05:00
|
|
|
// function : closeEvent()
|
2003-05-19 20:07:00 +06:00
|
|
|
// purpose :
|
|
|
|
//=================================================================================
|
2004-12-01 15:48:31 +05:00
|
|
|
void SMESHGUI_MoveNodesDlg::closeEvent( QCloseEvent* e )
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-12-01 15:48:31 +05:00
|
|
|
onClose() ;
|
|
|
|
SMESH::GetCurrentVtkView()->Repaint();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
//=======================================================================
|
|
|
|
//function : hideEvent
|
|
|
|
//purpose : may be caused by ESC key
|
|
|
|
//=======================================================================
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
void SMESHGUI_MoveNodesDlg::hideEvent ( QHideEvent * e )
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-12-01 15:48:31 +05:00
|
|
|
if ( !isMinimized() )
|
|
|
|
onClose();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
//=======================================================================
|
|
|
|
// name : SMESHGUI_MoveNodesDlg::updateButtons
|
|
|
|
// Purpose : Update buttons state
|
|
|
|
//=======================================================================
|
|
|
|
void SMESHGUI_MoveNodesDlg::updateButtons()
|
|
|
|
{
|
|
|
|
bool isEnabled = isValid( false );
|
|
|
|
myOkBtn->setEnabled( isEnabled );
|
|
|
|
myApplyBtn->setEnabled( isEnabled );
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
//=======================================================================
|
|
|
|
// name : SMESHGUI_MoveNodesDlg::erasePreview
|
|
|
|
// Purpose : Erase preview
|
|
|
|
//=======================================================================
|
|
|
|
void SMESHGUI_MoveNodesDlg::erasePreview()
|
|
|
|
{
|
|
|
|
if ( myPreviewActor == 0 )
|
|
|
|
return;
|
|
|
|
|
|
|
|
if ( VTKViewer_ViewFrame* vf = SMESH::GetCurrentVtkView() )
|
|
|
|
vf->RemoveActor(myPreviewActor);
|
|
|
|
myPreviewActor->Delete();
|
|
|
|
myPreviewActor = 0;
|
|
|
|
SMESH::GetCurrentVtkView()->Repaint();
|
|
|
|
}
|
|
|
|
|
|
|
|
//=======================================================================
|
|
|
|
// name : SMESHGUI_MoveNodesDlg::redisplayPreview
|
|
|
|
// Purpose : Redisplay preview
|
|
|
|
//=======================================================================
|
|
|
|
void SMESHGUI_MoveNodesDlg::redisplayPreview()
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-12-01 15:48:31 +05:00
|
|
|
if ( myBusy )
|
|
|
|
return;
|
|
|
|
|
|
|
|
if ( myPreviewActor != 0 )
|
|
|
|
erasePreview();
|
|
|
|
|
|
|
|
if ( !isValid( false ) )
|
|
|
|
return;
|
|
|
|
|
|
|
|
vtkUnstructuredGrid* aGrid = vtkUnstructuredGrid::New();
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
vtkPoints* aPoints = vtkPoints::New();
|
|
|
|
aPoints->SetNumberOfPoints( 1 );
|
|
|
|
aPoints->SetPoint( 0, myX->GetValue(), myY->GetValue(), myZ->GetValue() );
|
|
|
|
|
|
|
|
// 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 );
|
|
|
|
|
|
|
|
vtkIntArray* aCellLocationsArray = vtkIntArray::New();
|
|
|
|
aCellLocationsArray->SetNumberOfComponents( 1 );
|
|
|
|
aCellLocationsArray->SetNumberOfTuples( 1 );
|
|
|
|
|
|
|
|
aCells->InitTraversal();
|
|
|
|
vtkIdType npts;
|
|
|
|
aCellLocationsArray->SetValue( 0, aCells->GetTraversalLocation( npts ) );
|
|
|
|
|
|
|
|
aGrid->SetCells( aCellTypesArray, aCellLocationsArray, aCells );
|
|
|
|
|
|
|
|
aGrid->SetPoints( aPoints );
|
|
|
|
aGrid->SetCells( aCellTypesArray, aCellLocationsArray,aCells );
|
|
|
|
|
|
|
|
// Create and display actor
|
|
|
|
vtkDataSetMapper* aMapper = vtkDataSetMapper::New();
|
|
|
|
aMapper->SetInput( aGrid );
|
|
|
|
|
|
|
|
myPreviewActor = SALOME_Actor::New();
|
|
|
|
myPreviewActor->PickableOff();
|
|
|
|
myPreviewActor->SetMapper( aMapper );
|
|
|
|
|
|
|
|
vtkProperty* aProp = vtkProperty::New();
|
|
|
|
aProp->SetRepresentationToWireframe();
|
|
|
|
aProp->SetColor( 250, 0, 250 );
|
|
|
|
aProp->SetPointSize( 5 );
|
|
|
|
myPreviewActor->SetProperty( aProp );
|
|
|
|
|
|
|
|
SMESH::GetCurrentVtkView()->AddActor( myPreviewActor );
|
|
|
|
SMESH::GetCurrentVtkView()->Repaint();
|
|
|
|
|
|
|
|
aProp->Delete();
|
|
|
|
aCellLocationsArray->Delete();
|
|
|
|
aCellTypesArray->Delete();
|
|
|
|
aCells->Delete();
|
|
|
|
anIdList->Delete();
|
|
|
|
aPoints->Delete();
|
|
|
|
aGrid->Delete();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
2004-12-01 15:48:31 +05:00
|
|
|
|