Back to index

salome-med  6.5.0
COORDINATEClient.cxx
Go to the documentation of this file.
00001 // Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
00002 //
00003 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
00004 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
00005 //
00006 // This library is free software; you can redistribute it and/or
00007 // modify it under the terms of the GNU Lesser General Public
00008 // License as published by the Free Software Foundation; either
00009 // version 2.1 of the License.
00010 //
00011 // This library is distributed in the hope that it will be useful,
00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014 // Lesser General Public License for more details.
00015 //
00016 // You should have received a copy of the GNU Lesser General Public
00017 // License along with this library; if not, write to the Free Software
00018 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
00019 //
00020 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
00021 //
00022 
00023 #include "COORDINATEClient.hxx"
00024 #include <string>
00025 #include "UtilClient.hxx"
00026 #include "Utils_CorbaException.hxx"
00027 
00028 #include "ReceiverFactory.hxx"
00029 
00030 using namespace MEDMEM;
00031 using namespace MED_EN;
00032 
00033 //=============================================================================
00037 //=============================================================================
00038 
00039 COORDINATEClient::COORDINATEClient(const SALOME_MED::MESH_ptr m,
00040                                    medModeSwitch Mode) :
00041   COORDINATE(m->getSpaceDimension(), 1, Mode),
00042   _complete(false),
00043   IOR_Mesh(SALOME_MED::MESH::_duplicate(m))
00044 {
00045   blankCopy();
00046 }
00047 //=============================================================================
00051 //=============================================================================
00052 void COORDINATEClient::blankCopy()
00053 {
00054   std::string *tA;
00055   long nA;
00056   SALOME_MED::GMESH::coordinateInfos_var all;
00057   try
00058   {
00059         all = IOR_Mesh->getCoordGlobal();
00060   }
00061   catch (const exception & ex)
00062   {
00063         MESSAGE("Unable to acces Global information");
00064         THROW_SALOME_CORBA_EXCEPTION(ex.what() ,SALOME::INTERNAL_ERROR);
00065   }
00066 
00067   //convertCorbaArray(tA, nA, IOR_Mesh->getCoordinatesNames());
00068   convertCorbaArray(tA, nA, &all->coordNames);
00069   ASSERT(nA == getSpaceDimension());
00070   setCoordinatesNames(tA);
00071   delete [] tA;
00072 
00073   //convertCorbaArray(tA, nA, IOR_Mesh->getCoordinatesUnits());
00074   convertCorbaArray(tA, nA, &all->coordUnits);
00075   ASSERT(nA == getSpaceDimension());
00076   setCoordinatesUnits(tA);
00077   delete [] tA;
00078 
00079 
00080   setCoordinatesSystem( all->coordSystem.in());
00081 
00082   _complete = false;
00083 }
00084 //=============================================================================
00088 //=============================================================================
00089 
00090 void COORDINATEClient::fillCopy()
00091 {
00092   //PN ?? Est-ce qu on peut pas mettre une variable dans COORDINATEClient
00093   // qu on remplirait dans blankCopy ??
00094   long nN = IOR_Mesh->getNumberOfNodes();
00095   double *tC;
00096   long nC;
00097 
00098   SALOME::SenderDouble_var senderForCoords=IOR_Mesh->getSenderForCoordinates(MED_FULL_INTERLACE);
00099   tC=ReceiverFactory::getValue(senderForCoords,nC);
00100 
00101   ASSERT(nC == (getSpaceDimension() * nN));
00102 
00103   MEDARRAY<double> mC(tC, getSpaceDimension(), nN,MED_FULL_INTERLACE,true);
00104   setCoordinates(&mC,true);
00105 
00106   _complete = true;
00107 }
00108 
00109 //=============================================================================
00113 //=============================================================================
00114 
00115 const double *  COORDINATEClient::getCoordinates(medModeSwitch Mode)
00116 {
00117   if (!_complete) fillCopy();
00118   const double * c = COORDINATE::getCoordinates(Mode);
00119 
00120   return c;
00121 }
00122 //=============================================================================
00126 //=============================================================================
00127 
00128 double COORDINATEClient::getCoordinate(int Number,int Axis)
00129 {
00130   if (!_complete) fillCopy();
00131   double d = COORDINATE::getCoordinate(Number, Axis);
00132 
00133   return d;
00134 }
00135 //=============================================================================
00139 //=============================================================================
00140 const double *  COORDINATEClient::getCoordinateAxis(int Axis)
00141 {
00142   if (!_complete) fillCopy();
00143   const double *c = COORDINATE::getCoordinateAxis(Axis);
00144 
00145   return c;
00146 }
00147 //=============================================================================
00151 //=============================================================================
00152 const int*      COORDINATEClient::getNodesNumbers() const
00153 {
00154   if (!_complete) (const_cast < COORDINATEClient * >(this))->fillCopy();
00155 
00156   MESSAGE("NON IMPLEMENTE DANS L'API CORBA");
00157 
00158   return NULL;
00159 }