PAL16617 (Modification/Transformation operations with copy don't create a new mesh)

+    SMESH_Mesh MirrorMakeMesh (in long_array IDsOfElements,
+    SMESH_Mesh MirrorObjectMakeMesh (in SMESH_IDSource theObject,
+    SMESH_Mesh TranslateMakeMesh (in long_array IDsOfElements,
+    SMESH_Mesh TranslateObjectMakeMesh (in SMESH_IDSource theObject,
+    SMESH_Mesh RotateMakeMesh (in long_array IDsOfElements,
+    SMESH_Mesh RotateObjectMakeMesh (in SMESH_IDSource theObject,
This commit is contained in:
eap 2007-12-19 15:05:31 +00:00
parent 2e446e7121
commit 0ebaadef38
9 changed files with 605 additions and 107 deletions

View File

@ -418,31 +418,49 @@ module SMESH
void Mirror (in long_array IDsOfElements, void Mirror (in long_array IDsOfElements,
in AxisStruct Mirror, in AxisStruct Mirror,
in MirrorType theMirrorType, in MirrorType Type,
in boolean Copy); in boolean Copy);
ListOfGroups MirrorMakeGroups (in long_array IDsOfElements, ListOfGroups MirrorMakeGroups (in long_array IDsOfElements,
in AxisStruct Mirror, in AxisStruct Mirror,
in MirrorType theMirrorType); in MirrorType Type);
SMESH_Mesh MirrorMakeMesh (in long_array IDsOfElements,
in AxisStruct Mirror,
in MirrorType Type,
in boolean CopyGroups,
in string MeshName);
void MirrorObject (in SMESH_IDSource theObject, void MirrorObject (in SMESH_IDSource theObject,
in AxisStruct Mirror, in AxisStruct Mirror,
in MirrorType theMirrorType, in MirrorType Type,
in boolean Copy); in boolean Copy);
ListOfGroups MirrorObjectMakeGroups (in SMESH_IDSource theObject, ListOfGroups MirrorObjectMakeGroups (in SMESH_IDSource theObject,
in AxisStruct Mirror, in AxisStruct Mirror,
in MirrorType theMirrorType); in MirrorType Type);
SMESH_Mesh MirrorObjectMakeMesh (in SMESH_IDSource theObject,
in AxisStruct Mirror,
in MirrorType Type,
in boolean CopyGroups,
in string MeshName);
void Translate (in long_array IDsOfElements, void Translate (in long_array IDsOfElements,
in DirStruct Vector, in DirStruct Vector,
in boolean Copy); in boolean Copy);
ListOfGroups TranslateMakeGroups (in long_array IDsOfElements, ListOfGroups TranslateMakeGroups (in long_array IDsOfElements,
in DirStruct Vector); in DirStruct Vector);
SMESH_Mesh TranslateMakeMesh (in long_array IDsOfElements,
in DirStruct Vector,
in boolean CopyGroups,
in string MeshName);
void TranslateObject (in SMESH_IDSource theObject, void TranslateObject (in SMESH_IDSource theObject,
in DirStruct Vector, in DirStruct Vector,
in boolean Copy); in boolean Copy);
ListOfGroups TranslateObjectMakeGroups (in SMESH_IDSource theObject, ListOfGroups TranslateObjectMakeGroups (in SMESH_IDSource theObject,
in DirStruct Vector); in DirStruct Vector);
SMESH_Mesh TranslateObjectMakeMesh (in SMESH_IDSource theObject,
in DirStruct Vector,
in boolean CopyGroups,
in string MeshName);
void Rotate (in long_array IDsOfElements, void Rotate (in long_array IDsOfElements,
in AxisStruct Axis, in AxisStruct Axis,
@ -451,6 +469,11 @@ module SMESH
ListOfGroups RotateMakeGroups (in long_array IDsOfElements, ListOfGroups RotateMakeGroups (in long_array IDsOfElements,
in AxisStruct Axis, in AxisStruct Axis,
in double AngleInRadians); in double AngleInRadians);
SMESH_Mesh RotateMakeMesh (in long_array IDsOfElements,
in AxisStruct Axis,
in double AngleInRadians,
in boolean CopyGroups,
in string MeshName);
void RotateObject (in SMESH_IDSource theObject, void RotateObject (in SMESH_IDSource theObject,
in AxisStruct Axis, in AxisStruct Axis,
@ -459,6 +482,11 @@ module SMESH
ListOfGroups RotateObjectMakeGroups (in SMESH_IDSource theObject, ListOfGroups RotateObjectMakeGroups (in SMESH_IDSource theObject,
in AxisStruct Axis, in AxisStruct Axis,
in double AngleInRadians); in double AngleInRadians);
SMESH_Mesh RotateObjectMakeMesh (in SMESH_IDSource theObject,
in AxisStruct Axis,
in double AngleInRadians,
in boolean CopyGroups,
in string MeshName);
void FindCoincidentNodes (in double Tolerance, void FindCoincidentNodes (in double Tolerance,
out array_of_long_array GroupsOfNodes); out array_of_long_array GroupsOfNodes);

View File

@ -51,6 +51,7 @@
#include "SVTK_Selector.h" #include "SVTK_Selector.h"
#include "SVTK_Selection.h" #include "SVTK_Selection.h"
#include "SALOME_ListIO.hxx" #include "SALOME_ListIO.hxx"
#include "SALOMEDSClient_SObject.hxx"
#include "utilities.h" #include "utilities.h"
@ -77,6 +78,8 @@
using namespace std; using namespace std;
enum { MOVE_ELEMS_BUTTON = 0, COPY_ELEMS_BUTTON, MAKE_MESH_BUTTON }; //!< action type
//================================================================================= //=================================================================================
// class : SMESHGUI_RotationDlg() // class : SMESHGUI_RotationDlg()
// purpose : // purpose :
@ -175,7 +178,7 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam
// Controls for elements selection // Controls for elements selection
TextLabelElements = new QLabel(GroupArguments, "TextLabelElements"); TextLabelElements = new QLabel(GroupArguments, "TextLabelElements");
TextLabelElements->setText(tr("SMESH_ID_ELEMENTS" )); TextLabelElements->setText(tr("SMESH_ID_ELEMENTS" ));
TextLabelElements->setFixedWidth(74); //TextLabelElements->setFixedWidth(74);
GroupArgumentsLayout->addWidget(TextLabelElements, 0, 0); GroupArgumentsLayout->addWidget(TextLabelElements, 0, 0);
SelectElementsButton = new QPushButton(GroupArguments, "SelectElementsButton"); SelectElementsButton = new QPushButton(GroupArguments, "SelectElementsButton");
@ -184,14 +187,14 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam
SelectElementsButton->setToggleButton(FALSE); SelectElementsButton->setToggleButton(FALSE);
GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1); GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1);
LineEditElements = new QLineEdit(GroupArguments, "LineEditElements"); LineEditElements = new QLineEdit(GroupArguments, "LineEditElements");
LineEditElements->setValidator(new SMESHGUI_IdValidator(this, "validator")); LineEditElements->setValidator(new SMESHGUI_IdValidator(this, "validator"));
GroupArgumentsLayout->addWidget(LineEditElements, 0, 2); GroupArgumentsLayout->addMultiCellWidget(LineEditElements, 0, 0, 2, 3);
// Control for the whole mesh selection // Control for the whole mesh selection
CheckBoxMesh = new QCheckBox(GroupArguments, "CheckBoxMesh"); CheckBoxMesh = new QCheckBox(GroupArguments, "CheckBoxMesh");
CheckBoxMesh->setText(tr("SMESH_SELECT_WHOLE_MESH" )); CheckBoxMesh->setText(tr("SMESH_SELECT_WHOLE_MESH" ));
GroupArgumentsLayout->addMultiCellWidget(CheckBoxMesh, 1, 1, 0, 2); GroupArgumentsLayout->addMultiCellWidget(CheckBoxMesh, 1, 1, 0, 3);
// Controls for axis defining // Controls for axis defining
GroupAxis = new QGroupBox(GroupArguments, "GroupAxis"); GroupAxis = new QGroupBox(GroupArguments, "GroupAxis");
@ -268,24 +271,31 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam
SpinBox_DZ = new SMESHGUI_SpinBox(GroupAxis, "SpinBox_DZ"); SpinBox_DZ = new SMESHGUI_SpinBox(GroupAxis, "SpinBox_DZ");
GroupAxisLayout->addWidget(SpinBox_DZ, 1, 7); GroupAxisLayout->addWidget(SpinBox_DZ, 1, 7);
GroupArgumentsLayout->addMultiCellWidget(GroupAxis, 2, 2, 0, 2); GroupArgumentsLayout->addMultiCellWidget(GroupAxis, 2, 2, 0, 3);
// Controls for angle defining // Controls for angle defining
TextLabelAngle = new QLabel(GroupArguments, "TextLabelAngle"); TextLabelAngle = new QLabel(GroupArguments, "TextLabelAngle");
TextLabelAngle->setText(tr("SMESH_ANGLE")); TextLabelAngle->setText(tr("SMESH_ANGLE"));
GroupArgumentsLayout->addMultiCellWidget(TextLabelAngle, 3, 3, 0, 1); GroupArgumentsLayout->addMultiCellWidget(TextLabelAngle, 3, 3, 0, 2);
SpinBox_Angle = new SMESHGUI_SpinBox(GroupArguments, "SpinBox_Angle"); SpinBox_Angle = new SMESHGUI_SpinBox(GroupArguments, "SpinBox_Angle");
GroupArgumentsLayout->addWidget(SpinBox_Angle, 3, 2); GroupArgumentsLayout->addWidget(SpinBox_Angle, 3, 2);
// Controls for "Create a copy" option // action switch
CheckBoxCopy = new QCheckBox(GroupArguments, "CheckBoxCopy"); ActionGroup = new QButtonGroup(1, Qt::Horizontal, GroupArguments, "ActionGroup");
CheckBoxCopy->setText(tr("SMESH_CREATE_COPY")); ActionGroup->setExclusive(true);
GroupArgumentsLayout->addMultiCellWidget(CheckBoxCopy, 4, 4, 0, 2); ActionGroup->insert(new QRadioButton(tr("SMESH_MOVE_ELEMENTS"),ActionGroup), MOVE_ELEMS_BUTTON);
ActionGroup->insert(new QRadioButton(tr("SMESH_COPY_ELEMENTS"),ActionGroup), COPY_ELEMS_BUTTON);
ActionGroup->insert(new QRadioButton(tr("SMESH_CREATE_MESH" ),ActionGroup), MAKE_MESH_BUTTON);
GroupArgumentsLayout->addMultiCellWidget(ActionGroup, 4, 6, 0, 2);
// CheckBox for groups generation // CheckBox for groups generation
MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments); MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments);
GroupArgumentsLayout->addMultiCellWidget(MakeGroupsCheck, 5, 5, 0, 2); GroupArgumentsLayout->addWidget(MakeGroupsCheck, 5, 3);
// Name of a mesh to create
LineEditNewMesh = new QLineEdit(GroupArguments, "LineEditNewMesh");
GroupArgumentsLayout->addWidget(LineEditNewMesh, 6, 3);
SMESHGUI_RotationDlgLayout->addWidget(GroupArguments, 1, 0); SMESHGUI_RotationDlgLayout->addWidget(GroupArguments, 1, 0);
@ -343,11 +353,13 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam
connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel())); connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
connect(LineEditElements, SIGNAL(textChanged(const QString&)), SLOT(onTextChange(const QString&))); connect(LineEditElements, SIGNAL(textChanged(const QString&)), SLOT(onTextChange(const QString&)));
connect(CheckBoxMesh, SIGNAL(toggled(bool)), SLOT(onSelectMesh(bool))); connect(CheckBoxMesh, SIGNAL(toggled(bool)), SLOT(onSelectMesh(bool)));
connect(CheckBoxCopy, SIGNAL(toggled(bool)), SLOT(onCopyChecked(bool))); connect(ActionGroup, SIGNAL(clicked(int)), SLOT(onActionClicked(int)));
this->show(); /* displays Dialog */ this->show(); /* displays Dialog */
ConstructorsClicked(0); ConstructorsClicked(0);
//SelectionIntoArgument();
onActionClicked(MOVE_ELEMS_BUTTON);
resize(0,0); // ?? resize(0,0); // ??
} }
@ -389,10 +401,11 @@ void SMESHGUI_RotationDlg::Init (bool ResetControls)
SpinBox_Angle->SetValue(45); SpinBox_Angle->SetValue(45);
CheckBoxCopy->setChecked(false); ((QRadioButton*) ActionGroup->find( MOVE_ELEMS_BUTTON ))->setChecked(TRUE);
CheckBoxMesh->setChecked(false); CheckBoxMesh->setChecked(false);
MakeGroupsCheck->setChecked(false); // MakeGroupsCheck->setChecked(false);
MakeGroupsCheck->setEnabled(false); // MakeGroupsCheck->setEnabled(false);
// onSelectMesh(false);
} }
onSelectMesh(CheckBoxMesh->isChecked()); onSelectMesh(CheckBoxMesh->isChecked());
@ -434,24 +447,37 @@ void SMESHGUI_RotationDlg::ClickOnApply()
anAxis.vz = SpinBox_DZ->GetValue(); anAxis.vz = SpinBox_DZ->GetValue();
double anAngle = (SpinBox_Angle->GetValue())*PI/180; double anAngle = (SpinBox_Angle->GetValue())*PI/180;
bool toCreateCopy = CheckBoxCopy->isChecked(); int actionButton = ActionGroup->id( ActionGroup->selected() );
bool makeGroups = ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() );
try { try {
SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
QApplication::setOverrideCursor(Qt::waitCursor); QApplication::setOverrideCursor(Qt::waitCursor);
if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ) switch ( actionButton ) {
SMESH::ListOfGroups_var groups = case MOVE_ELEMS_BUTTON:
aMeshEditor->RotateMakeGroups(anElementsId.inout(), anAxis, anAngle); aMeshEditor->Rotate(anElementsId, anAxis, anAngle, false);
else break;
aMeshEditor->Rotate(anElementsId.inout(), anAxis, anAngle, toCreateCopy); case COPY_ELEMS_BUTTON:
if ( makeGroups )
SMESH::ListOfGroups_var groups =
aMeshEditor->RotateMakeGroups(anElementsId, anAxis, anAngle);
else
aMeshEditor->Rotate(anElementsId, anAxis, anAngle, true);
break;
case MAKE_MESH_BUTTON:
SMESH::SMESH_Mesh_var mesh =
aMeshEditor->RotateMakeMesh(anElementsId, anAxis, anAngle, makeGroups,
LineEditNewMesh->text().latin1());
}
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
} catch (...) { } catch (...) {
} }
SMESH::UpdateView(); SMESH::UpdateView();
if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ) if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ||
actionButton == MAKE_MESH_BUTTON )
mySMESHGUI->updateObjBrowser(true); // new groups may appear mySMESHGUI->updateObjBrowser(true); // new groups may appear
Init(false); Init(false);
//ConstructorsClicked(GetConstructorId());
SelectionIntoArgument(); SelectionIntoArgument();
} }
} }
@ -610,7 +636,7 @@ void SMESHGUI_RotationDlg::SelectionIntoArgument()
MakeGroupsCheck->setChecked(false); MakeGroupsCheck->setChecked(false);
MakeGroupsCheck->setEnabled(false); MakeGroupsCheck->setEnabled(false);
} }
else if (CheckBoxCopy->isChecked() ) { else if ( ActionGroup->id( ActionGroup->selected() ) != MOVE_ELEMS_BUTTON ) {
MakeGroupsCheck->setEnabled(true); MakeGroupsCheck->setEnabled(true);
} }
if (CheckBoxMesh->isChecked()) { if (CheckBoxMesh->isChecked()) {
@ -693,8 +719,10 @@ void SMESHGUI_RotationDlg::SelectionIntoArgument()
} }
myBusy = true; myBusy = true;
if (myEditCurrentArgument == (QWidget*)LineEditElements) if (myEditCurrentArgument == (QWidget*)LineEditElements) {
LineEditElements->setText(aString); LineEditElements->setText(aString);
setNewMeshName();
}
myBusy = false; myBusy = false;
// OK // OK
@ -875,17 +903,59 @@ void SMESHGUI_RotationDlg::onVectorChanged()
} }
} }
//======================================================================= //=======================================================================
//function : onCopyChecked //function : onActionClicked
//purpose : slot called when Copy checkBox is checked //purpose : slot called when an action type changed
//======================================================================= //=======================================================================
void SMESHGUI_RotationDlg::onCopyChecked(bool isOn) void SMESHGUI_RotationDlg::onActionClicked(int button)
{ {
// enable "MakeGroupsCheck" switch ( button ) {
if ( !myMesh->_is_nil() && myMesh->NbGroups() == 0) case MOVE_ELEMS_BUTTON:
isOn = false; MakeGroupsCheck->setEnabled(false);
MakeGroupsCheck->setEnabled(isOn); LineEditNewMesh->setEnabled(false);
break;
case COPY_ELEMS_BUTTON:
LineEditNewMesh->setEnabled(false);
MakeGroupsCheck->setText( tr("SMESH_MAKE_GROUPS"));
if ( myMesh->_is_nil() || myMesh->NbGroups() > 0)
MakeGroupsCheck->setEnabled(true);
else
MakeGroupsCheck->setEnabled(false);
break;
case MAKE_MESH_BUTTON:
LineEditNewMesh->setEnabled(true);
MakeGroupsCheck->setText( tr("SMESH_COPY_GROUPS"));
if ( myMesh->_is_nil() || myMesh->NbGroups() > 0)
MakeGroupsCheck->setEnabled(true);
else
MakeGroupsCheck->setEnabled(false);
break;
}
setNewMeshName();
}
//=======================================================================
//function : setNewMeshName
//purpose : update contents of LineEditNewMesh
//=======================================================================
void SMESHGUI_RotationDlg::setNewMeshName()
{
LineEditNewMesh->setText("");
if ( LineEditNewMesh->isEnabled() && !myMesh->_is_nil() ) {
QString name;
if ( CheckBoxMesh->isChecked() ) {
name = LineEditElements->text();
}
else {
_PTR(SObject) meshSO = SMESH::FindSObject( myMesh );
name = meshSO->GetName();
}
if ( !name.isEmpty() )
LineEditNewMesh->setText( SMESH::UniqueMeshName( name.latin1(), "rotated"));
}
} }
//================================================================================= //=================================================================================

