Salome HOME
NRI : First integration.
[modules/smesh.git] / src / DriverDAT / DriverDAT_W_SMDS_Mesh.cxx
1 using namespace std;
2 #include "DriverDAT_W_SMDS_Mesh.h"
3
4 #include "SMDS_MeshElement.hxx"
5 #include "SMDS_MeshNode.hxx"
6 #include "SMDS_MeshEdgesIterator.hxx"
7 #include "SMDS_MeshFacesIterator.hxx"
8 #include "SMDS_MeshNodesIterator.hxx"
9 #include "SMDS_MeshVolumesIterator.hxx"
10
11 #include "utilities.h"
12
13 DriverDAT_W_SMDS_Mesh::DriverDAT_W_SMDS_Mesh() {
14 ;
15 }
16
17 DriverDAT_W_SMDS_Mesh::~DriverDAT_W_SMDS_Mesh() {
18 ;
19 }
20
21 void DriverDAT_W_SMDS_Mesh::SetMesh(Handle(SMDS_Mesh)& aMesh) {
22   myMesh = aMesh;
23 }
24
25 void DriverDAT_W_SMDS_Mesh::SetFile(string aFile) {
26   myFile = aFile;
27 }
28
29 void DriverDAT_W_SMDS_Mesh::SetFileId(FILE* aFileId) {
30   myFileId = aFileId;
31 }
32
33 void DriverDAT_W_SMDS_Mesh::SetMeshId(int aMeshId) {
34   myMeshId = aMeshId;
35 }
36
37 void DriverDAT_W_SMDS_Mesh::Add() {
38   ;
39 }
40
41 void DriverDAT_W_SMDS_Mesh::Write() {
42
43   int nbNodes,nbCells;
44   int i;
45
46   char* file2Read = (char*)myFile.c_str();
47   myFileId = fopen(file2Read,"w+");
48   if (myFileId < 0)
49     {
50       fprintf(stderr,">> ERREUR : ouverture du fichier %s \n",file2Read);
51       exit(EXIT_FAILURE);
52     }
53   SCRUTE(myMesh);
54   /****************************************************************************
55   *                       NOMBRES D'OBJETS                                    *
56   ****************************************************************************/
57   fprintf(stdout,"\n(****************************)\n");
58   fprintf(stdout,"(* INFORMATIONS GENERALES : *)\n");
59   fprintf(stdout,"(****************************)\n");
60
61   /* Combien de noeuds ? */
62   nbNodes = myMesh->NbNodes();
63
64   /* Combien de mailles, faces ou aretes ? */
65   Standard_Integer nb_of_nodes, nb_of_edges,nb_of_faces, nb_of_volumes;
66   nb_of_edges = myMesh->NbEdges();
67   nb_of_faces = myMesh->NbFaces();
68   nb_of_volumes = myMesh->NbVolumes();
69   nbCells = nb_of_edges + nb_of_faces + nb_of_volumes;
70   SCRUTE(nb_of_edges);
71   SCRUTE(nb_of_faces);
72   SCRUTE(nb_of_volumes);
73
74   fprintf(stdout,"%d %d\n",nbNodes,nbCells);
75   fprintf(myFileId,"%d %d\n",nbNodes,nbCells);
76
77   /****************************************************************************
78   *                       ECRITURE DES NOEUDS                                 *
79   ****************************************************************************/
80   fprintf(stdout,"\n(************************)\n");
81   fprintf(stdout,"(* NOEUDS DU MAILLAGE : *)\n");
82   fprintf(stdout,"(************************)\n");
83
84   SMDS_MeshNodesIterator itNodes(myMesh);
85   for (;itNodes.More();itNodes.Next()) {
86     const Handle(SMDS_MeshElement)& elem = itNodes.Value();
87     const Handle(SMDS_MeshNode)& node = myMesh->GetNode(1,elem);
88  
89     fprintf(myFileId,"%d %e %e %e\n",node->GetID(),node->X(),node->Y(),node->Z());
90   }
91
92   /****************************************************************************
93   *                       ECRITURE DES ELEMENTS                                *
94   ****************************************************************************/
95   fprintf(stdout,"\n(**************************)\n");
96   fprintf(stdout,"(* ELEMENTS DU MAILLAGE : *)\n");
97   fprintf(stdout,"(**************************)");
98   /* Ecriture des connectivites, noms, numeros des mailles */
99
100   SMDS_MeshEdgesIterator itEdges(myMesh);
101   for (;itEdges.More();itEdges.Next()) {
102     const Handle(SMDS_MeshElement)& elem = itEdges.Value();
103
104     switch (elem->NbNodes()) {
105     case 2 : {
106       fprintf(myFileId,"%d %d ",elem->GetID(),102);
107       break;
108     } 
109     case 3 : {
110       fprintf(myFileId,"%d %d ",elem->GetID(),103);
111       break;
112     }
113     }
114
115     for (i=0;i<elem->NbNodes();i++)
116       fprintf(myFileId,"%d ",elem->GetConnection(i+1));
117     
118     fprintf(myFileId,"\n");
119   }
120
121   SMDS_MeshFacesIterator itFaces(myMesh);
122   for (;itFaces.More();itFaces.Next()) {
123     const Handle(SMDS_MeshElement)& elem = itFaces.Value();
124
125     switch (elem->NbNodes()) {
126     case 3 : {
127       fprintf(myFileId,"%d %d ",elem->GetID(),203);
128       break;
129     }
130     case 4 : {
131       fprintf(myFileId,"%d %d ",elem->GetID(),204);
132       break;
133     }
134     case 6 : {
135       fprintf(myFileId,"%d %d ",elem->GetID(),206);
136       break;
137     }
138     }
139
140     for (i=0;i<elem->NbNodes();i++)
141       fprintf(myFileId,"%d ",elem->GetConnection(i+1));
142     
143     fprintf(myFileId,"\n");
144   }
145
146   SMDS_MeshVolumesIterator itVolumes(myMesh);
147   for (;itVolumes.More();itVolumes.Next()) {
148     const Handle(SMDS_MeshElement)& elem = itVolumes.Value();
149
150     switch (elem->NbNodes()) {
151     case 8 : {
152       fprintf(myFileId,"%d %d ",elem->GetID(),308);
153       break;
154     }
155     }
156
157     for (i=0;i<elem->NbNodes();i++)
158       fprintf(myFileId,"%d ",elem->GetConnection(i+1));
159     
160     fprintf(myFileId,"\n");
161   }
162
163   fclose (myFileId);
164 }