Salome HOME
ca50c550e1b9299c6034850f4a241212e22743fd
[modules/smesh.git] / src / DriverMED / DriverMED_R_SMESHDS_Document.cxx
1 //  SMESH DriverMED : driver to read and write 'med' files
2 //
3 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
5 // 
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. 
10 // 
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. 
15 // 
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 
19 // 
20 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
21 //
22 //
23 //
24 //  File   : DriverMED_R_SMESHDS_Document.cxx
25 //  Module : SMESH
26
27 using namespace std;
28 #include "DriverMED_R_SMESHDS_Document.h"
29 #include "DriverMED_R_SMESHDS_Mesh.h"
30 #include "utilities.h"
31
32 extern "C"
33 {
34         Document_Reader *maker()
35         {
36                 return new DriverMED_R_SMESHDS_Document;
37         }
38 }
39
40 DriverMED_R_SMESHDS_Document::DriverMED_R_SMESHDS_Document()
41 {
42         ;
43 }
44
45 DriverMED_R_SMESHDS_Document::~DriverMED_R_SMESHDS_Document()
46 {
47         ;
48 }
49
50 //void DriverMED_R_SMESHDS_Document::SetFile(string aFile) {
51 //  myFile = aFile;
52 //}
53
54 void DriverMED_R_SMESHDS_Document::Read()
55 {
56
57         med_err ret = 0;
58         med_idt fid;
59         med_int nmaa;
60
61         int myMeshId;
62
63         //string myFile = string("/home/home_users/cai/projects/salome_prev04/SALOME_ROOT/data/fra1.med");
64
65 /****************************************************************************
66   *                      OUVERTURE DU FICHIER EN LECTURE                      *
67   ****************************************************************************/
68         char *file2Read = (char *)myFile.c_str();
69         fid = MEDouvrir(file2Read, MED_LECT);
70         if (fid < 0)
71         {
72                 fprintf(stderr, ">> ERREUR : ouverture du fichier %s \n", file2Read);
73                 exit(EXIT_FAILURE);
74         }
75
76   /****************************************************************************
77   *                      COMBIEN DE MAILLAGES ?                               *
78   ****************************************************************************/
79         nmaa = MEDnMaa(fid);
80         if (nmaa < 0)
81         {
82                 fprintf(stderr, ">> ERREUR : lecture du nombre de maillages \n");
83                 exit(EXIT_FAILURE);
84         }
85         printf("Nombre de maillages = %d\n", nmaa);
86
87         string myClass = string("SMESHDS_Mesh");
88         string myExtension = string("MED");
89
90         for (int meshIt = 1; meshIt <= nmaa; meshIt++)
91         {
92                 myMeshId = myDocument->NewMesh();
93                 printf("MeshId = %d\n", myMeshId);
94
95                 SMDS_Mesh * myMesh = myDocument->GetMesh(myMeshId);
96                 SCRUTE(myMesh);
97
98                 // Handle (SMDS_Mesh) MMM =.........
99                 //ex SMESHDS_Mesh * myMesh2 =SMESHDS_Mesh *::DownCast(MMM);
100
101                 DriverMED_R_SMESHDS_Mesh *myReader = new DriverMED_R_SMESHDS_Mesh;
102
103                 myReader->SetMesh(myMesh);
104                 myReader->SetMeshId(myMeshId);
105
106                 //myReader->SetFile(myFile);
107                 SCRUTE(fid);
108                 myReader->SetFileId(fid);
109
110                 myReader->Add();
111
112         }
113
114   /****************************************************************************
115   *                      FERMETURE DU FICHIER                                 *
116   ****************************************************************************/
117         ret = MEDfermer(fid);
118
119         if (ret != 0)
120                 fprintf(stderr, ">> ERREUR : erreur a la fermeture du fichier %s\n",
121                         file2Read);
122
123 }