X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH%2FSMESH_Mesh.cxx;h=7de8ef36ffca63ee8462cafc015fe6dec359db55;hp=ff127dece72588a29e297dde56a32e072bd7efb2;hb=51760fb76f57da9ab446585e6f87b101679c58cb;hpb=922336dfb7873d5449ccd871a22339113c3bd645 diff --git a/src/SMESH/SMESH_Mesh.cxx b/src/SMESH/SMESH_Mesh.cxx index ff127dece..7de8ef36f 100644 --- a/src/SMESH/SMESH_Mesh.cxx +++ b/src/SMESH/SMESH_Mesh.cxx @@ -559,7 +559,7 @@ int SMESH_Mesh::MEDToMesh(const char* theFileName, const char* theMeshName) //purpose : //======================================================================= -int SMESH_Mesh::STLToMesh(const char* theFileName) +std::string SMESH_Mesh::STLToMesh(const char* theFileName) { if(_isShapeToMesh) throw SALOME_Exception(LOCALIZED("a shape to mesh has already been defined")); @@ -571,7 +571,7 @@ int SMESH_Mesh::STLToMesh(const char* theFileName) myReader.SetMeshId(-1); myReader.Perform(); - return 1; + return myReader.GetName(); } //================================================================================ @@ -714,6 +714,7 @@ SMESH_Mesh::AddHypothesis(const TopoDS_Shape & aSubShape, } } HasModificationsToDiscard(); // to reset _isModified flag if a mesh becomes empty + GetMeshDS()->Modified(); if(MYDEBUG) subMesh->DumpAlgoState(true); if(MYDEBUG) SCRUTE(ret); @@ -784,6 +785,7 @@ SMESH_Mesh::RemoveHypothesis(const TopoDS_Shape & aSubShape, } HasModificationsToDiscard(); // to reset _isModified flag if mesh become empty + GetMeshDS()->Modified(); if(MYDEBUG) subMesh->DumpAlgoState(true); if(MYDEBUG) SCRUTE(ret); @@ -1078,7 +1080,7 @@ SMESH_subMesh * SMESH_Mesh::GetSubMesh(const TopoDS_Shape & aSubShape) //============================================================================= /*! - * Get the SMESH_subMesh object implementation. Dont create it, return null + * Get the SMESH_subMesh object implementation. Don't create it, return null * if it does not exist. */ //============================================================================= @@ -1092,7 +1094,7 @@ SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const TopoDS_Shape & aSubShape) //============================================================================= /*! - * Get the SMESH_subMesh object implementation. Dont create it, return null + * Get the SMESH_subMesh object implementation. Don't create it, return null * if it does not exist. */ //============================================================================= @@ -1384,6 +1386,8 @@ bool SMESH_Mesh::HasDuplicatedGroupNamesMED() * - 2D if all mesh nodes lie on XOY coordinate plane, or * - 3D in the rest cases. * If \a theAutoDimension is \c false, the space dimension is always 3. + * \param [in] theAddODOnVertices - to create 0D elements on all vertices + * \param [in] theAllElemsToGroup - to make every element to belong to any group (PAL23413) * \return int - mesh index in the file */ //================================================================================ @@ -1394,9 +1398,11 @@ void SMESH_Mesh::ExportMED(const char * file, int theVersion, const SMESHDS_Mesh* meshPart, bool theAutoDimension, - bool theAddODOnVertices) + bool theAddODOnVertices, + bool theAllElemsToGroup) throw(SALOME_Exception) { + //MESSAGE("MED_VERSION:"<< theVersion); SMESH_TRY; DriverMED_W_SMESHDS_Mesh myWriter; @@ -1416,7 +1422,11 @@ void SMESH_Mesh::ExportMED(const char * file, myWriter.AddGroupOfEdges(); myWriter.AddGroupOfFaces(); myWriter.AddGroupOfVolumes(); + myWriter.AddGroupOf0DElems(); + myWriter.AddGroupOfBalls(); } + if ( theAllElemsToGroup ) + myWriter.AddAllToGroup(); // Pass groups to writer. Provide unique group names. //set aGroupNames; // Corrected for Mantis issue 0020028 @@ -1472,7 +1482,9 @@ void SMESH_Mesh::ExportSAUV(const char *file, cmd += "from medutilities import my_remove ; my_remove(r'" + medfilename + "')"; cmd += "\""; system(cmd.c_str()); - ExportMED(medfilename.c_str(), theMeshName, theAutoGroups, 1); + ExportMED(medfilename.c_str(), theMeshName, theAutoGroups, /*theVersion=*/1, + /*meshPart=*/NULL, /*theAutoDimension=*/false, /*theAddODOnVertices=*/false, + /*theAllElemsToGroup=*/true ); // theAllElemsToGroup is for PAL0023413 #ifdef WIN32 cmd = "%PYTHONBIN% "; #else @@ -1526,6 +1538,7 @@ void SMESH_Mesh::ExportUNV(const char * file, myWriter.SetMeshId(_id); // myWriter.SetGroups(_mapGroup); + // pass group names to SMESHDS if ( !meshPart ) { for ( map::iterator it = _mapGroup.begin(); it != _mapGroup.end(); it++ ) { @@ -1549,6 +1562,7 @@ void SMESH_Mesh::ExportUNV(const char * file, void SMESH_Mesh::ExportSTL(const char * file, const bool isascii, + const char * name, const SMESHDS_Mesh* meshPart) throw(SALOME_Exception) { Unexpect aCatch(SalomeException); @@ -1557,6 +1571,7 @@ void SMESH_Mesh::ExportSTL(const char * file, myWriter.SetIsAscii( isascii ); myWriter.SetMesh( meshPart ? (SMESHDS_Mesh*) meshPart : _myMeshDS); myWriter.SetMeshId(_id); + if ( name ) myWriter.SetName( name ); myWriter.Perform(); } @@ -1568,17 +1583,37 @@ void SMESH_Mesh::ExportSTL(const char * file, void SMESH_Mesh::ExportCGNS(const char * file, const SMESHDS_Mesh* meshDS, - const char * meshName) + const char * meshName, + const bool groupElemsByType) { int res = Driver_Mesh::DRS_FAIL; + + // pass group names to SMESHDS + for ( map::iterator it = _mapGroup.begin(); it != _mapGroup.end(); it++ ) { + SMESH_Group* group = it->second; + SMESHDS_GroupBase* groupDS = group->GetGroupDS(); + if ( groupDS ) { + string groupName = group->GetName(); + groupDS->SetStoreName( groupName.c_str() ); + } + } #ifdef WITH_CGNS + DriverCGNS_Write myWriter; myWriter.SetFile( file ); myWriter.SetMesh( const_cast( meshDS )); myWriter.SetMeshName( SMESH_Comment("Mesh_") << meshDS->GetPersistentId()); if ( meshName && meshName[0] ) myWriter.SetMeshName( meshName ); + myWriter.SetElementsByType( groupElemsByType ); res = myWriter.Perform(); + if ( res != Driver_Mesh::DRS_OK ) + { + SMESH_ComputeErrorPtr err = myWriter.GetError(); + if ( err && !err->IsOK() && !err->myComment.empty() ) + throw SALOME_Exception(("Export failed: " + err->myComment ).c_str() ); + } + #endif if ( res != Driver_Mesh::DRS_OK ) throw SALOME_Exception("Export failed"); @@ -1856,6 +1891,19 @@ int SMESH_Mesh::NbPrisms(SMDSAbs_ElementOrder order) const throw(SALOME_Exceptio return _myMeshDS->GetMeshInfo().NbPrisms(order); } +int SMESH_Mesh::NbQuadPrisms() const throw (SALOME_Exception) +{ + Unexpect aCatch(SalomeException); + return _myMeshDS->GetMeshInfo().NbQuadPrisms(); +} + +int SMESH_Mesh::NbBiQuadPrisms() const throw (SALOME_Exception) +{ + Unexpect aCatch(SalomeException); + return _myMeshDS->GetMeshInfo().NbBiQuadPrisms(); +} + + //================================================================================ /*! * \brief Return number of hexagonal prisms in the mesh @@ -1918,7 +1966,7 @@ int SMESH_Mesh::NbMeshes() const // nb meshes in the Study //======================================================================= //function : IsNotConformAllowed -//purpose : check if a hypothesis alowing notconform mesh is present +//purpose : check if a hypothesis allowing notconform mesh is present //======================================================================= bool SMESH_Mesh::IsNotConformAllowed() const @@ -2090,7 +2138,7 @@ bool SMESH_Mesh::RemoveGroup( const int theGroupID ) //======================================================================= //function : GetAncestors //purpose : return list of ancestors of theSubShape in the order -// that lower dimention shapes come first. +// that lower dimension shapes come first. //======================================================================= const TopTools_ListOfShape& SMESH_Mesh::GetAncestors(const TopoDS_Shape& theS) const