2 #include "DriverUNV_W_SMESHDS_Mesh.h"
3 #include "DriverUNV_W_SMDS_Mesh.h"
5 #include "SMDS_MeshElement.hxx"
6 #include "SMDS_MeshNode.hxx"
12 #include "utilities.h"
14 #define sNODE_UNV_ID " 2411"
15 #define sELT_UNV_ID " 2412"
16 #define sUNV_SEPARATOR " -1"
17 #define sNODE_UNV_DESCR "%10d 1 1 11\n"
18 #define sELT_SURF_DESC "%10d %2d 1 1 11 %1d\n"
19 #define sELT_VOLU_DESC "%10d %2d 1 1 9 %1d\n"
20 #define sELT_BEAM_DESC1 "%10d %2d 1 1 7 %1d\n"
21 #define sELT_BEAM_DESC2 " 0 1 1\n"
23 DriverUNV_W_SMESHDS_Mesh::DriverUNV_W_SMESHDS_Mesh()
28 DriverUNV_W_SMESHDS_Mesh::~DriverUNV_W_SMESHDS_Mesh()
33 void DriverUNV_W_SMESHDS_Mesh::SetMesh(SMDS_Mesh * aMesh)
35 //myMesh = SMESHDS_Mesh *::DownCast(aMesh);
39 void DriverUNV_W_SMESHDS_Mesh::SetFile(string aFile)
44 void DriverUNV_W_SMESHDS_Mesh::SetFileId(FILE * aFileId)
49 void DriverUNV_W_SMESHDS_Mesh::SetMeshId(int aMeshId)
54 void DriverUNV_W_SMESHDS_Mesh::Write()
57 string myClass = string("SMDS_Mesh");
58 string myExtension = string("UNV");
60 DriverUNV_W_SMDS_Mesh *myWriter = new DriverUNV_W_SMDS_Mesh;
62 myWriter->SetMesh(myMesh);
63 myWriter->SetFile(myFile);
64 myWriter->SetMeshId(myMeshId);
65 //myWriter->SetFileId(myFileId);
71 void DriverUNV_W_SMESHDS_Mesh::Add()
76 char *file2Read = (char *)myFile.c_str();
77 myFileId = fopen(file2Read, "w+");
80 fprintf(stderr, ">> ERREUR : ouverture du fichier %s \n", file2Read);
84 /****************************************************************************
86 ****************************************************************************/
87 fprintf(stdout, "\n(****************************)\n");
88 fprintf(stdout, "(* INFORMATIONS GENERALES : *)\n");
89 fprintf(stdout, "(****************************)\n");
91 /* Combien de noeuds ? */
92 nbNodes = myMesh->NbNodes();
94 /* Combien de mailles, faces ou aretes ? */
95 int nb_of_nodes, nb_of_edges, nb_of_faces, nb_of_volumes;
96 nb_of_edges = myMesh->NbEdges();
97 nb_of_faces = myMesh->NbFaces();
98 nb_of_volumes = myMesh->NbVolumes();
99 nbCells = nb_of_edges + nb_of_faces + nb_of_volumes;
101 fprintf(stdout, "%d %d\n", nbNodes, nbCells);
102 //fprintf(myFileId,"%d %d\n",nbNodes,nbCells);
104 /****************************************************************************
105 * ECRITURE DES NOEUDS *
106 ****************************************************************************/
107 fprintf(stdout, "\n(************************)\n");
108 fprintf(stdout, "(* NOEUDS DU MAILLAGE : *)\n");
109 fprintf(stdout, "(************************)\n");
112 fprintf(myFileId, "%s\n", sUNV_SEPARATOR);
113 fprintf(myFileId, "%s\n", sNODE_UNV_ID);
115 SMDS_Iterator<const SMDS_MeshNode *> * itNodes=myMesh->nodesIterator();
116 while(itNodes->more())
118 const SMDS_MeshNode * node = itNodes->next();
120 fprintf(myFileId, sNODE_UNV_DESCR, node->GetID());
121 fprintf(myFileId, "%25.16E%25.16E%25.16E\n", node->X(), node->Y(),
125 fprintf(myFileId, "%s\n", sUNV_SEPARATOR);
127 /****************************************************************************
128 * ECRITURE DES ELEMENTS *
129 ****************************************************************************/
130 fprintf(stdout, "\n(**************************)\n");
131 fprintf(stdout, "(* ELEMENTS DU MAILLAGE : *)\n");
132 fprintf(stdout, "(**************************)");
133 /* Ecriture des connectivites, noms, numeros des mailles */
135 fprintf(myFileId, "%s\n", sUNV_SEPARATOR);
136 fprintf(myFileId, "%s\n", sELT_UNV_ID);
138 SMDS_Iterator<const SMDS_MeshEdge *> * itEdges=myMesh->edgesIterator();
139 while(itEdges->more())
141 const SMDS_MeshEdge * elem = itEdges->next();
142 SMDS_Iterator<const SMDS_MeshElement*> *itn=elem->nodesIterator();
144 switch (elem->NbNodes())
147 fprintf(myFileId, sELT_BEAM_DESC1, elem->GetID(), 21,
149 fprintf(myFileId, sELT_BEAM_DESC2);
150 fprintf(myFileId, "%10d%10d\n", itn->next()->GetID(),
151 itn->next()->GetID());
155 fprintf(myFileId, sELT_BEAM_DESC1, elem->GetID(), 24,
157 fprintf(myFileId, sELT_BEAM_DESC2);
158 fprintf(myFileId, "%10d%10d%10d\n", itn->next()->GetID(),
159 itn->next()->GetID(), itn->next()->GetID());
166 SMDS_Iterator<const SMDS_MeshFace*> * itFaces=myMesh->facesIterator();
167 while(itFaces->more())
169 const SMDS_MeshElement * elem = itFaces->next();
171 switch (elem->NbNodes())
175 fprintf(myFileId, sELT_SURF_DESC, elem->GetID(), 74,
179 // linear quadrilateral
180 fprintf(myFileId, sELT_SURF_DESC, elem->GetID(), 71,
184 // parabolic triangle
185 fprintf(myFileId, sELT_SURF_DESC, elem->GetID(), 72,
189 // parabolic quadrilateral
190 fprintf(myFileId, sELT_SURF_DESC, elem->GetID(), 75,
194 fprintf(myFileId, "element not registered\n");
197 SMDS_Iterator<const SMDS_MeshElement*> *itn=elem->nodesIterator();
198 while(itn->more()) fprintf(myFileId, "%10d", itn->next()->GetID());
201 fprintf(myFileId, "\n");
205 SMDS_Iterator<const SMDS_MeshVolume*> * itVolumes=myMesh->volumesIterator();
206 while(itVolumes->more())
208 const SMDS_MeshElement * elem = itVolumes->next();
210 switch (elem->NbNodes())
213 // linear tetrahedron
214 fprintf(myFileId, sELT_SURF_DESC, elem->GetID(), 111,
218 // linear tetrahedron
219 fprintf(myFileId, sELT_SURF_DESC, elem->GetID(), 112,
224 fprintf(myFileId, sELT_SURF_DESC, elem->GetID(), 115,
229 SMDS_Iterator<const SMDS_MeshElement*> *itn=elem->nodesIterator();
230 while(itn->more()) fprintf(myFileId, "%10d", itn->next()->GetID());
233 fprintf(myFileId, "\n");
236 fprintf(myFileId, "%s\n", sUNV_SEPARATOR);