#include <Basics_Utils.hxx>
+#include "utilities.h"
+
extern "C"
{
#include "libmesh5.h"
#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 )
return DRS_OK;
}
-// void DriverGMF_Write::AddSizeMapSection(int meshID, int nbControlPoints)
-// {
-// // const int dim = 3, version = sizeof(long) == 4 ? 2 : 3;
-// // int meshID = GmfOpenMesh( myFile.c_str(), GmfWrite, version, dim );
-// int TypTab[] = {GmfSca};
-// GmfSetKwd(meshID, GmfSolAtVertices, nbControlPoints, 1, TypTab);
-// // GmfCloseMesh(meshID);
-// // return DRS_OK;
-// }
-//
-// void DriverGMF_Write::AppendSize(int meshID, double size)
-// {
-// // const int dim = 3, version = sizeof(long) == 4 ? 2 : 3;
-// // int meshID = GmfOpenMesh( myFile.c_str(), GmfWrite, version, dim );
-// // int nbPoints = GmfStatKwd( meshID, GmfSolAtVertices);
-// // GmfSetKwd( meshID, GmfSolAtVertices, nbPoints+1, 1, 1 );
-// double ValTab[] = {size};
-// GmfSetLin( meshID, GmfSolAtVertices, ValTab);
-// // return DRS_OK;
-// }
-//
-// int DriverGMF_Write::NbVerticesInFile()
-// {
-// int dim, version;
-// // open the file
-// int meshID = GmfOpenMesh( myFile.c_str(), GmfRead, &version, &dim );
-// int nbVertices = GmfStatKwd( meshID, GmfVertices);
-// return nbVertices;
-// }
-//
-// int DriverGMF_Write::OpenFileToWrite()
-// {
-// const int dim = 3, version = sizeof(long) == 4 ? 2 : 3;
-// int meshID = GmfOpenMesh( myFile.c_str(), GmfWrite, version, dim );
-// return meshID;
-// }
-//
-// void DriverGMF_Write::CloseFile( int meshID )
-// {
-// GmfCloseMesh( meshID );
-// }
-
-void DriverGMF_Write::WriteSizeMapFromMesh( double size )
+Driver_Mesh::Status DriverGMF_Write::PerformSizeMap( const std::vector<Control_Pnt>& points )
{
- // Open file
- const int dim = 3, version = sizeof(long) == 4 ? 2 : 3;
- int meshID = GmfOpenMesh( myFile.c_str(), GmfWrite, version, dim );
+// const int dim = 3, version = sizeof(long) == 4 ? 2 : 3;
+ const int dim = 3, version = 2; // Version 3 not supported by mg-hexa
+ std::string aVerticesFile = mySizeMapPrefix + ".mesh";
+ std::string aSolFile = mySizeMapPrefix + ".sol";
- // Vertices Keyword
- int iN = 0, nbNodes = myMesh->NbNodes();
- GmfSetKwd( meshID, GmfVertices, nbNodes );
- double xyz[3];
- SMDS_NodeIteratorPtr nodeIt = myMesh->nodesIterator();
- while ( nodeIt->more() )
- {
- const SMDS_MeshNode* n = nodeIt->next();
- n->GetXYZ( xyz );
- GmfSetLin( meshID, GmfVertices, xyz[0], xyz[1], xyz[2], n->getshapeId() );
- }
+ // Open files
+ int verticesFileID = GmfOpenMesh( aVerticesFile.c_str(), GmfWrite, version, dim );
+ int solFileID = GmfOpenMesh( aSolFile.c_str(), GmfWrite, version, dim );
+
+ int pointsNumber = points.size();
- // solAtVertices Keyword
+ // Vertices Keyword
+ GmfSetKwd( verticesFileID, GmfVertices, pointsNumber );
+ // SolAtVertices Keyword
int TypTab[] = {GmfSca};
- GmfSetKwd(meshID, GmfSolAtVertices, nbNodes, 1, TypTab);
- for ( int i=1; i<= nbNodes; i++)
+ GmfSetKwd(solFileID, GmfSolAtVertices, pointsNumber, 1, TypTab);
+
+ // Read the control points information from the vector and write it into the files
+ std::vector<Control_Pnt>::const_iterator points_it;
+ for (points_it = points.begin(); points_it != points.end(); points_it++ )
{
- double ValTab[] = {size};
- GmfSetLin( meshID, GmfSolAtVertices, ValTab);
- }
+ GmfSetLin( verticesFileID, GmfVertices, points_it->X(), points_it->Y(), points_it->Z(), 0 );
+ double ValTab[] = {points_it->Size()};
+ GmfSetLin( solFileID, GmfSolAtVertices, ValTab);
+ }
- // Close File
- GmfCloseMesh( meshID );
+ // Close Files
+ GmfCloseMesh( verticesFileID );
+ GmfCloseMesh( solFileID );
}
//================================================================================