From e533bcb1d7b568a1e63e952a9a3c7ecf9e11bcb1 Mon Sep 17 00:00:00 2001 From: ouv Date: Mon, 21 Jun 2010 10:30:03 +0000 Subject: [PATCH] Issue 0020755: EDF 1279 MESH : 'Mesh to Pass Through a Point' enhancement --- doc/salome/gui/SMESH/images/meshtopass.png | Bin 19997 -> 17937 bytes .../gui/SMESH/input/mesh_through_point.doc | 29 ++- .../gui/SMESH/input/modifying_meshes.doc | 4 +- doc/salome/gui/SMESH/input/moving_nodes.doc | 36 ---- .../gui/SMESH/input/tui_modifying_meshes.doc | 24 +-- src/SMESHGUI/Makefile.am | 3 - src/SMESHGUI/SMESHGUI.cxx | 20 +- src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx | 203 +++++++++++++----- src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.h | 9 +- src/SMESHGUI/SMESH_msg_en.ts | 33 +-- src/SMESH_I/SMESH_MeshEditor_i.cxx | 33 ++- 11 files changed, 209 insertions(+), 185 deletions(-) delete mode 100644 doc/salome/gui/SMESH/input/moving_nodes.doc diff --git a/doc/salome/gui/SMESH/images/meshtopass.png b/doc/salome/gui/SMESH/images/meshtopass.png index 9a5c62e245c15881a3195183d3c967a2fc143714..1c426783e94d591b1e8a11f91afa51d28bf623fc 100755 GIT binary patch literal 17937 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 literal 19997 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 iNt|Kvsc`;(#To create a mesh passing through a point: +To displace a node:
    -
  1. From the \b Modification menu choose the Mesh through point item or -click "Mesh to pass through a point" button in the toolbar. +
  2. From the \b Modification menu choose the Move node item or +click "Move Node" button in the toolbar. -\image html mesh_node_to_point.png -
    "Mesh to pass through a point" button
    +\image html image67.png +
    "Move Node" button
    The following dialog box shall appear: \image html meshtopass.png
  3. -
  4. Enter the coordinates of the point.
  5. -
  6. Choose one of several methods: you can either \b Create a new node at -the indicated point or Move the existing node to the point. In the -latter case you can check in Automatic search of the closest node or -select the necessary node manually. \b Preview check-box allows to see -the results of the operation.
  7. +
  8. Enter the coordinates of the destination point.
  9. +
  10. Check in Find closest to destination option or +select the necessary node manually (X, Y, Z, dX, dY, dZ fields allow +to see original coordinates and displacement of the node to move). +\b Preview check-box allows to see the results of the operation.
  11. Click the \b Apply or \b OK button.

See Also a sample TUI Script of a -\ref tui_mesh_through_point "Mesh through point" operation. +\ref tui_moving_nodes "Moving Nodes" operation. */ \ No newline at end of file diff --git a/doc/salome/gui/SMESH/input/modifying_meshes.doc b/doc/salome/gui/SMESH/input/modifying_meshes.doc index 05180eb4b..b086cf915 100644 --- a/doc/salome/gui/SMESH/input/modifying_meshes.doc +++ b/doc/salome/gui/SMESH/input/modifying_meshes.doc @@ -27,10 +27,8 @@ conform free borders, border to side or side elements. within the indicated tolerance.
  • \subpage merging_elements_page "Merge Elements", considered coincident within the indicated tolerance.
  • -
  • \subpage moving_nodes_page "Move Nodes" to an arbitrary location +
  • \subpage mesh_through_point_page "Move Nodes" to an arbitrary location with consequent transformation of all adjacent elements and edges.
  • -
  • \subpage mesh_through_point_page "Make node at a point", existing -or created anew.
  • \subpage diagonal_inversion_of_elements_page "Invert an edge" between neighboring triangles.
  • \subpage uniting_two_triangles_page "Unite two triangles".
  • \subpage uniting_set_of_triangles_page "Unite several adjacent triangles".
  • diff --git a/doc/salome/gui/SMESH/input/moving_nodes.doc b/doc/salome/gui/SMESH/input/moving_nodes.doc deleted file mode 100644 index d44ddc249..000000000 --- a/doc/salome/gui/SMESH/input/moving_nodes.doc +++ /dev/null @@ -1,36 +0,0 @@ -/*! - -\page moving_nodes_page Moving nodes - -\n In MESH you can change the location of any node of your mesh. In -this case all adjacent elements (edges) will be also transformed right -after the displaced node. - -To displace a node: -
      -
    1. From the \b Modification menu choose the Move node item or -click "Move Node" button in the toolbar. - -\image html image67.png -
      "Move Node" button
      - -The following dialog box shall appear: - -\image html movenodes.png - -
    2. -
    3. Enter the ID of the required node in the Node ID field or -select this node in the 3D viewer. The coordinates of your node will -be automatically displayed in the \b Coordinates set of fields.
    4. -
    5. Set new coordinates for your node in the \b Coordinates set of fields.
    6. -
    7. Click the \b Apply or Apply and Close button.
    8. -
    - -\image html moving_nodes1.png "The initial mesh" - -\image html moving_nodes2.png "The node has been moved, transforming all adjacent edges" - -
    See Also a sample TUI Script of a -\ref tui_moving_nodes "Moving Nodes" operation. - -*/ \ No newline at end of file diff --git a/doc/salome/gui/SMESH/input/tui_modifying_meshes.doc b/doc/salome/gui/SMESH/input/tui_modifying_meshes.doc index 2e8f75291..8eee4e048 100644 --- a/doc/salome/gui/SMESH/input/tui_modifying_meshes.doc +++ b/doc/salome/gui/SMESH/input/tui_modifying_meshes.doc @@ -299,19 +299,6 @@ mesh.RenumberElements() \anchor tui_moving_nodes

    Moving Nodes

    -\code -import SMESH_mechanic - -mesh = SMESH_mechanic.mesh - -# move node #38 -mesh.MoveNode(38, 20., 10., 0.) -\endcode - -
    -\anchor tui_mesh_through_point -

    Mesh through point

    - \code from geompy import * from smesh import * @@ -344,16 +331,11 @@ n = mesh.FindNodeClosestTo( -1,-1,-1 ) if not n == node000: raise "FindNodeClosestTo() returns " + str( n ) + " != " + str( node000 ) -# check if any node will be found for a point inside a box -n = mesh.FindNodeClosestTo( 100, 100, 100 ) -if not n > 0: - raise "FindNodeClosestTo( 100, 100, 100 ) fails" - # move node000 to a new location x,y,z = -10, -10, -10 -n = mesh.MeshToPassThroughAPoint( x,y,z ) -if not n == node000: - raise "FindNodeClosestTo() returns " + str( n ) + " != " + str( node000 ) +n = mesh.MoveNode( n,x,y,z ) +if not n: + raise "MoveNode() returns " + n # check the coordinates of the node000 xyz = mesh.GetNodeXYZ( node000 ) diff --git a/src/SMESHGUI/Makefile.am b/src/SMESHGUI/Makefile.am index 1030ffd65..c96383c3e 100644 --- a/src/SMESHGUI/Makefile.am +++ b/src/SMESHGUI/Makefile.am @@ -52,7 +52,6 @@ salomeinclude_HEADERS = \ SMESHGUI_WhatIsDlg.h \ SMESHGUI_Preferences_ColorDlg.h \ SMESHGUI_Preferences_ScalarBarDlg.h \ - SMESHGUI_MoveNodesDlg.h \ SMESHGUI_AddMeshElementDlg.h \ SMESHGUI_XmlHandler.h \ SMESHGUI_Filter.h \ @@ -116,7 +115,6 @@ dist_libSMESH_la_SOURCES = \ SMESHGUI_WhatIsDlg.cxx \ SMESHGUI_Preferences_ColorDlg.cxx \ SMESHGUI_Preferences_ScalarBarDlg.cxx \ - SMESHGUI_MoveNodesDlg.cxx \ SMESHGUI_AddMeshElementDlg.cxx \ SMESHGUI_XmlHandler.cxx \ SMESHGUI_Filter.cxx \ @@ -188,7 +186,6 @@ MOC_FILES = \ SMESHGUI_WhatIsDlg_moc.cxx \ SMESHGUI_Preferences_ColorDlg_moc.cxx \ SMESHGUI_Preferences_ScalarBarDlg_moc.cxx \ - SMESHGUI_MoveNodesDlg_moc.cxx \ SMESHGUI_AddMeshElementDlg_moc.cxx \ SMESHGUI_FilterDlg_moc.cxx \ SMESHGUI_FilterLibraryDlg_moc.cxx \ diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index f777acbc4..f83165f5f 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -53,7 +53,6 @@ #include "SMESHGUI_MeshOp.h" #include "SMESHGUI_MeshOrderOp.h" #include "SMESHGUI_MeshPatternDlg.h" -#include "SMESHGUI_MoveNodesDlg.h" #include "SMESHGUI_MultiEditDlg.h" #include "SMESHGUI_NodesDlg.h" #include "SMESHGUI_Preferences_ColorDlg.h" @@ -1804,20 +1803,6 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - case 406: // MOVE NODE - { - if ( !vtkwnd ) - { - SUIT_MessageBox::warning( desktop(), tr( "SMESH_WRN_WARNING" ), - tr( "NOT_A_VTK_VIEWER" ) ); - break; - } - - if(checkLock(aStudy)) break; - ( new SMESHGUI_MoveNodesDlg( this ) )->show(); - break; - } - case 701: // COMPUTE MESH case 711: // PRECOMPUTE MESH case 712: // EVALUATE MESH @@ -2986,9 +2971,8 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( 4064, "SEW", "ICON_SMESH_SEWING_FREEBORDERS" ); createSMESHAction( 4065, "MERGE", "ICON_SMESH_MERGE_NODES" ); createSMESHAction( 4066, "MERGE_ELEMENTS", "ICON_DLG_MERGE_ELEMENTS" ); - createSMESHAction( 4067, "MESH_THROU_POINT","ICON_DLG_MESH_THROU_POINT" ); + createSMESHAction( 4067, "MESH_THROU_POINT","ICON_DLG_MOVE_NODE" ); createSMESHAction( 4068, "SCALE", "ICON_DLG_MESH_SCALE" ); - createSMESHAction( 406, "MOVE", "ICON_DLG_MOVE_NODE" ); createSMESHAction( 407, "INV", "ICON_DLG_MESH_DIAGONAL" ); createSMESHAction( 408, "UNION2", "ICON_UNION2TRI" ); createSMESHAction( 409, "ORIENT", "ICON_DLG_MESH_ORIENTATION" ); @@ -3161,7 +3145,6 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( 4066, transfId, -1 ); createMenu( 4068, transfId, -1 ); - createMenu( 406, modifyId, -1 ); createMenu( 4067,modifyId, -1 ); createMenu( 407, modifyId, -1 ); createMenu( 408, modifyId, -1 ); @@ -3262,7 +3245,6 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( 4068, addRemTb ); createTool( separator(), addRemTb ); - createTool( 406, modifyTb ); createTool( 4067,modifyTb ); createTool( 407, modifyTb ); createTool( 408, modifyTb ); diff --git a/src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx b/src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx index ee35301f0..36aa22bb4 100644 --- a/src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx @@ -92,7 +92,7 @@ SMESHGUI_MakeNodeAtPointDlg::SMESHGUI_MakeNodeAtPointDlg() setWindowTitle(tr("CAPTION")); QVBoxLayout* aDlgLay = new QVBoxLayout (mainFrame()); - aDlgLay->setMargin(MARGIN);; + aDlgLay->setMargin(0); aDlgLay->setSpacing(SPACING); QWidget* aMainFrame = createMainFrame (mainFrame()); @@ -116,7 +116,7 @@ QWidget* SMESHGUI_MakeNodeAtPointDlg::createMainFrame (QWidget* theParent) // constructor - QGroupBox* aPixGrp = new QGroupBox(tr("MESH_PASS_THROUGH_POINT"), aFrame); + QGroupBox* aPixGrp = new QGroupBox(tr("MOVE_NODE"), aFrame); QButtonGroup* aBtnGrp = new QButtonGroup(this); QHBoxLayout* aPixGrpLayout = new QHBoxLayout(aPixGrp); aPixGrpLayout->setMargin(MARGIN); @@ -130,7 +130,7 @@ QWidget* SMESHGUI_MakeNodeAtPointDlg::createMainFrame (QWidget* theParent) // coordinates - QGroupBox* aCoordGrp = new QGroupBox(tr("SMESH_COORDINATES"), aFrame); + QGroupBox* aCoordGrp = new QGroupBox(tr("DESTINATION"), aFrame); QHBoxLayout* aCoordGrpLayout = new QHBoxLayout(aCoordGrp); aCoordGrpLayout->setMargin(MARGIN); aCoordGrpLayout->setSpacing(SPACING); @@ -160,19 +160,6 @@ QWidget* SMESHGUI_MakeNodeAtPointDlg::createMainFrame (QWidget* theParent) aCoordGrpLayout->addWidget(aZLabel); aCoordGrpLayout->addWidget(myZ); - // Method selection - - QGroupBox* aMethodGrp = new QGroupBox(tr("METHOD"), aFrame); - QHBoxLayout* aMethodGrpLayout = new QHBoxLayout(aMethodGrp); - aMethodGrpLayout->setMargin(MARGIN); - aMethodGrpLayout->setSpacing(SPACING); - - myMoveRBtn = new QRadioButton(tr("MOVE_EXISTING_METHOD"), aMethodGrp); - myCreateRBtn = new QRadioButton(tr("CREATE_NEW_METHOD"), aMethodGrp); - - aMethodGrpLayout->addWidget(myMoveRBtn); - aMethodGrpLayout->addWidget(myCreateRBtn); - // node ID myNodeToMoveGrp = new QGroupBox(tr("NODE_2MOVE"), aFrame); @@ -183,6 +170,62 @@ QWidget* SMESHGUI_MakeNodeAtPointDlg::createMainFrame (QWidget* theParent) myIdBtn->setCheckable(true); myId = new QLineEdit(myNodeToMoveGrp); myId->setValidator(new SMESHGUI_IdValidator(this, 1)); + + QWidget* aCoordWidget = new QWidget(myNodeToMoveGrp); + + QLabel* aCurrentXLabel = new QLabel(tr("SMESH_X"), aCoordWidget); + myCurrentX = new SMESHGUI_SpinBox(aCoordWidget); + myCurrentX->setButtonSymbols(QAbstractSpinBox::NoButtons); + myCurrentX->setReadOnly(true); + + QLabel* aCurrentYLabel = new QLabel(tr("SMESH_Y"), aCoordWidget); + myCurrentY = new SMESHGUI_SpinBox(aCoordWidget); + myCurrentY->setButtonSymbols(QAbstractSpinBox::NoButtons); + myCurrentY->setReadOnly(true); + + QLabel* aCurrentZLabel = new QLabel(tr("SMESH_Z"), aCoordWidget); + myCurrentZ = new SMESHGUI_SpinBox(aCoordWidget); + myCurrentZ->setButtonSymbols(QAbstractSpinBox::NoButtons); + myCurrentZ->setReadOnly(true); + + QLabel* aDXLabel = new QLabel(tr("SMESH_DX"), aCoordWidget); + myDX = new SMESHGUI_SpinBox(aCoordWidget); + myDX->setButtonSymbols(QAbstractSpinBox::NoButtons); + myDX->setReadOnly(true); + + QLabel* aDYLabel = new QLabel(tr("SMESH_DY"), aCoordWidget); + myDY = new SMESHGUI_SpinBox(aCoordWidget); + myDY->setButtonSymbols(QAbstractSpinBox::NoButtons); + myDY->setReadOnly(true); + + QLabel* aDZLabel = new QLabel(tr("SMESH_DZ"), aCoordWidget); + myDZ = new SMESHGUI_SpinBox(aCoordWidget); + myDZ->setButtonSymbols(QAbstractSpinBox::NoButtons); + myDZ->setReadOnly(true); + + myCurrentX->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, "length_precision"); + myCurrentY->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, "length_precision"); + myCurrentZ->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, "length_precision"); + myDX->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, "length_precision"); + myDY->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, "length_precision"); + myDZ->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, "length_precision"); + + QGridLayout* aCoordLayout = new QGridLayout(aCoordWidget); + aCoordLayout->setMargin(0); + aCoordLayout->setSpacing(SPACING); + aCoordLayout->addWidget(aCurrentXLabel, 0, 0); + aCoordLayout->addWidget(myCurrentX, 0, 1); + aCoordLayout->addWidget(aCurrentYLabel, 0, 2); + aCoordLayout->addWidget(myCurrentY, 0, 3); + aCoordLayout->addWidget(aCurrentZLabel, 0, 4); + aCoordLayout->addWidget(myCurrentZ, 0, 5); + aCoordLayout->addWidget(aDXLabel, 1, 0); + aCoordLayout->addWidget(myDX, 1, 1); + aCoordLayout->addWidget(aDYLabel, 1, 2); + aCoordLayout->addWidget(myDY, 1, 3); + aCoordLayout->addWidget(aDZLabel, 1, 4); + aCoordLayout->addWidget(myDZ, 1, 5); + myAutoSearchChkBox = new QCheckBox( tr("AUTO_SEARCH"), myNodeToMoveGrp); myPreviewChkBox = new QCheckBox( tr("PREVIEW"), myNodeToMoveGrp); @@ -193,22 +236,19 @@ QWidget* SMESHGUI_MakeNodeAtPointDlg::createMainFrame (QWidget* theParent) myNodeToMoveGrpLayout->addWidget( idLabel, 0, 0 ); myNodeToMoveGrpLayout->addWidget( myIdBtn, 0, 1 ); myNodeToMoveGrpLayout->addWidget( myId, 0, 2 ); - myNodeToMoveGrpLayout->addWidget( myAutoSearchChkBox, 1, 0, 1, 3 ); - myNodeToMoveGrpLayout->addWidget( myPreviewChkBox, 2, 0, 1, 3 ); + myNodeToMoveGrpLayout->addWidget( aCoordWidget, 1, 0, 1, 3 ); + myNodeToMoveGrpLayout->addWidget( myAutoSearchChkBox, 2, 0, 1, 3 ); + myNodeToMoveGrpLayout->addWidget( myPreviewChkBox, 3, 0, 1, 3 ); QVBoxLayout* aLay = new QVBoxLayout(aFrame); aLay->addWidget(aPixGrp); aLay->addWidget(aCoordGrp); - aLay->addWidget(aMethodGrp); aLay->addWidget(myNodeToMoveGrp); connect(myCoordBtn, SIGNAL (toggled(bool)), this, SLOT(ButtonToggled(bool))); - connect(myMoveRBtn, SIGNAL (toggled(bool)), this, SLOT(ButtonToggled(bool))); - connect(myCreateRBtn, SIGNAL (toggled(bool)), this, SLOT(ButtonToggled(bool))); connect(myIdBtn, SIGNAL (toggled(bool)), this, SLOT(ButtonToggled(bool))); connect(myAutoSearchChkBox, SIGNAL (toggled(bool)), this, SLOT(ButtonToggled(bool))); - myMoveRBtn->setChecked(true); myIdBtn->setChecked(true); myAutoSearchChkBox->setChecked(true); @@ -235,19 +275,16 @@ void SMESHGUI_MakeNodeAtPointDlg::ButtonToggled (bool on) { myCoordBtn->setChecked( !on ); } - else if ( aSender == myMoveRBtn ) // move node method - { - myNodeToMoveGrp->setEnabled( true ); - } - else if ( aSender == myCreateRBtn ) // create node method - { - myNodeToMoveGrp->setEnabled( false ); - myCoordBtn->setChecked( true ); - } } if ( aSender == myAutoSearchChkBox ) // automatic node search { if ( on ) { + myCurrentX->SetValue(0); + myCurrentY->SetValue(0); + myCurrentZ->SetValue(0); + myDX->SetValue(0); + myDY->SetValue(0); + myDZ->SetValue(0); myId->setText(""); myId->setReadOnly ( true ); myIdBtn->setChecked( false ); @@ -281,8 +318,6 @@ SMESHGUI_MakeNodeAtPointOp::SMESHGUI_MakeNodeAtPointOp() connect(myDlg->myId,SIGNAL (textChanged(const QString&)),SLOT(redisplayPreview())); connect(myDlg->myPreviewChkBox, SIGNAL (toggled(bool)),SLOT(redisplayPreview())); connect(myDlg->myAutoSearchChkBox,SIGNAL (toggled(bool)),SLOT(redisplayPreview())); - connect(myDlg->myMoveRBtn, SIGNAL (toggled(bool)),SLOT(redisplayPreview())); - connect(myDlg->myCreateRBtn, SIGNAL (toggled(bool)),SLOT(redisplayPreview())); } //======================================================================= @@ -321,6 +356,12 @@ void SMESHGUI_MakeNodeAtPointOp::startOperation() myDlg->myX->SetValue(0); myDlg->myY->SetValue(0); myDlg->myZ->SetValue(0); + myDlg->myCurrentX->SetValue(0); + myDlg->myCurrentY->SetValue(0); + myDlg->myCurrentZ->SetValue(0); + myDlg->myDX->SetValue(0); + myDlg->myDY->SetValue(0); + myDlg->myDZ->SetValue(0); myDlg->myId->setText(""); myDlg->show(); @@ -394,21 +435,18 @@ bool SMESHGUI_MakeNodeAtPointOp::onApply() if (aMeshEditor->_is_nil()) return true; - int aResult = 0; - if ( myDlg->myCreateRBtn->isChecked() ) - { - aResult = aMeshEditor->AddNode(myDlg->myX->GetValue(), - myDlg->myY->GetValue(), - myDlg->myZ->GetValue()); - } - else - { - int anId = myDlg->myId->text().toInt(); - aResult = aMeshEditor->MoveClosestNodeToPoint(myDlg->myX->GetValue(), - myDlg->myY->GetValue(), - myDlg->myZ->GetValue(), - anId); - } + bool ok; + int anId = myDlg->myId->text().toInt( &ok ); + if( !ok || anId < 1 ) + anId = aMeshEditor->FindNodeClosestTo(myDlg->myX->GetValue(), + myDlg->myY->GetValue(), + myDlg->myZ->GetValue()); + + int aResult = aMeshEditor->MoveNode(anId, + myDlg->myX->GetValue(), + myDlg->myY->GetValue(), + myDlg->myZ->GetValue() ); + if (aResult) { QStringList aParameters; @@ -417,6 +455,12 @@ bool SMESHGUI_MakeNodeAtPointOp::onApply() aParameters << myDlg->myZ->text(); aMesh->SetParameters( aParameters.join(":").toLatin1().constData() ); + myDlg->myCurrentX->SetValue(0); + myDlg->myCurrentY->SetValue(0); + myDlg->myCurrentZ->SetValue(0); + myDlg->myDX->SetValue(0); + myDlg->myDY->SetValue(0); + myDlg->myDZ->SetValue(0); myDlg->myId->setText(""); SALOME_ListIO aList; @@ -446,7 +490,6 @@ bool SMESHGUI_MakeNodeAtPointOp::isValid( QString& msg ) { bool ok = true; if ( myMeshActor && - myDlg->myMoveRBtn->isChecked() && !myDlg->myAutoSearchChkBox->isChecked() ) { ok = false; @@ -525,6 +568,21 @@ void SMESHGUI_MakeNodeAtPointOp::onSelectionDone() myNoPreview = false; redisplayPreview(); } + + if (const SMDS_MeshNode* aCurrentNode = aMesh->FindNode(myDlg->myId->text().toInt())) { + double x = aCurrentNode->X(); + double y = aCurrentNode->Y(); + double z = aCurrentNode->Z(); + double dx = myDlg->myX->GetValue() - x; + double dy = myDlg->myY->GetValue() - y; + double dz = myDlg->myZ->GetValue() - z; + myDlg->myCurrentX->SetValue(x); + myDlg->myCurrentY->SetValue(y); + myDlg->myCurrentZ->SetValue(z); + myDlg->myDX->SetValue(dx); + myDlg->myDY->SetValue(dy); + myDlg->myDZ->SetValue(dz); + } } } } @@ -547,15 +605,22 @@ void SMESHGUI_MakeNodeAtPointOp::redisplayPreview() SMESH::MeshPreviewStruct_var aMeshPreviewStruct; bool moveShown = false; - if ( myDlg->myMoveRBtn->isChecked() && // Move method - myMeshActor) + if ( myMeshActor) { const bool autoSearch = myDlg->myAutoSearchChkBox->isChecked(); const bool preview = myDlg->myPreviewChkBox->isChecked(); if ( autoSearch ) + { + myDlg->myCurrentX->SetValue(0); + myDlg->myCurrentY->SetValue(0); + myDlg->myCurrentZ->SetValue(0); + myDlg->myDX->SetValue(0); + myDlg->myDY->SetValue(0); + myDlg->myDZ->SetValue(0); myDlg->myId->setText(""); + } QString msg; - if ( preview && ( autoSearch || isValid( msg ) )) + if ( autoSearch || isValid( msg ) ) { try { SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO(myMeshActor->getIO()); @@ -565,11 +630,19 @@ void SMESHGUI_MakeNodeAtPointOp::redisplayPreview() { SUIT_OverrideCursor aWaitCursor; + int anId = 0; + if ( autoSearch ) + anId = aPreviewer->FindNodeClosestTo(myDlg->myX->GetValue(), + myDlg->myY->GetValue(), + myDlg->myZ->GetValue()); + else + anId = myDlg->myId->text().toInt(); + // find id and/or just compute preview - int anId = aPreviewer->MoveClosestNodeToPoint(myDlg->myX->GetValue(), - myDlg->myY->GetValue(), - myDlg->myZ->GetValue(), - myDlg->myId->text().toInt()); + aPreviewer->MoveNode(anId, + myDlg->myX->GetValue(), + myDlg->myY->GetValue(), + myDlg->myZ->GetValue()); if ( autoSearch ) { // set found id QString idTxt("%1"); if ( anId > 0 ) @@ -578,6 +651,24 @@ void SMESHGUI_MakeNodeAtPointOp::redisplayPreview() idTxt = ""; myDlg->myId->setText( idTxt ); } + + SMESH::double_array* aXYZ = aMesh->GetNodeXYZ( anId ); + if( aXYZ && aXYZ->length() >= 3 ) + { + double x = aXYZ->operator[](0); + double y = aXYZ->operator[](1); + double z = aXYZ->operator[](2); + double dx = myDlg->myX->GetValue() - x; + double dy = myDlg->myY->GetValue() - y; + double dz = myDlg->myZ->GetValue() - z; + myDlg->myCurrentX->SetValue(x); + myDlg->myCurrentY->SetValue(y); + myDlg->myCurrentZ->SetValue(z); + myDlg->myDX->SetValue(dx); + myDlg->myDY->SetValue(dy); + myDlg->myDZ->SetValue(dz); + } + if ( preview ) { // fill preview data aMeshPreviewStruct = aPreviewer->GetPreviewData(); moveShown = ( anId > 0 ); diff --git a/src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.h b/src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.h index 68408d990..8774c8bfa 100644 --- a/src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.h +++ b/src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.h @@ -36,7 +36,6 @@ class QGroupBox; class QLineEdit; class QPushButton; class QCheckBox; -class QRadioButton; class SMESHGUI_SpinBox; class SMESHGUI_MeshEditPreview; class SMESHGUI_MakeNodeAtPointDlg; @@ -98,11 +97,15 @@ private: SMESHGUI_SpinBox* myX; SMESHGUI_SpinBox* myY; SMESHGUI_SpinBox* myZ; - QRadioButton* myMoveRBtn; - QRadioButton* myCreateRBtn; QGroupBox* myNodeToMoveGrp; QPushButton* myIdBtn; QLineEdit* myId; + SMESHGUI_SpinBox* myCurrentX; + SMESHGUI_SpinBox* myCurrentY; + SMESHGUI_SpinBox* myCurrentZ; + SMESHGUI_SpinBox* myDX; + SMESHGUI_SpinBox* myDY; + SMESHGUI_SpinBox* myDZ; QCheckBox* myAutoSearchChkBox; QCheckBox* myPreviewChkBox; diff --git a/src/SMESHGUI/SMESH_msg_en.ts b/src/SMESHGUI/SMESH_msg_en.ts index 790b7c1a8..5a1866bef 100644 --- a/src/SMESHGUI/SMESH_msg_en.ts +++ b/src/SMESHGUI/SMESH_msg_en.ts @@ -432,7 +432,7 @@ MEN_MESH_THROU_POINT - Mesh to Pass Through a Point + Move Node MEN_MIN_ANG @@ -2375,7 +2375,7 @@ Consider saving your work before application crash STB_MESH_THROU_POINT - Mesh to pass through a point + Move Node STB_MIN_ANG @@ -2889,7 +2889,7 @@ Consider saving your work before application crash TOP_MESH_THROU_POINT - Mesh to pass through a point + Move Node TOP_MIN_ANG @@ -4425,28 +4425,24 @@ Please specify them and try again SMESHGUI_MakeNodeAtPointDlg AUTO_SEARCH - Automatic search + Find closest to destination CAPTION - Mesh to pass through a point + Move node - CREATE_NEW_METHOD - Create a node + DESTINATION + Destination - MESH_PASS_THROUGH_POINT - Make a node at point + MOVE_NODE + Move node METHOD Method - - MOVE_EXISTING_METHOD - Move a node - NODE_2MOVE Node to move @@ -4772,17 +4768,6 @@ It is impossible to read point coordinates from file <None> - - SMESHGUI_MoveNodesDlg - - CAPTION - Move node - - - NODE_ID_IS_NOT_DEFINED - Node ID is not defined - - SMESHGUI_MultiEditDlg diff --git a/src/SMESH_I/SMESH_MeshEditor_i.cxx b/src/SMESH_I/SMESH_MeshEditor_i.cxx index 6887ed0a1..bde96521a 100644 --- a/src/SMESH_I/SMESH_MeshEditor_i.cxx +++ b/src/SMESH_I/SMESH_MeshEditor_i.cxx @@ -3750,16 +3750,39 @@ CORBA::Boolean SMESH_MeshEditor_i::MoveNode(CORBA::Long NodeID, if ( theNodeSearcher ) theSearchersDeleter.Set( myMesh ); // remove theNodeSearcher if mesh is other - if ( theNodeSearcher ) // move node and update theNodeSearcher data accordingly + if ( myPreviewMode ) // make preview data + { + // in a preview mesh, make edges linked to a node + TPreviewMesh tmpMesh; + TIDSortedElemSet linkedNodes; + ::SMESH_MeshEditor::GetLinkedNodes( node, linkedNodes ); + TIDSortedElemSet::iterator nIt = linkedNodes.begin(); + for ( ; nIt != linkedNodes.end(); ++nIt ) + { + SMDS_MeshEdge edge( node, cast2Node( *nIt )); + tmpMesh.Copy( &edge ); + } + // move copied node + node = tmpMesh.GetMeshDS()->FindNode( NodeID ); + if ( node ) + tmpMesh.GetMeshDS()->MoveNode(node, x, y, z); + // fill preview data + ::SMESH_MeshEditor anEditor( & tmpMesh ); + storeResult( anEditor ); + } + else if ( theNodeSearcher ) // move node and update theNodeSearcher data accordingly theNodeSearcher->MoveNode(node, gp_Pnt( x,y,z )); else GetMeshDS()->MoveNode(node, x, y, z); - // Update Python script - TPythonDump() << "isDone = " << this << ".MoveNode( " - << NodeID << ", " << x << ", " << y << ", " << z << " )"; + if ( !myPreviewMode ) + { + // Update Python script + TPythonDump() << "isDone = " << this << ".MoveNode( " + << NodeID << ", " << x << ", " << y << ", " << z << " )"; - myMesh->SetIsModified( true ); + myMesh->SetIsModified( true ); + } return true; } -- 2.39.2