View File

@ -81,6 +81,7 @@ private:
void hideEvent (QHideEvent*); /* ESC key */ void hideEvent (QHideEvent*); /* ESC key */
void keyPressEvent(QKeyEvent*); void keyPressEvent(QKeyEvent*);
bool IsAxisOk(); bool IsAxisOk();
void setNewMeshName();
SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */ SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */
LightApp_SelectionMgr* mySelectionMgr; /* User shape selection */ LightApp_SelectionMgr* mySelectionMgr; /* User shape selection */
@ -128,8 +129,10 @@ private:
QLabel* TextLabelAngle; QLabel* TextLabelAngle;
SMESHGUI_SpinBox* SpinBox_Angle; SMESHGUI_SpinBox* SpinBox_Angle;
QCheckBox* CheckBoxCopy; //QCheckBox* CheckBoxCopy;
QButtonGroup* ActionGroup;
QCheckBox* MakeGroupsCheck; QCheckBox* MakeGroupsCheck;
QLineEdit* LineEditNewMesh;
QString myHelpFileName; QString myHelpFileName;
@ -147,7 +150,7 @@ private slots:
void onTextChange (const QString&); void onTextChange (const QString&);
void onSelectMesh (bool toSelectMesh); void onSelectMesh (bool toSelectMesh);
void onVectorChanged(); void onVectorChanged();
void onCopyChecked(bool isOn); void onActionClicked(int button);
protected: protected:
QGridLayout* SMESHGUI_RotationDlgLayout; QGridLayout* SMESHGUI_RotationDlgLayout;

