X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FDriverGMF%2FDriverGMF_Write.cxx;h=37bc478b8f88cecadbff95cbe2564fd8a2f370b8;hp=ddf3b7600a12690b86a217d8c9fd631cffb39b65;hb=d9f4b53e489dd5857db264ede6acded7b076c9f1;hpb=b0a908c0d20341651771d0249fb10882f54b2aad diff --git a/src/DriverGMF/DriverGMF_Write.cxx b/src/DriverGMF/DriverGMF_Write.cxx index ddf3b7600..37bc478b8 100644 --- a/src/DriverGMF/DriverGMF_Write.cxx +++ b/src/DriverGMF/DriverGMF_Write.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2022 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 @@ -34,6 +34,8 @@ #include "utilities.h" +using SMESHUtils::ControlPnt; + extern "C" { #include "libmesh5.h" @@ -55,8 +57,8 @@ extern "C" elemIt = elementIterator( SMDSGeom ); \ if ( elemIt->more() ) \ { \ - int totalNbElems = myMesh->GetMeshInfo().NbElements( SMDSGeom ); \ - int nbLinearElems = myMesh->GetMeshInfo().NbElements( LinType ); \ + smIdType totalNbElems = myMesh->GetMeshInfo().NbElements( SMDSGeom );\ + smIdType nbLinearElems = myMesh->GetMeshInfo().NbElements( LinType ); \ if ( totalNbElems - nbLinearElems > 0 ) \ { \ GmfSetKwd(meshID, GmfKwd, totalNbElems - nbLinearElems); \ @@ -70,9 +72,9 @@ extern "C" elem->getshapeId() ); \ }} -#define END_ELEM_WRITE_ADD_TO_MAP( elem, e2id ) \ - elem->getshapeId() ); \ - e2id.insert( e2id.end(), make_pair( elem, gmfID )); \ +#define END_ELEM_WRITE_ADD_TO_MAP( elem, e2id ) \ + elem->getshapeId() ); \ + e2id.insert( e2id.end(), std::make_pair( elem, gmfID )); \ }} #define END_EXTRA_VERTICES_WRITE() \ @@ -80,29 +82,6 @@ extern "C" }}}} -Control_Pnt::Control_Pnt(): gp_Pnt() -{ - size=0; -} -Control_Pnt::Control_Pnt( const gp_Pnt& aPnt, - double theSize): gp_Pnt( aPnt ) -{ - size=theSize; -} -Control_Pnt::Control_Pnt(double theX, - double theY, - double theZ): gp_Pnt(theX, theY, theZ) -{ - size=0; -} -Control_Pnt::Control_Pnt(double theX, - double theY, - double theZ, - double theSize): gp_Pnt(theX, theY, theZ) -{ - size=theSize; -} - DriverGMF_Write::DriverGMF_Write(): Driver_SMESHDS_Mesh(), _exportRequiredGroups( true ) { @@ -121,7 +100,10 @@ Driver_Mesh::Status DriverGMF_Write::Perform() { Kernel_Utils::Localizer loc; - const int dim = 3, version = sizeof(long) == 4 ? 2 : 3; + if ( Driver_Mesh::IsMeshTooLarge< int >( myMesh, /*checkIDs =*/ false)) + return DRS_TOO_LARGE_MESH; + + const int dim = 3, version = sizeof(double) < 8 ? 1 : 2; int meshID = GmfOpenMesh( myFile.c_str(), GmfWrite, version, dim ); if ( !meshID ) @@ -136,7 +118,7 @@ Driver_Mesh::Status DriverGMF_Write::Perform() // nodes std::map< const SMDS_MeshNode* , int > node2IdMap; - int iN = 0, nbNodes = myMesh->NbNodes(); + smIdType iN = 0, nbNodes = myMesh->NbNodes(); GmfSetKwd( meshID, GmfVertices, nbNodes ); double xyz[3]; SMDS_NodeIteratorPtr nodeIt = myMesh->nodesIterator(); @@ -145,7 +127,7 @@ Driver_Mesh::Status DriverGMF_Write::Perform() const SMDS_MeshNode* n = nodeIt->next(); n->GetXYZ( xyz ); GmfSetLin( meshID, GmfVertices, xyz[0], xyz[1], xyz[2], n->getshapeId() ); - node2IdMap.insert( node2IdMap.end(), make_pair( n, ++iN )); + node2IdMap.insert( node2IdMap.end(), std::make_pair( n, ++iN )); } if ( iN != nbNodes ) return addMessage("Wrong nb of nodes returned by nodesIterator", /*fatal=*/true); @@ -225,10 +207,10 @@ Driver_Mesh::Status DriverGMF_Write::Perform() // pyramids BEGIN_ELEM_WRITE( SMDSEntity_Pyramid, GmfPyramids, pyra ) - node2IdMap[ pyra->GetNode( 0 )], + node2IdMap[ pyra->GetNode( 3 )], node2IdMap[ pyra->GetNode( 2 )], node2IdMap[ pyra->GetNode( 1 )], - node2IdMap[ pyra->GetNode( 3 )], + node2IdMap[ pyra->GetNode( 0 )], node2IdMap[ pyra->GetNode( 4 )], END_ELEM_WRITE( pyra ); @@ -296,19 +278,19 @@ Driver_Mesh::Status DriverGMF_Write::Perform() SMDSAbs_EntityType smdsEntity; std::string entity = groupName.substr( pos + strlen("_required_")); if ( entity == "Vertices" ) { - gmfKwd = GmfRequiredVertices; + gmfKwd = GmfRequiredVertices; smdsEntity = SMDSEntity_Node; } else if ( entity == "Edges" ) { - gmfKwd = GmfRequiredEdges; + gmfKwd = GmfRequiredEdges; smdsEntity = SMDSEntity_Edge; } else if ( entity == "Triangles" ) { - gmfKwd = GmfRequiredTriangles; + gmfKwd = GmfRequiredTriangles; smdsEntity = SMDSEntity_Triangle; } else if ( entity == "Quadrilaterals" ) { - gmfKwd = GmfRequiredQuadrilaterals; + gmfKwd = GmfRequiredQuadrilaterals; smdsEntity = SMDSEntity_Quadrangle; } else { @@ -330,11 +312,11 @@ Driver_Mesh::Status DriverGMF_Write::Perform() // choose a TElem2IDMap TElem2IDMap* elem2IDMap = 0; - if ( smdsEntity == SMDSEntity_Quadrangle && nbOkElems != myMesh->NbFaces() ) + if ( smdsEntity == SMDSEntity_Quadrangle && nbOkElems != myMesh->NbFaces() ) elem2IDMap = & quad2IDMap; else if ( smdsEntity == SMDSEntity_Triangle && nbOkElems != myMesh->NbFaces() ) elem2IDMap = & tria2IDMap; - else if ( smdsEntity == SMDSEntity_Edge && nbOkElems != myMesh->NbEdges() ) + else if ( smdsEntity == SMDSEntity_Edge && nbOkElems != myMesh->NbEdges() ) elem2IDMap = & edge2IDMap; // write the group @@ -365,7 +347,7 @@ Driver_Mesh::Status DriverGMF_Write::Perform() return DRS_OK; } -Driver_Mesh::Status DriverGMF_Write::PerformSizeMap( const std::vector& points ) +Driver_Mesh::Status DriverGMF_Write::PerformSizeMap( const std::vector& points ) { // const int dim = 3, version = sizeof(long) == 4 ? 2 : 3; const int dim = 3, version = 2; // Version 3 not supported by mg-hexa @@ -383,7 +365,7 @@ Driver_Mesh::Status DriverGMF_Write::PerformSizeMap( const std::vector::const_iterator points_it; + std::vector::const_iterator points_it; for (points_it = points.begin(); points_it != points.end(); points_it++ ) { GmfSetLin( verticesFileID, GmfVertices, points_it->X(), points_it->Y(), points_it->Z(), 0 );