#include <Basics_Utils.hxx>
+#include "utilities.h"
+
extern "C"
{
#include "libmesh5.h"
#define END_EXTRA_VERTICES_WRITE() \
); \
}}}}
-
-
+
+
DriverGMF_Write::DriverGMF_Write():
- Driver_SMESHDS_Mesh(), _exportRequiredGroups( true ), mySizeMapVerticesNumber( 0 ), mySizeMapMeshes(), myLocalSizes()
+ Driver_SMESHDS_Mesh(), _exportRequiredGroups( true ), mySizeMapVerticesNumber( 0 ), mySizeMapMeshes(), myLocalSizes()//, mySizeMaps()
{
}
DriverGMF_Write::~DriverGMF_Write()
myLocalSizes.push_back(TLocalSize(mesh->NbNodes(), size));
}
+void DriverGMF_Write::AddSizeMap( const std::vector<gp_Pnt>& points, double size )
+{
+// TSizeMap aMap( points, size );
+// mySizeMaps.push_back( aMap );
+ std::vector<gp_Pnt>::const_iterator it;
+ for( it = points.begin(); it != points.end(); it++)
+ {
+ myPoints.push_back( *it );
+ }
+ mySizeMapVerticesNumber += points.size();
+ myLocalSizes.push_back(TLocalSize(points.size(), size));
+}
+
Driver_Mesh::Status DriverGMF_Write::PerformSizeMap()
{
- // 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";
+
+ // Open files
+ int verticesFileID = GmfOpenMesh( aVerticesFile.c_str(), GmfWrite, version, dim );
+ int solFileID = GmfOpenMesh( aSolFile.c_str(), GmfWrite, version, dim );
// Vertices Keyword
- GmfSetKwd( meshID, GmfVertices, mySizeMapVerticesNumber );
- double xyz[3];
- std::vector<SMESHDS_Mesh*>::iterator meshes_it;
- SMESHDS_Mesh* aMesh;
+ GmfSetKwd( verticesFileID, GmfVertices, mySizeMapVerticesNumber );
- // Iterate on size map meshes
- for (meshes_it = mySizeMapMeshes.begin(); meshes_it != mySizeMapMeshes.end(); meshes_it++ )
+ std::vector<gp_Pnt>::iterator points_it;
+ // Iterate on sizeMaps
+ for (points_it = myPoints.begin(); points_it != myPoints.end(); points_it++ )
{
- aMesh= *meshes_it;
- SMDS_NodeIteratorPtr nodeIt = aMesh->nodesIterator();
-
- // Iterate on the nodes of the mesh and write their coordinates under the GmfVertices keyword
- while ( nodeIt->more() )
- {
- const SMDS_MeshNode* n = nodeIt->next();
- n->GetXYZ( xyz );
- GmfSetLin( meshID, GmfVertices, xyz[0], xyz[1], xyz[2], n->getshapeId() );
- }
+// MESSAGE("Point : X = "<<points_it->X()<<", Y ="<<points_it->Y()<<", Z = "<<points_it->Z())
+ GmfSetLin( verticesFileID, GmfVertices, points_it->X(), points_it->Y(), points_it->Z(), 0 );
}
-
+
// SolAtVertices Keyword
int TypTab[] = {GmfSca};
- GmfSetKwd(meshID, GmfSolAtVertices, mySizeMapVerticesNumber, 1, TypTab);
-
+ GmfSetKwd(solFileID, GmfSolAtVertices, mySizeMapVerticesNumber, 1, TypTab);
std::vector<TLocalSize>::iterator sizes_it;
for ( sizes_it = myLocalSizes.begin(); sizes_it != myLocalSizes.end(); sizes_it++ )
{
- for ( int i = 1; i <= sizes_it->nbNodes; i++ )
+ for ( int i = 1; i <= sizes_it->nbPoints ; i++ )
{
double ValTab[] = {sizes_it->size};
- GmfSetLin( meshID, GmfSolAtVertices, ValTab);
+ GmfSetLin( solFileID, GmfSolAtVertices, ValTab);
}
}
- // Close File
- GmfCloseMesh( meshID );
+ // Close Files
+ GmfCloseMesh( verticesFileID );
+ GmfCloseMesh( solFileID );
}
+// Driver_Mesh::Status DriverGMF_Write::PerformSizeMap()
+// {
+// // 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";
+//
+// // Open files
+// int verticesFileID = GmfOpenMesh( aVerticesFile.c_str(), GmfWrite, version, dim );
+// int solFileID = GmfOpenMesh( aSolFile.c_str(), GmfWrite, version, dim );
+//
+// // Vertices Keyword
+// GmfSetKwd( verticesFileID, GmfVertices, mySizeMapVerticesNumber );
+// double xyz[3];
+// std::vector<SMESHDS_Mesh*>::iterator meshes_it;
+// SMESHDS_Mesh* aMesh;
+//
+// // Iterate on size map meshes
+// for (meshes_it = mySizeMapMeshes.begin(); meshes_it != mySizeMapMeshes.end(); meshes_it++ )
+// {
+// aMesh= *meshes_it;
+// SMDS_NodeIteratorPtr nodeIt = aMesh->nodesIterator();
+//
+// // Iterate on the nodes of the mesh and write their coordinates under the GmfVertices keyword
+// while ( nodeIt->more() )
+// {
+// const SMDS_MeshNode* n = nodeIt->next();
+// n->GetXYZ( xyz );
+// GmfSetLin( verticesFileID, GmfVertices, xyz[0], xyz[1], xyz[2], n->getshapeId() );
+// }
+// }
+//
+// // SolAtVertices Keyword
+// int TypTab[] = {GmfSca};
+// GmfSetKwd(solFileID, GmfSolAtVertices, mySizeMapVerticesNumber, 1, TypTab);
+//
+// std::vector<TLocalSize>::iterator sizes_it;
+// for ( sizes_it = myLocalSizes.begin(); sizes_it != myLocalSizes.end(); sizes_it++ )
+// {
+// for ( int i = 1; i <= sizes_it->nbNodes; i++ )
+// {
+// double ValTab[] = {sizes_it->size};
+// GmfSetLin( solFileID, GmfSolAtVertices, ValTab);
+// }
+// }
+//
+// // Close Files
+// GmfCloseMesh( verticesFileID );
+// GmfCloseMesh( solFileID );
+// }
+
// void DriverGMF_Write::WriteSizeMapFromMesh( double size )
// {
// // Open file
#include "SMDSAbs_ElementType.hxx"
#include "SMDS_ElemIterator.hxx"
+#include <gp_Pnt.hxx>
+
struct TLocalSize
{
- TLocalSize( int theNbNodes, double theSize)
+ TLocalSize( int theNbPoints, double theSize)
{
- nbNodes = theNbNodes;
+ nbPoints = theNbPoints;
size = theSize;
}
- int nbNodes;
+ int nbPoints;
double size;
};
+// struct gp_Pnt
+// {
+// gp_Pnt( double theX, double theY, double theZ )
+// {
+// x = theX;
+// y = theY;
+// z = theZ;
+// };
+// double x;
+// double y;
+// double z;
+// };
+
+// class TSizeMap
+// {
+// public:
+// TSizeMap():
+// points(), size(0.0)
+// {
+// };
+//
+// TSizeMap(const std::vector<gp_Pnt>& thePoints, double theSize )
+// {
+// points = thePoints;
+// size = theSize;
+// };
+//
+// double GetSize(){ return size; };
+// std::vector<gp_Pnt> GetPoints(){ return points; };
+//
+// private:
+// std::vector<gp_Pnt> points;
+// double size;
+// };
+
/*!
* \brief Driver Writing a mesh into a GMF file.
*/
virtual Status Perform();
Status PerformSizeMap();
void AddSizeMapFromMesh( SMESHDS_Mesh* mesh, double size);
+ void AddSizeMap( const std::vector<gp_Pnt>& points, double size );
+ void SetSizeMapPrefix( std::string prefix )
+ {
+ mySizeMapPrefix = prefix;
+ };
// void WriteSizeMapFromMesh( double size );
// void AddSizeMapSection( int meshID, int nbControlPoints );
// void AppendSize( int meshID, double size );
bool _exportRequiredGroups;
int mySizeMapVerticesNumber;
+ std::string mySizeMapPrefix;
std::vector<SMESHDS_Mesh*> mySizeMapMeshes;
std::vector<TLocalSize> myLocalSizes;
+ std::vector<gp_Pnt> myPoints;
+// std::vector<TSizeMap> mySizeMaps;
};
#endif