ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_geometrie.cpp
Revision: 906
Committed: Mon Nov 13 22:30:18 2017 UTC (7 years, 9 months ago) by couturad
File size: 73856 byte(s)
Log Message:
Nouveau opencascade commit 1

File Contents

# Content
1 //------------------------------------------------------------
2 //------------------------------------------------------------
3 // MAGiC
4 // Jean Christophe Cuilli�e et Vincent FRANCOIS
5 // D�artement de G�ie M�anique - UQTR
6 //------------------------------------------------------------
7 // Le projet MAGIC est un projet de recherche du d�artement
8 // de g�ie m�anique de l'Universit�du Qu�ec �
9 // Trois Rivi�es
10 // Les librairies ne peuvent �re utilis�s sans l'accord
11 // des auteurs (contact : francois@uqtr.ca)
12 //------------------------------------------------------------
13 //------------------------------------------------------------
14 //
15 // mg_geometrie.cpp
16 //
17 //------------------------------------------------------------
18 //------------------------------------------------------------
19 // COPYRIGHT 2000
20 // Version du 02/03/2006 �11H22
21 //------------------------------------------------------------
22 //------------------------------------------------------------
23
24
25 #include "gestionversion.h"
26 #include <iostream>
27 #include <string.h>
28
29
30 #include "mg_geometrie.h"
31 #include "mg_gestionnaire.h"
32 #include "mg_sommet_noeud.h"
33 #include "occ_fonction.h"
34 #include "occ_fonction_v2015.h"
35 #include "occ_fonction_v2017.h"
36 #include "ot_chaine.h"
37
38
39 //using namespace std;
40
41 MG_GEOMETRIE::MG_GEOMETRIE(char *type,const char *nom,double unite,double eps):MG_IDENTIFICATEUR(),gest_materiau(""),valeur_unite(unite),precision(eps)
42 {
43 ini(type,(char*)nom);
44 }
45
46 void MG_GEOMETRIE::ini(char *type,char *nom)
47 {
48 fonction1=NULL;
49 nom_du_fichier=new char[strlen(nom)+1];
50 strcpy(nom_du_fichier,nom);
51 strcpy(type_geo,type);
52
53 #ifdef BREP_SAT
54 if (strcmp(type_geo,"ACIS")==0)
55 {
56 get_gest_sat().change_nom(nom_du_fichier);
57 get_gest_sat().lire();
58 }
59 #endif
60
61 #ifdef BREP_STEP
62 if (strcmp(type_geo,"STEP")==0)
63 {
64 get_gest_step().change_nom(nom_du_fichier);
65 get_gest_step().lire();
66 }
67 #endif
68
69 #ifdef BREP_OCC
70 if ((strcmp(type_geo,"STEPOCC")==0)||(strcmp(type_geo,"OCC")==0)||((strcmp(type_geo,"OCCV2015")==0))||((strcmp(type_geo,"OCCV2017")==0)))
71 {
72 if (strcmp(type_geo,"OCC")==0) fonction1=new OCC_FONCTION;
73 else if(strcmp(type_geo,"OCCV2017")==0)
74 {
75 fonction1=new OCC_FONCTION_V2017;
76 return;
77 }
78 else fonction1=new OCC_FONCTION_V2015;
79 char path2[500];
80 strcpy(path2,nom_du_fichier);
81 if (strcmp(type_geo,"STEPOCC")==0)
82 {
83 fonction1->OuvrirFichierStep(nom_du_fichier);
84 char *p=strchr(path2,'.')+1;
85 p[0]='b';
86 p[1]='r';
87 p[2]='e';
88 p[3]='p';
89 p[4]=0;
90 fonction1->Sauvegarder(path2);
91 strcpy(nom_du_fichier,path2);
92 strcpy(type_geo,"OCCV2015");
93 }
94 else fonction1->OuvrirFichier(nom_du_fichier);
95 }
96 #endif
97 }
98
99 MG_GEOMETRIE::MG_GEOMETRIE(char *type,unsigned long num,const char *nom,double unite,double eps):MG_IDENTIFICATEUR(num),valeur_unite(unite),precision(eps)
100 {
101 ini(type,(char*)nom);
102 }
103
104
105
106 MG_GEOMETRIE::~MG_GEOMETRIE()
107 {
108 supprimer_tout_mg_volume();
109 supprimer_tout_mg_coquille();
110 supprimer_tout_mg_face();
111 supprimer_tout_mg_boucle();
112 supprimer_tout_mg_arete();
113 supprimer_tout_mg_sommet();
114 supprimer_tout_mg_point();
115 supprimer_tout_mg_courbe();
116 supprimer_tout_mg_surface();
117 supprimer_tout_mg_visu_courbe();
118 supprimer_tout_mg_poutre();
119 supprimer_tout_mg_coque();
120 supprimer_tout_mg_groupe_topologique();
121 supprimer_tout_mg_geom_fonction();
122 #ifdef BREP_OCC
123 if ((strcmp(type_geo,"STEPOCC")==0)||(strcmp(type_geo,"OCC")==0)||((strcmp(type_geo,"OCCV2015")==0))||((strcmp(type_geo,"OCCV2017")==0)))
124 delete fonction1;
125 #endif
126
127 }
128
129
130 void MG_GEOMETRIE::change_gestionnaire(MG_GESTIONNAIRE* mggest)
131 {
132 gest=mggest;
133 }
134
135 // ENTITE MG_POINT
136
137 int MG_GEOMETRIE::ajouter_mg_point(MG_POINT *mgpt)
138 {
139 gest->recherche_bonid(*mgpt);
140 MG_IDENTIFICATEUR *id=mgpt;
141 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
142 if (!p.second)
143 {
144 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
145 return FAIL;
146 }
147
148 std::pair<const unsigned long,MG_POINT*> tmp(mgpt->get_id(),mgpt);
149 lst_mg_point.insert(tmp);
150 return OK;
151 }
152
153
154 MG_POINT* MG_GEOMETRIE::get_mg_pointid(unsigned long num)
155 {
156 LISTE_MG_POINT::iterator i=lst_mg_point.find(num);
157 if (i==lst_mg_point.end())
158 {
159 // afficheur << INEXISTE << enderr;
160 return NULL;
161 }
162 return ((*i).second);
163 }
164
165
166
167 MG_POINT* MG_GEOMETRIE::get_mg_point(unsigned int num)
168 {
169 if (!(num<lst_mg_point.size()))
170 {
171 // afficheur << INEXISTE << enderr;
172 return NULL;
173 }
174 LISTE_MG_POINT::iterator i=lst_mg_point.begin();
175 for (unsigned long j=0;j<num;j++) i++;
176 return ((*i).second);
177 }
178
179
180
181 unsigned int MG_GEOMETRIE::get_nb_mg_point(void)
182 {
183 return lst_mg_point.size();
184 }
185
186
187 int MG_GEOMETRIE::supprimer_mg_pointid(unsigned long num)
188 {
189 MG_POINT* mgpt=get_mg_pointid(num);
190 if (mgpt==NULL)
191 {
192 // afficheur << INEXISTE2 << enderr;
193 return FAIL;
194 }
195 MG_IDENTIFICATEUR* id=mgpt;
196 LISTE_ENTITE::iterator i=lst_entite.find(id);
197 lst_entite.erase(i);
198 LISTE_MG_POINT::iterator j=lst_mg_point.find(num);
199 lst_mg_point.erase(j);
200 delete mgpt;
201 return OK;
202 }
203
204
205 int MG_GEOMETRIE::supprimer_mg_point(unsigned int num)
206 {
207 MG_POINT* mgpt=get_mg_point(num);
208 if (mgpt==NULL)
209 {
210 // afficheur << INEXISTE2 << enderr;
211 return FAIL;
212 }
213 MG_IDENTIFICATEUR* id=mgpt;
214 LISTE_ENTITE::iterator i=lst_entite.find(id);
215 lst_entite.erase(i);
216 LISTE_MG_POINT::iterator j=lst_mg_point.begin();
217 for (unsigned int k=0;k<num;k++) j++;
218 lst_mg_point.erase(j);
219 delete mgpt;
220 return OK;
221 }
222
223
224 void MG_GEOMETRIE::supprimer_tout_mg_point(void)
225 {
226 while (get_nb_mg_point()!=0)
227 {
228 LISTE_MG_POINT::iterator j=lst_mg_point.begin();
229 MG_POINT* mgpt=(*j).second;
230 MG_IDENTIFICATEUR* id=mgpt;
231 LISTE_ENTITE::iterator i=lst_entite.find(id);
232 lst_entite.erase(i);
233 lst_mg_point.erase(j);
234 delete mgpt;
235 }
236 }
237
238 MG_POINT* MG_GEOMETRIE::get_premier_point(LISTE_MG_POINT::iterator &it)
239 {
240 it = lst_mg_point.begin();
241 if (it == lst_mg_point.end())
242 return NULL;
243 return it->second ;
244 }
245
246 MG_POINT* MG_GEOMETRIE::get_suivant_point(LISTE_MG_POINT::iterator &it)
247 {
248 it++;
249 if (it==lst_mg_point.end())
250 return NULL;
251 return it->second;
252 }
253
254
255 // ENTITE MG_COURBE
256
257 int MG_GEOMETRIE::ajouter_mg_courbe(MG_COURBE *mgcrb)
258 {
259 gest->recherche_bonid(*mgcrb);
260 MG_IDENTIFICATEUR *id=mgcrb;
261 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
262 if (!p.second)
263 {
264 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
265 return FAIL;
266 }
267 std::pair<const unsigned long,MG_COURBE*> tmp(mgcrb->get_id(),mgcrb);
268 lst_mg_courbe.insert(tmp);
269 return OK;
270 }
271
272
273 MG_COURBE* MG_GEOMETRIE::get_mg_courbeid(unsigned long num)
274 {
275 LISTE_MG_COURBE::iterator i=lst_mg_courbe.find(num);
276 if (i==lst_mg_courbe.end())
277 {
278 // afficheur << INEXISTE << enderr;
279 return NULL;
280 }
281 return ((*i).second);
282 }
283
284
285
286 MG_COURBE* MG_GEOMETRIE::get_mg_courbe(unsigned int num)
287 {
288 if (!(num<lst_mg_courbe.size()))
289 {
290 // afficheur << INEXISTE << enderr;
291 return NULL;
292 }
293 LISTE_MG_COURBE::iterator i=lst_mg_courbe.begin();
294
295 for (unsigned long j=0;j<num;j++) i++;
296 return ((*i).second);
297 }
298
299
300
301 unsigned int MG_GEOMETRIE::get_nb_mg_courbe(void)
302 {
303 return lst_mg_courbe.size();
304 }
305
306
307 int MG_GEOMETRIE::supprimer_mg_courbeid(unsigned long num)
308 {
309 MG_COURBE* mgcrb=get_mg_courbeid(num);
310 if (mgcrb==NULL)
311 {
312 // afficheur << INEXISTE2 << enderr;
313 return FAIL;
314 }
315 MG_IDENTIFICATEUR* id=mgcrb;
316 LISTE_ENTITE::iterator i=lst_entite.find(id);
317 lst_entite.erase(i);
318 LISTE_MG_COURBE::iterator j=lst_mg_courbe.find(num);
319 lst_mg_courbe.erase(j);
320 delete mgcrb;
321 return OK;
322 }
323
324
325 int MG_GEOMETRIE::supprimer_mg_courbe(unsigned int num)
326 {
327 MG_COURBE* mgcrb=get_mg_courbe(num);
328 if (mgcrb==NULL)
329 {
330 // afficheur << INEXISTE2 << enderr;
331 return FAIL;
332 }
333 MG_IDENTIFICATEUR* id=mgcrb;
334 LISTE_ENTITE::iterator i=lst_entite.find(id);
335 lst_entite.erase(i);
336 LISTE_MG_COURBE::iterator j=lst_mg_courbe.begin();
337 for (unsigned int k=0;k<num;k++) j++;
338 lst_mg_courbe.erase(j);
339 delete mgcrb;
340 return OK;
341 }
342
343 void MG_GEOMETRIE::supprimer_tout_mg_courbe(void)
344 {
345 while (get_nb_mg_courbe()!=0)
346 {
347 LISTE_MG_COURBE::iterator j=lst_mg_courbe.begin();
348 MG_COURBE* mgcrb=(*j).second;
349 MG_IDENTIFICATEUR* id=mgcrb;
350 LISTE_ENTITE::iterator i=lst_entite.find(id);
351 lst_entite.erase(i);
352 lst_mg_courbe.erase(j);
353 delete mgcrb;
354 }
355 }
356
357 MG_COURBE* MG_GEOMETRIE::get_premier_courbe(LISTE_MG_COURBE::iterator &it)
358 {
359 it = lst_mg_courbe.begin();
360 if (it == lst_mg_courbe.end())
361 return NULL;
362 return it->second ;
363 }
364
365 MG_COURBE* MG_GEOMETRIE::get_suivant_courbe(LISTE_MG_COURBE::iterator &it)
366 {
367 it++;
368 if (it==lst_mg_courbe.end())
369 return NULL;
370 return it->second;
371 }
372
373
374
375
376 // ENTITE MG_SURFACE
377
378 int MG_GEOMETRIE::ajouter_mg_surface(MG_SURFACE *mgsrf)
379 {
380 gest->recherche_bonid(*mgsrf);
381 MG_IDENTIFICATEUR *id=mgsrf;
382 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
383 if (!p.second)
384 {
385 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
386 return FAIL;
387 }
388
389 std::pair<const unsigned long,MG_SURFACE*> tmp(mgsrf->get_id(),mgsrf);
390 lst_mg_surface.insert(tmp);
391 return OK;
392 }
393
394
395 MG_SURFACE* MG_GEOMETRIE::get_mg_surfaceid(unsigned long num)
396 {
397 LISTE_MG_SURFACE::iterator i=lst_mg_surface.find(num);
398 if (i==lst_mg_surface.end())
399 {
400 // afficheur << INEXISTE << enderr;
401 return NULL;
402 }
403 return ((*i).second);
404 }
405
406
407
408 MG_SURFACE* MG_GEOMETRIE::get_mg_surface(unsigned int num)
409 {
410 if (!(num<lst_mg_surface.size()))
411 {
412 // afficheur << INEXISTE << enderr;
413 return NULL;
414 }
415 LISTE_MG_SURFACE::iterator i=lst_mg_surface.begin();
416 for (unsigned long j=0;j<num;j++) i++;
417 return ((*i).second);
418 }
419
420
421
422 unsigned int MG_GEOMETRIE::get_nb_mg_surface(void)
423 {
424 return lst_mg_surface.size();
425 }
426
427
428 int MG_GEOMETRIE::supprimer_mg_surfaceid(unsigned long num)
429 {
430 MG_SURFACE* mgsrf=get_mg_surfaceid(num);
431 if (mgsrf==NULL)
432 {
433 // afficheur << INEXISTE2 << enderr;
434 return FAIL;
435 }
436 MG_IDENTIFICATEUR* id=mgsrf;
437 LISTE_ENTITE::iterator i=lst_entite.find(id);
438 lst_entite.erase(i);
439 LISTE_MG_SURFACE::iterator j=lst_mg_surface.find(num);
440 lst_mg_surface.erase(j);
441 delete mgsrf;
442 return OK;
443 }
444
445
446 int MG_GEOMETRIE::supprimer_mg_surface(unsigned int num)
447 {
448 MG_SURFACE* mgsrf=get_mg_surface(num);
449 if (mgsrf==NULL)
450 {
451 // afficheur << INEXISTE2 << enderr;
452 return FAIL;
453 }
454 MG_IDENTIFICATEUR* id=mgsrf;
455 LISTE_ENTITE::iterator i=lst_entite.find(id);
456 lst_entite.erase(i);
457 LISTE_MG_SURFACE::iterator j=lst_mg_surface.begin();
458 for (unsigned int k=0;k<num;k++) j++;
459 lst_mg_surface.erase(j);
460 delete mgsrf;
461 return OK;
462 }
463
464
465 void MG_GEOMETRIE::supprimer_tout_mg_surface(void)
466 {
467 while (get_nb_mg_surface()!=0)
468 {
469 LISTE_MG_SURFACE::iterator j=lst_mg_surface.begin();
470 MG_SURFACE* mgsrf=(*j).second;
471 MG_IDENTIFICATEUR* id=mgsrf;
472 LISTE_ENTITE::iterator i=lst_entite.find(id);
473 lst_entite.erase(i);
474 lst_mg_surface.erase(j);
475 delete mgsrf;
476 }
477 }
478
479 MG_SURFACE* MG_GEOMETRIE::get_premier_surface(LISTE_MG_SURFACE::iterator &it)
480 {
481 it = lst_mg_surface.begin();
482 if (it == lst_mg_surface.end())
483 return NULL;
484 return it->second ;
485 }
486
487 MG_SURFACE* MG_GEOMETRIE::get_suivant_surface(LISTE_MG_SURFACE::iterator &it)
488 {
489 it++;
490 if (it==lst_mg_surface.end())
491 return NULL;
492 return it->second;
493 }
494
495
496
497
498 // ENTITE MG_SOMMET
499 MG_SOMMET_NOEUD* MG_GEOMETRIE::ajouter_mg_sommet_noeud(MG_NOEUD *noeud)
500 {
501 MG_SOMMET_NOEUD* somno=new MG_SOMMET_NOEUD(noeud);
502 gest->recherche_bonid(*somno);
503 MG_IDENTIFICATEUR *id=somno;
504 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
505 if (!p.second)
506 {
507 delete somno;
508 return NULL;
509 }
510 std::pair<const unsigned long,MG_SOMMET*> tmp(somno->get_id(),somno);
511 lst_mg_sommet.insert(tmp);
512 return somno;
513 }
514
515 int MG_GEOMETRIE::ajouter_mg_sommet(MG_SOMMET *mgsom)
516 {
517 gest->recherche_bonid(*mgsom);
518 MG_IDENTIFICATEUR *id=mgsom;
519 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
520 if (!p.second)
521 {
522 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
523 return FAIL;
524 }
525
526 std::pair<const unsigned long,MG_SOMMET*> tmp(mgsom->get_id(),mgsom);
527 lst_mg_sommet.insert(tmp);
528 return OK;
529 }
530
531
532 MG_SOMMET* MG_GEOMETRIE::get_mg_sommetid(unsigned long num)
533 {
534 LISTE_MG_SOMMET::iterator i=lst_mg_sommet.find(num);
535 if (i==lst_mg_sommet.end())
536 {
537 // afficheur << INEXISTE << enderr;
538 return NULL;
539 }
540 return ((*i).second);
541 }
542
543 MG_SOMMET* MG_GEOMETRIE::get_mg_sommetid(std::string id)
544 {
545 LISTE_MG_SOMMET::iterator i=lst_mg_sommet.begin();
546 int nb=lst_mg_sommet.size();
547 for (int j=0;j<nb;j++)
548 {
549 MG_SOMMET* sommet=(*i).second;
550 std::string idori=sommet->get_idoriginal();
551 if (idori==id) return sommet;
552 i++;
553 }
554 return NULL;
555 }
556
557
558
559 MG_SOMMET* MG_GEOMETRIE::get_mg_sommet(unsigned int num)
560 {
561 if (!(num<lst_mg_sommet.size()))
562 {
563 // afficheur << INEXISTE << enderr;
564 return NULL;
565 }
566 LISTE_MG_SOMMET::iterator i=lst_mg_sommet.begin();
567 for (unsigned long j=0;j<num;j++) i++;
568 return ((*i).second);
569 }
570
571
572
573 unsigned int MG_GEOMETRIE::get_nb_mg_sommet(void)
574 {
575 return lst_mg_sommet.size();
576 }
577
578
579 int MG_GEOMETRIE::supprimer_mg_sommetid(unsigned long num)
580 {
581 MG_SOMMET* mgsom=get_mg_sommetid(num);
582 if (mgsom==NULL)
583 {
584 // afficheur << INEXISTE2 << enderr;
585 return FAIL;
586 }
587 if (mgsom->get_nb_mg_cosommet()!=0)
588 {
589 // afficheur << ERRCOSOMMET << mgsom->get_id() << enderr;
590 return FAIL;
591 }
592 MG_IDENTIFICATEUR* id=mgsom;
593 LISTE_ENTITE::iterator i=lst_entite.find(id);
594 lst_entite.erase(i);
595 LISTE_MG_SOMMET::iterator j=lst_mg_sommet.find(num);
596 lst_mg_sommet.erase(j);
597 #ifdef BREP_OCC
598 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_SOMMET((OCC_SOMMET*)mgsom);
599 #endif
600 delete mgsom;
601 return OK;
602 }
603
604
605 int MG_GEOMETRIE::supprimer_mg_sommet(unsigned int num)
606 {
607 MG_SOMMET* mgsom=get_mg_sommet(num);
608 if (mgsom==NULL)
609 {
610 // afficheur << INEXISTE2 << enderr;
611 return FAIL;
612 }
613 if (mgsom->get_nb_mg_cosommet()!=0)
614 {
615 // afficheur << ERRCOSOMMET << mgsom->get_id() << enderr;
616 return FAIL;
617 }
618 MG_IDENTIFICATEUR* id=mgsom;
619 LISTE_ENTITE::iterator i=lst_entite.find(id);
620 lst_entite.erase(i);
621 LISTE_MG_SOMMET::iterator j=lst_mg_sommet.begin();
622 for (unsigned int k=0;k<num;k++) j++;
623 lst_mg_sommet.erase(j);
624 #ifdef BREP_OCC
625 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_SOMMET((OCC_SOMMET*)mgsom);
626 #endif
627 delete mgsom;
628 return OK;
629 }
630
631
632 void MG_GEOMETRIE::supprimer_tout_mg_sommet(void)
633 {
634 while (get_nb_mg_sommet()!=0)
635 {
636 LISTE_MG_SOMMET::iterator j=lst_mg_sommet.begin();
637 MG_SOMMET* mgsom=(*j).second;
638 MG_IDENTIFICATEUR* id=mgsom;
639 LISTE_ENTITE::iterator i=lst_entite.find(id);
640 lst_entite.erase(i);
641 lst_mg_sommet.erase(j);
642 #ifdef BREP_OCC
643 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_SOMMET((OCC_SOMMET*)mgsom);
644 #endif
645 delete mgsom;
646 }
647 }
648
649 MG_SOMMET* MG_GEOMETRIE::get_premier_sommet(LISTE_MG_SOMMET::iterator &it)
650 {
651 it = lst_mg_sommet.begin();
652 if (it == lst_mg_sommet.end())
653 return NULL;
654 return it->second ;
655 }
656
657 MG_SOMMET* MG_GEOMETRIE::get_suivant_sommet(LISTE_MG_SOMMET::iterator &it)
658 {
659 it++;
660 if (it==lst_mg_sommet.end())
661 return NULL;
662 return it->second;
663 }
664
665
666 // ENTITE MG_COSOMMET
667
668
669 int MG_GEOMETRIE::ajouter_mg_cosommet(MG_COSOMMET* mgcosom)
670 {
671 gest->recherche_bonid(*mgcosom);
672 MG_IDENTIFICATEUR *id=mgcosom;
673 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
674 if (!p.second)
675 {
676 return FAIL;
677 }
678
679 std::pair<const unsigned long,MG_COSOMMET*> tmp(mgcosom->get_id(),mgcosom);
680 lst_mg_cosommet.insert(tmp);
681 return OK;
682 }
683
684 MG_COSOMMET* MG_GEOMETRIE::ajouter_mg_cosommet(MG_ARETE *mgarete,MG_SOMMET *mgsom)
685 {
686 MG_COSOMMET* mgcosom=new MG_COSOMMET(mgsom,mgarete,precision);
687 gest->recherche_bonid(*mgcosom);
688 MG_IDENTIFICATEUR *id=mgcosom;
689 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
690 if (!p.second)
691 {
692 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
693 delete mgcosom;
694 return NULL;
695 }
696
697 std::pair<const unsigned long,MG_COSOMMET*> tmp(mgcosom->get_id(),mgcosom);
698 lst_mg_cosommet.insert(tmp);
699 mgsom->ajouter_mg_cosommet(mgcosom);
700 return mgcosom;
701 }
702
703 MG_COSOMMET* MG_GEOMETRIE::ajouter_mg_cosommet(unsigned long num,MG_ARETE *mgarete,MG_SOMMET *mgsom)
704 {
705 MG_COSOMMET* mgcosom=new MG_COSOMMET(num,mgsom,mgarete,precision);
706 MG_IDENTIFICATEUR *id=mgcosom;
707 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
708 if (!p.second)
709 {
710 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
711 delete mgcosom;
712 return NULL;
713 }
714
715 std::pair<const unsigned long,MG_COSOMMET*> tmp(mgcosom->get_id(),mgcosom);
716 lst_mg_cosommet.insert(tmp);
717 mgsom->ajouter_mg_cosommet(mgcosom);
718 return mgcosom;
719 }
720
721 int MG_GEOMETRIE::supprimer_mg_cosommet(MG_COSOMMET* mgcosom)
722 {
723 if (mgcosom==NULL)
724 {
725 // afficheur << INEXISTE2 << enderr;
726 return FAIL;
727 }
728 MG_IDENTIFICATEUR* id=mgcosom;
729 LISTE_ENTITE::iterator i=lst_entite.find(id);
730 lst_entite.erase(i);
731 LISTE_MG_COSOMMET::iterator j=lst_mg_cosommet.find(mgcosom->get_id());
732 lst_mg_cosommet.erase(j);
733 mgcosom->get_sommet()->supprimer_mg_cosommet(mgcosom);
734 delete mgcosom;
735 return OK;
736 }
737
738 int MG_GEOMETRIE::supprimer_mg_cosommetid(long int num)
739 {
740 MG_COSOMMET* mgcosommet=get_mg_cosommetid(num);
741 if (mgcosommet==NULL)
742 {
743 return FAIL;
744 }
745 MG_IDENTIFICATEUR* id=mgcosommet;
746 LISTE_ENTITE::iterator i=lst_entite.find(id);
747 lst_entite.erase(i);
748 LISTE_MG_COSOMMET::iterator j=lst_mg_cosommet.find(num);
749 lst_mg_cosommet.erase(j);
750 mgcosommet->get_sommet()->supprimer_mg_cosommet(mgcosommet);
751 delete mgcosommet;
752 return OK;
753 }
754
755
756 unsigned int MG_GEOMETRIE::get_nb_cosommet(void)
757 {
758 return lst_mg_cosommet.size();
759 }
760
761 MG_COSOMMET* MG_GEOMETRIE::get_premier_cosommet(LISTE_MG_COSOMMET::iterator& it)
762 {
763 it=lst_mg_cosommet.begin();
764 if(it==lst_mg_cosommet.end()) return NULL;
765 return it->second;
766 }
767
768 MG_COSOMMET* MG_GEOMETRIE::get_suivant_cosommet(LISTE_MG_COSOMMET::iterator& it)
769 {
770 it++;
771 if(it==lst_mg_cosommet.end()) return NULL;
772 return it->second;
773 }
774
775 MG_COSOMMET* MG_GEOMETRIE::get_mg_cosommetid(long num)
776 {
777 LISTE_MG_COSOMMET::iterator i=lst_mg_cosommet.find(num);
778 if (i==lst_mg_cosommet.end())
779 {
780 return NULL;
781 }
782 return ((*i).second);
783 }
784
785
786
787 // ENTITE MG_ARETE
788
789 int MG_GEOMETRIE::ajouter_mg_arete(MG_ARETE *mgarete)
790 {
791 gest->recherche_bonid(*mgarete);
792 MG_IDENTIFICATEUR *id=mgarete;
793 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
794 if (!p.second)
795 {
796 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
797 return FAIL;
798 }
799
800 std::pair<const unsigned long,MG_ARETE*> tmp(mgarete->get_id(),mgarete);
801 lst_mg_arete.insert(tmp);
802 return OK;
803 }
804
805
806 MG_ARETE* MG_GEOMETRIE::get_mg_areteid(unsigned long num)
807 {
808 LISTE_MG_ARETE::iterator i=lst_mg_arete.find(num);
809 if (i==lst_mg_arete.end())
810 {
811 // afficheur << INEXISTE << enderr;
812 return NULL;
813 }
814 return ((*i).second);
815 }
816
817 MG_ARETE* MG_GEOMETRIE::get_mg_areteid(std::string id)
818 {
819 LISTE_MG_ARETE::iterator i=lst_mg_arete.begin();
820 int nb=lst_mg_arete.size();
821 for (int j=0;j<nb;j++)
822 {
823 MG_ARETE* arete=(*i).second;
824 std::string idori=arete->get_idoriginal();
825 if (idori==id) return arete;
826 i++;
827 }
828 return NULL;
829 }
830
831
832 MG_ARETE* MG_GEOMETRIE::get_mg_arete(unsigned int num)
833 {
834 if (!(num<lst_mg_arete.size()))
835 {
836 // afficheur << INEXISTE << enderr;
837 return NULL;
838 }
839 LISTE_MG_ARETE::iterator i=lst_mg_arete.begin();
840 for (unsigned long j=0;j<num;j++) i++;
841 return ((*i).second);
842 }
843
844
845
846 unsigned int MG_GEOMETRIE::get_nb_mg_arete(void)
847 {
848 return lst_mg_arete.size();
849 }
850
851
852 int MG_GEOMETRIE::supprimer_mg_areteid(unsigned long num)
853 {
854 MG_ARETE* mgarete=get_mg_areteid(num);
855 if (mgarete==NULL)
856 {
857 // afficheur << INEXISTE2 << enderr;
858 return FAIL;
859 }
860 if (mgarete->get_nb_mg_coarete()!=0)
861 {
862 // afficheur << ERRCOARETE << mgarete->get_id() << enderr;
863 return FAIL;
864 }
865 MG_IDENTIFICATEUR* id=mgarete;
866 LISTE_ENTITE::iterator i=lst_entite.find(id);
867 lst_entite.erase(i);
868 LISTE_MG_ARETE::iterator j=lst_mg_arete.find(num);
869 lst_mg_arete.erase(j);
870 MG_COSOMMET* cosom1=mgarete->get_cosommet1();
871 MG_COSOMMET* cosom2=mgarete->get_cosommet2();
872 cosom1->get_sommet()->supprimer_mg_cosommet(cosom1);
873 cosom2->get_sommet()->supprimer_mg_cosommet(cosom2);
874 supprimer_mg_cosommet(cosom1);
875 supprimer_mg_cosommet(cosom2);
876 #ifdef BREP_OCC
877 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_ARETE((OCC_ARETE*)mgarete);
878 #endif
879 delete mgarete;
880 return OK;
881 }
882
883
884 int MG_GEOMETRIE::supprimer_mg_arete(unsigned int num)
885 {
886 MG_ARETE* mgarete=get_mg_arete(num);
887 if (mgarete==NULL)
888 {
889 // afficheur << INEXISTE2 << enderr;
890 return FAIL;
891 }
892 if (mgarete->get_nb_mg_coarete()!=0)
893 {
894 // afficheur << ERRCOARETE << mgarete->get_id() << enderr;
895 return FAIL;
896 }
897 MG_IDENTIFICATEUR* id=mgarete;
898 LISTE_ENTITE::iterator i=lst_entite.find(id);
899 lst_entite.erase(i);
900 LISTE_MG_ARETE::iterator j=lst_mg_arete.find(num);
901 lst_mg_arete.erase(j);
902 MG_COSOMMET* cosom1=mgarete->get_cosommet1();
903 MG_COSOMMET* cosom2=mgarete->get_cosommet2();
904 cosom1->get_sommet()->supprimer_mg_cosommet(cosom1);
905 cosom2->get_sommet()->supprimer_mg_cosommet(cosom2);
906 supprimer_mg_cosommet(cosom1);
907 supprimer_mg_cosommet(cosom2);
908
909 #ifdef BREP_OCC
910 if(strcmp(type_geo,"OCCV2017")) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_ARETE((OCC_ARETE*)mgarete);
911 #endif
912 delete mgarete;
913 return OK;
914 }
915
916
917 void MG_GEOMETRIE::supprimer_tout_mg_arete(void)
918 {
919 while (get_nb_mg_arete()!=0)
920 {
921 LISTE_MG_ARETE::iterator j=lst_mg_arete.begin();
922 MG_ARETE* mgarete=(*j).second;
923 MG_IDENTIFICATEUR* id=mgarete;
924 LISTE_ENTITE::iterator i=lst_entite.find(id);
925 lst_entite.erase(i);
926 lst_mg_arete.erase(j);
927 if (!mgarete->est_une_arete_element())
928 {
929
930 MG_COSOMMET* cosom1=mgarete->get_cosommet1();
931 MG_COSOMMET* cosom2=mgarete->get_cosommet2();
932 cosom1->get_sommet()->supprimer_mg_cosommet(cosom1);
933 cosom2->get_sommet()->supprimer_mg_cosommet(cosom2);
934 supprimer_mg_cosommet(cosom1);
935 supprimer_mg_cosommet(cosom2);
936 #ifdef BREP_OCC
937 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_ARETE((OCC_ARETE*)mgarete);
938 #endif
939 delete mgarete;
940 }
941 }
942 }
943
944 MG_ARETE* MG_GEOMETRIE::get_premier_arete(LISTE_MG_ARETE::iterator &it)
945 {
946 it = lst_mg_arete.begin();
947 if (it == lst_mg_arete.end())
948 return NULL;
949 return it->second ;
950 }
951
952 MG_ARETE* MG_GEOMETRIE::get_suivant_arete(LISTE_MG_ARETE::iterator &it)
953 {
954 it++;
955 if (it==lst_mg_arete.end())
956 return NULL;
957 return it->second;
958 }
959
960
961 // ENTITE MG_COARETE
962
963 int MG_GEOMETRIE::ajouter_mg_coarete(MG_COARETE* mgcoarete)
964 {
965 gest->recherche_bonid(*mgcoarete);
966 MG_IDENTIFICATEUR *id=mgcoarete;
967 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
968 if (!p.second)
969 {
970 return FAIL;
971 }
972 std::pair<const unsigned long,MG_COARETE*> tmp(mgcoarete->get_id(),mgcoarete);
973 lst_mg_coarete.insert(tmp);
974 return OK;
975 }
976
977
978 MG_COARETE* MG_GEOMETRIE::ajouter_mg_coarete(MG_ARETE *mgarete,MG_BOUCLE *mgboucle,int sens)
979 {
980 MG_COARETE* mgcoarete=new MG_COARETE(mgarete,mgboucle,sens);
981 gest->recherche_bonid(*mgcoarete);
982 MG_IDENTIFICATEUR *id=mgcoarete;
983 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
984 if (!p.second)
985 {
986 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
987 delete mgcoarete;
988 return NULL;
989 }
990
991 std::pair<const unsigned long,MG_COARETE*> tmp(mgcoarete->get_id(),mgcoarete);
992 lst_mg_coarete.insert(tmp);
993 mgarete->ajouter_mg_coarete(mgcoarete);
994 return mgcoarete;
995 }
996
997
998 MG_COARETE* MG_GEOMETRIE::ajouter_mg_coarete(unsigned long num,MG_ARETE *mgarete,MG_BOUCLE *mgboucle,int sens)
999 {
1000 MG_COARETE* mgcoarete=new MG_COARETE(num,mgarete,mgboucle,sens);
1001 MG_IDENTIFICATEUR *id=mgcoarete;
1002 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1003 if (!p.second)
1004 {
1005 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1006 delete mgcoarete;
1007 return NULL;
1008 }
1009
1010 std::pair<const unsigned long,MG_COARETE*> tmp(mgcoarete->get_id(),mgcoarete);
1011 lst_mg_coarete.insert(tmp);
1012 mgarete->ajouter_mg_coarete(mgcoarete);
1013 return mgcoarete;
1014 }
1015
1016 int MG_GEOMETRIE::supprimer_mg_coarete(MG_COARETE* mgcoarete)
1017 {
1018 if (mgcoarete==NULL)
1019 {
1020 // afficheur << INEXISTE2 << enderr;
1021 return FAIL;
1022 }
1023 MG_IDENTIFICATEUR* id=mgcoarete;
1024 LISTE_ENTITE::iterator i=lst_entite.find(id);
1025 lst_entite.erase(i);
1026 LISTE_MG_COARETE::iterator j=lst_mg_coarete.find(mgcoarete->get_id());
1027 lst_mg_coarete.erase(j);
1028 mgcoarete->get_arete()->supprimer_mg_coarete(mgcoarete);
1029 delete mgcoarete;
1030 return OK;
1031 }
1032
1033 int MG_GEOMETRIE::supprimer_mg_coareteid(long int num)
1034 {
1035 MG_COARETE* mgcoarete=get_mg_coareteid(num);
1036 if (mgcoarete==NULL)
1037 {
1038 return FAIL;
1039 }
1040 MG_IDENTIFICATEUR* id=mgcoarete;
1041 LISTE_ENTITE::iterator i=lst_entite.find(id);
1042 lst_entite.erase(i);
1043 LISTE_MG_COARETE::iterator j=lst_mg_coarete.find(num);
1044 lst_mg_coarete.erase(j);
1045 mgcoarete->get_arete()->supprimer_mg_coarete(mgcoarete);
1046 delete mgcoarete;
1047 return OK;
1048 }
1049
1050
1051 unsigned int MG_GEOMETRIE::get_nb_coarete(void)
1052 {
1053 return lst_mg_coarete.size();
1054 }
1055
1056 MG_COARETE* MG_GEOMETRIE::get_premier_coarete(LISTE_MG_COARETE::iterator& it)
1057 {
1058 it=lst_mg_coarete.begin();
1059 if(it==lst_mg_coarete.end()) return NULL;
1060 return it->second;
1061 }
1062
1063 MG_COARETE* MG_GEOMETRIE::get_suivant_coarete(LISTE_MG_COARETE::iterator& it)
1064 {
1065 it++;
1066 if(it==lst_mg_coarete.end()) return NULL;
1067 return it->second;
1068 }
1069
1070 MG_COARETE* MG_GEOMETRIE::get_mg_coareteid(long num)
1071 {
1072 LISTE_MG_COARETE::iterator i=lst_mg_coarete.find(num);
1073 if (i==lst_mg_coarete.end())
1074 {
1075 return NULL;
1076 }
1077 return ((*i).second);
1078 }
1079
1080
1081 // ENTITE MG_BOUCLE
1082
1083 int MG_GEOMETRIE::ajouter_mg_boucle(MG_BOUCLE* mgboucle)
1084 {
1085 gest->recherche_bonid(*mgboucle);
1086 MG_IDENTIFICATEUR *id=mgboucle;
1087 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1088 if (!p.second)
1089 {
1090 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1091 return FAIL;
1092 }
1093 std::pair<const unsigned long,MG_BOUCLE*> tmp(mgboucle->get_id(),mgboucle);
1094 std::pair<LISTE_MG_BOUCLE::iterator,bool> p2 = lst_mg_boucle.insert(tmp);
1095 return OK;
1096 }
1097
1098 int MG_GEOMETRIE::ajouter_mg_boucle(MG_BOUCLE *mgboucle,MG_POUTRE* mgpoutre)
1099 {
1100 gest->recherche_bonid(*mgboucle);
1101 MG_IDENTIFICATEUR *id=mgboucle;
1102 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1103 if (!p.second)
1104 {
1105 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1106 return FAIL;
1107 }
1108
1109 std::pair<const unsigned long,MG_BOUCLE*> tmp(mgboucle->get_id(),mgboucle);
1110 std::pair<LISTE_MG_BOUCLE::iterator,bool> p2 = lst_mg_boucle.insert(tmp);
1111 if(p2.second) mgpoutre->ajouter_mg_boucle(mgboucle);
1112 return OK;
1113 }
1114
1115 int MG_GEOMETRIE::ajouter_mg_boucle(MG_BOUCLE *mgboucle,MG_FACE* mgface)
1116 {
1117 gest->recherche_bonid(*mgboucle);
1118 MG_IDENTIFICATEUR *id=mgboucle;
1119 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1120 if (!p.second)
1121 {
1122 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1123 return FAIL;
1124 }
1125
1126 std::pair<const unsigned long,MG_BOUCLE*> tmp(mgboucle->get_id(),mgboucle);
1127 std::pair<LISTE_MG_BOUCLE::iterator,bool> p2 = lst_mg_boucle.insert(tmp);
1128 if(p2.second) mgface->ajouter_mg_boucle(mgboucle);
1129 return OK;
1130 }
1131
1132
1133 MG_BOUCLE* MG_GEOMETRIE::get_mg_boucleid(unsigned long num)
1134 {
1135 LISTE_MG_BOUCLE::iterator i=lst_mg_boucle.find(num);
1136 if (i==lst_mg_boucle.end())
1137 {
1138 // afficheur << INEXISTE << enderr;
1139 return NULL;
1140 }
1141 return ((*i).second);
1142 }
1143
1144
1145
1146 MG_BOUCLE* MG_GEOMETRIE::get_mg_boucle(unsigned int num)
1147 {
1148 if (!(num<lst_mg_boucle.size()))
1149 {
1150 // afficheur << INEXISTE << enderr;
1151 return NULL;
1152 }
1153 LISTE_MG_BOUCLE::iterator i=lst_mg_boucle.begin();
1154 for (unsigned long j=0;j<num;j++) i++;
1155 return ((*i).second);
1156 }
1157
1158
1159
1160 unsigned int MG_GEOMETRIE::get_nb_mg_boucle(void)
1161 {
1162 return lst_mg_boucle.size();
1163 }
1164
1165
1166 int MG_GEOMETRIE::supprimer_mg_boucleid(unsigned long num)
1167 {
1168 MG_BOUCLE* mgboucle=get_mg_boucleid(num);
1169 if (mgboucle==NULL)
1170 {
1171 // afficheur << INEXISTE2 << enderr;
1172 return FAIL;
1173 }
1174 MG_IDENTIFICATEUR* id=mgboucle;
1175 LISTE_ENTITE::iterator i=lst_entite.find(id);
1176 lst_entite.erase(i);
1177 LISTE_MG_BOUCLE::iterator j=lst_mg_boucle.find(num);
1178 lst_mg_boucle.erase(j);
1179 for (int k=0;k<mgboucle->get_nb_mg_coarete();k++)
1180 {
1181 MG_COARETE* coarete=mgboucle->get_mg_coarete(k);
1182 supprimer_mg_coarete(coarete);
1183 }
1184 #ifdef BREP_OCC
1185 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_BOUCLE((OCC_BOUCLE*)mgboucle);
1186 #endif
1187 delete mgboucle;
1188 return OK;
1189 }
1190
1191
1192 int MG_GEOMETRIE::supprimer_mg_boucle(unsigned int num)
1193 {
1194 MG_BOUCLE* mgboucle=get_mg_boucle(num);
1195 if (mgboucle==NULL)
1196 {
1197 // afficheur << INEXISTE2 << enderr;
1198 return FAIL;
1199 }
1200 MG_IDENTIFICATEUR* id=mgboucle;
1201 LISTE_ENTITE::iterator i=lst_entite.find(id);
1202 lst_entite.erase(i);
1203 LISTE_MG_BOUCLE::iterator j=lst_mg_boucle.begin();
1204 for (unsigned int k=0;k<num;k++) j++;
1205 lst_mg_boucle.erase(j);
1206 for (int k=0;k<mgboucle->get_nb_mg_coarete();k++)
1207 {
1208 MG_COARETE* coarete=mgboucle->get_mg_coarete(k);
1209 supprimer_mg_coarete(coarete);
1210 }
1211 #ifdef BREP_OCC
1212 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_BOUCLE((OCC_BOUCLE*)mgboucle);
1213 #endif
1214 delete mgboucle;
1215 return OK;
1216 }
1217
1218
1219 void MG_GEOMETRIE::supprimer_tout_mg_boucle(void)
1220 {
1221 while (get_nb_mg_boucle()!=0)
1222 {
1223 LISTE_MG_BOUCLE::iterator j=lst_mg_boucle.begin();
1224 MG_BOUCLE* mgboucle=(*j).second;
1225 MG_IDENTIFICATEUR* id=mgboucle;
1226 LISTE_ENTITE::iterator i=lst_entite.find(id);
1227 lst_entite.erase(i);
1228 lst_mg_boucle.erase(j);
1229 for (int k=0;k<mgboucle->get_nb_mg_coarete();k++)
1230 {
1231 MG_COARETE* coarete=mgboucle->get_mg_coarete(k);
1232 supprimer_mg_coarete(coarete);
1233 }
1234 #ifdef BREP_OCC
1235 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_BOUCLE((OCC_BOUCLE*)mgboucle);
1236 #endif
1237 delete mgboucle;
1238 }
1239 }
1240
1241 MG_BOUCLE* MG_GEOMETRIE::get_premier_boucle(LISTE_MG_BOUCLE::iterator &it)
1242 {
1243 it = lst_mg_boucle.begin();
1244 if (it == lst_mg_boucle.end())
1245 return NULL;
1246 return it->second ;
1247 }
1248
1249 MG_BOUCLE* MG_GEOMETRIE::get_suivant_boucle(LISTE_MG_BOUCLE::iterator &it)
1250 {
1251 it++;
1252 if (it==lst_mg_boucle.end())
1253 return NULL;
1254 return it->second;
1255 }
1256
1257
1258 // ENTITE MG_FACE
1259
1260 int MG_GEOMETRIE::ajouter_mg_face(MG_FACE *mgface)
1261 {
1262 gest->recherche_bonid(*mgface);
1263 MG_IDENTIFICATEUR *id=mgface;
1264 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1265 if (!p.second)
1266 {
1267 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1268 return FAIL;
1269 }
1270
1271 std::pair<const unsigned long,MG_FACE*> tmp(mgface->get_id(),mgface);
1272 lst_mg_face.insert(tmp);
1273 return OK;
1274 }
1275
1276
1277 MG_FACE* MG_GEOMETRIE::get_mg_faceid(unsigned long num)
1278 {
1279 LISTE_MG_FACE::iterator i=lst_mg_face.find(num);
1280 if (i==lst_mg_face.end())
1281 {
1282 // afficheur << INEXISTE << enderr;
1283 return NULL;
1284 }
1285 return ((*i).second);
1286 }
1287
1288 MG_FACE* MG_GEOMETRIE::get_mg_faceid(std::string id)
1289 {
1290 LISTE_MG_FACE::iterator i=lst_mg_face.begin();
1291 int nb=lst_mg_face.size();
1292 for (int j=0;j<nb;j++)
1293 {
1294 MG_FACE* face=(*i).second;
1295 std::string idori=face->get_idoriginal();
1296 if (idori==id) return face;
1297 i++;
1298 }
1299 return NULL;
1300 }
1301
1302
1303 MG_FACE* MG_GEOMETRIE::get_mg_face(unsigned int num)
1304 {
1305 if (!(num<lst_mg_face.size()))
1306 {
1307 // afficheur << INEXISTE << enderr;
1308 return NULL;
1309 }
1310 LISTE_MG_FACE::iterator i=lst_mg_face.begin();
1311 for (unsigned long j=0;j<num;j++) i++;
1312 return ((*i).second);
1313 }
1314
1315
1316
1317 unsigned int MG_GEOMETRIE::get_nb_mg_face(void)
1318 {
1319 return lst_mg_face.size();
1320 }
1321
1322
1323 int MG_GEOMETRIE::supprimer_mg_faceid(unsigned long num)
1324 {
1325 MG_FACE* mgface=get_mg_faceid(num);
1326 if (mgface==NULL)
1327 {
1328 // afficheur << INEXISTE2 << enderr;
1329 return FAIL;
1330 }
1331 if (mgface->get_nb_mg_coface()!=0)
1332 {
1333 // afficheur << ERRCOFACE << mgface->get_id() << enderr;
1334 return FAIL;
1335 }
1336 MG_IDENTIFICATEUR* id=mgface;
1337 LISTE_ENTITE::iterator i=lst_entite.find(id);
1338 lst_entite.erase(i);
1339 LISTE_MG_FACE::iterator j=lst_mg_face.find(num);
1340 lst_mg_face.erase(j);
1341 #ifdef BREP_OCC
1342 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_FACE((OCC_FACE*)mgface);
1343 #endif
1344 delete mgface;
1345 return OK;
1346 }
1347
1348
1349 int MG_GEOMETRIE::supprimer_mg_face(unsigned int num)
1350 {
1351 MG_FACE* mgface=get_mg_face(num);
1352 if (mgface==NULL)
1353 {
1354 // afficheur << INEXISTE2 << enderr;
1355 return FAIL;
1356 }
1357 if (mgface->get_nb_mg_coface()!=0)
1358 {
1359 // afficheur << ERRCOFACE << mgface->get_id() << enderr;
1360 return FAIL;
1361 }
1362 MG_IDENTIFICATEUR* id=mgface;
1363 LISTE_ENTITE::iterator i=lst_entite.find(id);
1364 lst_entite.erase(i);
1365 LISTE_MG_FACE::iterator j=lst_mg_face.begin();
1366 for (unsigned int k=0;k<num;k++) j++;
1367 lst_mg_face.erase(j);
1368 #ifdef BREP_OCC
1369 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_FACE((OCC_FACE*)mgface);
1370 #endif
1371 delete mgface;
1372 return OK;
1373 }
1374
1375
1376 void MG_GEOMETRIE::supprimer_tout_mg_face(void)
1377 {
1378
1379 while (get_nb_mg_face()!=0)
1380 {
1381 LISTE_MG_FACE::iterator j=lst_mg_face.begin();
1382 MG_FACE* mgface=(*j).second;
1383 MG_IDENTIFICATEUR* id=mgface;
1384 LISTE_ENTITE::iterator i=lst_entite.find(id);
1385 lst_entite.erase(i);
1386 lst_mg_face.erase(j);
1387 #ifdef BREP_OCC
1388 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_FACE((OCC_FACE*)mgface);
1389 #endif
1390 delete mgface;
1391 }
1392 }
1393
1394 MG_FACE* MG_GEOMETRIE::get_premier_face(LISTE_MG_FACE::iterator &it)
1395 {
1396 it = lst_mg_face.begin();
1397 if (it == lst_mg_face.end())
1398 return NULL;
1399 return it->second ;
1400 }
1401
1402 MG_FACE* MG_GEOMETRIE::get_suivant_face(LISTE_MG_FACE::iterator &it)
1403 {
1404 it++;
1405 if (it==lst_mg_face.end())
1406 return NULL;
1407 return it->second;
1408 }
1409
1410
1411 // ENTITE MG_COFACE
1412
1413 int MG_GEOMETRIE::ajouter_mg_coface(MG_COFACE* mgcoface)
1414 {
1415 gest->recherche_bonid(*mgcoface);
1416 MG_IDENTIFICATEUR *id=mgcoface;
1417 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1418 if (!p.second)
1419 {
1420 return FAIL;
1421 }
1422
1423 std::pair<const unsigned long,MG_COFACE*> tmp(mgcoface->get_id(),mgcoface);
1424 lst_mg_coface.insert(tmp);
1425 return OK;
1426 }
1427
1428 MG_COFACE* MG_GEOMETRIE::ajouter_mg_coface(MG_FACE *mgface,MG_COQUILLE *mgcoq,int sens)
1429 {
1430 MG_COFACE* mgcoface=new MG_COFACE(mgface,mgcoq,sens);
1431 gest->recherche_bonid(*mgcoface);
1432 MG_IDENTIFICATEUR *id=mgcoface;
1433 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1434 if (!p.second)
1435 {
1436 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1437 delete mgcoface;
1438 return NULL;
1439 }
1440
1441 std::pair<const unsigned long,MG_COFACE*> tmp(mgcoface->get_id(),mgcoface);
1442 lst_mg_coface.insert(tmp);
1443 mgface->ajouter_mg_coface(mgcoface);
1444 return mgcoface;
1445 }
1446
1447
1448 MG_COFACE* MG_GEOMETRIE::ajouter_mg_coface(unsigned long num,MG_FACE *mgface,MG_COQUILLE *mgcoq,int sens)
1449 {
1450 MG_COFACE* mgcoface=new MG_COFACE(num,mgface,mgcoq,sens);
1451 MG_IDENTIFICATEUR *id=mgcoface;
1452 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1453 if (!p.second)
1454 {
1455 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1456 delete mgcoface;
1457 return NULL;
1458 }
1459
1460 std::pair<const unsigned long,MG_COFACE*> tmp(mgcoface->get_id(),mgcoface);
1461 lst_mg_coface.insert(tmp);
1462 mgface->ajouter_mg_coface(mgcoface);
1463 return mgcoface;
1464 }
1465
1466 int MG_GEOMETRIE::supprimer_mg_coface(MG_COFACE* mgcoface)
1467 {
1468 if (mgcoface==NULL)
1469 {
1470 // afficheur << INEXISTE2 << enderr;
1471 return FAIL;
1472 }
1473 MG_IDENTIFICATEUR* id=mgcoface;
1474 LISTE_ENTITE::iterator i=lst_entite.find(id);
1475 lst_entite.erase(i);
1476 LISTE_MG_COFACE::iterator j=lst_mg_coface.find(mgcoface->get_id());
1477 lst_mg_coface.erase(j);
1478 mgcoface->get_face()->supprimer_mg_coface(mgcoface);
1479 delete mgcoface;
1480 return OK;
1481 }
1482
1483 int MG_GEOMETRIE::supprimer_mg_cofaceid(long int num)
1484 {
1485 MG_COFACE* mgcoface=get_mg_cofaceid(num);
1486 if (mgcoface==NULL)
1487 {
1488 return FAIL;
1489 }
1490 MG_IDENTIFICATEUR* id=mgcoface;
1491 LISTE_ENTITE::iterator i=lst_entite.find(id);
1492 lst_entite.erase(i);
1493 LISTE_MG_COFACE::iterator j=lst_mg_coface.find(num);
1494 lst_mg_coface.erase(j);
1495 mgcoface->get_face()->supprimer_mg_coface(mgcoface);
1496 delete mgcoface;
1497 return OK;
1498 }
1499
1500
1501 unsigned int MG_GEOMETRIE::get_nb_coface(void)
1502 {
1503 return lst_mg_coface.size();
1504 }
1505
1506 MG_COFACE* MG_GEOMETRIE::get_premier_coface(LISTE_MG_COFACE::iterator& it)
1507 {
1508 it=lst_mg_coface.begin();
1509 if(it==lst_mg_coface.end()) return NULL;
1510 return it->second;
1511 }
1512
1513 MG_COFACE* MG_GEOMETRIE::get_suivant_coface(LISTE_MG_COFACE::iterator& it)
1514 {
1515 it++;
1516 if(it==lst_mg_coface.end()) return NULL;
1517 return it->second;
1518 }
1519
1520 MG_COFACE* MG_GEOMETRIE::get_mg_cofaceid(long num)
1521 {
1522 LISTE_MG_COFACE::iterator i=lst_mg_coface.find(num);
1523 if (i==lst_mg_coface.end())
1524 {
1525 return NULL;
1526 }
1527 return ((*i).second);
1528 }
1529
1530
1531
1532 // ENTITE MG_COQUILLE
1533
1534 int MG_GEOMETRIE::ajouter_mg_coquille(MG_COQUILLE* mgcoq)
1535 {
1536 gest->recherche_bonid(*mgcoq);
1537 MG_IDENTIFICATEUR *id=mgcoq;
1538 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1539 if (!p.second)
1540 {
1541 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1542 return FAIL;
1543 }
1544 std::pair<const unsigned long,MG_COQUILLE*> tmp(mgcoq->get_id(),mgcoq);
1545 std::pair<LISTE_MG_COQUILLE::iterator,bool> p2 = lst_mg_coquille.insert(tmp);
1546 return OK;
1547 }
1548
1549 int MG_GEOMETRIE::ajouter_mg_coquille(MG_COQUILLE *mgcoq,MG_COQUE *mgcoque)
1550 {
1551 gest->recherche_bonid(*mgcoq);
1552 MG_IDENTIFICATEUR *id=mgcoq;
1553 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1554 if (!p.second)
1555 {
1556 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1557 return FAIL;
1558 }
1559
1560 std::pair<const unsigned long,MG_COQUILLE*> tmp(mgcoq->get_id(),mgcoq);
1561 std::pair<LISTE_MG_COQUILLE::iterator,bool> p2 = lst_mg_coquille.insert(tmp);
1562 if(p2.second) mgcoque->ajouter_mg_coquille(mgcoq);
1563 return OK;
1564 }
1565
1566
1567 int MG_GEOMETRIE::ajouter_mg_coquille(MG_COQUILLE *mgcoquille,MG_VOLUME* mgvolume)
1568 {
1569 gest->recherche_bonid(*mgcoquille);
1570 MG_IDENTIFICATEUR *id=mgcoquille;
1571 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1572 if (!p.second)
1573 {
1574 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1575 return FAIL;
1576 }
1577
1578 std::pair<const unsigned long,MG_COQUILLE*> tmp(mgcoquille->get_id(),mgcoquille);
1579 std::pair<LISTE_MG_COQUILLE::iterator,bool> p2 = lst_mg_coquille.insert(tmp);
1580 if(p2.second) mgvolume->ajouter_mg_coquille(mgcoquille);
1581 return OK;
1582 }
1583
1584
1585 MG_COQUILLE* MG_GEOMETRIE::get_mg_coquilleid(unsigned long num)
1586 {
1587 LISTE_MG_COQUILLE::iterator i=lst_mg_coquille.find(num);
1588 if (i==lst_mg_coquille.end())
1589 {
1590 // afficheur << INEXISTE << enderr;
1591 return NULL;
1592 }
1593 return ((*i).second);
1594 }
1595
1596
1597
1598 MG_COQUILLE* MG_GEOMETRIE::get_mg_coquille(unsigned int num)
1599 {
1600 if (!(num<lst_mg_coquille.size()))
1601 {
1602 // afficheur << INEXISTE << enderr;
1603 return NULL;
1604 }
1605 LISTE_MG_COQUILLE::iterator i=lst_mg_coquille.begin();
1606 for (unsigned long j=0;j<num;j++) i++;
1607 return ((*i).second);
1608 }
1609
1610 MG_COQUILLE* MG_GEOMETRIE::get_premier_coquille(LISTE_MG_COQUILLE::iterator &it)
1611 {
1612 it = lst_mg_coquille.begin();
1613 if (it == lst_mg_coquille.end())
1614 return NULL;
1615 return it->second ;
1616 }
1617
1618 MG_COQUILLE* MG_GEOMETRIE::get_suivant_coquille(LISTE_MG_COQUILLE::iterator &it)
1619 {
1620 it++;
1621 if (it==lst_mg_coquille.end())
1622 return NULL;
1623 return it->second;
1624 }
1625
1626
1627 unsigned int MG_GEOMETRIE::get_nb_mg_coquille(void)
1628 {
1629 return lst_mg_coquille.size();
1630 }
1631
1632
1633 int MG_GEOMETRIE::supprimer_mg_coquilleid(unsigned long num)
1634 {
1635 MG_COQUILLE* mgcoquille=get_mg_coquilleid(num);
1636 if (mgcoquille==NULL)
1637 {
1638 // afficheur << INEXISTE2 << enderr;
1639 return FAIL;
1640 }
1641 MG_IDENTIFICATEUR* id=mgcoquille;
1642 LISTE_ENTITE::iterator i=lst_entite.find(id);
1643 lst_entite.erase(i);
1644 LISTE_MG_COQUILLE::iterator j=lst_mg_coquille.find(num);
1645 lst_mg_coquille.erase(j);
1646 for (int k=0;k<mgcoquille->get_nb_mg_coface();k++)
1647 {
1648 MG_COFACE* coface=mgcoquille->get_mg_coface(k);
1649 supprimer_mg_coface(coface);
1650 }
1651 #ifdef BREP_OCC
1652 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_COQUILLE((OCC_COQUILLE*)mgcoquille);
1653 #endif
1654 delete mgcoquille;
1655 return OK;
1656 }
1657
1658
1659 int MG_GEOMETRIE::supprimer_mg_coquille(unsigned int num)
1660 {
1661 MG_COQUILLE* mgcoquille=get_mg_coquille(num);
1662 if (mgcoquille==NULL)
1663 {
1664 // afficheur << INEXISTE2 << enderr;
1665 return FAIL;
1666 }
1667 MG_IDENTIFICATEUR* id=mgcoquille;
1668 LISTE_ENTITE::iterator i=lst_entite.find(id);
1669 lst_entite.erase(i);
1670 LISTE_MG_COQUILLE::iterator j=lst_mg_coquille.begin();
1671 for (unsigned int k=0;k<num;k++) j++;
1672 lst_mg_coquille.erase(j);
1673 for (int k=0;k<mgcoquille->get_nb_mg_coface();k++)
1674 {
1675 MG_COFACE* coface=mgcoquille->get_mg_coface(k);
1676 supprimer_mg_coface(coface);
1677 }
1678 #ifdef BREP_OCC
1679 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_COQUILLE((OCC_COQUILLE*)mgcoquille);
1680 #endif
1681 delete mgcoquille;
1682 return OK;
1683 }
1684
1685
1686 void MG_GEOMETRIE::supprimer_tout_mg_coquille(void)
1687 {
1688 while (get_nb_mg_coquille()!=0)
1689 {
1690 LISTE_MG_COQUILLE::iterator j=lst_mg_coquille.begin();
1691 MG_COQUILLE* mgcoquille=(*j).second;
1692 MG_IDENTIFICATEUR* id=mgcoquille;
1693 LISTE_ENTITE::iterator i=lst_entite.find(id);
1694 lst_entite.erase(i);
1695 lst_mg_coquille.erase(j);
1696 for (int k=0;k<mgcoquille->get_nb_mg_coface();k++)
1697 {
1698 MG_COFACE* coface=mgcoquille->get_mg_coface(k);
1699 supprimer_mg_coface(coface);
1700 }
1701 #ifdef BREP_OCC
1702 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_COQUILLE((OCC_COQUILLE*)mgcoquille);
1703 #endif
1704 delete mgcoquille;
1705 }
1706 }
1707
1708
1709 // ENTITE MG_VOLUME
1710
1711 int MG_GEOMETRIE::ajouter_mg_volume(MG_VOLUME *mgvolume)
1712 {
1713 gest->recherche_bonid(*mgvolume);
1714 MG_IDENTIFICATEUR *id=mgvolume;
1715 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1716 if (!p.second)
1717 {
1718 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1719 return FAIL;
1720 }
1721
1722 std::pair<const unsigned long,MG_VOLUME*> tmp(mgvolume->get_id(),mgvolume);
1723 lst_mg_volume.insert(tmp);
1724 return OK;
1725 }
1726
1727
1728 MG_VOLUME* MG_GEOMETRIE::get_mg_volumeid(unsigned long num)
1729 {
1730 LISTE_MG_VOLUME::iterator i=lst_mg_volume.find(num);
1731 if (i==lst_mg_volume.end())
1732 {
1733 // afficheur << INEXISTE << enderr;
1734 return NULL;
1735 }
1736 return ((*i).second);
1737 }
1738
1739 MG_VOLUME* MG_GEOMETRIE::get_mg_volumeid(std::string id)
1740 {
1741 LISTE_MG_VOLUME::iterator i=lst_mg_volume.begin();
1742 int nb=lst_mg_volume.size();
1743 for (int j=0;j<nb;j++)
1744 {
1745 MG_VOLUME* volume=(*i).second;
1746 std::string idori=volume->get_idoriginal();
1747 if (idori==id) return volume;
1748 i++;
1749 }
1750 return NULL;
1751 }
1752
1753
1754 MG_VOLUME* MG_GEOMETRIE::get_mg_volume(unsigned int num)
1755 {
1756 if (!(num<lst_mg_volume.size()))
1757 {
1758 // afficheur << INEXISTE << enderr;
1759 return NULL;
1760 }
1761 LISTE_MG_VOLUME::iterator i=lst_mg_volume.begin();
1762 for (unsigned long j=0;j<num;j++) i++;
1763 return ((*i).second);
1764 }
1765
1766 MG_VOLUME* MG_GEOMETRIE::get_premier_volume(LISTE_MG_VOLUME::iterator &it)
1767 {
1768 it = lst_mg_volume.begin();
1769 if (it == lst_mg_volume.end())
1770 return NULL;
1771 return it->second ;
1772 }
1773
1774 MG_VOLUME* MG_GEOMETRIE::get_suivant_volume(LISTE_MG_VOLUME::iterator &it)
1775 {
1776 it++;
1777 if (it==lst_mg_volume.end())
1778 return NULL;
1779 return it->second;
1780 }
1781
1782
1783
1784 unsigned int MG_GEOMETRIE::get_nb_mg_volume(void)
1785 {
1786 return lst_mg_volume.size();
1787 }
1788
1789
1790 int MG_GEOMETRIE::supprimer_mg_volumeid(unsigned long num)
1791 {
1792 MG_VOLUME* mgvolume=get_mg_volumeid(num);
1793 if (mgvolume==NULL)
1794 {
1795 // afficheur << INEXISTE2 << enderr;
1796 return FAIL;
1797 }
1798 MG_IDENTIFICATEUR* id=mgvolume;
1799 LISTE_ENTITE::iterator i=lst_entite.find(id);
1800 lst_entite.erase(i);
1801 LISTE_MG_VOLUME::iterator j=lst_mg_volume.find(num);
1802 lst_mg_volume.erase(j);
1803 #ifdef BREP_OCC
1804 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_VOLUME((OCC_VOLUME*)mgvolume);
1805 #endif
1806 delete mgvolume;
1807 return OK;
1808 }
1809
1810
1811 int MG_GEOMETRIE::supprimer_mg_volume(unsigned int num)
1812 {
1813 MG_VOLUME* mgvolume=get_mg_volume(num);
1814 if (mgvolume==NULL)
1815 {
1816 // afficheur << INEXISTE2 << enderr;
1817 return FAIL;
1818 }
1819 MG_IDENTIFICATEUR* id=mgvolume;
1820 LISTE_ENTITE::iterator i=lst_entite.find(id);
1821 lst_entite.erase(i);
1822 LISTE_MG_VOLUME::iterator j=lst_mg_volume.begin();
1823 for (unsigned int k=0;k<num;k++) j++;
1824 lst_mg_volume.erase(j);
1825 #ifdef BREP_OCC
1826 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_VOLUME((OCC_VOLUME*)mgvolume);
1827 #endif
1828 delete mgvolume;
1829 return OK;
1830 }
1831
1832
1833 void MG_GEOMETRIE::supprimer_tout_mg_volume(void)
1834 {
1835 while (get_nb_mg_volume()!=0)
1836 {
1837 LISTE_MG_VOLUME::iterator j=lst_mg_volume.begin();
1838 MG_VOLUME* mgvolume=(*j).second;
1839 MG_IDENTIFICATEUR* id=mgvolume;
1840 LISTE_ENTITE::iterator i=lst_entite.find(id);
1841 lst_entite.erase(i);
1842 lst_mg_volume.erase(j);
1843 #ifdef BREP_OCC
1844 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_VOLUME((OCC_VOLUME*)mgvolume);
1845 #endif
1846 delete mgvolume;
1847 }
1848 }
1849
1850 // ENTITE MG_COQUE
1851
1852 int MG_GEOMETRIE::ajouter_mg_coque(MG_COQUE *mgcoque)
1853 {
1854 gest->recherche_bonid(*mgcoque);
1855 MG_IDENTIFICATEUR *id=mgcoque;
1856 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1857 if (!p.second)
1858 {
1859 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1860 return FAIL;
1861 }
1862
1863 std::pair<const unsigned long,MG_COQUE*> tmp(mgcoque->get_id(),mgcoque);
1864 lst_mg_coque.insert(tmp);
1865 return OK;
1866 }
1867
1868
1869 MG_COQUE* MG_GEOMETRIE::get_mg_coqueid(unsigned long num)
1870 {
1871 LISTE_MG_COQUE::iterator i=lst_mg_coque.find(num);
1872 if (i==lst_mg_coque.end())
1873 {
1874 // afficheur << INEXISTE << enderr;
1875 return NULL;
1876 }
1877 return ((*i).second);
1878 }
1879
1880 MG_COQUE* MG_GEOMETRIE::get_mg_coqueid(std::string id)
1881 {
1882 LISTE_MG_COQUE::iterator i=lst_mg_coque.begin();
1883 int nb=lst_mg_coque.size();
1884 for (int j=0;j<nb;j++)
1885 {
1886 MG_COQUE* coque=(*i).second;
1887 std::string idori=coque->get_idoriginal();
1888 if (idori==id) return coque;
1889 i++;
1890 }
1891 return NULL;
1892 }
1893
1894
1895 MG_COQUE* MG_GEOMETRIE::get_mg_coque(unsigned int num)
1896 {
1897 if (!(num<lst_mg_coque.size()))
1898 {
1899 // afficheur << INEXISTE << enderr;
1900 return NULL;
1901 }
1902 LISTE_MG_COQUE::iterator i=lst_mg_coque.begin();
1903 for (unsigned long j=0;j<num;j++) i++;
1904 return ((*i).second);
1905 }
1906
1907
1908 MG_COQUE* MG_GEOMETRIE::get_premier_coque(LISTE_MG_COQUE::iterator &it)
1909 {
1910 it = lst_mg_coque.begin();
1911 if (it == lst_mg_coque.end())
1912 return NULL;
1913 return it->second ;
1914 }
1915
1916 MG_COQUE* MG_GEOMETRIE::get_suivant_coque(LISTE_MG_COQUE::iterator &it)
1917 {
1918 it++;
1919 if (it==lst_mg_coque.end())
1920 return NULL;
1921 return it->second;
1922 }
1923
1924
1925 unsigned int MG_GEOMETRIE::get_nb_mg_coque(void)
1926 {
1927 return lst_mg_coque.size();
1928 }
1929
1930
1931 int MG_GEOMETRIE::supprimer_mg_coqueid(unsigned long num)
1932 {
1933 MG_COQUE* mgcoque=get_mg_coqueid(num);
1934 if (mgcoque==NULL)
1935 {
1936 // afficheur << INEXISTE2 << enderr;
1937 return FAIL;
1938 }
1939 MG_IDENTIFICATEUR* id=mgcoque;
1940 LISTE_ENTITE::iterator i=lst_entite.find(id);
1941 lst_entite.erase(i);
1942 LISTE_MG_COQUE::iterator j=lst_mg_coque.find(num);
1943 lst_mg_coque.erase(j);
1944 delete mgcoque;
1945 return OK;
1946 }
1947
1948
1949 int MG_GEOMETRIE::supprimer_mg_coque(unsigned int num)
1950 {
1951 MG_COQUE* mgcoque=get_mg_coque(num);
1952 if (mgcoque==NULL)
1953 {
1954 // afficheur << INEXISTE2 << enderr;
1955 return FAIL;
1956 }
1957 MG_IDENTIFICATEUR* id=mgcoque;
1958 LISTE_ENTITE::iterator i=lst_entite.find(id);
1959 lst_entite.erase(i);
1960 LISTE_MG_COQUE::iterator j=lst_mg_coque.begin();
1961 for (unsigned int k=0;k<num;k++) j++;
1962 lst_mg_coque.erase(j);
1963 delete mgcoque;
1964 return OK;
1965 }
1966
1967
1968 void MG_GEOMETRIE::supprimer_tout_mg_coque(void)
1969 {
1970 while (get_nb_mg_coque()!=0)
1971 {
1972 LISTE_MG_COQUE::iterator j=lst_mg_coque.begin();
1973 MG_COQUE* mgcoque=(*j).second;
1974 MG_IDENTIFICATEUR* id=mgcoque;
1975 LISTE_ENTITE::iterator i=lst_entite.find(id);
1976 lst_entite.erase(i);
1977 lst_mg_coque.erase(j);
1978 delete mgcoque;
1979 }
1980 }
1981
1982
1983 // ENTITE MG_POUTRE
1984
1985 int MG_GEOMETRIE::ajouter_mg_poutre(MG_POUTRE *mgpoutre)
1986 {
1987 gest->recherche_bonid(*mgpoutre);
1988 MG_IDENTIFICATEUR *id=mgpoutre;
1989 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1990 if (!p.second)
1991 {
1992 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1993 return FAIL;
1994 }
1995
1996 std::pair<const unsigned long,MG_POUTRE*> tmp(mgpoutre->get_id(),mgpoutre);
1997 lst_mg_poutre.insert(tmp);
1998 return OK;
1999 }
2000
2001
2002 MG_POUTRE* MG_GEOMETRIE::get_mg_poutreid(unsigned long num)
2003 {
2004 LISTE_MG_POUTRE::iterator i=lst_mg_poutre.find(num);
2005 if (i==lst_mg_poutre.end())
2006 {
2007 // afficheur << INEXISTE << enderr;
2008 return NULL;
2009 }
2010 return ((*i).second);
2011 }
2012
2013 MG_POUTRE* MG_GEOMETRIE::get_mg_poutreid(std::string id)
2014 {
2015 LISTE_MG_POUTRE::iterator i=lst_mg_poutre.begin();
2016 int nb=lst_mg_poutre.size();
2017 for (int j=0;j<nb;j++)
2018 {
2019 MG_POUTRE* poutre=(*i).second;
2020 std::string idori=poutre->get_idoriginal();
2021 if (idori==id) return poutre;
2022 i++;
2023 }
2024 return NULL;
2025 }
2026
2027
2028 MG_POUTRE* MG_GEOMETRIE::get_mg_poutre(unsigned int num)
2029 {
2030 if (!(num<lst_mg_poutre.size()))
2031 {
2032 // afficheur << INEXISTE << enderr;
2033 return NULL;
2034 }
2035 LISTE_MG_POUTRE::iterator i=lst_mg_poutre.begin();
2036 for (unsigned long j=0;j<num;j++) i++;
2037 return ((*i).second);
2038 }
2039
2040
2041 MG_POUTRE* MG_GEOMETRIE::get_premier_poutre(LISTE_MG_POUTRE::iterator &it)
2042 {
2043 it = lst_mg_poutre.begin();
2044 if (it == lst_mg_poutre.end())
2045 return NULL;
2046 return it->second ;
2047 }
2048
2049 MG_POUTRE* MG_GEOMETRIE::get_suivant_poutre(LISTE_MG_POUTRE::iterator &it)
2050 {
2051 it++;
2052 if (it==lst_mg_poutre.end())
2053 return NULL;
2054 return it->second;
2055 }
2056
2057
2058 unsigned int MG_GEOMETRIE::get_nb_mg_poutre(void)
2059 {
2060 return lst_mg_poutre.size();
2061 }
2062
2063
2064 int MG_GEOMETRIE::supprimer_mg_poutreid(unsigned long num)
2065 {
2066 MG_POUTRE* mgpoutre=get_mg_poutreid(num);
2067 if (mgpoutre==NULL)
2068 {
2069 // afficheur << INEXISTE2 << enderr;
2070 return FAIL;
2071 }
2072 MG_IDENTIFICATEUR* id=mgpoutre;
2073 LISTE_ENTITE::iterator i=lst_entite.find(id);
2074 lst_entite.erase(i);
2075 LISTE_MG_POUTRE::iterator j=lst_mg_poutre.find(num);
2076 lst_mg_poutre.erase(j);
2077 delete mgpoutre;
2078 return OK;
2079 }
2080
2081
2082 int MG_GEOMETRIE::supprimer_mg_poutre(unsigned int num)
2083 {
2084 MG_POUTRE* mgpoutre=get_mg_poutre(num);
2085 if (mgpoutre==NULL)
2086 {
2087 // afficheur << INEXISTE2 << enderr;
2088 return FAIL;
2089 }
2090 MG_IDENTIFICATEUR* id=mgpoutre;
2091 LISTE_ENTITE::iterator i=lst_entite.find(id);
2092 lst_entite.erase(i);
2093 LISTE_MG_POUTRE::iterator j=lst_mg_poutre.begin();
2094 for (unsigned int k=0;k<num;k++) j++;
2095 lst_mg_poutre.erase(j);
2096 delete mgpoutre;
2097 return OK;
2098 }
2099
2100
2101 void MG_GEOMETRIE::supprimer_tout_mg_poutre(void)
2102 {
2103 while (get_nb_mg_poutre()!=0)
2104 {
2105 LISTE_MG_POUTRE::iterator j=lst_mg_poutre.begin();
2106 MG_POUTRE* mgpoutre=(*j).second;
2107 MG_IDENTIFICATEUR* id=mgpoutre;
2108 LISTE_ENTITE::iterator i=lst_entite.find(id);
2109 lst_entite.erase(i);
2110 lst_mg_poutre.erase(j);
2111 delete mgpoutre;
2112 }
2113 }
2114 // ENTITE MG_GROUPE_TOPOLOGIQUE
2115
2116 int MG_GEOMETRIE::ajouter_mg_groupe_topologique(MG_GROUPE_TOPOLOGIQUE *mggroupe_topologique)
2117 {
2118 gest->recherche_bonid(*mggroupe_topologique);
2119 MG_IDENTIFICATEUR *id=mggroupe_topologique;
2120 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
2121 if (!p.second)
2122 {
2123 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
2124 return FAIL;
2125 }
2126
2127 std::pair<const unsigned long,MG_GROUPE_TOPOLOGIQUE*> tmp(mggroupe_topologique->get_id(),mggroupe_topologique);
2128 lst_mg_groupe_topologique.insert(tmp);
2129 return OK;
2130 }
2131
2132
2133 MG_GROUPE_TOPOLOGIQUE* MG_GEOMETRIE::get_mg_groupe_topologiqueid(unsigned long num)
2134 {
2135 LISTE_MG_GROUPE_TOPOLOGIQUE::iterator i=lst_mg_groupe_topologique.find(num);
2136 if (i==lst_mg_groupe_topologique.end())
2137 {
2138 // afficheur << INEXISTE << enderr;
2139 return NULL;
2140 }
2141 return ((*i).second);
2142 }
2143
2144
2145
2146 MG_GROUPE_TOPOLOGIQUE* MG_GEOMETRIE::get_mg_groupe_topologique(unsigned int num)
2147 {
2148 if (!(num<lst_mg_groupe_topologique.size()))
2149 {
2150 // afficheur << INEXISTE << enderr;
2151 return NULL;
2152 }
2153 LISTE_MG_GROUPE_TOPOLOGIQUE::iterator i=lst_mg_groupe_topologique.begin();
2154 for (unsigned long j=0;j<num;j++) i++;
2155 return ((*i).second);
2156 }
2157
2158
2159 MG_GROUPE_TOPOLOGIQUE* MG_GEOMETRIE::get_premier_groupe_topologique(LISTE_MG_GROUPE_TOPOLOGIQUE::iterator &it)
2160 {
2161 it = lst_mg_groupe_topologique.begin();
2162 if (it == lst_mg_groupe_topologique.end())
2163 return NULL;
2164 return it->second ;
2165 }
2166
2167 MG_GROUPE_TOPOLOGIQUE* MG_GEOMETRIE::get_suivant_groupe_topologique(LISTE_MG_GROUPE_TOPOLOGIQUE::iterator &it)
2168 {
2169 it++;
2170 if (it==lst_mg_groupe_topologique.end())
2171 return NULL;
2172 return it->second;
2173 }
2174
2175
2176 unsigned int MG_GEOMETRIE::get_nb_mg_groupe_topologique(void)
2177 {
2178 return lst_mg_groupe_topologique.size();
2179 }
2180
2181
2182 int MG_GEOMETRIE::supprimer_mg_groupe_topologiqueid(unsigned long num)
2183 {
2184 MG_GROUPE_TOPOLOGIQUE* mggroupe_topologique=get_mg_groupe_topologiqueid(num);
2185 if (mggroupe_topologique==NULL)
2186 {
2187 // afficheur << INEXISTE2 << enderr;
2188 return FAIL;
2189 }
2190 MG_IDENTIFICATEUR* id=mggroupe_topologique;
2191 LISTE_ENTITE::iterator i=lst_entite.find(id);
2192 lst_entite.erase(i);
2193 LISTE_MG_GROUPE_TOPOLOGIQUE::iterator j=lst_mg_groupe_topologique.find(num);
2194 lst_mg_groupe_topologique.erase(j);
2195 delete mggroupe_topologique;
2196 return OK;
2197 }
2198
2199
2200 int MG_GEOMETRIE::supprimer_mg_groupe_topologique(unsigned int num)
2201 {
2202 MG_GROUPE_TOPOLOGIQUE* mggroupe_topologique=get_mg_groupe_topologique(num);
2203 if (mggroupe_topologique==NULL)
2204 {
2205 // afficheur << INEXISTE2 << enderr;
2206 return FAIL;
2207 }
2208 MG_IDENTIFICATEUR* id=mggroupe_topologique;
2209 LISTE_ENTITE::iterator i=lst_entite.find(id);
2210 lst_entite.erase(i);
2211 LISTE_MG_GROUPE_TOPOLOGIQUE::iterator j=lst_mg_groupe_topologique.begin();
2212 for (unsigned int k=0;k<num;k++) j++;
2213 lst_mg_groupe_topologique.erase(j);
2214 delete mggroupe_topologique;
2215 return OK;
2216 }
2217
2218
2219 void MG_GEOMETRIE::supprimer_tout_mg_groupe_topologique(void)
2220 {
2221 while (get_nb_mg_groupe_topologique()!=0)
2222 {
2223 LISTE_MG_GROUPE_TOPOLOGIQUE::iterator j=lst_mg_groupe_topologique.begin();
2224 MG_GROUPE_TOPOLOGIQUE* mggroupe_topologique=(*j).second;
2225 MG_IDENTIFICATEUR* id=mggroupe_topologique;
2226 LISTE_ENTITE::iterator i=lst_entite.find(id);
2227 lst_entite.erase(i);
2228 lst_mg_groupe_topologique.erase(j);
2229 delete mggroupe_topologique;
2230 }
2231 }
2232 // ENTITE MG_GEOM_FONCTION
2233
2234 int MG_GEOMETRIE::ajouter_mg_geom_fonction(MG_GEOM_FONCTION *mggeomfon)
2235 {
2236 gest->recherche_bonid(*mggeomfon);
2237 MG_IDENTIFICATEUR *id=mggeomfon;
2238 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
2239 if (!p.second)
2240 {
2241 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
2242 return FAIL;
2243 }
2244
2245 std::pair<const unsigned long,MG_GEOM_FONCTION*> tmp(mggeomfon->get_id(),mggeomfon);
2246 lst_mg_geom_fonction.insert(tmp);
2247 return OK;
2248 }
2249
2250
2251 MG_GEOM_FONCTION* MG_GEOMETRIE::get_mg_geom_fonctionid(unsigned long num)
2252 {
2253 LISTE_MG_GEOM_FONCTION::iterator i=lst_mg_geom_fonction.find(num);
2254 if (i==lst_mg_geom_fonction.end())
2255 {
2256 // afficheur << INEXISTE << enderr;
2257 return NULL;
2258 }
2259 return ((*i).second);
2260 }
2261
2262
2263
2264 MG_GEOM_FONCTION* MG_GEOMETRIE::get_mg_geom_fonction(unsigned int num)
2265 {
2266 if (!(num<lst_mg_geom_fonction.size()))
2267 {
2268 // afficheur << INEXISTE << enderr;
2269 return NULL;
2270 }
2271 LISTE_MG_GEOM_FONCTION::iterator i=lst_mg_geom_fonction.begin();
2272 for (unsigned long j=0;j<num;j++) i++;
2273 return ((*i).second);
2274 }
2275
2276
2277 MG_GEOM_FONCTION* MG_GEOMETRIE::get_premier_geom_fonction(LISTE_MG_GEOM_FONCTION::iterator &it)
2278 {
2279 it = lst_mg_geom_fonction.begin();
2280 if (it == lst_mg_geom_fonction.end())
2281 return NULL;
2282 return it->second ;
2283 }
2284
2285 MG_GEOM_FONCTION* MG_GEOMETRIE::get_suivant_geom_fonction(LISTE_MG_GEOM_FONCTION::iterator &it)
2286 {
2287 it++;
2288 if (it==lst_mg_geom_fonction.end())
2289 return NULL;
2290 return it->second;
2291 }
2292
2293
2294 unsigned int MG_GEOMETRIE::get_nb_mg_geom_fonction(void)
2295 {
2296 return lst_mg_geom_fonction.size();
2297 }
2298
2299
2300 int MG_GEOMETRIE::supprimer_mg_geom_fonctionid(unsigned long num)
2301 {
2302 MG_GEOM_FONCTION* mggeomfon=get_mg_geom_fonctionid(num);
2303 if (mggeomfon==NULL)
2304 {
2305 // afficheur << INEXISTE2 << enderr;
2306 return FAIL;
2307 }
2308 MG_IDENTIFICATEUR* id=mggeomfon;
2309 LISTE_ENTITE::iterator i=lst_entite.find(id);
2310 lst_entite.erase(i);
2311 LISTE_MG_GEOM_FONCTION::iterator j=lst_mg_geom_fonction.find(num);
2312 lst_mg_geom_fonction.erase(j);
2313 delete mggeomfon;
2314 return OK;
2315 }
2316
2317
2318 int MG_GEOMETRIE::supprimer_mg_geom_fonction(unsigned int num)
2319 {
2320 MG_GEOM_FONCTION* mggeomfon=get_mg_geom_fonction(num);
2321 if (mggeomfon==NULL)
2322 {
2323 // afficheur << INEXISTE2 << enderr;
2324 return FAIL;
2325 }
2326 MG_IDENTIFICATEUR* id=mggeomfon;
2327 LISTE_ENTITE::iterator i=lst_entite.find(id);
2328 lst_entite.erase(i);
2329 LISTE_MG_GEOM_FONCTION::iterator j=lst_mg_geom_fonction.begin();
2330 for (unsigned int k=0;k<num;k++) j++;
2331 lst_mg_geom_fonction.erase(j);
2332 delete mggeomfon;
2333 return OK;
2334 }
2335
2336
2337 void MG_GEOMETRIE::supprimer_tout_mg_geom_fonction(void)
2338 {
2339 while (get_nb_mg_geom_fonction()!=0)
2340 {
2341 LISTE_MG_GEOM_FONCTION::iterator j=lst_mg_geom_fonction.begin();
2342 MG_GEOM_FONCTION* mggeomfon=(*j).second;
2343 MG_IDENTIFICATEUR* id=mggeomfon;
2344 LISTE_ENTITE::iterator i=lst_entite.find(id);
2345 lst_entite.erase(i);
2346 lst_mg_geom_fonction.erase(j);
2347 delete mggeomfon;
2348 }
2349 }
2350
2351
2352
2353 // ENTITE MG_VISU_COURBE
2354
2355 int MG_GEOMETRIE::ajouter_mg_visu_courbe(MG_VISU_COURBE *mgvcrb)
2356 {
2357 gest->recherche_bonidvisuel(*mgvcrb);
2358 std::pair<const unsigned long,MG_VISU_COURBE*> tmp(mgvcrb->get_id(),mgvcrb);
2359 lst_mg_visu_courbe.insert(tmp);
2360 return OK;
2361 }
2362
2363
2364 MG_VISU_COURBE* MG_GEOMETRIE::get_mg_visu_courbeid(unsigned long num)
2365 {
2366 LISTE_MG_VISU_COURBE::iterator i=lst_mg_visu_courbe.find(num);
2367 if (i==lst_mg_visu_courbe.end())
2368 {
2369 return NULL;
2370 }
2371 return ((*i).second);
2372 }
2373
2374
2375
2376 MG_VISU_COURBE* MG_GEOMETRIE::get_mg_visu_courbe(unsigned int num)
2377 {
2378 if (!(num<lst_mg_visu_courbe.size()))
2379 {
2380 return NULL;
2381 }
2382 LISTE_MG_VISU_COURBE::iterator i=lst_mg_visu_courbe.begin();
2383
2384 for (unsigned long j=0;j<num;j++) i++;
2385 return ((*i).second);
2386 }
2387
2388
2389
2390 unsigned int MG_GEOMETRIE::get_nb_mg_visu_courbe(void)
2391 {
2392 return lst_mg_visu_courbe.size();
2393 }
2394
2395 MG_VISU_COURBE* MG_GEOMETRIE::get_premier_visu_courbe(LISTE_MG_VISU_COURBE::iterator& it)
2396 {
2397 it = lst_mg_visu_courbe.begin();
2398 if (it == lst_mg_visu_courbe.end())
2399 return NULL;
2400 return it->second ;
2401 }
2402
2403 MG_VISU_COURBE* MG_GEOMETRIE::get_suivant_visu_courbe(LISTE_MG_VISU_COURBE::iterator& it)
2404 {
2405 it++;
2406 if (it == lst_mg_visu_courbe.end())
2407 return NULL;
2408 return it->second ;
2409 }
2410
2411
2412
2413 int MG_GEOMETRIE::supprimer_mg_visu_courbeid(unsigned long num)
2414 {
2415 MG_VISU_COURBE* mgvcrb=get_mg_visu_courbeid(num);
2416 if (mgvcrb==NULL)
2417 {
2418 return FAIL;
2419 }
2420 LISTE_MG_VISU_COURBE::iterator j=lst_mg_visu_courbe.find(num);
2421 lst_mg_visu_courbe.erase(j);
2422 delete mgvcrb;
2423 return OK;
2424 }
2425
2426
2427 int MG_GEOMETRIE::supprimer_mg_visu_courbe(unsigned int num)
2428 {
2429 MG_VISU_COURBE* mgvcrb=get_mg_visu_courbe(num);
2430 if (mgvcrb==NULL)
2431 {
2432 return FAIL;
2433 }
2434 LISTE_MG_VISU_COURBE::iterator j=lst_mg_visu_courbe.begin();
2435 for (unsigned int k=0;k<num;k++) j++;
2436 lst_mg_visu_courbe.erase(j);
2437 delete mgvcrb;
2438 return OK;
2439 }
2440
2441 void MG_GEOMETRIE::supprimer_tout_mg_visu_courbe(void)
2442 {
2443 while (get_nb_mg_visu_courbe()!=0)
2444 {
2445 LISTE_MG_VISU_COURBE::iterator j=lst_mg_visu_courbe.begin();
2446 MG_VISU_COURBE* mgvcrb=(*j).second;
2447 lst_mg_visu_courbe.erase(j);
2448 delete mgvcrb;
2449 }
2450 }
2451
2452 int MG_GEOMETRIE::ajouter_mg_element_topologique(MG_ELEMENT_TOPOLOGIQUE* mg_element_topologique)
2453 {
2454 switch(mg_element_topologique->get_type())
2455 {
2456 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::SOMMET:
2457 ajouter_mg_sommet((MG_SOMMET*)mg_element_topologique); break;
2458 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::ARETE:
2459 ajouter_mg_arete((MG_ARETE*)mg_element_topologique); break;
2460 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::FACE:
2461 ajouter_mg_face((MG_FACE*)mg_element_topologique); break;
2462 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::COQUE:
2463 ajouter_mg_coque((MG_COQUE*)mg_element_topologique); break;
2464 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::POUTRE:
2465 ajouter_mg_poutre((MG_POUTRE*)mg_element_topologique); break;
2466 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::VOLUME:
2467 ajouter_mg_volume((MG_VOLUME*)mg_element_topologique); break;
2468 }
2469 }
2470
2471 int MG_GEOMETRIE::ajouter_mg_element_cotopologique(MG_ELEMENT_COTOPOLOGIQUE* mg_element_cotopologique)
2472 {
2473 switch(mg_element_cotopologique->get_type())
2474 {
2475 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COSOMMET:
2476 ajouter_mg_cosommet((MG_COSOMMET*)mg_element_cotopologique); break;
2477 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COARETE:
2478 ajouter_mg_coarete((MG_COARETE*)mg_element_cotopologique); break;
2479 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::BOUCLE:
2480 ajouter_mg_boucle((MG_BOUCLE*)mg_element_cotopologique); break;
2481 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COFACE:
2482 ajouter_mg_coface((MG_COFACE*)mg_element_cotopologique); break;
2483 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COQUILLE:
2484 ajouter_mg_coquille((MG_COQUILLE*)mg_element_cotopologique); break;
2485 }
2486 }
2487
2488 int MG_GEOMETRIE::ajouter_mg_element_geometrique(MG_ELEMENT_GEOMETRIQUE* mg_element_geometrique)
2489 {
2490 switch(mg_element_geometrique->get_type())
2491 {
2492 case MG_ELEMENT_GEOMETRIQUE::TYPE_ELEMENT_GEOMETRIQUE::POINT:
2493 ajouter_mg_point((MG_POINT*)mg_element_geometrique); break;
2494 case MG_ELEMENT_GEOMETRIQUE::TYPE_ELEMENT_GEOMETRIQUE::COURBE:
2495 ajouter_mg_courbe((MG_COURBE*)mg_element_geometrique); break;
2496 case MG_ELEMENT_GEOMETRIQUE::TYPE_ELEMENT_GEOMETRIQUE::SURFACE:
2497 ajouter_mg_surface((MG_SURFACE*)mg_element_geometrique); break;
2498 }
2499 }
2500
2501 int MG_GEOMETRIE::supprimer_mg_element_topologique(MG_ELEMENT_TOPOLOGIQUE* mg_element_topologique)
2502 {
2503 switch(mg_element_topologique->get_type())
2504 {
2505 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::SOMMET:
2506 supprimer_mg_sommetid(mg_element_topologique->get_id()); break;
2507 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::ARETE:
2508 supprimer_mg_areteid(mg_element_topologique->get_id()); break;
2509 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::FACE:
2510 supprimer_mg_faceid(mg_element_topologique->get_id()); break;
2511 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::COQUE:
2512 supprimer_mg_coqueid(mg_element_topologique->get_id()); break;
2513 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::POUTRE:
2514 supprimer_mg_poutreid(mg_element_topologique->get_id()); break;
2515 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::VOLUME:
2516 supprimer_mg_volumeid(mg_element_topologique->get_id()); break;
2517 }
2518 }
2519
2520 int MG_GEOMETRIE::supprimer_mg_element_cotopologique(MG_ELEMENT_COTOPOLOGIQUE* mg_element_cotopologique)
2521 {
2522 switch(mg_element_cotopologique->get_type())
2523 {
2524 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COSOMMET:
2525 supprimer_mg_cosommetid(mg_element_cotopologique->get_id()); break;
2526 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COARETE:
2527 supprimer_mg_coareteid(mg_element_cotopologique->get_id()); break;
2528 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::BOUCLE:
2529 supprimer_mg_boucleid(mg_element_cotopologique->get_id()); break;
2530 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COFACE:
2531 supprimer_mg_cofaceid(mg_element_cotopologique->get_id()); break;
2532 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COQUILLE:
2533 supprimer_mg_coquilleid(mg_element_cotopologique->get_id()); break;
2534 }
2535 }
2536
2537 int MG_GEOMETRIE::supprimer_mg_element_geometrique(MG_ELEMENT_GEOMETRIQUE* mg_element_geometrique)
2538 {
2539 switch(mg_element_geometrique->get_type())
2540 {
2541 case MG_ELEMENT_GEOMETRIQUE::TYPE_ELEMENT_GEOMETRIQUE::POINT:
2542 supprimer_mg_pointid(mg_element_geometrique->get_id()); break;
2543 case MG_ELEMENT_GEOMETRIQUE::TYPE_ELEMENT_GEOMETRIQUE::COURBE:
2544 supprimer_mg_courbeid(mg_element_geometrique->get_id()); break;
2545 case MG_ELEMENT_GEOMETRIQUE::TYPE_ELEMENT_GEOMETRIQUE::SURFACE:
2546 supprimer_mg_surfaceid(mg_element_geometrique->get_id()); break;
2547 }
2548 }
2549
2550
2551 MG_ELEMENT_TOPOLOGIQUE* MG_GEOMETRIE::get_mg_element_topologiqueid(long int num)
2552 {
2553 MG_ELEMENT_TOPOLOGIQUE* ele;
2554 if(get_mg_sommetid(num)!=NULL)
2555 {
2556 ele = get_mg_sommetid(num);
2557 return ele;
2558 }
2559 else if(get_mg_areteid(num)!=NULL)
2560 {
2561 ele = get_mg_areteid(num);
2562 return ele;
2563 }
2564 else if(get_mg_faceid(num)!=NULL)
2565 {
2566 ele = get_mg_faceid(num);
2567 return ele;
2568 }
2569 else if(get_mg_volumeid(num)!=NULL)
2570 {
2571 ele = get_mg_volumeid(num);
2572 return ele;
2573 }
2574 else if(get_mg_poutreid(num)!=NULL)
2575 {
2576 ele = get_mg_poutreid(num);
2577 return ele;
2578 }
2579 else if(get_mg_coqueid(num)!=NULL)
2580 {
2581 ele = get_mg_coqueid(num);
2582 return ele;
2583 }
2584 else return NULL;
2585 }
2586
2587 MG_ELEMENT_COTOPOLOGIQUE* MG_GEOMETRIE::get_mg_element_cotopologiqueid(long int num)
2588 {
2589 MG_ELEMENT_COTOPOLOGIQUE* ele;
2590 if(get_mg_cosommetid(num)!=NULL)
2591 {
2592 ele = get_mg_cosommetid(num);
2593 return ele;
2594 }
2595 else if(get_mg_coareteid(num)!=NULL)
2596 {
2597 ele = get_mg_coareteid(num);
2598 return ele;
2599 }
2600 else if(get_mg_boucleid(num)!=NULL)
2601 {
2602 ele = get_mg_boucleid(num);
2603 return ele;
2604 }
2605 else if(get_mg_cofaceid(num)!=NULL)
2606 {
2607 ele = get_mg_cofaceid(num);
2608 return ele;
2609 }
2610 else if(get_mg_coquilleid(num)!=NULL)
2611 {
2612 ele = get_mg_coquilleid(num);
2613 return ele;
2614 }
2615 else return NULL;
2616 }
2617
2618
2619 void MG_GEOMETRIE::remplir_mg_groupe_topologique(MG_GROUPE_TOPOLOGIQUE* mg_groupe_topologique)
2620 {
2621 LISTE_MG_SOMMET::iterator it_sommet;
2622 for(MG_SOMMET* sommet=get_premier_sommet(it_sommet);sommet!=NULL;sommet=get_suivant_sommet(it_sommet)) mg_groupe_topologique->ajouter(sommet);
2623 LISTE_MG_ARETE::iterator it_arete;
2624 for(MG_ARETE* arete=get_premier_arete(it_arete);arete!=NULL;arete=get_suivant_arete(it_arete)) mg_groupe_topologique->ajouter(arete);
2625 LISTE_MG_FACE::iterator it_face;
2626 for(MG_FACE* face=get_premier_face(it_face);face!=NULL;face=get_suivant_face(it_face)) mg_groupe_topologique->ajouter(face);
2627 LISTE_MG_VOLUME::iterator it_volume;
2628 for(MG_VOLUME* volume=get_premier_volume(it_volume);volume!=NULL;volume=get_suivant_volume(it_volume)) mg_groupe_topologique->ajouter(volume);
2629 LISTE_MG_COQUE::iterator it_coque;
2630 for(MG_COQUE* coque=get_premier_coque(it_coque);coque!=NULL;coque=get_suivant_coque(it_coque)) mg_groupe_topologique->ajouter(coque);
2631 LISTE_MG_POUTRE::iterator it_poutre;
2632 for(MG_POUTRE* poutre=get_premier_poutre(it_poutre);poutre!=NULL;poutre=get_suivant_poutre(it_poutre)) mg_groupe_topologique->ajouter(poutre);
2633 }
2634
2635
2636 // FIN DE GESTION DES ENTITES
2637
2638 void MG_GEOMETRIE::enregistrer(std::ostream& o,double version)
2639 {
2640 #ifdef BREP_OCC
2641 if(strcmp(type_geo,"OCCV2017")==0)
2642 {
2643 OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)fonction1;
2644 std::string str_fichier_sortie_caf(nom_du_fichier);
2645 str_fichier_sortie_caf+=".ocaf";
2646 occ_fonction_v2017->enregistrer_fichier_OCAF((char*)str_fichier_sortie_caf.c_str(),this);
2647 }
2648 #endif
2649 if (nom_du_fichier==NULL) o << "%" << get_id() << "=GEOMETRIE(" << valeur_unite << "," << type_geo ;
2650 else o << "%" << get_id() << "=GEOMETRIE(" << valeur_unite << "," << type_geo << "," << nom_du_fichier;
2651 if (gest_materiau!="") o << "," << gest_materiau.c_str() ;
2652 o << ");" << std::endl;
2653 o << "%" << get_id() << "=GEOMETRIE_EPS(" << precision << ");" << std::endl;
2654 LISTE_ENTITE::const_iterator i;
2655 for (i=lst_entite.begin();i!=lst_entite.end();i++)
2656 (*i)->enregistrer(o,version);
2657 }
2658
2659
2660 char* MG_GEOMETRIE::get_nom_du_fichier(void)
2661 {
2662 return nom_du_fichier;
2663 }
2664
2665 char* MG_GEOMETRIE::get_type_geometrie(void)
2666 {
2667 return type_geo;
2668 }
2669
2670 bool MG_GEOMETRIE::est_virtuelle(void)
2671 {
2672 bool res=false;
2673 std::string type=get_type_geometrie();
2674 OT_CHAINE ot;
2675 type=ot.upcase(type);
2676 if (type=="VIRTUEL") res=true;
2677 return res;
2678 }
2679
2680 void MG_GEOMETRIE::cree_entite_visuel(double facteur)
2681 {
2682 supprimer_tout_mg_visu_courbe();
2683 int nbarete=get_nb_mg_arete();
2684 for (int i=0;i<nbarete;i++)
2685 {
2686 MG_ARETE* mgarete=get_mg_arete(i);
2687 double xyz1[3];
2688 double tmin=mgarete->get_tmin();
2689 double tmax=mgarete->get_tmax();
2690 mgarete->evaluer(tmin,xyz1);
2691 int nb_pas=(int)(20.*facteur);
2692 for (int j=1;j<nb_pas+1;j++)
2693 {
2694 double t=tmin+j*(tmax-tmin)/nb_pas;
2695 double xyz2[3];
2696 mgarete->evaluer(t,xyz2);
2697 MG_VISU_COURBE* mgvisucourbe=new MG_VISU_COURBE(xyz1,xyz2);
2698 ajouter_mg_visu_courbe(mgvisucourbe);
2699 xyz1[0]=xyz2[0];
2700 xyz1[1]=xyz2[1];
2701 xyz1[2]=xyz2[2];
2702 }
2703 }
2704 }
2705
2706 std::ostream& operator << (std::ostream& o,MG_GEOMETRIE& geo)
2707 {
2708 geo.enregistrer(o,VERSIONFICHIER);
2709 return o;
2710 }
2711
2712
2713
2714 void MG_GEOMETRIE::change_gest_materiau(char* nom)
2715 {
2716 gest_materiau=nom;
2717 }
2718
2719 char* MG_GEOMETRIE::get_gest_materiau(void)
2720 {
2721 return (char*)gest_materiau.c_str();
2722 }
2723
2724 double MG_GEOMETRIE::get_valeur_precision(void)
2725 {
2726 return precision;
2727 }
2728
2729 void MG_GEOMETRIE::change_valeur_precision(double val)
2730 {
2731 precision=val;
2732 }
2733
2734 double MG_GEOMETRIE::get_valeur_unite(void)
2735 {
2736 return valeur_unite;
2737 }
2738
2739 void MG_GEOMETRIE::change_valeur_unite(double val)
2740 {
2741 valeur_unite=val;
2742 }
2743
2744
2745
2746 void MG_GEOMETRIE::construit_vectorisation(void)
2747 {
2748 LISTE_MG_FACE::iterator itface;
2749 for (MG_FACE* face=get_premier_face(itface);face!=NULL;face=get_suivant_face(itface))
2750 face->get_vectorisation();
2751 LISTE_MG_ARETE::iterator itarete;
2752 for (MG_ARETE* arete=get_premier_arete(itarete);arete!=NULL;arete=get_suivant_arete(itarete))
2753 arete->get_vectorisation();
2754 LISTE_MG_SOMMET::iterator itsommet;
2755 for (MG_SOMMET* som=get_premier_sommet(itsommet);som!=NULL;som=get_suivant_sommet(itsommet))
2756 som->get_vectorisation();
2757 LISTE_MG_SURFACE::iterator itsurface;
2758 for (MG_SURFACE* surface=get_premier_surface(itsurface);surface!=NULL;surface=get_suivant_surface(itsurface))
2759 surface->get_vectorisation();
2760 LISTE_MG_COURBE::iterator itcourbe;
2761 for (MG_COURBE* courb=get_premier_courbe(itcourbe);courb!=NULL;courb=get_suivant_courbe(itcourbe))
2762 courb->get_vectorisation();
2763 LISTE_MG_POINT::iterator itpoint;
2764 for (MG_POINT* point=get_premier_point(itpoint);point!=NULL;point=get_suivant_point(itpoint))
2765 point->get_vectorisation();
2766 }
2767
2768
2769 #ifdef BREP_SAT
2770 SAT_GESTIONNAIRE& MG_GEOMETRIE::get_gest_sat(void)
2771 {
2772 return fichsat;
2773 }
2774 #endif
2775 #ifdef BREP_STEP
2776 ST_GESTIONNAIRE& MG_GEOMETRIE::get_gest_step(void)
2777 {
2778 return fichstep;
2779 }
2780 #endif
2781
2782 #ifdef BREP_OCC
2783 OCC_FONCTION& MG_GEOMETRIE::get_occ_fonction(void)
2784 {
2785 return *fonction1;
2786 }
2787 #endif