View File

@ -52,6 +52,7 @@
#include "SVTK_Selector.h" #include "SVTK_Selector.h"
#include "SVTK_Selection.h" #include "SVTK_Selection.h"
#include "SALOME_ListIO.hxx" #include "SALOME_ListIO.hxx"
#include "SALOMEDSClient_SObject.hxx"
#include "utilities.h" #include "utilities.h"
@ -78,10 +79,13 @@
using namespace std; using namespace std;
enum { MOVE_ELEMS_BUTTON = 0, COPY_ELEMS_BUTTON, MAKE_MESH_BUTTON }; //!< action type
//================================================================================= //=================================================================================
// class : SMESHGUI_SymmetryDlg() // class : SMESHGUI_SymmetryDlg()
// purpose : // purpose :
//================================================================================= //=================================================================================
SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* name, SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* name,
bool modal, WFlags fl) bool modal, WFlags fl)
: QDialog( SMESH::GetDesktop( theModule ), name, modal, WStyle_Customize | WStyle_NormalBorder | : QDialog( SMESH::GetDesktop( theModule ), name, modal, WStyle_Customize | WStyle_NormalBorder |
@ -182,8 +186,9 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam
// Controls for elements selection // Controls for elements selection
TextLabelElements = new QLabel(GroupArguments, "TextLabelElements"); TextLabelElements = new QLabel(GroupArguments, "TextLabelElements");
TextLabelElements->setText(tr("SMESH_ID_ELEMENTS" )); TextLabelElements->setText(tr("SMESH_ID_ELEMENTS" ));
TextLabelElements->setFixedWidth(74); //TextLabelElements->setFixedWidth(74);
GroupArgumentsLayout->addWidget(TextLabelElements, 0, 0); GroupArgumentsLayout->addWidget(TextLabelElements, 0, 0);
//GroupArgumentsLayout->addMultiCellWidget(TextLabelElements, 0, 0, 0, 1);
SelectElementsButton = new QPushButton(GroupArguments, "SelectElementsButton"); SelectElementsButton = new QPushButton(GroupArguments, "SelectElementsButton");
SelectElementsButton->setText(tr("" )); SelectElementsButton->setText(tr("" ));
@ -191,14 +196,15 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam
SelectElementsButton->setToggleButton(FALSE); SelectElementsButton->setToggleButton(FALSE);
GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1); GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1);
LineEditElements = new QLineEdit(GroupArguments, "LineEditElements"); LineEditElements = new QLineEdit(GroupArguments, "LineEditElements");
LineEditElements->setValidator(new SMESHGUI_IdValidator(this, "validator")); LineEditElements->setValidator(new SMESHGUI_IdValidator(this, "validator"));
GroupArgumentsLayout->addWidget(LineEditElements, 0, 2); //GroupArgumentsLayout->addWidget(LineEditElements, 0, 3);
GroupArgumentsLayout->addMultiCellWidget(LineEditElements, 0, 0, 2, 4);
// Control for the whole mesh selection // Control for the whole mesh selection
CheckBoxMesh = new QCheckBox(GroupArguments, "CheckBoxMesh"); CheckBoxMesh = new QCheckBox(GroupArguments, "CheckBoxMesh");
CheckBoxMesh->setText(tr("SMESH_SELECT_WHOLE_MESH" )); CheckBoxMesh->setText(tr("SMESH_SELECT_WHOLE_MESH" ));
GroupArgumentsLayout->addMultiCellWidget(CheckBoxMesh, 1, 1, 0, 2); GroupArgumentsLayout->addMultiCellWidget(CheckBoxMesh, 1, 1, 0, 4);
// Controls for mirror selection // Controls for mirror selection
GroupMirror = new QGroupBox(GroupArguments, "GroupMirror"); GroupMirror = new QGroupBox(GroupArguments, "GroupMirror");
@ -251,6 +257,7 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam
TextLabelDX = new QLabel(GroupMirror, "TextLabelDX"); TextLabelDX = new QLabel(GroupMirror, "TextLabelDX");
TextLabelDX->setText(tr("SMESH_DX")); TextLabelDX->setText(tr("SMESH_DX"));
TextLabelDX->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
GroupMirrorLayout->addWidget(TextLabelDX, 1, 2); GroupMirrorLayout->addWidget(TextLabelDX, 1, 2);
SpinBox_DX = new SMESHGUI_SpinBox(GroupMirror, "SpinBox_DX"); SpinBox_DX = new SMESHGUI_SpinBox(GroupMirror, "SpinBox_DX");
@ -258,6 +265,7 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam
TextLabelDY = new QLabel(GroupMirror, "TextLabelDY"); TextLabelDY = new QLabel(GroupMirror, "TextLabelDY");
TextLabelDY->setText(tr("SMESH_DY")); TextLabelDY->setText(tr("SMESH_DY"));
TextLabelDY->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
GroupMirrorLayout->addWidget(TextLabelDY, 1, 4); GroupMirrorLayout->addWidget(TextLabelDY, 1, 4);
SpinBox_DY = new SMESHGUI_SpinBox(GroupMirror, "SpinBox_DY"); SpinBox_DY = new SMESHGUI_SpinBox(GroupMirror, "SpinBox_DY");
@ -265,22 +273,30 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam
TextLabelDZ = new QLabel(GroupMirror, "TextLabelDZ"); TextLabelDZ = new QLabel(GroupMirror, "TextLabelDZ");
TextLabelDZ->setText(tr("SMESH_DZ")); TextLabelDZ->setText(tr("SMESH_DZ"));
TextLabelDZ->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
GroupMirrorLayout->addWidget(TextLabelDZ, 1, 6); GroupMirrorLayout->addWidget(TextLabelDZ, 1, 6);
SpinBox_DZ = new SMESHGUI_SpinBox(GroupMirror, "SpinBox_DZ"); SpinBox_DZ = new SMESHGUI_SpinBox(GroupMirror, "SpinBox_DZ");
GroupMirrorLayout->addWidget(SpinBox_DZ, 1, 7); GroupMirrorLayout->addWidget(SpinBox_DZ, 1, 7);
GroupArgumentsLayout->addMultiCellWidget(GroupMirror, 2, 2, 0, 2); GroupArgumentsLayout->addMultiCellWidget(GroupMirror, 2, 2, 0, 4);
// Controls for "Create a copy" option // switch of action type
CheckBoxCopy = new QCheckBox(GroupArguments, "CheckBoxCopy"); ActionGroup = new QButtonGroup(1, Qt::Horizontal, GroupArguments, "ActionGroup");
CheckBoxCopy->setText(tr("SMESH_CREATE_COPY")); ActionGroup->setExclusive(true);
GroupArgumentsLayout->addMultiCellWidget(CheckBoxCopy, 3, 3, 0, 2); ActionGroup->insert(new QRadioButton(tr("SMESH_MOVE_ELEMENTS"),ActionGroup), MOVE_ELEMS_BUTTON);
ActionGroup->insert(new QRadioButton(tr("SMESH_COPY_ELEMENTS"),ActionGroup), COPY_ELEMS_BUTTON);
ActionGroup->insert(new QRadioButton(tr("SMESH_CREATE_MESH" ),ActionGroup), MAKE_MESH_BUTTON);
GroupArgumentsLayout->addMultiCellWidget(ActionGroup, 3, 5, 0, 3);
// CheckBox for groups generation // CheckBox for groups generation
MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments); MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments);
MakeGroupsCheck->setChecked(false); MakeGroupsCheck->setChecked(false);
GroupArgumentsLayout->addMultiCellWidget(MakeGroupsCheck, 4, 4, 0, 2); GroupArgumentsLayout->addWidget(MakeGroupsCheck, 4, 4);
// Name of a mesh to create
LineEditNewMesh = new QLineEdit(GroupArguments, "LineEditNewMesh");
GroupArgumentsLayout->addWidget(LineEditNewMesh, 5, 4);
SMESHGUI_SymmetryDlgLayout->addWidget(GroupArguments, 1, 0); SMESHGUI_SymmetryDlgLayout->addWidget(GroupArguments, 1, 0);
@ -335,12 +351,13 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam
connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(ClickOnCancel())); connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
connect(LineEditElements, SIGNAL(textChanged(const QString&)), SLOT(onTextChange(const QString&))); connect(LineEditElements, SIGNAL(textChanged(const QString&)), SLOT(onTextChange(const QString&)));
connect(CheckBoxMesh, SIGNAL(toggled(bool)), SLOT(onSelectMesh(bool))); connect(CheckBoxMesh, SIGNAL(toggled(bool)), SLOT(onSelectMesh(bool)));
connect(CheckBoxCopy, SIGNAL(toggled(bool)), SLOT(onCopyChecked(bool))); connect(ActionGroup, SIGNAL(clicked(int)), SLOT(onActionClicked(int)));
this->show(); /* displays Dialog */ this->show(); /* displays Dialog */
ConstructorsClicked(0); ConstructorsClicked(0);
SelectionIntoArgument(); SelectionIntoArgument();
onActionClicked(MOVE_ELEMS_BUTTON);
resize(0,0); // ?? resize(0,0); // ??
} }
@ -380,10 +397,10 @@ void SMESHGUI_SymmetryDlg::Init (bool ResetControls)
SpinBox_DY->SetValue(0.0); SpinBox_DY->SetValue(0.0);
SpinBox_DZ->SetValue(0.0); SpinBox_DZ->SetValue(0.0);
CheckBoxCopy->setChecked(false); ((QRadioButton*) ActionGroup->find( MOVE_ELEMS_BUTTON ))->setChecked(TRUE);
CheckBoxMesh->setChecked(false); CheckBoxMesh->setChecked(false);
MakeGroupsCheck->setChecked(false); // MakeGroupsCheck->setChecked(false);
MakeGroupsCheck->setEnabled(false); // MakeGroupsCheck->setEnabled(false);
onSelectMesh(false); onSelectMesh(false);
} }
} }
@ -485,7 +502,6 @@ void SMESHGUI_SymmetryDlg::ClickOnApply()
aMirror.vz = SpinBox_DZ->GetValue(); aMirror.vz = SpinBox_DZ->GetValue();
} }
bool toCreateCopy = CheckBoxCopy->isChecked();
SMESH::SMESH_MeshEditor::MirrorType aMirrorType; SMESH::SMESH_MeshEditor::MirrorType aMirrorType;
@ -496,20 +512,35 @@ void SMESHGUI_SymmetryDlg::ClickOnApply()
if (GetConstructorId() == 2) if (GetConstructorId() == 2)
aMirrorType = SMESH::SMESH_MeshEditor::PLANE; aMirrorType = SMESH::SMESH_MeshEditor::PLANE;
int actionButton = ActionGroup->id( ActionGroup->selected() );
bool makeGroups = ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() );
try { try {
SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
QApplication::setOverrideCursor(Qt::waitCursor); QApplication::setOverrideCursor(Qt::waitCursor);
if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ) switch ( actionButton ) {
SMESH::ListOfGroups_var groups = case MOVE_ELEMS_BUTTON:
aMeshEditor->MirrorMakeGroups(anElementsId, aMirror, aMirrorType); aMeshEditor->Mirror(anElementsId, aMirror, aMirrorType, false );
else break;
aMeshEditor->Mirror(anElementsId, aMirror, aMirrorType, toCreateCopy); case COPY_ELEMS_BUTTON:
if ( makeGroups )
SMESH::ListOfGroups_var groups =
aMeshEditor->MirrorMakeGroups(anElementsId, aMirror, aMirrorType);
else
aMeshEditor->Mirror(anElementsId, aMirror, aMirrorType, true);
break;
case MAKE_MESH_BUTTON:
SMESH::SMESH_Mesh_var mesh =
aMeshEditor->MirrorMakeMesh(anElementsId, aMirror, aMirrorType, makeGroups,
LineEditNewMesh->text().latin1());
}
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
} catch (...) { } catch (...) {
} }
SMESH::UpdateView(); SMESH::UpdateView();
if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ) if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ||
actionButton == MAKE_MESH_BUTTON )
mySMESHGUI->updateObjBrowser(true); // new groups may appear mySMESHGUI->updateObjBrowser(true); // new groups may appear
Init(false); Init(false);
ConstructorsClicked(GetConstructorId()); ConstructorsClicked(GetConstructorId());
@ -672,7 +703,7 @@ void SMESHGUI_SymmetryDlg::SelectionIntoArgument()
MakeGroupsCheck->setChecked(false); MakeGroupsCheck->setChecked(false);
MakeGroupsCheck->setEnabled(false); MakeGroupsCheck->setEnabled(false);
} }
else if (CheckBoxCopy->isChecked() ) { else if ( ActionGroup->id( ActionGroup->selected() ) != MOVE_ELEMS_BUTTON ) {
MakeGroupsCheck->setEnabled(true); MakeGroupsCheck->setEnabled(true);
} }
if (CheckBoxMesh->isChecked()) { if (CheckBoxMesh->isChecked()) {
@ -755,8 +786,10 @@ void SMESHGUI_SymmetryDlg::SelectionIntoArgument()
} }
myBusy = true; myBusy = true;
if (myEditCurrentArgument == (QWidget*)LineEditElements) if (myEditCurrentArgument == (QWidget*)LineEditElements) {
LineEditElements->setText(aString); LineEditElements->setText(aString);
setNewMeshName();
}
myBusy = false; myBusy = false;
// OK // OK
@ -949,16 +982,57 @@ void SMESHGUI_SymmetryDlg::onVectorChanged()
} }
//======================================================================= //=======================================================================
//function : onCopyChecked //function : onActionClicked
//purpose : slot called when Copy checkBox is checked //purpose : slot called when an action type changed
//======================================================================= //=======================================================================
void SMESHGUI_SymmetryDlg::onCopyChecked(bool isOn) void SMESHGUI_SymmetryDlg::onActionClicked(int button)
{ {
// enable "MakeGroupsCheck" switch ( button ) {
if ( !myMesh->_is_nil() && myMesh->NbGroups() == 0) case MOVE_ELEMS_BUTTON:
isOn = false; MakeGroupsCheck->setEnabled(false);
MakeGroupsCheck->setEnabled(isOn); LineEditNewMesh->setEnabled(false);
break;
case COPY_ELEMS_BUTTON:
LineEditNewMesh->setEnabled(false);
MakeGroupsCheck->setText( tr("SMESH_MAKE_GROUPS"));
if ( myMesh->_is_nil() || myMesh->NbGroups() > 0)
MakeGroupsCheck->setEnabled(true);
else
MakeGroupsCheck->setEnabled(false);
break;
case MAKE_MESH_BUTTON:
LineEditNewMesh->setEnabled(true);
MakeGroupsCheck->setText( tr("SMESH_COPY_GROUPS"));
if ( myMesh->_is_nil() || myMesh->NbGroups() > 0)
MakeGroupsCheck->setEnabled(true);
else
MakeGroupsCheck->setEnabled(false);
break;
}
setNewMeshName();
}
//=======================================================================
//function : setNewMeshName
//purpose : update contents of LineEditNewMesh
//=======================================================================
void SMESHGUI_SymmetryDlg::setNewMeshName()
{
LineEditNewMesh->setText("");
if ( LineEditNewMesh->isEnabled() && !myMesh->_is_nil() ) {
QString name;
if ( CheckBoxMesh->isChecked() ) {
name = LineEditElements->text();
}
else {
_PTR(SObject) meshSO = SMESH::FindSObject( myMesh );
name = meshSO->GetName();
}
if ( !name.isEmpty() )
LineEditNewMesh->setText( SMESH::UniqueMeshName( name.latin1(), "mirrored"));
}
} }
//================================================================================= //=================================================================================

