1 // SMESH DriverDAT : driver to read and write 'dat' files
3 // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
24 // File : DriverDAT_R_SMDS_Mesh.cxx
28 #include "DriverDAT_R_SMDS_Mesh.h"
30 #include "utilities.h"
32 DriverDAT_R_SMDS_Mesh::DriverDAT_R_SMDS_Mesh() {
36 DriverDAT_R_SMDS_Mesh::~DriverDAT_R_SMDS_Mesh() {
40 void DriverDAT_R_SMDS_Mesh::SetMesh(Handle(SMDS_Mesh)& aMesh) {
44 void DriverDAT_R_SMDS_Mesh::SetFile(string aFile) {
48 void DriverDAT_R_SMDS_Mesh::SetFileId(FILE* aFileId) {
52 void DriverDAT_R_SMDS_Mesh::SetMeshId(int aMeshId) {
56 void DriverDAT_R_SMDS_Mesh::Add() {
60 void DriverDAT_R_SMDS_Mesh::Read() {
65 float coordX, coordY, coordZ;
68 int intNumMaille,Degre;
76 MESSAGE("in DriverDAT_R_SMDS_Mesh::Read()");
77 /****************************************************************************
78 * OUVERTURE DU FICHIER EN LECTURE *
79 ****************************************************************************/
80 char* file2Read = (char*)myFile.c_str();
81 myFileId = fopen(file2Read,"r");
84 fprintf(stderr,">> ERREUR : ouverture du fichier %s \n",file2Read);
88 fscanf(myFileId,"%d %d\n",&nbNodes,&nbCells);
90 /****************************************************************************
91 * LECTURE DES NOEUDS *
92 ****************************************************************************/
93 fprintf(stdout,"\n(************************)\n");
94 fprintf(stdout,"(* NOEUDS DU MAILLAGE : *)\n");
95 fprintf(stdout,"(************************)\n");
97 for (i=0;i<nbNodes;i++) {
98 fscanf(myFileId,"%d %e %e %e\n",&intNumPoint,&coordX,&coordY,&coordZ);
99 ok = myMesh->AddNodeWithID(coordX,coordY,coordZ,intNumPoint);
102 fprintf(stdout,"%d noeuds\n",myMesh->NbNodes());
103 /****************************************************************************
104 * LECTURE DES ELEMENTS *
105 ****************************************************************************/
106 fprintf(stdout,"\n(**************************)\n");
107 fprintf(stdout,"(* ELEMENTS DU MAILLAGE : *)\n");
108 fprintf(stdout,"(**************************)");
110 fprintf(stdout,"%d elements\n",nbCells);
112 for (i=0; i<nbCells; i++) {
113 fscanf(myFileId,"%d %d",&intNumMaille,&ValElement);
114 Degre=abs(ValElement/100);
115 nbNoeuds=ValElement-(Degre*100);
117 // Recuperation des noeuds de la maille
118 for (j=0; j<nbNoeuds; j++) {
119 fscanf(myFileId,"%d",&NoeudMaille);
120 NoeudsMaille[j]=NoeudMaille;
123 // Analyse des cas de cellules
124 switch (ValElement) {
130 ok = myMesh->AddEdgeWithID(NoeudsMaille[0],NoeudsMaille[1],intNumMaille);
138 ok = myMesh->AddFaceWithID(NoeudsMaille[0],NoeudsMaille[1],NoeudsMaille[2],NoeudsMaille[3],intNumMaille);
146 ok = myMesh->AddFaceWithID(NoeudsMaille[0],NoeudsMaille[1],NoeudsMaille[2],intNumMaille);
154 if (ValElement==320) {
155 //A voir, correspondance VTK
156 NoeudsMaille[4]=NoeudsMaille[8];
157 NoeudsMaille[5]=NoeudsMaille[9];
158 NoeudsMaille[6]=NoeudsMaille[10];
159 NoeudsMaille[7]=NoeudsMaille[11];
161 ok = myMesh->AddVolumeWithID(NoeudsMaille[0],NoeudsMaille[1],NoeudsMaille[2],NoeudsMaille[3],NoeudsMaille[4],NoeudsMaille[5],NoeudsMaille[6],NoeudsMaille[7],intNumMaille);
170 NoeudsMaille[3]=NoeudsMaille[6];
171 ok = myMesh->AddVolumeWithID(NoeudsMaille[0],NoeudsMaille[1],NoeudsMaille[2],NoeudsMaille[3],intNumMaille);
179 if (ValElement==315) {
180 NoeudsMaille[3]=NoeudsMaille[6];
181 NoeudsMaille[4]=NoeudsMaille[7];
182 NoeudsMaille[5]=NoeudsMaille[8];
184 NoeudsMaille[7]=NoeudsMaille[5];
185 NoeudsMaille[6]=NoeudsMaille[5];
186 NoeudsMaille[5]=NoeudsMaille[4];
187 NoeudsMaille[4]=NoeudsMaille[3];
188 NoeudsMaille[3]=NoeudsMaille[2];
189 ok = myMesh->AddVolumeWithID(NoeudsMaille[0],NoeudsMaille[1],NoeudsMaille[2],NoeudsMaille[3],NoeudsMaille[4],NoeudsMaille[5],intNumMaille);
196 /****************************************************************************
197 * FERMETURE DU FICHIER *
198 ****************************************************************************/