From 83a3c8aef5563fa15623b9a1ecd2ab0ac39d4e39 Mon Sep 17 00:00:00 2001 From: eap Date: Wed, 6 May 2015 14:30:51 +0300 Subject: [PATCH] 52730: Activation of SMESH fails after GEOM group modification Fix SMESH_Mesh_i::CheckGeomGroupModif() 52731: Exception at export of SEG3 groups Fix BUGs concerning Export: 1) Exception at export of the SEG3 group as a separate object. 2) Many formats available in the pop-up menu when several objects selected while only MED and CGNS formats support several meshes in one file. 3) Export of the mesh and its group to the same file results of storage of the group only. Object names are not kept. --- src/DriverCGNS/DriverCGNS_Read.hxx | 2 +- src/SMDS/SMDS_MeshInfo.hxx | 16 ++++++++-------- src/SMESH/SMESH_Mesh.cxx | 5 ++++- src/SMESH/SMESH_Mesh.hxx | 3 ++- src/SMESHGUI/SMESHGUI.cxx | 17 ++++++++--------- src/SMESH_I/SMESH_Mesh_i.cxx | 17 +++++++++++++---- 6 files changed, 36 insertions(+), 24 deletions(-) diff --git a/src/DriverCGNS/DriverCGNS_Read.hxx b/src/DriverCGNS/DriverCGNS_Read.hxx index 51d230a0e..6ae4b812a 100644 --- a/src/DriverCGNS/DriverCGNS_Read.hxx +++ b/src/DriverCGNS/DriverCGNS_Read.hxx @@ -35,7 +35,7 @@ /*! * \brief Driver reading a mesh from the CGNS file. The mesh to read is selected by - * an index (counted form 0) set via SetMeshId() + * an index (counted from 0) set via SetMeshId() */ class MESHDriverCGNS_EXPORT DriverCGNS_Read : public Driver_SMESHDS_Mesh { diff --git a/src/SMDS/SMDS_MeshInfo.hxx b/src/SMDS/SMDS_MeshInfo.hxx index 6196645c7..fa49ecd24 100644 --- a/src/SMDS/SMDS_MeshInfo.hxx +++ b/src/SMDS/SMDS_MeshInfo.hxx @@ -128,21 +128,21 @@ inline SMDS_MeshInfo::SMDS_MeshInfo(): // 0 ------------------ - DON't USE 0!!! // 1 . * . // 2 . * - // 3 . * - // 4 * . . + // 3 . . * + // 4 * . // 5 * // 6 * . - // 7 . * + // 7 . // 8 * . - // 9 . * + // 9 . // 10 * // 11 // 12 * // 13 * // 14 // 15 * - // 16 - // 17 + // 16 * + // 17 * // 18 * // 19 * // 20 * @@ -158,7 +158,7 @@ inline SMDS_MeshInfo::SMDS_MeshInfo(): myShift.resize(SMDSAbs_NbElementTypes, 0); myShift[ SMDSAbs_Face ] = +15;// 3->18, 4->19, etc. - myShift[ SMDSAbs_Edge ] = +5; // 2->7, 4->9 + myShift[ SMDSAbs_Edge ] = +14;// 2->16, 3->17 myShift[ SMDSAbs_0DElement ] = +2; // 1->3 myShift[ SMDSAbs_Ball ] = +1; // 1->2 @@ -169,7 +169,7 @@ inline SMDS_MeshInfo::SMDS_MeshInfo(): myNb[ index( SMDSAbs_Ball,1 )] = & myNbBalls; myNb[ index( SMDSAbs_Edge,2 )] = & myNbEdges; - myNb[ index( SMDSAbs_Edge,4 )] = & myNbQuadEdges; + myNb[ index( SMDSAbs_Edge,3 )] = & myNbQuadEdges; myNb[ index( SMDSAbs_Face,3 )] = & myNbTriangles; myNb[ index( SMDSAbs_Face,4 )] = & myNbQuadrangles; diff --git a/src/SMESH/SMESH_Mesh.cxx b/src/SMESH/SMESH_Mesh.cxx index 73030e901..49446080f 100644 --- a/src/SMESH/SMESH_Mesh.cxx +++ b/src/SMESH/SMESH_Mesh.cxx @@ -1552,7 +1552,8 @@ void SMESH_Mesh::ExportSTL(const char * file, //================================================================================ void SMESH_Mesh::ExportCGNS(const char * file, - const SMESHDS_Mesh* meshDS) + const SMESHDS_Mesh* meshDS, + const char * meshName) { int res = Driver_Mesh::DRS_FAIL; #ifdef WITH_CGNS @@ -1560,6 +1561,8 @@ void SMESH_Mesh::ExportCGNS(const char * file, myWriter.SetFile( file ); myWriter.SetMesh( const_cast( meshDS )); myWriter.SetMeshName( SMESH_Comment("Mesh_") << meshDS->GetPersistentId()); + if ( meshName && meshName[0] ) + myWriter.SetMeshName( meshName ); res = myWriter.Perform(); #endif if ( res != Driver_Mesh::DRS_OK ) diff --git a/src/SMESH/SMESH_Mesh.hxx b/src/SMESH/SMESH_Mesh.hxx index d8ac1f2d5..b6f001f27 100644 --- a/src/SMESH/SMESH_Mesh.hxx +++ b/src/SMESH/SMESH_Mesh.hxx @@ -259,7 +259,8 @@ class SMESH_EXPORT SMESH_Mesh const bool isascii, const SMESHDS_Mesh* meshPart = 0) throw(SALOME_Exception); void ExportCGNS(const char * file, - const SMESHDS_Mesh* mesh); + const SMESHDS_Mesh* mesh, + const char * meshName = 0); void ExportGMF(const char * file, const SMESHDS_Mesh* mesh, bool withRequiredGroups = true ); diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index b781cba00..5db6d9e10 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -426,17 +426,16 @@ namespace 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 +#ifdef WITH_CGNS const bool isCGNS= ( theCommandID == SMESHOp::OpExportCGNS || theCommandID == SMESHOp::OpPopupExportCGNS ); - #else +#else const bool isCGNS= false; - #endif +#endif const bool isSAUV= ( theCommandID == SMESHOp::OpExportSAUV || theCommandID == SMESHOp::OpPopupExportSAUV ); const bool isGMF = ( theCommandID == SMESHOp::OpExportGMF || theCommandID == SMESHOp::OpPopupExportGMF ); - // actually, the following condition can't be met (added for insurance) - if( selected.Extent() == 0 || - ( selected.Extent() > 1 && !isMED && !isSTL )) + const bool multiMeshSupported = ( isMED || isCGNS ); // file can hold several meshes + if ( selected.Extent() == 0 || ( selected.Extent() > 1 && !multiMeshSupported )) return; // get mesh object from selection and check duplication of their names @@ -4383,9 +4382,9 @@ void SMESHGUI::initialize( CAM_Application* app ) #ifdef WITH_CGNS createPopupItem( SMESHOp::OpPopupExportCGNS, OB, mesh_group, multiple_non_empty, anId ); #endif - createPopupItem( SMESHOp::OpPopupExportSAUV, OB, mesh_group, multiple_non_empty, anId ); - createPopupItem( SMESHOp::OpPopupExportGMF, OB, mesh_group, multiple_non_empty, anId ); - createPopupItem( SMESHOp::OpPopupExportDAT, OB, mesh_group, multiple_non_empty, anId ); + createPopupItem( SMESHOp::OpPopupExportSAUV, OB, mesh_group, only_one_non_empty, anId ); + createPopupItem( SMESHOp::OpPopupExportGMF, OB, mesh_group, only_one_non_empty, anId ); + createPopupItem( SMESHOp::OpPopupExportDAT, OB, mesh_group, only_one_non_empty, anId ); createPopupItem( SMESHOp::OpDelete, OB, mesh_part + " " + hyp_alg ); createPopupItem( SMESHOp::OpDeleteGroup, OB, group ); popupMgr()->insert( separator(), -1, 0 ); diff --git a/src/SMESH_I/SMESH_Mesh_i.cxx b/src/SMESH_I/SMESH_Mesh_i.cxx index 2389d03b5..fda60d269 100644 --- a/src/SMESH_I/SMESH_Mesh_i.cxx +++ b/src/SMESH_I/SMESH_Mesh_i.cxx @@ -2239,9 +2239,10 @@ void SMESH_Mesh_i::CheckGeomGroupModif() groupData.push_back ( make_pair( TIndexedShape( gog->GetID(),gog->GetShape()), gog->GetType())); } - // set new shape to mesh -> DS of submeshes and geom groups is deleted + // set new shape to mesh -> DS of sub-meshes and geom groups is deleted + _impl->ShapeToMesh( TopoDS_Shape() ); // IPAL52730 _impl->ShapeToMesh( newShape ); - + // reassign hypotheses TShapeHypList::iterator indS_hyps = assignedHyps.begin(); for ( ; indS_hyps != assignedHyps.end(); ++indS_hyps ) @@ -2258,7 +2259,7 @@ void SMESH_Mesh_i::CheckGeomGroupModif() continue; for ( hypIt = hyps.begin(); hypIt != hyps.end(); ++hypIt ) _impl->AddHypothesis( geom._shape, (*hypIt)->GetID()); - // care of submeshes + // care of sub-meshes SMESH_subMesh* newSubmesh = _impl->GetSubMesh( geom._shape ); if ( newID != oldID ) { _mapSubMesh [ newID ] = newSubmesh; @@ -3577,8 +3578,16 @@ void SMESH_Mesh_i::ExportCGNS(::SMESH::SMESH_IDSource_ptr meshPart, PrepareForWriting(file,overwrite); + std::string meshName(""); + SALOMEDS::Study_var study = _gen_i->GetCurrentStudy(); + SALOMEDS::SObject_wrap so = _gen_i->ObjectToSObject( study, meshPart ); + if ( !so->_is_nil() ) + { + CORBA::String_var name = so->GetName(); + meshName = name.in(); + } SMESH_MeshPartDS partDS( meshPart ); - _impl->ExportCGNS(file, &partDS); + _impl->ExportCGNS(file, &partDS, meshName.c_str() ); TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".ExportCGNS( " << meshPart<< ", r'" << file << "', " << overwrite << ")"; -- 2.39.2