2 #include "DriverDAT_R_SMDS_Mesh.h"
6 DriverDAT_R_SMDS_Mesh::DriverDAT_R_SMDS_Mesh() {
10 DriverDAT_R_SMDS_Mesh::~DriverDAT_R_SMDS_Mesh() {
14 void DriverDAT_R_SMDS_Mesh::SetMesh(Handle(SMDS_Mesh)& aMesh) {
18 void DriverDAT_R_SMDS_Mesh::SetFile(string aFile) {
22 void DriverDAT_R_SMDS_Mesh::SetFileId(FILE* aFileId) {
26 void DriverDAT_R_SMDS_Mesh::SetMeshId(int aMeshId) {
30 void DriverDAT_R_SMDS_Mesh::Add() {
34 void DriverDAT_R_SMDS_Mesh::Read() {
39 float coordX, coordY, coordZ;
42 int intNumMaille,Degre;
50 MESSAGE("in DriverDAT_R_SMDS_Mesh::Read()");
51 /****************************************************************************
52 * OUVERTURE DU FICHIER EN LECTURE *
53 ****************************************************************************/
54 char* file2Read = (char*)myFile.c_str();
55 myFileId = fopen(file2Read,"r");
58 fprintf(stderr,">> ERREUR : ouverture du fichier %s \n",file2Read);
62 fscanf(myFileId,"%d %d\n",&nbNodes,&nbCells);
64 /****************************************************************************
65 * LECTURE DES NOEUDS *
66 ****************************************************************************/
67 fprintf(stdout,"\n(************************)\n");
68 fprintf(stdout,"(* NOEUDS DU MAILLAGE : *)\n");
69 fprintf(stdout,"(************************)\n");
71 for (i=0;i<nbNodes;i++) {
72 fscanf(myFileId,"%d %e %e %e\n",&intNumPoint,&coordX,&coordY,&coordZ);
73 ok = myMesh->AddNodeWithID(coordX,coordY,coordZ,intNumPoint);
76 fprintf(stdout,"%d noeuds\n",myMesh->NbNodes());
77 /****************************************************************************
78 * LECTURE DES ELEMENTS *
79 ****************************************************************************/
80 fprintf(stdout,"\n(**************************)\n");
81 fprintf(stdout,"(* ELEMENTS DU MAILLAGE : *)\n");
82 fprintf(stdout,"(**************************)");
84 fprintf(stdout,"%d elements\n",nbCells);
86 for (i=0; i<nbCells; i++) {
87 fscanf(myFileId,"%d %d",&intNumMaille,&ValElement);
88 Degre=abs(ValElement/100);
89 nbNoeuds=ValElement-(Degre*100);
91 // Recuperation des noeuds de la maille
92 for (j=0; j<nbNoeuds; j++) {
93 fscanf(myFileId,"%d",&NoeudMaille);
94 NoeudsMaille[j]=NoeudMaille;
97 // Analyse des cas de cellules
104 ok = myMesh->AddEdgeWithID(NoeudsMaille[0],NoeudsMaille[1],intNumMaille);
112 ok = myMesh->AddFaceWithID(NoeudsMaille[0],NoeudsMaille[1],NoeudsMaille[2],NoeudsMaille[3],intNumMaille);
120 ok = myMesh->AddFaceWithID(NoeudsMaille[0],NoeudsMaille[1],NoeudsMaille[2],intNumMaille);
128 if (ValElement==320) {
129 //A voir, correspondance VTK
130 NoeudsMaille[4]=NoeudsMaille[8];
131 NoeudsMaille[5]=NoeudsMaille[9];
132 NoeudsMaille[6]=NoeudsMaille[10];
133 NoeudsMaille[7]=NoeudsMaille[11];
135 ok = myMesh->AddVolumeWithID(NoeudsMaille[0],NoeudsMaille[1],NoeudsMaille[2],NoeudsMaille[3],NoeudsMaille[4],NoeudsMaille[5],NoeudsMaille[6],NoeudsMaille[7],intNumMaille);
144 NoeudsMaille[3]=NoeudsMaille[6];
145 ok = myMesh->AddVolumeWithID(NoeudsMaille[0],NoeudsMaille[1],NoeudsMaille[2],NoeudsMaille[3],intNumMaille);
153 if (ValElement==315) {
154 NoeudsMaille[3]=NoeudsMaille[6];
155 NoeudsMaille[4]=NoeudsMaille[7];
156 NoeudsMaille[5]=NoeudsMaille[8];
158 NoeudsMaille[7]=NoeudsMaille[5];
159 NoeudsMaille[6]=NoeudsMaille[5];
160 NoeudsMaille[5]=NoeudsMaille[4];
161 NoeudsMaille[4]=NoeudsMaille[3];
162 NoeudsMaille[3]=NoeudsMaille[2];
163 ok = myMesh->AddVolumeWithID(NoeudsMaille[0],NoeudsMaille[1],NoeudsMaille[2],NoeudsMaille[3],NoeudsMaille[4],NoeudsMaille[5],intNumMaille);
170 /****************************************************************************
171 * FERMETURE DU FICHIER *
172 ****************************************************************************/