Salome HOME
Merging with the MAN_SALOME2 branch
[modules/med.git] / src / MedClient / src / COORDINATEClient.cxx
1 #define _DEBUG_
2 #include "COORDINATEClient.hxx"
3 #include <string>
4 #include "UtilClient.hxx"
5 #include "Utils_CorbaException.hxx"
6
7 using namespace MEDMEM;
8 //=============================================================================
9 /*!
10  * Constructeur
11  */
12 //=============================================================================
13
14 COORDINATEClient::COORDINATEClient(const SALOME_MED::MESH_ptr m, 
15                                    medModeSwitch Mode) :
16   COORDINATE(m->getSpaceDimension(), 1, Mode),
17   _complete(false), 
18   IOR_Mesh(SALOME_MED::MESH::_duplicate(m))
19 {
20   BEGIN_OF("COORDINATEClient::COORDINATEClient(...)");
21
22   blankCopy();
23
24   END_OF("COORDINATEClient::COORDINATEClient(...)");
25 }
26 //=============================================================================
27 /*!
28  * Remplit les informations générales
29  */
30 //=============================================================================
31 void COORDINATEClient::blankCopy()
32 {
33   BEGIN_OF("void COORDINATEClient::blankCopy()");
34
35   std::string *tA;
36   long nA;
37   SALOME_MED::MESH::coordinateInfos *all = new SALOME_MED::MESH::coordinateInfos;
38   try
39   {
40         all= IOR_Mesh->getCoordGlobal();
41   }
42   catch (const exception & ex)
43   {
44         MESSAGE("Unable to acces Global information");
45         THROW_SALOME_CORBA_EXCEPTION(ex.what() ,SALOME::INTERNAL_ERROR);
46   }
47
48   //convertCorbaArray(tA, nA, IOR_Mesh->getCoordinatesNames());
49   convertCorbaArray(tA, nA, &all->coordNames);
50   ASSERT(nA == getSpaceDimension());
51   setCoordinatesNames(tA);
52   delete [] tA;
53   
54   //convertCorbaArray(tA, nA, IOR_Mesh->getCoordinatesUnits());
55   convertCorbaArray(tA, nA, &all->coordUnits);
56   ASSERT(nA == getSpaceDimension());
57   setCoordinatesUnits(tA);
58   delete [] tA;
59   
60
61   setCoordinatesSystem( CORBA::string_dup(all->coordSystem));
62   
63   _complete = false;
64
65   END_OF("void COORDINATEClient::blankCopy()");
66 }
67 //=============================================================================
68 /*!
69  * Remplit les coordonnées 
70  */
71 //=============================================================================
72
73 void COORDINATEClient::fillCopy()
74 {
75   BEGIN_OF("void COORDINATEClient::fillCopy()");
76
77   //PN ?? Est-ce qu on peut pas mettre une variable dans COORDINATEClient
78   // qu on remplirait dans blankCopy ??
79   long nN = IOR_Mesh->getNumberOfNodes();
80   double *tC;
81   long nC;
82   convertCorbaArray(tC, nC, IOR_Mesh->getCoordinates(MED_FULL_INTERLACE));
83   ASSERT(nC == (getSpaceDimension() * nN));
84   
85   MEDARRAY<double> mC(tC, getSpaceDimension(), nN);
86   setCoordinates(&mC);
87   
88   _complete = true;
89   
90   END_OF("void COORDINATEClient::fillCopy()");
91 }
92
93 //=============================================================================
94 /*!
95  * Retourne les coordonnées 
96  */
97 //=============================================================================
98
99 const double *  COORDINATEClient::getCoordinates(medModeSwitch Mode)
100 {
101   BEGIN_OF("void COORDINATEClient::getCoordinates()");
102
103   if (!_complete) fillCopy();
104   const double * c = COORDINATE::getCoordinates(Mode);
105
106   END_OF("void COORDINATEClient::getCoordinates()");
107
108   return c;
109 }
110 //=============================================================================
111 /*!
112  * Retourne une coordonnée 
113  */
114 //=============================================================================
115
116 double COORDINATEClient::getCoordinate(int Number,int Axis)
117 {
118   BEGIN_OF("void COORDINATEClient::getCoordinate()");
119
120   if (!_complete) fillCopy();
121   double d = COORDINATE::getCoordinate(Number, Axis);
122
123   END_OF("void COORDINATEClient::getCoordinate()");
124
125   return d;
126 }
127 //=============================================================================
128 /*!
129  * Retourne un axe 
130  */
131 //=============================================================================
132 const double *  COORDINATEClient::getCoordinateAxis(int Axis)
133 {
134   BEGIN_OF("void COORDINATEClient::getCoordinateAxis()");
135
136   if (!_complete) fillCopy();
137   const double *c = COORDINATE::getCoordinateAxis(Axis);
138
139   END_OF("void COORDINATEClient::getCoordinateAxis()");
140
141   return c;
142 }
143 //=============================================================================
144 /*!
145  * Retourne le nombre de noeuds
146  */
147 //=============================================================================
148 const int*      COORDINATEClient::getNodesNumbers() const
149 {
150   BEGIN_OF("void COORDINATEClient::getNodesNumbers()");
151
152   if (!_complete) (const_cast < COORDINATEClient * >(this))->fillCopy();
153
154   MESSAGE("NON IMPLEMENTE DANS L'API CORBA");
155   END_OF("void COORDINATEClient::getNodesNumbers()");
156
157   return NULL;
158 }