X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI.cxx;h=1225963f69b6af8558c3af9f92c514c5bc047428;hp=2b367eb975168db02af0ead791102436fb2c6058;hb=8d297d6698f361d4f2dde723050bcfbaea050920;hpb=7f46c31f2b6e0073d9235615d6fdfc9c017e74c8 diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 2b367eb97..1225963f6 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 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 @@ -74,6 +74,7 @@ #include "SMESHGUI_RevolutionDlg.h" #include "SMESHGUI_RotationDlg.h" #include "SMESHGUI_ScaleDlg.h" +#include "SMESHGUI_OffsetDlg.h" #include "SMESHGUI_Selection.h" #include "SMESHGUI_SewingDlg.h" #include "SMESHGUI_SingleEditDlg.h" @@ -143,6 +144,7 @@ #include CORBA_CLIENT_HEADER(SALOMEDS_Attributes) #include CORBA_CLIENT_HEADER(SMESH_MeshEditor) #include CORBA_CLIENT_HEADER(SMESH_Measurements) +#include CORBA_CLIENT_HEADER(SMESH_Mesh) // Qt includes // #define INCLUDE_MENUITEM_DEF // VSR commented ???????? @@ -151,6 +153,9 @@ #include #include #include +#include +#include +#include // BOOST includes #include @@ -178,11 +183,6 @@ #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 @@ -192,15 +192,15 @@ namespace // Declarations //============================================================= void ImportMeshesFromFile(SMESH::SMESH_Gen_ptr theComponentMesh, - int theCommandID); + int theCommandID); void ExportMeshToFile(int theCommandID); - void SetDisplayMode(int theCommandID, SMESHGUI_StudyId2MarkerMap& theMarkerMap); + void SetDisplayMode(int theCommandID, VTK::MarkerMap& theMarkerMap); void SetDisplayEntity(int theCommandID); - int ActionToControl( int theID, bool theReversed = false ); + int ActionToControl( int theID, bool theReversed = false ); void Control( int theCommandID ); @@ -212,34 +212,39 @@ namespace //================================================================================ void ImportMeshesFromFile( SMESH::SMESH_Gen_ptr theComponentMesh, - int theCommandID ) + int theCommandID ) { QStringList filter; std::string myExtension; - if ( theCommandID == SMESHOp::OpImportMED ) { + if ( theCommandID == SMESHOp::OpImportMED || + theCommandID == SMESHOp::OpPopupImportMED ) { filter.append( QObject::tr( "MED_FILES_FILTER" ) + " (*.*med)" ); filter.append( QObject::tr( "ALL_FILES_FILTER" ) + " (*)" ); } - else if ( theCommandID == SMESHOp::OpImportUNV ) { + else if ( theCommandID == SMESHOp::OpImportUNV || + theCommandID == SMESHOp::OpPopupImportUNV ) { filter.append( QObject::tr( "IDEAS_FILES_FILTER" ) + " (*.unv)" ); } - else if ( theCommandID == SMESHOp::OpImportDAT ) { + else if ( theCommandID == SMESHOp::OpImportDAT || + theCommandID == SMESHOp::OpPopupImportDAT ) { filter.append( QObject::tr( "DAT_FILES_FILTER" ) + " (*.dat)" ); } - else if ( theCommandID == SMESHOp::OpImportSTL ) { + else if ( theCommandID == SMESHOp::OpImportSTL || + theCommandID == SMESHOp::OpPopupImportSTL ) { filter.append( QObject::tr( "STL_FILES_FILTER" ) + " (*.stl)" ); } - #ifdef WITH_CGNS - else if ( theCommandID == SMESHOp::OpImportCGNS ) { + else if ( theCommandID == SMESHOp::OpImportCGNS || + theCommandID == SMESHOp::OpPopupImportCGNS ) { filter.append( QObject::tr( "CGNS_FILES_FILTER" ) + " (*.cgns)" ); } - #endif - else if ( theCommandID == SMESHOp::OpImportSAUV ) { - filter.append( QObject::tr( "SAUV files (*.sauv*)" ) ); - filter.append( QObject::tr( "All files (*)" ) ); + else if ( theCommandID == SMESHOp::OpImportSAUV || + theCommandID == SMESHOp::OpPopupImportSAUV ) { + filter.append( QObject::tr( "SAUV_FILES_FILTER" ) + " (*.sauv *.sauve)" ); + filter.append( QObject::tr( "ALL_FILES_FILTER" ) + " (*)" ); } - else if ( theCommandID == SMESHOp::OpImportGMF ) { + else if ( theCommandID == SMESHOp::OpImportGMF || + theCommandID == SMESHOp::OpPopupImportGMF ) { filter.append( QObject::tr( "GMF_ASCII_FILES_FILTER" ) + " (*.mesh)" ); filter.append( QObject::tr( "GMF_BINARY_FILES_FILTER") + " (*.meshb)" ); } @@ -270,19 +275,22 @@ namespace filter, QObject::tr( "SMESH_IMPORT_MESH" ) ); } - if ( filenames.count() > 0 ) { + if ( filenames.count() > 0 ) + { SUIT_OverrideCursor wc; - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); + _PTR(Study) aStudy = SMESH::getStudy(); 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 SMESHOp::OpImportDAT: + case SMESHOp::OpPopupImportDAT: { // DAT format (currently unsupported) errors.append( QString( "%1 :\n\t%2" ).arg( filename ). @@ -290,6 +298,7 @@ namespace break; } case SMESHOp::OpImportUNV: + case SMESHOp::OpPopupImportUNV: { // UNV format aMeshes->length( 1 ); @@ -300,6 +309,7 @@ namespace break; } case SMESHOp::OpImportMED: + case SMESHOp::OpPopupImportMED: { // MED format SMESH::DriverMED_ReadStatus res; @@ -311,6 +321,7 @@ namespace break; } case SMESHOp::OpImportSTL: + case SMESHOp::OpPopupImportSTL: { // STL format aMeshes->length( 1 ); @@ -321,8 +332,8 @@ namespace } break; } - #ifdef WITH_CGNS case SMESHOp::OpImportCGNS: + case SMESHOp::OpPopupImportCGNS: { // CGNS format SMESH::DriverMED_ReadStatus res; @@ -333,8 +344,8 @@ namespace } break; } - #endif case SMESHOp::OpImportSAUV: + case SMESHOp::OpPopupImportSAUV: { // SAUV format SMESH::DriverMED_ReadStatus res; @@ -346,6 +357,7 @@ namespace break; } case SMESHOp::OpImportGMF: + case SMESHOp::OpPopupImportGMF: { // GMF format SMESH::ComputeError_var res; @@ -370,7 +382,8 @@ namespace 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(); @@ -424,37 +437,72 @@ namespace if( aSel ) aSel->selectedObjects( selected ); - 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 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 ); + const bool isCGNS= ( theCommandID == SMESHOp::OpExportCGNS || + theCommandID == SMESHOp::OpPopupExportCGNS ); + 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(); @@ -557,6 +605,7 @@ namespace notSupportedElemTypes.push_back( SMESH::Entity_Quad_Polygon ); notSupportedElemTypes.push_back( SMESH::Entity_Quad_Pyramid ); notSupportedElemTypes.push_back( SMESH::Entity_Quad_Penta ); + notSupportedElemTypes.push_back( SMESH::Entity_BiQuad_Penta ); notSupportedElemTypes.push_back( SMESH::Entity_Hexagonal_Prism ); notSupportedElemTypes.push_back( SMESH::Entity_Polyhedra ); notSupportedElemTypes.push_back( SMESH::Entity_Quad_Polyhedra ); @@ -572,7 +621,7 @@ namespace 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", @@ -580,8 +629,13 @@ namespace "SMESH_TETRAHEDRA","SMESH_QUADRATIC_TETRAHEDRONS","SMESH_PYRAMIDS", "SMESH_QUADRATIC_PYRAMIDS","SMESH_HEXAHEDRA","SMESH_QUADRATIC_HEXAHEDRONS", "SMESH_TRIQUADRATIC_HEXAHEDRONS","SMESH_PENTAHEDRA","SMESH_QUADRATIC_PENTAHEDRONS", + "SMESH_BIQUADRATIC_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]=0; + QString andStr = " " + QObject::tr("SMESH_AND") + " ", comma(", "); for ( size_t iType = 0; iType < presentNotSupported.size(); ++iType ) { typeNames += QObject::tr( typeMsg[ presentNotSupported[ iType ]]); @@ -600,15 +654,16 @@ namespace // Get parameters of export operation - QString aFilename; - SMESH::MED_VERSION aFormat; + QString aFilename; + int aFormat =-1; // for MED minor versions + bool isOkToWrite = true; // to check MED file version compatibility before adding a mesh in an existing file + // 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"); @@ -635,7 +690,14 @@ namespace } else if ( isCGNS )// Export to CGNS { - SUIT_FileDlg* fd = new SUIT_FileDlg( SMESHGUI::desktop(), false, true, true ); + const char* theByTypeResource = "cgns_group_elems_by_type"; + toCreateGroups = SMESHGUI::resourceMgr()->booleanValue( "SMESH", theByTypeResource, false ); + + QStringList checkBoxes; + checkBoxes << QObject::tr("CGNS_EXPORT_ELEMS_BY_TYPE"); + + SalomeApp_CheckFileDlg* fd = + new SalomeApp_CheckFileDlg ( SMESHGUI::desktop(), false, checkBoxes, true, true ); fd->setWindowTitle( aTitle ); fd->setNameFilter( QObject::tr( "CGNS_FILES_FILTER" ) + " (*.cgns)" ); if ( !anInitialPath.isEmpty() ) @@ -643,10 +705,13 @@ namespace fd->selectFile(aMeshName); SMESHGUI_FileValidator* fv = new SMESHGUI_FileValidator( fd ); fd->setValidator( fv ); + fd->SetChecked( toCreateGroups, 0 ); if ( fd->exec() ) aFilename = fd->selectedFile(); - toOverwrite = fv->isOverwrite(); + toOverwrite = fv->isOverwrite(aFilename); + toCreateGroups = fd->IsChecked(0); + SMESHGUI::resourceMgr()->setValue("SMESH", theByTypeResource, toCreateGroups ); delete fd; } @@ -679,25 +744,38 @@ namespace } else if ( isMED || isSAUV ) // Export to MED or SAUV { - QMap aFilterMap; - //QString v21 (aMesh->GetVersionString(SMESH::MED_V2_1, 2)); + QMap aFilterMap; if ( isMED ) { - QString v22 (aMesh->GetVersionString(SMESH::MED_V2_2, 2)); - //aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( v21 ) + " (*.med)", SMESH::MED_V2_1 ); - aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( v22 ) + " (*.med)", SMESH::MED_V2_2 ); + //filters << QObject::tr( "MED_FILES_FILTER" ) + " (*.med)"; + QString vmed (aMesh->GetVersionString(-1, 2)); + //MESSAGE("MED version: " << vmed.toStdString()); + int minor = vmed.split(".").last().toInt(); + //MESSAGE("MED version minor: "<< minor); + //minor +=3; // TODO remove: test multiple minor + aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( vmed ) + " (*.med)", minor ); + for (int ii=0; iiGetVersionString(ii, 2); + //std::ostringstream vss; // TODO remove: test multiple minor + //vss << "4."; // TODO remove: test multiple minor + //vss << ii; // TODO remove: test multiple minor + //vs = vss.str().c_str(); // TODO remove: test multiple minor + //MESSAGE("MED version: " << vs.toStdString()); + aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( vs ) + " (*.med)", ii); + } } else { // isSAUV - aFilterMap.insert("All files (*)", SMESH::MED_V2_1 ); - aFilterMap.insert("SAUV files (*.sauv)", SMESH::MED_V2_2 ); - aFilterMap.insert("SAUV files (*.sauve)", SMESH::MED_V2_1 ); + aFilterMap.insert("All files (*)", -1 ); + aFilterMap.insert("SAUV files (*.sauv)", -1 ); + aFilterMap.insert("SAUV files (*.sauve)", -1 ); } QStringList filters; QString aDefaultFilter; - QMap::const_iterator it = aFilterMap.begin(); + QMap::const_iterator it = aFilterMap.begin(); for ( ; it != aFilterMap.end(); ++it ) { filters.push_back( it.key() ); - if (it.value() == SMESH::MED_V2_2) + if (it.key() == 0) aDefaultFilter = it.key(); } QStringList checkBoxes; @@ -705,14 +783,13 @@ namespace SMESHGUI_FieldSelectorWdg* fieldSelWdg = new SMESHGUI_FieldSelectorWdg(); QList< QWidget* > wdgList; - if ( fieldSelWdg->GetAllFeilds( aMeshList, aFieldList )) + if ( fieldSelWdg->GetAllFields( aMeshList, aFieldList )) wdgList.append( fieldSelWdg ); SalomeApp_CheckFileDlg* fd = new SalomeApp_CheckFileDlg ( SMESHGUI::desktop(), false, checkBoxes, true, true, wdgList ); fd->setWindowTitle( aTitle ); fd->setNameFilters( filters ); - fd->selectNameFilter( aDefaultFilter ); fd->SetChecked( toCreateGroups, 0 ); fd->SetChecked( toFindOutDim, 1 ); if ( !anInitialPath.isEmpty() ) @@ -734,6 +811,8 @@ namespace bool is_ok = false; while (!is_ok) { + MESSAGE("******* Loop on file dialog ***********"); + isOkToWrite =true; if ( fd->exec() ) aFilename = fd->selectedFile(); else { @@ -741,44 +820,33 @@ namespace break; } aFormat = aFilterMap[fd->selectedNameFilter()]; - toOverwrite = fv->isOverwrite(); + MESSAGE("selected minor: " << aFormat << " file: " << aFilename.toUtf8().constData()); + toOverwrite = fv->isOverwrite(aFilename); + MESSAGE("toOverwrite:" << toOverwrite); is_ok = true; if ( !aFilename.isEmpty() ) { - // med-2.1 does not support poly elements - if ( aFormat==SMESH::MED_V2_1 ) - for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ ) { - SMESH::SMESH_IDSource_var aMeshItem = (*aMeshIter).first; - SMESH::long_array_var nbElems = aMeshItem->GetMeshInfo(); - if ( nbElems[ SMESH::Entity_Polygon ] + nbElems[ SMESH::Entity_Quad_Polygon ] + - nbElems[ SMESH::Entity_Polyhedra ] + nbElems[ SMESH::Entity_Quad_Polyhedra ]) - { - int aRet = SUIT_MessageBox::warning(SMESHGUI::desktop(), - QObject::tr("SMESH_WRN_WARNING"), - QObject::tr("SMESH_EXPORT_MED_V2_1").arg((*aMeshIter).second), - QObject::tr("SMESH_BUT_YES"), - QObject::tr("SMESH_BUT_NO"), 0, 1); - if (aRet != 0) { - is_ok = false; - break; - } - } - } 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.toUtf8().constData(), aVersion ); - if( !isVersionOk || aVersion != aFormat ) { + bool isVersionOk = SMESHGUI::GetSMESHGen()->CheckWriteCompatibility( aFilename.toUtf8().constData() ); + MESSAGE("Append check, isVersionOk:" << isVersionOk); + if ( !isVersionOk ) { int aRet = SUIT_MessageBox::warning(SMESHGUI::desktop(), QObject::tr("SMESH_WRN_WARNING"), QObject::tr("SMESH_EXPORT_MED_VERSION_COLLISION").arg(aFilename), QObject::tr("SMESH_BUT_YES"), QObject::tr("SMESH_BUT_NO"), 0, 1); if (aRet == 0) - toOverwrite = true; + { + toOverwrite = true; + MESSAGE("incompatible MED file version for add, overwrite accepted"); + } else - is_ok = false; + { + isOkToWrite = false; + is_ok = false; + MESSAGE("incompatible MED file version for add, overwrite refused"); + } } - QStringList aMeshNamesCollisionList; SMESH::string_array_var aMeshNames = SMESHGUI::GetSMESHGen()->GetMeshNames( aFilename.toUtf8().constData() ); for( int i = 0, n = aMeshNames->length(); i < n; i++ ) { @@ -791,7 +859,8 @@ namespace } } } - if( !aMeshNamesCollisionList.isEmpty() ) { + if( !aMeshNamesCollisionList.isEmpty() ) { + isOkToWrite = false; QString aMeshNamesCollisionString = aMeshNamesCollisionList.join( ", " ); int aRet = SUIT_MessageBox::warning(SMESHGUI::desktop(), QObject::tr("SMESH_WRN_WARNING"), @@ -799,17 +868,21 @@ namespace QObject::tr("SMESH_BUT_YES"), QObject::tr("SMESH_BUT_NO"), QObject::tr("SMESH_BUT_CANCEL"), 0, 2); - if (aRet == 0) + MESSAGE("answer collision name " << aRet); + if (aRet == 0) { toOverwrite = true; + isOkToWrite = true; + } else if (aRet == 2) is_ok = false; } } } } + MESSAGE(" ****** end of file dialog loop, toOverwrite:" << toOverwrite << " isOkToWrite:" << isOkToWrite); toCreateGroups = fd->IsChecked(0); toFindOutDim = fd->IsChecked(1); - fieldSelWdg->GetSelectedFeilds(); + fieldSelWdg->GetSelectedFields(); if ( !fieldSelWdg->parent() ) delete fieldSelWdg; delete fd; @@ -841,8 +914,9 @@ namespace // if ( SMESHGUI::automaticUpdate() ) // SMESH::UpdateView(); // } - if ( isMED ) + if ( isMED && isOkToWrite) { + MESSAGE("OK to write MED file "<< aFilename.toUtf8().constData()); aMeshIter = aMeshList.begin(); for( int aMeshIndex = 0; aMeshIter != aMeshList.end(); aMeshIter++, aMeshIndex++ ) { @@ -852,11 +926,11 @@ namespace 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 ); + aMeshItem->ExportMED( aFilename.toUtf8().data(), toCreateGroups, aFormat, + toOverwrite && aMeshIndex == 0, toFindOutDim ); else - aMeshItem->ExportPartToMED( aMeshOrGroup, aFilename.toUtf8().data(), toCreateGroups, - aFormat, toOverwrite && aMeshIndex == 0, toFindOutDim, + aMeshItem->ExportPartToMED( aMeshOrGroup, aFilename.toUtf8().data(), toCreateGroups, aFormat, + toOverwrite && aMeshIndex == 0, toFindOutDim, fields, geoAssFields.toLatin1().data() ); } } @@ -899,7 +973,8 @@ namespace SMESH::SMESH_Mesh_var aMeshItem = aMeshOrGroup->GetMesh(); aMeshItem->ExportCGNS( aMeshOrGroup, aFilename.toUtf8().data(), - toOverwrite && aMeshIndex == 0 ); + toOverwrite && aMeshIndex == 0, + toCreateGroups ); } } else if ( isGMF ) @@ -919,7 +994,7 @@ namespace } inline void InverseEntityMode(unsigned int& theOutputMode, - unsigned int theMode) + unsigned int theMode) { bool anIsNotPresent = ~theOutputMode & theMode; if(anIsNotPresent) @@ -928,13 +1003,15 @@ namespace 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 ) { + SUIT_OverrideCursor wc; SALOME_ListIteratorOfListIO It( selected ); for( ; It.More(); It.Next()){ Handle(SALOME_InteractiveObject) IObject = It.Value(); @@ -942,24 +1019,12 @@ namespace if(SMESH_Actor *anActor = SMESH::FindActorByEntry(IObject->getEntry())){ unsigned int aMode = anActor->GetEntityMode(); switch(theCommandID){ - 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; + 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); @@ -971,26 +1036,27 @@ namespace void AutoColor() { - 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 = 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; @@ -1000,10 +1066,9 @@ namespace 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(); @@ -1014,10 +1079,10 @@ namespace 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; @@ -1042,7 +1107,8 @@ namespace SMESH::RepaintCurrentView(); } - void OverallMeshQuality() { + void OverallMeshQuality() + { SMESHGUI::GetSMESHGUI()->EmitSignalDeactivateDialog(); LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; @@ -1085,6 +1151,8 @@ namespace type = QObject::tr( "LENGTH_EDGES" ); else if ( dynamic_cast< SMESH::Controls::Length2D* >( f.get() ) ) type = QObject::tr( "LENGTH2D_EDGES" ); + else if ( dynamic_cast< SMESH::Controls::Deflection2D* >( f.get() ) ) + type = QObject::tr( "DEFLECTION2D_FACES" ); else if ( dynamic_cast< SMESH::Controls::MultiConnection* >( f.get() ) ) type = QObject::tr( "MULTI_BORDERS" ); else if ( dynamic_cast< SMESH::Controls::MultiConnection2D* >( f.get() ) ) @@ -1113,6 +1181,8 @@ namespace type = QObject::tr( "EQUAL_FACE" ); else if ( dynamic_cast< SMESH::Controls::CoincidentElements3D* >( f.get() ) ) type = QObject::tr( "EQUAL_VOLUME" ); + else if ( dynamic_cast< SMESH::Controls::NodeConnectivityNumber* >( f.get() ) ) + type = QObject::tr( "NODE_CONNECTIVITY_NB" ); return type; } @@ -1127,11 +1197,15 @@ namespace 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); @@ -1153,7 +1227,8 @@ namespace 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(); @@ -1161,7 +1236,7 @@ namespace 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, @@ -1188,17 +1263,21 @@ namespace } } - void ShowElement(int theCommandID ) { + 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(); if ( theCommandID == SMESHOp::OpShowDistribution ) { aScalarBarActor->SetDistributionVisibility(!aScalarBarActor->GetDistributionVisibility()); @@ -1212,58 +1291,62 @@ namespace } #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() ) { @@ -1272,15 +1355,16 @@ namespace } } - void sortChildren(){ + void sortChildren() + { 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(); - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); + _PTR(Study) aStudy = SMESH::getStudy(); _PTR(SObject) aSObj = aStudy->FindObjectID(anIObject->getEntry()); if (aSObj) { if ( aStudy->GetUseCaseBuilder()->SortChildren( aSObj, true/*AscendingOrder*/ ) ) { @@ -1291,20 +1375,21 @@ namespace } } - void SetDisplayMode(int theCommandID, SMESHGUI_StudyId2MarkerMap& theMarkerMap) + void SetDisplayMode(int theCommandID, VTK::MarkerMap& 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 == SMESHOp::OpClipping ) { // 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(); @@ -1312,18 +1397,19 @@ namespace return; } - _PTR(Study) aStudy = appStudy->studyDS(); - aSel->selectedObjects( selected ); - if(selected.Extent() >= 1){ - switch(theCommandID){ - case SMESHOp::OpTransparency:{ + if ( selected.Extent() >= 1 ) + { + switch ( theCommandID ) { + case SMESHOp::OpTransparency: + { SMESHGUI::GetSMESHGUI()->EmitSignalDeactivateDialog(); (new SMESHGUI_TransparencyDlg( SMESHGUI::GetSMESHGUI() ))->show(); return; } - case SMESHOp::OpProperties: { + case SMESHOp::OpProperties: + { double color[3]; QColor faceColor, edgeColor, nodeColor, elem0dColor, ballColor; QColor orientationColor, outlineColor, volumeColor; @@ -1409,7 +1495,7 @@ namespace break; } - SMESHGUI_PropertiesDlg dlg( theMarkerMap[ aStudy->StudyId() ], SMESHGUI::desktop() ); + SMESHGUI_PropertiesDlg dlg( theMarkerMap, SMESHGUI::desktop() ); // nodes: color, marker dlg.setNodeColor( nodeColor ); if( markerType != VTK::MT_USER ) @@ -1465,8 +1551,8 @@ namespace orientation3d = dlg.orientation3d(); shrinkCoef = dlg.shrinkCoef() / 100.; - // store point markers map that might be changed by the user - theMarkerMap[ aStudy->StudyId() ] = dlg.customMarkers(); + // store point markers that might be changed by the user + theMarkerMap = dlg.customMarkers(); // set properties from dialog box to the presentations SALOME_ListIteratorOfListIO It( selected ); @@ -1482,9 +1568,8 @@ namespace anActor->SetMarkerStd( markerType, markerScale ); } else { - const VTK::MarkerMap& markerMap = theMarkerMap[ aStudy->StudyId() ]; - VTK::MarkerMap::const_iterator iter = markerMap.find( markerId ); - if ( iter != markerMap.end() ) + VTK::MarkerMap::const_iterator iter = theMarkerMap.find( markerId ); + if ( iter != theMarkerMap.end() ) anActor->SetMarkerTexture( markerId, iter->second.second ); } // volumes: normal color, reversed color (delta) @@ -1546,6 +1631,7 @@ namespace return; } // case SMESHOp::OpProperties: } // switch(theCommandID) + SUIT_OverrideCursor wc; SALOME_ListIteratorOfListIO It( selected ); for( ; It.More(); It.Next()){ Handle(SALOME_InteractiveObject) IObject = It.Value(); @@ -1589,6 +1675,7 @@ namespace ActionControl.Bind( 0, SMESH_Actor::eNone ); ActionControl.Bind( SMESHOp::OpFreeNode, SMESH_Actor::eFreeNodes ); ActionControl.Bind( SMESHOp::OpEqualNode, SMESH_Actor::eCoincidentNodes ); + ActionControl.Bind( SMESHOp::OpNodeConnectivityNb, SMESH_Actor::eNodeConnectivityNb ); ActionControl.Bind( SMESHOp::OpFreeEdge, SMESH_Actor::eFreeEdges ); ActionControl.Bind( SMESHOp::OpFreeBorder, SMESH_Actor::eFreeBorders ); ActionControl.Bind( SMESHOp::OpLength, SMESH_Actor::eLength ); @@ -1598,6 +1685,7 @@ namespace ActionControl.Bind( SMESHOp::OpBareBorderFace, SMESH_Actor::eBareBorderFace ); ActionControl.Bind( SMESHOp::OpOverConstrainedFace, SMESH_Actor::eOverConstrainedFace ); ActionControl.Bind( SMESHOp::OpLength2D, SMESH_Actor::eLength2D ); + ActionControl.Bind( SMESHOp::OpDeflection2D, SMESH_Actor::eDeflection2D ); ActionControl.Bind( SMESHOp::OpConnection2D, SMESH_Actor::eMultiConnection2D ); ActionControl.Bind( SMESHOp::OpArea, SMESH_Actor::eArea ); ActionControl.Bind( SMESHOp::OpTaper, SMESH_Actor::eTaper ); @@ -1614,44 +1702,57 @@ namespace ActionControl.Bind( SMESHOp::OpOverConstrainedVolume, SMESH_Actor::eOverConstrainedVolume ); ActionControl.Bind( SMESHOp::OpEqualVolume, SMESH_Actor::eCoincidentElems3D ); - return theReversed ? ActionControl.Find2( theID ) : ActionControl.Find1( theID ); + if ( theReversed ) + return ActionControl.IsBound2( theID ) ? ActionControl.Find2( theID ) : 0; + return ActionControl.IsBound1( theID ) ? ActionControl.Find1( theID ) : 0; } void Control( int theCommandID ) { - SMESH_Actor::eControl aControl = SMESH_Actor::eControl( ActionToControl( theCommandID ) ); - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); - LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + SMESH_Actor::eControl aControl = SMESH_Actor::eControl( ActionToControl( theCommandID )); + _PTR(Study) aStudy = SMESH::getStudy(); + SALOME_ListIO selected; - if( aSel ) + if ( LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr() ) aSel->selectedObjects( selected ); - if( !selected.IsEmpty() ){ + if ( !selected.IsEmpty() ) { SALOME_ListIteratorOfListIO It(selected); for ( ; It.More(); It.Next()) { Handle(SALOME_InteractiveObject) anIO = It.Value(); - if(!anIO.IsNull()){ + if ( !anIO.IsNull() ) { _PTR(SObject) SO = aStudy->FindObjectID( It.Value()->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() ) { - if(SMESH_Actor *anActor = SMESH::FindActorByEntry(anIO->getEntry())) { - anActor->SetControlMode(aControl); - anActor->GetScalarBarActor()->SetTitle( functorToString( anActor->GetFunctor() ).toLatin1().constData() ); + 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( 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()) { + 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); + aHistogramName = aHistogramName.arg( anIO->getName() ).arg( functorName ); + aHistogram->setName( aHistogramName ); + aHistogram->setHorTitle( functorName ); + SMESH::ProcessIn2DViewers( anActor ); } #endif } @@ -1664,13 +1765,13 @@ namespace 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 ); @@ -1685,12 +1786,12 @@ namespace QString CheckTypeObject(const Handle(SALOME_InteractiveObject) & theIO) { - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); + _PTR(Study) aStudy = SMESH::getStudy(); _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"; } @@ -1708,26 +1809,25 @@ namespace } - 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 ) { @@ -1750,7 +1850,7 @@ void SMESHGUI::OnEditDelete() LightApp_SelectionMgr* aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; aSel->selectedObjects( selected, QString::null, false ); - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); + _PTR(Study) aStudy = SMESH::getStudy(); _PTR(StudyBuilder) aStudyBuilder = aStudy->NewBuilder(); _PTR(GenericAttribute) anAttr; _PTR(AttributeIOR) anIOR; @@ -1758,20 +1858,24 @@ void SMESHGUI::OnEditDelete() 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()); + Handle(SALOME_InteractiveObject) anIO = anIt.Value(); + if ( anIO.IsNull() ) continue; + + QString father = "unknown"; + + _PTR(SObject) aSO = aStudy->FindObjectID( anIO->getEntry() ); if (aSO) { + father = QString::fromStdString( aSO->GetFatherComponent()->ComponentDataType() ); // 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() ); + father = QString::fromStdString ( aRefSObj->GetFatherComponent()->ComponentDataType() ); } else aNameList.append(anIO->getName()); @@ -1779,8 +1883,8 @@ void SMESHGUI::OnEditDelete() } if( aParentComponent.isNull() ) - aParentComponent = cur; - else if( !aParentComponent.isEmpty() && aParentComponent!=cur ) + aParentComponent = father; + else if( !aParentComponent.isEmpty() && aParentComponent!=father ) aParentComponent = ""; } @@ -1885,10 +1989,6 @@ void SMESHGUI::OnEditDelete() 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); } else { Handle(SALOME_InteractiveObject) IObject = new SALOME_InteractiveObject @@ -1942,7 +2042,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); @@ -2041,7 +2141,7 @@ bool SMESHGUI::automaticUpdate( SMESH::SMESH_IDSource_ptr theMesh, 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_Penta] + info[SMDSEntity_Quad_Penta] + info[SMDSEntity_BiQuad_Penta] + info[SMDSEntity_Polyhedra] + info[SMDSEntity_Hexagonal_Prism]; long nbBalls = info[SMDSEntity_Ball]; @@ -2138,17 +2238,6 @@ SMESHGUI* SMESHGUI::GetSMESHGUI() smeshMod = dynamic_cast( module ); } - if ( smeshMod && smeshMod->application() && smeshMod->application()->activeStudy() ) - { - SalomeApp_Study* study = dynamic_cast( smeshMod->application()->activeStudy() ); - if ( study ) - { - _PTR(Study) aStudy = study->studyDS(); - if ( aStudy ) - GetSMESHGen()->SetCurrentStudy( _CAST(Study,aStudy)->GetStudy() ); - } - } - return smeshMod; } @@ -2321,36 +2410,27 @@ bool SMESHGUI::DefineDlgPosition(QWidget * aDlg, int &x, int &y) return true; } -//============================================================================= /*! - * - */ -//============================================================================= -static int isStudyLocked(_PTR(Study) theStudy){ - return theStudy->GetProperties()->IsLocked(); -} - -static bool checkLock(_PTR(Study) theStudy) { - if (isStudyLocked(theStudy)) { - SUIT_MessageBox::warning( SMESHGUI::desktop(), - QObject::tr("WRN_WARNING"), - QObject::tr("WRN_STUDY_LOCKED") ); + * \brief Verifies whether study of operation is locked + * \param theMess - specifies whether message box must be shown if study is locked + * \return State of study. +* +* Verifies whether study of operation is locked. If second parameter is TRUE and study +* is locked when corresponding message box appears +*/ +bool SMESHGUI::isStudyLocked( bool theMessage ) +{ + if ( SMESH::getStudy()->GetProperties()->IsLocked() ) + { + if ( theMessage ) + SUIT_MessageBox::warning( SMESHGUI::desktop(), + QObject::tr( "WRN_WARNING" ), + QObject::tr( "WRN_STUDY_LOCKED" ) ); return true; } return false; } -//======================================================================= -//function : CheckActiveStudyLocked -//purpose : -//======================================================================= - -bool SMESHGUI::isActiveStudyLocked() -{ - _PTR(Study) aStudy = activeStudy()->studyDS(); - return checkLock( aStudy ); -} - //============================================================================= /*! * @@ -2362,15 +2442,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if( !anApp ) return false; - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); //Document OCAF de l'etude active SUIT_ResourceMgr* mgr = resourceMgr(); if( !mgr ) return false; - if (CORBA::is_nil(GetSMESHGen()->GetCurrentStudy())) { - GetSMESHGen()->SetCurrentStudy(_CAST(Study,aStudy)->GetStudy()); - } - SUIT_ViewWindow* view = application()->desktop()->activeWindow(); SVTK_ViewWindow* vtkwnd = dynamic_cast( view ); @@ -2378,20 +2453,25 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) switch (theCommandID) { case SMESHOp::OpDelete: - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; OnEditDelete(); break; 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: + case SMESHOp::OpPopupImportDAT: + case SMESHOp::OpPopupImportUNV: + case SMESHOp::OpPopupImportMED: + case SMESHOp::OpPopupImportSTL: + case SMESHOp::OpPopupImportCGNS: + case SMESHOp::OpPopupImportSAUV: + case SMESHOp::OpPopupImportGMF: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; ::ImportMeshesFromFile(GetSMESHGen(),theCommandID); break; } @@ -2418,18 +2498,14 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) 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: { @@ -2539,6 +2615,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpOrientationOnFaces: { + SUIT_OverrideCursor wc; LightApp_SelectionMgr* mgr = selectionMgr(); SALOME_ListIO selected; mgr->selectedObjects( selected ); @@ -2556,12 +2633,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpUpdate: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; SUIT_OverrideCursor wc; try { -#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 OCC_CATCH_SIGNALS; -#endif SMESH::UpdateView(); } catch (std::bad_alloc) { // PAL16774 (Crash after display of many groups) @@ -2582,6 +2657,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpShow: case SMESHOp::OpShowOnly: { + SUIT_OverrideCursor wc; SMESH::EDisplaing anAction; switch (theCommandID) { case SMESHOp::OpHide: anAction = SMESH::eErase; break; @@ -2596,16 +2672,14 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if ( theCommandID==SMESHOp::OpShowOnly ) { - MESSAGE("anAction = SMESH::eDisplayOnly"); + //MESSAGE("anAction = SMESH::eDisplayOnly"); startOperation( myEraseAll ); } extractContainers( sel_objects, to_process ); try { -#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 OCC_CATCH_SIGNALS; -#endif if (vtkwnd) { SALOME_ListIteratorOfListIO It( to_process ); for ( ; It.More(); It.Next()) @@ -2624,8 +2698,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } // PAL13338 + PAL15161 --> - if ( ( theCommandID==SMESHOp::OpShow || theCommandID==SMESHOp::OpShowOnly ) && !checkLock(aStudy)) { - MESSAGE("anAction = SMESH::eDisplayOnly"); + if ( ( theCommandID==SMESHOp::OpShow || theCommandID==SMESHOp::OpShowOnly ) && !isStudyLocked()) { SMESH::UpdateView(); SMESHGUI::GetSMESHGUI()->EmitSignalVisibilityChanged(); } @@ -2636,7 +2709,6 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } if (anAction == SMESH::eErase) { - MESSAGE("anAction == SMESH::eErase"); SALOME_ListIO l1; aSel->setSelectedObjects( l1 ); } @@ -2648,7 +2720,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpNode: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if ( vtkwnd ) { EmitSignalDeactivateDialog(); @@ -2656,9 +2728,7 @@ 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; } @@ -2666,7 +2736,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) 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: @@ -2674,14 +2747,14 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; case SMESHOp::OpCopyMesh: { - if (checkLock(aStudy)) break; + if (isStudyLocked()) break; EmitSignalDeactivateDialog(); ( new SMESHGUI_CopyMeshDlg( this ) )->show(); } break; case SMESHOp::OpBuildCompoundMesh: { - if (checkLock(aStudy)) break; + if (isStudyLocked()) break; EmitSignalDeactivateDialog(); ( new SMESHGUI_BuildCompoundDlg( this ) )->show(); } @@ -2692,12 +2765,11 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { 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; } - if ( checkLock( aStudy ) ) + if ( isStudyLocked() ) break; /*Standard_Boolean aRes; @@ -2723,12 +2795,11 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { 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; } - if ( checkLock( aStudy ) ) + if ( isStudyLocked() ) break; EmitSignalDeactivateDialog(); @@ -2747,57 +2818,53 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpSmoothing: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if( vtkwnd ) { EmitSignalDeactivateDialog(); ( 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 SMESHOp::OpExtrusion: { - if (checkLock(aStudy)) break; + if (isStudyLocked()) 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 (isStudyLocked()) break; if (vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_ExtrusionAlongPathDlg( 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::OpRevolution: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if( vtkwnd ) { EmitSignalDeactivateDialog(); ( 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 SMESHOp::OpPatternMapping: { - if ( checkLock( aStudy ) ) + if ( isStudyLocked() ) break; if ( vtkwnd ) { @@ -2805,8 +2872,7 @@ 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; } @@ -2823,12 +2889,11 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { 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; } - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; EmitSignalDeactivateDialog(); SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_nil(); @@ -2851,12 +2916,11 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { 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; } - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; EmitSignalDeactivateDialog(); LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); @@ -2869,7 +2933,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) // check if submesh is selected Handle(SALOME_InteractiveObject) IObject = selected.First(); if (IObject->hasEntry()) { - _PTR(SObject) aSObj = aStudy->FindObjectID(IObject->getEntry()); + _PTR(SObject) aSObj = SMESH::getStudy()->FindObjectID(IObject->getEntry()); if( aSObj ) { SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow( SMESH::SObjectToObject( aSObj ) ); if (!aSubMesh->_is_nil()) { @@ -2929,12 +2993,11 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { 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; } - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; EmitSignalDeactivateDialog(); LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); @@ -2964,7 +3027,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpAddElemGroupPopup: // Add elements to group { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if (myState == 800) { SMESHGUI_GroupDlg *aDlg = (SMESHGUI_GroupDlg*) myActiveDialogBox; if (aDlg) aDlg->onAdd(); @@ -2974,7 +3037,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpRemoveElemGroupPopup: // Remove elements from group { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if (myState == 800) { SMESHGUI_GroupDlg *aDlg = (SMESHGUI_GroupDlg*) myActiveDialogBox; if (aDlg) aDlg->onRemove(); @@ -2986,12 +3049,11 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { 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; } - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; EmitSignalDeactivateDialog(); LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); @@ -3027,12 +3089,11 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { 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; } - if ( checkLock( aStudy ) ) + if ( isStudyLocked() ) break; EmitSignalDeactivateDialog(); @@ -3052,7 +3113,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpGroupUnderlyingElem: // Create groups of entities from existing groups of superior dimensions { - if ( checkLock( aStudy ) ) + if ( isStudyLocked() ) break; EmitSignalDeactivateDialog(); @@ -3066,12 +3127,11 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { 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; } - if ( checkLock( aStudy ) ) + if ( isStudyLocked() ) break; EmitSignalDeactivateDialog(); @@ -3113,7 +3173,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpEditHypothesis: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; @@ -3158,7 +3218,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpUnassign: // REMOVE HYPOTHESIS / ALGORITHMS { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; SUIT_OverrideCursor wc; LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); @@ -3189,7 +3249,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpPyramid: case SMESHOp::OpHexagonalPrism: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if ( vtkwnd ) { EmitSignalDeactivateDialog(); SMDSAbs_EntityType type = SMDSEntity_Edge; @@ -3209,21 +3269,19 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) ( 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 SMESHOp::OpPolyhedron: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( 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; } @@ -3236,10 +3294,11 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpQuadraticTetrahedron: case SMESHOp::OpQuadraticPyramid: case SMESHOp::OpQuadraticPentahedron: + case SMESHOp::OpBiQuadraticPentahedron: case SMESHOp::OpQuadraticHexahedron: case SMESHOp::OpTriQuadraticHexahedron: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if ( vtkwnd ) { EmitSignalDeactivateDialog(); SMDSAbs_EntityType type = SMDSEntity_Last; @@ -3254,6 +3313,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) 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::OpBiQuadraticPentahedron: type = SMDSEntity_BiQuad_Penta; break; case SMESHOp::OpQuadraticHexahedron: type = SMDSEntity_Quad_Hexa; break; case SMESHOp::OpTriQuadraticHexahedron: type = SMDSEntity_TriQuad_Hexa; break; default: break; @@ -3269,7 +3329,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpRemoveNodes: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RemoveNodesDlg( this ) )->show(); @@ -3282,7 +3342,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpRemoveElements: // REMOVES ELEMENTS { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RemoveElementsDlg( this ) )->show(); @@ -3296,7 +3356,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpClearMesh: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; SALOME_ListIO selected; if( LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr() ) @@ -3307,17 +3367,16 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) for ( ; It.More(); It.Next() ) { Handle(SALOME_InteractiveObject) IOS = It.Value(); - SMESH::SMESH_Mesh_var aMesh = - SMESH::IObjectToInterface(IOS); + SMESH::SMESH_Mesh_var aMesh = SMESH::IObjectToInterface(IOS); if ( aMesh->_is_nil()) continue; try { - SMESH::RemoveVisualObjectWithActors(IOS->getEntry(), true); aMesh->Clear(); + if ( aMesh->NbNodes() == 0 ) // imported mesh is not empty + SMESH::RemoveVisualObjectWithActors(IOS->getEntry(), true); _PTR(SObject) aMeshSObj = SMESH::FindSObject(aMesh); - SMESH::ModifiedMesh( aMeshSObj, false, true); // hide groups and submeshes _PTR(ChildIterator) anIter = - SMESH::GetActiveStudyDocument()->NewChildIterator( aMeshSObj ); + SMESH::getStudy()->NewChildIterator( aMeshSObj ); for ( anIter->InitEx(true); anIter->More(); anIter->Next() ) { _PTR(SObject) so = anIter->Value(); @@ -3336,7 +3395,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpRemoveOrphanNodes: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; SALOME_ListIO selected; if( LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr() ) aSel->selectedObjects( selected ); @@ -3375,7 +3434,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpRenumberingNodes: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RenumberingDlg( this, 0 ) )->show(); @@ -3389,7 +3448,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpRenumberingElements: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RenumberingDlg( this, 1 ) )->show(); @@ -3403,7 +3462,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpTranslation: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_TranslationDlg( this ) )->show(); @@ -3416,7 +3475,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpRotation: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RotationDlg( this ) )->show(); @@ -3429,7 +3488,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpSymmetry: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if(vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_SymmetryDlg( this ) )->show(); @@ -3442,7 +3501,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpScale: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_ScaleDlg( this ) )->show(); @@ -3454,9 +3513,23 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } + case SMESHOp::OpOffset: + { + if(isStudyLocked()) break; + if ( vtkwnd ) { + EmitSignalDeactivateDialog(); + ( new SMESHGUI_OffsetDlg( 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(isStudyLocked()) break; if(vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_SewingDlg( this ) )->show(); @@ -3469,7 +3542,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpMergeNodes: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if(vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_MergeDlg( this, 0 ) )->show(); @@ -3482,7 +3555,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpMergeElements: { - if (checkLock(aStudy)) break; + if (isStudyLocked()) break; if (vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_MergeDlg( this, 1 ) )->show(); @@ -3499,7 +3572,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpDuplicateNodes: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_DuplicateNodesDlg( this ) )->show(); @@ -3535,6 +3608,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) // CONTROLS case SMESHOp::OpFreeNode: case SMESHOp::OpEqualNode: + case SMESHOp::OpNodeConnectivityNb: case SMESHOp::OpFreeEdge: case SMESHOp::OpFreeBorder: case SMESHOp::OpLength: @@ -3544,6 +3618,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpBareBorderFace: case SMESHOp::OpOverConstrainedFace: case SMESHOp::OpLength2D: + case SMESHOp::OpDeflection2D: case SMESHOp::OpConnection2D: case SMESHOp::OpArea: case SMESHOp::OpTaper: @@ -3732,7 +3807,7 @@ void SMESHGUI::createPopupItem( const int id, popupMgr()->insert( action( id ), pId, 0 ); QString lc = "$"; // VSR : instead of QtxPopupSelection::defEquality(); - QString dc = "selcount"; // VSR : insetad of QtxPopupSelection::defSelCountParam() + QString dc = "selcount"; // VSR : instead of QtxPopupSelection::defSelCountParam() QString rule = "(%1) and (%2) and (%3)"; rule = rule.arg( QString( "%1>0" ).arg( dc ) ); if( clients.isEmpty() ) @@ -3768,13 +3843,21 @@ void SMESHGUI::initialize( CAM_Application* app ) //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::OpPopupImportUNV, "IMPORT_UNV"); + createSMESHAction( SMESHOp::OpPopupImportMED, "IMPORT_MED"); + createSMESHAction( SMESHOp::OpPopupImportSTL, "IMPORT_STL" ); +#ifdef WITH_CGNS + createSMESHAction( SMESHOp::OpPopupImportCGNS, "IMPORT_CGNS" ); +#endif + createSMESHAction( SMESHOp::OpPopupImportSAUV, "IMPORT_SAUV" ); + createSMESHAction( SMESHOp::OpPopupImportGMF, "IMPORT_GMF" ); + createSMESHAction( SMESHOp::OpExportDAT, "DAT" ); createSMESHAction( SMESHOp::OpExportMED, "MED" ); createSMESHAction( SMESHOp::OpExportUNV, "UNV" ); @@ -3799,9 +3882,12 @@ void SMESHGUI::initialize( CAM_Application* app ) 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"); @@ -3814,8 +3900,8 @@ void SMESHGUI::initialize( CAM_Application* app ) 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::OpAddElemGroupPopup, "ADD_TO_GROUP" ); + createSMESHAction( SMESHOp::OpRemoveElemGroupPopup, "REMOVE_FROM_GROUP" ); createSMESHAction( SMESHOp::OpDeleteGroup, "DEL_GROUP", "ICON_DEL_GROUP" ); createSMESHAction( SMESHOp::OpMeshInformation , "ADV_INFO", "ICON_ADV_INFO" ); //createSMESHAction( SMESHOp::OpStdInfo, "STD_INFO", "ICON_STD_INFO" ); @@ -3824,6 +3910,7 @@ void SMESHGUI::initialize( CAM_Application* app ) //update createSMESHAction( SMESHOp::OpFreeNode, "FREE_NODE", "ICON_FREE_NODE", 0, true ); createSMESHAction( SMESHOp::OpEqualNode, "EQUAL_NODE", "ICON_EQUAL_NODE", 0, true ); + createSMESHAction( SMESHOp::OpNodeConnectivityNb, "NODE_CONNECTIVITY_NB", "ICON_NODE_CONN_NB", 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 ); @@ -3833,6 +3920,7 @@ void SMESHGUI::initialize( CAM_Application* app ) 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::OpDeflection2D, "DEFLECTION_2D", "ICON_DEFLECTION_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 ); @@ -3848,7 +3936,7 @@ void SMESHGUI::initialize( CAM_Application* app ) 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::OpOverallMeshQuality, "OVERALL_MESH_QUALITY", "ICON_OVL_MESH_QUALITY" ); createSMESHAction( SMESHOp::OpNode, "NODE", "ICON_DLG_NODE" ); createSMESHAction( SMESHOp::OpElem0D, "ELEM0D", "ICON_DLG_ELEM0D" ); @@ -3873,6 +3961,7 @@ void SMESHGUI::initialize( CAM_Application* app ) 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::OpBiQuadraticPentahedron, "BIQUADRATIC_PENTAHEDRON", "ICON_DLG_BIQUADRATIC_PENTAHEDRON" ); createSMESHAction( SMESHOp::OpQuadraticHexahedron, "QUADRATIC_HEXAHEDRON", "ICON_DLG_QUADRATIC_HEXAHEDRON" ); createSMESHAction( SMESHOp::OpTriQuadraticHexahedron, "TRIQUADRATIC_HEXAHEDRON", "ICON_DLG_TRIQUADRATIC_HEXAHEDRON" ); @@ -3888,6 +3977,7 @@ void SMESHGUI::initialize( CAM_Application* app ) 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::OpOffset, "OFFSET", "ICON_DLG_MESH_OFFSET" ); 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" ); @@ -3950,16 +4040,18 @@ void SMESHGUI::initialize( CAM_Application* app ) 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::OpHide, "HIDE", "ICON_HIDE" ); + createSMESHAction( SMESHOp::OpShow, "SHOW", "ICON_SHOW" ); createSMESHAction( SMESHOp::OpShowOnly, "DISPLAY_ONLY" ); createSMESHAction( SMESHOp::OpSortChild, "SORT_CHILD_ITEMS" ); QList aCtrlActions; - aCtrlActions << SMESHOp::OpFreeNode << SMESHOp::OpEqualNode // node controls + aCtrlActions << SMESHOp::OpFreeNode << SMESHOp::OpEqualNode + << SMESHOp::OpNodeConnectivityNb // node controls << SMESHOp::OpFreeEdge << SMESHOp::OpFreeBorder << SMESHOp::OpLength << SMESHOp::OpConnection << SMESHOp::OpEqualEdge // edge controls + << SMESHOp::OpDeflection2D << SMESHOp::OpFreeFace << SMESHOp::OpLength2D << SMESHOp::OpConnection2D << SMESHOp::OpArea << SMESHOp::OpTaper << SMESHOp::OpAspectRatio << SMESHOp::OpMinimumAngle << SMESHOp::OpWarpingAngle << SMESHOp::OpSkew @@ -4054,6 +4146,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( SMESHOp::OpFreeNode, nodeId, -1 ); createMenu( SMESHOp::OpEqualNode, nodeId, -1 ); + //createMenu( SMESHOp::OpNodeConnectivityNb, nodeId, -1 ); createMenu( SMESHOp::OpFreeBorder, edgeId, -1 ); createMenu( SMESHOp::OpLength, edgeId, -1 ); createMenu( SMESHOp::OpConnection, edgeId, -1 ); @@ -4072,6 +4165,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( SMESHOp::OpSkew, faceId, -1 ); createMenu( SMESHOp::OpMaxElementLength2D, faceId, -1 ); createMenu( SMESHOp::OpEqualFace, faceId, -1 ); + createMenu( SMESHOp::OpDeflection2D, faceId, -1 ); createMenu( SMESHOp::OpAspectRatio3D, volumeId, -1 ); createMenu( SMESHOp::OpVolume, volumeId, -1 ); createMenu( SMESHOp::OpMaxElementLength3D, volumeId, -1 ); @@ -4107,6 +4201,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( SMESHOp::OpQuadraticTetrahedron, addId, -1 ); createMenu( SMESHOp::OpQuadraticPyramid, addId, -1 ); createMenu( SMESHOp::OpQuadraticPentahedron, addId, -1 ); + createMenu( SMESHOp::OpBiQuadraticPentahedron, addId, -1 ); createMenu( SMESHOp::OpQuadraticHexahedron, addId, -1 ); createMenu( SMESHOp::OpTriQuadraticHexahedron, addId, -1 ); @@ -4121,31 +4216,32 @@ void SMESHGUI::initialize( CAM_Application* app ) //createMenu( SMESHOp::OpRenumberingNodes, renumId, -1 ); //createMenu( SMESHOp::OpRenumberingElements, renumId, -1 ); + createMenu( SMESHOp::OpMergeNodes, transfId, -1 ); + createMenu( SMESHOp::OpMergeElements, transfId, -1 ); createMenu( SMESHOp::OpTranslation, transfId, -1 ); createMenu( SMESHOp::OpRotation, transfId, -1 ); createMenu( SMESHOp::OpSymmetry, transfId, -1 ); createMenu( SMESHOp::OpScale, transfId, -1 ); + createMenu( SMESHOp::OpOffset, transfId, -1 ); createMenu( SMESHOp::OpSewing, transfId, -1 ); - createMenu( SMESHOp::OpMergeNodes, transfId, -1 ); - createMenu( SMESHOp::OpMergeElements, transfId, -1 ); createMenu( SMESHOp::OpDuplicateNodes, transfId, -1 ); + createMenu( SMESHOp::OpConvertMeshToQuadratic, modifyId, -1 ); + createMenu( SMESHOp::OpCreateBoundaryElements, modifyId, -1 ); + createMenu( SMESHOp::OpExtrusion, modifyId, -1 ); + createMenu( SMESHOp::OpExtrusionAlongAPath, modifyId, -1 ); + createMenu( SMESHOp::OpRevolution, modifyId, -1 ); + createMenu( SMESHOp::OpOrientation, modifyId, -1 ); + createMenu( SMESHOp::OpReorientFaces, modifyId, -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 ); @@ -4154,9 +4250,9 @@ void SMESHGUI::initialize( CAM_Application* app ) 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( 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 -------------- @@ -4199,6 +4295,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( SMESHOp::OpFreeNode, ctrl0dTb ); createTool( SMESHOp::OpEqualNode, ctrl0dTb ); + //createTool( SMESHOp::OpNodeConnectivityNb, ctrl0dTb ); createTool( SMESHOp::OpFreeBorder, ctrl1dTb ); createTool( SMESHOp::OpLength, ctrl1dTb ); @@ -4219,6 +4316,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( SMESHOp::OpSkew, ctrl2dTb ); createTool( SMESHOp::OpMaxElementLength2D, ctrl2dTb ); createTool( SMESHOp::OpEqualFace, ctrl2dTb ); + createTool( SMESHOp::OpDeflection2D, ctrl2dTb ); createTool( SMESHOp::OpAspectRatio3D, ctrl3dTb ); createTool( SMESHOp::OpVolume, ctrl3dTb ); @@ -4251,6 +4349,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( SMESHOp::OpQuadraticTetrahedron, addNonElemTb ); createTool( SMESHOp::OpQuadraticPyramid, addNonElemTb ); createTool( SMESHOp::OpQuadraticPentahedron, addNonElemTb ); + createTool( SMESHOp::OpBiQuadraticPentahedron, addNonElemTb ); createTool( SMESHOp::OpQuadraticHexahedron, addNonElemTb ); createTool( SMESHOp::OpTriQuadraticHexahedron, addNonElemTb ); @@ -4262,31 +4361,32 @@ void SMESHGUI::initialize( CAM_Application* app ) //createTool( SMESHOp::OpRenumberingNodes, renumbTb ); //createTool( SMESHOp::OpRenumberingElements, renumbTb ); + createTool( SMESHOp::OpMergeNodes, transformTb ); + createTool( SMESHOp::OpMergeElements, transformTb ); createTool( SMESHOp::OpTranslation, transformTb ); createTool( SMESHOp::OpRotation, transformTb ); createTool( SMESHOp::OpSymmetry, transformTb ); createTool( SMESHOp::OpScale, transformTb ); + createTool( SMESHOp::OpOffset, transformTb ); createTool( SMESHOp::OpSewing, transformTb ); - createTool( SMESHOp::OpMergeNodes, transformTb ); - createTool( SMESHOp::OpMergeElements, transformTb ); createTool( SMESHOp::OpDuplicateNodes, transformTb ); + createTool( SMESHOp::OpConvertMeshToQuadratic, modifyTb ); + createTool( SMESHOp::OpCreateBoundaryElements, modifyTb ); + createTool( SMESHOp::OpExtrusion, modifyTb ); + createTool( SMESHOp::OpExtrusionAlongAPath, modifyTb ); + createTool( SMESHOp::OpRevolution, modifyTb ); + createTool( SMESHOp::OpOrientation, modifyTb ); + createTool( SMESHOp::OpReorientFaces, modifyTb ); 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 ); @@ -4296,24 +4396,27 @@ void SMESHGUI::initialize( CAM_Application* app ) 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 ) ), + smesh = pat.arg( SMESHGUI_Selection::typeName( SMESH::COMPONENT ) ), + 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 @@ -4322,9 +4425,10 @@ void SMESHGUI::initialize( CAM_Application* app ) isNotEmpty("numberOfNodes <> 0"), // has nodes, edges, etc in VISIBLE! actor - hasNodes("(numberOfNodes > 0 )"),//&& isVisible)"), + hasNodes("(numberOfNodes > 0 ) && hasActor"), hasElems("(count( elemTypes ) > 0)"), hasDifferentElems("(count( elemTypes ) > 1)"), + hasDifferentObjElems("(count( objElemTypes ) > 1)"), hasBalls("({'BallElem'} in elemTypes)"), hasElems0d("({'Elem0d'} in elemTypes)"), hasEdges("({'Edge'} in elemTypes)"), @@ -4332,36 +4436,36 @@ void SMESHGUI::initialize( CAM_Application* app ) hasVolumes("({'Volume'} in elemTypes)"), hasFacesOrVolumes("(({'Face'} in elemTypes) || ({'Volume'} in elemTypes)) "); - createPopupItem( SMESHOp::OpFileInformation, OB, mesh, "&& selcount=1 && isImported" ); - createPopupItem( SMESHOp::OpCreateSubMesh, OB, mesh, "&& hasGeomReference"); - createPopupItem( SMESHOp::OpEditMeshOrSubMesh, OB, mesh ); - createPopupItem( SMESHOp::OpEditMeshOrSubMesh, OB, subMesh, "&& hasGeomReference" ); - createPopupItem( SMESHOp::OpEditGroup, OB, group ); + 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( SMESHOp::OpCompute, OB, mesh, "&& isComputable" ); - createPopupItem( SMESHOp::OpPreCompute, OB, mesh, "&& isPreComputable" ); - createPopupItem( SMESHOp::OpEvaluate, OB, mesh, "&& isComputable" ); - createPopupItem( SMESHOp::OpMeshOrder, OB, mesh, "&& isComputable && hasGeomReference" ); - createPopupItem( SMESHOp::OpUpdate, OB, mesh_part ); - createPopupItem( SMESHOp::OpMeshInformation, OB, mesh_part ); - createPopupItem( SMESHOp::OpFindElementByPoint, OB, mesh_group ); - createPopupItem( SMESHOp::OpOverallMeshQuality, OB, mesh_part ); + 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( SMESHOp::OpCreateGroup, OB, mesh ); - createPopupItem( SMESHOp::OpCreateGeometryGroup, OB, mesh, "&& hasGeomReference" ); - createPopupItem( SMESHOp::OpConstructGroup, OB, subMesh ); + 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( SMESHOp::OpEditHypothesis, OB, hypo, "&& isEditableHyp"); - createPopupItem( SMESHOp::OpUnassign, OB, hyp_alg ); // REMOVE HYPOTHESIS / ALGORITHMS + createPopupItem( SMESHOp::OpEditHypothesis, OB, hypo, "&& isEditableHyp"); + createPopupItem( SMESHOp::OpUnassign, OB, hyp_alg ); popupMgr()->insert( separator(), -1, 0 ); - createPopupItem( SMESHOp::OpConvertMeshToQuadratic, OB, mesh + " " + subMesh ); // convert to quadratic - createPopupItem( SMESHOp::OpCreateBoundaryElements, 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 ); + //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 ); @@ -4379,12 +4483,23 @@ void SMESHGUI::initialize( CAM_Application* app ) createPopupItem( SMESHOp::OpPopupExportDAT, OB, mesh_group, only_one_non_empty, anId ); createPopupItem( SMESHOp::OpDelete, OB, mesh_part + " " + hyp_alg ); createPopupItem( SMESHOp::OpDeleteGroup, OB, group ); + + anId = popupMgr()->insert( tr( "MEN_IMPORT" ), -1, -1 ); // IMPORT submenu + createPopupItem( SMESHOp::OpPopupImportMED, OB, smesh, "", anId ); + createPopupItem( SMESHOp::OpPopupImportUNV, OB, smesh, "", anId ); + createPopupItem( SMESHOp::OpPopupImportSTL, OB, smesh, "", anId ); +#ifdef WITH_CGNS + createPopupItem( SMESHOp::OpPopupImportCGNS, OB, smesh, "", anId ); +#endif + createPopupItem( SMESHOp::OpPopupImportSAUV, OB, smesh, "", anId ); + createPopupItem( SMESHOp::OpPopupImportGMF, OB, smesh, "", anId ); + createPopupItem( SMESHOp::OpPopupImportDAT, OB, smesh, "", anId ); popupMgr()->insert( separator(), -1, 0 ); // popup for viewer createPopupItem( SMESHOp::OpEditGroup, View, group ); - createPopupItem( SMESHOp::OpAddElemGroupPopup, View, elems ); - createPopupItem( SMESHOp::OpRemoveElemGroupPopup, View, elems ); + createPopupItem( SMESHOp::OpAddElemGroupPopup, View, elems, "&& guiState = 800" ); + createPopupItem( SMESHOp::OpRemoveElemGroupPopup, View, elems, "&& guiState = 800" ); popupMgr()->insert( separator(), -1, 0 ); createPopupItem( SMESHOp::OpUpdate, View, mesh_part ); @@ -4435,7 +4550,7 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->setRule( action( SMESHOp::OpDMShading ), "displayMode = 'eSurface'", QtxPopupMgr::ToggleRule ); popupMgr()->insert( action( SMESHOp::OpDMNodes ), anId, -1 ); - popupMgr()->setRule( action( SMESHOp::OpDMNodes ), aMeshInVTK + "&&" + hasNodes, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpDMNodes ), aMeshInVTK + "&&" + hasNodes + "&&" + hasElems, QtxPopupMgr::VisibleRule ); popupMgr()->setRule( action( SMESHOp::OpDMNodes ), "displayMode = 'ePoint'", QtxPopupMgr::ToggleRule ); popupMgr()->insert( separator(), anId, -1 ); @@ -4474,7 +4589,7 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->insert( separator(), anId, -1 ); popupMgr()->insert( action( SMESHOp::OpDEChoose ), anId, -1 ); - popupMgr()->setRule( action( SMESHOp::OpDEChoose ), aClient + "&&" + aType + "&&" + isNotEmpty, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpDEChoose ), aClient + "&& $type in {" + mesh + "} &&" + hasDifferentObjElems, QtxPopupMgr::VisibleRule ); popupMgr()->insert( separator(), anId, -1 ); @@ -4517,9 +4632,9 @@ void SMESHGUI::initialize( CAM_Application* app ) // Controls //------------------------------------------------- QString - aMeshInVtkHasNodes = aMeshInVTK + "&&" + hasNodes, - aMeshInVtkHasEdges = aMeshInVTK + "&&" + hasEdges, - aMeshInVtkHasFaces = aMeshInVTK + "&&" + hasFaces, + aMeshInVtkHasNodes = aMeshInVTK + "&&" + hasNodes, + aMeshInVtkHasEdges = aMeshInVTK + "&&" + hasEdges, + aMeshInVtkHasFaces = aMeshInVTK + "&&" + hasFaces, aMeshInVtkHasVolumes = aMeshInVTK + "&&" + hasVolumes; anId = popupMgr()->insert( tr( "MEN_CTRL" ), -1, -1 ); @@ -4539,6 +4654,10 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->setRule( action( SMESHOp::OpEqualNode ), aMeshInVtkHasNodes, QtxPopupMgr::VisibleRule ); popupMgr()->setRule( action( SMESHOp::OpEqualNode ), "controlMode = 'eCoincidentNodes'", QtxPopupMgr::ToggleRule); + // popupMgr()->insert( action( SMESHOp::OpNodeConnectivityNb ), aSubId, -1 ); + // popupMgr()->setRule( action( SMESHOp::OpNodeConnectivityNb ), aMeshInVtkHasNodes, QtxPopupMgr::VisibleRule ); + // popupMgr()->setRule( action( SMESHOp::OpNodeConnectivityNb ), "controlMode = 'eNodeConnectivityNb'", QtxPopupMgr::ToggleRule ); + aSubId = popupMgr()->insert( tr( "MEN_EDGE_CTRL" ), anId, -1 ); // EDGE CONTROLS popupMgr()->insert( action( SMESHOp::OpFreeBorder ), aSubId, -1 ); @@ -4610,10 +4729,15 @@ void SMESHGUI::initialize( CAM_Application* app ) 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 ); + popupMgr()->insert ( action( SMESHOp::OpDeflection2D ), aSubId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpDeflection2D ), aMeshInVtkHasFaces + " && hasGeomReference", QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpDeflection2D ), "controlMode = 'eDeflection2D'", QtxPopupMgr::ToggleRule ); + aSubId = popupMgr()->insert( tr( "MEN_VOLUME_CTRL" ), anId, -1 ); // VOLUME CONTROLS popupMgr()->insert ( action( SMESHOp::OpAspectRatio3D ), aSubId, -1 ); @@ -4757,11 +4881,7 @@ bool SMESHGUI::activateModule( SUIT_Study* study ) 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() ) - GetSMESHGen()->SetCurrentStudy( _CAST(Study,aStudy)->GetStudy() ); - } + GetSMESHGen()->UpdateStudy(); // get all view currently opened in the study and connect their signals to // the corresponding slots of the class. @@ -4794,7 +4914,7 @@ void SMESHGUI::studyClosed( SUIT_Study* s ) { if( !s ) return; - SMESH::RemoveVisuData( s->id() ); + SMESH::RemoveVisuData(); SalomeApp_Module::studyClosed( s ); } @@ -4810,16 +4930,11 @@ void SMESHGUI::OnGUIEvent() SMESH::SMESH_Gen_var SMESHGUI::GetSMESHGen() { - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); //Document OCAF de l'etude active if ( CORBA::is_nil( myComponentSMESH ) ) - { - SMESHGUI aGUI; //SRN BugID: IPAL9186: Create an instance of SMESHGUI to initialize myComponentSMESH - if ( aStudy ) - aGUI.myComponentSMESH->SetCurrentStudy(_CAST(Study,aStudy)->GetStudy()); - return aGUI.myComponentSMESH; - } - if ( aStudy ) - myComponentSMESH->SetCurrentStudy(_CAST(Study,aStudy)->GetStudy()); + { + SMESHGUI aGUI; //SRN BugID: IPAL9186: Create an instance of SMESHGUI to initialize myComponentSMESH + return aGUI.myComponentSMESH; + } return myComponentSMESH; } @@ -4939,19 +5054,6 @@ void SMESHGUI::createPreferences() 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 ); - addPreference( tr( "PREF_DISPLAY_ENTITY" ), qaGroup, LightApp_Preferences::Bool, "SMESH", "display_entity" ); - 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", 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_GROUP" ), genTab ); setPreferenceProperty( dispgroup, "columns", 2 ); int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), dispgroup, LightApp_Preferences::Selector, "SMESH", "display_mode" ); @@ -4985,11 +5087,29 @@ void SMESHGUI::createPreferences() setPreferenceProperty( maxAngle, "min", 1 ); setPreferenceProperty( maxAngle, "max", 90 ); + int qaGroup = addPreference( tr( "PREF_GROUP_QUALITY" ), genTab ); + setPreferenceProperty( qaGroup, "columns", 2 ); + addPreference( tr( "PREF_DISPLAY_ENTITY" ), qaGroup, LightApp_Preferences::Bool, "SMESH", "display_entity" ); + 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", 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 cinc = addPreference(tr("PREF_CONTROLS_INCREMENT"), qaGroup, LightApp_Preferences::IntSpin, "SMESH", "controls_increment"); + setPreferenceProperty( cinc, "min", 0 ); + setPreferenceProperty( cinc, "max", 5 ); + */ 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 ); @@ -5112,7 +5232,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 ); @@ -5217,6 +5338,10 @@ void SMESHGUI::createPreferences() addPreference( tr( "PREF_ELEMENTS" ), precSelGroup, LightApp_Preferences::Double, "SMESH", "selection_precision_element" ); addPreference( tr( "PREF_OBJECTS" ), precSelGroup, LightApp_Preferences::Double, "SMESH", "selection_precision_object" ); + int sinc = addPreference(tr("PREF_SELECTION_INCREMENT"), selTab, LightApp_Preferences::IntSpin, "SMESH", "selection_increment"); + setPreferenceProperty( sinc, "min", 0 ); + setPreferenceProperty( sinc, "max", 5 ); + // Scalar Bar tab ------------------------------------------------------------------------ int sbarTab = addPreference( tr( "SMESH_SCALARBAR" ) ); int fontGr = addPreference( tr( "SMESH_FONT_SCALARBAR" ), sbarTab ); @@ -5316,7 +5441,8 @@ void SMESHGUI::preferencesChanged( const QString& sect, const QString& name ) name== "highlight_color" || name=="selection_precision_node" || name=="selection_precision_element" || - name=="selection_precision_object" ) + name=="selection_precision_object" || + name=="selection_increment") { SMESH::UpdateSelectionProp( this ); } @@ -5420,7 +5546,7 @@ void SMESHGUI::update( const int flags ) /*! * \brief Set default selection mode * -* SLOT called when operation commited. Sets default selection mode +* SLOT called when operation committed. Sets default selection mode */ //================================================================================ void SMESHGUI::onOperationCommited( SUIT_Operation* ) @@ -5481,9 +5607,12 @@ LightApp_Operation* SMESHGUI::createOperation( const int id ) const op = new SMESHGUI_MeshOp( true, false ); break; case SMESHOp::OpEditMeshOrSubMesh: + case SMESHOp::OpEditMesh: + case SMESHOp::OpEditSubMesh: op = new SMESHGUI_MeshOp( false ); break; case SMESHOp::OpCompute: + case SMESHOp::OpComputeSubMesh: op = new SMESHGUI_ComputeOp(); break; case SMESHOp::OpPreCompute: @@ -5525,8 +5654,7 @@ LightApp_Operation* SMESHGUI::createOperation( const int id ) const void SMESHGUI::switchToOperation(int id) { - if ( _PTR(Study) aStudy = SMESH::GetActiveStudyDocument() ) - activeStudy()->abortAllOperations(); + activeStudy()->abortAllOperations(); startOperation( id ); } @@ -5619,12 +5747,11 @@ void SMESHGUI::storeVisualParameters (int savePoint) savePoint); _PTR(IParameters) ip = ClientFactory::getIParameters(ap); - // store map of custom markers - const VTK::MarkerMap& aMarkerMap = myMarkerMap[ studyDS->StudyId() ]; - if( !aMarkerMap.empty() ) + // store custom markers + if( !myMarkerMap.empty() ) { - VTK::MarkerMap::const_iterator anIter = aMarkerMap.begin(); - for( ; anIter != aMarkerMap.end(); anIter++ ) + VTK::MarkerMap::const_iterator anIter = myMarkerMap.begin(); + for( ; anIter != myMarkerMap.end(); anIter++ ) { int anId = anIter->first; VTK::MarkerData aMarkerData = anIter->second; @@ -5739,7 +5866,7 @@ void SMESHGUI::storeVisualParameters (int savePoint) Handle(SALOME_InteractiveObject) io = aSmeshActor->getIO(); if (io->hasEntry()) { - // entry is "encoded" = it does NOT contain component adress, + // entry is "encoded" = it does NOT contain component address, // since it is a subject to change on next component loading std::string entry = ip->encodeEntry(io->getEntry(), componentName); @@ -5972,8 +6099,7 @@ void SMESHGUI::restoreVisualParameters (int savePoint) savePoint); _PTR(IParameters) ip = ClientFactory::getIParameters(ap); - // restore map of custom markers and map of clipping planes - VTK::MarkerMap& aMarkerMap = myMarkerMap[ studyDS->StudyId() ]; + // restore custom markers and map of clipping planes TPlaneDataMap aPlaneDataMap; std::vector properties = ip->getProperties(); @@ -6030,7 +6156,7 @@ void SMESHGUI::restoreVisualParameters (int savePoint) aMarkerTexture.push_back( aChar.digitValue() ); } - aMarkerMap[ anId ] = VTK::MarkerData( aMarkerFileName, aMarkerTexture ); + myMarkerMap[ anId ] = VTK::MarkerData( aMarkerFileName, aMarkerTexture ); } else if( aPropertyType == "ClippingPlane" ) { @@ -6052,6 +6178,12 @@ void SMESHGUI::restoreVisualParameters (int savePoint) 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; @@ -6134,12 +6266,12 @@ void SMESHGUI::restoreVisualParameters (int savePoint) for (std::vector::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt) { - // entry is a normal entry - it should be "decoded" (setting base adress of component) + // entry is a normal entry - it should be "decoded" (setting base address of component) QString entry (ip->decodeEntry(*entIt).c_str()); // Check that the entry corresponds to a real object in the Study // as the object may be deleted or modified after the visual state is saved. - _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data()); + _PTR(SObject) so = studyDS->FindObjectID(entry.toUtf8().data()); if (!so) continue; //Skip the not existent entry std::vector paramNames = ip->getAllParameterNames( *entIt ); @@ -6205,9 +6337,8 @@ 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()); - if (io->hasEntry() && strcmp(io->getEntry(), entry.toLatin1().data()) == 0) { + Handle(SALOME_InteractiveObject) io = aGeomAc->getIO(); + if (io->hasEntry() && strcmp(io->getEntry(), entry.toUtf8().data()) == 0) { isFound = true; vtkActors.Bind(viewIndex, aGeomAc); } @@ -6543,8 +6674,8 @@ void SMESHGUI::restoreVisualParameters (int savePoint) aSmeshActor->SetMarkerStd( (VTK::MarkerType)aParam1, (VTK::MarkerScale)aParam2 ); } else if( data[0] == "custom" ) { - VTK::MarkerMap::const_iterator markerIt = aMarkerMap.find( aParam1 ); - if( markerIt != aMarkerMap.end() ) { + VTK::MarkerMap::const_iterator markerIt = myMarkerMap.find( aParam1 ); + if( markerIt != myMarkerMap.end() ) { VTK::MarkerData aMarkerData = markerIt->second; aSmeshActor->SetMarkerTexture( aParam1, aMarkerData.second ); } @@ -6831,23 +6962,24 @@ void SMESHGUI::onHypothesisEdit( int result ) */ void SMESHGUI::onUpdateControlActions() { - LightApp_SelectionMgr* aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; - if ( aSel ) + if ( LightApp_SelectionMgr* aSel = SMESHGUI::selectionMgr() ) aSel->selectedObjects( selected ); SMESH_Actor::eControl aControl = SMESH_Actor::eNone; if ( selected.Extent() ) { if ( selected.First()->hasEntry() ) { - aControl = SMESH::FindActorByEntry( selected.First()->getEntry() )->GetControlMode(); - 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() ) ) { - if ( aControl != anActor->GetControlMode() ) { - aControl = SMESH_Actor::eNone; - break; + 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; + } } } } @@ -6892,7 +7024,7 @@ void SMESHGUI::message( const QString& msg ) // get study _PTR(Study) study = dynamic_cast( application()->activeStudy() )->studyDS(); // get mesh name - _PTR(SObject) obj = study->FindObjectID( entry.toLatin1().constData() ); + _PTR(SObject) obj = study->FindObjectID( entry.toUtf8().constData() ); QString name; if ( obj ) name = SMESH::fromUtf8(obj->GetName()); @@ -6947,7 +7079,7 @@ bool SMESHGUI::renameAllowed( const QString& entry) const { return false; // check type to prevent renaming of inappropriate objects - int aType = SMESHGUI_Selection::type(qPrintable(entry), SMESH::GetActiveStudyDocument()); + int aType = SMESHGUI_Selection::type(qPrintable(entry)); if (aType == SMESH::MESH || aType == SMESH::GROUP || aType == SMESH::SUBMESH || aType == SMESH::SUBMESH_COMPOUND || aType == SMESH::SUBMESH_SOLID || aType == SMESH::SUBMESH_FACE || @@ -6994,14 +7126,14 @@ bool SMESHGUI::renameObject( const QString& entry, const QString& name) { if ( obj->FindAttribute(anAttr, "AttributeName") ) { aName = anAttr; // check type to prevent renaming of inappropriate objects - int aType = SMESHGUI_Selection::type( qPrintable(entry), SMESH::GetActiveStudyDocument() ); + int aType = SMESHGUI_Selection::type( qPrintable(entry)); if (aType == SMESH::MESH || aType == SMESH::GROUP || aType == SMESH::SUBMESH || aType == SMESH::SUBMESH_COMPOUND || aType == SMESH::SUBMESH_SOLID || aType == SMESH::SUBMESH_FACE || aType == SMESH::SUBMESH_EDGE || aType == SMESH::SUBMESH_VERTEX || aType == SMESH::HYPOTHESIS || aType == SMESH::ALGORITHM) { if ( !name.isEmpty() ) { - SMESHGUI::GetSMESHGen()->SetName(obj->GetIOR().c_str(), qPrintable(name) ); + SMESHGUI::GetSMESHGen()->SetName(obj->GetIOR().c_str(), qUtf8Printable(name) ); // update name of group object and its actor Handle(SALOME_InteractiveObject) IObject = @@ -7009,9 +7141,9 @@ bool SMESHGUI::renameObject( const QString& entry, const QString& name) { SMESH::SMESH_GroupBase_var aGroupObject = SMESH::IObjectToInterface(IObject); if( !aGroupObject->_is_nil() ) { - aGroupObject->SetName( qPrintable(name) ); + aGroupObject->SetName( qUtf8Printable(name) ); if ( SMESH_Actor *anActor = SMESH::FindActorByEntry( qPrintable(entry) ) ) - anActor->setName( qPrintable(name) ); + anActor->setName( qUtf8Printable(name) ); } return true; }