View File

@ -81,6 +81,7 @@ private:
void keyPressEvent(QKeyEvent*); void keyPressEvent(QKeyEvent*);
int GetConstructorId(); int GetConstructorId();
bool IsMirrorOk(); bool IsMirrorOk();
void setNewMeshName();
SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */ SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */
LightApp_SelectionMgr* mySelectionMgr; /* User shape selection */ LightApp_SelectionMgr* mySelectionMgr; /* User shape selection */
@ -128,8 +129,10 @@ private:
QLabel* TextLabelDZ; QLabel* TextLabelDZ;
SMESHGUI_SpinBox* SpinBox_DZ; SMESHGUI_SpinBox* SpinBox_DZ;
QCheckBox* CheckBoxCopy; //QCheckBox* CheckBoxCopy;
QButtonGroup* ActionGroup;
QCheckBox* MakeGroupsCheck; QCheckBox* MakeGroupsCheck;
QLineEdit* LineEditNewMesh;
QString myHelpFileName; QString myHelpFileName;
@ -147,7 +150,7 @@ private:
void onTextChange(const QString&); void onTextChange(const QString&);
void onSelectMesh(bool toSelectMesh); void onSelectMesh(bool toSelectMesh);
void onVectorChanged(); void onVectorChanged();
void onCopyChecked(bool isOn); void onActionClicked(int button);
protected: protected:
QGridLayout* SMESHGUI_SymmetryDlgLayout; QGridLayout* SMESHGUI_SymmetryDlgLayout;

