2 //=============================================================================
3 // File : MEDMEM_Med_i.cxx
6 // Copyright : EDF 2002
7 // $Header: /export/home/PAL/MED_SRC/src/MEDMEM_I/MEDMEM_i.cxx
8 //=============================================================================
12 //#include "MEDMEM_Field.hxx"
14 #include "MEDMEM_Med_i.hxx"
15 #include "MEDMEM_Mesh_i.hxx"
16 #include "MEDMEM_FieldDouble_i.hxx"
17 #include "MEDMEM_FieldInt_i.hxx"
18 #include "MEDMEM_Support_i.hxx"
19 #include "MEDMEM_Family_i.hxx"
20 #include "MEDMEM_Group_i.hxx"
21 #include "MEDMEM_convert.hxx"
23 #include "MEDMEM_DriversDef.hxx"
24 #include "utilities.h"
25 #include "Utils_CorbaException.hxx"
26 using namespace MEDMEM;
28 //=============================================================================
32 //=================================POA_SALOME_MED::FAMILY::_============================================
33 MED_i::MED_i():_med((::MED*)NULL)
35 BEGIN_OF("Default Constructor MED_i");
36 END_OF("Default Constructor MED_i");
38 //=============================================================================
42 //=============================================================================
43 void MED_i::init(SALOMEDS::Study_ptr myStudy,driverTypes driverType, const string & fileName)
45 const char * LOC = "MED_i::init(driverTypes, const string &)";
48 // we create all IOR from _med
49 _med = new ::MED(driverType,fileName);
52 deque<string> meshesNames = _med->getMeshNames();
53 int numberOfMeshes = meshesNames.size();
54 for (int i=0; i<numberOfMeshes; i++)
56 ::MESH * myMesh = _med->getMesh(meshesNames[i]);
58 MESH_i * myMeshI = new MESH_i(myMesh);
59 SALOME_MED::MESH_ptr myMeshIOR = myMeshI->_this();
60 _meshes[meshesNames[i]] = myMeshIOR;
61 myMeshI->addInStudy(myStudy,myMeshIOR,fileName);
65 _med->updateSupport();
68 // we add all families
69 vector<FAMILY*> familyVector;
70 vector<FAMILY*>::iterator familyVectorIt;
73 vector<GROUP*> groupVector;
74 vector<GROUP*>::iterator groupVectorIt;
76 MED_FR::MESH_ENTITIES::const_iterator currentEntity;
77 for (int i=0; i<numberOfMeshes; i++)
79 ::MESH * ptrMesh = _med->getMesh(meshesNames[i]);
80 for (currentEntity = MED_FR::meshEntities.begin();
81 currentEntity != MED_FR::meshEntities.end();
85 familyVector = ptrMesh->getFamilies((MED_EN::medEntityMesh)(*currentEntity).first);
86 for (familyVectorIt = familyVector.begin();
87 familyVectorIt != familyVector.end();
90 FAMILY_i * myFamilyI = new FAMILY_i(*familyVectorIt);
91 SALOME_MED::FAMILY_ptr myFamilyIOR = myFamilyI->POA_SALOME_MED::FAMILY::_this();
92 myFamilyI->addInStudy(myStudy,myFamilyIOR);
96 groupVector = ptrMesh->getGroups((MED_EN::medEntityMesh)(*currentEntity).first);
97 for (groupVectorIt = groupVector.begin();
98 groupVectorIt != groupVector.end();
101 GROUP_i * myGroupI = new GROUP_i(*groupVectorIt);
102 SALOME_MED::GROUP_ptr myGroupIOR = myGroupI->POA_SALOME_MED::GROUP::_this();
103 myGroupI->addInStudy(myStudy,myGroupIOR);
108 for (int i=0; i<numberOfMeshes; i++)
110 map<MED_FR::med_entite_maillage,::SUPPORT*> mySupports = _med->getSupports(meshesNames[i]);
111 map<MED_FR::med_entite_maillage,::SUPPORT*>::const_iterator itSupport;
112 map<MED_FR::med_entite_maillage, SALOME_MED::SUPPORT_ptr> & mySupportsIOR
113 = _supports[meshesNames[i]];
114 for ( itSupport = mySupports.begin(); itSupport != mySupports.end(); itSupport++ )
116 SUPPORT_i * mySupportI = new SUPPORT_i((*itSupport).second);
117 SALOME_MED::SUPPORT_ptr mySupportIOR = mySupportI->_this();
118 mySupportsIOR[(*itSupport).first] = mySupportIOR;
119 mySupportI->addInStudy(myStudy,mySupportIOR);
124 deque<string> fieldsNames = _med->getFieldNames();
125 int numberOfFields = fieldsNames.size();
126 for (int i=0; i<numberOfFields; i++)
128 deque<DT_IT_> myIteration = _med->getFieldIteration (fieldsNames[i]);
129 int numberOfIteration = myIteration.size();
130 for (int j=0; j<numberOfIteration; j++)
132 ::FIELD_ * myField = _med->getField(fieldsNames[i], myIteration[j].dt, myIteration[j].it);
133 string meshName = myField->getSupport()->getMesh()->getName();
134 medEntityMesh myEntity = myField->getSupport()->getEntity();
135 map<string, map<MED_FR::med_entite_maillage, SALOME_MED::SUPPORT_ptr> >::const_iterator
136 itSupportOnMesh = _supports.find(meshName);
137 if ( itSupportOnMesh == _supports.end() )
138 throw MED_EXCEPTION ( LOCALIZED( STRING(LOC)
139 << "There is no support on mesh named |"
140 << meshName << "|" ));
141 const map<MED_FR::med_entite_maillage, SALOME_MED::SUPPORT_ptr> & SupportOnMesh
142 = (*itSupportOnMesh).second;
143 map<MED_FR::med_entite_maillage,SALOME_MED::SUPPORT_ptr>::const_iterator itSupport
144 = SupportOnMesh.find((MED_FR::med_entite_maillage)myEntity);
145 if (itSupport == SupportOnMesh.end())
146 throw MED_EXCEPTION ( LOCALIZED( STRING(LOC)
147 << "There is no support on entity "
148 << entity << " in mesh named |"
149 << meshName << "|"));
150 SALOME_MED::SUPPORT_ptr mySupportIOR = (*itSupport).second;
151 med_type_champ type = myField->getValueType();
152 SALOME_MED::FIELD_ptr myFieldIOR;
155 case MED_FR::MED_INT32 :
157 ((FIELD<int>*)myField)->read();
158 FIELDINT_i * myFieldIntI = new FIELDINT_i(mySupportIOR,(FIELD<int>*)myField);
159 POA_SALOME_MED::FIELD_tie<FIELD_i> * myFieldTie
160 = new POA_SALOME_MED::FIELD_tie<FIELD_i>(myFieldIntI);
161 myFieldIOR = myFieldTie->_this();
162 myFieldIntI->addInStudy(myStudy,myFieldIOR);
166 case MED_FR::MED_REEL64:
168 ((FIELD<double>*)myField)->read();
169 FIELDDOUBLE_i * myFieldDoubleI
170 = new FIELDDOUBLE_i(mySupportIOR,(FIELD<double>*)myField);
171 POA_SALOME_MED::FIELD_tie<FIELD_i> * myFieldTie
172 = new POA_SALOME_MED::FIELD_tie<FIELD_i>(myFieldDoubleI);
173 myFieldIOR = myFieldTie->_this();
174 myFieldDoubleI->addInStudy(myStudy,myFieldIOR);
179 throw MED_EXCEPTION ( LOCALIZED( STRING(LOC)
180 <<" * Iteration "<<FieldIteration[j].dt
181 <<", order number "<<FieldIteration[j].it
182 <<" has wrong type : "<<type));
188 dtIt.dt = myIteration[j].dt;
189 dtIt.it = myIteration[j].it;
190 _fields[fieldsNames[i]][dtIt] = myFieldIOR;
197 //=============================================================================
201 //=============================================================================
202 void MED_i::initWithFieldType(SALOMEDS::Study_ptr myStudy,driverTypes driverType, const string & fileName)
204 const char * LOC = "MED_i::initWithFieldType(driverTypes, const string &)";
207 // we create all IOR from _med
208 _med = new ::MED(driverType,fileName);
211 deque<string> meshesNames = _med->getMeshNames();
212 int numberOfMeshes = meshesNames.size();
213 for (int i=0; i<numberOfMeshes; i++)
215 ::MESH * myMesh = _med->getMesh(meshesNames[i]);
217 MESH_i * myMeshI = new MESH_i(myMesh);
218 SALOME_MED::MESH_ptr myMeshIOR = myMeshI->_this();
219 _meshes[meshesNames[i]]=myMeshIOR;
220 myMeshI->addInStudy(myStudy,myMeshIOR);
224 _med->updateSupport();
225 for (int i=0; i<numberOfMeshes; i++)
227 map<MED_FR::med_entite_maillage,::SUPPORT*> mySupports = _med->getSupports(meshesNames[i]);
228 map<MED_FR::med_entite_maillage,::SUPPORT*>::const_iterator itSupport;
229 map<MED_FR::med_entite_maillage,SALOME_MED::SUPPORT_ptr> &
230 mySupportsIOR = _supports[meshesNames[i]];
231 for (itSupport=mySupports.begin(); itSupport!=mySupports.end(); itSupport++ )
233 SUPPORT_i * mySupportI = new SUPPORT_i((*itSupport).second);
234 SALOME_MED::SUPPORT_ptr mySupportIOR = mySupportI->_this();
235 mySupportsIOR[(*itSupport).first]= mySupportIOR;
236 mySupportI->addInStudy(myStudy,mySupportIOR);
241 deque<string> fieldsNames = _med->getFieldNames();
242 int numberOfFields = fieldsNames.size();
243 for (int i=0; i<numberOfFields; i++)
245 deque<DT_IT_> myIteration = _med->getFieldIteration (fieldsNames[i]);
246 int numberOfIteration = myIteration.size();
247 for (int j=0; j<numberOfIteration; j++)
249 ::FIELD_ * myField = _med->getField(fieldsNames[i],myIteration[j].dt,myIteration[j].it);
250 string meshName = myField->getSupport()->getMesh()->getName();
251 medEntityMesh myEntity = myField->getSupport()->getEntity();
252 map<string, map<MED_FR::med_entite_maillage,SALOME_MED::SUPPORT_ptr> >::const_iterator
253 itSupportOnMesh = _supports.find(meshName);
254 if (itSupportOnMesh == _supports.end() )
255 throw MED_EXCEPTION ( LOCALIZED( STRING(LOC)
256 << "There is no support on mesh named |"
257 << meshName << "|"));
258 const map<MED_FR::med_entite_maillage,SALOME_MED::SUPPORT_ptr> & SupportOnMesh
259 = (*itSupportOnMesh).second;
260 map<MED_FR::med_entite_maillage,SALOME_MED::SUPPORT_ptr>::const_iterator itSupport
261 = SupportOnMesh.find((MED_FR::med_entite_maillage)myEntity);
262 if (itSupport == SupportOnMesh.end() )
263 throw MED_EXCEPTION ( LOCALIZED( STRING(LOC)
264 << "There is no support on entity "
265 << entity << " in mesh named |"
266 << meshName << "|"));
267 SALOME_MED::SUPPORT_ptr mySupportIOR = (*itSupport).second;
268 med_type_champ type = myField->getValueType();
271 dtIt.dt = myIteration[j].dt;
272 dtIt.it = myIteration[j].it;
276 case MED_FR::MED_INT32:
278 ((FIELD<int>*)myField)->read();
279 FIELDINT_i * myFieldIntI
280 = new FIELDINT_i(mySupportIOR,(FIELD<int>*)myField);
281 SALOME_MED::FIELDINT_ptr myFieldIntIOR;
282 POA_SALOME_MED::FIELDINT_tie<FIELDINT_i> * myFieldIntTie
283 = new POA_SALOME_MED::FIELDINT_tie<FIELDINT_i>(myFieldIntI);
284 myFieldIntIOR = myFieldIntTie->_this();
285 myFieldIntI->addInStudy(myStudy,myFieldIntIOR);
286 _fields[fieldsNames[i]][dtIt] = myFieldIntIOR;
290 case MED_FR::MED_REEL64:
292 ((FIELD<double>*)myField)->read();
293 FIELDDOUBLE_i * myFieldDoubleI
294 = new FIELDDOUBLE_i(mySupportIOR,(FIELD<double>*)myField);
295 SALOME_MED::FIELDDOUBLE_ptr myFieldDoubleIOR;
296 POA_SALOME_MED::FIELDDOUBLE_tie<FIELDDOUBLE_i> * myFieldDoubleTie
297 = new POA_SALOME_MED::FIELDDOUBLE_tie<FIELDDOUBLE_i>(myFieldDoubleI);
298 myFieldDoubleIOR = myFieldDoubleTie->_this();
299 myFieldDoubleI->addInStudy(myStudy,myFieldDoubleIOR);
300 _fields[fieldsNames[i]][dtIt] = myFieldDoubleIOR;
306 throw MED_EXCEPTION ( LOCALIZED( STRING(LOC)
307 <<" * Iteration "<<FieldIteration[j].dt
308 <<", order number "<<FieldIteration[j].it
309 <<" has wrong type : "<<type));
319 //=============================================================================
323 //=============================================================================
327 //=============================================================================
329 * CORBA: Accessor for Number of meshes
331 //=============================================================================
332 CORBA::Long MED_i::getNumberOfMeshes()
333 throw (SALOME::SALOME_Exception)
336 THROW_SALOME_CORBA_EXCEPTION("No associated Med object",\
337 SALOME::INTERNAL_ERROR);
340 return _med->getNumberOfMeshes();
342 catch (MEDEXCEPTION &ex)
344 MESSAGE("Unable to get the number of meshes in Med Object");
345 THROW_SALOME_CORBA_EXCEPTION(ex.what(), SALOME::INTERNAL_ERROR);
348 //=============================================================================
350 * CORBA: Accessor for Number of fields
352 //=============================================================================
353 CORBA::Long MED_i::getNumberOfFields()
354 throw (SALOME::SALOME_Exception)
357 THROW_SALOME_CORBA_EXCEPTION("No associated Med object",\
358 SALOME::INTERNAL_ERROR);
361 return _med->getNumberOfFields();
363 catch (MEDEXCEPTION &ex)
365 MESSAGE("Unable to get the number of fields in Med Object");
366 THROW_SALOME_CORBA_EXCEPTION(ex.what(), SALOME::INTERNAL_ERROR);
369 //=============================================================================
371 * CORBA: Accessor for meshes names
373 //=============================================================================
374 SALOME_MED::string_array * MED_i::getMeshNames()
375 throw (SALOME::SALOME_Exception)
378 THROW_SALOME_CORBA_EXCEPTION("No associated Med object",\
379 SALOME::INTERNAL_ERROR);
380 SALOME_MED::string_array_var myseq = new SALOME_MED::string_array;
383 int nbMeshes=_med->getNumberOfMeshes();
384 myseq->length(nbMeshes);
385 string * nameMeshes = new string[nbMeshes];
386 _med->getMeshNames(nameMeshes);
387 for (int i=0;i<nbMeshes;i++)
389 myseq[i]=CORBA::string_dup(nameMeshes[i].c_str());
391 delete [] nameMeshes;
394 catch (MEDEXCEPTION &ex)
396 MESSAGE("Unable to get the names of the meshes in Med Object");
397 THROW_SALOME_CORBA_EXCEPTION(ex.what(), SALOME::INTERNAL_ERROR);
399 return myseq._retn();
401 //=============================================================================
403 * CORBA: Accessor for fields names
405 //=============================================================================
406 SALOME_MED::string_array * MED_i::getFieldNames()
407 throw (SALOME::SALOME_Exception)
410 THROW_SALOME_CORBA_EXCEPTION("No associated Med object",\
411 SALOME::INTERNAL_ERROR);
412 SALOME_MED::string_array_var myseq = new SALOME_MED::string_array;
415 int nbFields=_med->getNumberOfFields();
416 myseq->length(nbFields);
417 string * nameFields = new string[nbFields];
418 _med->getFieldNames(nameFields);
419 for (int i=0;i<nbFields;i++)
421 myseq[i]=CORBA::string_dup(nameFields[i].c_str());
426 catch (MEDEXCEPTION &ex)
428 MESSAGE("Unable to get the names of the fields in Med Object");
429 THROW_SALOME_CORBA_EXCEPTION(ex.what(), SALOME::INTERNAL_ERROR);
431 return myseq._retn();
433 //=============================================================================
435 * CORBA: Accessor for a specific mesh
437 //=============================================================================
438 SALOME_MED::MESH_ptr MED_i::getMeshByName(const char* meshName)
439 throw (SALOME::SALOME_Exception)
442 THROW_SALOME_CORBA_EXCEPTION("No associated Med object",\
443 SALOME::INTERNAL_ERROR);
446 MESH * mesh=_med->getMesh(meshName);
447 MESH_i * m1 = new MESH_i(mesh);
448 SALOME_MED::MESH_ptr m2 = m1->POA_SALOME_MED::MESH::_this();
450 return (SALOME_MED::MESH::_duplicate(m2));
452 catch (MEDEXCEPTION &ex)
454 MESSAGE("Unable to get the specified mesh");
455 THROW_SALOME_CORBA_EXCEPTION(ex.what(), SALOME::INTERNAL_ERROR);
459 //=============================================================================
461 * CORBA: Accessor for a specific mesh
463 //=============================================================================
464 SALOME_MED::MESH_ptr MED_i::getMesh(SALOME_MED::FIELD_ptr fieldPtr)
465 throw (SALOME::SALOME_Exception)
468 THROW_SALOME_CORBA_EXCEPTION("No associated Med object",\
469 SALOME::INTERNAL_ERROR);
470 int ind=fieldPtr->getCorbaIndex();
474 SALOME_MED::FIELDINT_var fieldint =SALOME_MED::FIELDINT::_narrow(fieldPtr);
475 if (CORBA::is_nil(fieldint))
478 SALOME_MED::FIELDDOUBLE_var fielddouble =
479 SALOME_MED::FIELDDOUBLE::_narrow(fieldPtr);
480 ASSERT(!CORBA::is_nil(fielddouble));
481 ASSERT(FIELDOF_i<double>::fieldMap.find(ind)
482 !=FIELDOF_i<double>::fieldMap.end());
483 ::FIELD<double> * fdouble = FIELDOF_i<double>::fieldMap[ind];
484 MESH * mesh=_med->getMesh(fdouble);
489 ASSERT(FIELDOF_i<int>::fieldMap.find(ind)!=FIELDOF_i<int>::fieldMap.end());
490 ::FIELD<int> * fint = FIELDOF_i<int>::fieldMap[ind];
491 MESH * mesh=_med->getMesh(fint);
493 MESH_i * meshi = new MESH_i(mesh);
494 SALOME_MED::MESH_ptr meshptr = meshi->POA_SALOME_MED::MESH::_this();
495 meshi->_remove_ref();
496 return (SALOME_MED::MESH::_duplicate(meshptr));
499 //=============================================================================
501 * CORBA: Accessor for a specific field
503 //=============================================================================
504 SALOME_MED::FIELD_ptr MED_i::getField(const char* fieldName,
505 CORBA::Long pasTemps,
506 CORBA::Long numOrdre )
507 throw (SALOME::SALOME_Exception)
509 const char * LOC="MED_i::getField(const char*,CORBA::Long,CORBA::Long) ";
514 dtIt.dt= (int)pasTemps;
515 dtIt.it= (int)numOrdre;
517 map<string,MAP_IOR_DT_IT_>::const_iterator itFields = _fields.find(fieldName);
519 if ( itFields == _fields.end() )
520 THROW_SALOME_CORBA_EXCEPTION("Field not found !", SALOME::INTERNAL_ERROR);
522 const MAP_IOR_DT_IT_ & map_dtIt = (*itFields).second;
523 MAP_IOR_DT_IT_::const_iterator itMap_dtIt = map_dtIt.find(dtIt);
525 if ( itMap_dtIt == map_dtIt.end() )
526 THROW_SALOME_CORBA_EXCEPTION("Iteration not found !", SALOME::INTERNAL_ERROR);
529 return (*itMap_dtIt).second;
532 //=============================================================================
534 * CORBA: Accessor for a specific field
536 //=============================================================================
537 CORBA::Long MED_i::addDriver(SALOME_MED::medDriverTypes driverType, const char* fileName)
538 throw (SALOME::SALOME_Exception)
541 THROW_SALOME_CORBA_EXCEPTION("No associated Med object",\
542 SALOME::INTERNAL_ERROR);
545 int driv=_med->addDriver(convertIdlDriverToMedDriver(driverType),
549 catch (MEDEXCEPTION &ex)
551 MESSAGE("Unable to add a driver to the med object");
552 THROW_SALOME_CORBA_EXCEPTION(ex.what(), SALOME::INTERNAL_ERROR);
556 //=============================================================================
558 * CORBA: relase the driver (mandatory)
560 //=============================================================================
561 void MED_i::rmDriver(CORBA::Long i)
562 throw (SALOME::SALOME_Exception)
565 THROW_SALOME_CORBA_EXCEPTION("No associated Med object",\
566 SALOME::INTERNAL_ERROR);
571 catch (MEDEXCEPTION &ex)
573 MESSAGE("Unable to unlink the driver from the med object");
574 THROW_SALOME_CORBA_EXCEPTION(ex.what(), SALOME::INTERNAL_ERROR);
577 //=============================================================================
579 * CORBA: read med objects relations
581 //=============================================================================
582 void MED_i::readFileStruct(CORBA::Long i)
583 throw (SALOME::SALOME_Exception)
586 THROW_SALOME_CORBA_EXCEPTION("No associated Med object",\
587 SALOME::INTERNAL_ERROR);
590 _med->readFileStruct(i);
592 catch (MEDEXCEPTION &ex)
594 MESSAGE("Unable to read the structure of this file ");
595 THROW_SALOME_CORBA_EXCEPTION(ex.what(), SALOME::INTERNAL_ERROR);
598 //=============================================================================
600 * CORBA: write specifics objects f
602 //=============================================================================
603 void MED_i::writeFrom(CORBA::Long i)
604 throw (SALOME::SALOME_Exception)
607 THROW_SALOME_CORBA_EXCEPTION("No associated Med object",\
608 SALOME::INTERNAL_ERROR);
613 catch (MEDEXCEPTION &ex)
615 MESSAGE("Unable to write this driver ");
616 THROW_SALOME_CORBA_EXCEPTION(ex.what(), SALOME::INTERNAL_ERROR);
619 //=============================================================================
621 * CORBA: write objects
623 //=============================================================================
624 void MED_i::write(CORBA::Long i)
625 throw (SALOME::SALOME_Exception)
628 THROW_SALOME_CORBA_EXCEPTION("No associated Med object",\
629 SALOME::INTERNAL_ERROR);
634 catch (MEDEXCEPTION &ex)
636 MESSAGE("Unable to write this file ");
637 THROW_SALOME_CORBA_EXCEPTION(ex.what(), SALOME::INTERNAL_ERROR);
640 //=============================================================================
642 * CORBA: Add Mesh in Med objects
644 //=============================================================================
645 void MED_i::addMesh(SALOME_MED::MESH_ptr ptrMesh)
646 throw (SALOME::SALOME_Exception)
649 THROW_SALOME_CORBA_EXCEPTION("No associated Med object",\
650 SALOME::INTERNAL_ERROR);
653 int ind=ptrMesh->getCorbaIndex();
655 ASSERT(MESH_i::meshMap.find(ind) !=MESH_i::meshMap.end());
656 MESH * mesh= MESH_i::meshMap[ind];
659 catch (MEDEXCEPTION &ex)
661 MESSAGE("Unable to link this mesh to this med object");
662 THROW_SALOME_CORBA_EXCEPTION(ex.what(), SALOME::INTERNAL_ERROR);
665 //=============================================================================
667 * CORBA: Add field in Med objects
669 //=============================================================================
670 void MED_i::addField(SALOME_MED::FIELD_ptr ptrField)
671 throw (SALOME::SALOME_Exception)
674 THROW_SALOME_CORBA_EXCEPTION("No associated Med object",\
675 SALOME::INTERNAL_ERROR);
676 int ind=ptrField->getCorbaIndex();
679 SALOME_MED::FIELDINT_var fieldint =SALOME_MED::FIELDINT::_narrow(ptrField);
680 if (CORBA::is_nil(fieldint))
683 SALOME_MED::FIELDDOUBLE_var fielddouble =
684 SALOME_MED::FIELDDOUBLE::_narrow(ptrField);
685 ASSERT(!CORBA::is_nil(fielddouble));
686 ASSERT(FIELDOF_i<double>::fieldMap.find(ind)
687 !=FIELDOF_i<double>::fieldMap.end());
688 ::FIELD<double> * fdouble = FIELDOF_i<double>::fieldMap[ind];
690 //_med->addField(fdouble);
695 ASSERT(FIELDOF_i<int>::fieldMap.find(ind)!=FIELDOF_i<int>::fieldMap.end());
696 ::FIELD<int> * fint = FIELDOF_i<int>::fieldMap[ind];
697 //_med->addField(fint);
700 //=============================================================================
702 * CORBA: Add Med in Study
704 //=============================================================================
705 void MED_i::addInStudy(SALOMEDS::Study_ptr myStudy, SALOME_MED::MED_ptr myIor)
706 throw (SALOME::SALOME_Exception,SALOMEDS::StudyBuilder::LockProtection)
708 BEGIN_OF("MED_Mesh_i::addInStudy");
711 MESSAGE("Med already in Study");
712 THROW_SALOME_CORBA_EXCEPTION("Med already in Study", \
716 SALOMEDS::StudyBuilder_var myBuilder = myStudy->NewBuilder();
717 myBuilder->NewCommand();
718 SALOMEDS::GenericAttribute_var anAttr;
719 SALOMEDS::AttributeName_var aName;
720 SALOMEDS::AttributeIOR_var aIOR;
722 // Create SComponent labelled 'MED' if it doesn't already exit
723 SALOMEDS::SComponent_var medfather = myStudy->FindComponent("MED");
724 if ( CORBA::is_nil(medfather) )
726 THROW_SALOME_CORBA_EXCEPTION("Component Med not found",
730 MESSAGE("Add a MED Object under Med");
731 SALOMEDS::SObject_var newObj = myBuilder->NewObject(medfather);
733 ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance();
734 ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting());
735 CORBA::ORB_var &orb = init(0,0);
736 string iorStr = orb->object_to_string(myIor);
737 anAttr = myBuilder->FindOrCreateAttribute(newObj, "AttributeIOR");
738 aIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
739 aIOR->SetValue(iorStr.c_str());
740 anAttr = myBuilder->FindOrCreateAttribute(newObj, "AttributeName");
741 aName = SALOMEDS::AttributeName::_narrow(anAttr);
742 aName->SetValue("Objet MED");
743 _medId = newObj->GetID();
744 myBuilder->CommitCommand();
746 END_OF("Med_i::addInStudy(SALOMEDS::Study_ptr myStudy)");