X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_RotationDlg.cxx;h=d587855d3d6bc16cc6b153fa695af308df9196e7;hb=92c5811d43dbb5ba22d15fef38225104732c9b60;hp=8e5777b7afd47cbbea78daca46210c517af1ed99;hpb=57b43b4d010e2d0a1529d3c131bbb9d416e63258;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI_RotationDlg.cxx b/src/SMESHGUI/SMESHGUI_RotationDlg.cxx index 8e5777b7a..d587855d3 100644 --- a/src/SMESHGUI/SMESHGUI_RotationDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_RotationDlg.cxx @@ -17,7 +17,7 @@ // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // // @@ -51,6 +51,7 @@ #include "SVTK_Selector.h" #include "SVTK_Selection.h" #include "SALOME_ListIO.hxx" +#include "SALOMEDSClient_SObject.hxx" #include "utilities.h" @@ -73,9 +74,12 @@ // IDL Headers #include "SALOMEconfig.h" #include CORBA_SERVER_HEADER(SMESH_Group) +#include CORBA_SERVER_HEADER(SMESH_MeshEditor) using namespace std; +enum { MOVE_ELEMS_BUTTON = 0, COPY_ELEMS_BUTTON, MAKE_MESH_BUTTON }; //!< action type + //================================================================================= // class : SMESHGUI_RotationDlg() // purpose : @@ -87,7 +91,7 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam mySMESHGUI( theModule ), mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ) { - QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_DLG_ROTATION"))); + QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_DLG_MESH_ROTATION"))); QPixmap image1 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT"))); if (!name) @@ -174,7 +178,7 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam // Controls for elements selection TextLabelElements = new QLabel(GroupArguments, "TextLabelElements"); TextLabelElements->setText(tr("SMESH_ID_ELEMENTS" )); - TextLabelElements->setFixedWidth(74); + //TextLabelElements->setFixedWidth(74); GroupArgumentsLayout->addWidget(TextLabelElements, 0, 0); SelectElementsButton = new QPushButton(GroupArguments, "SelectElementsButton"); @@ -183,14 +187,14 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam SelectElementsButton->setToggleButton(FALSE); GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1); - LineEditElements = new QLineEdit(GroupArguments, "LineEditElements"); + LineEditElements = new QLineEdit(GroupArguments, "LineEditElements"); 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 CheckBoxMesh = new QCheckBox(GroupArguments, "CheckBoxMesh"); 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 GroupAxis = new QGroupBox(GroupArguments, "GroupAxis"); @@ -212,6 +216,7 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam GroupAxisLayout->addWidget(SelectPointButton, 0, 1); TextLabelX = new QLabel(GroupAxis, "TextLabelX"); + TextLabelX->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs ); TextLabelX->setText(tr("SMESH_X")); GroupAxisLayout->addWidget(TextLabelX, 0, 2); @@ -219,6 +224,7 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam GroupAxisLayout->addWidget(SpinBox_X, 0, 3); TextLabelY = new QLabel(GroupAxis, "TextLabelY"); + TextLabelY->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs ); TextLabelY->setText(tr("SMESH_Y")); GroupAxisLayout->addWidget(TextLabelY, 0, 4); @@ -226,6 +232,7 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam GroupAxisLayout->addWidget(SpinBox_Y, 0, 5); TextLabelZ = new QLabel(GroupAxis, "TextLabelZ"); + TextLabelZ->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs ); TextLabelZ->setText(tr("SMESH_Z")); GroupAxisLayout->addWidget(TextLabelZ, 0, 6); @@ -241,6 +248,7 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam GroupAxisLayout->addWidget(SelectVectorButton, 1, 1); TextLabelDX = new QLabel(GroupAxis, "TextLabelDX"); + TextLabelDX->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs ); TextLabelDX->setText(tr("SMESH_DX")); GroupAxisLayout->addWidget(TextLabelDX, 1, 2); @@ -248,6 +256,7 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam GroupAxisLayout->addWidget(SpinBox_DX, 1, 3); TextLabelDY = new QLabel(GroupAxis, "TextLabelDY"); + TextLabelDY->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs ); TextLabelDY->setText(tr("SMESH_DY")); GroupAxisLayout->addWidget(TextLabelDY, 1, 4); @@ -255,38 +264,50 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam GroupAxisLayout->addWidget(SpinBox_DY, 1, 5); TextLabelDZ = new QLabel(GroupAxis, "TextLabelDZ"); + TextLabelDZ->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs ); TextLabelDZ->setText(tr("SMESH_DZ")); GroupAxisLayout->addWidget(TextLabelDZ, 1, 6); SpinBox_DZ = new SMESHGUI_SpinBox(GroupAxis, "SpinBox_DZ"); GroupAxisLayout->addWidget(SpinBox_DZ, 1, 7); - GroupArgumentsLayout->addMultiCellWidget(GroupAxis, 2, 2, 0, 2); + GroupArgumentsLayout->addMultiCellWidget(GroupAxis, 2, 2, 0, 3); // Controls for angle defining TextLabelAngle = new QLabel(GroupArguments, "TextLabelAngle"); 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"); GroupArgumentsLayout->addWidget(SpinBox_Angle, 3, 2); - // Controls for "Create a copy" option - CheckBoxCopy = new QCheckBox(GroupArguments, "CheckBoxCopy"); - CheckBoxCopy->setText(tr("SMESH_CREATE_COPY")); - GroupArgumentsLayout->addMultiCellWidget(CheckBoxCopy, 4, 4, 0, 2); + // action switch + 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, 2); + + // CheckBox for groups generation + MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments); + 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); /* Initialisations */ - SpinBox_X->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_Y->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_Z->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_DX->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_DY->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_DZ->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); + SpinBox_X->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3); + SpinBox_Y->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3); + SpinBox_Z->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3); + SpinBox_DX->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3); + SpinBox_DY->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3); + SpinBox_DZ->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3); - SpinBox_Angle->RangeStepAndValidator(-999999.999, +999999.999, 5.0, 3); + SpinBox_Angle->RangeStepAndValidator(-360.0, +360.0, 5.0, 3); GroupArguments->show(); myConstructorId = 0; @@ -307,7 +328,7 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam myMeshOrSubMeshOrGroupFilter = new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR); - myHelpFileName = "/files/rotation.htm"; + myHelpFileName = "rotation_page.html"; Init(); @@ -332,10 +353,13 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel())); connect(LineEditElements, SIGNAL(textChanged(const QString&)), SLOT(onTextChange(const QString&))); connect(CheckBoxMesh, SIGNAL(toggled(bool)), SLOT(onSelectMesh(bool))); + connect(ActionGroup, SIGNAL(clicked(int)), SLOT(onActionClicked(int))); this->show(); /* displays Dialog */ ConstructorsClicked(0); + //SelectionIntoArgument(); + onActionClicked(MOVE_ELEMS_BUTTON); resize(0,0); // ?? } @@ -377,8 +401,11 @@ void SMESHGUI_RotationDlg::Init (bool ResetControls) SpinBox_Angle->SetValue(45); - CheckBoxCopy->setChecked(false); + ((QRadioButton*) ActionGroup->find( MOVE_ELEMS_BUTTON ))->setChecked(TRUE); CheckBoxMesh->setChecked(false); +// MakeGroupsCheck->setChecked(false); +// MakeGroupsCheck->setEnabled(false); +// onSelectMesh(false); } onSelectMesh(CheckBoxMesh->isChecked()); @@ -420,18 +447,37 @@ void SMESHGUI_RotationDlg::ClickOnApply() anAxis.vz = SpinBox_DZ->GetValue(); double anAngle = (SpinBox_Angle->GetValue())*PI/180; - bool toCreateCopy = CheckBoxCopy->isChecked(); - + int actionButton = ActionGroup->id( ActionGroup->selected() ); + bool makeGroups = ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ); try { SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); QApplication::setOverrideCursor(Qt::waitCursor); - aMeshEditor->Rotate(anElementsId.inout(), anAxis, anAngle, toCreateCopy); + switch ( actionButton ) { + case MOVE_ELEMS_BUTTON: + aMeshEditor->Rotate(anElementsId, anAxis, anAngle, false); + break; + 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(); } catch (...) { } SMESH::UpdateView(); + if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() || + actionButton == MAKE_MESH_BUTTON ) + mySMESHGUI->updateObjBrowser(true); // new groups may appear Init(false); + //ConstructorsClicked(GetConstructorId()); SelectionIntoArgument(); } } @@ -472,9 +518,15 @@ void SMESHGUI_RotationDlg::ClickOnHelp() if (app) app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName); else { + QString platform; +#ifdef WIN32 + platform = "winapplication"; +#else + platform = "application"; +#endif SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"), QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE"). - arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName), + arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName), QObject::tr("BUT_OK")); } } @@ -579,6 +631,14 @@ void SMESHGUI_RotationDlg::SelectionIntoArgument() if (myEditCurrentArgument == (QWidget*)LineEditElements) { myElementsId = ""; + // MakeGroups is available if there are groups and "Copy" + if ( myMesh->NbGroups() == 0 ) { + MakeGroupsCheck->setChecked(false); + MakeGroupsCheck->setEnabled(false); + } + else if ( ActionGroup->id( ActionGroup->selected() ) != MOVE_ELEMS_BUTTON ) { + MakeGroupsCheck->setEnabled(true); + } if (CheckBoxMesh->isChecked()) { SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); @@ -622,7 +682,7 @@ void SMESHGUI_RotationDlg::SelectionIntoArgument() aNbUnits = anElementsIds->length(); } } else { - aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, myActor->getIO(), aString); + aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, IO, aString); myElementsId = aString; } @@ -631,7 +691,7 @@ void SMESHGUI_RotationDlg::SelectionIntoArgument() myNbOkElements = true; } else { - aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, myActor->getIO(), aString); + aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString); if (aNbUnits != 1) return; @@ -659,8 +719,10 @@ void SMESHGUI_RotationDlg::SelectionIntoArgument() } myBusy = true; - if (myEditCurrentArgument == (QWidget*)LineEditElements) + if (myEditCurrentArgument == (QWidget*)LineEditElements) { LineEditElements->setText(aString); + setNewMeshName(); + } myBusy = false; // OK @@ -840,3 +902,75 @@ void SMESHGUI_RotationDlg::onVectorChanged() buttonApply->setEnabled(false); } } + + +//======================================================================= +//function : onActionClicked +//purpose : slot called when an action type changed +//======================================================================= + +void SMESHGUI_RotationDlg::onActionClicked(int button) +{ + switch ( button ) { + case MOVE_ELEMS_BUTTON: + MakeGroupsCheck->setEnabled(false); + 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")); + } +} + +//================================================================================= +// function : keyPressEvent() +// purpose : +//================================================================================= +void SMESHGUI_RotationDlg::keyPressEvent( QKeyEvent* e ) +{ + QDialog::keyPressEvent( e ); + if ( e->isAccepted() ) + return; + + if ( e->key() == Key_F1 ) + { + e->accept(); + ClickOnHelp(); + } +}