View File

@ -52,6 +52,7 @@
#include "SVTK_ViewWindow.h" #include "SVTK_ViewWindow.h"
#include "SVTK_Selector.h" #include "SVTK_Selector.h"
#include "SALOME_ListIO.hxx" #include "SALOME_ListIO.hxx"
#include "SALOMEDSClient_SObject.hxx"
#include "utilities.h" #include "utilities.h"
@ -79,6 +80,8 @@
using namespace std; using namespace std;
enum { MOVE_ELEMS_BUTTON = 0, COPY_ELEMS_BUTTON, MAKE_MESH_BUTTON }; //!< action type
//================================================================================= //=================================================================================
// class : SMESHGUI_TranslationDlg() // class : SMESHGUI_TranslationDlg()
// purpose : // purpose :
@ -181,7 +184,7 @@ SMESHGUI_TranslationDlg::SMESHGUI_TranslationDlg( SMESHGUI* theModule, const cha
SelectElementsButton->setToggleButton(FALSE); SelectElementsButton->setToggleButton(FALSE);
GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1); GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1);
LineEditElements = new QLineEdit(GroupArguments, "LineEditElements"); LineEditElements = new QLineEdit(GroupArguments, "LineEditElements");
LineEditElements->setValidator(new SMESHGUI_IdValidator(this, "validator")); LineEditElements->setValidator(new SMESHGUI_IdValidator(this, "validator"));
GroupArgumentsLayout->addMultiCellWidget(LineEditElements, 0, 0, 2, 7); GroupArgumentsLayout->addMultiCellWidget(LineEditElements, 0, 0, 2, 7);
@ -256,14 +259,26 @@ SMESHGUI_TranslationDlg::SMESHGUI_TranslationDlg( SMESHGUI* theModule, const cha
GroupArgumentsLayout->addWidget(SpinBox2_3, 3, 7); GroupArgumentsLayout->addWidget(SpinBox2_3, 3, 7);
// Controls for "Create a copy" option // Controls for "Create a copy" option
CheckBoxCopy = new QCheckBox(GroupArguments, "CheckBoxCopy"); // CheckBoxCopy = new QCheckBox(GroupArguments, "CheckBoxCopy");
CheckBoxCopy->setText(tr("SMESH_CREATE_COPY")); // CheckBoxCopy->setText(tr("SMESH_CREATE_COPY"));
GroupArgumentsLayout->addMultiCellWidget(CheckBoxCopy, 4, 4, 0, 2); // GroupArgumentsLayout->addMultiCellWidget(CheckBoxCopy, 4, 4, 0, 2);
// switch of action type
ActionGroup = new QButtonGroup(1, Qt::Horizontal, GroupArguments, "ActionGroup");
ActionGroup->setExclusive(true);
ActionGroup->insert(new QRadioButton(tr("SMESH_MOVE_ELEMENTS"),ActionGroup), MOVE_ELEMS_BUTTON);
ActionGroup->insert(new QRadioButton(tr("SMESH_COPY_ELEMENTS"),ActionGroup), COPY_ELEMS_BUTTON);
ActionGroup->insert(new QRadioButton(tr("SMESH_CREATE_MESH" ),ActionGroup), MAKE_MESH_BUTTON);
GroupArgumentsLayout->addMultiCellWidget(ActionGroup, 4, 6, 0, 3);
// CheckBox for groups generation // CheckBox for groups generation
MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments); MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments);
MakeGroupsCheck->setChecked(false); MakeGroupsCheck->setChecked(false);
GroupArgumentsLayout->addMultiCellWidget(MakeGroupsCheck, 5, 5, 0, 2); GroupArgumentsLayout->addMultiCellWidget(MakeGroupsCheck, 5, 5, 4, 7);
// Name of a mesh to create
LineEditNewMesh = new QLineEdit(GroupArguments, "LineEditNewMesh");
GroupArgumentsLayout->addMultiCellWidget(LineEditNewMesh, 6, 6, 4, 7);
SMESHGUI_TranslationDlgLayout->addWidget(GroupArguments, 1, 0); SMESHGUI_TranslationDlgLayout->addWidget(GroupArguments, 1, 0);
@ -314,12 +329,13 @@ SMESHGUI_TranslationDlg::SMESHGUI_TranslationDlg( SMESHGUI* theModule, const cha
connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel())); connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
connect(LineEditElements, SIGNAL(textChanged(const QString&)), SLOT(onTextChange(const QString&))); connect(LineEditElements, SIGNAL(textChanged(const QString&)), SLOT(onTextChange(const QString&)));
connect(CheckBoxMesh, SIGNAL(toggled(bool)), SLOT(onSelectMesh(bool))); connect(CheckBoxMesh, SIGNAL(toggled(bool)), SLOT(onSelectMesh(bool)));
connect(CheckBoxCopy, SIGNAL(toggled(bool)), SLOT(onCopyChecked(bool))); connect(ActionGroup, SIGNAL(clicked(int)), SLOT(onActionClicked(int)));
this->show(); /* displays Dialog */ this->show(); /* displays Dialog */
ConstructorsClicked(0); ConstructorsClicked(0);
SelectionIntoArgument(); SelectionIntoArgument();
onActionClicked(MOVE_ELEMS_BUTTON);
resize(0,0); // ?? resize(0,0); // ??
} }
@ -359,10 +375,10 @@ void SMESHGUI_TranslationDlg::Init (bool ResetControls)
SpinBox2_2->SetValue(0.0); SpinBox2_2->SetValue(0.0);
SpinBox2_3->SetValue(0.0); SpinBox2_3->SetValue(0.0);
CheckBoxCopy->setChecked(false); ((QRadioButton*) ActionGroup->find( MOVE_ELEMS_BUTTON ))->setChecked(TRUE);
CheckBoxMesh->setChecked(false); CheckBoxMesh->setChecked(false);
MakeGroupsCheck->setChecked(false); // MakeGroupsCheck->setChecked(false);
MakeGroupsCheck->setEnabled(false); // MakeGroupsCheck->setEnabled(false);
onSelectMesh(false); onSelectMesh(false);
} }
} }
@ -459,22 +475,34 @@ void SMESHGUI_TranslationDlg::ClickOnApply()
aVector.PS.z = SpinBox1_3->GetValue(); aVector.PS.z = SpinBox1_3->GetValue();
} }
bool toCreateCopy = CheckBoxCopy->isChecked(); int actionButton = ActionGroup->id( ActionGroup->selected() );
bool makeGroups = ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() );
try { try {
SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
QApplication::setOverrideCursor(Qt::waitCursor); QApplication::setOverrideCursor(Qt::waitCursor);
if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ) switch ( actionButton ) {
SMESH::ListOfGroups_var groups = case MOVE_ELEMS_BUTTON:
aMeshEditor->TranslateMakeGroups(anElementsId.inout(), aVector); aMeshEditor->Translate(anElementsId, aVector, false);
else break;
aMeshEditor->Translate(anElementsId.inout(), aVector, toCreateCopy); case COPY_ELEMS_BUTTON:
if ( makeGroups )
SMESH::ListOfGroups_var groups =
aMeshEditor->TranslateMakeGroups(anElementsId, aVector);
else
aMeshEditor->Translate(anElementsId, aVector, true);
break;
case MAKE_MESH_BUTTON:
SMESH::SMESH_Mesh_var mesh =
aMeshEditor->TranslateMakeMesh(anElementsId, aVector, makeGroups,
LineEditNewMesh->text().latin1());
}
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
} catch (...) { } catch (...) {
} }
SMESH::UpdateView(); SMESH::UpdateView();
if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ) if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ||
actionButton == MAKE_MESH_BUTTON )
mySMESHGUI->updateObjBrowser(true); // new groups may appear mySMESHGUI->updateObjBrowser(true); // new groups may appear
Init(false); Init(false);
ConstructorsClicked(GetConstructorId()); ConstructorsClicked(GetConstructorId());
@ -637,7 +665,7 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument()
MakeGroupsCheck->setChecked(false); MakeGroupsCheck->setChecked(false);
MakeGroupsCheck->setEnabled(false); MakeGroupsCheck->setEnabled(false);
} }
else if (CheckBoxCopy->isChecked() ) { else if ( ActionGroup->id( ActionGroup->selected() ) != MOVE_ELEMS_BUTTON ) {
MakeGroupsCheck->setEnabled(true); MakeGroupsCheck->setEnabled(true);
} }
@ -721,8 +749,10 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument()
} }
myBusy = true; myBusy = true;
if (myEditCurrentArgument == (QWidget*)LineEditElements) if (myEditCurrentArgument == (QWidget*)LineEditElements) {
LineEditElements->setText(aString); LineEditElements->setText(aString);
setNewMeshName();
}
myBusy = false; myBusy = false;
// OK // OK
@ -875,16 +905,57 @@ void SMESHGUI_TranslationDlg::onSelectMesh (bool toSelectMesh)
} }
//======================================================================= //=======================================================================
//function : onCopyChecked //function : onActionClicked
//purpose : slot called when Copy checkBox is checked //purpose : slot called when an action type changed
//======================================================================= //=======================================================================
void SMESHGUI_TranslationDlg::onCopyChecked(bool isOn) void SMESHGUI_TranslationDlg::onActionClicked(int button)
{ {
// enable "MakeGroupsCheck" switch ( button ) {
if ( !myMesh->_is_nil() && myMesh->NbGroups() == 0) case MOVE_ELEMS_BUTTON:
isOn = false; MakeGroupsCheck->setEnabled(false);
MakeGroupsCheck->setEnabled(isOn); LineEditNewMesh->setEnabled(false);
break;
case COPY_ELEMS_BUTTON:
LineEditNewMesh->setEnabled(false);
MakeGroupsCheck->setText( tr("SMESH_MAKE_GROUPS"));
if ( myMesh->_is_nil() || myMesh->NbGroups() > 0)
MakeGroupsCheck->setEnabled(true);
else
MakeGroupsCheck->setEnabled(false);
break;
case MAKE_MESH_BUTTON:
LineEditNewMesh->setEnabled(true);
MakeGroupsCheck->setText( tr("SMESH_COPY_GROUPS"));
if ( myMesh->_is_nil() || myMesh->NbGroups() > 0)
MakeGroupsCheck->setEnabled(true);
else
MakeGroupsCheck->setEnabled(false);
break;
}
setNewMeshName();
}
//=======================================================================
//function : setNewMeshName
//purpose : update contents of LineEditNewMesh
//=======================================================================
void SMESHGUI_TranslationDlg::setNewMeshName()
{
LineEditNewMesh->setText("");
if ( LineEditNewMesh->isEnabled() && !myMesh->_is_nil() ) {
QString name;
if ( CheckBoxMesh->isChecked() ) {
name = LineEditElements->text();
}
else {
_PTR(SObject) meshSO = SMESH::FindSObject( myMesh );
name = meshSO->GetName();
}
if ( !name.isEmpty() )
LineEditNewMesh->setText( SMESH::UniqueMeshName( name.latin1(), "translated"));
}
} }
//================================================================================= //=================================================================================

