]> SALOME platform Git repositories - modules/smesh.git/blobdiff - src/DriverGMF/DriverGMF_Write.cxx
Salome HOME
REG: SMESH/DriverGMF: Great simplification of the size maps files writing for Hexotic...
[modules/smesh.git] / src / DriverGMF / DriverGMF_Write.cxx
index 36b94df474e77ffb81576aa3ae61d3e6439274ac..49f3ff00ca1483e60a817797b7ece81d0fc5be57 100644 (file)
@@ -32,6 +32,8 @@
 
 #include <Basics_Utils.hxx>
 
+#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,77 +365,37 @@ Driver_Mesh::Status DriverGMF_Write::Perform()
   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 );
 }
 
 //================================================================================