Issue 0020755: EDF 1279 MESH : 'Mesh to Pass Through a Point' enhancement

This commit is contained in:
ouv 2010-06-21 10:30:03 +00:00
parent 2343a5b385
commit e533bcb1d7
11 changed files with 209 additions and 185 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -1,34 +1,33 @@
/*! /*!
\page mesh_through_point_page Mesh through point \page mesh_through_point_page Moving nodes
\n In mesh you can define a node at a certain point either by creation \n In mesh you can define a node at a certain point either
of a new node, by movement of the node closest to the point or by by movement of the node closest to the point or by
movement of any node to the point. movement of any node to the point.
<em>To create a mesh passing through a point:</em> <em>To displace a node:</em>
<ol> <ol>
<li>From the \b Modification menu choose the <b>Mesh through point</b> item or <li>From the \b Modification menu choose the <b>Move node</b> item or
click <em>"Mesh to pass through a point"</em> button in the toolbar. click <em>"Move Node"</em> button in the toolbar.
\image html mesh_node_to_point.png \image html image67.png
<center><em>"Mesh to pass through a point" button</em></center> <center><em>"Move Node" button</em></center>
The following dialog box shall appear: The following dialog box shall appear:
\image html meshtopass.png \image html meshtopass.png
</li> </li>
<li>Enter the coordinates of the point.</li> <li>Enter the coordinates of the destination point.</li>
<li>Choose one of several methods: you can either \b Create a new node at <li>Check in <b>Find closest to destination</b> option or
the indicated point or Move the existing node to the point. In the select the necessary node manually (X, Y, Z, dX, dY, dZ fields allow
latter case you can check in <b>Automatic search</b> of the closest node or to see original coordinates and displacement of the node to move).
select the necessary node manually. \b Preview check-box allows to see \b Preview check-box allows to see the results of the operation.</li>
the results of the operation.</li>
<li>Click the \b Apply or \b OK button.</li> <li>Click the \b Apply or \b OK button.</li>
</ol> </ol>
<br><b>See Also</b> a sample TUI Script of a <br><b>See Also</b> a sample TUI Script of a
\ref tui_mesh_through_point "Mesh through point" operation. \ref tui_moving_nodes "Moving Nodes" operation.
*/ */

View File

@ -27,10 +27,8 @@ conform free borders, border to side or side elements.</li>
within the indicated tolerance.</li> within the indicated tolerance.</li>
<li>\subpage merging_elements_page "Merge Elements", considered coincident <li>\subpage merging_elements_page "Merge Elements", considered coincident
within the indicated tolerance.</li> within the indicated tolerance.</li>
<li>\subpage moving_nodes_page "Move Nodes" to an arbitrary location <li>\subpage mesh_through_point_page "Move Nodes" to an arbitrary location
with consequent transformation of all adjacent elements and edges.</li> with consequent transformation of all adjacent elements and edges.</li>
<li>\subpage mesh_through_point_page "Make node at a point", existing
or created anew.</li>
<li>\subpage diagonal_inversion_of_elements_page "Invert an edge" between neighboring triangles.</li> <li>\subpage diagonal_inversion_of_elements_page "Invert an edge" between neighboring triangles.</li>
<li>\subpage uniting_two_triangles_page "Unite two triangles".</li> <li>\subpage uniting_two_triangles_page "Unite two triangles".</li>
<li>\subpage uniting_set_of_triangles_page "Unite several adjacent triangles".</li> <li>\subpage uniting_set_of_triangles_page "Unite several adjacent triangles".</li>

View File

@ -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.
<em>To displace a node:</em>
<ol>
<li>From the \b Modification menu choose the <b>Move node</b> item or
click <em>"Move Node"</em> button in the toolbar.
\image html image67.png
<center><em>"Move Node" button</em></center>
The following dialog box shall appear:
\image html movenodes.png
</li>
<li>Enter the ID of the required node in the <b>Node ID</b> 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.</li>
<li>Set new coordinates for your node in the \b Coordinates set of fields.</li>
<li>Click the \b Apply or <b>Apply and Close</b> button.</li>
</ol>
\image html moving_nodes1.png "The initial mesh"
\image html moving_nodes2.png "The node has been moved, transforming all adjacent edges"
<br><b>See Also</b> a sample TUI Script of a
\ref tui_moving_nodes "Moving Nodes" operation.
*/