View File

@ -79,6 +79,7 @@ private:
void hideEvent (QHideEvent*); /* ESC key */ void hideEvent (QHideEvent*); /* ESC key */
void keyPressEvent(QKeyEvent*); void keyPressEvent(QKeyEvent*);
int GetConstructorId(); int GetConstructorId();
void setNewMeshName();
SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */ SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */
LightApp_SelectionMgr* mySelectionMgr; /* User shape selection */ LightApp_SelectionMgr* mySelectionMgr; /* User shape selection */
@ -123,8 +124,10 @@ private:
SMESHGUI_SpinBox* SpinBox2_2; SMESHGUI_SpinBox* SpinBox2_2;
QLabel* TextLabel2_3; QLabel* TextLabel2_3;
SMESHGUI_SpinBox* SpinBox2_3; SMESHGUI_SpinBox* SpinBox2_3;
QCheckBox* CheckBoxCopy; //QCheckBox* CheckBoxCopy;
QButtonGroup* ActionGroup;
QCheckBox* MakeGroupsCheck; QCheckBox* MakeGroupsCheck;
QLineEdit* LineEditNewMesh;
QString myHelpFileName; QString myHelpFileName;
@ -141,7 +144,7 @@ private:
void ActivateThisDialog() ; void ActivateThisDialog() ;
void onTextChange(const QString&); void onTextChange(const QString&);
void onSelectMesh(bool toSelectMesh); void onSelectMesh(bool toSelectMesh);
void onCopyChecked(bool isOn); void onActionClicked(int button);
protected: protected:
QGridLayout* SMESHGUI_TranslationDlgLayout; QGridLayout* SMESHGUI_TranslationDlgLayout;

View File

