X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI.cxx;h=701fc912788e6222945be80026c75f8f859af560;hp=292815156b8546a59b5e40ff272997fa83fd853e;hb=ec98b49f0e5d5ef9109ba1965c02a86c7dfbbb45;hpb=14570f80e3fa5f4abce93a814405f3b3f930c2d3 diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 292815156..701fc9127 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -6,7 +6,7 @@ // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -44,6 +44,7 @@ #include "SMESHGUI_DuplicateNodesDlg.h" #include "SMESHGUI_ExtrusionAlongPathDlg.h" #include "SMESHGUI_ExtrusionDlg.h" +#include "SMESHGUI_FieldSelectorWdg.h" #include "SMESHGUI_FileInfoDlg.h" #include "SMESHGUI_FileValidator.h" #include "SMESHGUI_FilterDlg.h" @@ -63,6 +64,7 @@ #include "SMESHGUI_MeshPatternDlg.h" #include "SMESHGUI_MultiEditDlg.h" #include "SMESHGUI_NodesDlg.h" +#include "SMESHGUI_Operations.h" #include "SMESHGUI_Preferences_ScalarBarDlg.h" #include "SMESHGUI_PropertiesDlg.h" #include "SMESHGUI_RemoveElementsDlg.h" @@ -79,8 +81,11 @@ #include "SMESHGUI_SymmetryDlg.h" #include "SMESHGUI_TranslationDlg.h" #include "SMESHGUI_TransparencyDlg.h" +#include "SMESHGUI_DisplayEntitiesDlg.h" +#include "SMESHGUI_SplitBiQuad.h" #include "SMESHGUI_FilterUtils.h" +#include "SMESHGUI_GEOMGenUtils.h" #include "SMESHGUI_GroupUtils.h" #include "SMESHGUI_HypothesesUtils.h" #include "SMESHGUI_MeshUtils.h" @@ -88,14 +93,14 @@ #include "SMESHGUI_Utils.h" #include "SMESHGUI_VTKUtils.h" -#include +#include "SMESH_version.h" #include "SMESH_ControlsDef.hxx" -#include -#include -#include -#include -#include +#include "SMESH_Actor.h" +#include "SMESH_ActorUtils.h" +#include "SMESH_Client.hxx" +#include "SMESH_ScalarBarActor.h" +#include "SMESH_TypeFilter.hxx" // SALOME GUI includes #include @@ -127,7 +132,6 @@ #include #include -#include #ifndef DISABLE_PLOT2DVIEWER #include @@ -145,6 +149,11 @@ #include #include #include +#include +#include +#include +#include +#include // BOOST includes #include @@ -162,27 +171,26 @@ #include #include #include +#include +#include "utilities.h" // OCCT includes #include #include +#include #include -//To disable automatic genericobj management, the following line should be commented. -//Otherwise, it should be uncommented. -//Refer to KERNEL_SRC/src/SALOMEDSImpl/SALOMEDSImpl_AttributeIOR.cxx -#define WITHGENERICOBJ - // Below macro, when uncommented, switches on simplified (more performant) algorithm // of auto-color picking up #define SIMPLE_AUTOCOLOR -//namespace{ +namespace +{ // Declarations //============================================================= void ImportMeshesFromFile(SMESH::SMESH_Gen_ptr theComponentMesh, - int theCommandID); + int theCommandID); void ExportMeshToFile(int theCommandID); @@ -190,38 +198,46 @@ void SetDisplayEntity(int theCommandID); - void Control( int theCommandID ); + int ActionToControl( int theID, bool theReversed = false ); + void Control( int theCommandID ); // Definitions - //============================================================= + //================================================================================ + /*! + * \brief Reads meshes from file + */ + //================================================================================ + void ImportMeshesFromFile( SMESH::SMESH_Gen_ptr theComponentMesh, - int theCommandID ) + int theCommandID ) { QStringList filter; std::string myExtension; - if ( theCommandID == 113 ) { + if ( theCommandID == SMESHOp::OpImportMED ) { filter.append( QObject::tr( "MED_FILES_FILTER" ) + " (*.*med)" ); filter.append( QObject::tr( "ALL_FILES_FILTER" ) + " (*)" ); } - else if ( theCommandID == 112 ) { + else if ( theCommandID == SMESHOp::OpImportUNV ) { filter.append( QObject::tr( "IDEAS_FILES_FILTER" ) + " (*.unv)" ); } - else if ( theCommandID == 111 ) { + else if ( theCommandID == SMESHOp::OpImportDAT ) { filter.append( QObject::tr( "DAT_FILES_FILTER" ) + " (*.dat)" ); } - else if ( theCommandID == 115 ) { + else if ( theCommandID == SMESHOp::OpImportSTL ) { filter.append( QObject::tr( "STL_FILES_FILTER" ) + " (*.stl)" ); } - else if ( theCommandID == 116 ) { + #ifdef WITH_CGNS + else if ( theCommandID == SMESHOp::OpImportCGNS ) { filter.append( QObject::tr( "CGNS_FILES_FILTER" ) + " (*.cgns)" ); } - else if ( theCommandID == 117 ) { + #endif + else if ( theCommandID == SMESHOp::OpImportSAUV ) { filter.append( QObject::tr( "SAUV files (*.sauv*)" ) ); filter.append( QObject::tr( "All files (*)" ) ); } - else if ( theCommandID == 118 ) { + else if ( theCommandID == SMESHOp::OpImportGMF ) { filter.append( QObject::tr( "GMF_ASCII_FILES_FILTER" ) + " (*.mesh)" ); filter.append( QObject::tr( "GMF_BINARY_FILES_FILTER") + " (*.meshb)" ); } @@ -233,7 +249,7 @@ QStringList filenames; bool toCreateGroups = true; - // if ( theCommandID == 118 ) { // GMF + // if ( theCommandID == SMESHOp::OpImportGMF ) { // GMF // SalomeApp_CheckFileDlg* fd = new SalomeApp_CheckFileDlg // ( SMESHGUI::desktop(), true, QObject::tr("SMESH_REQUIRED_GROUPS"), true, true ); // fd->setWindowTitle( QObject::tr( "SMESH_IMPORT_MESH" ) ); @@ -252,85 +268,89 @@ filter, QObject::tr( "SMESH_IMPORT_MESH" ) ); } - if ( filenames.count() > 0 ) { + if ( filenames.count() > 0 ) + { SUIT_OverrideCursor wc; _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); QStringList errors; QStringList anEntryList; bool isEmpty = false; - for ( QStringList::ConstIterator it = filenames.begin(); it != filenames.end(); ++it ) { + for ( QStringList::ConstIterator it = filenames.begin(); it != filenames.end(); ++it ) + { QString filename = *it; SMESH::mesh_array_var aMeshes = new SMESH::mesh_array; try { switch ( theCommandID ) { - case 111: + case SMESHOp::OpImportDAT: { // DAT format (currently unsupported) errors.append( QString( "%1 :\n\t%2" ).arg( filename ). arg( QObject::tr( "SMESH_ERR_NOT_SUPPORTED_FORMAT" ) ) ); break; } - case 112: + case SMESHOp::OpImportUNV: { // UNV format aMeshes->length( 1 ); - aMeshes[0] = theComponentMesh->CreateMeshesFromUNV( filename.toLatin1().constData() ); + aMeshes[0] = theComponentMesh->CreateMeshesFromUNV( filename.toUtf8().constData() ); if ( aMeshes[0]->_is_nil() ) errors.append( QString( "%1 :\n\t%2" ).arg( filename ). arg( QObject::tr( "SMESH_ERR_UNKNOWN_IMPORT_ERROR" ) ) ); break; } - case 113: + case SMESHOp::OpImportMED: { // MED format SMESH::DriverMED_ReadStatus res; - aMeshes = theComponentMesh->CreateMeshesFromMED( filename.toLatin1().constData(), res ); + aMeshes = theComponentMesh->CreateMeshesFromMED( filename.toUtf8().constData(), res ); if ( res != SMESH::DRS_OK ) { errors.append( QString( "%1 :\n\t%2" ).arg( filename ). arg( QObject::tr( QString( "SMESH_DRS_%1" ).arg( res ).toLatin1().data() ) ) ); } break; } - case 115: + case SMESHOp::OpImportSTL: { // STL format aMeshes->length( 1 ); - aMeshes[0] = theComponentMesh->CreateMeshesFromSTL( filename.toLatin1().constData() ); + aMeshes[0] = theComponentMesh->CreateMeshesFromSTL( filename.toUtf8().constData() ); if ( aMeshes[0]->_is_nil() ) { errors.append( QString( "%1 :\n\t%2" ).arg( filename ). arg( QObject::tr( "SMESH_ERR_UNKNOWN_IMPORT_ERROR" ) ) ); } break; } - case 116: + #ifdef WITH_CGNS + case SMESHOp::OpImportCGNS: { // CGNS format SMESH::DriverMED_ReadStatus res; - aMeshes = theComponentMesh->CreateMeshesFromCGNS( filename.toLatin1().constData(), res ); + aMeshes = theComponentMesh->CreateMeshesFromCGNS( filename.toUtf8().constData(), res ); if ( res != SMESH::DRS_OK ) { errors.append( QString( "%1 :\n\t%2" ).arg( filename ). arg( QObject::tr( QString( "SMESH_DRS_%1" ).arg( res ).toLatin1().data() ) ) ); } break; } - case 117: + #endif + case SMESHOp::OpImportSAUV: { // SAUV format SMESH::DriverMED_ReadStatus res; - aMeshes = theComponentMesh->CreateMeshesFromSAUV( filename.toLatin1().constData(), res ); + aMeshes = theComponentMesh->CreateMeshesFromSAUV( filename.toUtf8().constData(), res ); if ( res != SMESH::DRS_OK ) { errors.append( QString( "%1 :\n\t%2" ).arg( filename ). arg( QObject::tr( QString( "SMESH_DRS_%1" ).arg( res ).toLatin1().data() ) ) ); } break; } - case 118: + case SMESHOp::OpImportGMF: { // GMF format SMESH::ComputeError_var res; aMeshes->length( 1 ); - aMeshes[0] = theComponentMesh->CreateMeshesFromGMF( filename.toLatin1().constData(), + aMeshes[0] = theComponentMesh->CreateMeshesFromGMF( filename.toUtf8().constData(), toCreateGroups, res.out() ); if ( res->code != SMESH::DRS_OK ) { @@ -350,21 +370,17 @@ arg( QObject::tr( "SMESH_ERR_UNKNOWN_IMPORT_ERROR" ) ) ); } - for ( int i = 0, iEnd = aMeshes->length(); i < iEnd; i++ ) { + for ( int i = 0, iEnd = aMeshes->length(); i < iEnd; i++ ) + { _PTR(SObject) aMeshSO = SMESH::FindSObject( aMeshes[i] ); if ( aMeshSO ) { _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder(); _PTR(AttributePixMap) aPixmap = aBuilder->FindOrCreateAttribute( aMeshSO, "AttributePixMap" ); aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH_IMPORTED" ); - if ( theCommandID == 112 ) // mesh names aren't taken from the file for UNV import + if ( theCommandID == SMESHOp::OpImportUNV ) // mesh names aren't taken from the file for UNV import SMESH::SetName( aMeshSO, QFileInfo(filename).fileName() ); anEntryList.append( aMeshSO->GetID().c_str() ); - - // obj has been published in study. Its refcount has been incremented. - // It is safe to decrement its refcount - // so that it will be destroyed when the entry in study will be removed - aMeshes[i]->UnRegister(); } else { isEmpty = true; @@ -409,34 +425,72 @@ if( aSel ) aSel->selectedObjects( selected ); - const bool isMED = ( theCommandID == 122 || theCommandID == 125 ); - const bool isDAT = ( theCommandID == 121 || theCommandID == 124 ); - const bool isUNV = ( theCommandID == 123 || theCommandID == 126 ); - const bool isSTL = ( theCommandID == 140 || theCommandID == 141 ); - const bool isCGNS= ( theCommandID == 142 || theCommandID == 143 ); - const bool isSAUV= ( theCommandID == 144 || theCommandID == 145 ); - const bool isGMF = ( theCommandID == 146 || theCommandID == 147 ); - - // actually, the following condition can't be met (added for insurance) - if( selected.Extent() == 0 || - ( selected.Extent() > 1 && !isMED && !isSTL )) - return; + const bool isDAT = ( theCommandID == SMESHOp::OpExportDAT || + theCommandID == SMESHOp::OpPopupExportDAT ); + const bool isMED = ( theCommandID == SMESHOp::OpExportMED || + theCommandID == SMESHOp::OpPopupExportMED ); + const bool isUNV = ( theCommandID == SMESHOp::OpExportUNV || + theCommandID == SMESHOp::OpPopupExportUNV ); + const bool isSTL = ( theCommandID == SMESHOp::OpExportSTL || + theCommandID == SMESHOp::OpPopupExportSTL ); +#ifdef WITH_CGNS + const bool isCGNS= ( theCommandID == SMESHOp::OpExportCGNS || + theCommandID == SMESHOp::OpPopupExportCGNS ); +#else + const bool isCGNS= false; +#endif + const bool isSAUV= ( theCommandID == SMESHOp::OpExportSAUV || + theCommandID == SMESHOp::OpPopupExportSAUV ); + const bool isGMF = ( theCommandID == SMESHOp::OpExportGMF || + theCommandID == SMESHOp::OpPopupExportGMF ); + const bool multiMeshSupported = ( isMED || isCGNS ); // file can hold several meshes + if ( selected.Extent() == 0 || ( selected.Extent() > 1 && !multiMeshSupported )) + return; + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + bool aCheckWarn = true; + if ( resMgr ) + aCheckWarn = resMgr->booleanValue( "SMESH", "show_warning", false ); // get mesh object from selection and check duplication of their names bool hasDuplicatedMeshNames = false; - QList< QPair< SMESH::SMESH_IDSource_var, QString > > aMeshList; + QList< QPair< SMESH::SMESH_IDSource_var, QString > > aMeshList; QList< QPair< SMESH::SMESH_IDSource_var, QString > >::iterator aMeshIter; SALOME_ListIteratorOfListIO It( selected ); for( ; It.More(); It.Next() ) { Handle(SALOME_InteractiveObject) anIObject = It.Value(); - SMESH::SMESH_IDSource_var aMeshItem = SMESH::IObjectToInterface(anIObject); + SMESH::SMESH_IDSource_var aMeshItem = + SMESH::IObjectToInterface(anIObject); if ( aMeshItem->_is_nil() ) { SUIT_MessageBox::warning( SMESHGUI::desktop(), QObject::tr( "SMESH_WRN_WARNING" ), QObject::tr( "SMESH_BAD_MESH_SELECTION" )); return; } + SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( aMeshItem ); + if ( aCheckWarn && !aGroup->_is_nil() ) { + QMessageBox msgBox(SUIT_MessageBox::Warning,QObject::tr("SMESH_WRN_WARNING"), + QObject::tr("SMESH_EXPORT_ONLY_GPOUP"),QMessageBox::StandardButton::NoButton, SMESHGUI::desktop()); + QCheckBox dontShowCheckBox(QObject::tr("SMESH_WRN_SHOW_DLG_CHECKBOX")); + msgBox.addButton(QMessageBox::Ok); + msgBox.addButton(QMessageBox::Cancel); + msgBox.setDefaultButton(QMessageBox::Cancel); + QGridLayout* lt = qobject_cast(msgBox.layout()); + QDialogButtonBox* btnbox = msgBox.findChild(); + lt->addWidget(&dontShowCheckBox, lt->rowCount(), lt->columnCount()-1, lt->rowCount(), lt->columnCount()); + lt->addWidget(btnbox, lt->rowCount(), 0, lt->rowCount(), lt->columnCount()); + if(msgBox.exec() == QMessageBox::Ok) + { + if(dontShowCheckBox.checkState() == Qt::Checked) + { + if ( resMgr ) + resMgr->setValue( "SMESH", "show_warning", false); + } + aCheckWarn = false; + } + else + return; + } QString aMeshName = anIObject->getName(); @@ -518,7 +572,6 @@ { format = "CGNS"; notSupportedElemTypes.push_back( SMESH::Entity_Ball ); - notSupportedElemTypes.push_back( SMESH::Entity_BiQuad_Triangle ); } else if ( isSAUV ) { @@ -529,6 +582,7 @@ notSupportedElemTypes.push_back( SMESH::Entity_TriQuad_Hexa ); notSupportedElemTypes.push_back( SMESH::Entity_Hexagonal_Prism ); notSupportedElemTypes.push_back( SMESH::Entity_Polygon ); + notSupportedElemTypes.push_back( SMESH::Entity_Quad_Polygon ); notSupportedElemTypes.push_back( SMESH::Entity_Polyhedra ); } else if ( isGMF ) @@ -554,7 +608,7 @@ if ( !presentNotSupported.empty() ) { QString typeNames; - const char* typeMsg[SMESH::Entity_Last] = { + const char* typeMsg[] = { "SMESH_NODES", "SMESH_ELEMS0D","SMESH_EDGES","SMESH_QUADRATIC_EDGES", "SMESH_TRIANGLES", "SMESH_QUADRATIC_TRIANGLES", "SMESH_BIQUADRATIC_TRIANGLES", "SMESH_QUADRANGLES","SMESH_QUADRATIC_QUADRANGLES", "SMESH_BIQUADRATIC_QUADRANGLES", @@ -564,6 +618,10 @@ "SMESH_TRIQUADRATIC_HEXAHEDRONS","SMESH_PENTAHEDRA","SMESH_QUADRATIC_PENTAHEDRONS", "SMESH_OCTAHEDRA","SMESH_POLYEDRONS","SMESH_QUADRATIC_POLYEDRONS","SMESH_BALLS" }; + // is typeMsg complete? (compilation failure mains that enum SMDSAbs_EntityType changed) + const int nbTypes = sizeof( typeMsg ) / sizeof( const char* ); + int _assert[( nbTypes == SMESH::Entity_Last ) ? 2 : -1 ]; _assert[0]=_assert[1]; + QString andStr = " " + QObject::tr("SMESH_AND") + " ", comma(", "); for ( size_t iType = 0; iType < presentNotSupported.size(); ++iType ) { typeNames += QObject::tr( typeMsg[ presentNotSupported[ iType ]]); @@ -583,14 +641,13 @@ // Get parameters of export operation QString aFilename; - SMESH::MED_VERSION aFormat; + SMESH::MED_VERSION aFormat = SMESH::MED_V2_2; // Init the parameters with the default values bool aIsASCII_STL = true; bool toCreateGroups = false; - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); if ( resMgr ) toCreateGroups = resMgr->booleanValue( "SMESH", "auto_groups", false ); - bool toOverwrite = true; + bool toOverwrite = true; bool toFindOutDim = true; QString aFilter, aTitle = QObject::tr("SMESH_EXPORT_MESH"); @@ -598,6 +655,8 @@ if ( SUIT_FileDlg::getLastVisitedPath().isEmpty() ) anInitialPath = QDir::currentPath(); + QList< QPair< GEOM::ListOfFields_var, QString > > aFieldList; + // Get a file name to write in and additional otions if ( isUNV || isDAT || isGMF ) // Export w/o options { @@ -683,16 +742,31 @@ QStringList checkBoxes; checkBoxes << QObject::tr("SMESH_AUTO_GROUPS") << QObject::tr("SMESH_AUTO_DIM"); + SMESHGUI_FieldSelectorWdg* fieldSelWdg = new SMESHGUI_FieldSelectorWdg(); + QList< QWidget* > wdgList; + if ( fieldSelWdg->GetAllFeilds( aMeshList, aFieldList )) + wdgList.append( fieldSelWdg ); + SalomeApp_CheckFileDlg* fd = - new SalomeApp_CheckFileDlg ( SMESHGUI::desktop(), false, checkBoxes, true, true ); + new SalomeApp_CheckFileDlg ( SMESHGUI::desktop(), false, checkBoxes, true, true, wdgList ); fd->setWindowTitle( aTitle ); fd->setNameFilters( filters ); - fd->selectNameFilter(aDefaultFilter); - fd->SetChecked(0,toCreateGroups); - fd->SetChecked(1,toFindOutDim); + fd->selectNameFilter( aDefaultFilter ); + fd->SetChecked( toCreateGroups, 0 ); + fd->SetChecked( toFindOutDim, 1 ); if ( !anInitialPath.isEmpty() ) fd->setDirectory( anInitialPath ); fd->selectFile(aMeshName); + + + QListView *lview = fd->findChild("listView"); + if( lview ) { + lview->setMinimumHeight(200); + } + QTreeView *tview = fd->findChild("treeView"); + if( tview ) { + tview->setMinimumHeight(200); + } SMESHGUI_FileValidator* fv = new SMESHGUI_FileValidator( fd ); fd->setValidator( fv ); @@ -731,7 +805,7 @@ if( !toOverwrite ) { // can't append to an existing using other format SMESH::MED_VERSION aVersion = SMESH::MED_V2_1; - bool isVersionOk = SMESHGUI::GetSMESHGen()->GetMEDVersion( aFilename.toLatin1().constData(), aVersion ); + bool isVersionOk = SMESHGUI::GetSMESHGen()->GetMEDVersion( aFilename.toUtf8().constData(), aVersion ); if( !isVersionOk || aVersion != aFormat ) { int aRet = SUIT_MessageBox::warning(SMESHGUI::desktop(), QObject::tr("SMESH_WRN_WARNING"), @@ -745,7 +819,7 @@ } QStringList aMeshNamesCollisionList; - SMESH::string_array_var aMeshNames = SMESHGUI::GetSMESHGen()->GetMeshNames( aFilename.toLatin1().constData() ); + SMESH::string_array_var aMeshNames = SMESHGUI::GetSMESHGen()->GetMeshNames( aFilename.toUtf8().constData() ); for( int i = 0, n = aMeshNames->length(); i < n; i++ ) { QString anExistingMeshName( aMeshNames[ i ] ); for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ ) { @@ -774,6 +848,9 @@ } toCreateGroups = fd->IsChecked(0); toFindOutDim = fd->IsChecked(1); + fieldSelWdg->GetSelectedFeilds(); + if ( !fieldSelWdg->parent() ) + delete fieldSelWdg; delete fd; } else @@ -810,12 +887,16 @@ { SMESH::SMESH_IDSource_var aMeshOrGroup = (*aMeshIter).first; SMESH::SMESH_Mesh_var aMeshItem = aMeshOrGroup->GetMesh(); - if ( aMeshOrGroup->_is_equivalent( aMeshItem )) - aMeshItem->ExportToMEDX( aFilename.toLatin1().data(), toCreateGroups, + const GEOM::ListOfFields& fields = aFieldList[ aMeshIndex ].first.in(); + const QString& geoAssFields = aFieldList[ aMeshIndex ].second; + const bool hasFields = ( fields.length() || !geoAssFields.isEmpty() ); + if ( !hasFields && aMeshOrGroup->_is_equivalent( aMeshItem )) + aMeshItem->ExportToMEDX( aFilename.toUtf8().data(), toCreateGroups, aFormat, toOverwrite && aMeshIndex == 0, toFindOutDim ); else - aMeshItem->ExportPartToMED( aMeshOrGroup, aFilename.toLatin1().data(), toCreateGroups, - aFormat, toOverwrite && aMeshIndex == 0, toFindOutDim ); + aMeshItem->ExportPartToMED( aMeshOrGroup, aFilename.toUtf8().data(), toCreateGroups, + aFormat, toOverwrite && aMeshIndex == 0, toFindOutDim, + fields, geoAssFields.toLatin1().data() ); } } else if ( isSAUV ) @@ -824,29 +905,29 @@ { SMESH::SMESH_Mesh_var aMeshItem = SMESH::SMESH_Mesh::_narrow( (*aMeshIter).first ); if( !aMeshItem->_is_nil() ) - aMeshItem->ExportSAUV( aFilename.toLatin1().data(), toCreateGroups ); + aMeshItem->ExportSAUV( aFilename.toUtf8().data(), toCreateGroups ); } } else if ( isDAT ) { if ( aMeshOrGroup->_is_equivalent( aMesh )) - aMesh->ExportDAT( aFilename.toLatin1().data() ); + aMesh->ExportDAT( aFilename.toUtf8().data() ); else - aMesh->ExportPartToDAT( aMeshOrGroup, aFilename.toLatin1().data() ); + aMesh->ExportPartToDAT( aMeshOrGroup, aFilename.toUtf8().data() ); } else if ( isUNV ) { if ( aMeshOrGroup->_is_equivalent( aMesh )) - aMesh->ExportUNV( aFilename.toLatin1().data() ); + aMesh->ExportUNV( aFilename.toUtf8().data() ); else - aMesh->ExportPartToUNV( aMeshOrGroup, aFilename.toLatin1().data() ); + aMesh->ExportPartToUNV( aMeshOrGroup, aFilename.toUtf8().data() ); } else if ( isSTL ) { if ( aMeshOrGroup->_is_equivalent( aMesh )) - aMesh->ExportSTL( aFilename.toLatin1().data(), aIsASCII_STL ); + aMesh->ExportSTL( aFilename.toUtf8().data(), aIsASCII_STL ); else - aMesh->ExportPartToSTL( aMeshOrGroup, aFilename.toLatin1().data(), aIsASCII_STL ); + aMesh->ExportPartToSTL( aMeshOrGroup, aFilename.toUtf8().data(), aIsASCII_STL ); } else if ( isCGNS ) { @@ -856,14 +937,14 @@ SMESH::SMESH_IDSource_var aMeshOrGroup = (*aMeshIter).first; SMESH::SMESH_Mesh_var aMeshItem = aMeshOrGroup->GetMesh(); aMeshItem->ExportCGNS( aMeshOrGroup, - aFilename.toLatin1().data(), + aFilename.toUtf8().data(), toOverwrite && aMeshIndex == 0 ); } } else if ( isGMF ) { toCreateGroups = true; - aMesh->ExportGMF( aMeshOrGroup, aFilename.toLatin1().data(), toCreateGroups ); + aMesh->ExportGMF( aMeshOrGroup, aFilename.toUtf8().data(), toCreateGroups ); } } catch (const SALOME::SALOME_Exception& S_ex){ @@ -877,7 +958,7 @@ } inline void InverseEntityMode(unsigned int& theOutputMode, - unsigned int theMode) + unsigned int theMode) { bool anIsNotPresent = ~theOutputMode & theMode; if(anIsNotPresent) @@ -886,13 +967,14 @@ theOutputMode &= ~theMode; } - void SetDisplayEntity(int theCommandID){ + void SetDisplayEntity(int theCommandID) + { LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; - if( aSel ) + if ( aSel ) aSel->selectedObjects( selected ); - if(selected.Extent() >= 1){ + if ( selected.Extent() >= 1 ) { SALOME_ListIteratorOfListIO It( selected ); for( ; It.More(); It.Next()){ Handle(SALOME_InteractiveObject) IObject = It.Value(); @@ -900,24 +982,12 @@ if(SMESH_Actor *anActor = SMESH::FindActorByEntry(IObject->getEntry())){ unsigned int aMode = anActor->GetEntityMode(); switch(theCommandID){ - case 222: - InverseEntityMode(aMode,SMESH_Actor::eBallElem); - break; - case 216: - InverseEntityMode(aMode,SMESH_Actor::e0DElements); - break; - case 217: - InverseEntityMode(aMode,SMESH_Actor::eEdges); - break; - case 218: - InverseEntityMode(aMode,SMESH_Actor::eFaces); - break; - case 219: - InverseEntityMode(aMode,SMESH_Actor::eVolumes); - break; - case 220: - aMode = SMESH_Actor::eAllEntity; - break; + case SMESHOp::OpDE0DElements: InverseEntityMode(aMode,SMESH_Actor::e0DElements); break; + case SMESHOp::OpDEEdges: InverseEntityMode(aMode,SMESH_Actor::eEdges); break; + case SMESHOp::OpDEFaces: InverseEntityMode(aMode,SMESH_Actor::eFaces); break; + case SMESHOp::OpDEVolumes: InverseEntityMode(aMode,SMESH_Actor::eVolumes); break; + case SMESHOp::OpDEBalls: InverseEntityMode(aMode,SMESH_Actor::eBallElem); break; + case SMESHOp::OpDEAllEntity: aMode = SMESH_Actor::eAllEntity; break; } if(aMode) anActor->SetEntityMode(aMode); @@ -927,51 +997,55 @@ } } - void AutoColor(){ - SALOME_ListIO selected; - SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); - if( !app ) + void AutoColor() + { + SalomeApp_Application* app = + dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if ( !app ) return; LightApp_SelectionMgr* aSel = app->selectionMgr(); SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); - if( !aSel || !appStudy ) + if ( !aSel || !appStudy ) return; + SALOME_ListIO selected; aSel->selectedObjects( selected ); - if( selected.IsEmpty() ) + if ( selected.IsEmpty() ) return; Handle(SALOME_InteractiveObject) anIObject = selected.First(); - _PTR(Study) aStudy = appStudy->studyDS(); - _PTR(SObject) aMainSObject( aStudy->FindObjectID( anIObject->getEntry() ) ); + _PTR(Study) aStudy = appStudy->studyDS(); + _PTR(SObject) aMainSObject = aStudy->FindObjectID( anIObject->getEntry() ); SMESH::SMESH_Mesh_var aMainObject = SMESH::IObjectToInterface(anIObject); - if( aMainObject->_is_nil() ) + if ( aMainObject->_is_nil() ) return; + SUIT_OverrideCursor wc; + aMainObject->SetAutoColor( true ); // mesh groups are re-colored here QList aReservedColors; SMESH::ListOfGroups aListOfGroups = *aMainObject->GetGroups(); - for( int i = 0, n = aListOfGroups.length(); i < n; i++ ) + for ( int i = 0, n = aListOfGroups.length(); i < n; i++ ) { SMESH::SMESH_GroupBase_var aGroupObject = aListOfGroups[i]; - //SALOMEDS::Color aColor = aGroupObject->GetColor(); - + #ifdef SIMPLE_AUTOCOLOR // simplified algorithm for auto-colors SALOMEDS::Color aColor = SMESHGUI::getPredefinedUniqueColor(); #else // old algorithm for auto-colors SALOMEDS::Color aColor = SMESHGUI::getUniqueColor( aReservedColors ); aReservedColors.append( aColor ); #endif // SIMPLE_AUTOCOLOR + aGroupObject->SetColor( aColor ); _PTR(SObject) aGroupSObject = SMESH::FindSObject(aGroupObject); - if (aGroupSObject) { + if ( aGroupSObject ) { QColor c; int delta; - if(SMESH_Actor *anActor = SMESH::FindActorByEntry(aGroupSObject->GetID().c_str())) { + if ( SMESH_Actor *anActor = SMESH::FindActorByEntry(aGroupSObject->GetID().c_str())) { switch ( aGroupObject->GetType ()) { case SMESH::NODE: anActor->SetNodeColor( aColor.R, aColor.G, aColor.B ); break; @@ -996,13 +1070,14 @@ SMESH::RepaintCurrentView(); } - void OverallMeshQuality() { + void OverallMeshQuality() + { SMESHGUI::GetSMESHGUI()->EmitSignalDeactivateDialog(); LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if( aSel ) aSel->selectedObjects( selected ); - + if ( selected.IsEmpty() ) return; SALOME_ListIteratorOfListIO It( selected ); for ( ; It.More(); It.Next() ) { @@ -1081,11 +1156,15 @@ Handle(SALOME_InteractiveObject) anIO = selected.First(); if ( anIO->hasEntry() ) { SMESH_Actor* anActor = SMESH::FindActorByEntry( anIO->getEntry() ); - if ( anActor && anActor->GetScalarBarActor() && anActor->GetControlMode() != SMESH_Actor::eNone ) { + if ( anActor && + anActor->GetScalarBarActor() && + anActor->GetControlMode() != SMESH_Actor::eNone ) + { SMESH_ScalarBarActor* aScalarBarActor = anActor->GetScalarBarActor(); SMESH::Controls::FunctorPtr aFunctor = anActor->GetFunctor(); if ( aScalarBarActor && aFunctor ) { - SMESH::Controls::NumericalFunctor* aNumFun = dynamic_cast( aFunctor.get() ); + SMESH::Controls::NumericalFunctor* aNumFun = + dynamic_cast( aFunctor.get() ); if ( aNumFun ) { std::vector elements; SMESH::SMESH_Mesh_var mesh = SMESH::IObjectToInterface(anIO); @@ -1107,7 +1186,8 @@ bool isLogarithmic = lookupTable->GetScale() == VTK_SCALE_LOG10; std::vector nbEvents; std::vector funValues; - aNumFun->GetHistogram( nbIntervals, nbEvents, funValues, elements, minmax, isLogarithmic ); + aNumFun->GetHistogram( nbIntervals, nbEvents, funValues, + elements, minmax, isLogarithmic ); QString anInitialPath = ""; if ( SUIT_FileDlg::getLastVisitedPath().isEmpty() ) anInitialPath = QDir::currentPath(); @@ -1115,7 +1195,7 @@ QStringList filter; filter.append( QObject::tr( "TEXT_FILES_FILTER" ) + " (*.txt)" ); filter.append( QObject::tr( "ALL_FILES_FILTER" ) + " (*)" ); - QString aFilename = anInitialPath + "/" + aMeshName + "_" + + QString aFilename = anInitialPath + "/" + aMeshName + "_" + functorToString( aFunctor ).toLower().simplified().replace( QRegExp( " |-" ), "_" ) + ".txt"; aFilename = SUIT_FileDlg::getFileName( SMESHGUI::desktop(), aFilename, @@ -1130,7 +1210,7 @@ out << "# Control: " << functorToString( aFunctor ) << endl; out << "#" << endl; out.setFieldWidth( 10 ); - for ( int i = 0; i < qMin( nbEvents.size(), funValues.size()-1 ); i++ ) + for ( int i = 0; i < (int)qMin( nbEvents.size(), funValues.size()-1 ); i++ ) out << funValues[i] << "\t" << funValues[i+1] << "\t" << nbEvents[i] << endl; f.close(); } @@ -1142,77 +1222,90 @@ } } - void ShowDistribution() { + void ShowElement( int theCommandID ) + { LightApp_SelectionMgr* aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if ( aSel ) aSel->selectedObjects( selected ); - + if ( selected.Extent() == 1 ) { Handle(SALOME_InteractiveObject) anIO = selected.First(); if ( anIO->hasEntry() ) { SMESH_Actor* anActor = SMESH::FindActorByEntry( anIO->getEntry() ); - if ( anActor && anActor->GetScalarBarActor() && anActor->GetControlMode() != SMESH_Actor::eNone ) { + if ( anActor && + anActor->GetScalarBarActor() && + anActor->GetControlMode() != SMESH_Actor::eNone ) + { SMESH_ScalarBarActor *aScalarBarActor = anActor->GetScalarBarActor(); - aScalarBarActor->SetDistributionVisibility(!aScalarBarActor->GetDistributionVisibility()); + if ( theCommandID == SMESHOp::OpShowDistribution ) { + aScalarBarActor->SetDistributionVisibility(!aScalarBarActor->GetDistributionVisibility()); + } + else if ( theCommandID == SMESHOp::OpShowScalarBar ) { + aScalarBarActor->SetVisibility( !aScalarBarActor->GetVisibility()); + } } } } } #ifndef DISABLE_PLOT2DVIEWER - void PlotDistribution() { - SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); - if( !app ) - return; - - LightApp_SelectionMgr* aSel = SMESHGUI::selectionMgr(); - SALOME_ListIO selected; - if ( aSel ) - aSel->selectedObjects( selected ); - - if ( selected.Extent() == 1 ) { - Handle(SALOME_InteractiveObject) anIO = selected.First(); - if ( anIO->hasEntry() ) { - //Find Actor by entry before getting Plot2d viewer, - //because after call getViewManager( Plot2d_Viewer::Type(), true ) active window is Plot2d Viewer - SMESH_Actor* anActor = SMESH::FindActorByEntry( anIO->getEntry() ); - - SUIT_ViewManager* aViewManager = app->getViewManager( Plot2d_Viewer::Type(), true ); // create if necessary - - if( !aViewManager ) - return; - - SPlot2d_Viewer* aView = dynamic_cast(aViewManager->getViewModel()); - if ( !aView ) - return; - - Plot2d_ViewFrame* aPlot = aView->getActiveViewFrame(); - if ( !aPlot ) - return; - - if ( anActor && anActor->GetControlMode() != SMESH_Actor::eNone ) { - SPlot2d_Histogram* aHistogram = anActor->UpdatePlot2Histogram(); - QString functorName = functorToString( anActor->GetFunctor()); - QString aHistogramName("%1 : %2"); - aHistogramName = aHistogramName.arg(anIO->getName()).arg(functorName); - aHistogram->setName(aHistogramName); - aHistogram->setHorTitle(functorName); - aHistogram->setVerTitle(QObject::tr("DISTRIBUTION_NB_ENT")); - aPlot->displayObject(aHistogram, true); - } - } - } - } + void PlotDistribution() + { + SalomeApp_Application* app = + dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if( !app ) + return; + + LightApp_SelectionMgr* aSel = SMESHGUI::selectionMgr(); + SALOME_ListIO selected; + if ( aSel ) + aSel->selectedObjects( selected ); + + if ( selected.Extent() == 1 ) { + Handle(SALOME_InteractiveObject) anIO = selected.First(); + if ( anIO->hasEntry() ) { + //Find Actor by entry before getting Plot2d viewer, + //because after call getViewManager( Plot2d_Viewer::Type(), true ) active window is Plot2d Viewer + SMESH_Actor* anActor = SMESH::FindActorByEntry( anIO->getEntry() ); + + SUIT_ViewManager* aViewManager = + app->getViewManager( Plot2d_Viewer::Type(), true ); // create if necessary + if( !aViewManager ) + return; + + SPlot2d_Viewer* aView = dynamic_cast(aViewManager->getViewModel()); + if ( !aView ) + return; + + Plot2d_ViewFrame* aPlot = aView->getActiveViewFrame(); + if ( !aPlot ) + return; + + if ( anActor && anActor->GetControlMode() != SMESH_Actor::eNone ) + { + SPlot2d_Histogram* aHistogram = anActor->UpdatePlot2Histogram(); + QString functorName = functorToString( anActor->GetFunctor()); + QString aHistogramName("%1 : %2"); + aHistogramName = aHistogramName.arg(anIO->getName()).arg(functorName); + aHistogram->setName(aHistogramName); + aHistogram->setHorTitle(functorName); + aHistogram->setVerTitle(QObject::tr("DISTRIBUTION_NB_ENT")); + aPlot->displayObject(aHistogram, true); + } + } + } + } #endif //DISABLE_PLOT2DVIEWER - void DisableAutoColor(){ + void DisableAutoColor() + { LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; - if( aSel ) + if ( aSel ) aSel->selectedObjects( selected ); - if(selected.Extent()){ + if ( selected.Extent() ) { Handle(SALOME_InteractiveObject) anIObject = selected.First(); SMESH::SMESH_Mesh_var aMesh = SMESH::IObjectToInterface(anIObject); if ( !aMesh->_is_nil() ) { @@ -1221,20 +1314,41 @@ } } + void sortChildren() + { + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + SALOME_ListIO selected; + if ( aSel ) { + aSel->selectedObjects( selected ); + if ( selected.Extent() ) + { + Handle(SALOME_InteractiveObject) anIObject = selected.First(); + _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); + _PTR(SObject) aSObj = aStudy->FindObjectID(anIObject->getEntry()); + if (aSObj) { + if ( aStudy->GetUseCaseBuilder()->SortChildren( aSObj, true/*AscendingOrder*/ ) ) { + SMESHGUI::GetSMESHGUI()->updateObjBrowser(); + } + } + } + } + } + void SetDisplayMode(int theCommandID, SMESHGUI_StudyId2MarkerMap& theMarkerMap) { SALOME_ListIO selected; - SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); - if( !app ) + SalomeApp_Application* app = + dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if ( !app ) return; LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); - SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); - if( !aSel || !appStudy ) + SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); + if ( !aSel || !appStudy ) return; - if( theCommandID == 1134 ) { // Clipping dialog can be activated without selection - if( SMESHGUI* aModule = SMESHGUI::GetSMESHGUI() ) { + if ( theCommandID == SMESHOp::OpClipping ) { // Clipping dialog can be activated without selection + if ( SMESHGUI* aModule = SMESHGUI::GetSMESHGUI() ) { aModule->EmitSignalDeactivateDialog(); if( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( aModule ) ) (new SMESHGUI_ClippingDlg( aModule, aViewWindow ))->show(); @@ -1246,20 +1360,24 @@ aSel->selectedObjects( selected ); - if(selected.Extent() >= 1){ - switch(theCommandID){ - case 1133:{ + if ( selected.Extent() >= 1 ) + { + switch ( theCommandID ) { + case SMESHOp::OpTransparency: + { SMESHGUI::GetSMESHGUI()->EmitSignalDeactivateDialog(); (new SMESHGUI_TransparencyDlg( SMESHGUI::GetSMESHGUI() ))->show(); return; } - case 1132: { + case SMESHOp::OpProperties: + { double color[3]; QColor faceColor, edgeColor, nodeColor, elem0dColor, ballColor; QColor orientationColor, outlineColor, volumeColor; int deltaF = 0, deltaV = 0; int elem0dSize = 1; - int ballSize = 1; + //int ballSize = 1; + double ballScale = 1.0; int edgeWidth = 1; int outlineWidth = 1; double shrinkCoef = 0.0; @@ -1303,7 +1421,8 @@ // balls: color, size anActor->GetBallColor( color[0], color[1], color[2] ); ballColor.setRgbF( color[0], color[1], color[2] ); - ballSize = qMax( (int)anActor->GetBallSize(), 1 ); // minimum allowed size is 1 + //ballSize = qMax( (int)anActor->GetBallSize(), 1 ); // minimum allowed size is 1 + ballScale = qMax( (double)anActor->GetBallScale(), 1e-2 ); // minimum allowed scale is 1e-2 // outlines: color anActor->GetOutlineColor( color[0], color[1], color[2] ); outlineColor.setRgbF( color[0], color[1], color[2] ); @@ -1359,7 +1478,8 @@ dlg.setElem0dSize( elem0dSize ); // balls: color, size dlg.setBallColor( ballColor ); - dlg.setBallSize( ballSize ); + //dlg.setBallSize( ballSize ); + dlg.setBallScale( ballScale ); // orientation: color, scale, 3d flag dlg.setOrientationColor( orientationColor ); dlg.setOrientationSize( int( orientationScale * 100. ) ); @@ -1385,7 +1505,8 @@ elem0dColor = dlg.elem0dColor(); elem0dSize = dlg.elem0dSize(); ballColor = dlg.ballColor(); - ballSize = dlg.ballSize(); + // ballSize = dlg.ballSize(); + ballScale = dlg.ballScale(); orientationColor = dlg.orientationColor(); orientationScale = dlg.orientationSize() / 100.; orientation3d = dlg.orientation3d(); @@ -1428,7 +1549,8 @@ anActor->Set0DSize( elem0dSize ); // balls: color, size anActor->SetBallColor( ballColor.redF(), ballColor.greenF(), ballColor.blueF() ); - anActor->SetBallSize( ballSize ); + // anActor->SetBallSize( ballSize ); + anActor->SetBallScale( ballScale ); // orientation: color, scale, 3d flag anActor->SetFacesOrientationColor( orientationColor.redF(), orientationColor.greenF(), orientationColor.blueF() ); anActor->SetFacesOrientationScale( orientationScale ); @@ -1469,7 +1591,7 @@ SMESH::RepaintCurrentView(); } // if ( dlg.exec() ) return; - } // case 1132: + } // case SMESHOp::OpProperties: } // switch(theCommandID) SALOME_ListIteratorOfListIO It( selected ); for( ; It.More(); It.Next()){ @@ -1477,26 +1599,26 @@ if(IObject->hasEntry()){ if(SMESH_Actor *anActor = SMESH::FindActorByEntry(IObject->getEntry())){ switch(theCommandID){ - case 211: + case SMESHOp::OpDMWireframe: anActor->SetRepresentation(SMESH_Actor::eEdge); break; - case 212: + case SMESHOp::OpDMShading: anActor->SetRepresentation(SMESH_Actor::eSurface); break; - case 213: + case SMESHOp::OpDMShrink: if(anActor->IsShrunk()) anActor->UnShrink(); else anActor->SetShrink(); break; - case 215: + case SMESHOp::OpDMNodes: anActor->SetRepresentation(SMESH_Actor::ePoint); break; - case 231: + case SMESHOp::OpRepresentationLines: if(anActor->GetQuadratic2DRepresentation() != SMESH_Actor::eLines) anActor->SetQuadratic2DRepresentation(SMESH_Actor::eLines); break; - case 232: + case SMESHOp::OpRepresentationArcs: if(anActor->GetQuadratic2DRepresentation() != SMESH_Actor::eArcs) anActor->SetQuadratic2DRepresentation(SMESH_Actor::eArcs); break; @@ -1508,113 +1630,91 @@ } } + int ActionToControl( int theID, bool theReversed ) + { + NCollection_DoubleMap ActionControl; + ActionControl.Bind( 0, SMESH_Actor::eNone ); + ActionControl.Bind( SMESHOp::OpFreeNode, SMESH_Actor::eFreeNodes ); + ActionControl.Bind( SMESHOp::OpEqualNode, SMESH_Actor::eCoincidentNodes ); + ActionControl.Bind( SMESHOp::OpFreeEdge, SMESH_Actor::eFreeEdges ); + ActionControl.Bind( SMESHOp::OpFreeBorder, SMESH_Actor::eFreeBorders ); + ActionControl.Bind( SMESHOp::OpLength, SMESH_Actor::eLength ); + ActionControl.Bind( SMESHOp::OpConnection, SMESH_Actor::eMultiConnection ); + ActionControl.Bind( SMESHOp::OpEqualEdge, SMESH_Actor::eCoincidentElems1D ); + ActionControl.Bind( SMESHOp::OpFreeFace, SMESH_Actor::eFreeFaces ); + ActionControl.Bind( SMESHOp::OpBareBorderFace, SMESH_Actor::eBareBorderFace ); + ActionControl.Bind( SMESHOp::OpOverConstrainedFace, SMESH_Actor::eOverConstrainedFace ); + ActionControl.Bind( SMESHOp::OpLength2D, SMESH_Actor::eLength2D ); + ActionControl.Bind( SMESHOp::OpConnection2D, SMESH_Actor::eMultiConnection2D ); + ActionControl.Bind( SMESHOp::OpArea, SMESH_Actor::eArea ); + ActionControl.Bind( SMESHOp::OpTaper, SMESH_Actor::eTaper ); + ActionControl.Bind( SMESHOp::OpAspectRatio, SMESH_Actor::eAspectRatio ); + ActionControl.Bind( SMESHOp::OpMinimumAngle, SMESH_Actor::eMinimumAngle ); + ActionControl.Bind( SMESHOp::OpWarpingAngle, SMESH_Actor::eWarping ); + ActionControl.Bind( SMESHOp::OpSkew, SMESH_Actor::eSkew ); + ActionControl.Bind( SMESHOp::OpMaxElementLength2D, SMESH_Actor::eMaxElementLength2D ); + ActionControl.Bind( SMESHOp::OpEqualFace, SMESH_Actor::eCoincidentElems2D ); + ActionControl.Bind( SMESHOp::OpAspectRatio3D, SMESH_Actor::eAspectRatio3D ); + ActionControl.Bind( SMESHOp::OpVolume, SMESH_Actor::eVolume3D ); + ActionControl.Bind( SMESHOp::OpMaxElementLength3D, SMESH_Actor::eMaxElementLength3D ); + ActionControl.Bind( SMESHOp::OpBareBorderVolume, SMESH_Actor::eBareBorderVolume ); + ActionControl.Bind( SMESHOp::OpOverConstrainedVolume, SMESH_Actor::eOverConstrainedVolume ); + ActionControl.Bind( SMESHOp::OpEqualVolume, SMESH_Actor::eCoincidentElems3D ); + + return theReversed ? ActionControl.Find2( theID ) : ActionControl.Find1( theID ); + } + void Control( int theCommandID ) { - LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + SMESH_Actor::eControl aControl = SMESH_Actor::eControl( ActionToControl( theCommandID )); + _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); + SALOME_ListIO selected; - if( aSel ) + if ( LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr() ) aSel->selectedObjects( selected ); - if( !selected.IsEmpty() ){ - Handle(SALOME_InteractiveObject) anIO = selected.First(); - if(!anIO.IsNull()){ - SMESH_Actor::eControl aControl = SMESH_Actor::eNone; - if(SMESH_Actor *anActor = SMESH::FindActorByEntry(anIO->getEntry())) { - switch ( theCommandID ){ - case 6001: - aControl = SMESH_Actor::eLength; - break; - case 6018: - aControl = SMESH_Actor::eLength2D; - break; - case 6002: - aControl = SMESH_Actor::eFreeEdges; - break; - case 6003: - aControl = SMESH_Actor::eFreeBorders; - break; - case 6004: - aControl = SMESH_Actor::eMultiConnection; - break; - case 6005: - aControl = SMESH_Actor::eFreeNodes; - break; - case 6019: - aControl = SMESH_Actor::eMultiConnection2D; - break; - case 6011: - aControl = SMESH_Actor::eArea; - break; - case 6012: - aControl = SMESH_Actor::eTaper; - break; - case 6013: - aControl = SMESH_Actor::eAspectRatio; - break; - case 6017: - aControl = SMESH_Actor::eAspectRatio3D; - break; - case 6014: - aControl = SMESH_Actor::eMinimumAngle; - break; - case 6015: - aControl = SMESH_Actor::eWarping; - break; - case 6016: - aControl = SMESH_Actor::eSkew; - break; - case 6009: - aControl = SMESH_Actor::eVolume3D; - break; - case 6021: - aControl = SMESH_Actor::eFreeFaces; - break; - case 6022: - aControl = SMESH_Actor::eMaxElementLength2D; - break; - case 6023: - aControl = SMESH_Actor::eMaxElementLength3D; - break; - case 6024: - aControl = SMESH_Actor::eBareBorderVolume; - break; - case 6025: - aControl = SMESH_Actor::eBareBorderFace; - break; - case 6026: - aControl = SMESH_Actor::eOverConstrainedVolume; - break; - case 6027: - aControl = SMESH_Actor::eOverConstrainedFace; - break; - case 6028: - aControl = SMESH_Actor::eCoincidentNodes; - break; - case 6029: - aControl = SMESH_Actor::eCoincidentElems1D; - break; - case 6030: - aControl = SMESH_Actor:: eCoincidentElems2D; - break; - case 6031: - aControl = SMESH_Actor::eCoincidentElems3D; - break; - } - - anActor->SetControlMode(aControl); - anActor->GetScalarBarActor()->SetTitle( functorToString( anActor->GetFunctor() ).toLatin1().constData() ); - SMESH::RepaintCurrentView(); + if ( !selected.IsEmpty() ) { + SALOME_ListIteratorOfListIO It(selected); + for ( ; It.More(); It.Next()) + { + Handle(SALOME_InteractiveObject) anIO = It.Value(); + if ( !anIO.IsNull() ) { + _PTR(SObject) SO = aStudy->FindObjectID( It.Value()->getEntry() ); + if ( SO ) { + CORBA::Object_var aObject = SMESH::SObjectToObject( SO ); + SMESH::SMESH_IDSource_var anIDSrc = SMESH::SMESH_IDSource::_narrow( aObject ); + if ( !anIDSrc->_is_nil() ) { + SMESH_Actor *anActor = SMESH::FindActorByEntry( anIO->getEntry()); + if (( !anActor && selected.Extent() == 1 ) && + ( anActor = SMESH::CreateActor( aStudy, anIO->getEntry() ))) + { + anActor->SetControlMode( aControl ); + SMESH::DisplayActor( SMESH::GetCurrentVtkView(), anActor ); + SMESH::UpdateView ( SMESH::eDisplay, anIO->getEntry() ); + } + if ( anActor ) + { + if ( anActor->GetControlMode() != aControl ) + anActor->SetControlMode( aControl ); + QString functorName = functorToString( anActor->GetFunctor() ); + int anEntitiesCount = anActor->GetNumberControlEntities(); + if (anEntitiesCount >= 0) + functorName = functorName + ": " + QString::number(anEntitiesCount); + anActor->GetScalarBarActor()->SetTitle( functorName.toLatin1().constData() ); + SMESH::RepaintCurrentView(); #ifndef DISABLE_PLOT2DVIEWER - if(anActor->GetPlot2Histogram()) { - SPlot2d_Histogram* aHistogram = anActor->UpdatePlot2Histogram(); - QString functorName = functorToString( anActor->GetFunctor()); - QString aHistogramName("%1 : %2"); - aHistogramName = aHistogramName.arg(anIO->getName()).arg(functorName); - aHistogram->setName(aHistogramName); - aHistogram->setHorTitle(functorName); - SMESH::ProcessIn2DViewers(anActor); - } + if ( anActor->GetPlot2Histogram() ) { + SPlot2d_Histogram* aHistogram = anActor->UpdatePlot2Histogram(); + QString aHistogramName("%1 : %2"); + aHistogramName = aHistogramName.arg( anIO->getName() ).arg( functorName ); + aHistogram->setName( aHistogramName ); + aHistogram->setHorTitle( functorName ); + SMESH::ProcessIn2DViewers( anActor ); + } #endif + } + } + } } } } @@ -1622,13 +1722,13 @@ bool CheckOIType(const Handle(SALOME_InteractiveObject) & theIO, - SMESH::MeshObjectType theType, + SMESH::MeshObjectType theType, const QString theInTypeName, QString & theOutTypeName) { SMESH_TypeFilter aTypeFilter( theType ); QString entry; - if( !theIO.IsNull() ) + if ( !theIO.IsNull() ) { entry = theIO->getEntry(); LightApp_DataOwner owner( entry ); @@ -1643,12 +1743,12 @@ QString CheckTypeObject(const Handle(SALOME_InteractiveObject) & theIO) { - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); + _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); _PTR(SObject) aSObj = aStudy->FindObjectID(theIO->getEntry()); if (aSObj) { _PTR(SComponent) aSComp = aSObj->GetFatherComponent(); - CORBA::String_var anID = aSComp->GetID().c_str(); - if (!strcmp(anID.in(),theIO->getEntry())) + CORBA::String_var anID = aSComp->GetID().c_str(); + if ( !strcmp(anID.in(),theIO->getEntry()) ) return "Component"; } @@ -1666,216 +1766,213 @@ } - QString CheckHomogeneousSelection() - { - //SUIT_Study* aStudy = SMESH::GetActiveStudy(); - LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); - SALOME_ListIO selected; - if( aSel ) - aSel->selectedObjects( selected ); + // QString CheckHomogeneousSelection() + // { + // LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + // SALOME_ListIO selected; + // if ( aSel ) + // aSel->selectedObjects( selected ); - QString RefType = CheckTypeObject(selected.First()); - SALOME_ListIteratorOfListIO It(selected); - for ( ; It.More(); It.Next()) - { - Handle(SALOME_InteractiveObject) IObject = It.Value(); - QString Type = CheckTypeObject(IObject); - if (Type.compare(RefType) != 0) - return "Heterogeneous Selection"; - } + // QString RefType = CheckTypeObject(selected.First()); + // SALOME_ListIteratorOfListIO It(selected); + // for ( ; It.More(); It.Next()) + // { + // Handle(SALOME_InteractiveObject) IObject = It.Value(); + // QString Type = CheckTypeObject(IObject); + // if ( Type.compare(RefType) != 0 ) + // return "Heterogeneous Selection"; + // } + + // return RefType; + // } - return RefType; + uint randomize( uint size ) + { + static bool initialized = false; + if ( !initialized ) { + qsrand( QDateTime::currentDateTime().toTime_t() ); + initialized = true; + } + uint v = qrand(); + v = uint( (double)( v ) / RAND_MAX * size ); + v = qMax( uint(0), qMin ( v, size-1 ) ); + return v; } + +} //namespace +void SMESHGUI::OnEditDelete() +{ + // VSR 17/11/04: check if all objects selected belong to SMESH component --> start + LightApp_SelectionMgr* aSel = SMESHGUI::selectionMgr(); + SALOME_ListIO selected; aSel->selectedObjects( selected, QString::null, false ); - void SMESHGUI::OnEditDelete() - { - // VSR 17/11/04: check if all objects selected belong to SMESH component --> start - LightApp_SelectionMgr* aSel = SMESHGUI::selectionMgr(); - SALOME_ListIO selected; aSel->selectedObjects( selected, QString::null, false ); + _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); + _PTR(StudyBuilder) aStudyBuilder = aStudy->NewBuilder(); + _PTR(GenericAttribute) anAttr; + _PTR(AttributeIOR) anIOR; - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); - _PTR(StudyBuilder) aStudyBuilder = aStudy->NewBuilder(); - _PTR(GenericAttribute) anAttr; - _PTR(AttributeIOR) anIOR; - - int objectCount = 0; - QString aNameList; - QString aParentComponent = QString::null; - Handle(SALOME_InteractiveObject) anIO; - for( SALOME_ListIteratorOfListIO anIt( selected ); anIt.More(); anIt.Next() ) - { - anIO = anIt.Value(); - QString cur = anIO->getComponentDataType(); - _PTR(SObject) aSO = aStudy->FindObjectID(anIO->getEntry()); - if (aSO) { - // check if object is reference - _PTR(SObject) aRefSObj; - aNameList.append("\n - "); - if ( aSO->ReferencedObject( aRefSObj ) ) { - QString aRefName = QString::fromStdString ( aRefSObj->GetName() ); - aNameList.append( aRefName ); - cur = QString::fromStdString ( aRefSObj->GetFatherComponent()->ComponentDataType() ); - } - else - aNameList.append(anIO->getName()); - objectCount++; + int objectCount = 0; + QString aNameList; + QString aParentComponent = QString::null; + Handle(SALOME_InteractiveObject) anIO; + for( SALOME_ListIteratorOfListIO anIt( selected ); anIt.More(); anIt.Next() ) + { + anIO = anIt.Value(); + QString cur = anIO->getComponentDataType(); + _PTR(SObject) aSO = aStudy->FindObjectID(anIO->getEntry()); + if (aSO) { + // check if object is reference + _PTR(SObject) aRefSObj; + aNameList.append("\n - "); + if ( aSO->ReferencedObject( aRefSObj ) ) { + QString aRefName = QString::fromStdString ( aRefSObj->GetName() ); + aNameList.append( aRefName ); + cur = QString::fromStdString ( aRefSObj->GetFatherComponent()->ComponentDataType() ); } - - if( aParentComponent.isNull() ) - aParentComponent = cur; - else if( !aParentComponent.isEmpty() && aParentComponent!=cur ) - aParentComponent = ""; + else + aNameList.append(anIO->getName()); + objectCount++; } - if ( objectCount == 0 ) - return; // No Valid Objects Selected + if( aParentComponent.isNull() ) + aParentComponent = cur; + else if( !aParentComponent.isEmpty() && aParentComponent!=cur ) + aParentComponent = ""; + } - if ( aParentComponent != SMESHGUI::GetSMESHGUI()->name() ) { - SUIT_MessageBox::warning( SMESHGUI::desktop(), - QObject::tr("ERR_ERROR"), - QObject::tr("NON_SMESH_OBJECTS_SELECTED").arg( SMESHGUI::GetSMESHGUI()->moduleName() ) ); - return; - } - // VSR 17/11/04: check if all objects selected belong to SMESH component <-- finish - if (SUIT_MessageBox::warning - (SMESHGUI::desktop(), - QObject::tr("SMESH_WRN_WARNING"), - QObject::tr("SMESH_REALLY_DELETE").arg( objectCount ).arg( aNameList ), - SUIT_MessageBox::Yes | SUIT_MessageBox::No, - SUIT_MessageBox::Yes) != SUIT_MessageBox::Yes) - return; + if ( objectCount == 0 ) + return; // No Valid Objects Selected + + if ( aParentComponent != SMESHGUI::GetSMESHGUI()->name() ) { + SUIT_MessageBox::warning( SMESHGUI::desktop(), + QObject::tr("ERR_ERROR"), + QObject::tr("NON_SMESH_OBJECTS_SELECTED").arg( SMESHGUI::GetSMESHGUI()->moduleName() ) ); + return; + } + // VSR 17/11/04: check if all objects selected belong to SMESH component <-- finish + if (SUIT_MessageBox::warning + (SMESHGUI::desktop(), + QObject::tr("SMESH_WRN_WARNING"), + QObject::tr("SMESH_REALLY_DELETE").arg( objectCount ).arg( aNameList ), + SUIT_MessageBox::Yes | SUIT_MessageBox::No, + SUIT_MessageBox::Yes) != SUIT_MessageBox::Yes) + return; - SalomeApp_Application* anApp = dynamic_cast( SUIT_Session::session()->activeApplication() ); + SalomeApp_Application* anApp = dynamic_cast( SUIT_Session::session()->activeApplication() ); - // Put the whole hierarchy of sub-objects of the selected SO's into a list and - // then treat them all starting from the deepest objects (at list back) - std::list< _PTR(SObject) > listSO; - SALOME_ListIteratorOfListIO It(selected); - for( ; It.More(); It.Next()) // loop on selected IO's - { - Handle(SALOME_InteractiveObject) IObject = It.Value(); - if(IObject->hasEntry()) { - _PTR(SObject) aSO = aStudy->FindObjectID(IObject->getEntry()); - - // disable removal of "SMESH" component object - if(aSO->FindAttribute(anAttr, "AttributeIOR")){ - anIOR = anAttr; - if ( engineIOR() == anIOR->Value().c_str() ) - continue; - } - //Check the referenced object - _PTR(SObject) aRefSObject; - if ( aSO && aSO->ReferencedObject( aRefSObject ) ) - aSO = aRefSObject; // Delete main Object instead of reference - - listSO.push_back( aSO ); - std::list< _PTR(SObject) >::iterator itSO = listSO.begin(); - for ( ; itSO != listSO.end(); ++itSO ) { - _PTR(ChildIterator) it = aStudy->NewChildIterator( *itSO ); - for (it->InitEx(false); it->More(); it->Next()) - listSO.push_back( it->Value() ); - } + // Put the whole hierarchy of sub-objects of the selected SO's into a list and + // then treat them all starting from the deepest objects (at list back) + std::list< _PTR(SObject) > listSO; + SALOME_ListIteratorOfListIO It(selected); + for( ; It.More(); It.Next()) // loop on selected IO's + { + Handle(SALOME_InteractiveObject) IObject = It.Value(); + if(IObject->hasEntry()) { + _PTR(SObject) aSO = aStudy->FindObjectID(IObject->getEntry()); + + // disable removal of "SMESH" component object + if(aSO->FindAttribute(anAttr, "AttributeIOR")){ + anIOR = anAttr; + if ( engineIOR() == anIOR->Value().c_str() ) + continue; + } + //Check the referenced object + _PTR(SObject) aRefSObject; + if ( aSO && aSO->ReferencedObject( aRefSObject ) ) + aSO = aRefSObject; // Delete main Object instead of reference + + listSO.push_back( aSO ); + std::list< _PTR(SObject) >::iterator itSO = --listSO.end(); + for ( ; itSO != listSO.end(); ++itSO ) { + _PTR(ChildIterator) it = aStudy->NewChildIterator( *itSO ); + for (it->InitEx(false); it->More(); it->Next()) + listSO.push_back( it->Value() ); } } - // Check if none of objects to delete is referred from outside - std::list< _PTR(SObject) >::reverse_iterator ritSO; - for ( ritSO = listSO.rbegin(); ritSO != listSO.rend(); ++ritSO ) - { - _PTR(SObject) SO = *ritSO; - if ( !SO ) continue; - std::vector<_PTR(SObject)> aReferences = aStudy->FindDependances( *ritSO ); - for (size_t i = 0; i < aReferences.size(); i++) { - _PTR(SComponent) aComponent = aReferences[i]->GetFatherComponent(); - std::string type = aComponent->ComponentDataType(); - if ( type != "SMESH" ) - { - SUIT_MessageBox::warning( anApp->desktop(), - QObject::tr("WRN_WARNING"), - QObject::tr("DEP_OBJECT") ); - return; // outside SMESH, there is an object depending on a SMESH object - } + } + // Check if none of objects to delete is referred from outside + std::list< _PTR(SObject) >::reverse_iterator ritSO; + for ( ritSO = listSO.rbegin(); ritSO != listSO.rend(); ++ritSO ) + { + _PTR(SObject) SO = *ritSO; + if ( !SO ) continue; + std::vector<_PTR(SObject)> aReferences = aStudy->FindDependances( *ritSO ); + for (size_t i = 0; i < aReferences.size(); i++) { + _PTR(SComponent) aComponent = aReferences[i]->GetFatherComponent(); + std::string type = aComponent->ComponentDataType(); + if ( type != "SMESH" ) + { + SUIT_MessageBox::warning( anApp->desktop(), + QObject::tr("WRN_WARNING"), + QObject::tr("DEP_OBJECT") ); + return; // outside SMESH, there is an object depending on a SMESH object } } + } - // Call mesh->Clear() to prevent loading mesh from file caused by hypotheses removal - for( It.Initialize( selected ); It.More(); It.Next()) // loop on selected IO's - { - Handle(SALOME_InteractiveObject) IObject = It.Value(); - SMESH::SMESH_Mesh_var mesh = SMESH::IObjectToInterface< SMESH::SMESH_Mesh >( IObject ); - if ( !mesh->_is_nil() ) - mesh->Clear(); + // Call mesh->Clear() to prevent loading mesh from file caused by hypotheses removal + for( It.Initialize( selected ); It.More(); It.Next()) // loop on selected IO's + { + Handle(SALOME_InteractiveObject) IObject = It.Value(); + SMESH::SMESH_Mesh_var mesh = SMESH::IObjectToInterface< SMESH::SMESH_Mesh >( IObject ); + if ( !mesh->_is_nil() ) + mesh->Clear(); + } + + // Treat SO's in the list starting from the back + aStudyBuilder->NewCommand(); // There is a transaction + for ( ritSO = listSO.rbegin(); ritSO != listSO.rend(); ++ritSO ) + { + _PTR(SObject) SO = *ritSO; + if ( !SO ) continue; + std::string anEntry = SO->GetID(); + + /** Erase graphical object and remove all its data **/ + if(SO->FindAttribute(anAttr, "AttributeIOR")) { + SMESH::RemoveVisualObjectWithActors( anEntry.c_str(), true); } + /** Remove an object from data structures **/ + SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( SMESH::SObjectToObject( SO )); + SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow( SMESH::SObjectToObject( SO )); + if ( !aGroup->_is_nil() ) { // DELETE GROUP + SMESH::SMESH_Mesh_var aMesh = aGroup->GetMesh(); + aMesh->RemoveGroup( aGroup ); + } + else if ( !aSubMesh->_is_nil() ) { // DELETE SUBMESH + SMESH::SMESH_Mesh_var aMesh = aSubMesh->GetFather(); + aMesh->RemoveSubMesh( aSubMesh ); - // Treat SO's in the list starting from the back - aStudyBuilder->NewCommand(); // There is a transaction - for ( ritSO = listSO.rbegin(); ritSO != listSO.rend(); ++ritSO ) - { - _PTR(SObject) SO = *ritSO; - if ( !SO ) continue; - std::string anEntry = SO->GetID(); - - /** Erase graphical object **/ - if(SO->FindAttribute(anAttr, "AttributeIOR")) { - SMESH::RemoveVisualObjectWithActors( anEntry.c_str(), true); - // ViewManagerList aViewMenegers = anApp->viewManagers(); - // ViewManagerList::const_iterator it = aViewMenegers.begin(); - // for( ; it != aViewMenegers.end(); it++) { - // SUIT_ViewManager* vm = *it; - // int nbSf = vm ? vm->getViewsCount() : 0; - // if(vm) { - // QVector aViews = vm->getViews(); - // for(int i = 0; i < nbSf; i++){ - // SUIT_ViewWindow *sf = aViews[i]; - // if(SMESH_Actor* anActor = SMESH::FindActorByEntry(sf,anEntry.c_str())){ - // SMESH::RemoveActor(sf,anActor); - // } - // } - // } - // } - } - /** Remove an object from data structures **/ - SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( SMESH::SObjectToObject( SO )); - SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow( SMESH::SObjectToObject( SO )); - if ( !aGroup->_is_nil() ) { // DELETE GROUP - SMESH::SMESH_Mesh_var aMesh = aGroup->GetMesh(); - aMesh->RemoveGroup( aGroup ); - } - else if ( !aSubMesh->_is_nil() ) { // DELETE SUBMESH - SMESH::SMESH_Mesh_var aMesh = aSubMesh->GetFather(); - aMesh->RemoveSubMesh( aSubMesh ); - - _PTR(SObject) aMeshSO = SMESH::FindSObject(aMesh); - if (aMeshSO) - SMESH::ModifiedMesh(aMeshSO, false, aMesh->NbNodes()==0); + _PTR(SObject) aMeshSO = SMESH::FindSObject(aMesh); + if (aMeshSO) + SMESH::ModifiedMesh(aMeshSO, false, aMesh->NbNodes()==0); + } + else { + Handle(SALOME_InteractiveObject) IObject = new SALOME_InteractiveObject + ( anEntry.c_str(), engineIOR().toLatin1().data(), SO->GetName().c_str() ); + QString objType = CheckTypeObject(IObject); + if ( objType == "Hypothesis" || objType == "Algorithm" ) {// DELETE HYPOTHESIS + SMESH::RemoveHypothesisOrAlgorithmOnMesh(IObject); + aStudyBuilder->RemoveObjectWithChildren( SO ); } - else { - Handle(SALOME_InteractiveObject) IObject = new SALOME_InteractiveObject - ( anEntry.c_str(), engineIOR().toLatin1().data(), SO->GetName().c_str() ); - QString objType = CheckTypeObject(IObject); - if ( objType == "Hypothesis" || objType == "Algorithm" ) {// DELETE HYPOTHESIS - SMESH::RemoveHypothesisOrAlgorithmOnMesh(IObject); - aStudyBuilder->RemoveObjectWithChildren( SO ); - } - else {// default action: remove SObject from the study - // san - it's no use opening a transaction here until UNDO/REDO is provided in SMESH - //SUIT_Operation *op = new SALOMEGUI_ImportOperation(myActiveStudy); - //op->start(); - aStudyBuilder->RemoveObjectWithChildren( SO ); - //op->finish(); - } + else {// default action: remove SObject from the study + // san - it's no use opening a transaction here until UNDO/REDO is provided in SMESH + //SUIT_Operation *op = new SALOMEGUI_ImportOperation(myActiveStudy); + //op->start(); + aStudyBuilder->RemoveObjectWithChildren( SO ); + //op->finish(); } - } /* listSO back loop */ + } + } /* listSO back loop */ - aStudyBuilder->CommitCommand(); + aStudyBuilder->CommitCommand(); - /* Clear any previous selection */ - SALOME_ListIO l1; - aSel->setSelectedObjects( l1 ); + /* Clear any previous selection */ + SALOME_ListIO l1; + aSel->setSelectedObjects( l1 ); - SMESHGUI::GetSMESHGUI()->updateObjBrowser(); - } -//} namespace + SMESHGUI::GetSMESHGUI()->updateObjBrowser(); +} extern "C" { SMESHGUI_EXPORT CAM_Module* createModule() @@ -1902,7 +1999,7 @@ SalomeApp_Module( "SMESH" ) { CORBA::Boolean anIsEmbeddedMode; myComponentSMESH = SMESH_Client::GetSMESHGen(getApp()->orb(),anIsEmbeddedMode); - MESSAGE("-------------------------------> anIsEmbeddedMode=" << anIsEmbeddedMode); + //MESSAGE("-------------------------------> anIsEmbeddedMode=" << anIsEmbeddedMode); // 0019923: EDF 765 SMESH : default values of hypothesis SUIT_ResourceMgr* aResourceMgr = SMESH::GetResourceMgr(this); @@ -1911,7 +2008,7 @@ SalomeApp_Module( "SMESH" ) nbSeg = aResourceMgr->integerValue( "SMESH", "nb_segments_per_edge", 15 ); myComponentSMESH->SetDefaultNbSegments( nbSeg ); - const char* options[] = { "historical_python_dump", "forget_mesh_on_hyp_modif" }; + const char* options[] = { "historical_python_dump", "forget_mesh_on_hyp_modif", "default_grp_color" }; for ( size_t i = 0; i < sizeof(options)/sizeof(char*); ++i ) if ( aResourceMgr->hasValue( "SMESH", options[i] )) { @@ -1976,6 +2073,103 @@ bool SMESHGUI::automaticUpdate(unsigned int requestedSize, bool* limitExceeded) return autoUpdate && !exceeded; } +//============================================================================= +/*! + * + */ +//============================================================================= +bool SMESHGUI::automaticUpdate( SMESH::SMESH_IDSource_ptr theMesh, + int* entities, bool* limitExceeded, int* hidden, long* nbElements ) +{ + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + if ( !resMgr ) + return false; + + bool autoUpdate = resMgr->booleanValue( "SMESH", "auto_update", false ); + long updateLimit = resMgr->integerValue( "SMESH", "update_limit", 500000 ); + bool incrementalLimit = resMgr->booleanValue( "SMESH", "incremental_limit", false ); + + SMESH::long_array_var info = theMesh->GetMeshInfo(); + long nbOdElems = info[SMDSEntity_0D]; + long nbEdges = info[SMDSEntity_Edge] + info[SMDSEntity_Quad_Edge]; + long nbFaces = info[SMDSEntity_Triangle] + info[SMDSEntity_Quad_Triangle] + info[SMDSEntity_BiQuad_Triangle] + + info[SMDSEntity_Quadrangle] + info[SMDSEntity_Quad_Quadrangle] + info[SMDSEntity_BiQuad_Quadrangle] + + info[SMDSEntity_Polygon] + info[SMDSEntity_Quad_Polygon]; + long nbVolumes = info[SMDSEntity_Tetra] + info[SMDSEntity_Quad_Tetra] + + info[SMDSEntity_Hexa] + info[SMDSEntity_Quad_Hexa] + info[SMDSEntity_TriQuad_Hexa] + + info[SMDSEntity_Pyramid] + info[SMDSEntity_Quad_Pyramid] + + info[SMDSEntity_Penta] + info[SMDSEntity_Quad_Penta] + + info[SMDSEntity_Polyhedra] + + info[SMDSEntity_Hexagonal_Prism]; + long nbBalls = info[SMDSEntity_Ball]; + + long requestedSize = nbOdElems + nbBalls + nbEdges + nbFaces + nbVolumes; + *nbElements = requestedSize; + + *entities = SMESH_Actor::eAllEntity; + *hidden = 0; + + bool exceeded = updateLimit > 0 && requestedSize > updateLimit; + + if ( limitExceeded ) *limitExceeded = autoUpdate && exceeded; + + if ( incrementalLimit ) { + long total = 0; + + if ( nbOdElems > 0 ) { + if ( total + nbOdElems > updateLimit ) { + *entities = *entities & ~SMESH_Actor::e0DElements; + *hidden = *hidden | SMESH_Actor::e0DElements; + } + else + exceeded = false; + } + total += nbOdElems; + + if ( nbEdges > 0 ) { + if ( total + nbEdges > updateLimit ) { + *entities = *entities & ~SMESH_Actor::eEdges; + *hidden = *hidden | SMESH_Actor::eEdges; + } + else + exceeded = false; + } + total += nbEdges; + + if ( nbFaces > 0 ) { + if ( total + nbFaces > updateLimit ) { + *entities = *entities & ~SMESH_Actor::eFaces; + *hidden = *hidden | SMESH_Actor::eFaces; + } + else + exceeded = false; + } + total += nbFaces; + + if ( nbVolumes > 0 ) { + if ( total + nbVolumes > updateLimit ) { + *entities = *entities & ~SMESH_Actor::eVolumes; + *hidden = *hidden | SMESH_Actor::eVolumes; + } + else + exceeded = false; + } + total += nbVolumes; + + if ( nbBalls > 0 ) { + if ( total + nbBalls > updateLimit ) { + *entities = *entities & ~SMESH_Actor::eBallElem; + *hidden = *hidden | SMESH_Actor::eBallElem; + } + else + exceeded = false; + } + total += nbBalls; + } + + return autoUpdate && !exceeded; +} + //============================================================================= /*! * @@ -2083,6 +2277,26 @@ void SMESHGUI::EmitSignalVisibilityChanged() emit SignalVisibilityChanged(); } +//============================================================================= +/*! + * + */ +//============================================================================= +void SMESHGUI::EmitSignalCloseView() +{ + emit SignalCloseView(); +} + +//============================================================================= +/*! + * + */ +//============================================================================= +void SMESHGUI::EmitSignalActivatedViewManager() +{ + emit SignalActivatedViewManager(); +} + //============================================================================= /*! * @@ -2220,25 +2434,26 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) //QAction* act = action( theCommandID ); switch (theCommandID) { - case 33: // DELETE + case SMESHOp::OpDelete: if(checkLock(aStudy)) break; OnEditDelete(); break; - - case 116: - case 115: - case 117: - case 118: - case 113: - case 112: - case 111: // IMPORT + case SMESHOp::OpImportDAT: + case SMESHOp::OpImportUNV: + case SMESHOp::OpImportMED: + case SMESHOp::OpImportSTL: +#ifdef WITH_CGNS + case SMESHOp::OpImportCGNS: +#endif + case SMESHOp::OpImportSAUV: + case SMESHOp::OpImportGMF: { if(checkLock(aStudy)) break; ::ImportMeshesFromFile(GetSMESHGen(),theCommandID); break; } - case 150: //MED FILE INFORMATION + case SMESHOp::OpFileInformation: { SALOME_ListIO selected; LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); @@ -2256,35 +2471,39 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } - - case 122: // EXPORT MED - case 121: - case 123: - case 124: - case 125: - case 126: - case 140: - case 141: - case 142: - case 143: - case 144: - case 145: - case 146: - case 147: + case SMESHOp::OpExportDAT: + case SMESHOp::OpExportMED: + case SMESHOp::OpExportUNV: + case SMESHOp::OpExportSTL: +#ifdef WITH_CGNS + case SMESHOp::OpExportCGNS: +#endif + case SMESHOp::OpExportSAUV: + case SMESHOp::OpExportGMF: + case SMESHOp::OpPopupExportDAT: + case SMESHOp::OpPopupExportMED: + case SMESHOp::OpPopupExportUNV: + case SMESHOp::OpPopupExportSTL: +#ifdef WITH_CGNS + case SMESHOp::OpPopupExportCGNS: +#endif + case SMESHOp::OpPopupExportSAUV: + case SMESHOp::OpPopupExportGMF: { ::ExportMeshToFile(theCommandID); break; } - case 200: // SCALAR BAR + case SMESHOp::OpReset: // SCALAR BAR { LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if( aSel ) aSel->selectedObjects( selected ); - if( selected.Extent() ) { - Handle(SALOME_InteractiveObject) anIO = selected.First(); + SALOME_ListIteratorOfListIO it(selected); + for( ; it.More(); it.Next()) { + Handle(SALOME_InteractiveObject) anIO = it.Value(); if( anIO->hasEntry() ) { if( SMESH_Actor* anActor = SMESH::FindActorByEntry( anIO->getEntry() ) ) { anActor->SetControlMode( SMESH_Actor::eNone ); @@ -2294,29 +2513,36 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } } } + SMESH::UpdateView(); break; } - case 201: + case SMESHOp::OpScalarBarProperties: { SMESHGUI_Preferences_ScalarBarDlg::ScalarBarProperties( this ); break; } - case 2021: + case SMESHOp::OpShowScalarBar: + { + // show/hide scalar bar + ::ShowElement(theCommandID); + break; + } + case SMESHOp::OpSaveDistribution: { // dump control distribution data to the text file ::SaveDistribution(); break; } - case 2022: + case SMESHOp::OpShowDistribution: { - // show/ distribution - ::ShowDistribution(); + // show/hide distribution + ::ShowElement(theCommandID); break; } #ifndef DISABLE_PLOT2DVIEWER - case 2023: + case SMESHOp::OpPlotDistribution: { // plot distribution ::PlotDistribution(); @@ -2325,43 +2551,50 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) #endif // Auto-color - case 1136: + case SMESHOp::OpAutoColor: ::AutoColor(); break; - case 1137: + case SMESHOp::OpDisableAutoColor: ::DisableAutoColor(); break; - case 1134: // Clipping - case 1133: // Tranparency - case 1132: // Display preferences (colors, shrink size, line width, ...) + case SMESHOp::OpClipping: + case SMESHOp::OpTransparency: + case SMESHOp::OpProperties: // Display preferences (colors, shrink size, line width, ...) // Display Mode - case 215: // Nodes - case 213: // Nodes - case 212: // Nodes - case 211: // Nodes + case SMESHOp::OpDMWireframe: + case SMESHOp::OpDMShading: + case SMESHOp::OpDMNodes: + case SMESHOp::OpDMShrink: ::SetDisplayMode(theCommandID, myMarkerMap); break; //2D quadratic representation - case 231: - case 232: + case SMESHOp::OpRepresentationLines: + case SMESHOp::OpRepresentationArcs: ::SetDisplayMode(theCommandID, myMarkerMap); break; // Display Entity - case 216: // 0D elements - case 217: // Edges - case 218: // Faces - case 219: // Volumes - case 220: // All Entity - case 222: // Balls + case SMESHOp::OpDE0DElements: + case SMESHOp::OpDEEdges: + case SMESHOp::OpDEFaces: + case SMESHOp::OpDEVolumes: + case SMESHOp::OpDEBalls: + case SMESHOp::OpDEAllEntity: ::SetDisplayEntity(theCommandID); break; - case 221: // Orientation of faces + // Choose entities to be displayed + case SMESHOp::OpDEChoose: + { + ( new SMESHGUI_DisplayEntitiesDlg( SMESHGUI::desktop() ) )->exec(); + break; + } + + case SMESHOp::OpOrientationOnFaces: { LightApp_SelectionMgr* mgr = selectionMgr(); SALOME_ListIO selected; mgr->selectedObjects( selected ); @@ -2378,9 +2611,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - case 214: // UPDATE + case SMESHOp::OpUpdate: { if(checkLock(aStudy)) break; + SUIT_OverrideCursor wc; try { #if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 OCC_CATCH_SIGNALS; @@ -2401,15 +2635,16 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - case 300: // ERASE - case 301: // DISPLAY - case 302: // DISPLAY ONLY + case SMESHOp::OpHide: + case SMESHOp::OpShow: + case SMESHOp::OpShowOnly: { + SUIT_OverrideCursor wc; SMESH::EDisplaing anAction; switch (theCommandID) { - case 300: anAction = SMESH::eErase; break; - case 301: anAction = SMESH::eDisplay; break; - case 302: anAction = SMESH::eDisplayOnly; break; + case SMESHOp::OpHide: anAction = SMESH::eErase; break; + case SMESHOp::OpShow: anAction = SMESH::eDisplay; break; + case SMESHOp::OpShowOnly: anAction = SMESH::eDisplayOnly; break; } LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); @@ -2417,9 +2652,9 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if (aSel) aSel->selectedObjects( sel_objects ); - if( theCommandID==302 ) + if ( theCommandID==SMESHOp::OpShowOnly ) { - MESSAGE("anAction = SMESH::eDisplayOnly"); + //MESSAGE("anAction = SMESH::eDisplayOnly"); startOperation( myEraseAll ); } @@ -2431,27 +2666,23 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) #endif if (vtkwnd) { SALOME_ListIteratorOfListIO It( to_process ); - for ( ; It.More(); It.Next()) { - MESSAGE("---"); + for ( ; It.More(); It.Next()) + { Handle(SALOME_InteractiveObject) IOS = It.Value(); - if (IOS->hasEntry()) { - MESSAGE("---"); - if (!SMESH::UpdateView(anAction, IOS->getEntry())) { + if ( IOS->hasEntry() ) + { + if ( !SMESH::UpdateView( anAction, IOS->getEntry() )) { SMESHGUI::GetSMESHGUI()->EmitSignalVisibilityChanged(); break; // PAL16774 (Crash after display of many groups) } if (anAction == SMESH::eDisplayOnly) - { - MESSAGE("anAction = SMESH::eDisplayOnly"); anAction = SMESH::eDisplay; - } } } } // PAL13338 + PAL15161 --> - if ( ( theCommandID==301 || theCommandID==302 ) && !checkLock(aStudy)) { - MESSAGE("anAction = SMESH::eDisplayOnly"); + if ( ( theCommandID==SMESHOp::OpShow || theCommandID==SMESHOp::OpShowOnly ) && !checkLock(aStudy)) { SMESH::UpdateView(); SMESHGUI::GetSMESHGUI()->EmitSignalVisibilityChanged(); } @@ -2462,7 +2693,6 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } if (anAction == SMESH::eErase) { - MESSAGE("anAction == SMESH::eErase"); SALOME_ListIO l1; aSel->setSelectedObjects( l1 ); } @@ -2472,7 +2702,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - case 4000: // NODES + case SMESHOp::OpNode: { if(checkLock(aStudy)) break; @@ -2482,40 +2712,31 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) ( new SMESHGUI_NodesDlg( this ) )->show(); } else { - SUIT_MessageBox::warning(desktop(), - tr("SMESH_WRN_WARNING"), - tr("SMESH_WRN_VIEWER_VTK")); + SUIT_MessageBox::warning(desktop(),tr("SMESH_WRN_WARNING"),tr("SMESH_WRN_VIEWER_VTK")); } break; } - case 2151: // FILTER - { - if ( vtkwnd ) - { - EmitSignalDeactivateDialog(); - ( new SMESHGUI_FilterDlg( this, SMESH::EDGE ) )->show(); - } - break; - } - - case 701: // COMPUTE MESH - case 711: // PRECOMPUTE MESH - case 712: // EVALUATE MESH - case 713: // MESH ORDER - case 702: // Create mesh - case 703: // Create sub-mesh - case 704: // Edit mesh/sub-mesh + case SMESHOp::OpCreateMesh: + case SMESHOp::OpCreateSubMesh: + case SMESHOp::OpEditMeshOrSubMesh: + case SMESHOp::OpEditMesh: + case SMESHOp::OpEditSubMesh: + case SMESHOp::OpCompute: + case SMESHOp::OpComputeSubMesh: + case SMESHOp::OpPreCompute: + case SMESHOp::OpEvaluate: + case SMESHOp::OpMeshOrder: startOperation( theCommandID ); break; - case 705: // copy mesh + case SMESHOp::OpCopyMesh: { if (checkLock(aStudy)) break; EmitSignalDeactivateDialog(); ( new SMESHGUI_CopyMeshDlg( this ) )->show(); } break; - case 710: // Build compound mesh + case SMESHOp::OpBuildCompoundMesh: { if (checkLock(aStudy)) break; EmitSignalDeactivateDialog(); @@ -2523,13 +2744,12 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; - case 407: // DIAGONAL INVERSION - case 408: // Delete diagonal + case SMESHOp::OpDiagonalInversion: + case SMESHOp::OpUnionOfTwoTriangle: { if ( !vtkwnd ) { - SUIT_MessageBox::warning( desktop(), tr( "SMESH_WRN_WARNING" ), - tr( "NOT_A_VTK_VIEWER" ) ); + SUIT_MessageBox::warning( desktop(), tr( "SMESH_WRN_WARNING" ), tr( "NOT_A_VTK_VIEWER" ) ); break; } @@ -2546,21 +2766,20 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } */ EmitSignalDeactivateDialog(); - if ( theCommandID == 407 ) + if ( theCommandID == SMESHOp::OpDiagonalInversion ) ( new SMESHGUI_TrianglesInversionDlg( this ) )->show(); else ( new SMESHGUI_UnionOfTwoTrianglesDlg( this ) )->show(); break; } - case 409: // Change orientation - case 410: // Union of triangles - case 411: // Cutting of quadrangles - case 419: // Splitting volumes into tetrahedra + case SMESHOp::OpOrientation: + case SMESHOp::OpUnionOfTriangles: + case SMESHOp::OpCuttingOfQuadrangles: + case SMESHOp::OpSplitVolumes: { if ( !vtkwnd ) { - SUIT_MessageBox::warning( desktop(), tr( "SMESH_WRN_WARNING" ), - tr( "NOT_A_VTK_VIEWER" ) ); + SUIT_MessageBox::warning( desktop(), tr( "SMESH_WRN_WARNING" ), tr( "NOT_A_VTK_VIEWER" ) ); break; } @@ -2569,19 +2788,19 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) EmitSignalDeactivateDialog(); SMESHGUI_MultiEditDlg* aDlg = NULL; - if ( theCommandID == 409 ) + if ( theCommandID == SMESHOp::OpOrientation ) aDlg = new SMESHGUI_ChangeOrientationDlg(this); - else if ( theCommandID == 410 ) + else if ( theCommandID == SMESHOp::OpUnionOfTriangles ) aDlg = new SMESHGUI_UnionOfTrianglesDlg(this); - else if ( theCommandID == 419 ) - aDlg = new SMESHGUI_CuttingIntoTetraDlg(this); + else if ( theCommandID == SMESHOp::OpSplitVolumes ) + aDlg = new SMESHGUI_SplitVolumesDlg(this); else aDlg = new SMESHGUI_CuttingOfQuadsDlg(this); aDlg->show(); break; } - case 412: // Smoothing + case SMESHOp::OpSmoothing: { if(checkLock(aStudy)) break; if( vtkwnd ) { @@ -2589,24 +2808,33 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) ( new SMESHGUI_SmoothingDlg( this ) )->show(); } else { - SUIT_MessageBox::warning(desktop(), - tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK")); + SUIT_MessageBox::warning(desktop(), tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK")); } break; } - case 413: // Extrusion + case SMESHOp::OpExtrusion: { if (checkLock(aStudy)) break; if (vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_ExtrusionDlg ( this ) )->show(); } else { - SUIT_MessageBox::warning(desktop(), - tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK")); + SUIT_MessageBox::warning(desktop(),tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK")); + } + break; + } + case SMESHOp::OpExtrusionAlongAPath: + { + if (checkLock(aStudy)) break; + if (vtkwnd) { + EmitSignalDeactivateDialog(); + ( new SMESHGUI_ExtrusionAlongPathDlg( this ) )->show(); + } else { + SUIT_MessageBox::warning(desktop(),tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK")); } break; } - case 414: // Revolution + case SMESHOp::OpRevolution: { if(checkLock(aStudy)) break; if( vtkwnd ) { @@ -2614,12 +2842,11 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) ( new SMESHGUI_RevolutionDlg( this ) )->show(); } else { - SUIT_MessageBox::warning(desktop(), - tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK")); + SUIT_MessageBox::warning(desktop(),tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK")); } break; } - case 415: // Pattern mapping + case SMESHOp::OpPatternMapping: { if ( checkLock( aStudy ) ) break; @@ -2629,37 +2856,24 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) ( new SMESHGUI_MeshPatternDlg( this ) )->show(); } else { - SUIT_MessageBox::warning(desktop(), - tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK")); + SUIT_MessageBox::warning(desktop(),tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK")); } break; } - case 416: // Extrusion along a path - { - if (checkLock(aStudy)) break; - if (vtkwnd) { - EmitSignalDeactivateDialog(); - ( new SMESHGUI_ExtrusionAlongPathDlg( this ) )->show(); - } else { - SUIT_MessageBox::warning(desktop(), - tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK")); - } - break; - } - case 417: // Convert mesh to quadratic - case 418: // create 2D mesh from 3D - case 420: // Reorient faces - case 806: // CREATE GEO GROUP + case SMESHOp::OpSplitBiQuadratic: + case SMESHOp::OpConvertMeshToQuadratic: + case SMESHOp::OpCreateBoundaryElements: // create 2D mesh from 3D + case SMESHOp::OpReorientFaces: + case SMESHOp::OpCreateGeometryGroup: { startOperation( theCommandID ); break; } - case 801: // CREATE GROUP + case SMESHOp::OpCreateGroup: { if ( !vtkwnd ) { - SUIT_MessageBox::warning( desktop(), tr( "SMESH_WRN_WARNING" ), - tr( "NOT_A_VTK_VIEWER" ) ); + SUIT_MessageBox::warning( desktop(), tr( "SMESH_WRN_WARNING" ),tr( "NOT_A_VTK_VIEWER" ) ); break; } @@ -2682,12 +2896,11 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - case 802: // CONSTRUCT GROUP + case SMESHOp::OpConstructGroup: { if ( !vtkwnd ) { - SUIT_MessageBox::warning( desktop(), tr( "SMESH_WRN_WARNING" ), - tr( "NOT_A_VTK_VIEWER" ) ); + SUIT_MessageBox::warning( desktop(), tr( "SMESH_WRN_WARNING" ),tr( "NOT_A_VTK_VIEWER" ) ); break; } @@ -2760,12 +2973,11 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - case 803: // EDIT GROUP + case SMESHOp::OpEditGroup: { if ( !vtkwnd ) { - SUIT_MessageBox::warning( desktop(), tr( "SMESH_WRN_WARNING" ), - tr( "NOT_A_VTK_VIEWER" ) ); + SUIT_MessageBox::warning( desktop(), tr( "SMESH_WRN_WARNING" ),tr( "NOT_A_VTK_VIEWER" ) ); break; } @@ -2797,7 +3009,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - case 804: // Add elements to group + case SMESHOp::OpAddElemGroupPopup: // Add elements to group { if(checkLock(aStudy)) break; if (myState == 800) { @@ -2807,7 +3019,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - case 805: // Remove elements from group + case SMESHOp::OpRemoveElemGroupPopup: // Remove elements from group { if(checkLock(aStudy)) break; if (myState == 800) { @@ -2817,12 +3029,11 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - case 815: // Edit GEOM GROUP as standalone + case SMESHOp::OpEditGeomGroupAsGroup: { if ( !vtkwnd ) { - SUIT_MessageBox::warning( desktop(), tr( "SMESH_WRN_WARNING" ), - tr( "NOT_A_VTK_VIEWER" ) ); + SUIT_MessageBox::warning( desktop(), tr( "SMESH_WRN_WARNING" ),tr( "NOT_A_VTK_VIEWER" ) ); break; } @@ -2856,14 +3067,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - case 810: // Union Groups - case 811: // Intersect groups - case 812: // Cut groups + case SMESHOp::OpUnionGroups: + case SMESHOp::OpIntersectGroups: + case SMESHOp::OpCutGroups: { if ( !vtkwnd ) { - SUIT_MessageBox::warning( desktop(), tr( "SMESH_WRN_WARNING" ), - tr( "NOT_A_VTK_VIEWER" ) ); + SUIT_MessageBox::warning( desktop(), tr( "SMESH_WRN_WARNING" ),tr( "NOT_A_VTK_VIEWER" ) ); break; } @@ -2873,9 +3083,9 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) EmitSignalDeactivateDialog(); SMESHGUI_GroupOpDlg* aDlg = 0; - if ( theCommandID == 810 ) + if ( theCommandID == SMESHOp::OpUnionGroups ) aDlg = new SMESHGUI_UnionGroupsDlg( this ); - else if ( theCommandID == 811 ) + else if ( theCommandID == SMESHOp::OpIntersectGroups ) aDlg = new SMESHGUI_IntersectGroupsDlg( this ); else aDlg = new SMESHGUI_CutGroupsDlg( this ); @@ -2885,7 +3095,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - case 814: // Create groups of entities from existing groups of superior dimensions + case SMESHOp::OpGroupUnderlyingElem: // Create groups of entities from existing groups of superior dimensions { if ( checkLock( aStudy ) ) break; @@ -2897,12 +3107,11 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - case 813: // Delete groups with their contents + case SMESHOp::OpDeleteGroup: // Delete groups with their contents { if ( !vtkwnd ) { - SUIT_MessageBox::warning( desktop(), tr( "SMESH_WRN_WARNING" ), - tr( "NOT_A_VTK_VIEWER" ) ); + SUIT_MessageBox::warning( desktop(), tr( "SMESH_WRN_WARNING" ),tr( "NOT_A_VTK_VIEWER" ) ); break; } @@ -2915,10 +3124,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - case 900: // MESH INFOS - case 903: // WHAT IS + case SMESHOp::OpMeshInformation: + case SMESHOp::OpWhatIs: { - int page = theCommandID == 900 ? SMESHGUI_MeshInfoDlg::BaseInfo : SMESHGUI_MeshInfoDlg::ElemInfo; + int page = theCommandID == SMESHOp::OpMeshInformation ? SMESHGUI_MeshInfoDlg::BaseInfo : SMESHGUI_MeshInfoDlg::ElemInfo; EmitSignalDeactivateDialog(); LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; @@ -2940,13 +3149,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - case 904: // FIND ELEM + case SMESHOp::OpFindElementByPoint: { startOperation( theCommandID ); break; } - case 1100: // EDIT HYPOTHESIS + case SMESHOp::OpEditHypothesis: { if(checkLock(aStudy)) break; @@ -2961,15 +3170,26 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) Handle(SALOME_InteractiveObject) anIObject = selected.First(); SMESH::SMESH_Hypothesis_var aHypothesis = SMESH::IObjectToInterface(anIObject); - /* Look for all mesh objects that have this hypothesis affected in order to flag as ModifiedMesh */ - /* At end below '...->updateObjBrowser(true)' will change icon of mesh objects */ - /* Warning : however by internal mechanism all subMeshes icons are changed ! */ if ( !aHypothesis->_is_nil() ) { - // BUG 0020378 - //SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator(aHypothesis->GetName()); - SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator(aHypothesis->GetName()); - if (aCreator) { + SMESHGUI_GenericHypothesisCreator* aCreator = + SMESH::GetHypothesisCreator( SMESH::toQStr( aHypothesis->GetName() )); + if (aCreator) + { + // set geometry of mesh and sub-mesh to aCreator + aSel->selectedObjects( selected, "", /*convertReferences=*/false); + if ( selected.Extent() == 1 ) + { + QString subGeomID, meshGeomID; + Handle(SALOME_InteractiveObject) hypIO = selected.First(); + if ( SMESH::GetGeomEntries( hypIO, subGeomID, meshGeomID )) + { + if ( subGeomID.isEmpty() ) subGeomID = meshGeomID; + aCreator->setShapeEntry( subGeomID ); + aCreator->setMainShapeEntry( meshGeomID ); + } + } + aCreator->edit( aHypothesis.in(), anIObject->getName(), desktop(), this, SLOT( onHypothesisEdit( int ) ) ); } else @@ -2980,7 +3200,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } - case 1102: // REMOVE HYPOTHESIS / ALGORITHMS + case SMESHOp::OpUnassign: // REMOVE HYPOTHESIS / ALGORITHMS { if(checkLock(aStudy)) break; SUIT_OverrideCursor wc; @@ -3001,44 +3221,43 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - case 4008: // BALL - case 4009: // ELEM0D - case 4010: // EDGE - case 4021: // TRIANGLE - case 4022: // QUAD - case 4023: // POLYGON - case 4031: // TETRA - case 4032: // HEXA - case 4133: // PENTA - case 4134: // PYRAMID - case 4135: // OCTA12 + case SMESHOp::OpElem0D: + case SMESHOp::OpBall: + case SMESHOp::OpEdge: + case SMESHOp::OpTriangle: + case SMESHOp::OpQuadrangle: + case SMESHOp::OpPolygon: + case SMESHOp::OpTetrahedron: + case SMESHOp::OpHexahedron: + case SMESHOp::OpPentahedron: + case SMESHOp::OpPyramid: + case SMESHOp::OpHexagonalPrism: { if(checkLock(aStudy)) break; if ( vtkwnd ) { EmitSignalDeactivateDialog(); SMDSAbs_EntityType type = SMDSEntity_Edge; switch (theCommandID) { - case 4008: type = SMDSEntity_Ball; break; - case 4009: type = SMDSEntity_0D; break; - case 4021: type = SMDSEntity_Triangle; break; - case 4022: type = SMDSEntity_Quadrangle; break; - case 4031: type = SMDSEntity_Tetra; break; - case 4023: type = SMDSEntity_Polygon; break; - case 4032: type = SMDSEntity_Hexa; break; - case 4133: type = SMDSEntity_Penta; break; - case 4134: type = SMDSEntity_Pyramid; break; - case 4135: type = SMDSEntity_Hexagonal_Prism; break; + case SMESHOp::OpElem0D: type = SMDSEntity_0D; break; + case SMESHOp::OpBall: type = SMDSEntity_Ball; break; + case SMESHOp::OpTriangle: type = SMDSEntity_Triangle; break; + case SMESHOp::OpQuadrangle: type = SMDSEntity_Quadrangle; break; + case SMESHOp::OpTetrahedron: type = SMDSEntity_Tetra; break; + case SMESHOp::OpPolygon: type = SMDSEntity_Polygon; break; + case SMESHOp::OpHexahedron: type = SMDSEntity_Hexa; break; + case SMESHOp::OpPentahedron: type = SMDSEntity_Penta; break; + case SMESHOp::OpPyramid: type = SMDSEntity_Pyramid; break; + case SMESHOp::OpHexagonalPrism: type = SMDSEntity_Hexagonal_Prism; break; default:; } ( new SMESHGUI_AddMeshElementDlg( this, type ) )->show(); } else { - SUIT_MessageBox::warning(desktop(), - tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK")); + SUIT_MessageBox::warning(desktop(),tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK")); } break; } - case 4033: // POLYHEDRON + case SMESHOp::OpPolyhedron: { if(checkLock(aStudy)) break; if ( vtkwnd ) { @@ -3046,21 +3265,21 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) ( new SMESHGUI_CreatePolyhedralVolumeDlg( this ) )->show(); } else { - SUIT_MessageBox::warning(SMESHGUI::desktop(), - tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK")); + SUIT_MessageBox::warning(desktop(),tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK")); } break; } - case 4034: // QUADRATIC EDGE - case 4035: // QUADRATIC TRIANGLE - case 4036: // QUADRATIC QUADRANGLE - case 4136: // BIQUADRATIC QUADRANGLE - case 4137: // BIQUADRATIC TRIANGLE - case 4037: // QUADRATIC TETRAHEDRON - case 4038: // QUADRATIC PYRAMID - case 4039: // QUADRATIC PENTAHEDRON - case 4040: // QUADRATIC HEXAHEDRON - case 4140: // TRIQUADRATIC HEXAHEDRON + case SMESHOp::OpQuadraticEdge: + case SMESHOp::OpQuadraticTriangle: + case SMESHOp::OpBiQuadraticTriangle: + case SMESHOp::OpQuadraticQuadrangle: + case SMESHOp::OpBiQuadraticQuadrangle: + case SMESHOp::OpQuadraticPolygon: + case SMESHOp::OpQuadraticTetrahedron: + case SMESHOp::OpQuadraticPyramid: + case SMESHOp::OpQuadraticPentahedron: + case SMESHOp::OpQuadraticHexahedron: + case SMESHOp::OpTriQuadraticHexahedron: { if(checkLock(aStudy)) break; if ( vtkwnd ) { @@ -3068,26 +3287,17 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) SMDSAbs_EntityType type = SMDSEntity_Last; switch (theCommandID) { - case 4034: - type = SMDSEntity_Quad_Edge; break; - case 4035: - type = SMDSEntity_Quad_Triangle; break; - case 4036: - type = SMDSEntity_Quad_Quadrangle; break; - case 4136: - type = SMDSEntity_BiQuad_Quadrangle; break; - case 4137: - type = SMDSEntity_BiQuad_Triangle; break; - case 4037: - type = SMDSEntity_Quad_Tetra; break; - case 4038: - type = SMDSEntity_Quad_Pyramid; break; - case 4039: - type = SMDSEntity_Quad_Penta; break; - case 4040: - type = SMDSEntity_Quad_Hexa; break; - case 4140: - type = SMDSEntity_TriQuad_Hexa; break; + case SMESHOp::OpQuadraticEdge: type = SMDSEntity_Quad_Edge; break; + case SMESHOp::OpQuadraticTriangle: type = SMDSEntity_Quad_Triangle; break; + case SMESHOp::OpBiQuadraticTriangle: type = SMDSEntity_BiQuad_Triangle; break; + case SMESHOp::OpQuadraticQuadrangle: type = SMDSEntity_Quad_Quadrangle; break; + case SMESHOp::OpBiQuadraticQuadrangle: type = SMDSEntity_BiQuad_Quadrangle; break; + case SMESHOp::OpQuadraticPolygon: type = SMDSEntity_Quad_Polygon; break; + case SMESHOp::OpQuadraticTetrahedron: type = SMDSEntity_Quad_Tetra; break; + case SMESHOp::OpQuadraticPyramid: type = SMDSEntity_Quad_Pyramid; break; + case SMESHOp::OpQuadraticPentahedron: type = SMDSEntity_Quad_Penta; break; + case SMESHOp::OpQuadraticHexahedron: type = SMDSEntity_Quad_Hexa; break; + case SMESHOp::OpTriQuadraticHexahedron: type = SMDSEntity_TriQuad_Hexa; break; default: break; } if ( type != SMDSEntity_Last ) @@ -3099,7 +3309,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } - case 4041: // REMOVES NODES + case SMESHOp::OpRemoveNodes: { if(checkLock(aStudy)) break; if ( vtkwnd ) { @@ -3112,7 +3322,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } - case 4042: // REMOVES ELEMENTS + case SMESHOp::OpRemoveElements: // REMOVES ELEMENTS { if(checkLock(aStudy)) break; if( vtkwnd ) { @@ -3126,7 +3336,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } - case 4043: { // CLEAR_MESH + case SMESHOp::OpClearMesh: { if(checkLock(aStudy)) break; @@ -3166,7 +3376,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) updateObjBrowser(); break; } - case 4044: // REMOVE ORPHAN NODES + case SMESHOp::OpRemoveOrphanNodes: { if(checkLock(aStudy)) break; SALOME_ListIO selected; @@ -3184,6 +3394,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) SUIT_MessageBox::No ) == SUIT_MessageBox::Yes; if( confirm ) { try { + SUIT_OverrideCursor wc; SMESH::SMESH_MeshEditor_var aMeshEditor = aMesh->GetMeshEditor(); int removed = aMeshEditor->RemoveOrphanNodes(); SUIT_MessageBox::information(SMESHGUI::desktop(), @@ -3204,7 +3415,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } - case 4051: // RENUMBERING NODES + case SMESHOp::OpRenumberingNodes: { if(checkLock(aStudy)) break; if( vtkwnd ) { @@ -3218,7 +3429,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } - case 4052: // RENUMBERING ELEMENTS + case SMESHOp::OpRenumberingElements: { if(checkLock(aStudy)) break; if ( vtkwnd ) { @@ -3232,7 +3443,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } - case 4061: // TRANSLATION + case SMESHOp::OpTranslation: { if(checkLock(aStudy)) break; if ( vtkwnd ) { @@ -3245,7 +3456,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } - case 4062: // ROTATION + case SMESHOp::OpRotation: { if(checkLock(aStudy)) break; if( vtkwnd ) { @@ -3258,7 +3469,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } - case 4063: // SYMMETRY + case SMESHOp::OpSymmetry: { if(checkLock(aStudy)) break; if(vtkwnd) { @@ -3271,7 +3482,21 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } - case 4064: // SEWING + case SMESHOp::OpScale: + { + if(checkLock(aStudy)) break; + if ( vtkwnd ) { + EmitSignalDeactivateDialog(); + ( new SMESHGUI_ScaleDlg( this ) )->show(); + } + else { + SUIT_MessageBox::warning(SMESHGUI::desktop(), + tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK")); + } + break; + } + + case SMESHOp::OpSewing: { if(checkLock(aStudy)) break; if(vtkwnd) { @@ -3284,7 +3509,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } - case 4065: // MERGE NODES + case SMESHOp::OpMergeNodes: { if(checkLock(aStudy)) break; if(vtkwnd) { @@ -3297,7 +3522,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } - case 4066: // MERGE EQUAL ELEMENTS + case SMESHOp::OpMergeElements: { if (checkLock(aStudy)) break; if (vtkwnd) { @@ -3310,25 +3535,11 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - case 4067: // MAKE MESH PASS THROUGH POINT - startOperation( 4067 ); + case SMESHOp::OpMoveNode: // MAKE MESH PASS THROUGH POINT + startOperation( SMESHOp::OpMoveNode ); break; - case 4068: // SCALE - { - if(checkLock(aStudy)) break; - if ( vtkwnd ) { - EmitSignalDeactivateDialog(); - ( new SMESHGUI_ScaleDlg( this ) )->show(); - } - else { - SUIT_MessageBox::warning(SMESHGUI::desktop(), - tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK")); - } - break; - } - - case 4069: // DUPLICATE NODES + case SMESHOp::OpDuplicateNodes: { if(checkLock(aStudy)) break; if ( vtkwnd ) { @@ -3342,11 +3553,11 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - case 4070: // 0D_ON_ALL_NODES - startOperation( 4070 ); + case SMESHOp::OpElem0DOnElemNodes: // 0D_ON_ALL_NODES + startOperation( SMESHOp::OpElem0DOnElemNodes ); break; - case 5105: // Library of selection filters + case SMESHOp::OpSelectFiltersLibrary: // Library of selection filters { static QList aTypes; if ( aTypes.isEmpty() ) @@ -3363,50 +3574,42 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) myFilterLibraryDlg->raise(); } break; - - case 6017: // CONTROLS - case 6016: - case 6015: - case 6014: - case 6013: - case 6012: - case 6011: - case 6001: - case 6018: - case 6019: - case 6002: - case 6003: - case 6004: - case 6005: - case 6009: - case 6021: - case 6022: - case 6023: - case 6024: - case 6025: - case 6026: - case 6027: - case 6028: - case 6029: - case 6030: - case 6031: + // CONTROLS + case SMESHOp::OpFreeNode: + case SMESHOp::OpEqualNode: + case SMESHOp::OpFreeEdge: + case SMESHOp::OpFreeBorder: + case SMESHOp::OpLength: + case SMESHOp::OpConnection: + case SMESHOp::OpEqualEdge: + case SMESHOp::OpFreeFace: + case SMESHOp::OpBareBorderFace: + case SMESHOp::OpOverConstrainedFace: + case SMESHOp::OpLength2D: + case SMESHOp::OpConnection2D: + case SMESHOp::OpArea: + case SMESHOp::OpTaper: + case SMESHOp::OpAspectRatio: + case SMESHOp::OpMinimumAngle: + case SMESHOp::OpWarpingAngle: + case SMESHOp::OpSkew: + case SMESHOp::OpMaxElementLength2D: + case SMESHOp::OpEqualFace: + case SMESHOp::OpAspectRatio3D: + case SMESHOp::OpVolume: + case SMESHOp::OpMaxElementLength3D: + case SMESHOp::OpBareBorderVolume: + case SMESHOp::OpOverConstrainedVolume: + case SMESHOp::OpEqualVolume: if ( vtkwnd ) { LightApp_SelectionMgr* mgr = selectionMgr(); SALOME_ListIO selected; mgr->selectedObjects( selected ); - if ( selected.Extent() == 1 && selected.First()->hasEntry() ) { - _PTR(SObject) SO = aStudy->FindObjectID( selected.First()->getEntry() ); - if ( SO ) { - CORBA::Object_var aObject = SMESH::SObjectToObject( SO ); - SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow( aObject ); - SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow( aObject ); - SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( aObject ); - if ( !aMesh->_is_nil() || !aSubMesh->_is_nil() || !aGroup->_is_nil() ) { - ::Control( theCommandID ); - break; - } - } + if( !selected.IsEmpty() ) { + SUIT_OverrideCursor wc; + ::Control( theCommandID ); + break; } SUIT_MessageBox::warning(desktop(), tr( "SMESH_WRN_WARNING" ), @@ -3419,11 +3622,12 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) tr( "NOT_A_VTK_VIEWER" ) ); } break; - case 6032: + case SMESHOp::OpOverallMeshQuality: OverallMeshQuality(); break; - case 9010: + case SMESHOp::OpNumberingNodes: { + SUIT_OverrideCursor wc; LightApp_SelectionMgr* mgr = selectionMgr(); SALOME_ListIO selected; mgr->selectedObjects( selected ); @@ -3438,8 +3642,9 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } - case 9011: + case SMESHOp::OpNumberingElements: { + SUIT_OverrideCursor wc; LightApp_SelectionMgr* mgr = selectionMgr(); SALOME_ListIO selected; mgr->selectedObjects( selected ); @@ -3453,15 +3658,31 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } - case 501: - case 502: + case SMESHOp::OpPropertiesLength: + case SMESHOp::OpPropertiesArea: + case SMESHOp::OpPropertiesVolume: + case SMESHOp::OpMinimumDistance: + case SMESHOp::OpBoundingBox: { - int page = theCommandID == 501 ? SMESHGUI_MeasureDlg::MinDistance : SMESHGUI_MeasureDlg::BoundingBox; + int page = SMESHGUI_MeasureDlg::MinDistance; + if ( theCommandID == SMESHOp::OpBoundingBox ) + page = SMESHGUI_MeasureDlg::BoundingBox; + else if ( theCommandID == SMESHOp::OpPropertiesLength ) + page = SMESHGUI_MeasureDlg::Length; + else if ( theCommandID == SMESHOp::OpPropertiesArea ) + page = SMESHGUI_MeasureDlg::Area; + else if ( theCommandID == SMESHOp::OpPropertiesVolume ) + page = SMESHGUI_MeasureDlg::Volume; + EmitSignalDeactivateDialog(); SMESHGUI_MeasureDlg* dlg = new SMESHGUI_MeasureDlg( SMESHGUI::desktop(), page ); dlg->show(); break; } + case SMESHOp::OpSortChild: + ::sortChildren(); + break; + } anApp->updateActions(); //SRN: To update a Save button in the toolbar @@ -3586,178 +3807,216 @@ void SMESHGUI::initialize( CAM_Application* app ) // ----- create actions -------------- - //createSMESHAction( 111, "IMPORT_DAT", "", (Qt::CTRL+Qt::Key_B) ); - createSMESHAction( 112, "IMPORT_UNV", "", (Qt::CTRL+Qt::Key_U) ); - createSMESHAction( 113, "IMPORT_MED", "", (Qt::CTRL+Qt::Key_M) ); - createSMESHAction( 114, "NUM" ); - createSMESHAction( 115, "IMPORT_STL" ); - createSMESHAction( 116, "IMPORT_CGNS" ); - createSMESHAction( 117, "IMPORT_SAUV" ); - createSMESHAction( 118, "IMPORT_GMF" ); - createSMESHAction( 121, "DAT" ); - createSMESHAction( 122, "MED" ); - createSMESHAction( 123, "UNV" ); - createSMESHAction( 140, "STL" ); - createSMESHAction( 142, "CGNS"); - createSMESHAction( 144, "SAUV"); - createSMESHAction( 146, "GMF" ); - createSMESHAction( 124, "DAT" ); - createSMESHAction( 125, "MED" ); - createSMESHAction( 126, "UNV" ); - createSMESHAction( 141, "STL" ); - createSMESHAction( 143, "CGNS"); - createSMESHAction( 145, "SAUV"); - createSMESHAction( 147, "GMF" ); - createSMESHAction( 150, "FILE_INFO" ); - createSMESHAction( 33, "DELETE", "ICON_DELETE", Qt::Key_Delete ); - createSMESHAction( 5105, "SEL_FILTER_LIB" ); - createSMESHAction( 701, "COMPUTE", "ICON_COMPUTE" ); - createSMESHAction( 702, "CREATE_MESH", "ICON_DLG_INIT_MESH" ); - createSMESHAction( 703, "CREATE_SUBMESH", "ICON_DLG_ADD_SUBMESH" ); - createSMESHAction( 704, "EDIT_MESHSUBMESH","ICON_DLG_EDIT_MESH" ); - createSMESHAction( 705, "COPY_MESH", "ICON_COPY_MESH" ); - createSMESHAction( 710, "BUILD_COMPOUND", "ICON_BUILD_COMPOUND" ); - createSMESHAction( 711, "PRECOMPUTE", "ICON_PRECOMPUTE" ); - createSMESHAction( 712, "EVALUATE", "ICON_COMPUTE" ); - createSMESHAction( 713, "MESH_ORDER", "ICON_COMPUTE" ); - createSMESHAction( 806, "CREATE_GEO_GROUP","ICON_CREATE_GEO_GROUP" ); - createSMESHAction( 801, "CREATE_GROUP", "ICON_CREATE_GROUP" ); - createSMESHAction( 802, "CONSTRUCT_GROUP", "ICON_CONSTRUCT_GROUP" ); - createSMESHAction( 803, "EDIT_GROUP", "ICON_EDIT_GROUP" ); - createSMESHAction( 815, "EDIT_GEOMGROUP_AS_GROUP", "ICON_EDIT_GROUP" ); - createSMESHAction( 804, "ADD" ); - createSMESHAction( 805, "REMOVE" ); - createSMESHAction( 810, "UN_GROUP", "ICON_UNION" ); - createSMESHAction( 811, "INT_GROUP", "ICON_INTERSECT" ); - createSMESHAction( 812, "CUT_GROUP", "ICON_CUT" ); - createSMESHAction( 814, "UNDERLYING_ELEMS","ICON_UNDERLYING_ELEMS" ); - createSMESHAction( 813, "DEL_GROUP", "ICON_DEL_GROUP" ); - createSMESHAction( 900, "ADV_INFO", "ICON_ADV_INFO" ); - //createSMESHAction( 902, "STD_INFO", "ICON_STD_INFO" ); - //createSMESHAction( 903, "WHAT_IS", "ICON_WHAT_IS" ); // VSR: issue #0021242 (eliminate "Mesh Element Information" command) - createSMESHAction( 904, "FIND_ELEM", "ICON_FIND_ELEM" ); - createSMESHAction( 6001, "LENGTH", "ICON_LENGTH", 0, true ); - createSMESHAction( 6002, "FREE_EDGE", "ICON_FREE_EDGE", 0, true ); - createSMESHAction( 6021, "FREE_FACES", "ICON_FREE_FACES", 0, true ); - createSMESHAction( 6022, "MAX_ELEMENT_LENGTH_2D", "ICON_MAX_ELEMENT_LENGTH_2D", 0, true ); - createSMESHAction( 6023, "MAX_ELEMENT_LENGTH_3D", "ICON_MAX_ELEMENT_LENGTH_3D", 0, true ); - createSMESHAction( 6024, "BARE_BORDER_VOLUME", "ICON_BARE_BORDER_VOLUME", 0, true ); - createSMESHAction( 6025, "BARE_BORDER_FACE", "ICON_BARE_BORDER_FACE", 0, true ); - createSMESHAction( 6026, "OVER_CONSTRAINED_VOLUME","ICON_OVER_CONSTRAINED_VOLUME", 0, true ); - createSMESHAction( 6027, "OVER_CONSTRAINED_FACE", "ICON_OVER_CONSTRAINED_FACE", 0, true ); - createSMESHAction( 6028, "EQUAL_NODE", "ICON_EQUAL_NODE", 0, true ); - createSMESHAction( 6029, "EQUAL_EDGE", "ICON_EQUAL_EDGE", 0, true ); - createSMESHAction( 6030, "EQUAL_FACE", "ICON_EQUAL_FACE", 0, true ); - createSMESHAction( 6031, "EQUAL_VOLUME", "ICON_EQUAL_VOLUME", 0, true ); - createSMESHAction( 6032, "OVERALL_MESH_QUALITY" ); - createSMESHAction( 6003, "FREE_BORDER", "ICON_FREE_EDGE_2D", 0, true ); - createSMESHAction( 6004, "CONNECTION", "ICON_CONNECTION", 0, true ); - createSMESHAction( 6005, "FREE_NODE", "ICON_FREE_NODE", 0, true ); - createSMESHAction( 6011, "AREA", "ICON_AREA", 0, true ); - createSMESHAction( 6012, "TAPER", "ICON_TAPER", 0, true ); - createSMESHAction( 6013, "ASPECT", "ICON_ASPECT", 0, true ); - createSMESHAction( 6014, "MIN_ANG", "ICON_ANGLE", 0, true ); - createSMESHAction( 6015, "WARP", "ICON_WARP", 0, true ); - createSMESHAction( 6016, "SKEW", "ICON_SKEW", 0, true ); - createSMESHAction( 6017, "ASPECT_3D", "ICON_ASPECT_3D", 0, true ); - createSMESHAction( 6018, "LENGTH_2D", "ICON_LENGTH_2D", 0, true ); - createSMESHAction( 6019, "CONNECTION_2D", "ICON_CONNECTION_2D", 0, true ); - createSMESHAction( 6009, "VOLUME_3D", "ICON_VOLUME_3D", 0, true ); - createSMESHAction( 4000, "NODE", "ICON_DLG_NODE" ); - createSMESHAction( 4009, "ELEM0D", "ICON_DLG_ELEM0D" ); - createSMESHAction( 4008, "BALL", "ICON_DLG_BALL" ); - createSMESHAction( 4010, "EDGE", "ICON_DLG_EDGE" ); - createSMESHAction( 4021, "TRIANGLE", "ICON_DLG_TRIANGLE" ); - createSMESHAction( 4022, "QUAD", "ICON_DLG_QUADRANGLE" ); - createSMESHAction( 4023, "POLYGON", "ICON_DLG_POLYGON" ); - createSMESHAction( 4031, "TETRA", "ICON_DLG_TETRAS" ); - createSMESHAction( 4032, "HEXA", "ICON_DLG_HEXAS" ); - createSMESHAction( 4133, "PENTA", "ICON_DLG_PENTA" ); - createSMESHAction( 4134, "PYRAMID", "ICON_DLG_PYRAMID" ); - createSMESHAction( 4135, "OCTA", "ICON_DLG_OCTA" ); - createSMESHAction( 4033, "POLYHEDRON", "ICON_DLG_POLYHEDRON" ); - createSMESHAction( 4034, "QUADRATIC_EDGE", "ICON_DLG_QUADRATIC_EDGE" ); - createSMESHAction( 4035, "QUADRATIC_TRIANGLE", "ICON_DLG_QUADRATIC_TRIANGLE" ); - createSMESHAction( 4036, "QUADRATIC_QUADRANGLE", "ICON_DLG_QUADRATIC_QUADRANGLE" ); - createSMESHAction( 4136, "BIQUADRATIC_QUADRANGLE", "ICON_DLG_BIQUADRATIC_QUADRANGLE" ); - createSMESHAction( 4137, "BIQUADRATIC_TRIANGLE", "ICON_DLG_BIQUADRATIC_TRIANGLE" ); - createSMESHAction( 4037, "QUADRATIC_TETRAHEDRON", "ICON_DLG_QUADRATIC_TETRAHEDRON" ); - createSMESHAction( 4038, "QUADRATIC_PYRAMID", "ICON_DLG_QUADRATIC_PYRAMID" ); - createSMESHAction( 4039, "QUADRATIC_PENTAHEDRON", "ICON_DLG_QUADRATIC_PENTAHEDRON" ); - createSMESHAction( 4040, "QUADRATIC_HEXAHEDRON", "ICON_DLG_QUADRATIC_HEXAHEDRON" ); - createSMESHAction( 4140, "TRIQUADRATIC_HEXAHEDRON", "ICON_DLG_TRIQUADRATIC_HEXAHEDRON" ); - createSMESHAction( 4041, "REMOVE_NODES", "ICON_DLG_REM_NODE" ); - createSMESHAction( 4042, "REMOVE_ELEMENTS", "ICON_DLG_REM_ELEMENT" ); - createSMESHAction( 4044, "REMOVE_ORPHAN_NODES", "ICON_DLG_REM_ORPHAN_NODES" ); - createSMESHAction( 4043, "CLEAR_MESH" , "ICON_CLEAR_MESH" ); - createSMESHAction( 4051, "RENUM_NODES", "ICON_DLG_RENUMBERING_NODES" ); - createSMESHAction( 4052, "RENUM_ELEMENTS", "ICON_DLG_RENUMBERING_ELEMENTS" ); - createSMESHAction( 4061, "TRANS", "ICON_SMESH_TRANSLATION_VECTOR" ); - createSMESHAction( 4062, "ROT", "ICON_DLG_MESH_ROTATION" ); - createSMESHAction( 4063, "SYM", "ICON_SMESH_SYMMETRY_PLANE" ); - createSMESHAction( 4064, "SEW", "ICON_SMESH_SEWING_FREEBORDERS" ); - createSMESHAction( 4065, "MERGE", "ICON_SMESH_MERGE_NODES" ); - createSMESHAction( 4066, "MERGE_ELEMENTS", "ICON_DLG_MERGE_ELEMENTS" ); - createSMESHAction( 4067, "MESH_THROU_POINT","ICON_DLG_MOVE_NODE" ); - createSMESHAction( 4068, "SCALE", "ICON_DLG_MESH_SCALE" ); - createSMESHAction( 4069, "DUPLICATE_NODES", "ICON_SMESH_DUPLICATE_NODES" ); - createSMESHAction( 4070, "0D_ON_ALL_NODES", "ICON_0D_ON_ALL_NODES" ); - createSMESHAction( 407, "INV", "ICON_DLG_MESH_DIAGONAL" ); - createSMESHAction( 408, "UNION2", "ICON_UNION2TRI" ); - createSMESHAction( 409, "ORIENT", "ICON_DLG_MESH_ORIENTATION" ); - createSMESHAction( 410, "UNION", "ICON_UNIONTRI" ); - createSMESHAction( 411, "CUT", "ICON_CUTQUAD" ); - createSMESHAction( 412, "SMOOTH", "ICON_DLG_SMOOTHING" ); - createSMESHAction( 413, "EXTRUSION", "ICON_EXTRUSION" ); - createSMESHAction( 414, "REVOLUTION", "ICON_REVOLUTION" ); - createSMESHAction( 415, "MAP", "ICON_MAP" ); - createSMESHAction( 416, "EXTRUSION_ALONG", "ICON_EXTRUSION_ALONG" ); - createSMESHAction( 417, "CONV_TO_QUAD", "ICON_CONV_TO_QUAD" ); - createSMESHAction( 418, "2D_FROM_3D", "ICON_2D_FROM_3D" ); - createSMESHAction( 419, "SPLIT_TO_TETRA", "ICON_SPLIT_TO_TETRA" ); - createSMESHAction( 420, "REORIENT_2D", "ICON_REORIENT_2D" ); - createSMESHAction( 200, "RESET" ); - createSMESHAction( 201, "SCALAR_BAR_PROP" ); - createSMESHAction( 2021, "SAVE_DISTRIBUTION" ); - createSMESHAction( 2022, "SHOW_DISTRIBUTION","",0, true ); + //createSMESHAction( SMESHOp::OpImportDAT, "IMPORT_DAT", "", (Qt::CTRL+Qt::Key_B) ); + createSMESHAction( SMESHOp::OpImportUNV, "IMPORT_UNV", "", (Qt::CTRL+Qt::Key_I) ); + createSMESHAction( SMESHOp::OpImportMED, "IMPORT_MED", "", (Qt::CTRL+Qt::Key_M) ); + //createSMESHAction( 114, "NUM" ); + createSMESHAction( SMESHOp::OpImportSTL, "IMPORT_STL" ); +#ifdef WITH_CGNS + createSMESHAction( SMESHOp::OpImportCGNS, "IMPORT_CGNS" ); +#endif + createSMESHAction( SMESHOp::OpImportSAUV, "IMPORT_SAUV" ); + createSMESHAction( SMESHOp::OpImportGMF, "IMPORT_GMF" ); + createSMESHAction( SMESHOp::OpExportDAT, "DAT" ); + createSMESHAction( SMESHOp::OpExportMED, "MED" ); + createSMESHAction( SMESHOp::OpExportUNV, "UNV" ); + createSMESHAction( SMESHOp::OpExportSTL, "STL" ); +#ifdef WITH_CGNS + createSMESHAction( SMESHOp::OpExportCGNS, "CGNS"); +#endif + createSMESHAction( SMESHOp::OpExportSAUV, "SAUV"); + createSMESHAction( SMESHOp::OpExportGMF, "GMF" ); + createSMESHAction( SMESHOp::OpPopupExportDAT, "DAT" ); + createSMESHAction( SMESHOp::OpPopupExportMED, "MED" ); + createSMESHAction( SMESHOp::OpPopupExportUNV, "UNV" ); + createSMESHAction( SMESHOp::OpPopupExportSTL, "STL" ); +#ifdef WITH_CGNS + createSMESHAction( SMESHOp::OpPopupExportCGNS, "CGNS"); +#endif + createSMESHAction( SMESHOp::OpPopupExportSAUV, "SAUV"); + createSMESHAction( SMESHOp::OpPopupExportGMF, "GMF" ); + createSMESHAction( SMESHOp::OpFileInformation, "FILE_INFO" ); + createSMESHAction( SMESHOp::OpDelete, "DELETE", "ICON_DELETE", Qt::Key_Delete ); + createSMESHAction( SMESHOp::OpSelectFiltersLibrary, "SEL_FILTER_LIB" ); + createSMESHAction( SMESHOp::OpCreateMesh, "CREATE_MESH", "ICON_DLG_INIT_MESH" ); + createSMESHAction( SMESHOp::OpCreateSubMesh, "CREATE_SUBMESH", "ICON_DLG_ADD_SUBMESH" ); + createSMESHAction( SMESHOp::OpEditMeshOrSubMesh, "EDIT_MESHSUBMESH", "ICON_DLG_EDIT_MESH" ); + createSMESHAction( SMESHOp::OpEditMesh, "EDIT_MESH", "ICON_DLG_EDIT_MESH" ); + createSMESHAction( SMESHOp::OpEditSubMesh, "EDIT_SUBMESH", "ICON_DLG_EDIT_MESH" ); + createSMESHAction( SMESHOp::OpBuildCompoundMesh, "BUILD_COMPOUND", "ICON_BUILD_COMPOUND" ); + createSMESHAction( SMESHOp::OpCopyMesh, "COPY_MESH", "ICON_COPY_MESH" ); + createSMESHAction( SMESHOp::OpCompute, "COMPUTE", "ICON_COMPUTE" ); + createSMESHAction( SMESHOp::OpComputeSubMesh, "COMPUTE_SUBMESH", "ICON_COMPUTE" ); + createSMESHAction( SMESHOp::OpPreCompute, "PRECOMPUTE", "ICON_PRECOMPUTE" ); + createSMESHAction( SMESHOp::OpEvaluate, "EVALUATE", "ICON_EVALUATE" ); + createSMESHAction( SMESHOp::OpMeshOrder, "MESH_ORDER", "ICON_MESH_ORDER"); + createSMESHAction( SMESHOp::OpCreateGroup, "CREATE_GROUP", "ICON_CREATE_GROUP" ); + createSMESHAction( SMESHOp::OpCreateGeometryGroup, "CREATE_GEO_GROUP", "ICON_CREATE_GEO_GROUP" ); + createSMESHAction( SMESHOp::OpConstructGroup, "CONSTRUCT_GROUP", "ICON_CONSTRUCT_GROUP" ); + createSMESHAction( SMESHOp::OpEditGroup, "EDIT_GROUP", "ICON_EDIT_GROUP" ); + createSMESHAction( SMESHOp::OpEditGeomGroupAsGroup, "EDIT_GEOMGROUP_AS_GROUP", "ICON_EDIT_GROUP" ); + createSMESHAction( SMESHOp::OpUnionGroups, "UN_GROUP", "ICON_UNION" ); + createSMESHAction( SMESHOp::OpIntersectGroups, "INT_GROUP", "ICON_INTERSECT" ); + createSMESHAction( SMESHOp::OpCutGroups, "CUT_GROUP", "ICON_CUT" ); + createSMESHAction( SMESHOp::OpGroupUnderlyingElem, "UNDERLYING_ELEMS", "ICON_UNDERLYING_ELEMS" ); + createSMESHAction( SMESHOp::OpAddElemGroupPopup, "ADD" ); + createSMESHAction( SMESHOp::OpRemoveElemGroupPopup, "REMOVE" ); + createSMESHAction( SMESHOp::OpDeleteGroup, "DEL_GROUP", "ICON_DEL_GROUP" ); + createSMESHAction( SMESHOp::OpMeshInformation , "ADV_INFO", "ICON_ADV_INFO" ); + //createSMESHAction( SMESHOp::OpStdInfo, "STD_INFO", "ICON_STD_INFO" ); + //createSMESHAction( SMESHOp::OpWhatIs, "WHAT_IS", "ICON_WHAT_IS" ); // VSR: issue #0021242 (eliminate "Mesh Element Information" command) + createSMESHAction( SMESHOp::OpFindElementByPoint, "FIND_ELEM", "ICON_FIND_ELEM" ); + //update + createSMESHAction( SMESHOp::OpFreeNode, "FREE_NODE", "ICON_FREE_NODE", 0, true ); + createSMESHAction( SMESHOp::OpEqualNode, "EQUAL_NODE", "ICON_EQUAL_NODE", 0, true ); + createSMESHAction( SMESHOp::OpFreeEdge, "FREE_EDGE", "ICON_FREE_EDGE", 0, true ); + createSMESHAction( SMESHOp::OpFreeBorder, "FREE_BORDER", "ICON_FREE_EDGE_2D", 0, true ); + createSMESHAction( SMESHOp::OpLength, "LENGTH", "ICON_LENGTH", 0, true ); + createSMESHAction( SMESHOp::OpConnection, "CONNECTION", "ICON_CONNECTION", 0, true ); + createSMESHAction( SMESHOp::OpEqualEdge, "EQUAL_EDGE", "ICON_EQUAL_EDGE", 0, true ); + createSMESHAction( SMESHOp::OpFreeFace, "FREE_FACES", "ICON_FREE_FACES", 0, true ); + createSMESHAction( SMESHOp::OpBareBorderFace, "BARE_BORDER_FACE", "ICON_BARE_BORDER_FACE", 0, true ); + createSMESHAction( SMESHOp::OpOverConstrainedFace, "OVER_CONSTRAINED_FACE", "ICON_OVER_CONSTRAINED_FACE", 0, true ); + createSMESHAction( SMESHOp::OpLength2D, "LENGTH_2D", "ICON_LENGTH_2D", 0, true ); + createSMESHAction( SMESHOp::OpConnection2D, "CONNECTION_2D", "ICON_CONNECTION_2D", 0, true ); + createSMESHAction( SMESHOp::OpArea, "AREA", "ICON_AREA", 0, true ); + createSMESHAction( SMESHOp::OpTaper, "TAPER", "ICON_TAPER", 0, true ); + createSMESHAction( SMESHOp::OpAspectRatio, "ASPECT", "ICON_ASPECT", 0, true ); + createSMESHAction( SMESHOp::OpMinimumAngle, "MIN_ANG", "ICON_ANGLE", 0, true ); + createSMESHAction( SMESHOp::OpWarpingAngle, "WARP", "ICON_WARP", 0, true ); + createSMESHAction( SMESHOp::OpSkew, "SKEW", "ICON_SKEW", 0, true ); + createSMESHAction( SMESHOp::OpMaxElementLength2D, "MAX_ELEMENT_LENGTH_2D", "ICON_MAX_ELEMENT_LENGTH_2D", 0, true ); + createSMESHAction( SMESHOp::OpEqualFace, "EQUAL_FACE", "ICON_EQUAL_FACE", 0, true ); + createSMESHAction( SMESHOp::OpAspectRatio3D, "ASPECT_3D", "ICON_ASPECT_3D", 0, true ); + createSMESHAction( SMESHOp::OpVolume, "VOLUME_3D", "ICON_VOLUME_3D", 0, true ); + createSMESHAction( SMESHOp::OpMaxElementLength3D, "MAX_ELEMENT_LENGTH_3D", "ICON_MAX_ELEMENT_LENGTH_3D", 0, true ); + createSMESHAction( SMESHOp::OpBareBorderVolume, "BARE_BORDER_VOLUME", "ICON_BARE_BORDER_VOLUME", 0, true ); + createSMESHAction( SMESHOp::OpOverConstrainedVolume, "OVER_CONSTRAINED_VOLUME", "ICON_OVER_CONSTRAINED_VOLUME", 0, true ); + createSMESHAction( SMESHOp::OpEqualVolume, "EQUAL_VOLUME", "ICON_EQUAL_VOLUME", 0, true ); + createSMESHAction( SMESHOp::OpOverallMeshQuality, "OVERALL_MESH_QUALITY" ); + + createSMESHAction( SMESHOp::OpNode, "NODE", "ICON_DLG_NODE" ); + createSMESHAction( SMESHOp::OpElem0D, "ELEM0D", "ICON_DLG_ELEM0D" ); + createSMESHAction( SMESHOp::OpElem0DOnElemNodes, "0D_ON_ALL_NODES", "ICON_0D_ON_ALL_NODES" ); + createSMESHAction( SMESHOp::OpBall, "BALL", "ICON_DLG_BALL" ); + createSMESHAction( SMESHOp::OpEdge, "EDGE", "ICON_DLG_EDGE" ); + createSMESHAction( SMESHOp::OpTriangle, "TRIANGLE", "ICON_DLG_TRIANGLE" ); + createSMESHAction( SMESHOp::OpQuadrangle, "QUAD", "ICON_DLG_QUADRANGLE" ); + createSMESHAction( SMESHOp::OpPolygon, "POLYGON", "ICON_DLG_POLYGON" ); + createSMESHAction( SMESHOp::OpTetrahedron, "TETRA", "ICON_DLG_TETRAS" ); + createSMESHAction( SMESHOp::OpHexahedron, "HEXA", "ICON_DLG_HEXAS" ); + createSMESHAction( SMESHOp::OpPentahedron, "PENTA", "ICON_DLG_PENTA" ); + createSMESHAction( SMESHOp::OpPyramid , "PYRAMID", "ICON_DLG_PYRAMID" ); + createSMESHAction( SMESHOp::OpHexagonalPrism, "OCTA", "ICON_DLG_OCTA" ); + createSMESHAction( SMESHOp::OpPolyhedron, "POLYHEDRON", "ICON_DLG_POLYHEDRON" ); + createSMESHAction( SMESHOp::OpQuadraticEdge, "QUADRATIC_EDGE", "ICON_DLG_QUADRATIC_EDGE" ); + createSMESHAction( SMESHOp::OpQuadraticTriangle, "QUADRATIC_TRIANGLE", "ICON_DLG_QUADRATIC_TRIANGLE" ); + createSMESHAction( SMESHOp::OpBiQuadraticTriangle, "BIQUADRATIC_TRIANGLE", "ICON_DLG_BIQUADRATIC_TRIANGLE" ); + createSMESHAction( SMESHOp::OpQuadraticQuadrangle, "QUADRATIC_QUADRANGLE", "ICON_DLG_QUADRATIC_QUADRANGLE" ); + createSMESHAction( SMESHOp::OpBiQuadraticQuadrangle, "BIQUADRATIC_QUADRANGLE", "ICON_DLG_BIQUADRATIC_QUADRANGLE" ); + createSMESHAction( SMESHOp::OpQuadraticPolygon, "QUADRATIC_POLYGON", "ICON_DLG_QUADRATIC_POLYGON" ); + createSMESHAction( SMESHOp::OpQuadraticTetrahedron, "QUADRATIC_TETRAHEDRON", "ICON_DLG_QUADRATIC_TETRAHEDRON" ); + createSMESHAction( SMESHOp::OpQuadraticPyramid, "QUADRATIC_PYRAMID", "ICON_DLG_QUADRATIC_PYRAMID" ); + createSMESHAction( SMESHOp::OpQuadraticPentahedron, "QUADRATIC_PENTAHEDRON", "ICON_DLG_QUADRATIC_PENTAHEDRON" ); + createSMESHAction( SMESHOp::OpQuadraticHexahedron, "QUADRATIC_HEXAHEDRON", "ICON_DLG_QUADRATIC_HEXAHEDRON" ); + createSMESHAction( SMESHOp::OpTriQuadraticHexahedron, "TRIQUADRATIC_HEXAHEDRON", "ICON_DLG_TRIQUADRATIC_HEXAHEDRON" ); + + createSMESHAction( SMESHOp::OpRemoveNodes, "REMOVE_NODES", "ICON_DLG_REM_NODE" ); + createSMESHAction( SMESHOp::OpRemoveElements, "REMOVE_ELEMENTS", "ICON_DLG_REM_ELEMENT" ); + createSMESHAction( SMESHOp::OpRemoveOrphanNodes, "REMOVE_ORPHAN_NODES", "ICON_DLG_REM_ORPHAN_NODES" ); + createSMESHAction( SMESHOp::OpClearMesh, "CLEAR_MESH", "ICON_CLEAR_MESH" ); + + //createSMESHAction( SMESHOp::OpRenumberingNodes, "RENUM_NODES", "ICON_DLG_RENUMBERING_NODES" ); + //createSMESHAction( SMESHOp::OpRenumberingElements, "RENUM_ELEMENTS", "ICON_DLG_RENUMBERING_ELEMENTS" ); + + createSMESHAction( SMESHOp::OpTranslation, "TRANS", "ICON_SMESH_TRANSLATION_VECTOR" ); + createSMESHAction( SMESHOp::OpRotation, "ROT", "ICON_DLG_MESH_ROTATION" ); + createSMESHAction( SMESHOp::OpSymmetry, "SYM", "ICON_SMESH_SYMMETRY_PLANE" ); + createSMESHAction( SMESHOp::OpScale, "SCALE", "ICON_DLG_MESH_SCALE" ); + createSMESHAction( SMESHOp::OpSewing, "SEW", "ICON_SMESH_SEWING_FREEBORDERS" ); + createSMESHAction( SMESHOp::OpMergeNodes, "MERGE", "ICON_SMESH_MERGE_NODES" ); + createSMESHAction( SMESHOp::OpMergeElements, "MERGE_ELEMENTS", "ICON_DLG_MERGE_ELEMENTS" ); + createSMESHAction( SMESHOp::OpMoveNode, "MESH_THROU_POINT","ICON_DLG_MOVE_NODE" ); + createSMESHAction( SMESHOp::OpDuplicateNodes, "DUPLICATE_NODES", "ICON_SMESH_DUPLICATE_NODES" ); + createSMESHAction( SMESHOp::OpDiagonalInversion, "INV", "ICON_DLG_MESH_DIAGONAL" ); + createSMESHAction( SMESHOp::OpUnionOfTwoTriangle, "UNION2", "ICON_UNION2TRI" ); + createSMESHAction( SMESHOp::OpOrientation, "ORIENT", "ICON_DLG_MESH_ORIENTATION" ); + createSMESHAction( SMESHOp::OpReorientFaces, "REORIENT_2D", "ICON_REORIENT_2D" ); + createSMESHAction( SMESHOp::OpUnionOfTriangles, "UNION", "ICON_UNIONTRI" ); + createSMESHAction( SMESHOp::OpCuttingOfQuadrangles, "CUT", "ICON_CUTQUAD" ); + createSMESHAction( SMESHOp::OpSplitVolumes, "SPLIT_TO_TETRA", "ICON_SPLIT_TO_TETRA" ); + createSMESHAction( SMESHOp::OpSplitBiQuadratic, "SPLIT_BIQUAD", "ICON_SPLIT_BIQUAD" ); + createSMESHAction( SMESHOp::OpSmoothing, "SMOOTH", "ICON_DLG_SMOOTHING" ); + createSMESHAction( SMESHOp::OpExtrusion, "EXTRUSION", "ICON_EXTRUSION" ); + createSMESHAction( SMESHOp::OpExtrusionAlongAPath, "EXTRUSION_ALONG", "ICON_EXTRUSION_ALONG" ); + createSMESHAction( SMESHOp::OpRevolution, "REVOLUTION", "ICON_REVOLUTION" ); + createSMESHAction( SMESHOp::OpPatternMapping, "MAP", "ICON_MAP" ); + createSMESHAction( SMESHOp::OpConvertMeshToQuadratic, "CONV_TO_QUAD", "ICON_CONV_TO_QUAD" ); + createSMESHAction( SMESHOp::OpCreateBoundaryElements, "2D_FROM_3D", "ICON_2D_FROM_3D" ); + + createSMESHAction( SMESHOp::OpReset, "RESET" ); + createSMESHAction( SMESHOp::OpScalarBarProperties, "SCALAR_BAR_PROP" ); + createSMESHAction( SMESHOp::OpShowScalarBar, "SHOW_SCALAR_BAR","",0, true ); + createSMESHAction( SMESHOp::OpSaveDistribution, "SAVE_DISTRIBUTION" ); + createSMESHAction( SMESHOp::OpShowDistribution, "SHOW_DISTRIBUTION","",0, true ); #ifndef DISABLE_PLOT2DVIEWER - createSMESHAction( 2023, "PLOT_DISTRIBUTION" ); + createSMESHAction( SMESHOp::OpPlotDistribution, "PLOT_DISTRIBUTION" ); #endif - createSMESHAction( 211, "WIRE", "ICON_WIRE", 0, true ); - createSMESHAction( 212, "SHADE", "ICON_SHADE", 0, true ); - createSMESHAction( 213, "SHRINK", "ICON_SHRINK", 0, true ); - createSMESHAction( 214, "UPDATE", "ICON_UPDATE" ); - createSMESHAction( 215, "NODES", "ICON_POINTS", 0, true ); - createSMESHAction( 222, "BALLS", "ICON_DLG_BALL", 0, true ); - createSMESHAction( 216, "ELEMS0D", "ICON_DLG_ELEM0D", 0, true ); - createSMESHAction( 217, "EDGES", "ICON_DLG_EDGE", 0, true ); - createSMESHAction( 218, "FACES", "ICON_DLG_TRIANGLE", 0, true ); - createSMESHAction( 219, "VOLUMES", "ICON_DLG_TETRAS", 0, true ); - createSMESHAction( 220, "ALL" ); - createSMESHAction( 221, "FACE_ORIENTATION", "", 0, true ); - - createSMESHAction( 231, "LINE_REPRESENTATION", "", 0, true ); - createSMESHAction( 232, "ARC_REPRESENTATION", "", 0, true ); - - createSMESHAction( 1100, "EDIT_HYPO" ); - createSMESHAction( 1102, "UNASSIGN" ); - createSMESHAction( 9010, "NUM_NODES", "", 0, true ); - createSMESHAction( 9011, "NUM_ELEMENTS", "", 0, true ); - createSMESHAction( 1131, "DISPMODE" ); - createSMESHAction( 1132, "COLORS" ); - createSMESHAction( 1133, "TRANSP" ); - createSMESHAction( 1134, "CLIP" ); - createSMESHAction( 1135, "DISP_ENT" ); - createSMESHAction( 1136, "AUTO_COLOR" ); - createSMESHAction( 1137, "DISABLE_AUTO_COLOR" ); - createSMESHAction( 2000, "CTRL" ); - - createSMESHAction( 501, "MEASURE_MIN_DIST", "ICON_MEASURE_MIN_DIST" ); - createSMESHAction( 502, "MEASURE_BND_BOX", "ICON_MEASURE_BND_BOX" ); - - createSMESHAction( 300, "HIDE" ); - createSMESHAction( 301, "SHOW" ); - createSMESHAction( 302, "DISPLAY_ONLY" ); + createSMESHAction( SMESHOp::OpDMWireframe, "WIRE", "ICON_WIRE", 0, true ); + createSMESHAction( SMESHOp::OpDMShading, "SHADE", "ICON_SHADE", 0, true ); + createSMESHAction( SMESHOp::OpDMNodes, "NODES", "ICON_POINTS", 0, true ); + createSMESHAction( SMESHOp::OpDMShrink, "SHRINK", "ICON_SHRINK", 0, true ); + createSMESHAction( SMESHOp::OpUpdate, "UPDATE", "ICON_UPDATE" ); + createSMESHAction( SMESHOp::OpDE0DElements, "ELEMS0D", "ICON_DLG_ELEM0D", 0, true ); + createSMESHAction( SMESHOp::OpDEEdges, "EDGES", "ICON_DLG_EDGE", 0, true ); + createSMESHAction( SMESHOp::OpDEFaces, "FACES", "ICON_DLG_TRIANGLE", 0, true ); + createSMESHAction( SMESHOp::OpDEVolumes, "VOLUMES", "ICON_DLG_TETRAS", 0, true ); + createSMESHAction( SMESHOp::OpDEBalls, "BALLS", "ICON_DLG_BALL", 0, true ); + createSMESHAction( SMESHOp::OpDEChoose, "CHOOSE", "ICON_DLG_CHOOSE", 0, false ); + createSMESHAction( SMESHOp::OpDEAllEntity, "ALL", "ICON_DLG_CHOOSE_ALL", 0, false ); + createSMESHAction( SMESHOp::OpOrientationOnFaces, "FACE_ORIENTATION", "", 0, true ); + + createSMESHAction( SMESHOp::OpRepresentationLines, "LINE_REPRESENTATION", "", 0, true ); + createSMESHAction( SMESHOp::OpRepresentationArcs, "ARC_REPRESENTATION", "", 0, true ); + + createSMESHAction( SMESHOp::OpEditHypothesis, "EDIT_HYPO" ); + createSMESHAction( SMESHOp::OpUnassign, "UNASSIGN" ); + createSMESHAction( SMESHOp::OpNumberingNodes, "NUM_NODES", "", 0, true ); + createSMESHAction( SMESHOp::OpNumberingElements, "NUM_ELEMENTS", "", 0, true ); + createSMESHAction( SMESHOp::OpProperties, "COLORS" ); + createSMESHAction( SMESHOp::OpTransparency, "TRANSP" ); + createSMESHAction( SMESHOp::OpClipping, "CLIP" ); + createSMESHAction( SMESHOp::OpAutoColor, "AUTO_COLOR" ); + createSMESHAction( SMESHOp::OpDisableAutoColor, "DISABLE_AUTO_COLOR" ); + + createSMESHAction( SMESHOp::OpMinimumDistance, "MEASURE_MIN_DIST", "ICON_MEASURE_MIN_DIST" ); + createSMESHAction( SMESHOp::OpBoundingBox, "MEASURE_BND_BOX", "ICON_MEASURE_BND_BOX" ); + createSMESHAction( SMESHOp::OpPropertiesLength, "MEASURE_LENGTH", "ICON_MEASURE_LENGTH" ); + createSMESHAction( SMESHOp::OpPropertiesArea, "MEASURE_AREA", "ICON_MEASURE_AREA" ); + createSMESHAction( SMESHOp::OpPropertiesVolume, "MEASURE_VOLUME", "ICON_MEASURE_VOLUME" ); + + createSMESHAction( SMESHOp::OpHide, "HIDE" ); + createSMESHAction( SMESHOp::OpShow, "SHOW" ); + createSMESHAction( SMESHOp::OpShowOnly, "DISPLAY_ONLY" ); + + createSMESHAction( SMESHOp::OpSortChild, "SORT_CHILD_ITEMS" ); + + QList aCtrlActions; + aCtrlActions << SMESHOp::OpFreeNode << SMESHOp::OpEqualNode // node controls + << SMESHOp::OpFreeEdge << SMESHOp::OpFreeBorder + << SMESHOp::OpLength << SMESHOp::OpConnection << SMESHOp::OpEqualEdge // edge controls + << SMESHOp::OpFreeFace << SMESHOp::OpLength2D << SMESHOp::OpConnection2D + << SMESHOp::OpArea << SMESHOp::OpTaper << SMESHOp::OpAspectRatio + << SMESHOp::OpMinimumAngle << SMESHOp::OpWarpingAngle << SMESHOp::OpSkew + << SMESHOp::OpMaxElementLength2D << SMESHOp::OpBareBorderFace + << SMESHOp::OpOverConstrainedFace << SMESHOp::OpEqualFace // face controls + << SMESHOp::OpAspectRatio3D << SMESHOp::OpVolume + << SMESHOp::OpMaxElementLength3D << SMESHOp::OpBareBorderVolume + << SMESHOp::OpOverConstrainedVolume << SMESHOp::OpEqualVolume; // volume controls + QActionGroup* aCtrlGroup = new QActionGroup( application()->desktop() ); + aCtrlGroup->setExclusive( true ); + for( int i = 0; i < aCtrlActions.size(); i++ ) + aCtrlGroup->addAction( action( aCtrlActions[i] ) ); // ----- create menu -------------- int fileId = createMenu( tr( "MEN_FILE" ), -1, 1 ), @@ -3771,310 +4030,337 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( separator(), fileId ); + QMenu* nodeMenu = new QMenu(); QMenu* edgeMenu = new QMenu(); + QMenu* faceMenu = new QMenu(); QMenu* volumeMenu = new QMenu(); int importId = createMenu( tr( "MEN_IMPORT" ), fileId, -1, 10 ), exportId = createMenu( tr( "MEN_EXPORT" ), fileId, -1, 10 ), - nodeId = createMenu( tr( "MEN_NODE_CTRL" ), ctrlId, -1, 10 ), - edgeId = createMenu( tr( "MEN_EDGE_CTRL" ), ctrlId, -1, 10 ), - faceId = createMenu( tr( "MEN_FACE_CTRL" ), ctrlId, -1, 10 ), - volumeId = createMenu( tr( "MEN_VOLUME_CTRL" ), ctrlId, -1, 10 ), + nodeId = createMenu( tr( "MEN_NODE_CTRL" ), ctrlId, -1, 10, -1, nodeMenu ), + edgeId = createMenu( tr( "MEN_EDGE_CTRL" ), ctrlId, -1, 10, -1, edgeMenu ), + faceId = createMenu( tr( "MEN_FACE_CTRL" ), ctrlId, -1, 10, -1, faceMenu ), + volumeId = createMenu( tr( "MEN_VOLUME_CTRL" ), ctrlId, -1, 10, -1, volumeMenu ), addId = createMenu( tr( "MEN_ADD" ), modifyId, 402 ), removeId = createMenu( tr( "MEN_REMOVE" ), modifyId, 403 ), - renumId = createMenu( tr( "MEN_RENUM" ), modifyId, 404 ), - transfId = createMenu( tr( "MEN_TRANSF" ), modifyId, 405 ); - - //createMenu( 111, importId, -1 ); - createMenu( 112, importId, -1 ); - createMenu( 113, importId, -1 ); - createMenu( 115, importId, -1 ); + //renumId = createMenu( tr( "MEN_RENUM" ), modifyId, 404 ), + transfId = createMenu( tr( "MEN_TRANSF" ), modifyId, 405 ), + basicPropId = createMenu( tr( "MEN_BASIC_PROPERTIES" ), measureId, -1, 10 ); + + //createMenu( SMESHOp::OpImportDAT, importId, -1 ); + createMenu( SMESHOp::OpImportUNV, importId, -1 ); + createMenu( SMESHOp::OpImportMED, importId, -1 ); + createMenu( SMESHOp::OpImportSTL, importId, -1 ); #ifdef WITH_CGNS - createMenu( 116, importId, -1 ); + createMenu( SMESHOp::OpImportCGNS, importId, -1 ); #endif - createMenu( 117, importId, -1 ); - createMenu( 118, importId, -1 ); - createMenu( 121, exportId, -1 ); - createMenu( 122, exportId, -1 ); - createMenu( 123, exportId, -1 ); - createMenu( 140, exportId, -1 ); // export to STL + createMenu( SMESHOp::OpImportSAUV, importId, -1 ); + createMenu( SMESHOp::OpImportGMF, importId, -1 ); + createMenu( SMESHOp::OpExportDAT, exportId, -1 ); + createMenu( SMESHOp::OpExportMED, exportId, -1 ); + createMenu( SMESHOp::OpExportUNV, exportId, -1 ); + createMenu( SMESHOp::OpExportSTL, exportId, -1 ); #ifdef WITH_CGNS - createMenu( 142, exportId, -1 ); // export to CGNS + createMenu( SMESHOp::OpExportCGNS, exportId, -1 ); #endif - createMenu( 144, exportId, -1 ); // export to SAUV - createMenu( 146, exportId, -1 ); // export to GMF + createMenu( SMESHOp::OpExportSAUV, exportId, -1 ); + createMenu( SMESHOp::OpExportGMF, exportId, -1 ); createMenu( separator(), fileId, 10 ); - createMenu( 33, editId, -1 ); - - createMenu( 5105, toolsId, -1 ); - - createMenu( 702, meshId, -1 ); // "Mesh" menu - createMenu( 703, meshId, -1 ); - createMenu( 704, meshId, -1 ); - createMenu( 710, meshId, -1 ); - createMenu( 705, meshId, -1 ); - createMenu( separator(), meshId, -1 ); - createMenu( 701, meshId, -1 ); - createMenu( 711, meshId, -1 ); - createMenu( 712, meshId, -1 ); - createMenu( 713, meshId, -1 ); - createMenu( separator(), meshId, -1 ); - createMenu( 801, meshId, -1 ); - createMenu( 806, meshId, -1 ); - createMenu( 802, meshId, -1 ); - createMenu( 803, meshId, -1 ); - createMenu( 815, meshId, -1 ); - createMenu( separator(), meshId, -1 ); - createMenu( 810, meshId, -1 ); - createMenu( 811, meshId, -1 ); - createMenu( 812, meshId, -1 ); - createMenu( separator(), meshId, -1 ); - createMenu( 814, meshId, -1 ); - createMenu( separator(), meshId, -1 ); - createMenu( 900, meshId, -1 ); - //createMenu( 902, meshId, -1 ); - //createMenu( 903, meshId, -1 ); // VSR: issue #0021242 (eliminate "Mesh Element Information" command) - createMenu( 904, meshId, -1 ); - createMenu( separator(), meshId, -1 ); - - createMenu( 6005, nodeId, -1 ); - createMenu( 6028, nodeId, -1 ); - createMenu( 6002, edgeId, -1 ); - createMenu( 6003, edgeId, -1 ); - createMenu( 6001, edgeId, -1 ); - createMenu( 6004, edgeId, -1 ); - createMenu( 6029, edgeId, -1 ); - createMenu( 6021, faceId, -1 ); - createMenu( 6025, faceId, -1 ); - createMenu( 6027, faceId, -1 ); - createMenu( 6018, faceId, -1 ); - createMenu( 6019, faceId, -1 ); - createMenu( 6011, faceId, -1 ); - createMenu( 6012, faceId, -1 ); - createMenu( 6013, faceId, -1 ); - createMenu( 6014, faceId, -1 ); - createMenu( 6015, faceId, -1 ); - createMenu( 6016, faceId, -1 ); - createMenu( 6022, faceId, -1 ); - createMenu( 6030, faceId, -1 ); - createMenu( 6017, volumeId, -1 ); - createMenu( 6009, volumeId, -1 ); - createMenu( 6023, volumeId, -1 ); - createMenu( 6024, volumeId, -1 ); - createMenu( 6026, volumeId, -1 ); - createMenu( 6031, volumeId, -1 ); - createMenu( separator(), ctrlId, -1 ); - createMenu( 6032, ctrlId, -1 ); - - createMenu( 4000, addId, -1 ); - createMenu( 4009, addId, -1 ); - createMenu( 4070, addId, -1 ); - createMenu( 4008, addId, -1 ); - createMenu( 4010, addId, -1 ); - createMenu( 4021, addId, -1 ); - createMenu( 4022, addId, -1 ); - createMenu( 4023, addId, -1 ); - createMenu( 4031, addId, -1 ); - createMenu( 4032, addId, -1 ); - createMenu( 4133, addId, -1 ); - createMenu( 4134, addId, -1 ); - createMenu( 4135, addId, -1 ); - createMenu( 4033, addId, -1 ); - createMenu( separator(), addId, -1 ); - createMenu( 4034, addId, -1 ); - createMenu( 4035, addId, -1 ); - createMenu( 4137, addId, -1 ); - createMenu( 4036, addId, -1 ); - createMenu( 4136, addId, -1 ); - createMenu( 4037, addId, -1 ); - createMenu( 4038, addId, -1 ); - createMenu( 4039, addId, -1 ); - createMenu( 4040, addId, -1 ); - createMenu( 4140, addId, -1 ); - - createMenu( 4041, removeId, -1 ); - createMenu( 4042, removeId, -1 ); - createMenu( 4044, removeId, -1 ); - createMenu( separator(), removeId, -1 ); - createMenu( 813, removeId, -1 ); - createMenu( separator(), removeId, -1 ); - createMenu( 4043, removeId, -1 ); - - createMenu( 4051, renumId, -1 ); - createMenu( 4052, renumId, -1 ); - - createMenu( 4061, transfId, -1 ); - createMenu( 4062, transfId, -1 ); - createMenu( 4063, transfId, -1 ); - createMenu( 4068, transfId, -1 ); - createMenu( 4064, transfId, -1 ); - createMenu( 4065, transfId, -1 ); - createMenu( 4066, transfId, -1 ); - createMenu( 4069, transfId, -1 ); - - createMenu( 4067,modifyId, -1 ); - createMenu( 407, modifyId, -1 ); - createMenu( 408, modifyId, -1 ); - createMenu( 409, modifyId, -1 ); - createMenu( 420, modifyId, -1 ); - createMenu( 410, modifyId, -1 ); - createMenu( 411, modifyId, -1 ); - createMenu( 419, modifyId, -1 ); - createMenu( 412, modifyId, -1 ); - createMenu( 413, modifyId, -1 ); - createMenu( 416, modifyId, -1 ); - createMenu( 414, modifyId, -1 ); - createMenu( 415, modifyId, -1 ); - createMenu( 417, modifyId, -1 ); - createMenu( 418, modifyId, -1 ); - - createMenu( 501, measureId, -1 ); - createMenu( 502, measureId, -1 ); - createMenu( 214, viewId, -1 ); + createMenu( SMESHOp::OpDelete, editId, -1 ); + + createMenu( SMESHOp::OpSelectFiltersLibrary, toolsId, -1 ); + + createMenu( SMESHOp::OpCreateMesh, meshId, -1 ); // "Mesh" menu + createMenu( SMESHOp::OpCreateSubMesh, meshId, -1 ); + createMenu( SMESHOp::OpEditMeshOrSubMesh, meshId, -1 ); + createMenu( SMESHOp::OpBuildCompoundMesh, meshId, -1 ); + createMenu( SMESHOp::OpCopyMesh, meshId, -1 ); + createMenu( separator(), meshId, -1 ); + createMenu( SMESHOp::OpCompute, meshId, -1 ); + createMenu( SMESHOp::OpPreCompute, meshId, -1 ); + createMenu( SMESHOp::OpEvaluate, meshId, -1 ); + createMenu( SMESHOp::OpMeshOrder, meshId, -1 ); + createMenu( separator(), meshId, -1 ); + createMenu( SMESHOp::OpCreateGroup, meshId, -1 ); + createMenu( SMESHOp::OpCreateGeometryGroup, meshId, -1 ); + createMenu( SMESHOp::OpConstructGroup, meshId, -1 ); + createMenu( SMESHOp::OpEditGroup, meshId, -1 ); + createMenu( SMESHOp::OpEditGeomGroupAsGroup, meshId, -1 ); + createMenu( separator(), meshId, -1 ); + createMenu( SMESHOp::OpUnionGroups, meshId, -1 ); + createMenu( SMESHOp::OpIntersectGroups, meshId, -1 ); + createMenu( SMESHOp::OpCutGroups, meshId, -1 ); + createMenu( separator(), meshId, -1 ); + createMenu( SMESHOp::OpGroupUnderlyingElem, meshId, -1 ); + createMenu( separator(), meshId, -1 ); + createMenu( SMESHOp::OpMeshInformation, meshId, -1 ); + //createMenu( SMESHOp::OpStdInfo, meshId, -1 ); + //createMenu( SMESHOp::OpWhatIs, meshId, -1 ); // VSR: issue #0021242 (eliminate "Mesh Element Information" command) + createMenu( SMESHOp::OpFindElementByPoint, meshId, -1 ); + createMenu( separator(), meshId, -1 ); + + createMenu( SMESHOp::OpFreeNode, nodeId, -1 ); + createMenu( SMESHOp::OpEqualNode, nodeId, -1 ); + createMenu( SMESHOp::OpFreeBorder, edgeId, -1 ); + createMenu( SMESHOp::OpLength, edgeId, -1 ); + createMenu( SMESHOp::OpConnection, edgeId, -1 ); + createMenu( SMESHOp::OpEqualEdge, edgeId, -1 ); + createMenu( SMESHOp::OpFreeEdge, faceId, -1 ); + createMenu( SMESHOp::OpFreeFace, faceId, -1 ); + createMenu( SMESHOp::OpBareBorderFace, faceId, -1 ); + createMenu( SMESHOp::OpOverConstrainedFace, faceId, -1 ); + createMenu( SMESHOp::OpLength2D, faceId, -1 ); + createMenu( SMESHOp::OpConnection2D, faceId, -1 ); + createMenu( SMESHOp::OpArea, faceId, -1 ); + createMenu( SMESHOp::OpTaper, faceId, -1 ); + createMenu( SMESHOp::OpAspectRatio, faceId, -1 ); + createMenu( SMESHOp::OpMinimumAngle, faceId, -1 ); + createMenu( SMESHOp::OpWarpingAngle, faceId, -1 ); + createMenu( SMESHOp::OpSkew, faceId, -1 ); + createMenu( SMESHOp::OpMaxElementLength2D, faceId, -1 ); + createMenu( SMESHOp::OpEqualFace, faceId, -1 ); + createMenu( SMESHOp::OpAspectRatio3D, volumeId, -1 ); + createMenu( SMESHOp::OpVolume, volumeId, -1 ); + createMenu( SMESHOp::OpMaxElementLength3D, volumeId, -1 ); + createMenu( SMESHOp::OpBareBorderVolume, volumeId, -1 ); + createMenu( SMESHOp::OpOverConstrainedVolume, volumeId, -1 ); + createMenu( SMESHOp::OpEqualVolume, volumeId, -1 ); + createMenu( separator(), ctrlId, -1 ); + createMenu( SMESHOp::OpReset, ctrlId, -1 ); + createMenu( separator(), ctrlId, -1 ); + createMenu( SMESHOp::OpOverallMeshQuality, ctrlId, -1 ); + + createMenu( SMESHOp::OpNode, addId, -1 ); + createMenu( SMESHOp::OpElem0D, addId, -1 ); + createMenu( SMESHOp::OpElem0DOnElemNodes, addId, -1 ); + createMenu( SMESHOp::OpBall, addId, -1 ); + createMenu( SMESHOp::OpEdge, addId, -1 ); + createMenu( SMESHOp::OpTriangle, addId, -1 ); + createMenu( SMESHOp::OpQuadrangle, addId, -1 ); + createMenu( SMESHOp::OpPolygon, addId, -1 ); + createMenu( SMESHOp::OpTetrahedron, addId, -1 ); + createMenu( SMESHOp::OpHexahedron, addId, -1 ); + createMenu( SMESHOp::OpPentahedron, addId, -1 ); + createMenu( SMESHOp::OpPyramid, addId, -1 ); + createMenu( SMESHOp::OpHexagonalPrism, addId, -1 ); + createMenu( SMESHOp::OpPolyhedron, addId, -1 ); + createMenu( separator(), addId, -1 ); + createMenu( SMESHOp::OpQuadraticEdge, addId, -1 ); + createMenu( SMESHOp::OpQuadraticTriangle, addId, -1 ); + createMenu( SMESHOp::OpBiQuadraticTriangle , addId, -1 ); + createMenu( SMESHOp::OpQuadraticQuadrangle, addId, -1 ); + createMenu( SMESHOp::OpBiQuadraticQuadrangle, addId, -1 ); + createMenu( SMESHOp::OpQuadraticPolygon, addId, -1 ); + createMenu( SMESHOp::OpQuadraticTetrahedron, addId, -1 ); + createMenu( SMESHOp::OpQuadraticPyramid, addId, -1 ); + createMenu( SMESHOp::OpQuadraticPentahedron, addId, -1 ); + createMenu( SMESHOp::OpQuadraticHexahedron, addId, -1 ); + createMenu( SMESHOp::OpTriQuadraticHexahedron, addId, -1 ); + + createMenu( SMESHOp::OpRemoveNodes, removeId, -1 ); + createMenu( SMESHOp::OpRemoveElements, removeId, -1 ); + createMenu( SMESHOp::OpRemoveOrphanNodes, removeId, -1 ); + createMenu( separator(), removeId, -1 ); + createMenu( SMESHOp::OpDeleteGroup, removeId, -1 ); + createMenu( separator(), removeId, -1 ); + createMenu( SMESHOp::OpClearMesh, removeId, -1 ); + + //createMenu( SMESHOp::OpRenumberingNodes, renumId, -1 ); + //createMenu( SMESHOp::OpRenumberingElements, renumId, -1 ); + + createMenu( SMESHOp::OpTranslation, transfId, -1 ); + createMenu( SMESHOp::OpRotation, transfId, -1 ); + createMenu( SMESHOp::OpSymmetry, transfId, -1 ); + createMenu( SMESHOp::OpScale, transfId, -1 ); + createMenu( SMESHOp::OpSewing, transfId, -1 ); + createMenu( SMESHOp::OpMergeNodes, transfId, -1 ); + createMenu( SMESHOp::OpMergeElements, transfId, -1 ); + createMenu( SMESHOp::OpDuplicateNodes, transfId, -1 ); + + createMenu( SMESHOp::OpMoveNode, modifyId, -1 ); + createMenu( SMESHOp::OpDiagonalInversion, modifyId, -1 ); + createMenu( SMESHOp::OpUnionOfTwoTriangle, modifyId, -1 ); + createMenu( SMESHOp::OpOrientation, modifyId, -1 ); + createMenu( SMESHOp::OpReorientFaces, modifyId, -1 ); + createMenu( SMESHOp::OpUnionOfTriangles, modifyId, -1 ); + createMenu( SMESHOp::OpCuttingOfQuadrangles, modifyId, -1 ); + createMenu( SMESHOp::OpSplitVolumes, modifyId, -1 ); + createMenu( SMESHOp::OpSplitBiQuadratic, modifyId, -1 ); + createMenu( SMESHOp::OpSmoothing, modifyId, -1 ); + createMenu( SMESHOp::OpExtrusion, modifyId, -1 ); + createMenu( SMESHOp::OpExtrusionAlongAPath , modifyId, -1 ); + createMenu( SMESHOp::OpRevolution, modifyId, -1 ); + createMenu( SMESHOp::OpPatternMapping, modifyId, -1 ); + createMenu( SMESHOp::OpConvertMeshToQuadratic, modifyId, -1 ); + createMenu( SMESHOp::OpCreateBoundaryElements, modifyId, -1 ); + + createMenu( SMESHOp::OpMinimumDistance, measureId, -1 ); + createMenu( SMESHOp::OpBoundingBox, measureId, -1 ); + createMenu( SMESHOp::OpPropertiesLength, basicPropId, -1 ); + createMenu( SMESHOp::OpPropertiesArea, basicPropId, -1 ); + createMenu( SMESHOp::OpPropertiesVolume, basicPropId, -1 ); + createMenu( SMESHOp::OpUpdate, viewId, -1 ); + + connect( nodeMenu, SIGNAL( aboutToShow() ), this, SLOT( onUpdateControlActions() ) ); + connect( edgeMenu, SIGNAL( aboutToShow() ), this, SLOT( onUpdateControlActions() ) ); + connect( faceMenu, SIGNAL( aboutToShow() ), this, SLOT( onUpdateControlActions() ) ); + connect( volumeMenu, SIGNAL( aboutToShow() ), this, SLOT( onUpdateControlActions() ) ); // ----- create toolbars -------------- - int meshTb = createTool( tr( "TB_MESH" ) ), - ctrlTb = createTool( tr( "TB_CTRL" ) ), - addRemTb = createTool( tr( "TB_ADD_REMOVE" ) ), - modifyTb = createTool( tr( "TB_MODIFY" ) ), - dispModeTb = createTool( tr( "TB_DISP_MODE" ) ); - - createTool( 702, meshTb ); - createTool( 703, meshTb ); - createTool( 704, meshTb ); - createTool( 710, meshTb ); - createTool( 705, meshTb ); - createTool( separator(), meshTb ); - createTool( 701, meshTb ); - createTool( 711, meshTb ); - createTool( 712, meshTb ); - createTool( 713, meshTb ); - createTool( separator(), meshTb ); - createTool( 801, meshTb ); - createTool( 806, meshTb ); - createTool( 802, meshTb ); - createTool( 803, meshTb ); - //createTool( 815, meshTb ); - createTool( separator(), meshTb ); - createTool( 900, meshTb ); - //createTool( 902, meshTb ); - //createTool( 903, meshTb ); // VSR: issue #0021242 (eliminate "Mesh Element Information" command) - createTool( 904, meshTb ); - createTool( separator(), meshTb ); - - createTool( 6005, ctrlTb ); - createTool( 6028, ctrlTb ); - createTool( separator(), ctrlTb ); - createTool( 6002, ctrlTb ); - createTool( 6003, ctrlTb ); - createTool( 6001, ctrlTb ); - createTool( 6004, ctrlTb ); - createTool( 6029, ctrlTb ); - createTool( separator(), ctrlTb ); - createTool( 6021, ctrlTb ); - createTool( 6025, ctrlTb ); - createTool( 6027, ctrlTb ); - createTool( 6018, ctrlTb ); - createTool( 6019, ctrlTb ); - createTool( 6011, ctrlTb ); - createTool( 6012, ctrlTb ); - createTool( 6013, ctrlTb ); - createTool( 6014, ctrlTb ); - createTool( 6015, ctrlTb ); - createTool( 6016, ctrlTb ); - createTool( 6022, ctrlTb ); - createTool( 6030, ctrlTb ); - createTool( separator(), ctrlTb ); - createTool( 6017, ctrlTb ); - createTool( 6009, ctrlTb ); - createTool( 6023, ctrlTb ); - createTool( 6024, ctrlTb ); - createTool( 6026, ctrlTb ); - createTool( 6031, ctrlTb ); - createTool( separator(), ctrlTb ); - - createTool( 4000, addRemTb ); - createTool( 4009, addRemTb ); - createTool( 4070, addRemTb ); - createTool( 4008, addRemTb ); - createTool( 4010, addRemTb ); - createTool( 4021, addRemTb ); - createTool( 4022, addRemTb ); - createTool( 4023, addRemTb ); - createTool( 4031, addRemTb ); - createTool( 4032, addRemTb ); - createTool( 4133, addRemTb ); - createTool( 4134, addRemTb ); - createTool( 4135, addRemTb ); - createTool( 4033, addRemTb ); - createTool( separator(), addRemTb ); - createTool( 4034, addRemTb ); - createTool( 4035, addRemTb ); - createTool( 4137, addRemTb ); - createTool( 4036, addRemTb ); - createTool( 4136, addRemTb ); - createTool( 4037, addRemTb ); - createTool( 4038, addRemTb ); - createTool( 4039, addRemTb ); - createTool( 4040, addRemTb ); - createTool( 4140, addRemTb ); - createTool( separator(), addRemTb ); - createTool( 4041, addRemTb ); - createTool( 4042, addRemTb ); - createTool( 4044, addRemTb ); - createTool( 4043, addRemTb ); - createTool( separator(), addRemTb ); - createTool( 4051, addRemTb ); - createTool( 4052, addRemTb ); - createTool( separator(), addRemTb ); - createTool( 4061, addRemTb ); - createTool( 4062, addRemTb ); - createTool( 4063, addRemTb ); - createTool( 4068, addRemTb ); - createTool( 4064, addRemTb ); - createTool( 4065, addRemTb ); - createTool( 4066, addRemTb ); - createTool( 4069, addRemTb ); - createTool( separator(), addRemTb ); - - createTool( 4067,modifyTb ); - createTool( 407, modifyTb ); - createTool( 408, modifyTb ); - createTool( 409, modifyTb ); - createTool( 420, modifyTb ); - createTool( 410, modifyTb ); - createTool( 411, modifyTb ); - createTool( 419, modifyTb ); - createTool( 412, modifyTb ); - createTool( 413, modifyTb ); - createTool( 416, modifyTb ); - createTool( 414, modifyTb ); - createTool( 415, modifyTb ); - createTool( 417, modifyTb ); - createTool( 418, modifyTb ); - - createTool( 214, dispModeTb ); + int meshTb = createTool( tr( "TB_MESH" ), QString( "SMESHMeshToolbar" ) ), + info = createTool( tr( "TB_INFO" ), QString( "SMESHInformationToolbar" ) ), + groupTb = createTool( tr( "TB_GROUP" ), QString( "SMESHGroupToolbar" ) ), + ctrl0dTb = createTool( tr( "TB_CTRL0D" ), QString( "SMESHNodeControlsToolbar" ) ), + ctrl1dTb = createTool( tr( "TB_CTRL1D" ), QString( "SMESHEdgeControlsToolbar" ) ), + ctrl2dTb = createTool( tr( "TB_CTRL2D" ), QString( "SMESHFaceControlsToolbar" ) ), + ctrl3dTb = createTool( tr( "TB_CTRL3D" ), QString( "SMESHVolumeControlsToolbar" ) ), + addElemTb = createTool( tr( "TB_ADD" ), QString( "SMESHAddElementToolbar" ) ), + addNonElemTb = createTool( tr( "TB_ADDNON" ), QString( "SMESHAddElementToolbar" ) ), + remTb = createTool( tr( "TB_REM" ), QString( "SMESHRemoveToolbar" ) ), + //renumbTb = createTool( tr( "TB_RENUMBER" ), QString( "SMESHRenumberingToolbar" ) ), + transformTb = createTool( tr( "TB_TRANSFORM" ), QString( "SMESHTransformationToolbar" ) ), + modifyTb = createTool( tr( "TB_MODIFY" ), QString( "SMESHModificationToolbar" ) ), + measuremTb = createTool( tr( "TB_MEASUREM" ), QString( "SMESHMeasurementsToolbar" ) ), + dispModeTb = createTool( tr( "TB_DISP_MODE" ), QString( "SMESHDisplayModeToolbar" ) ); + + createTool( SMESHOp::OpCreateMesh, meshTb ); + createTool( SMESHOp::OpCreateSubMesh, meshTb ); + createTool( SMESHOp::OpEditMeshOrSubMesh, meshTb ); + createTool( SMESHOp::OpBuildCompoundMesh, meshTb ); + createTool( SMESHOp::OpCopyMesh, meshTb ); + createTool( separator(), meshTb ); + createTool( SMESHOp::OpCompute, meshTb ); + createTool( SMESHOp::OpPreCompute, meshTb ); + createTool( SMESHOp::OpEvaluate, meshTb ); + createTool( SMESHOp::OpMeshOrder, meshTb ); + + createTool( SMESHOp::OpCreateGroup, groupTb ); + createTool( SMESHOp::OpCreateGeometryGroup, groupTb ); + createTool( SMESHOp::OpConstructGroup, groupTb ); + createTool( SMESHOp::OpEditGroup, groupTb ); + + createTool( SMESHOp::OpMeshInformation, info ); + //createTool( SMESHOp::OpStdInfo, meshTb ); + //createTool( SMESHOp::OpWhatIs, meshTb ); // VSR: issue #0021242 (eliminate "Mesh Element Information" command) + createTool( SMESHOp::OpFindElementByPoint, info ); + + createTool( SMESHOp::OpFreeNode, ctrl0dTb ); + createTool( SMESHOp::OpEqualNode, ctrl0dTb ); + + createTool( SMESHOp::OpFreeBorder, ctrl1dTb ); + createTool( SMESHOp::OpLength, ctrl1dTb ); + createTool( SMESHOp::OpConnection, ctrl1dTb ); + createTool( SMESHOp::OpEqualEdge, ctrl1dTb ); + + createTool( SMESHOp::OpFreeEdge, ctrl2dTb ); + createTool( SMESHOp::OpFreeFace, ctrl2dTb ); + createTool( SMESHOp::OpBareBorderFace, ctrl2dTb ); + createTool( SMESHOp::OpOverConstrainedFace, ctrl2dTb ); + createTool( SMESHOp::OpLength2D, ctrl2dTb ); + createTool( SMESHOp::OpConnection2D, ctrl2dTb ); + createTool( SMESHOp::OpArea, ctrl2dTb ); + createTool( SMESHOp::OpTaper, ctrl2dTb ); + createTool( SMESHOp::OpAspectRatio, ctrl2dTb ); + createTool( SMESHOp::OpMinimumAngle, ctrl2dTb ); + createTool( SMESHOp::OpWarpingAngle, ctrl2dTb ); + createTool( SMESHOp::OpSkew, ctrl2dTb ); + createTool( SMESHOp::OpMaxElementLength2D, ctrl2dTb ); + createTool( SMESHOp::OpEqualFace, ctrl2dTb ); + + createTool( SMESHOp::OpAspectRatio3D, ctrl3dTb ); + createTool( SMESHOp::OpVolume, ctrl3dTb ); + createTool( SMESHOp::OpMaxElementLength3D, ctrl3dTb ); + createTool( SMESHOp::OpBareBorderVolume, ctrl3dTb ); + createTool( SMESHOp::OpOverConstrainedVolume, ctrl3dTb ); + createTool( SMESHOp::OpEqualVolume, ctrl3dTb ); + + createTool( SMESHOp::OpNode, addElemTb ); + createTool( SMESHOp::OpElem0D, addElemTb ); + createTool( SMESHOp::OpElem0DOnElemNodes, addElemTb ); + createTool( SMESHOp::OpBall, addElemTb ); + createTool( SMESHOp::OpEdge, addElemTb ); + createTool( SMESHOp::OpTriangle, addElemTb ); + createTool( SMESHOp::OpQuadrangle, addElemTb ); + createTool( SMESHOp::OpPolygon, addElemTb ); + createTool( SMESHOp::OpTetrahedron, addElemTb ); + createTool( SMESHOp::OpHexahedron, addElemTb ); + createTool( SMESHOp::OpPentahedron, addElemTb ); + createTool( SMESHOp::OpPyramid, addElemTb ); + createTool( SMESHOp::OpHexagonalPrism, addElemTb ); + createTool( SMESHOp::OpPolyhedron, addElemTb ); + + createTool( SMESHOp::OpQuadraticEdge, addNonElemTb ); + createTool( SMESHOp::OpQuadraticTriangle, addNonElemTb ); + createTool( SMESHOp::OpBiQuadraticTriangle, addNonElemTb ); + createTool( SMESHOp::OpQuadraticQuadrangle, addNonElemTb ); + createTool( SMESHOp::OpBiQuadraticQuadrangle, addNonElemTb ); + createTool( SMESHOp::OpQuadraticPolygon, addNonElemTb ); + createTool( SMESHOp::OpQuadraticTetrahedron, addNonElemTb ); + createTool( SMESHOp::OpQuadraticPyramid, addNonElemTb ); + createTool( SMESHOp::OpQuadraticPentahedron, addNonElemTb ); + createTool( SMESHOp::OpQuadraticHexahedron, addNonElemTb ); + createTool( SMESHOp::OpTriQuadraticHexahedron, addNonElemTb ); + + createTool( SMESHOp::OpRemoveNodes, remTb ); + createTool( SMESHOp::OpRemoveElements, remTb ); + createTool( SMESHOp::OpRemoveOrphanNodes, remTb ); + createTool( SMESHOp::OpClearMesh, remTb ); + + //createTool( SMESHOp::OpRenumberingNodes, renumbTb ); + //createTool( SMESHOp::OpRenumberingElements, renumbTb ); + + createTool( SMESHOp::OpTranslation, transformTb ); + createTool( SMESHOp::OpRotation, transformTb ); + createTool( SMESHOp::OpSymmetry, transformTb ); + createTool( SMESHOp::OpScale, transformTb ); + createTool( SMESHOp::OpSewing, transformTb ); + createTool( SMESHOp::OpMergeNodes, transformTb ); + createTool( SMESHOp::OpMergeElements, transformTb ); + createTool( SMESHOp::OpDuplicateNodes, transformTb ); + + createTool( SMESHOp::OpMoveNode, modifyTb ); + createTool( SMESHOp::OpDiagonalInversion, modifyTb ); + createTool( SMESHOp::OpUnionOfTwoTriangle, modifyTb ); + createTool( SMESHOp::OpOrientation, modifyTb ); + createTool( SMESHOp::OpReorientFaces, modifyTb ); + createTool( SMESHOp::OpUnionOfTriangles, modifyTb ); + createTool( SMESHOp::OpCuttingOfQuadrangles, modifyTb ); + createTool( SMESHOp::OpSplitVolumes, modifyTb ); + createTool( SMESHOp::OpSplitBiQuadratic, modifyTb ); + createTool( SMESHOp::OpSmoothing, modifyTb ); + createTool( SMESHOp::OpExtrusion, modifyTb ); + createTool( SMESHOp::OpExtrusionAlongAPath, modifyTb ); + createTool( SMESHOp::OpRevolution, modifyTb ); + createTool( SMESHOp::OpPatternMapping, modifyTb ); + createTool( SMESHOp::OpConvertMeshToQuadratic, modifyTb ); + createTool( SMESHOp::OpCreateBoundaryElements, modifyTb ); + + createTool( SMESHOp::OpMinimumDistance, measuremTb ); + + createTool( SMESHOp::OpUpdate, dispModeTb ); QString lc = "$"; // VSR : instead of QtxPopupSelection::defEquality(); QString dc = "selcount"; // VSR : instead of QtxPopupSelection::defSelCountParam() myRules.clear(); - QString OB = "'ObjectBrowser'", - View = "'" + SVTK_Viewer::Type() + "'", - pat = "'%1'", - mesh = pat.arg( SMESHGUI_Selection::typeName( SMESH::MESH ) ), - group = pat.arg( SMESHGUI_Selection::typeName( SMESH::GROUP ) ), - hypo = pat.arg( SMESHGUI_Selection::typeName( SMESH::HYPOTHESIS ) ), - algo = pat.arg( SMESHGUI_Selection::typeName( SMESH::ALGORITHM ) ), - elems = QString( "'%1' '%2' '%3' '%4' '%5' '%6'" ). - arg( SMESHGUI_Selection::typeName( SMESH::SUBMESH_VERTEX ) ). - arg( SMESHGUI_Selection::typeName( SMESH::SUBMESH_EDGE ) ). - arg( SMESHGUI_Selection::typeName( SMESH::SUBMESH_FACE ) ). - arg( SMESHGUI_Selection::typeName( SMESH::SUBMESH_SOLID ) ). - arg( SMESHGUI_Selection::typeName( SMESH::SUBMESH_COMPOUND ) ). - arg( SMESHGUI_Selection::typeName( SMESH::SUBMESH ) ), - subMesh = elems, - mesh_part = mesh + " " + subMesh + " " + group, - mesh_group = mesh + " " + group, - hyp_alg = hypo + " " + algo; + QString + OB = "'ObjectBrowser'", + View = "'" + SVTK_Viewer::Type() + "'", + pat = "'%1'", + mesh = pat.arg( SMESHGUI_Selection::typeName( SMESH::MESH ) ), + group = pat.arg( SMESHGUI_Selection::typeName( SMESH::GROUP ) ), + hypo = pat.arg( SMESHGUI_Selection::typeName( SMESH::HYPOTHESIS ) ), + algo = pat.arg( SMESHGUI_Selection::typeName( SMESH::ALGORITHM ) ), + elems = QString( "'%1' '%2' '%3' '%4' '%5' '%6'" ). + arg( SMESHGUI_Selection::typeName( SMESH::SUBMESH_VERTEX ) ). + arg( SMESHGUI_Selection::typeName( SMESH::SUBMESH_EDGE ) ). + arg( SMESHGUI_Selection::typeName( SMESH::SUBMESH_FACE ) ). + arg( SMESHGUI_Selection::typeName( SMESH::SUBMESH_SOLID ) ). + arg( SMESHGUI_Selection::typeName( SMESH::SUBMESH_COMPOUND ) ). + arg( SMESHGUI_Selection::typeName( SMESH::SUBMESH ) ), + subMesh = elems, + mesh_part = mesh + " " + subMesh + " " + group, + mesh_group = mesh + " " + group, + mesh_submesh = mesh + " " + subMesh, + hyp_alg = hypo + " " + algo; // popup for object browser QString @@ -4090,70 +4376,72 @@ void SMESHGUI::initialize( CAM_Application* app ) hasElems0d("({'Elem0d'} in elemTypes)"), hasEdges("({'Edge'} in elemTypes)"), hasFaces("({'Face'} in elemTypes)"), - hasVolumes("({'Volume'} in elemTypes)"); + hasVolumes("({'Volume'} in elemTypes)"), + hasFacesOrVolumes("(({'Face'} in elemTypes) || ({'Volume'} in elemTypes)) "); - createPopupItem( 150, OB, mesh, "&& selcount=1 && isImported" ); // FILE INFORMATION - createPopupItem( 703, OB, mesh, "&& isComputable"); // CREATE_SUBMESH - createPopupItem( 704, OB, mesh, "&& isComputable"); // EDIT_MESHSUBMESH - createPopupItem( 704, OB, subMesh, "&& isComputable" ); // EDIT_MESHSUBMESH - createPopupItem( 803, OB, group ); // EDIT_GROUP - createPopupItem( 815, OB, group, "&& groupType != 'Group'" ); // EDIT AS STANDALONE + createPopupItem( SMESHOp::OpFileInformation, OB, mesh, "&& selcount=1 && isImported" ); + createPopupItem( SMESHOp::OpCreateSubMesh, OB, mesh, "&& hasGeomReference"); + createPopupItem( SMESHOp::OpEditMesh, OB, mesh, "&& selcount=1" ); + createPopupItem( SMESHOp::OpEditSubMesh, OB, subMesh, "&& selcount=1 && hasGeomReference" ); + createPopupItem( SMESHOp::OpEditGroup, OB, group ); + createPopupItem( SMESHOp::OpEditGeomGroupAsGroup, OB, group, "&& groupType != 'Group'" ); popupMgr()->insert( separator(), -1, 0 ); - createPopupItem( 701, OB, mesh, "&& isComputable" ); // COMPUTE - createPopupItem( 711, OB, mesh, "&& isComputable && isPreComputable" ); // PRECOMPUTE - createPopupItem( 712, OB, mesh, "&& isComputable" ); // EVALUATE - createPopupItem( 713, OB, mesh, "&& isComputable" ); // MESH ORDER - createPopupItem( 214, OB, mesh_part ); // UPDATE - createPopupItem( 900, OB, mesh_part ); // ADV_INFO - createPopupItem( 904, OB, mesh_group ); // FIND_ELEM - createPopupItem( 6032, OB, mesh_part ); // CTRL_INFO - popupMgr()->insert( separator(), -1, 0 ); - createPopupItem( 801, OB, mesh ); // CREATE_GROUP - createPopupItem( 806, OB, mesh ); // CREATE_GEO_GROUP - createPopupItem( 802, OB, subMesh ); // CONSTRUCT_GROUP + createPopupItem( SMESHOp::OpCompute, OB, mesh, "&& selcount=1 && isComputable" ); + createPopupItem( SMESHOp::OpComputeSubMesh, OB, subMesh, "&& selcount=1 && isComputable" ); + createPopupItem( SMESHOp::OpPreCompute, OB, mesh, "&& selcount=1 && isPreComputable" ); + createPopupItem( SMESHOp::OpEvaluate, OB, mesh, "&& selcount=1 && isComputable" ); + createPopupItem( SMESHOp::OpMeshOrder, OB, mesh, "&& selcount=1 && isComputable && hasGeomReference" ); + createPopupItem( SMESHOp::OpUpdate, OB, mesh_part ); + createPopupItem( SMESHOp::OpMeshInformation, OB, mesh_part ); + createPopupItem( SMESHOp::OpFindElementByPoint,OB, mesh_group, "&& selcount=1" ); + createPopupItem( SMESHOp::OpOverallMeshQuality,OB, mesh_part ); popupMgr()->insert( separator(), -1, 0 ); - createPopupItem( 1100, OB, hypo); // EDIT HYPOTHESIS - createPopupItem( 1102, OB, hyp_alg ); // REMOVE HYPOTHESIS / ALGORITHMS + createPopupItem( SMESHOp::OpCreateGroup, OB, mesh, "&& selcount=1" ); + createPopupItem( SMESHOp::OpCreateGeometryGroup, OB, mesh, "&& selcount=1 && hasGeomReference" ); + createPopupItem( SMESHOp::OpConstructGroup, OB, subMesh ); popupMgr()->insert( separator(), -1, 0 ); - createPopupItem( 4043, OB, mesh ); // CLEAR_MESH + createPopupItem( SMESHOp::OpEditHypothesis, OB, hypo, "&& isEditableHyp"); + createPopupItem( SMESHOp::OpUnassign, OB, hyp_alg ); popupMgr()->insert( separator(), -1, 0 ); - createPopupItem( 417, OB, mesh + " " + subMesh ); // convert to quadratic - createPopupItem( 418, OB, mesh + " " + group, // create 2D mesh from 3D - "&& dim>=2"); + createPopupItem( SMESHOp::OpConvertMeshToQuadratic, OB, mesh_submesh ); + createPopupItem( SMESHOp::OpCreateBoundaryElements, OB, mesh_group, "&& selcount=1 && dim>=2"); popupMgr()->insert( separator(), -1, 0 ); + createPopupItem( SMESHOp::OpClearMesh, OB, mesh ); + //popupMgr()->insert( separator(), -1, 0 ); QString only_one_non_empty = QString( " && %1=1 && numberOfNodes>0" ).arg( dc ); QString multiple_non_empty = QString( " && %1>0 && numberOfNodes>0" ).arg( dc ); QString only_one_2D = only_one_non_empty + " && dim>1"; int anId = popupMgr()->insert( tr( "MEN_EXPORT" ), -1, -1 ); // EXPORT submenu - createPopupItem( 125, OB, mesh_group, multiple_non_empty, anId ); // EXPORT_MED - createPopupItem( 126, OB, mesh_group, only_one_non_empty, anId ); // EXPORT_UNV - createPopupItem( 141, OB, mesh_group, only_one_2D, anId ); // EXPORT_STL + createPopupItem( SMESHOp::OpPopupExportMED, OB, mesh_group, multiple_non_empty, anId ); + createPopupItem( SMESHOp::OpPopupExportUNV, OB, mesh_group, only_one_non_empty, anId ); + createPopupItem( SMESHOp::OpPopupExportSTL, OB, mesh_group, only_one_2D, anId ); #ifdef WITH_CGNS - createPopupItem( 143, OB, mesh_group, multiple_non_empty, anId ); // EXPORT_CGNS + createPopupItem( SMESHOp::OpPopupExportCGNS, OB, mesh_group, multiple_non_empty, anId ); #endif - createPopupItem( 145, OB, mesh_group, multiple_non_empty, anId ); // EXPORT_SAUV - createPopupItem( 147, OB, mesh_group, multiple_non_empty, anId ); // EXPORT_GMF - createPopupItem( 124, OB, mesh_group, multiple_non_empty, anId ); // EXPORT_DAT - createPopupItem( 33, OB, mesh_part + " " + hyp_alg ); // DELETE - createPopupItem( 813, OB, group ); // DEL_GROUP with contents + createPopupItem( SMESHOp::OpPopupExportSAUV, OB, mesh_group, only_one_non_empty, anId ); + createPopupItem( SMESHOp::OpPopupExportGMF, OB, mesh_group, only_one_non_empty, anId ); + createPopupItem( SMESHOp::OpPopupExportDAT, OB, mesh_group, only_one_non_empty, anId ); + createPopupItem( SMESHOp::OpDelete, OB, mesh_part + " " + hyp_alg ); + createPopupItem( SMESHOp::OpDeleteGroup, OB, group ); popupMgr()->insert( separator(), -1, 0 ); // popup for viewer - createPopupItem( 803, View, group ); // EDIT_GROUP - createPopupItem( 804, View, elems ); // ADD - createPopupItem( 805, View, elems ); // REMOVE + createPopupItem( SMESHOp::OpEditGroup, View, group ); + createPopupItem( SMESHOp::OpAddElemGroupPopup, View, elems ); + createPopupItem( SMESHOp::OpRemoveElemGroupPopup, View, elems ); popupMgr()->insert( separator(), -1, 0 ); - createPopupItem( 214, View, mesh_part ); // UPDATE - createPopupItem( 900, View, mesh_part ); // ADV_INFO - createPopupItem( 904, View, mesh ); // FIND_ELEM + createPopupItem( SMESHOp::OpUpdate, View, mesh_part ); + createPopupItem( SMESHOp::OpMeshInformation, View, mesh_part ); + createPopupItem( SMESHOp::OpOverallMeshQuality, View, mesh_part ); + createPopupItem( SMESHOp::OpFindElementByPoint, View, mesh ); popupMgr()->insert( separator(), -1, 0 ); - createPopupItem( 1136, OB + " " + View, mesh, "&& (not isAutoColor)" ); // AUTO_COLOR - createPopupItem( 1137, OB + " " + View, mesh, "&& isAutoColor" ); // DISABLE_AUTO_COLOR + createPopupItem( SMESHOp::OpAutoColor, OB + " " + View, mesh, "&& (not isAutoColor)" ); + createPopupItem( SMESHOp::OpDisableAutoColor, OB + " " + View, mesh, "&& isAutoColor" ); popupMgr()->insert( separator(), -1, 0 ); QString aClient = QString( "%1client in {%2}" ).arg( lc ).arg( "'VTKViewer'" ); @@ -4170,13 +4458,13 @@ void SMESHGUI::initialize( CAM_Application* app ) //------------------------------------------------- anId = popupMgr()->insert( tr( "MEN_NUM" ), -1, -1 ); - popupMgr()->insert( action( 9010 ), anId, -1 ); - popupMgr()->setRule( action( 9010 ), aMeshInVTK + "&& isVisible &&" + hasNodes, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 9010 ), "{'Point'} in labeledTypes", QtxPopupMgr::ToggleRule ); + popupMgr()->insert( action( SMESHOp::OpNumberingNodes ), anId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpNumberingNodes ), aMeshInVTK + "&& isVisible &&" + hasNodes, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpNumberingNodes ), "{'Point'} in labeledTypes", QtxPopupMgr::ToggleRule ); - popupMgr()->insert( action( 9011 ), anId, -1 ); - popupMgr()->setRule( action( 9011 ), aMeshInVTK + "&& isVisible &&" + hasElems, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 9011 ), "{'Cell'} in labeledTypes", QtxPopupMgr::ToggleRule ); + popupMgr()->insert( action( SMESHOp::OpNumberingElements ), anId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpNumberingElements ), aMeshInVTK + "&& isVisible &&" + hasElems, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpNumberingElements ), "{'Cell'} in labeledTypes", QtxPopupMgr::ToggleRule ); popupMgr()->insert( separator(), -1, -1 ); @@ -4185,23 +4473,23 @@ void SMESHGUI::initialize( CAM_Application* app ) //------------------------------------------------- anId = popupMgr()->insert( tr( "MEN_DISPMODE" ), -1, -1 ); - popupMgr()->insert( action( 211 ), anId, -1 ); // WIRE - popupMgr()->setRule( action( 211 ), aMeshInVTK + "&&" + hasElems, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 211 ), "displayMode = 'eEdge'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert( action( SMESHOp::OpDMWireframe ), anId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpDMWireframe ), aMeshInVTK + "&&" + hasElems, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpDMWireframe ), "displayMode = 'eEdge'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert( action( 212 ), anId, -1 ); // SHADE - popupMgr()->setRule( action( 212 ),aMeshInVTK+ "&& (" + hasFaces + "||" + hasVolumes + ")", QtxPopupMgr::VisibleRule); - popupMgr()->setRule( action( 212 ), "displayMode = 'eSurface'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert( action( SMESHOp::OpDMShading ), anId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpDMShading ),aMeshInVTK+ "&& (" + hasFaces + "||" + hasVolumes + ")", QtxPopupMgr::VisibleRule); + popupMgr()->setRule( action( SMESHOp::OpDMShading ), "displayMode = 'eSurface'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert( action( 215 ), anId, -1 ); // POINTS - popupMgr()->setRule( action( 215 ), aMeshInVTK + "&&" + hasNodes, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 215 ), "displayMode = 'ePoint'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert( action( SMESHOp::OpDMNodes ), anId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpDMNodes ), aMeshInVTK + "&&" + hasNodes, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpDMNodes ), "displayMode = 'ePoint'", QtxPopupMgr::ToggleRule ); popupMgr()->insert( separator(), anId, -1 ); - popupMgr()->insert( action( 213 ), anId, -1 ); // SHRINK - popupMgr()->setRule( action( 213 ), aMeshInVTK + "&& shrinkMode <> 'IsNotShrinkable' && displayMode <> 'ePoint'", QtxPopupMgr::VisibleRule); - popupMgr()->setRule( action( 213 ), "shrinkMode = 'IsShrunk'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert( action( SMESHOp::OpDMShrink ), anId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpDMShrink ), aMeshInVTK + "&& shrinkMode <> 'IsNotShrinkable' && displayMode <> 'ePoint'", QtxPopupMgr::VisibleRule); + popupMgr()->setRule( action( SMESHOp::OpDMShrink ), "shrinkMode = 'IsShrunk'", QtxPopupMgr::ToggleRule ); //------------------------------------------------- // Display Entity @@ -4210,62 +4498,67 @@ void SMESHGUI::initialize( CAM_Application* app ) anId = popupMgr()->insert( tr( "MEN_DISP_ENT" ), -1, -1 ); - popupMgr()->insert( action(216), anId, -1 ); // ELEMS 0D - popupMgr()->setRule(action(216), aDiffElemsInVTK + "&& isVisible &&" + hasElems0d, QtxPopupMgr::VisibleRule); - popupMgr()->setRule(action(216), "{'Elem0d'} in entityMode", QtxPopupMgr::ToggleRule); + popupMgr()->insert( action( SMESHOp::OpDE0DElements ), anId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpDE0DElements ), aDiffElemsInVTK + "&& isVisible &&" + hasElems0d, QtxPopupMgr::VisibleRule); + popupMgr()->setRule( action( SMESHOp::OpDE0DElements ), "{'Elem0d'} in entityMode", QtxPopupMgr::ToggleRule); + + popupMgr()->insert( action( SMESHOp::OpDEEdges ), anId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpDEEdges ), aDiffElemsInVTK + "&& isVisible &&" + hasEdges, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpDEEdges ), "{'Edge'} in entityMode", QtxPopupMgr::ToggleRule ); + + popupMgr()->insert( action( SMESHOp::OpDEFaces ), anId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpDEFaces ), aDiffElemsInVTK + "&& isVisible &&" + hasFaces, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpDEFaces ), "{'Face'} in entityMode", QtxPopupMgr::ToggleRule ); - popupMgr()->insert( action( 217 ), anId, -1 ); // EDGES - popupMgr()->setRule( action( 217 ), aDiffElemsInVTK + "&& isVisible &&" + hasEdges, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 217 ), "{'Edge'} in entityMode", QtxPopupMgr::ToggleRule ); + popupMgr()->insert( action( SMESHOp::OpDEVolumes ), anId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpDEVolumes ), aDiffElemsInVTK + "&& isVisible &&" + hasVolumes, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpDEVolumes ), "{'Volume'} in entityMode", QtxPopupMgr::ToggleRule ); - popupMgr()->insert( action( 218 ), anId, -1 ); // FACES - popupMgr()->setRule( action( 218 ), aDiffElemsInVTK + "&& isVisible &&" + hasFaces, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 218 ), "{'Face'} in entityMode", QtxPopupMgr::ToggleRule ); + popupMgr()->insert( action( SMESHOp::OpDEBalls ), anId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpDEBalls ), aDiffElemsInVTK + "&& isVisible &&" + hasBalls, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpDEBalls ), "{'BallElem'} in entityMode", QtxPopupMgr::ToggleRule ); - popupMgr()->insert( action( 219 ), anId, -1 ); // VOLUMES - popupMgr()->setRule( action( 219 ), aDiffElemsInVTK + "&& isVisible &&" + hasVolumes, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 219 ), "{'Volume'} in entityMode", QtxPopupMgr::ToggleRule ); + popupMgr()->insert( separator(), anId, -1 ); - popupMgr()->insert( action( 222 ), anId, -1 ); // BALLS - popupMgr()->setRule( action( 222 ), aDiffElemsInVTK + "&& isVisible &&" + hasBalls, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 222 ), "{'BallElem'} in entityMode", QtxPopupMgr::ToggleRule ); + popupMgr()->insert( action( SMESHOp::OpDEChoose ), anId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpDEChoose ), aClient + "&&" + aType + "&&" + isNotEmpty, QtxPopupMgr::VisibleRule ); popupMgr()->insert( separator(), anId, -1 ); - popupMgr()->insert( action( 220 ), anId, -1 ); // ALL - popupMgr()->setRule( action( 220 ), aDiffElemsInVTK + "&& isVisible && not( elemTypes in entityMode )", QtxPopupMgr::VisibleRule ); + popupMgr()->insert( action( SMESHOp::OpDEAllEntity ), anId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpDEAllEntity ), aDiffElemsInVTK + "&& isVisible && not( elemTypes in entityMode )", QtxPopupMgr::VisibleRule ); //------------------------------------------------- // Representation of the 2D Quadratic elements //------------------------------------------------- anId = popupMgr()->insert( tr( "MEN_QUADRATIC_REPRESENT" ), -1, -1 ); - popupMgr()->insert( action( 231 ), anId, -1 ); // LINE REPRESENTATION - popupMgr()->setRule( action( 231 ), aMeshInVTK + "and isVisible",QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 231 ), "quadratic2DMode = 'eLines'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert( action( SMESHOp::OpRepresentationLines ), anId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpRepresentationLines ), aMeshInVTK + "&& isVisible && isQuadratic",QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpRepresentationLines ), "quadratic2DMode = 'eLines'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert( action( 232 ), anId, -1 ); // ARC REPRESENTATION - popupMgr()->setRule( action( 232 ), aMeshInVTK + "and isVisible", QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 232 ), "quadratic2DMode = 'eArcs'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert( action( SMESHOp::OpRepresentationArcs ), anId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpRepresentationArcs ), aMeshInVTK + "&& isVisible && isQuadratic", QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpRepresentationArcs ), "quadratic2DMode = 'eArcs'", QtxPopupMgr::ToggleRule ); //------------------------------------------------- // Orientation of faces //------------------------------------------------- - popupMgr()->insert( action( 221 ), -1, -1 ); - popupMgr()->setRule( action( 221 ), aMeshInVTK + "&& isVisible", QtxPopupMgr::VisibleRule); - popupMgr()->setRule( action( 221 ), "facesOrientationMode = 'IsOriented'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert( action( SMESHOp::OpOrientationOnFaces ), -1, -1 ); + popupMgr()->setRule( action( SMESHOp::OpOrientationOnFaces ), aMeshInVTK + "&& isVisible", QtxPopupMgr::VisibleRule); + popupMgr()->setRule( action( SMESHOp::OpOrientationOnFaces ), "facesOrientationMode = 'IsOriented'", QtxPopupMgr::ToggleRule ); //------------------------------------------------- // Color / Size //------------------------------------------------- - popupMgr()->insert( action( 1132 ), -1, -1 ); - popupMgr()->setRule( action( 1132 ), aMeshInVTK + "&& isVisible", QtxPopupMgr::VisibleRule ); + popupMgr()->insert( action( SMESHOp::OpProperties ), -1, -1 ); + popupMgr()->setRule( action( SMESHOp::OpProperties ), aMeshInVTK + "&& isVisible", QtxPopupMgr::VisibleRule ); //------------------------------------------------- // Transparency //------------------------------------------------- - popupMgr()->insert( action( 1133 ), -1, -1 ); - popupMgr()->setRule( action( 1133 ), aMeshInVTK + "&& isVisible", QtxPopupMgr::VisibleRule ); + popupMgr()->insert( action( SMESHOp::OpTransparency ), -1, -1 ); + popupMgr()->setRule( action( SMESHOp::OpTransparency ), aMeshInVTK + "&& isVisible", QtxPopupMgr::VisibleRule ); //------------------------------------------------- // Controls @@ -4278,168 +4571,175 @@ void SMESHGUI::initialize( CAM_Application* app ) anId = popupMgr()->insert( tr( "MEN_CTRL" ), -1, -1 ); - popupMgr()->insert( action( 200 ), anId, -1 ); // RESET - popupMgr()->setRule( action( 200 ), aMeshInVTK + "&& controlMode <> 'eNone'", QtxPopupMgr::VisibleRule ); + popupMgr()->insert( action( SMESHOp::OpReset ), anId, -1 ); // RESET + popupMgr()->setRule( action( SMESHOp::OpReset ), aMeshInVTK + "&& controlMode <> 'eNone'", QtxPopupMgr::VisibleRule ); popupMgr()->insert( separator(), anId, -1 ); int aSubId = popupMgr()->insert( tr( "MEN_NODE_CTRL" ), anId, -1 ); // NODE CONTROLS - popupMgr()->insert( action( 6005 ), aSubId, -1 ); // FREE_NODE - popupMgr()->setRule( action( 6005 ), aMeshInVtkHasNodes, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6005 ), "controlMode = 'eFreeNodes'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert( action( SMESHOp::OpFreeNode ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpFreeNode ), aMeshInVtkHasNodes, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpFreeNode ), "controlMode = 'eFreeNodes'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert ( action( 6028 ), aSubId, -1 ); // EQUAL_NODE - popupMgr()->setRule( action( 6028 ), aMeshInVtkHasNodes, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6028 ), "controlMode = 'eCoincidentNodes'", QtxPopupMgr::ToggleRule); + popupMgr()->insert ( action( SMESHOp::OpEqualNode ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpEqualNode ), aMeshInVtkHasNodes, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpEqualNode ), "controlMode = 'eCoincidentNodes'", QtxPopupMgr::ToggleRule); aSubId = popupMgr()->insert( tr( "MEN_EDGE_CTRL" ), anId, -1 ); // EDGE CONTROLS - popupMgr()->insert( action( 6002 ), aSubId, -1 ); // FREE_EDGE - popupMgr()->setRule( action( 6002 ), aMeshInVtkHasEdges, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6002 ), "controlMode = 'eFreeEdges'", QtxPopupMgr::ToggleRule ); - - popupMgr()->insert( action( 6003 ), aSubId, -1 ); // FREE_BORDER - popupMgr()->setRule( action( 6003 ), aMeshInVtkHasEdges, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6003 ), "controlMode = 'eFreeBorders'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert( action( SMESHOp::OpFreeBorder ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpFreeBorder ), aMeshInVTK + "&&" + hasEdges + "&&" + hasFacesOrVolumes, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpFreeBorder ), "controlMode = 'eFreeBorders'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert( action( 6001 ), aSubId, -1 ); // LENGTH - popupMgr()->setRule( action( 6001 ), aMeshInVtkHasEdges, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6001 ), "controlMode = 'eLength'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert( action( SMESHOp::OpLength ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpLength ), aMeshInVtkHasEdges, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpLength ), "controlMode = 'eLength'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert( action( 6004 ), aSubId, -1 ); // CONNECTION - popupMgr()->setRule( action( 6004 ), aMeshInVtkHasEdges, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6004 ), "controlMode = 'eMultiConnection'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert ( action( 6029 ), aSubId, -1 ); // EQUAL_EDGE - popupMgr()->setRule( action( 6029 ), aMeshInVtkHasEdges, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6029 ), "controlMode = 'eCoincidentElems1D'", QtxPopupMgr::ToggleRule); + popupMgr()->insert( action( SMESHOp::OpConnection ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpConnection ), aMeshInVtkHasEdges, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpConnection ), "controlMode = 'eMultiConnection'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( SMESHOp::OpEqualEdge ), aSubId, -1 ); // EQUAL_EDGE + popupMgr()->setRule( action( SMESHOp::OpEqualEdge ), aMeshInVtkHasEdges, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpEqualEdge ), "controlMode = 'eCoincidentElems1D'", QtxPopupMgr::ToggleRule); aSubId = popupMgr()->insert( tr( "MEN_FACE_CTRL" ), anId, -1 ); // FACE CONTROLS - popupMgr()->insert ( action( 6021 ), aSubId, -1 ); // FREE_FACE - popupMgr()->setRule( action( 6021 ), aMeshInVtkHasFaces /*aMeshInVtkHasVolumes*/, + popupMgr()->insert( action( SMESHOp::OpFreeEdge ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpFreeEdge ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpFreeEdge ), "controlMode = 'eFreeEdges'", QtxPopupMgr::ToggleRule ); + + popupMgr()->insert ( action( SMESHOp::OpFreeFace ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpFreeFace ), aMeshInVtkHasFaces /*aMeshInVtkHasVolumes*/, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6021 ), "controlMode = 'eFreeFaces'", QtxPopupMgr::ToggleRule ); + popupMgr()->setRule( action( SMESHOp::OpFreeFace ), "controlMode = 'eFreeFaces'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert ( action( 6018 ), aSubId, -1 ); // LENGTH_2D - popupMgr()->setRule( action( 6018 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6018 ), "controlMode = 'eLength2D'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( SMESHOp::OpLength2D ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpLength2D ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpLength2D ), "controlMode = 'eLength2D'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert ( action( 6019 ), aSubId, -1 ); // CONNECTION_2D - popupMgr()->setRule( action( 6019 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6019 ), "controlMode = 'eMultiConnection2D'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( SMESHOp::OpConnection2D ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpConnection2D ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpConnection2D ), "controlMode = 'eMultiConnection2D'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert ( action( 6011 ), aSubId, -1 ); // AREA - popupMgr()->setRule( action( 6011 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6011 ), "controlMode = 'eArea'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( SMESHOp::OpArea ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpArea ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpArea ), "controlMode = 'eArea'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert ( action( 6012 ), aSubId, -1 ); // TAPER - popupMgr()->setRule( action( 6012 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6012 ), "controlMode = 'eTaper'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( SMESHOp::OpTaper ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpTaper ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpTaper ), "controlMode = 'eTaper'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert ( action( 6013 ), aSubId, -1 ); // ASPECT - popupMgr()->setRule( action( 6013 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6013 ), "controlMode = 'eAspectRatio'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( SMESHOp::OpAspectRatio ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpAspectRatio ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpAspectRatio ), "controlMode = 'eAspectRatio'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert ( action( 6014 ), aSubId, -1 ); // MIN_ANG - popupMgr()->setRule( action( 6014 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6014 ), "controlMode = 'eMinimumAngle'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( SMESHOp::OpMinimumAngle ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpMinimumAngle ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpMinimumAngle ), "controlMode = 'eMinimumAngle'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert ( action( 6015 ), aSubId, -1 ); // WARP - popupMgr()->setRule( action( 6015 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6015 ), "controlMode = 'eWarping'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( SMESHOp::OpWarpingAngle ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpWarpingAngle ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpWarpingAngle ), "controlMode = 'eWarping'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert ( action( 6016 ), aSubId, -1 ); // SKEW - popupMgr()->setRule( action( 6016 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6016 ), "controlMode = 'eSkew'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( SMESHOp::OpSkew ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpSkew ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpSkew ), "controlMode = 'eSkew'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert ( action( 6022 ), aSubId, -1 ); // MAX_ELEMENT_LENGTH_2D - popupMgr()->setRule( action( 6022 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6022 ), "controlMode = 'eMaxElementLength2D'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( SMESHOp::OpMaxElementLength2D ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpMaxElementLength2D ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpMaxElementLength2D ), "controlMode = 'eMaxElementLength2D'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert ( action( 6025 ), aSubId, -1 ); // BARE_BORDER_FACE - popupMgr()->setRule( action( 6025 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6025 ), "controlMode = 'eBareBorderFace'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( SMESHOp::OpBareBorderFace ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpBareBorderFace ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpBareBorderFace ), "controlMode = 'eBareBorderFace'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert ( action( 6027 ), aSubId, -1 ); // OVER_CONSTRAINED_FACE - popupMgr()->setRule( action( 6027 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6027 ), "controlMode = 'eOverConstrainedFace'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert ( action( 6030 ), aSubId, -1 ); // EQUAL_FACE - popupMgr()->setRule( action( 6030 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6030 ), "controlMode = 'eCoincidentElems2D'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( SMESHOp::OpOverConstrainedFace ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpOverConstrainedFace ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpOverConstrainedFace ), "controlMode = 'eOverConstrainedFace'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( SMESHOp::OpEqualFace ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpEqualFace ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpEqualFace ), "controlMode = 'eCoincidentElems2D'", QtxPopupMgr::ToggleRule ); aSubId = popupMgr()->insert( tr( "MEN_VOLUME_CTRL" ), anId, -1 ); // VOLUME CONTROLS - popupMgr()->insert ( action( 6017 ), aSubId, -1 ); // ASPECT_3D - popupMgr()->setRule( action( 6017 ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6017 ), "controlMode = 'eAspectRatio3D'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( SMESHOp::OpAspectRatio3D ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpAspectRatio3D ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpAspectRatio3D ), "controlMode = 'eAspectRatio3D'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert ( action( 6009 ), aSubId, -1 ); // VOLUME_3D - popupMgr()->setRule( action( 6009 ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6009 ), "controlMode = 'eVolume3D'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( SMESHOp::OpVolume ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpVolume ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpVolume ), "controlMode = 'eVolume3D'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert ( action( 6023 ), aSubId, -1 ); // MAX_ELEMENT_LENGTH_3D - popupMgr()->setRule( action( 6023 ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6023 ), "controlMode = 'eMaxElementLength3D'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( SMESHOp::OpMaxElementLength3D ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpMaxElementLength3D ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpMaxElementLength3D ), "controlMode = 'eMaxElementLength3D'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert ( action( 6024 ), aSubId, -1 ); // BARE_BORDER_VOLUME - popupMgr()->setRule( action( 6024 ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6024 ), "controlMode = 'eBareBorderVolume'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( SMESHOp::OpBareBorderVolume ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpBareBorderVolume ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpBareBorderVolume ), "controlMode = 'eBareBorderVolume'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert ( action( 6026 ), aSubId, -1 ); // OVER_CONSTRAINED_VOLUME - popupMgr()->setRule( action( 6026 ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6026 ), "controlMode = 'eOverConstrainedVolume'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( SMESHOp::OpOverConstrainedVolume ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpOverConstrainedVolume ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpOverConstrainedVolume ), "controlMode = 'eOverConstrainedVolume'", QtxPopupMgr::ToggleRule ); - popupMgr()->insert ( action( 6031 ), aSubId, -1 ); // EQUAL_VOLUME - popupMgr()->setRule( action( 6031 ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 6031 ), "controlMode = 'eCoincidentElems3D'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( SMESHOp::OpEqualVolume ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpEqualVolume ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpEqualVolume ), "controlMode = 'eCoincidentElems3D'", QtxPopupMgr::ToggleRule ); popupMgr()->insert( separator(), anId, -1 ); - popupMgr()->insert( action( 201 ), anId, -1 ); // SCALAR_BAR_PROP - popupMgr()->setRule( action( 201 ), aMeshInVTK + "&& controlMode <> 'eNone'", QtxPopupMgr::VisibleRule ); + popupMgr()->insert( action( SMESHOp::OpShowScalarBar ), anId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpShowScalarBar ), aMeshInVTK + "&& controlMode <> 'eNone'", QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpShowScalarBar ), aMeshInVTK + "&& controlMode <> 'eNone' && isScalarBarVisible", QtxPopupMgr::ToggleRule ); + popupMgr()->insert( action( SMESHOp::OpScalarBarProperties ), anId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpScalarBarProperties ), aMeshInVTK + "&& controlMode <> 'eNone'", QtxPopupMgr::VisibleRule ); popupMgr()->insert( separator(), anId, -1 ); aSubId = popupMgr()->insert( tr( "MEN_DISTRIBUTION_CTRL" ), anId, -1 ); // NODE CONTROLS - popupMgr()->insert( action( 2021 ), aSubId, -1 ); // SAVE_DISTRIBUTION - popupMgr()->setRule( action( 2021 ), aMeshInVTK + "&& isNumFunctor", QtxPopupMgr::VisibleRule ); + popupMgr()->insert( action( SMESHOp::OpSaveDistribution ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpSaveDistribution ), aMeshInVTK + "&& isNumFunctor", QtxPopupMgr::VisibleRule ); - popupMgr()->insert( action( 2022 ), aSubId, -1 ); // SHOW_DISTRIBUTION - popupMgr()->setRule( action( 2022 ), aMeshInVTK + "&& isNumFunctor", QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( 2022 ), aMeshInVTK + "&& isNumFunctor && isDistributionVisible", QtxPopupMgr::ToggleRule); + popupMgr()->insert( action( SMESHOp::OpShowDistribution ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpShowDistribution ), aMeshInVTK + "&& isNumFunctor", QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpShowDistribution ), aMeshInVTK + "&& isNumFunctor && isScalarBarVisible && isDistributionVisible", QtxPopupMgr::ToggleRule); #ifndef DISABLE_PLOT2DVIEWER - popupMgr()->insert( action( 2023 ), aSubId, -1 ); // PLOT_DISTRIBUTION - popupMgr()->setRule( action( 2023 ), aMeshInVTK + "&& isNumFunctor", QtxPopupMgr::VisibleRule ); + popupMgr()->insert( action( SMESHOp::OpPlotDistribution ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpPlotDistribution ), aMeshInVTK + "&& isNumFunctor", QtxPopupMgr::VisibleRule ); #endif //------------------------------------------------- - // Display / Erase + // Show / Hide //------------------------------------------------- popupMgr()->insert( separator(), -1, -1 ); QString aRule = "$component={'SMESH'} and ( type='Component' or (" + aClient + " and " + aType + " and " + aSelCount + " and " + anActiveVTK + " and " + isNotEmpty + " %1 ) )"; - popupMgr()->insert( action( 301 ), -1, -1 ); // DISPLAY - popupMgr()->setRule( action( 301 ), aRule.arg( "and (not isVisible)" ), QtxPopupMgr::VisibleRule ); + popupMgr()->insert( action( SMESHOp::OpShow ), -1, -1 ); + popupMgr()->setRule( action( SMESHOp::OpShow ), aRule.arg( "and (not isVisible)" ), QtxPopupMgr::VisibleRule ); - popupMgr()->insert( action( 300 ), -1, -1 ); // ERASE - popupMgr()->setRule( action( 300 ), aRule.arg( "and isVisible" ), QtxPopupMgr::VisibleRule ); + popupMgr()->insert( action( SMESHOp::OpHide ), -1, -1 ); + popupMgr()->setRule( action( SMESHOp::OpHide ), aRule.arg( "and isVisible" ), QtxPopupMgr::VisibleRule ); - popupMgr()->insert( action( 302 ), -1, -1 ); // DISPLAY_ONLY - popupMgr()->setRule( action( 302 ), aRule.arg( "" ), QtxPopupMgr::VisibleRule ); + popupMgr()->insert( action( SMESHOp::OpShowOnly ), -1, -1 ); + popupMgr()->setRule( action( SMESHOp::OpShowOnly ), aRule.arg( "" ), QtxPopupMgr::VisibleRule ); popupMgr()->insert( separator(), -1, -1 ); //------------------------------------------------- // Clipping //------------------------------------------------- - popupMgr()->insert( action( 1134 ), -1, -1 ); - popupMgr()->setRule( action( 1134 ), "client='VTKViewer'", QtxPopupMgr::VisibleRule ); + popupMgr()->insert( action( SMESHOp::OpClipping ), -1, -1 ); + popupMgr()->setRule( action( SMESHOp::OpClipping ), "client='VTKViewer'", QtxPopupMgr::VisibleRule ); popupMgr()->insert( separator(), -1, -1 ); + popupMgr()->insert( action( SMESHOp::OpSortChild ), -1, -1 ); + popupMgr()->setRule( action( SMESHOp::OpSortChild ), "$component={'SMESH'} and client='ObjectBrowser' and isContainer and nbChildren>1", QtxPopupMgr::VisibleRule ); + popupMgr()->insert( separator(), -1, -1 ); + connect( application(), SIGNAL( viewManagerActivated( SUIT_ViewManager* ) ), this, SLOT( onViewManagerActivated( SUIT_ViewManager* ) ) ); @@ -4475,7 +4775,7 @@ bool SMESHGUI::isSelectionCompatible() bool SMESHGUI::reusableOperation( const int id ) { // compute, evaluate and precompute are not reusable operations - return ( id == 701 || id == 711 || id == 712 ) ? false : SalomeApp_Module::reusableOperation( id ); + return ( id == SMESHOp::OpCompute || id == SMESHOp::OpPreCompute || id == SMESHOp::OpEvaluate ) ? false : SalomeApp_Module::reusableOperation( id ); } bool SMESHGUI::activateModule( SUIT_Study* study ) @@ -4487,33 +4787,28 @@ bool SMESHGUI::activateModule( SUIT_Study* study ) // import Python module that manages SMESH plugins (need to be here because SalomePyQt API uses active module) PyGILState_STATE gstate = PyGILState_Ensure(); - PyObject* pluginsmanager=PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager"); - if(pluginsmanager==NULL) + PyObject* pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager"); + if ( !pluginsmanager ) { PyErr_Print(); - else - { - PyObject* result=PyObject_CallMethod( pluginsmanager, (char*)"initialize", (char*)"isss",1,"smesh",tr("MEN_MESH").toStdString().c_str(),tr("SMESH_PLUGINS_OTHER").toStdString().c_str()); - if(result==NULL) - PyErr_Print(); - Py_XDECREF(result); - } + } + else { + PyObject* result = PyObject_CallMethod( pluginsmanager, (char*)"initialize", (char*)"isss",1,"smesh",tr("MEN_MESH").toUtf8().data(),tr("SMESH_PLUGINS_OTHER").toUtf8().data()); + if ( !result ) + PyErr_Print(); + Py_XDECREF(result); + } PyGILState_Release(gstate); - // end of GEOM plugins loading + // end of SMESH plugins loading // Reset actions accelerator keys - //action(111)->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_B)); // Import DAT - action(112)->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_U)); // Import UNV - action(113)->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_M)); // Import MED - - action( 33)->setEnabled(true); // Delete: Key_Delete + action(SMESHOp::OpDelete)->setEnabled(true); // Delete: Key_Delete // 0020210. Make SMESH_Gen update meshes at switching GEOM->SMESH GetSMESHGen()->SetCurrentStudy(SALOMEDS::Study::_nil()); - if ( SalomeApp_Study* s = dynamic_cast( study )) - if ( _PTR(Study) aStudy = s->studyDS()) { + if ( SalomeApp_Study* s = dynamic_cast( study )) { + if ( _PTR(Study) aStudy = s->studyDS() ) GetSMESHGen()->SetCurrentStudy( _CAST(Study,aStudy)->GetStudy() ); - updateObjBrowser(); // objects can be removed - } + } // get all view currently opened in the study and connect their signals to // the corresponding slots of the class. @@ -4525,6 +4820,7 @@ bool SMESHGUI::activateModule( SUIT_Study* study ) connectView( wnd ); } + Py_XDECREF(pluginsmanager); return res; } @@ -4536,17 +4832,15 @@ bool SMESHGUI::deactivateModule( SUIT_Study* study ) EmitSignalCloseAllDialogs(); // Unset actions accelerator keys - //action(111)->setShortcut(QKeySequence()); // Import DAT - action(112)->setShortcut(QKeySequence()); // Import UNV - action(113)->setShortcut(QKeySequence()); // Import MED - - action( 33)->setEnabled(false); // Delete: Key_Delete + action(SMESHOp::OpDelete)->setEnabled(false); // Delete: Key_Delete return SalomeApp_Module::deactivateModule( study ); } void SMESHGUI::studyClosed( SUIT_Study* s ) { + if( !s ) + return; SMESH::RemoveVisuData( s->id() ); SalomeApp_Module::studyClosed( s ); } @@ -4594,7 +4888,7 @@ void SMESHGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& ti _PTR(Study) study = appStudy->studyDS(); _PTR(SObject) obj = study->FindObjectID( io->getEntry() ); if ( obj ) { - QString aName = QString( obj->GetName().c_str() ); + QString aName = QString( SMESH::fromUtf8(obj->GetName()) ); while ( aName.at( aName.length() - 1 ) == ' ' ) // Remove extraspaces in Name of Popup aName.remove( (aName.length() - 1), 1 ); title = aName; @@ -4610,7 +4904,10 @@ LightApp_Selection* SMESHGUI::createSelection() const void SMESHGUI::windows( QMap& aMap ) const { aMap.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea ); + aMap.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea ); +#ifndef DISABLE_PYCONSOLE aMap.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea ); +#endif } void SMESHGUI::viewManagers( QStringList& list ) const @@ -4628,6 +4925,7 @@ void SMESHGUI::onViewManagerActivated( SUIT_ViewManager* mgr ) SUIT_ViewWindow *sf = aViews[i]; connectView( sf ); } + EmitSignalActivatedViewManager(); } } @@ -4650,7 +4948,7 @@ void SMESHGUI::ProcessEvents( vtkObject* theObject, void* theCallData ) { if( SMESHGUI* aSMESHGUI = reinterpret_cast( theClientData ) ) { - if( theObject && theEvent == SMESH::DeleteActorEvent ) { + if( theObject && (int) theEvent == SMESH::DeleteActorEvent ) { if( SMESH_Actor* anActor = SMESH_Actor::SafeDownCast( theObject ) ) { SMESHGUI_ClippingPlaneInfoMap& aClippingPlaneInfoMap = aSMESHGUI->getClippingPlaneInfoMap(); SMESHGUI_ClippingPlaneInfoMap::iterator anIter1 = aClippingPlaneInfoMap.begin(); @@ -4680,11 +4978,13 @@ void SMESHGUI::createPreferences() int genTab = addPreference( tr( "PREF_TAB_GENERAL" ) ); int autoUpdate = addPreference( tr( "PREF_AUTO_UPDATE" ), genTab, LightApp_Preferences::Auto, "SMESH", "auto_update" ); + setPreferenceProperty( autoUpdate, "columns", 2 ); int lim = addPreference( tr( "PREF_UPDATE_LIMIT" ), autoUpdate, LightApp_Preferences::IntSpin, "SMESH", "update_limit" ); setPreferenceProperty( lim, "min", 0 ); setPreferenceProperty( lim, "max", 100000000 ); setPreferenceProperty( lim, "step", 1000 ); setPreferenceProperty( lim, "special", tr( "PREF_UPDATE_LIMIT_NOLIMIT" ) ); + addPreference( tr( "PREF_INCREMENTAL_LIMIT" ), autoUpdate, LightApp_Preferences::Bool, "SMESH", "incremental_limit" ); int qaGroup = addPreference( tr( "PREF_GROUP_QUALITY" ), genTab ); setPreferenceProperty( qaGroup, "columns", 2 ); @@ -4692,14 +4992,14 @@ void SMESHGUI::createPreferences() addPreference( tr( "PREF_PRECISION_USE" ), qaGroup, LightApp_Preferences::Bool, "SMESH", "use_precision" ); int prec = addPreference( tr( "PREF_PRECISION_VALUE" ), qaGroup, LightApp_Preferences::IntSpin, "SMESH", "controls_precision" ); setPreferenceProperty( prec, "min", 0 ); - setPreferenceProperty( prec, "max", 16 ); + setPreferenceProperty( prec, "max", 100 ); int doubleNodesTol = addPreference( tr( "PREF_EQUAL_NODES_TOL" ), qaGroup, LightApp_Preferences::DblSpin, "SMESH", "equal_nodes_tolerance" ); setPreferenceProperty( doubleNodesTol, "precision", 10 ); setPreferenceProperty( doubleNodesTol, "min", 0.0000000001 ); setPreferenceProperty( doubleNodesTol, "max", 1000000.0 ); setPreferenceProperty( doubleNodesTol, "step", 0.0000001 ); - int dispgroup = addPreference( tr( "PREF_DISPLAY_MODE" ), genTab ); + int dispgroup = addPreference( tr( "PREF_DISPLAY_MODE_GROUP" ), genTab ); setPreferenceProperty( dispgroup, "columns", 2 ); int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), dispgroup, LightApp_Preferences::Selector, "SMESH", "display_mode" ); QStringList modes; @@ -4715,7 +5015,7 @@ void SMESHGUI::createPreferences() setPreferenceProperty( dispmode, "strings", modes ); setPreferenceProperty( dispmode, "indexes", indices ); - int arcgroup = addPreference( tr( "QUADRATIC_REPRESENT_MODE" ), genTab ); + int arcgroup = addPreference( tr( "QUADRATIC_REPRESENT_MODE_GROUP" ), genTab ); setPreferenceProperty( arcgroup, "columns", 2 ); int quadraticmode = addPreference( tr( "QUADRATIC_REPRESENT_MODE" ), arcgroup, LightApp_Preferences::Selector, "SMESH", "quadratic_mode" ); QStringList quadraticModes; @@ -4737,6 +5037,7 @@ void SMESHGUI::createPreferences() int exportgroup = addPreference( tr( "PREF_GROUP_EXPORT" ), genTab ); setPreferenceProperty( exportgroup, "columns", 2 ); addPreference( tr( "PREF_AUTO_GROUPS" ), exportgroup, LightApp_Preferences::Bool, "SMESH", "auto_groups" ); + addPreference( tr( "PREF_SHOW_WARN" ), exportgroup, LightApp_Preferences::Bool, "SMESH", "show_warning" ); //addPreference( tr( "PREF_RENUMBER" ), exportgroup, LightApp_Preferences::Bool, "SMESH", "renumbering" ); int computeGroup = addPreference( tr( "PREF_GROUP_COMPUTE" ), genTab ); @@ -4770,6 +5071,7 @@ void SMESHGUI::createPreferences() setPreferenceProperty( nodesLim, "step", 10000 ); setPreferenceProperty( nodesLim, "special", tr( "PREF_UPDATE_LIMIT_NOLIMIT" ) ); int ctrlLim = addPreference( tr( "PREF_CTRL_LIMIT" ), infoGroup, LightApp_Preferences::IntSpin, "SMESH", "info_controls_limit" ); + setPreferenceProperty( ctrlLim, "special", tr( "PREF_UPDATE_LIMIT_NOLIMIT" ) ); setPreferenceProperty( ctrlLim, "min", 0 ); setPreferenceProperty( ctrlLim, "max", 10000000 ); setPreferenceProperty( ctrlLim, "step", 1000 ); @@ -4858,7 +5160,8 @@ void SMESHGUI::createPreferences() QStringList aMarkerScaleValuesList; for ( int i = VTK::MS_10; i <= VTK::MS_70; i++ ) { aMarkerScaleIndicesList << i; - aMarkerScaleValuesList << QString::number( (i-(int)VTK::MS_10)*0.5 + 1.0 ); + //aMarkerScaleValuesList << QString::number( (i-(int)VTK::MS_10)*0.5 + 1.0 ); + aMarkerScaleValuesList << QString::number( i ); } setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList ); setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList ); @@ -4874,6 +5177,7 @@ void SMESHGUI::createPreferences() addPreference( tr( "PREF_BALL_COLOR" ), elemGroup, LightApp_Preferences::Color, "SMESH", "ball_elem_color" ); addPreference( tr( "PREF_OUTLINE" ), elemGroup, LightApp_Preferences::Color, "SMESH", "outline_color" ); addPreference( tr( "PREF_WIREFRAME" ), elemGroup, LightApp_Preferences::Color, "SMESH", "wireframe_color" ); + addPreference( tr( "PREF_PREVIEW_COLOR" ), elemGroup, LightApp_Preferences::BiColor, "SMESH", "preview_color" ); int grpGroup = addPreference( tr( "PREF_GROUP_GROUPS" ), meshTab ); @@ -4884,8 +5188,12 @@ void SMESHGUI::createPreferences() int size0d = addPreference(tr("PREF_SIZE_0D"), elemGroup, LightApp_Preferences::IntSpin, "SMESH", "elem0d_size"); - int ballSize = addPreference(tr("PREF_BALL_SIZE"), elemGroup, - LightApp_Preferences::IntSpin, "SMESH", "ball_elem_size"); + /* int ballSize = addPreference(tr("PREF_BALL_SIZE"), elemGroup, + LightApp_Preferences::IntSpin, "SMESH", "ball_elem_size"); */ + double ballDiameter = addPreference(tr("PREF_BALL_DIAMETER"), elemGroup, + LightApp_Preferences::DblSpin, "SMESH", "ball_elem_diameter"); + double ballScale = addPreference(tr("PREF_BALL_SCALE"), elemGroup, + LightApp_Preferences::DblSpin, "SMESH", "ball_elem_scale"); int elemW = addPreference(tr("PREF_WIDTH"), elemGroup, LightApp_Preferences::IntSpin, "SMESH", "element_width"); int outW = addPreference(tr("PREF_OUTLINE_WIDTH"), elemGroup, @@ -4896,8 +5204,16 @@ void SMESHGUI::createPreferences() setPreferenceProperty( size0d, "min", 1 ); setPreferenceProperty( size0d, "max", 10 ); - setPreferenceProperty( ballSize, "min", 1 ); - setPreferenceProperty( ballSize, "max", 10 ); + // setPreferenceProperty( ballSize, "min", 1 ); + // setPreferenceProperty( ballSize, "max", 10 ); + + setPreferenceProperty( ballDiameter, "min", 1e-7 ); + setPreferenceProperty( ballDiameter, "max", 1e9 ); + setPreferenceProperty( ballDiameter, "step", 0.1 ); + + setPreferenceProperty( ballScale, "min", 1e-2 ); + setPreferenceProperty( ballScale, "max", 1e7 ); + setPreferenceProperty( ballScale, "step", 0.5 ); setPreferenceProperty( elemW, "min", 1 ); setPreferenceProperty( elemW, "max", 5 ); @@ -5038,79 +5354,92 @@ void SMESHGUI::createPreferences() void SMESHGUI::preferencesChanged( const QString& sect, const QString& name ) { - if( sect=="SMESH" ) { - float sbX1,sbY1,sbW,sbH; + if ( sect=="SMESH" ) { + float sbX1 = 0.01, sbY1 = 0.01, sbW = 0.08, sbH = 0.08; float aTol = 1.00000009999999; std::string aWarning; SUIT_ResourceMgr* aResourceMgr = SMESH::GetResourceMgr(this); - if( name=="selection_object_color" || name=="selection_element_color" || - name=="highlight_color" || - name=="selection_precision_node" || name=="selection_precision_element" || - name=="selection_precision_object") + + if ( name== "selection_object_color" || + name=="selection_element_color" || + name== "highlight_color" || + name=="selection_precision_node" || + name=="selection_precision_element" || + name=="selection_precision_object" ) + { SMESH::UpdateSelectionProp( this ); - else if (name == QString("scalar_bar_vertical_x") || name == QString("scalar_bar_vertical_width")){ - sbX1 = aResourceMgr->doubleValue("SMESH", "scalar_bar_vertical_x", sbX1); - sbW = aResourceMgr->doubleValue("SMESH", "scalar_bar_vertical_width", sbW); - if(sbX1+sbW > aTol){ + } + else if (name == "scalar_bar_vertical_x" || name == "scalar_bar_vertical_width") + { + sbX1 = aResourceMgr->doubleValue("SMESH", "scalar_bar_vertical_x", sbX1); + sbW = aResourceMgr->doubleValue("SMESH", "scalar_bar_vertical_width", sbW); + if ( sbX1+sbW > aTol ) { aWarning = "Origin and Size Vertical: X+Width > 1\n"; - sbX1=0.01; - sbW=0.08; - aResourceMgr->setValue("SMESH", "scalar_bar_vertical_x", sbX1); + sbX1 = 0.01; + sbW = 0.08; + aResourceMgr->setValue("SMESH", "scalar_bar_vertical_x", sbX1); aResourceMgr->setValue("SMESH", "scalar_bar_vertical_width", sbW); } } - else if(name == QString("scalar_bar_vertical_y") || name == QString("scalar_bar_vertical_height")){ - sbY1 = aResourceMgr->doubleValue("SMESH", "scalar_bar_vertical_y", sbY1); - sbH = aResourceMgr->doubleValue("SMESH", "scalar_bar_vertical_height",sbH); - if(sbY1+sbH > aTol){ + else if (name == "scalar_bar_vertical_y" || name == "scalar_bar_vertical_height" ) + { + sbY1 = aResourceMgr->doubleValue("SMESH", "scalar_bar_vertical_y", sbY1); + sbH = aResourceMgr->doubleValue("SMESH", "scalar_bar_vertical_height",sbH); + if ( sbY1 + sbH > aTol ) { aWarning = "Origin and Size Vertical: Y+Height > 1\n"; - aResourceMgr->setValue("SMESH", "scalar_bar_vertical_y", sbY1); + aResourceMgr->setValue("SMESH", "scalar_bar_vertical_y", sbY1); aResourceMgr->setValue("SMESH", "scalar_bar_vertical_height",sbH); } } - else if(name == QString("scalar_bar_horizontal_x") || name == QString("scalar_bar_horizontal_width")){ - sbX1 = aResourceMgr->doubleValue("SMESH", "scalar_bar_horizontal_x", sbX1); - sbW = aResourceMgr->doubleValue("SMESH", "scalar_bar_horizontal_width", sbW); - if(sbX1+sbW > aTol){ + else if (name == "scalar_bar_horizontal_x" || name == "scalar_bar_horizontal_width") + { + sbX1 = aResourceMgr->doubleValue("SMESH", "scalar_bar_horizontal_x", sbX1); + sbW = aResourceMgr->doubleValue("SMESH", "scalar_bar_horizontal_width", sbW); + if ( sbX1 + sbW > aTol ) { aWarning = "Origin and Size Horizontal: X+Width > 1\n"; sbX1=0.1; - sbW=0.08; + sbW =0.08; aResourceMgr->setValue("SMESH", "scalar_bar_horizontal_x", sbX1); aResourceMgr->setValue("SMESH", "scalar_bar_horizontal_width", sbW); } } - else if(name == QString("scalar_bar_horizontal_y") || name == QString("scalar_bar_horizontal_height")){ - sbY1 = aResourceMgr->doubleValue("SMESH", "scalar_bar_horizontal_y", sbY1); - sbH = aResourceMgr->doubleValue("SMESH", "scalar_bar_horizontal_height",sbH); - if(sbY1+sbH > aTol){ + else if (name == "scalar_bar_horizontal_y" || name == "scalar_bar_horizontal_height") + { + sbY1 = aResourceMgr->doubleValue("SMESH", "scalar_bar_horizontal_y", sbY1); + sbH = aResourceMgr->doubleValue("SMESH", "scalar_bar_horizontal_height",sbH); + if ( sbY1 + sbH > aTol ) { aWarning = "Origin and Size Horizontal: Y+Height > 1\n"; sbY1=0.01; - sbH=0.08; + sbH =0.08; aResourceMgr->setValue("SMESH", "scalar_bar_horizontal_y", sbY1); aResourceMgr->setValue("SMESH", "scalar_bar_horizontal_height",sbH); } } - else if ( name == "segmentation" ) { + else if ( name == "segmentation" ) + { int nbSeg = aResourceMgr->integerValue( "SMESH", "segmentation", 10 ); myComponentSMESH->SetBoundaryBoxSegmentation( nbSeg ); } - else if ( name == "nb_segments_per_edge" ) { + else if ( name == "nb_segments_per_edge" ) + { int nbSeg = aResourceMgr->integerValue( "SMESH", "nb_segments_per_edge", 15 ); myComponentSMESH->SetDefaultNbSegments( nbSeg ); } - else if ( name == "historical_python_dump" || - name == "forget_mesh_on_hyp_modif") { + else if ( name == "historical_python_dump" || name == "forget_mesh_on_hyp_modif" || name == "default_grp_color" ) + { QString val = aResourceMgr->stringValue( "SMESH", name ); myComponentSMESH->SetOption( name.toLatin1().constData(), val.toLatin1().constData() ); } - else if ( name == QString( "numbering_node_color" ) || name == QString( "numbering_node_font" ) ) { - SMESH::UpdateFontProp( this ); + else if ( name == "numbering_node_color" || name == "numbering_node_font" ) + { + SMESH::UpdateFontProp( this ); } - else if ( name == QString( "numbering_elem_color" ) || name == QString( "numbering_elem_font" ) ) { + else if ( name == "numbering_elem_color" || name == "numbering_elem_font" ) + { SMESH::UpdateFontProp( this ); } - if(aWarning.size() != 0){ + if ( aWarning.size() != 0 ) { aWarning += "The default values are applied instead."; SUIT_MessageBox::warning(SMESHGUI::desktop(), QObject::tr("SMESH_ERR_SCALARBAR_PARAMS"), @@ -5182,46 +5511,52 @@ LightApp_Operation* SMESHGUI::createOperation( const int id ) const // to do : create operation here switch( id ) { - case 417: //convert to quadratic + case SMESHOp::OpSplitBiQuadratic: + op = new SMESHGUI_SplitBiQuadOp(); + break; + case SMESHOp::OpConvertMeshToQuadratic: op = new SMESHGUI_ConvToQuadOp(); break; - case 418: // create 2D mesh as boundary on 3D + case SMESHOp::OpCreateBoundaryElements: // create 2D mesh as boundary on 3D op = new SMESHGUI_Make2DFrom3DOp(); break; - case 420: // Reorient faces + case SMESHOp::OpReorientFaces: op = new SMESHGUI_ReorientFacesOp(); break; - case 701: // Compute mesh - op = new SMESHGUI_ComputeOp(); - break; - case 702: // Create mesh + case SMESHOp::OpCreateMesh: op = new SMESHGUI_MeshOp( true, true ); break; - case 703: // Create sub-mesh + case SMESHOp::OpCreateSubMesh: op = new SMESHGUI_MeshOp( true, false ); break; - case 704: // Edit mesh/sub-mesh + case SMESHOp::OpEditMeshOrSubMesh: + case SMESHOp::OpEditMesh: + case SMESHOp::OpEditSubMesh: op = new SMESHGUI_MeshOp( false ); break; - case 711: // Precompute mesh + case SMESHOp::OpCompute: + case SMESHOp::OpComputeSubMesh: + op = new SMESHGUI_ComputeOp(); + break; + case SMESHOp::OpPreCompute: op = new SMESHGUI_PrecomputeOp(); break; - case 712: // Evaluate mesh + case SMESHOp::OpEvaluate: op = new SMESHGUI_EvaluateOp(); break; - case 713: // Evaluate mesh + case SMESHOp::OpMeshOrder: op = new SMESHGUI_MeshOrderOp(); break; - case 806: // Create group on geom + case SMESHOp::OpCreateGeometryGroup: op = new SMESHGUI_GroupOnShapeOp(); break; - case 904: // Find element + case SMESHOp::OpFindElementByPoint: op = new SMESHGUI_FindElemByPointOp(); break; - case 4067: // Make mesh pass through point + case SMESHOp::OpMoveNode: // Make mesh pass through point op = new SMESHGUI_MakeNodeAtPointOp(); break; - case 4070: // Create 0D elements on all nodes + case SMESHOp::OpElem0DOnElemNodes: // Create 0D elements on all nodes op = new SMESHGUI_Add0DElemsOnAllNodesOp(); break; default: @@ -5403,13 +5738,34 @@ void SMESHGUI::storeVisualParameters (int savePoint) aPropertyName += gSeparator; aPropertyName += QString::number( anId ); - QString aPropertyValue = QString::number( (int)aPlane->GetOrientation() ).toLatin1().constData(); - aPropertyValue += gDigitsSep; - aPropertyValue += QString::number( aPlane->GetDistance() ).toLatin1().constData(); + QString aPropertyValue = QString::number( (int)aPlane->PlaneMode ).toLatin1().constData(); aPropertyValue += gDigitsSep; - aPropertyValue += QString::number( aPlane->myAngle[0] ).toLatin1().constData(); + aPropertyValue += QString::number( aPlane->IsOpenGLClipping ).toLatin1().constData(); aPropertyValue += gDigitsSep; - aPropertyValue += QString::number( aPlane->myAngle[1] ).toLatin1().constData(); + if ( aPlane->PlaneMode == SMESH::Absolute ) { + aPropertyValue += QString::number( aPlane->myAbsoluteOrientation ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->X ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->Y ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->Z ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->Dx ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->Dy ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->Dz ).toLatin1().constData(); + } + else if ( aPlane->PlaneMode == SMESH::Relative ) { + aPropertyValue += QString::number( (int)aPlane->myRelativeOrientation ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->GetDistance() ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->myAngle[0] ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->myAngle[1] ).toLatin1().constData(); + } ip->setProperty( aPropertyName.toStdString(), aPropertyValue.toStdString() ); } @@ -5549,7 +5905,9 @@ void SMESHGUI::storeVisualParameters (int savePoint) sizeStr << "elem0d"; sizeStr << QString::number((int)aSmeshActor->Get0DSize()); sizeStr << "ball"; - sizeStr << QString::number((int)aSmeshActor->GetBallSize()); + //sizeStr << QString::number((int)aSmeshActor->GetBallSize()); + sizeStr << QString::number((double)aSmeshActor->GetBallSize()); + sizeStr << QString::number((double)aSmeshActor->GetBallScale()); sizeStr << "shrink"; sizeStr << QString::number(aSmeshActor->GetShrinkFactor()); sizeStr << "orientation"; @@ -5619,9 +5977,13 @@ void SMESHGUI::storeVisualParameters (int savePoint) // data structures for clipping planes processing typedef struct { int Id; - vtkIdType Orientation; + int Mode; + bool isOpenGLClipping; + vtkIdType RelativeOrientation; double Distance; double Angle[2]; + int AbsoluteOrientation; + double X, Y, Z, Dx, Dy, Dz; } TPlaneData; typedef std::list TPlaneDataList; typedef std::map TPlaneDataMap; @@ -5738,31 +6100,86 @@ void SMESHGUI::restoreVisualParameters (int savePoint) continue; QStringList aPropertyValueList = aPropertyValue.split( gDigitsSep, QString::SkipEmptyParts ); - if( aPropertyValueList.size() != 4 ) + if( aPropertyValueList.size() != 6 && aPropertyValueList.size() != 9 ) continue; TPlaneData aPlaneData; + aPlaneData.AbsoluteOrientation = false; + aPlaneData.RelativeOrientation = 0; + aPlaneData.Distance = aPlaneData.Angle[0] = aPlaneData.Angle[1] = 0; + aPlaneData.X = aPlaneData.Y = aPlaneData.Z = 0; + aPlaneData.Dx = aPlaneData.Dy = aPlaneData.Dz = 0; + aPlaneData.Id = aClippingPlaneId; ok = false; - aPlaneData.Orientation = aPropertyValueList[0].toInt( &ok ); + aPlaneData.Mode = aPropertyValueList[0].toInt( &ok ); if( !ok ) continue; - + ok = false; - aPlaneData.Distance = aPropertyValueList[1].toDouble( &ok ); + aPlaneData.isOpenGLClipping = aPropertyValueList[1].toInt( &ok ); if( !ok ) continue; - ok = false; - aPlaneData.Angle[0] = aPropertyValueList[2].toDouble( &ok ); - if( !ok ) - continue; + if ( (SMESH::Mode)aPlaneData.Mode == SMESH::Absolute ) + { + ok = false; + aPlaneData.AbsoluteOrientation = aPropertyValueList[2].toInt( &ok ); + if( !ok ) + continue; - ok = false; - aPlaneData.Angle[1] = aPropertyValueList[3].toDouble( &ok ); - if( !ok ) - continue; + ok = false; + aPlaneData.X = aPropertyValueList[3].toDouble( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Y = aPropertyValueList[4].toDouble( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Z = aPropertyValueList[5].toDouble( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Dx = aPropertyValueList[6].toDouble( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Dy = aPropertyValueList[7].toDouble( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Dz = aPropertyValueList[8].toDouble( &ok ); + if( !ok ) + continue; + } + else if ( (SMESH::Mode)aPlaneData.Mode == SMESH::Relative ) { + ok = false; + aPlaneData.RelativeOrientation = aPropertyValueList[2].toInt( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Distance = aPropertyValueList[3].toDouble( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Angle[0] = aPropertyValueList[4].toDouble( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Angle[1] = aPropertyValueList[5].toDouble( &ok ); + if( !ok ) + continue; + } TPlaneDataList& aPlaneDataList = aPlaneDataMap[ aViewId ]; aPlaneDataList.push_back( aPlaneData ); @@ -5846,8 +6263,7 @@ void SMESHGUI::restoreVisualParameters (int savePoint) if (ac->IsA("SMESH_Actor")) { SMESH_Actor* aGeomAc = SMESH_Actor::SafeDownCast(ac); if (aGeomAc->hasIO()) { - Handle(SALOME_InteractiveObject) io = - Handle(SALOME_InteractiveObject)::DownCast(aGeomAc->getIO()); + Handle(SALOME_InteractiveObject) io = aGeomAc->getIO(); if (io->hasEntry() && strcmp(io->getEntry(), entry.toLatin1().data()) == 0) { isFound = true; vtkActors.Bind(viewIndex, aGeomAc); @@ -6080,7 +6496,9 @@ void SMESHGUI::restoreVisualParameters (int savePoint) int lineWidth = -1; int outlineWidth = -1; int elem0dSize = -1; - int ballSize = -1; + //int ballSize = -1; + double ballDiameter = -1.0; + double ballScale = -1.0; double shrinkSize = -1; double orientationSize = -1; bool orientation3d = false; @@ -6108,11 +6526,18 @@ void SMESHGUI::restoreVisualParameters (int savePoint) i++; } else if ( type == "ball" ) { - // ball size is given as single integer value - if ( i+1 >= sizes.count() ) break; // format error - int v = sizes[i+1].toInt( &bOk ); if ( !bOk ) break; // format error - ballSize = v; - i++; + // balls are specified by two values: size:scale, where + // - size - is a integer value specifying size + // - scale - is a double value specifying scale factor + if ( i+1 >= sizes.count() ) break; // format error + //int v1 = sizes[i+1].toInt( &bOk ); if ( !bOk ) break; // format error + double v1 = sizes[i+1].toInt( &bOk ); if ( !bOk ) break; // format error + if ( i+2 >= sizes.count() ) break; // format error + double v2 = sizes[i+2].toDouble( &bOk ); if ( !bOk ) break; // format error + //ballSize = v1; + ballDiameter = v1; + ballScale = v2; + i += 2; } else if ( type == "shrink" ) { // shrink factor is given as single floating point value @@ -6146,8 +6571,14 @@ void SMESHGUI::restoreVisualParameters (int savePoint) if ( elem0dSize > 0 ) aSmeshActor->Set0DSize( elem0dSize ); // ball size - if ( ballSize > 0 ) - aSmeshActor->SetBallSize( ballSize ); + /*if ( ballSize > 0 ) + aSmeshActor->SetBallSize( ballSize );*/ + // ball diameter + if ( ballDiameter > 0 ) + aSmeshActor->SetBallSize( ballDiameter ); + // ball scale + if ( ballScale > 0.0 ) + aSmeshActor->SetBallScale( ballScale ); // shrink factor if ( shrinkSize > 0 ) aSmeshActor->SetShrinkFactor( shrinkSize ); @@ -6185,21 +6616,18 @@ void SMESHGUI::restoreVisualParameters (int savePoint) // Clipping else if (paramNameStr.startsWith("ClippingPlane")) { QStringList vals = val.split(gDigitsSep, QString::SkipEmptyParts); - // old format - val looks like "Off" or "0:0.5:0:0" (orientation, distance, two angles) + // old format - val looks like "Off" or "1:0:0:0.5:0:0" + // (mode(relative), is OpenGL clipping plane, orientation, distance, two angles) + // or "0:1:1:10.5:1.0:1.0:15.0:10.0:10.0" + // (mode(absolute), is OpenGL clipping plane, orientation, base point(x, y, z), direction (dx, dy, dz)) // new format - val looks like "Off" or "0" (plane id) // (note: in new format "Off" value is used only for consistency, // so it is processed together with values in old format) - bool anIsOldFormat = ( vals.count() == 4 || val == "Off" ); + bool anIsOldFormat = ( vals.count() == 6 || vals.count() == 9 || val == "Off" ); if( anIsOldFormat ) { if (paramNameStr == "ClippingPlane1" || val == "Off") aSmeshActor->RemoveAllClippingPlanes(); if (val != "Off") { - SMESH::Orientation anOrientation = (SMESH::Orientation)vals[0].toInt(); - double aDistance = vals[1].toFloat(); - double anAngle[2]; - anAngle[0] = vals[2].toFloat(); - anAngle[1] = vals[3].toFloat(); - QList lst; getApp()->viewManagers(viewerTypStr, lst); // SVTK ViewManager always has 1 ViewWindow, so view index is index of view manager @@ -6211,13 +6639,35 @@ void SMESHGUI::restoreVisualParameters (int savePoint) SMESH::TActorList anActorList; anActorList.push_back( aSmeshActor ); - SMESH::OrientedPlane* aPlane = - SMESHGUI_ClippingDlg::AddPlane(anActorList, vtkView, anOrientation, aDistance, anAngle); + SMESH::OrientedPlane* aPlane = SMESH::OrientedPlane::New( vtkView ); + aPlane->myViewWindow = vtkView; + SMESH::Mode aMode = ( SMESH::Mode )vals[0].toInt(); + aPlane->PlaneMode = aMode; + bool isOpenGLClipping = ( bool )vals[1].toInt(); + aPlane->IsOpenGLClipping = isOpenGLClipping; + if ( aMode == SMESH::Absolute ) { + aPlane->myAbsoluteOrientation = vals[2].toInt(); + aPlane->X = vals[3].toFloat(); + aPlane->Y = vals[4].toFloat(); + aPlane->Z = vals[5].toFloat(); + aPlane->Dx = vals[6].toFloat(); + aPlane->Dy = vals[7].toFloat(); + aPlane->Dz = vals[8].toFloat(); + } + else if ( aMode == SMESH::Relative ) { + aPlane->myRelativeOrientation = (SMESH::Orientation)vals[2].toInt(); + aPlane->myDistance = vals[3].toFloat(); + aPlane->myAngle[0] = vals[4].toFloat(); + aPlane->myAngle[1] = vals[5].toFloat(); + } + if( aPlane ) { - SMESH::ClippingPlaneInfo aClippingPlaneInfo; - aClippingPlaneInfo.Plane = aPlane; - aClippingPlaneInfo.ActorList = anActorList; - aClippingPlaneInfoList.push_back( aClippingPlaneInfo ); + if ( SMESHGUI_ClippingDlg::AddPlane( anActorList, aPlane ) ) { + SMESH::ClippingPlaneInfo aClippingPlaneInfo; + aClippingPlaneInfo.Plane = aPlane; + aClippingPlaneInfo.ActorList = anActorList; + aClippingPlaneInfoList.push_back( aClippingPlaneInfo ); + } } } } @@ -6338,23 +6788,40 @@ void SMESHGUI::restoreVisualParameters (int savePoint) for( ; anIter4 != aPlaneDataList.end(); anIter4++ ) { const TPlaneData& aPlaneData = *anIter4; if( aPlaneData.Id == aPlaneId ) { - SMESH::OrientedPlane* aPlane = - SMESHGUI_ClippingDlg::AddPlane( anActorList, - aViewWindow, - (SMESH::Orientation)aPlaneData.Orientation, - aPlaneData.Distance, - aPlaneData.Angle ); + SMESH::OrientedPlane* aPlane = SMESH::OrientedPlane::New( aViewWindow ); + aPlane->myViewWindow = aViewWindow; + aPlane->PlaneMode = (SMESH::Mode)aPlaneData.Mode; + aPlane->IsOpenGLClipping = aPlaneData.isOpenGLClipping; + if ( aPlane->PlaneMode == SMESH::Absolute ) { + aPlane->myAbsoluteOrientation = aPlaneData.AbsoluteOrientation; + aPlane->X = aPlaneData.X; + aPlane->Y = aPlaneData.Y; + aPlane->Z = aPlaneData.Z; + aPlane->Dx = aPlaneData.Dx; + aPlane->Dy = aPlaneData.Dy; + aPlane->Dz = aPlaneData.Dz; + } + else if ( aPlane->PlaneMode == SMESH::Relative ) { + aPlane->myRelativeOrientation = (SMESH::Orientation)aPlaneData.RelativeOrientation; + aPlane->myDistance = aPlaneData.Distance; + aPlane->myAngle[0] = aPlaneData.Angle[0]; + aPlane->myAngle[1] = aPlaneData.Angle[1]; + } if( aPlane ) { - SMESH::ClippingPlaneInfo aClippingPlaneInfo; - aClippingPlaneInfo.Plane = aPlane; - aClippingPlaneInfo.ActorList = anActorList; - aClippingPlaneInfoList.push_back( aClippingPlaneInfo ); + if ( SMESHGUI_ClippingDlg::AddPlane( anActorList, aPlane ) ) { + SMESH::ClippingPlaneInfo aClippingPlaneInfo; + aClippingPlaneInfo.Plane = aPlane; + aClippingPlaneInfo.ActorList = anActorList; + aClippingPlaneInfoList.push_back( aClippingPlaneInfo ); + } } break; } } + } } + // update all VTK views QList lst; @@ -6363,6 +6830,14 @@ void SMESHGUI::restoreVisualParameters (int savePoint) SUIT_ViewModel* vmodel = (*it)->getViewModel(); if (vmodel && vmodel->getType() == SVTK_Viewer::Type()) { SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView(); + // set OpenGL clipping planes + VTK::ActorCollectionCopy aCopy( vtkView->getRenderer()->GetActors() ); + vtkActorCollection* anAllActors = aCopy.GetActors(); + anAllActors->InitTraversal(); + while( vtkActor* aVTKActor = anAllActors->GetNextActor() ) + if( SMESH_Actor* anActor = SMESH_Actor::SafeDownCast( aVTKActor ) ) + anActor->SetOpenGLClippingPlane(); + vtkView->getRenderer()->ResetCameraClippingRange(); vtkView->Repaint(); } @@ -6407,6 +6882,48 @@ void SMESHGUI::onHypothesisEdit( int result ) updateObjBrowser( true ); } +/*! + \brief Actions after choosing menu of control modes + Updates control mode actions according to current selection +*/ +void SMESHGUI::onUpdateControlActions() +{ + SALOME_ListIO selected; + if ( LightApp_SelectionMgr* aSel = SMESHGUI::selectionMgr() ) + aSel->selectedObjects( selected ); + + SMESH_Actor::eControl aControl = SMESH_Actor::eNone; + if ( selected.Extent() ) { + if ( selected.First()->hasEntry() ) { + if ( SMESH_Actor* anActor = SMESH::FindActorByEntry( selected.First()->getEntry() )) { + aControl = anActor->GetControlMode(); + SALOME_ListIteratorOfListIO it(selected); + for ( it.Next(); it.More(); it.Next() ) { + Handle(SALOME_InteractiveObject) anIO = it.Value(); + if ( anIO->hasEntry() ) { + if ( SMESH_Actor* anActor = SMESH::FindActorByEntry( anIO->getEntry() ) ) { + if ( aControl != anActor->GetControlMode() ) { + aControl = SMESH_Actor::eNone; + break; + } + } + } + } + } + } + } + + int anAction = ActionToControl( aControl, true ); + if ( anAction) + action( anAction )->setChecked( true ); + else { + QMenu* send = (QMenu*)sender(); + QList actions = send->actions(); + for ( int i = 0; i < actions.size(); i++ ) + actions[i]->setChecked( false ); + } +} + /*! \brief Signal handler closing(SUIT_ViewWindow*) of a view @@ -6417,6 +6934,7 @@ void SMESHGUI::onViewClosed( SUIT_ViewWindow* pview ) { //Crear all Plot2d Viewers if need. SMESH::ClearPlot2Viewers(pview); #endif + EmitSignalCloseView(); } void SMESHGUI::message( const QString& msg ) @@ -6435,7 +6953,7 @@ void SMESHGUI::message( const QString& msg ) _PTR(SObject) obj = study->FindObjectID( entry.toLatin1().constData() ); QString name; if ( obj ) - name = obj->GetName().c_str(); + name = SMESH::fromUtf8(obj->GetName()); if ( name.isEmpty() ) return; @@ -6561,7 +7079,6 @@ bool SMESHGUI::renameObject( const QString& entry, const QString& name) { return false; } - SALOMEDS::Color SMESHGUI::getPredefinedUniqueColor() { static QList colors; @@ -6579,7 +7096,7 @@ SALOMEDS::Color SMESHGUI::getPredefinedUniqueColor() } } } - static int currentColor = 0; + static int currentColor = randomize( colors.size() ); SALOMEDS::Color color; color.R = (double)colors[currentColor].red() / 255.0;