View File

@ -299,19 +299,6 @@ mesh.RenumberElements()
\anchor tui_moving_nodes \anchor tui_moving_nodes
<h2>Moving Nodes</h2> <h2>Moving Nodes</h2>
\code
import SMESH_mechanic
mesh = SMESH_mechanic.mesh
# move node #38
mesh.MoveNode(38, 20., 10., 0.)
\endcode
<br>
\anchor tui_mesh_through_point
<h2>Mesh through point</h2>
\code \code
from geompy import * from geompy import *
from smesh import * from smesh import *
@ -344,16 +331,11 @@ n = mesh.FindNodeClosestTo( -1,-1,-1 )
if not n == node000: if not n == node000:
raise "FindNodeClosestTo() returns " + str( n ) + " != " + str( 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 # move node000 to a new location
x,y,z = -10, -10, -10 x,y,z = -10, -10, -10
n = mesh.MeshToPassThroughAPoint( x,y,z ) n = mesh.MoveNode( n,x,y,z )
if not n == node000: if not n:
raise "FindNodeClosestTo() returns " + str( n ) + " != " + str( node000 ) raise "MoveNode() returns " + n
# check the coordinates of the node000 # check the coordinates of the node000
xyz = mesh.GetNodeXYZ( node000 ) xyz = mesh.GetNodeXYZ( node000 )

View File

@ -52,7 +52,6 @@ salomeinclude_HEADERS = \
SMESHGUI_WhatIsDlg.h \ SMESHGUI_WhatIsDlg.h \
SMESHGUI_Preferences_ColorDlg.h \ SMESHGUI_Preferences_ColorDlg.h \
SMESHGUI_Preferences_ScalarBarDlg.h \ SMESHGUI_Preferences_ScalarBarDlg.h \
SMESHGUI_MoveNodesDlg.h \
SMESHGUI_AddMeshElementDlg.h \ SMESHGUI_AddMeshElementDlg.h \
SMESHGUI_XmlHandler.h \ SMESHGUI_XmlHandler.h \
SMESHGUI_Filter.h \ SMESHGUI_Filter.h \
@ -116,7 +115,6 @@ dist_libSMESH_la_SOURCES = \
SMESHGUI_WhatIsDlg.cxx \ SMESHGUI_WhatIsDlg.cxx \
SMESHGUI_Preferences_ColorDlg.cxx \ SMESHGUI_Preferences_ColorDlg.cxx \
SMESHGUI_Preferences_ScalarBarDlg.cxx \ SMESHGUI_Preferences_ScalarBarDlg.cxx \
SMESHGUI_MoveNodesDlg.cxx \
SMESHGUI_AddMeshElementDlg.cxx \ SMESHGUI_AddMeshElementDlg.cxx \
SMESHGUI_XmlHandler.cxx \ SMESHGUI_XmlHandler.cxx \
SMESHGUI_Filter.cxx \ SMESHGUI_Filter.cxx \
@ -188,7 +186,6 @@ MOC_FILES = \
SMESHGUI_WhatIsDlg_moc.cxx \ SMESHGUI_WhatIsDlg_moc.cxx \
SMESHGUI_Preferences_ColorDlg_moc.cxx \ SMESHGUI_Preferences_ColorDlg_moc.cxx \
SMESHGUI_Preferences_ScalarBarDlg_moc.cxx \ SMESHGUI_Preferences_ScalarBarDlg_moc.cxx \
SMESHGUI_MoveNodesDlg_moc.cxx \
SMESHGUI_AddMeshElementDlg_moc.cxx \ SMESHGUI_AddMeshElementDlg_moc.cxx \
SMESHGUI_FilterDlg_moc.cxx \ SMESHGUI_FilterDlg_moc.cxx \
SMESHGUI_FilterLibraryDlg_moc.cxx \ SMESHGUI_FilterLibraryDlg_moc.cxx \

View File

@ -53,7 +53,6 @@
#include "SMESHGUI_MeshOp.h" #include "SMESHGUI_MeshOp.h"
#include "SMESHGUI_MeshOrderOp.h" #include "SMESHGUI_MeshOrderOp.h"
#include "SMESHGUI_MeshPatternDlg.h" #include "SMESHGUI_MeshPatternDlg.h"
#include "SMESHGUI_MoveNodesDlg.h"
#include "SMESHGUI_MultiEditDlg.h" #include "SMESHGUI_MultiEditDlg.h"
#include "SMESHGUI_NodesDlg.h" #include "SMESHGUI_NodesDlg.h"
#include "SMESHGUI_Preferences_ColorDlg.h" #include "SMESHGUI_Preferences_ColorDlg.h"
@ -1804,20 +1803,6 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
break; 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 701: // COMPUTE MESH
case 711: // PRECOMPUTE MESH case 711: // PRECOMPUTE MESH
case 712: // EVALUATE MESH case 712: // EVALUATE MESH
@ -2986,9 +2971,8 @@ void SMESHGUI::initialize( CAM_Application* app )
createSMESHAction( 4064, "SEW", "ICON_SMESH_SEWING_FREEBORDERS" ); createSMESHAction( 4064, "SEW", "ICON_SMESH_SEWING_FREEBORDERS" );
createSMESHAction( 4065, "MERGE", "ICON_SMESH_MERGE_NODES" ); createSMESHAction( 4065, "MERGE", "ICON_SMESH_MERGE_NODES" );
createSMESHAction( 4066, "MERGE_ELEMENTS", "ICON_DLG_MERGE_ELEMENTS" ); 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( 4068, "SCALE", "ICON_DLG_MESH_SCALE" );
createSMESHAction( 406, "MOVE", "ICON_DLG_MOVE_NODE" );
createSMESHAction( 407, "INV", "ICON_DLG_MESH_DIAGONAL" ); createSMESHAction( 407, "INV", "ICON_DLG_MESH_DIAGONAL" );
createSMESHAction( 408, "UNION2", "ICON_UNION2TRI" ); createSMESHAction( 408, "UNION2", "ICON_UNION2TRI" );
createSMESHAction( 409, "ORIENT", "ICON_DLG_MESH_ORIENTATION" ); createSMESHAction( 409, "ORIENT", "ICON_DLG_MESH_ORIENTATION" );
@ -3161,7 +3145,6 @@ void SMESHGUI::initialize( CAM_Application* app )
createMenu( 4066, transfId, -1 ); createMenu( 4066, transfId, -1 );
createMenu( 4068, transfId, -1 ); createMenu( 4068, transfId, -1 );
createMenu( 406, modifyId, -1 );
createMenu( 4067,modifyId, -1 ); createMenu( 4067,modifyId, -1 );
createMenu( 407, modifyId, -1 ); createMenu( 407, modifyId, -1 );
createMenu( 408, modifyId, -1 ); createMenu( 408, modifyId, -1 );
@ -3262,7 +3245,6 @@ void SMESHGUI::initialize( CAM_Application* app )
createTool( 4068, addRemTb ); createTool( 4068, addRemTb );
createTool( separator(), addRemTb ); createTool( separator(), addRemTb );
createTool( 406, modifyTb );
createTool( 4067,modifyTb ); createTool( 4067,modifyTb );
createTool( 407, modifyTb ); createTool( 407, modifyTb );
createTool( 408, modifyTb ); createTool( 408, modifyTb );

View File

@ -92,7 +92,7 @@ SMESHGUI_MakeNodeAtPointDlg::SMESHGUI_MakeNodeAtPointDlg()
setWindowTitle(tr("CAPTION")); setWindowTitle(tr("CAPTION"));
QVBoxLayout* aDlgLay = new QVBoxLayout (mainFrame()); QVBoxLayout* aDlgLay = new QVBoxLayout (mainFrame());
aDlgLay->setMargin(MARGIN);; aDlgLay->setMargin(0);
aDlgLay->setSpacing(SPACING); aDlgLay->setSpacing(SPACING);
QWidget* aMainFrame = createMainFrame (mainFrame()); QWidget* aMainFrame = createMainFrame (mainFrame());
@ -116,7 +116,7 @@ QWidget* SMESHGUI_MakeNodeAtPointDlg::createMainFrame (QWidget* theParent)
// constructor // constructor
QGroupBox* aPixGrp = new QGroupBox(tr("MESH_PASS_THROUGH_POINT"), aFrame); QGroupBox* aPixGrp = new QGroupBox(tr("MOVE_NODE"), aFrame);
QButtonGroup* aBtnGrp = new QButtonGroup(this); QButtonGroup* aBtnGrp = new QButtonGroup(this);
QHBoxLayout* aPixGrpLayout = new QHBoxLayout(aPixGrp); QHBoxLayout* aPixGrpLayout = new QHBoxLayout(aPixGrp);
aPixGrpLayout->setMargin(MARGIN); aPixGrpLayout->setMargin(MARGIN);
@ -130,7 +130,7 @@ QWidget* SMESHGUI_MakeNodeAtPointDlg::createMainFrame (QWidget* theParent)
// coordinates // coordinates
QGroupBox* aCoordGrp = new QGroupBox(tr("SMESH_COORDINATES"), aFrame); QGroupBox* aCoordGrp = new QGroupBox(tr("DESTINATION"), aFrame);
QHBoxLayout* aCoordGrpLayout = new QHBoxLayout(aCoordGrp); QHBoxLayout* aCoordGrpLayout = new QHBoxLayout(aCoordGrp);
aCoordGrpLayout->setMargin(MARGIN); aCoordGrpLayout->setMargin(MARGIN);
aCoordGrpLayout->setSpacing(SPACING); aCoordGrpLayout->setSpacing(SPACING);
@ -160,19 +160,6 @@ QWidget* SMESHGUI_MakeNodeAtPointDlg::createMainFrame (QWidget* theParent)
aCoordGrpLayout->addWidget(aZLabel); aCoordGrpLayout->addWidget(aZLabel);
aCoordGrpLayout->addWidget(myZ); 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 // node ID
myNodeToMoveGrp = new QGroupBox(tr("NODE_2MOVE"), aFrame); myNodeToMoveGrp = new QGroupBox(tr("NODE_2MOVE"), aFrame);
@ -183,6 +170,62 @@ QWidget* SMESHGUI_MakeNodeAtPointDlg::createMainFrame (QWidget* theParent)
myIdBtn->setCheckable(true); myIdBtn->setCheckable(true);
myId = new QLineEdit(myNodeToMoveGrp); myId = new QLineEdit(myNodeToMoveGrp);
myId->setValidator(new SMESHGUI_IdValidator(this, 1)); 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); myAutoSearchChkBox = new QCheckBox( tr("AUTO_SEARCH"), myNodeToMoveGrp);
myPreviewChkBox = new QCheckBox( tr("PREVIEW"), myNodeToMoveGrp); myPreviewChkBox = new QCheckBox( tr("PREVIEW"), myNodeToMoveGrp);
@ -193,22 +236,19 @@ QWidget* SMESHGUI_MakeNodeAtPointDlg::createMainFrame (QWidget* theParent)
myNodeToMoveGrpLayout->addWidget( idLabel, 0, 0 ); myNodeToMoveGrpLayout->addWidget( idLabel, 0, 0 );
myNodeToMoveGrpLayout->addWidget( myIdBtn, 0, 1 ); myNodeToMoveGrpLayout->addWidget( myIdBtn, 0, 1 );
myNodeToMoveGrpLayout->addWidget( myId, 0, 2 ); myNodeToMoveGrpLayout->addWidget( myId, 0, 2 );
myNodeToMoveGrpLayout->addWidget( myAutoSearchChkBox, 1, 0, 1, 3 ); myNodeToMoveGrpLayout->addWidget( aCoordWidget, 1, 0, 1, 3 );
myNodeToMoveGrpLayout->addWidget( myPreviewChkBox, 2, 0, 1, 3 ); myNodeToMoveGrpLayout->addWidget( myAutoSearchChkBox, 2, 0, 1, 3 );
myNodeToMoveGrpLayout->addWidget( myPreviewChkBox, 3, 0, 1, 3 );
QVBoxLayout* aLay = new QVBoxLayout(aFrame); QVBoxLayout* aLay = new QVBoxLayout(aFrame);
aLay->addWidget(aPixGrp); aLay->addWidget(aPixGrp);
aLay->addWidget(aCoordGrp); aLay->addWidget(aCoordGrp);
aLay->addWidget(aMethodGrp);
aLay->addWidget(myNodeToMoveGrp); aLay->addWidget(myNodeToMoveGrp);
connect(myCoordBtn, SIGNAL (toggled(bool)), this, SLOT(ButtonToggled(bool))); 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(myIdBtn, SIGNAL (toggled(bool)), this, SLOT(ButtonToggled(bool)));
connect(myAutoSearchChkBox, SIGNAL (toggled(bool)), this, SLOT(ButtonToggled(bool))); connect(myAutoSearchChkBox, SIGNAL (toggled(bool)), this, SLOT(ButtonToggled(bool)));
myMoveRBtn->setChecked(true);
myIdBtn->setChecked(true); myIdBtn->setChecked(true);
myAutoSearchChkBox->setChecked(true); myAutoSearchChkBox->setChecked(true);
@ -235,19 +275,16 @@ void SMESHGUI_MakeNodeAtPointDlg::ButtonToggled (bool on)
{ {
myCoordBtn->setChecked( !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 ( aSender == myAutoSearchChkBox ) // automatic node search
{ {
if ( on ) { if ( on ) {
myCurrentX->SetValue(0);
myCurrentY->SetValue(0);
myCurrentZ->SetValue(0);
myDX->SetValue(0);
myDY->SetValue(0);
myDZ->SetValue(0);
myId->setText(""); myId->setText("");
myId->setReadOnly ( true ); myId->setReadOnly ( true );
myIdBtn->setChecked( false ); myIdBtn->setChecked( false );
@ -281,8 +318,6 @@ SMESHGUI_MakeNodeAtPointOp::SMESHGUI_MakeNodeAtPointOp()
connect(myDlg->myId,SIGNAL (textChanged(const QString&)),SLOT(redisplayPreview())); connect(myDlg->myId,SIGNAL (textChanged(const QString&)),SLOT(redisplayPreview()));
connect(myDlg->myPreviewChkBox, SIGNAL (toggled(bool)),SLOT(redisplayPreview())); connect(myDlg->myPreviewChkBox, SIGNAL (toggled(bool)),SLOT(redisplayPreview()));
connect(myDlg->myAutoSearchChkBox,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->myX->SetValue(0);
myDlg->myY->SetValue(0); myDlg->myY->SetValue(0);
myDlg->myZ->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->myId->setText("");
myDlg->show(); myDlg->show();
@ -394,21 +435,18 @@ bool SMESHGUI_MakeNodeAtPointOp::onApply()
if (aMeshEditor->_is_nil()) if (aMeshEditor->_is_nil())
return true; return true;
int aResult = 0; bool ok;
if ( myDlg->myCreateRBtn->isChecked() ) int anId = myDlg->myId->text().toInt( &ok );
{ if( !ok || anId < 1 )
aResult = aMeshEditor->AddNode(myDlg->myX->GetValue(), anId = aMeshEditor->FindNodeClosestTo(myDlg->myX->GetValue(),
myDlg->myY->GetValue(), myDlg->myY->GetValue(),
myDlg->myZ->GetValue()); myDlg->myZ->GetValue());
}
else int aResult = aMeshEditor->MoveNode(anId,
{ myDlg->myX->GetValue(),
int anId = myDlg->myId->text().toInt(); myDlg->myY->GetValue(),
aResult = aMeshEditor->MoveClosestNodeToPoint(myDlg->myX->GetValue(), myDlg->myZ->GetValue() );
myDlg->myY->GetValue(),
myDlg->myZ->GetValue(),
anId);
}
if (aResult) if (aResult)
{ {
QStringList aParameters; QStringList aParameters;
@ -417,6 +455,12 @@ bool SMESHGUI_MakeNodeAtPointOp::onApply()
aParameters << myDlg->myZ->text(); aParameters << myDlg->myZ->text();
aMesh->SetParameters( aParameters.join(":").toLatin1().constData() ); 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(""); myDlg->myId->setText("");
SALOME_ListIO aList; SALOME_ListIO aList;
@ -446,7 +490,6 @@ bool SMESHGUI_MakeNodeAtPointOp::isValid( QString& msg )
{ {
bool ok = true; bool ok = true;
if ( myMeshActor && if ( myMeshActor &&
myDlg->myMoveRBtn->isChecked() &&
!myDlg->myAutoSearchChkBox->isChecked() ) !myDlg->myAutoSearchChkBox->isChecked() )
{ {
ok = false; ok = false;
@ -525,6 +568,21 @@ void SMESHGUI_MakeNodeAtPointOp::onSelectionDone()
myNoPreview = false; myNoPreview = false;
redisplayPreview(); 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; SMESH::MeshPreviewStruct_var aMeshPreviewStruct;
bool moveShown = false; bool moveShown = false;
if ( myDlg->myMoveRBtn->isChecked() && // Move method if ( myMeshActor)
myMeshActor)
{ {
const bool autoSearch = myDlg->myAutoSearchChkBox->isChecked(); const bool autoSearch = myDlg->myAutoSearchChkBox->isChecked();
const bool preview = myDlg->myPreviewChkBox->isChecked(); const bool preview = myDlg->myPreviewChkBox->isChecked();
if ( autoSearch ) 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(""); myDlg->myId->setText("");
}
QString msg; QString msg;
if ( preview && ( autoSearch || isValid( msg ) )) if ( autoSearch || isValid( msg ) )
{ {
try { try {
SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO(myMeshActor->getIO()); SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO(myMeshActor->getIO());
@ -565,11 +630,19 @@ void SMESHGUI_MakeNodeAtPointOp::redisplayPreview()
{ {
SUIT_OverrideCursor aWaitCursor; 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 // find id and/or just compute preview
int anId = aPreviewer->MoveClosestNodeToPoint(myDlg->myX->GetValue(), aPreviewer->MoveNode(anId,
myDlg->myY->GetValue(), myDlg->myX->GetValue(),
myDlg->myZ->GetValue(), myDlg->myY->GetValue(),
myDlg->myId->text().toInt()); myDlg->myZ->GetValue());
if ( autoSearch ) { // set found id if ( autoSearch ) { // set found id
QString idTxt("%1"); QString idTxt("%1");
if ( anId > 0 ) if ( anId > 0 )
@ -578,6 +651,24 @@ void SMESHGUI_MakeNodeAtPointOp::redisplayPreview()
idTxt = ""; idTxt = "";
myDlg->myId->setText( 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 if ( preview ) { // fill preview data
aMeshPreviewStruct = aPreviewer->GetPreviewData(); aMeshPreviewStruct = aPreviewer->GetPreviewData();
moveShown = ( anId > 0 ); moveShown = ( anId > 0 );

View File

@ -36,7 +36,6 @@ class QGroupBox;
class QLineEdit; class QLineEdit;
class QPushButton; class QPushButton;
class QCheckBox; class QCheckBox;
class QRadioButton;
class SMESHGUI_SpinBox; class SMESHGUI_SpinBox;
class SMESHGUI_MeshEditPreview; class SMESHGUI_MeshEditPreview;
class SMESHGUI_MakeNodeAtPointDlg; class SMESHGUI_MakeNodeAtPointDlg;
@ -98,11 +97,15 @@ private:
SMESHGUI_SpinBox* myX; SMESHGUI_SpinBox* myX;
SMESHGUI_SpinBox* myY; SMESHGUI_SpinBox* myY;
SMESHGUI_SpinBox* myZ; SMESHGUI_SpinBox* myZ;
QRadioButton* myMoveRBtn;
QRadioButton* myCreateRBtn;
QGroupBox* myNodeToMoveGrp; QGroupBox* myNodeToMoveGrp;
QPushButton* myIdBtn; QPushButton* myIdBtn;
QLineEdit* myId; QLineEdit* myId;
SMESHGUI_SpinBox* myCurrentX;
SMESHGUI_SpinBox* myCurrentY;
SMESHGUI_SpinBox* myCurrentZ;
SMESHGUI_SpinBox* myDX;
SMESHGUI_SpinBox* myDY;
SMESHGUI_SpinBox* myDZ;
QCheckBox* myAutoSearchChkBox; QCheckBox* myAutoSearchChkBox;
QCheckBox* myPreviewChkBox; QCheckBox* myPreviewChkBox;

View File

@ -432,7 +432,7 @@
</message> </message>
<message> <message>
<source>MEN_MESH_THROU_POINT</source> <source>MEN_MESH_THROU_POINT</source>
<translation>Mesh to Pass Through a Point</translation> <translation>Move Node</translation>
</message> </message>
<message> <message>
<source>MEN_MIN_ANG</source> <source>MEN_MIN_ANG</source>
@ -2375,7 +2375,7 @@ Consider saving your work before application crash</translation>
</message> </message>
<message> <message>
<source>STB_MESH_THROU_POINT</source> <source>STB_MESH_THROU_POINT</source>
<translation>Mesh to pass through a point</translation> <translation>Move Node</translation>
</message> </message>
<message> <message>
<source>STB_MIN_ANG</source> <source>STB_MIN_ANG</source>
@ -2889,7 +2889,7 @@ Consider saving your work before application crash</translation>
</message> </message>
<message> <message>
<source>TOP_MESH_THROU_POINT</source> <source>TOP_MESH_THROU_POINT</source>
<translation>Mesh to pass through a point</translation> <translation>Move Node</translation>
</message> </message>
<message> <message>
<source>TOP_MIN_ANG</source> <source>TOP_MIN_ANG</source>
@ -4425,28 +4425,24 @@ Please specify them and try again</translation>
<name>SMESHGUI_MakeNodeAtPointDlg</name> <name>SMESHGUI_MakeNodeAtPointDlg</name>
<message> <message>
<source>AUTO_SEARCH</source> <source>AUTO_SEARCH</source>
<translation>Automatic search</translation> <translation>Find closest to destination</translation>
</message> </message>
<message> <message>
<source>CAPTION</source> <source>CAPTION</source>
<translation>Mesh to pass through a point</translation> <translation>Move node</translation>
</message> </message>
<message> <message>
<source>CREATE_NEW_METHOD</source> <source>DESTINATION</source>
<translation>Create a node</translation> <translation>Destination</translation>
</message> </message>
<message> <message>
<source>MESH_PASS_THROUGH_POINT</source> <source>MOVE_NODE</source>
<translation>Make a node at point</translation> <translation>Move node</translation>
</message> </message>
<message> <message>
<source>METHOD</source> <source>METHOD</source>
<translation>Method</translation> <translation>Method</translation>
</message> </message>
<message>
<source>MOVE_EXISTING_METHOD</source>
<translation>Move a node</translation>
</message>
<message> <message>
<source>NODE_2MOVE</source> <source>NODE_2MOVE</source>
<translation>Node to move</translation> <translation>Node to move</translation>
@ -4772,17 +4768,6 @@ It is impossible to read point coordinates from file</translation>
<translation>&lt;None></translation> <translation>&lt;None></translation>
</message> </message>
</context> </context>
<context>
<name>SMESHGUI_MoveNodesDlg</name>
<message>
<source>CAPTION</source>
<translation>Move node</translation>
</message>
<message>
<source>NODE_ID_IS_NOT_DEFINED</source>
<translation>Node ID is not defined</translation>
</message>
</context>
<context> <context>
<name>SMESHGUI_MultiEditDlg</name> <name>SMESHGUI_MultiEditDlg</name>
<message> <message>

View File

@ -3750,16 +3750,39 @@ CORBA::Boolean SMESH_MeshEditor_i::MoveNode(CORBA::Long NodeID,
if ( theNodeSearcher ) if ( theNodeSearcher )
theSearchersDeleter.Set( myMesh ); // remove theNodeSearcher if mesh is other 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 )); theNodeSearcher->MoveNode(node, gp_Pnt( x,y,z ));
else else
GetMeshDS()->MoveNode(node, x, y, z); GetMeshDS()->MoveNode(node, x, y, z);
// Update Python script if ( !myPreviewMode )
TPythonDump() << "isDone = " << this << ".MoveNode( " {
<< NodeID << ", " << x << ", " << y << ", " << z << " )"; // Update Python script
TPythonDump() << "isDone = " << this << ".MoveNode( "
<< NodeID << ", " << x << ", " << y << ", " << z << " )";
myMesh->SetIsModified( true ); myMesh->SetIsModified( true );
}
return true; return true;
} }