X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI.cxx;h=48a96827389ec237ae9acd585a2e972eee55f310;hp=e3b49472b6198d89ef8426367c14d2c8a5b16dcf;hb=f4dd52ae3de915020ae02284b8458628a961cc29;hpb=d3e1cabf77f67408ac401e2d387e721605cb3b10 diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index e3b49472b..48a968273 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -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 ???????? @@ -548,7 +550,7 @@ namespace } } } - + // Warn the user about presence of not supported elements QString format; std::vector< SMESH::EntityType > notSupportedElemTypes, presentNotSupported; @@ -603,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 ); @@ -626,6 +629,7 @@ 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) @@ -651,6 +655,9 @@ namespace // Get parameters of export operation QString aFilename; + int aFormat =-1; // for MED version used for write + 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; @@ -666,7 +673,7 @@ namespace QList< QPair< GEOM::ListOfFields_var, QString > > aFieldList; - // Get a file name to write in and additional otions + // Get a file name to write in and additional options if ( isUNV || isDAT || isGMF ) // Export w/o options { if ( isUNV ) @@ -683,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() ) @@ -691,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; } @@ -727,33 +744,61 @@ namespace } else if ( isMED || isSAUV ) // Export to MED or SAUV { - QStringList filters; + int defaultVersion = 0; + QMap aFilterMap; if ( isMED ) { - filters << QObject::tr( "MED_FILES_FILTER" ) + " (*.med)"; + //filters << QObject::tr( "MED_FILES_FILTER" ) + " (*.med)"; + //QString vmed (aMesh->GetVersionString(-1, 2)); + //MESSAGE("MED version: " << vmed.toStdString()); + SMESH::long_array_var mvok = aMesh->GetMEDVersionsCompatibleForAppend(); + for ( int i = 0; i < mvok->length(); ++i ) // i=0 must correspond to the current version to set the default filter on it + { + int versionInt = mvok[i]; + if (i == 0) + defaultVersion = versionInt; + std::ostringstream vss; + vss << versionInt/10; + vss << "."; + vss << versionInt%10; + QString vs = vss.str().c_str(); + MESSAGE("MED version: " << vs.toStdString()); + aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( vs ) + " (*.med)", versionInt); + } } else { // isSAUV - filters << QObject::tr( "SAUV_FILES_FILTER" ) + " (*.sauv *.sauve)"; + aFilterMap.insert("All files (*)", -1 ); + aFilterMap.insert("SAUV files (*.sauv)", defaultVersion ); // 0 = default filter (defaultVersion) + aFilterMap.insert("SAUV files (*.sauve)", -1 ); + } + MESSAGE("default version="<< defaultVersion); + QStringList filters; + QMap::const_iterator it = aFilterMap.begin(); + QString aDefaultFilter = it.key(); + for ( ; it != aFilterMap.end(); ++it ) { + filters.push_back( it.key() ); + if (it.value() == defaultVersion) // explicit default for MED = current MED version + aDefaultFilter = it.key(); } - QStringList checkBoxes; checkBoxes << QObject::tr("SMESH_AUTO_GROUPS") << QObject::tr("SMESH_AUTO_DIM"); SMESHGUI_FieldSelectorWdg* fieldSelWdg = new SMESHGUI_FieldSelectorWdg(); QList< QWidget* > wdgList; - if ( fieldSelWdg->GetAllFeilds( aMeshList, aFieldList )) + 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() ) fd->setDirectory( anInitialPath ); fd->selectFile(aMeshName); - - + + QListView *lview = fd->findChild("listView"); if( lview ) { lview->setMinimumHeight(200); @@ -768,18 +813,24 @@ namespace bool is_ok = false; while (!is_ok) { + MESSAGE("******* Loop on file dialog ***********"); + isOkToWrite =true; if ( fd->exec() ) aFilename = fd->selectedFile(); else { aFilename = QString::null; break; } - toOverwrite = fv->isOverwrite(); + aFormat = aFilterMap[fd->selectedNameFilter()]; + MESSAGE("selected version: " << aFormat << " file: " << aFilename.toUtf8().constData()); + toOverwrite = fv->isOverwrite(aFilename); + MESSAGE("toOverwrite:" << toOverwrite); is_ok = true; if ( !aFilename.isEmpty() ) { if( !toOverwrite ) { - // can't append to an existing using other format - bool isVersionOk = SMESHGUI::GetSMESHGen()->CheckCompatibility( aFilename.toUtf8().constData() ); + // append is only possible if the existing file format is compatible + 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"), @@ -787,11 +838,17 @@ namespace 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++ ) { @@ -804,7 +861,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"), @@ -812,17 +870,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; @@ -854,8 +916,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++ ) { @@ -865,10 +928,10 @@ namespace const QString& geoAssFields = aFieldList[ aMeshIndex ].second; const bool hasFields = ( fields.length() || !geoAssFields.isEmpty() ); if ( !hasFields && aMeshOrGroup->_is_equivalent( aMeshItem )) - aMeshItem->ExportMED( aFilename.toUtf8().data(), toCreateGroups, + aMeshItem->ExportMED( aFilename.toUtf8().data(), toCreateGroups, aFormat, toOverwrite && aMeshIndex == 0, toFindOutDim ); else - aMeshItem->ExportPartToMED( aMeshOrGroup, aFilename.toUtf8().data(), toCreateGroups, + aMeshItem->ExportPartToMED( aMeshOrGroup, aFilename.toUtf8().data(), toCreateGroups, aFormat, toOverwrite && aMeshIndex == 0, toFindOutDim, fields, geoAssFields.toLatin1().data() ); } @@ -912,7 +975,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 ) @@ -925,7 +989,7 @@ namespace wc.suspend(); SUIT_MessageBox::warning(SMESHGUI::desktop(), QObject::tr("SMESH_WRN_WARNING"), - QObject::tr("SMESH_EXPORT_FAILED")); + QObject::tr("SMESH_EXPORT_FAILED") + SalomeApp_Tools::ExceptionToString(S_ex)); wc.resume(); } } @@ -1089,6 +1153,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() ) ) @@ -1425,7 +1491,7 @@ namespace presentEntities = presentEntities | SMESH_Actor::e0DElements; if ( !(presentEntities & SMESH_Actor::eBallElem) && anActor->GetObject()->GetNbEntities( SMDSAbs_Ball ) ) presentEntities = presentEntities | SMESH_Actor::eBallElem; - + // as we know that all types of elements are present, we can exit the loop if ( presentEntities == SMESH_Actor::eAllEntity ) break; @@ -1463,7 +1529,7 @@ namespace dlg.setShrinkCoef( int( shrinkCoef * 100. ) ); // hide unused controls dlg.showControls( presentEntities, hasNodes ); - + if ( dlg.exec() ) { nodeColor = dlg.nodeColor(); markerType = dlg.nodeMarkerType(); @@ -1497,7 +1563,7 @@ namespace if ( !IObject->hasEntry() ) continue; SMESH_Actor* anActor = SMESH::FindActorByEntry( IObject->getEntry() ); if ( !anActor ) continue; - + // nodes: color, marker anActor->SetNodeColor( nodeColor.redF(), nodeColor.greenF(), nodeColor.blueF() ); if ( markerType != VTK::MT_USER ) { @@ -1542,17 +1608,17 @@ namespace aColor = nodeColor; break; case SMESH::EDGE: aColor = edgeColor; break; - case SMESH::FACE: + case SMESH::FACE: aColor = faceColor; break; case SMESH::VOLUME: aColor = volumeColor; break; - case SMESH::ELEM0D: + case SMESH::ELEM0D: aColor = elem0dColor; break; - case SMESH::BALL: + case SMESH::BALL: aColor = ballColor; break; default: break; } - + if ( aColor.isValid() ) { SALOMEDS::Color aGroupColor; aGroupColor.R = aColor.redF(); @@ -1621,6 +1687,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 ); @@ -1637,7 +1704,9 @@ 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 ) @@ -1774,7 +1843,7 @@ namespace v = qMax( uint(0), qMin ( v, size-1 ) ); return v; } - + } //namespace void SMESHGUI::OnEditDelete() @@ -1788,34 +1857,43 @@ void SMESHGUI::OnEditDelete() _PTR(GenericAttribute) anAttr; _PTR(AttributeIOR) anIOR; + const int objectCountLimit = 30; // PAL23599 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", name; + + _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() ); + name = QString::fromStdString ( aRefSObj->GetName() ); + father = QString::fromStdString ( aRefSObj->GetFatherComponent()->ComponentDataType() ); } else - aNameList.append(anIO->getName()); + name = anIO->getName(); objectCount++; } + if ( objectCount < objectCountLimit ) { // avoid occupying the whole screen + aNameList.append("\n - "); + aNameList.append( name ); + } if( aParentComponent.isNull() ) - aParentComponent = cur; - else if( !aParentComponent.isEmpty() && aParentComponent!=cur ) + aParentComponent = father; + else if( !aParentComponent.isEmpty() && aParentComponent!=father ) aParentComponent = ""; } + if ( objectCount >= objectCountLimit ) + aNameList.append("\n - ..."); if ( objectCount == 0 ) return; // No Valid Objects Selected @@ -1918,10 +1996,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 @@ -2068,20 +2142,20 @@ bool SMESHGUI::automaticUpdate( SMESH::SMESH_IDSource_ptr theMesh, SMESH::long_array_var info = theMesh->GetMeshInfo(); long nbOdElems = info[SMDSEntity_0D]; long nbEdges = info[SMDSEntity_Edge] + info[SMDSEntity_Quad_Edge]; - long nbFaces = info[SMDSEntity_Triangle] + info[SMDSEntity_Quad_Triangle] + info[SMDSEntity_BiQuad_Triangle] + - info[SMDSEntity_Quadrangle] + info[SMDSEntity_Quad_Quadrangle] + info[SMDSEntity_BiQuad_Quadrangle] + + long nbFaces = info[SMDSEntity_Triangle] + info[SMDSEntity_Quad_Triangle] + info[SMDSEntity_BiQuad_Triangle] + + info[SMDSEntity_Quadrangle] + info[SMDSEntity_Quad_Quadrangle] + info[SMDSEntity_BiQuad_Quadrangle] + info[SMDSEntity_Polygon] + info[SMDSEntity_Quad_Polygon]; - long nbVolumes = info[SMDSEntity_Tetra] + info[SMDSEntity_Quad_Tetra] + - info[SMDSEntity_Hexa] + info[SMDSEntity_Quad_Hexa] + info[SMDSEntity_TriQuad_Hexa] + - info[SMDSEntity_Pyramid] + info[SMDSEntity_Quad_Pyramid] + - info[SMDSEntity_Penta] + info[SMDSEntity_Quad_Penta] + - info[SMDSEntity_Polyhedra] + + 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_BiQuad_Penta] + + info[SMDSEntity_Polyhedra] + info[SMDSEntity_Hexagonal_Prism]; long nbBalls = info[SMDSEntity_Ball]; long requestedSize = nbOdElems + nbBalls + nbEdges + nbFaces + nbVolumes; *nbElements = requestedSize; - + *entities = SMESH_Actor::eAllEntity; *hidden = 0; @@ -2569,9 +2643,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) 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) @@ -3089,7 +3161,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) SALOME_ListIteratorOfListIO It( selected ); for ( ; It.More(); It.Next() ) { SMESHGUI_MeshInfoDlg* dlg = new SMESHGUI_MeshInfoDlg( SMESHGUI::desktop(), page ); - dlg->showInfo( It.Value() ); + dlg->showInfo( It.Value() ); dlg->show(); } } @@ -3229,6 +3301,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpQuadraticTetrahedron: case SMESHOp::OpQuadraticPyramid: case SMESHOp::OpQuadraticPentahedron: + case SMESHOp::OpBiQuadraticPentahedron: case SMESHOp::OpQuadraticHexahedron: case SMESHOp::OpTriQuadraticHexahedron: { @@ -3247,6 +3320,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; @@ -3307,7 +3381,6 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) 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::getStudy()->NewChildIterator( aMeshSObj ); @@ -3447,6 +3520,20 @@ 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(isStudyLocked()) break; @@ -3538,6 +3625,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: @@ -3726,7 +3814,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() ) @@ -3839,6 +3927,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 ); @@ -3879,6 +3968,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" ); @@ -3894,6 +3984,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" ); @@ -3967,6 +4058,7 @@ void SMESHGUI::initialize( CAM_Application* app ) << 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 @@ -4080,6 +4172,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 ); @@ -4115,6 +4208,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 ); @@ -4129,31 +4223,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 ); @@ -4178,8 +4273,8 @@ void SMESHGUI::initialize( CAM_Application* app ) addElemTb = createTool( tr( "TB_ADD" ), QString( "SMESHAddElementToolbar" ) ), addNonElemTb = createTool( tr( "TB_ADDNON" ), QString( "SMESHAddElementToolbar" ) ), remTb = createTool( tr( "TB_REM" ), QString( "SMESHRemoveToolbar" ) ), - //renumbTb = createTool( tr( "TB_RENUMBER" ), QString( "SMESHRenumberingToolbar" ) ), - transformTb = createTool( tr( "TB_TRANSFORM" ), QString( "SMESHTransformationToolbar" ) ), + //renumbTb = createTool( tr( "TB_RENUMBER" ), QString( "SMESHRenumberingToolbar" ) ), + transformTb = createTool( tr( "TB_TRANSFORM" ), QString( "SMESHTransformationToolbar" ) ), modifyTb = createTool( tr( "TB_MODIFY" ), QString( "SMESHModificationToolbar" ) ), measuremTb = createTool( tr( "TB_MEASUREM" ), QString( "SMESHMeasurementsToolbar" ) ), dispModeTb = createTool( tr( "TB_DISP_MODE" ), QString( "SMESHDisplayModeToolbar" ) ); @@ -4228,6 +4323,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 ); @@ -4260,6 +4356,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 ); @@ -4271,31 +4368,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 ); @@ -4638,10 +4736,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 ); @@ -5004,6 +5107,11 @@ void SMESHGUI::createPreferences() 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 ); @@ -5197,7 +5305,7 @@ void SMESHGUI::createPreferences() int numGroup = addPreference( tr( "PREF_GROUP_NUMBERING" ), meshTab ); setPreferenceProperty( numGroup, "columns", 2 ); - + addPreference( tr( "PREF_NUMBERING_NODE" ), numGroup, LightApp_Preferences::Color, "SMESH", "numbering_node_color" ); addVtkFontPref( tr( "PREF_NUMBERING_FONT" ), numGroup, "numbering_node_font", true ); @@ -5237,6 +5345,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 ); @@ -5336,7 +5448,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 ); } @@ -5618,7 +5731,7 @@ const char* gPathSep = "|"; // character used to separate paths * \brief Store visual parameters * * This method is called just before the study document is saved. - * Store visual parameters in AttributeParameter attribue(s) + * Store visual parameters in AttributeParameter attribute(s) */ void SMESHGUI::storeVisualParameters (int savePoint) { @@ -5970,7 +6083,7 @@ typedef std::map TPlaneInfoMap; * \brief Restore visual parameters * * This method is called after the study document is opened. - * Restore visual parameters from AttributeParameter attribue(s) + * Restore visual parameters from AttributeParameter attribute(s) */ void SMESHGUI::restoreVisualParameters (int savePoint) { @@ -6084,7 +6197,7 @@ void SMESHGUI::restoreVisualParameters (int savePoint) aPlaneData.Mode = aPropertyValueList[0].toInt( &ok ); if( !ok ) continue; - + ok = false; aPlaneData.isOpenGLClipping = aPropertyValueList[1].toInt( &ok ); if( !ok ) @@ -6165,7 +6278,7 @@ void SMESHGUI::restoreVisualParameters (int savePoint) // 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 ); @@ -6232,7 +6345,7 @@ void SMESHGUI::restoreVisualParameters (int savePoint) SMESH_Actor* aGeomAc = SMESH_Actor::SafeDownCast(ac); if (aGeomAc->hasIO()) { Handle(SALOME_InteractiveObject) io = aGeomAc->getIO(); - if (io->hasEntry() && strcmp(io->getEntry(), entry.toLatin1().data()) == 0) { + if (io->hasEntry() && strcmp(io->getEntry(), entry.toUtf8().data()) == 0) { isFound = true; vtkActors.Bind(viewIndex, aGeomAc); } @@ -6584,9 +6697,9 @@ void SMESHGUI::restoreVisualParameters (int savePoint) // Clipping else if (paramNameStr.startsWith("ClippingPlane")) { QStringList vals = val.split(gDigitsSep, QString::SkipEmptyParts); - // old format - val looks like "Off" or "1:0:0:0.5:0:0" + // old format - val looks like "Off" or "1:0:0:0.5:0:0" // (mode(relative), is OpenGL clipping plane, orientation, distance, two angles) - // or "0:1:1:10.5:1.0:1.0:15.0:10.0:10.0" + // or "0:1:1:10.5:1.0:1.0:15.0:10.0:10.0" // (mode(absolute), is OpenGL clipping plane, orientation, base point(x, y, z), direction (dx, dy, dz)) // new format - val looks like "Off" or "0" (plane id) // (note: in new format "Off" value is used only for consistency, @@ -6786,10 +6899,10 @@ void SMESHGUI::restoreVisualParameters (int savePoint) break; } } - + } } - + // update all VTK views QList lst; @@ -6805,7 +6918,7 @@ void SMESHGUI::restoreVisualParameters (int savePoint) while( vtkActor* aVTKActor = anAllActors->GetNextActor() ) if( SMESH_Actor* anActor = SMESH_Actor::SafeDownCast( aVTKActor ) ) anActor->SetOpenGLClippingPlane(); - + vtkView->getRenderer()->ResetCameraClippingRange(); vtkView->Repaint(); } @@ -6918,13 +7031,13 @@ 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()); if ( name.isEmpty() ) return; - + if ( data.last() == "stop" ) application()->putInfo( tr( "MESH_LOADING_MSG_FINISHED" ).arg( name ) ); else @@ -6965,7 +7078,7 @@ bool SMESHGUI::renameAllowed( const QString& entry) const { return false; SalomeApp_DataObject* obj = dynamic_cast(appStudy->findObjectByEntry(entry)); - + if(!obj) return false; @@ -6995,17 +7108,17 @@ bool SMESHGUI::renameObject( const QString& entry, const QString& name) { SalomeApp_Application* anApp = dynamic_cast( application() ); if( !anApp ) return false; - + SalomeApp_Study* appStudy = dynamic_cast( anApp->activeStudy() ); if(!appStudy) return false; - + _PTR(Study) aStudy = appStudy->studyDS(); - + if(!aStudy) return false; - + bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked(); if ( aLocked ) { SUIT_MessageBox::warning ( anApp->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") ); @@ -7027,7 +7140,7 @@ bool SMESHGUI::renameObject( const QString& entry, const QString& name) { 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 = @@ -7035,9 +7148,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; }