@ -2103,7 +2103,8 @@ SMESH_MeshEditor_i::mirror(const SMESH::long_array & theIDsOfElements,
const SMESH::AxisStruct & theAxis, const SMESH::AxisStruct & theAxis,
SMESH::SMESH_MeshEditor::MirrorType theMirrorType, SMESH::SMESH_MeshEditor::MirrorType theMirrorType,
CORBA::Boolean theCopy, CORBA::Boolean theCopy,
const bool theMakeGroups) const bool theMakeGroups,
::SMESH_Mesh* theTargetMesh)
{ {
initData(); initData();
@ -2127,7 +2128,7 @@ SMESH_MeshEditor_i::mirror(const SMESH::long_array & theIDsOfElements,
::SMESH_MeshEditor anEditor( myMesh ); ::SMESH_MeshEditor anEditor( myMesh );
::SMESH_MeshEditor::PGroupIDs groupIds = ::SMESH_MeshEditor::PGroupIDs groupIds =
anEditor.Transform (elements, aTrsf, theCopy, theMakeGroups); anEditor.Transform (elements, aTrsf, theCopy, theMakeGroups, theTargetMesh);
if(theCopy) { if(theCopy) {
storeResult(anEditor); storeResult(anEditor);
@ -2216,6 +2217,71 @@ SMESH_MeshEditor_i::MirrorObjectMakeGroups(SMESH::SMESH_IDSource_ptr t
return mirror(anElementsId, theMirror, theMirrorType, true, true); return mirror(anElementsId, theMirror, theMirrorType, true, true);
} }
//=======================================================================
//function : MirrorMakeMesh
//purpose :
//=======================================================================
SMESH::SMESH_Mesh_ptr
SMESH_MeshEditor_i::MirrorMakeMesh(const SMESH::long_array& theIDsOfElements,
const SMESH::AxisStruct& theMirror,
SMESH::SMESH_MeshEditor::MirrorType theMirrorType,
CORBA::Boolean theCopyGroups,
const char* theMeshName)
{
TPythonDump pydump; // to prevent dump at mesh creation
SMESH::SMESH_Mesh_var mesh = makeMesh( theMeshName );
if ( SMESH_Mesh_i* mesh_i = SMESH::DownCast<SMESH_Mesh_i*>( mesh ))
{
mirror(theIDsOfElements, theMirror, theMirrorType,
false, theCopyGroups, & mesh_i->GetImpl());
mesh_i->CreateGroupServants();
}
if ( !myPreviewMode ) {
pydump << mesh << " = " << this << ".MirrorMakeMesh( "
<< theIDsOfElements << ", "
<< theMirror << ", "
<< mirrorTypeName(theMirrorType) << ", "
<< theCopyGroups << ", '"
<< theMeshName << "' )";
}
return mesh._retn();
}
//=======================================================================
//function : MirrorObjectMakeMesh
//purpose :
//=======================================================================
SMESH::SMESH_Mesh_ptr
SMESH_MeshEditor_i::MirrorObjectMakeMesh(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::AxisStruct& theMirror,
SMESH::SMESH_MeshEditor::MirrorType theMirrorType,
CORBA::Boolean theCopyGroups,
const char* theMeshName)
{
TPythonDump pydump; // to prevent dump at mesh creation
SMESH::SMESH_Mesh_var mesh = makeMesh( theMeshName );
if ( SMESH_Mesh_i* mesh_i = SMESH::DownCast<SMESH_Mesh_i*>( mesh ))
{
SMESH::long_array_var anElementsId = theObject->GetIDs();
mirror(anElementsId, theMirror, theMirrorType,
false, theCopyGroups, & mesh_i->GetImpl());
mesh_i->CreateGroupServants();
}
if ( !myPreviewMode ) {
pydump << mesh << " = " << this << ".MirrorObjectMakeMesh( "
<< theObject << ", "
<< theMirror << ", "
<< mirrorTypeName(theMirrorType) << ", "
<< theCopyGroups << ", '"
<< theMeshName << "' )";
}
return mesh._retn();
}
//======================================================================= //=======================================================================
//function : translate //function : translate
@ -2226,7 +2292,8 @@ SMESH::ListOfGroups*
SMESH_MeshEditor_i::translate(const SMESH::long_array & theIDsOfElements, SMESH_MeshEditor_i::translate(const SMESH::long_array & theIDsOfElements,
const SMESH::DirStruct & theVector, const SMESH::DirStruct & theVector,
CORBA::Boolean theCopy, CORBA::Boolean theCopy,
const bool theMakeGroups) const bool theMakeGroups,
::SMESH_Mesh* theTargetMesh)
{ {
initData(); initData();
@ -2239,7 +2306,7 @@ SMESH_MeshEditor_i::translate(const SMESH::long_array & theIDsOfElements,
::SMESH_MeshEditor anEditor( myMesh ); ::SMESH_MeshEditor anEditor( myMesh );
::SMESH_MeshEditor::PGroupIDs groupIds = ::SMESH_MeshEditor::PGroupIDs groupIds =
anEditor.Transform (elements, aTrsf, theCopy, theMakeGroups); anEditor.Transform (elements, aTrsf, theCopy, theMakeGroups, theTargetMesh);
if(theCopy) if(theCopy)
storeResult(anEditor); storeResult(anEditor);
@ -2319,6 +2386,7 @@ SMESH_MeshEditor_i::TranslateObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObjec
const SMESH::DirStruct& theVector) const SMESH::DirStruct& theVector)
{ {
if ( !myPreviewMode ) { if ( !myPreviewMode ) {
TPythonDump() << "vector = " << theVector;
TPythonDump() << this << ".TranslateObjectMakeGroups( " TPythonDump() << this << ".TranslateObjectMakeGroups( "
<< theObject << theObject
<< ", vector )"; << ", vector )";
@ -2327,6 +2395,65 @@ SMESH_MeshEditor_i::TranslateObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObjec
return translate(anElementsId, theVector, true, true); return translate(anElementsId, theVector, true, true);
} }
//=======================================================================
//function : TranslateMakeMesh
//purpose :
//=======================================================================
SMESH::SMESH_Mesh_ptr
SMESH_MeshEditor_i::TranslateMakeMesh(const SMESH::long_array& theIDsOfElements,
const SMESH::DirStruct& theVector,
CORBA::Boolean theCopyGroups,
const char* theMeshName)
{
TPythonDump pydump; // to prevent dump at mesh creation
SMESH::SMESH_Mesh_var mesh = makeMesh( theMeshName );
if ( SMESH_Mesh_i* mesh_i = SMESH::DownCast<SMESH_Mesh_i*>( mesh )) {
translate(theIDsOfElements, theVector,
false, theCopyGroups, & mesh_i->GetImpl());
mesh_i->CreateGroupServants();
}
if ( !myPreviewMode ) {
pydump << mesh << " = " << this << ".TranslateMakeMesh( "
<< theIDsOfElements << ", "
<< theVector << ", "
<< theCopyGroups << ", '"
<< theMeshName << "' )";
}
return mesh._retn();
}
//=======================================================================
//function : TranslateObjectMakeMesh
//purpose :
//=======================================================================
SMESH::SMESH_Mesh_ptr
SMESH_MeshEditor_i::TranslateObjectMakeMesh(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::DirStruct& theVector,
CORBA::Boolean theCopyGroups,
const char* theMeshName)
{
TPythonDump pydump; // to prevent dump at mesh creation
SMESH::SMESH_Mesh_var mesh = makeMesh( theMeshName );
if ( SMESH_Mesh_i* mesh_i = SMESH::DownCast<SMESH_Mesh_i*>( mesh )) {
SMESH::long_array_var anElementsId = theObject->GetIDs();
translate(anElementsId, theVector,
false, theCopyGroups, & mesh_i->GetImpl());
mesh_i->CreateGroupServants();
}
if ( !myPreviewMode ) {
pydump << mesh << " = " << this << ".TranslateObjectMakeMesh( "
<< theObject << ", "
<< theVector << ", "
<< theCopyGroups << ", '"
<< theMeshName << "' )";
}
return mesh._retn();
}
//======================================================================= //=======================================================================
//function : rotate //function : rotate
//purpose : //purpose :
@ -2337,7 +2464,8 @@ SMESH_MeshEditor_i::rotate(const SMESH::long_array & theIDsOfElements,
const SMESH::AxisStruct & theAxis, const SMESH::AxisStruct & theAxis,
CORBA::Double theAngle, CORBA::Double theAngle,
CORBA::Boolean theCopy, CORBA::Boolean theCopy,
const bool theMakeGroups) const bool theMakeGroups,
::SMESH_Mesh* theTargetMesh)
{ {
initData(); initData();
@ -2352,7 +2480,7 @@ SMESH_MeshEditor_i::rotate(const SMESH::long_array & theIDsOfElements,
::SMESH_MeshEditor anEditor( myMesh ); ::SMESH_MeshEditor anEditor( myMesh );
::SMESH_MeshEditor::PGroupIDs groupIds = ::SMESH_MeshEditor::PGroupIDs groupIds =
anEditor.Transform (elements, aTrsf, theCopy, theMakeGroups); anEditor.Transform (elements, aTrsf, theCopy, theMakeGroups, theTargetMesh);
if(theCopy) { if(theCopy) {
storeResult(anEditor); storeResult(anEditor);
@ -2452,6 +2580,69 @@ SMESH_MeshEditor_i::RotateObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
return rotate(anElementsId,theAxis,theAngle,true,true); return rotate(anElementsId,theAxis,theAngle,true,true);
} }
//=======================================================================
//function : RotateMakeMesh
//purpose :
//=======================================================================
SMESH::SMESH_Mesh_ptr
SMESH_MeshEditor_i::RotateMakeMesh(const SMESH::long_array& theIDsOfElements,
const SMESH::AxisStruct& theAxis,
CORBA::Double theAngleInRadians,
CORBA::Boolean theCopyGroups,
const char* theMeshName)
{
TPythonDump pydump; // to prevent dump at mesh creation
SMESH::SMESH_Mesh_var mesh = makeMesh( theMeshName );
if ( SMESH_Mesh_i* mesh_i = SMESH::DownCast<SMESH_Mesh_i*>( mesh )) {
rotate(theIDsOfElements, theAxis, theAngleInRadians,
false, theCopyGroups, & mesh_i->GetImpl());
mesh_i->CreateGroupServants();
}
if ( !myPreviewMode ) {
pydump << mesh << " = " << this << ".RotateMakeMesh( "
<< theIDsOfElements << ", "
<< theAxis << ", "
<< theAngleInRadians << ", "
<< theCopyGroups << ", '"
<< theMeshName << "' )";
}
return mesh._retn();
}
//=======================================================================
//function : RotateObjectMakeMesh
//purpose :
//=======================================================================
SMESH::SMESH_Mesh_ptr
SMESH_MeshEditor_i::RotateObjectMakeMesh(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::AxisStruct& theAxis,
CORBA::Double theAngleInRadians,
CORBA::Boolean theCopyGroups,
const char* theMeshName)
{
TPythonDump pydump; // to prevent dump at mesh creation
SMESH::SMESH_Mesh_var mesh = makeMesh( theMeshName );
if ( SMESH_Mesh_i* mesh_i = SMESH::DownCast<SMESH_Mesh_i*>( mesh )) {
SMESH::long_array_var anElementsId = theObject->GetIDs();
rotate(anElementsId, theAxis, theAngleInRadians,
false, theCopyGroups, & mesh_i->GetImpl());
mesh_i->CreateGroupServants();
}
if ( !myPreviewMode ) {
pydump << mesh << " = " << this << ".RotateObjectMakeMesh( "
<< theObject << ", "
<< theAxis << ", "
<< theAngleInRadians << ", "
<< theCopyGroups << ", '"
<< theMeshName << "' )";
}
return mesh._retn();
}
//======================================================================= //=======================================================================
//function : FindCoincidentNodes //function : FindCoincidentNodes
//purpose : //purpose :
@ -3191,3 +3382,24 @@ CORBA::Boolean SMESH_MeshEditor_i::ConvertFromQuadratic()
TPythonDump() << this << ".ConvertFromQuadratic()"; TPythonDump() << this << ".ConvertFromQuadratic()";
return isDone; return isDone;
} }
//=======================================================================
//function : makeMesh
//purpose : create a named imported mesh
//=======================================================================
SMESH::SMESH_Mesh_ptr SMESH_MeshEditor_i::makeMesh(const char* theMeshName)
{
SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen();
SMESH::SMESH_Mesh_var mesh = gen->CreateEmptyMesh();
SALOMEDS::Study_var study = gen->GetCurrentStudy();
SALOMEDS::SObject_var meshSO = gen->ObjectToSObject( study, mesh );
gen->SetName( meshSO, theMeshName, "Mesh" );
SALOMEDS::StudyBuilder_var builder = study->NewBuilder();
SALOMEDS::GenericAttribute_var anAttr
= builder->FindOrCreateAttribute( meshSO, "AttributePixMap" );
SALOMEDS::AttributePixMap::_narrow( anAttr )->SetPixMap( "ICON_SMESH_TREE_MESH_IMPORTED" );
return mesh._retn();
}

View File

@ -311,6 +311,35 @@ class SMESH_MeshEditor_i: public POA_SMESH::SMESH_MeshEditor
const SMESH::AxisStruct& Axis, const SMESH::AxisStruct& Axis,
CORBA::Double AngleInRadians); CORBA::Double AngleInRadians);
SMESH::SMESH_Mesh_ptr MirrorMakeMesh(const SMESH::long_array& IDsOfElements,
const SMESH::AxisStruct& Mirror,
SMESH::SMESH_MeshEditor::MirrorType MirrorType,
CORBA::Boolean CopyGroups,
const char* MeshName);
SMESH::SMESH_Mesh_ptr MirrorObjectMakeMesh(SMESH::SMESH_IDSource_ptr Object,
const SMESH::AxisStruct& Mirror,
SMESH::SMESH_MeshEditor::MirrorType MirrorType,
CORBA::Boolean CopyGroups,
const char* MeshName);
SMESH::SMESH_Mesh_ptr TranslateMakeMesh(const SMESH::long_array& IDsOfElements,
const SMESH::DirStruct& Vector,
CORBA::Boolean CopyGroups,
const char* MeshName);
SMESH::SMESH_Mesh_ptr TranslateObjectMakeMesh(SMESH::SMESH_IDSource_ptr Object,
const SMESH::DirStruct& Vector,
CORBA::Boolean CopyGroups,
const char* MeshName);
SMESH::SMESH_Mesh_ptr RotateMakeMesh(const SMESH::long_array& IDsOfElements,
const SMESH::AxisStruct& Axis,
CORBA::Double AngleInRadians,
CORBA::Boolean CopyGroups,
const char* MeshName);
SMESH::SMESH_Mesh_ptr RotateObjectMakeMesh(SMESH::SMESH_IDSource_ptr Object,
const SMESH::AxisStruct& Axis,
CORBA::Double AngleInRadians,
CORBA::Boolean CopyGroups,
const char* MeshName);
void FindCoincidentNodes (CORBA::Double Tolerance, void FindCoincidentNodes (CORBA::Double Tolerance,
SMESH::array_of_long_array_out GroupsOfNodes); SMESH::array_of_long_array_out GroupsOfNodes);
void FindCoincidentNodesOnPart(SMESH::SMESH_IDSource_ptr Object, void FindCoincidentNodesOnPart(SMESH::SMESH_IDSource_ptr Object,
@ -442,16 +471,21 @@ private: //!< private methods
const SMESH::AxisStruct & Axis, const SMESH::AxisStruct & Axis,
SMESH::SMESH_MeshEditor::MirrorType MirrorType, SMESH::SMESH_MeshEditor::MirrorType MirrorType,
CORBA::Boolean Copy, CORBA::Boolean Copy,
const bool MakeGroups); const bool MakeGroups,
::SMESH_Mesh* TargetMesh=0);
SMESH::ListOfGroups* translate(const SMESH::long_array & IDsOfElements, SMESH::ListOfGroups* translate(const SMESH::long_array & IDsOfElements,
const SMESH::DirStruct & Vector, const SMESH::DirStruct & Vector,
CORBA::Boolean Copy, CORBA::Boolean Copy,
const bool MakeGroups); const bool MakeGroups,
::SMESH_Mesh* TargetMesh=0);
SMESH::ListOfGroups* rotate(const SMESH::long_array & IDsOfElements, SMESH::ListOfGroups* rotate(const SMESH::long_array & IDsOfElements,
const SMESH::AxisStruct & Axis, const SMESH::AxisStruct & Axis,
CORBA::Double Angle, CORBA::Double Angle,
CORBA::Boolean Copy, CORBA::Boolean Copy,
const bool MakeGroups); const bool MakeGroups,
::SMESH_Mesh* TargetMesh=0);
SMESH::SMESH_Mesh_ptr makeMesh(const char* theMeshName);
private: //!< fields private: //!< fields