Salome HOME
taking into account of the xml file for the component test of ther Corba
[modules/med.git] / src / MedMem / FieldDouble_i.cxx
1 //=============================================================================
2 // File      : Fielddouble_i.hxx
3 // Project   : SALOME
4 // Author    : EDF 
5 // Copyright : EDF 2002
6 // $Header: /export/home/CVS/SALOME_ROOT/MED/src/MedMem/Fielddouble_i.hxx
7 //=============================================================================
8
9 #include "FieldDouble_i.hxx"
10 #include "utilities.h"
11 #include "convert.hxx"
12
13 //=============================================================================
14 /*!
15  * Default constructor
16  */
17 //=============================================================================
18 FIELDDOUBLE_i::FIELDDOUBLE_i(): FIELDOF_i<double>()
19 {
20         BEGIN_OF("Default Constructor FIELDDOUBLE_i");
21         END_OF("Default Constructor FIELDDOUBLE_i");
22 }
23 //=============================================================================
24 /*!
25  * Destructor
26  */
27 //=============================================================================
28 FIELDDOUBLE_i::~FIELDDOUBLE_i()
29 {
30         BEGIN_OF("Default Destructor FIELDDOUBLE_i");
31         END_OF("Default Destructor FIELDDOUBLE_i");
32 }
33 //=============================================================================
34 /*!
35  * Constructor par recopie
36  */
37 //=============================================================================
38 FIELDDOUBLE_i::FIELDDOUBLE_i(FIELDDOUBLE_i & fd):
39                                FIELDOF_i<double>(fd._fieldTptr)
40 {
41         BEGIN_OF("Default Constructor FIELDDOUBLE_i");
42         END_OF("Default Constructor FIELDDOUBLE_i");
43 }
44 //=============================================================================
45 /*!
46  * Default constructor
47  */
48 //=============================================================================
49 FIELDDOUBLE_i::FIELDDOUBLE_i(SALOME_MED::SUPPORT_ptr mySupportIOR,::FIELD<double> * const f): FIELDOF_i<double>(mySupportIOR,f)
50 {
51         BEGIN_OF("Constructor FIELDDOUBLE_i");
52         END_OF(" Constructor FIELDDOUBLE_i");
53 }
54
55 //=============================================================================
56 /*!
57  * CORBA: Accessor for Field's values
58 */
59 //=============================================================================
60
61 Engines::double_array* FIELDDOUBLE_i::getValue( SALOME_MED::medModeSwitch mode ) 
62 throw (SALOME::SALOME_Exception)
63 {
64         if (_fieldTptr==NULL)
65                 THROW_SALOME_CORBA_EXCEPTION("No associated Field", \
66                                              SALOME::INTERNAL_ERROR);
67         Engines::double_array_var myseq = new Engines::double_array;
68         try
69         {
70                 int nbval=_fieldTptr->getNumberOfComponents();
71
72                 // Ajout NB pour avoir la valeur correct de nbval
73                 SALOME_MED::medEntityMesh entity = _support->getEntity();
74                 if (_support->isOnAllElements())
75                   {
76                     if (entity == SALOME_MED::MED_NODE)
77                       nbval = (_support->getMesh()->getNumberOfNodes())*nbval;
78                     else
79                       nbval = (_support->getMesh()->getNumberOfElements(entity,SALOME_MED::MED_ALL_ELEMENTS))*nbval;
80                   }
81                 else
82                   {
83                     nbval = (_support->getNumberOfElements(SALOME_MED::MED_ALL_ELEMENTS))*nbval;
84                   }
85
86                 medModeSwitch modemed=convertIdlModeToMedMode(mode);
87                 const double * values =_fieldTptr->getValue(modemed);
88
89                 myseq->length(nbval);
90                 for (int i=0; i<nbval; i++)
91                 {
92                         myseq[i]=values[i];
93                 };
94         }
95         catch(...)
96         {
97                 MESSAGE("Unable to acces Field ");
98                 THROW_SALOME_CORBA_EXCEPTION("Unable to acces Field C++ Object"\
99                                                 ,SALOME::INTERNAL_ERROR);
100         }
101         return myseq._retn();
102 }