X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FDriverGMF%2FDriverGMF_Write.cxx;h=4192119a25dfabc311f02c672c58b93a7e0de6e7;hp=d4f474771395ce3206d9c9deeb1bf8634901d7b6;hb=954f7dbf60bd56a5ac6a85c063d459c589c9d096;hpb=6d0acadd44c80b820b712557cfa7f286a46d9e8c diff --git a/src/DriverGMF/DriverGMF_Write.cxx b/src/DriverGMF/DriverGMF_Write.cxx index d4f474771..4192119a2 100644 --- a/src/DriverGMF/DriverGMF_Write.cxx +++ b/src/DriverGMF/DriverGMF_Write.cxx @@ -32,6 +32,8 @@ #include +#include "utilities.h" + extern "C" { #include "libmesh5.h" @@ -76,7 +78,30 @@ extern "C" #define END_EXTRA_VERTICES_WRITE() \ ); \ }}}} + +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 ) @@ -340,6 +365,45 @@ Driver_Mesh::Status DriverGMF_Write::Perform() return DRS_OK; } +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 + + // Open files + int verticesFileID = GmfOpenMesh( myVerticesFile.c_str(), GmfWrite, version, dim ); + int solFileID = GmfOpenMesh( mySolFile.c_str(), GmfWrite, version, dim ); + + int pointsNumber = points.size(); + + // Vertices Keyword + GmfSetKwd( verticesFileID, GmfVertices, pointsNumber ); + // SolAtVertices Keyword + int TypTab[] = {GmfSca}; + GmfSetKwd(solFileID, GmfSolAtVertices, pointsNumber, 1, TypTab); + + // Read the control points information from the vector and write it into the files + 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 ); + double ValTab[] = {points_it->Size()}; + GmfSetLin( solFileID, GmfSolAtVertices, ValTab); + } + + // Close Files + GmfCloseMesh( verticesFileID ); + GmfCloseMesh( solFileID ); +} + +std::vector DriverGMF_Write::GetSizeMapFiles() +{ + std::vector files; + files.push_back(myVerticesFile); + files.push_back(mySolFile); + return files; +} + //================================================================================ /*! * \brief Returns an iterator on elements of a certain type