From 954f7dbf60bd56a5ac6a85c063d459c589c9d096 Mon Sep 17 00:00:00 2001 From: rnc Date: Thu, 22 Aug 2013 11:45:25 +0000 Subject: [PATCH] Merge from BR_size_maps --- src/DriverGMF/DriverGMF_Write.cxx | 64 +++++++++++++++++++++++++++++++ src/DriverGMF/DriverGMF_Write.hxx | 33 +++++++++++++++- 2 files changed, 96 insertions(+), 1 deletion(-) 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 diff --git a/src/DriverGMF/DriverGMF_Write.hxx b/src/DriverGMF/DriverGMF_Write.hxx index 96c7df16e..b6b41bced 100644 --- a/src/DriverGMF/DriverGMF_Write.hxx +++ b/src/DriverGMF/DriverGMF_Write.hxx @@ -33,6 +33,26 @@ #include "SMDSAbs_ElementType.hxx" #include "SMDS_ElemIterator.hxx" +#include + +/*! + * \brief Class for storing control points for writing GMF size maps + */ +class Control_Pnt : public gp_Pnt +{ +public: + Control_Pnt(); + Control_Pnt(const gp_Pnt& aPnt, double theSize); + Control_Pnt(double x, double y, double z); + Control_Pnt(double x, double y, double z, double size); + + double Size() const { return size; }; + void SetSize( double theSize ) { size = theSize; }; + +private: + double size; +}; + /*! * \brief Driver Writing a mesh into a GMF file. */ @@ -47,8 +67,17 @@ public: { _exportRequiredGroups = toExport; } - + virtual Status Perform(); + + // Size Maps + Status PerformSizeMap( const std::vector& points ); + void SetSizeMapPrefix( std::string prefix ) + { + myVerticesFile = prefix + ".mesh"; + mySolFile = prefix + ".sol"; + }; + std::vector GetSizeMapFiles(); private: @@ -57,6 +86,8 @@ public: SMDS_ElemIteratorPtr elementIterator(SMDSAbs_GeometryType type); bool _exportRequiredGroups; + std::string myVerticesFile; + std::string mySolFile; }; #endif -- 2.30.2