X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_MoveNodesDlg.cxx;fp=src%2FSMESHGUI%2FSMESHGUI_MoveNodesDlg.cxx;h=3b36976fcbeabef71e4003c65d81272c792fab3c;hb=ba1cb5f70279795b66d7c2cc34248c3d5498da2c;hp=f249535c87a3e4a6521ab88218941b9aa069233b;hpb=2439f9a459c92ba5adbb7ff64f0ad8f04771c4d6;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI_MoveNodesDlg.cxx b/src/SMESHGUI/SMESHGUI_MoveNodesDlg.cxx index f249535c8..3b36976fc 100644 --- a/src/SMESHGUI/SMESHGUI_MoveNodesDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_MoveNodesDlg.cxx @@ -27,148 +27,46 @@ // $Header$ #include "SMESHGUI_MoveNodesDlg.h" +#include -#include "SMESHGUI.h" -#include "SMESHGUI_SpinBox.h" -#include "SMESHGUI_IdValidator.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_VTKUtils.h" -#include "SMESHGUI_MeshUtils.h" +#include -#include "SMESH_Actor.h" -#include "SMDS_Mesh.hxx" -#include "SMDS_MeshNode.hxx" +#include -#include "SalomeApp_SelectionMgr.h" -#include "SUIT_ResourceMgr.h" -#include "SUIT_Desktop.h" - -#include "SVTK_Selector.h" -#include "SVTK_ViewModel.h" -#include "SVTK_ViewWindow.h" -#include "SALOME_ListIO.hxx" - -#include "SVTK_ViewWindow.h" - -#include "utilities.h" - -// OCCT includes -#include - -// VTK includes -#include -#include -#include -#include -#include -#include -#include - -// QT includes -#include -#include -#include -#include -#include #include -#include -#include #include - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -#define MARGIN 10 -#define SPACING 5 - +#include +#include //================================================================================= // name : SMESHGUI_MoveNodesDlg::SMESHGUI_MoveNodesDlg // Purpose : //================================================================================= -SMESHGUI_MoveNodesDlg::SMESHGUI_MoveNodesDlg (SMESHGUI* theModule, - const char* theName): - QDialog(SMESH::GetDesktop(theModule), - theName, - false, - WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu), - mySelector(SMESH::GetViewWindow(theModule)->GetSelector()), - mySelectionMgr(SMESH::GetSelectionMgr(theModule)), - myViewWindow(SMESH::GetViewWindow(theModule)), - mySMESHGUI(theModule) -{ - myPreviewActor = 0; - myBusy = false; - - setCaption(tr("CAPTION")); - - QVBoxLayout* aDlgLay = new QVBoxLayout (this, MARGIN, SPACING); - - QFrame* aMainFrame = createMainFrame (this); - QFrame* aBtnFrame = createButtonFrame(this); - - aDlgLay->addWidget(aMainFrame); - aDlgLay->addWidget(aBtnFrame); - - aDlgLay->setStretchFactor(aMainFrame, 1); - - Init(); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::createButtonFrame -// Purpose : Create frame containing buttons -//======================================================================= -QFrame* SMESHGUI_MoveNodesDlg::createButtonFrame (QWidget* theParent) -{ - QFrame* aFrame = new QFrame(theParent); - aFrame->setFrameStyle(QFrame::Box | QFrame::Sunken); - - myOkBtn = new QPushButton(tr("SMESH_BUT_OK" ), aFrame); - myApplyBtn = new QPushButton(tr("SMESH_BUT_APPLY"), aFrame); - myCloseBtn = new QPushButton(tr("SMESH_BUT_CLOSE"), aFrame); - - QSpacerItem* aSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); - - QHBoxLayout* aLay = new QHBoxLayout(aFrame, MARGIN, SPACING); - - aLay->addWidget(myOkBtn); - aLay->addWidget(myApplyBtn); - aLay->addItem(aSpacer); - aLay->addWidget(myCloseBtn); - - connect(myOkBtn, SIGNAL(clicked()), SLOT(onOk())); - connect(myCloseBtn, SIGNAL(clicked()), SLOT(onClose())); - connect(myApplyBtn, SIGNAL(clicked()), SLOT(onApply())); - - return aFrame; -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::createMainFrame -// Purpose : Create frame containing dialog's input fields -//======================================================================= -QFrame* SMESHGUI_MoveNodesDlg::createMainFrame (QWidget* theParent) +SMESHGUI_MoveNodesDlg::SMESHGUI_MoveNodesDlg() +: SMESHGUI_Dialog() { - QFrame* aFrame = new QFrame(theParent); + setCaption( tr( "CAPTION" ) ); - QPixmap iconMoveNode (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_DLG_MOVE_NODE"))); - QPixmap iconSelect (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT"))); + QVBoxLayout* main = new QVBoxLayout( mainFrame() ); - QButtonGroup* aPixGrp = new QButtonGroup(1, Qt::Vertical, tr("MESH_NODE"), aFrame); + QPixmap iconMoveNode( resMgr()->loadPixmap( "SMESH", tr( "ICON_DLG_MOVE_NODE" ) ) ); + + QButtonGroup* aPixGrp = new QButtonGroup(1, Qt::Vertical, tr("MESH_NODE"), mainFrame() ); 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)); + main->addWidget( aPixGrp ); + + QGroupBox* anIdGrp = new QGroupBox( 3, Qt::Horizontal, tr( "SMESH_MOVE" ), mainFrame() ); + createObject( tr( "NODE_ID" ), anIdGrp, 0 ); + setNameIndication( 0, OneName ); + setObjectType( 0, prefix( "SMESH element" ) + SMDSAbs_Node, -1 ); - QGroupBox* aCoordGrp = new QGroupBox(1, Qt::Vertical, tr("SMESH_COORDINATES"), aFrame); + main->addWidget( anIdGrp ); + + QGroupBox* aCoordGrp = new QGroupBox(1, Qt::Vertical, tr("SMESH_COORDINATES"), mainFrame() ); new QLabel(tr("SMESH_X"), aCoordGrp); myX = new SMESHGUI_SpinBox(aCoordGrp); new QLabel(tr("SMESH_Y"), aCoordGrp); @@ -176,378 +74,43 @@ QFrame* SMESHGUI_MoveNodesDlg::createMainFrame (QWidget* theParent) new QLabel(tr("SMESH_Z"), aCoordGrp); myZ = new SMESHGUI_SpinBox(aCoordGrp); + main->addWidget( 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); + 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; + connect( myX, SIGNAL( valueChanged( double ) ), this, SIGNAL( valueChanged() ) ); + connect( myY, SIGNAL( valueChanged( double ) ), this, SIGNAL( valueChanged() ) ); + connect( myZ, SIGNAL( valueChanged( double ) ), this, SIGNAL( valueChanged() ) ); } -//======================================================================= +//================================================================================= // name : SMESHGUI_MoveNodesDlg::~SMESHGUI_MoveNodesDlg // Purpose : -//======================================================================= +//================================================================================= SMESHGUI_MoveNodesDlg::~SMESHGUI_MoveNodesDlg() { - erasePreview(); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::Init -// Purpose : Init dialog fields -//======================================================================= -void SMESHGUI_MoveNodesDlg::Init() -{ - myPreviewActor = 0; - myMeshActor = 0; - myBusy = false; - - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - // selection and SMESHGUI - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(onSelectionDone())); - connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), SLOT(onDeactivate())); - connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), SLOT(onClose())); - - reset(); - setEnabled(true); - - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); - - // set selection mode - SMESH::SetPointRepresentation(true); - myViewWindow->SetSelectionMode(NodeSelection); - - onSelectionDone(); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::isValid -// Purpose : Verify validity of entry information -//======================================================================= -bool SMESHGUI_MoveNodesDlg::isValid (const bool theMess) const -{ - if (myId->text().isEmpty()) { - if (theMess) - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_WARNING"), - tr("NODE_ID_IS_NOT_DEFINED"), QMessageBox::Ok); - return false; - } - return true; -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::reset -// Purpose : Reset the dialog state -//======================================================================= -void SMESHGUI_MoveNodesDlg::reset() -{ - myId->clear(); - myX->SetValue(0); - myY->SetValue(0); - myZ->SetValue(0); - redisplayPreview(); - updateButtons(); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::onApply -// Purpose : SLOT called when "Apply" button pressed. -//======================================================================= -bool SMESHGUI_MoveNodesDlg::onApply() -{ - if (mySMESHGUI->isActiveStudyLocked()) - return false; - - if (!isValid(true)) - return false; - - SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO(myMeshActor->getIO()); - if (aMesh->_is_nil()) { - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_ERROR"), - tr("SMESHG_NO_MESH"), QMessageBox::Ok); - return false; - } - - SMESH::SMESH_MeshEditor_var aMeshEditor = aMesh->GetMeshEditor(); - if (aMeshEditor->_is_nil()) - return false; - - int anId = myId->text().toInt(); - bool aResult = false; - try { - aResult = aMeshEditor->MoveNode(anId, myX->GetValue(), myY->GetValue(), myZ->GetValue()); - } catch (...) { - } - - if (aResult) { - SALOME_ListIO aList; - aList.Append(myMeshActor->getIO()); - mySelectionMgr->setSelectedObjects(aList,false); - SMESH::UpdateView(); - reset(); - } - - return aResult; -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::onOk -// Purpose : SLOT called when "Ok" button pressed. -//======================================================================= -void SMESHGUI_MoveNodesDlg::onOk() -{ - if (onApply()) - onClose(); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::onClose -// Purpose : SLOT called when "Close" button pressed. Close dialog -//======================================================================= -void SMESHGUI_MoveNodesDlg::onClose() -{ - mySelectionMgr->clearSelected(); - SMESH::SetPointRepresentation(false); - myViewWindow->SetSelectionMode(ActorSelection); - disconnect(mySelectionMgr, 0, this, 0); - disconnect(mySMESHGUI, 0, this, 0); - mySMESHGUI->ResetState(); - reject(); } -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::onTextChange +//================================================================================= +// name : SMESHGUI_MoveNodesDlg::setCoords // Purpose : -//======================================================================= -void SMESHGUI_MoveNodesDlg::onTextChange (const QString& theNewText) -{ - if (myBusy) return; - - myOkBtn->setEnabled(false); - myApplyBtn->setEnabled(false); - erasePreview(); - - // select entered node - if(myMeshActor){ - if(SMDS_Mesh* aMesh = myMeshActor->GetObject()->GetMesh()){ - myBusy = true; - Handle(SALOME_InteractiveObject) anIO = myMeshActor->getIO(); - SALOME_ListIO aList; - aList.Append(anIO); - mySelectionMgr->setSelectedObjects(aList,false); - myBusy = false; - - if(const SMDS_MeshElement *anElem = aMesh->FindElement(theNewText.toInt())) { - TColStd_MapOfInteger aListInd; - aListInd.Add(anElem->GetID()); - mySelector->AddOrRemoveIndex(anIO,aListInd, false); - myViewWindow->highlight(anIO,true,true); - - onSelectionDone(); - } - } - } -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::onSelectionDone -// Purpose : SLOT called when selection changed -//======================================================================= -void SMESHGUI_MoveNodesDlg::onSelectionDone() -{ - if (myBusy) return; - myMeshActor = 0; - - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type()); - - if (aList.Extent() == 1) { - Handle(SALOME_InteractiveObject) anIO = aList.First(); - myMeshActor = SMESH::FindActorByEntry(anIO->getEntry()); - if(myMeshActor){ - QString aText; - if (SMESH::GetNameOfSelectedNodes(mySelector,anIO,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; - } - } - } - } - } - - reset(); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::onDeactivate -// Purpose : SLOT called when dialog must be deativated -//======================================================================= -void SMESHGUI_MoveNodesDlg::onDeactivate() -{ - setEnabled(false); - erasePreview(); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::enterEvent -// Purpose : Event filter -//======================================================================= -void SMESHGUI_MoveNodesDlg::enterEvent (QEvent*) +//================================================================================= +void SMESHGUI_MoveNodesDlg::setCoords( const double x, const double y, const double z ) { - if (!isEnabled()) { - mySMESHGUI->EmitSignalDeactivateDialog(); - - // set selection mode - SMESH::SetPointRepresentation(true); - myViewWindow->SetSelectionMode(NodeSelection); - - redisplayPreview(); - - setEnabled(true); - } + myX->setValue( x ); + myY->setValue( y ); + myZ->setValue( z ); } -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::closeEvent +//================================================================================= +// name : SMESHGUI_MoveNodesDlg::coords // Purpose : -//======================================================================= -void SMESHGUI_MoveNodesDlg::closeEvent (QCloseEvent*) -{ - onClose(); - myViewWindow->Repaint(); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::hideEvent -// Purpose : may be caused by ESC key -//======================================================================= -void SMESHGUI_MoveNodesDlg::hideEvent (QHideEvent*) -{ - if (!isMinimized()) - onClose(); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::updateButtons -// Purpose : Update buttons state -//======================================================================= -void SMESHGUI_MoveNodesDlg::updateButtons() -{ - bool isEnabled = isValid(false); - myOkBtn->setEnabled(isEnabled); - myApplyBtn->setEnabled(isEnabled); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::erasePreview -// Purpose : Erase preview -//======================================================================= -void SMESHGUI_MoveNodesDlg::erasePreview() -{ - if (myPreviewActor == 0) - return; - - myViewWindow->RemoveActor(myPreviewActor); - myPreviewActor->Delete(); - myPreviewActor = 0; - myViewWindow->Repaint(); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::redisplayPreview -// Purpose : Redisplay preview -//======================================================================= -void SMESHGUI_MoveNodesDlg::redisplayPreview() +//================================================================================= +void SMESHGUI_MoveNodesDlg::coords( double& x, double& y, double& z ) const { - if (myBusy) - return; - - if (myPreviewActor != 0) - erasePreview(); - - if (!isValid(false)) - return; - - vtkUnstructuredGrid* aGrid = vtkUnstructuredGrid::New(); - - 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); - anIdList->Delete(); - - vtkIntArray* aCellLocationsArray = vtkIntArray::New(); - aCellLocationsArray->SetNumberOfComponents(1); - aCellLocationsArray->SetNumberOfTuples(1); - - aCells->InitTraversal(); - vtkIdType npts; - aCellLocationsArray->SetValue(0, aCells->GetTraversalLocation(npts)); - - aGrid->SetPoints(aPoints); - aPoints->Delete(); - - aGrid->SetCells(aCellTypesArray,aCellLocationsArray,aCells); - aCellLocationsArray->Delete(); - aCellTypesArray->Delete(); - aCells->Delete(); - - // Create and display actor - vtkDataSetMapper* aMapper = vtkDataSetMapper::New(); - aMapper->SetInput(aGrid); - aGrid->Delete(); - - myPreviewActor = SALOME_Actor::New(); - myPreviewActor->PickableOff(); - myPreviewActor->SetMapper(aMapper); - aMapper->Delete(); - - vtkProperty* aProp = vtkProperty::New(); - aProp->SetRepresentationToWireframe(); - aProp->SetColor(250, 0, 250); - aProp->SetPointSize(5); - myPreviewActor->SetProperty(aProp); - aProp->Delete(); - - myViewWindow->AddActor(myPreviewActor); - myViewWindow->Repaint(); + x = myX->value(); + y = myY->value(); + z = myZ->value(); }