MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
acis_import.cpp
Aller à la documentation de ce fichier.
1 //####//------------------------------------------------------------
2 //####//------------------------------------------------------------
3 //####// MAGiC
4 //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5 //####// Departement de Genie Mecanique - UQTR
6 //####//------------------------------------------------------------
7 //####// MAGIC est un projet de recherche de l equipe ERICCA
8 //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9 //####// http://www.uqtr.ca/ericca
10 //####// http://www.uqtr.ca/
11 //####//------------------------------------------------------------
12 //####//------------------------------------------------------------
13 //####//
14 //####// acis_import.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:54 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 
24 #include "gestionversion.h"
25 #ifdef BREP_SAT
26 
27 #include "acis_import.h"
28 #include "acis_surface.h"
29 #include "acis_point.h"
30 #include "acis_courbe.h"
31 
32 #include "sat_attrib.h"
33 #include "sat_body.h"
34 #include "sat_coedge.h"
35 #include "sat_cone.h"
36 #include "sat_edge.h"
37 #include "sat_ellipse.h"
38 #include "sat_face.h"
39 #include "sat_loop.h"
40 #include "sat_lump.h"
41 #include "sat_plane.h"
42 #include "sat_point.h"
43 #include "sat_shell.h"
44 #include "sat_straight.h"
45 #include "sat_subshell.h"
46 #include "sat_transform.h"
47 #include "sat_vertex.h"
48 #include "sat_wire.h"
49 #include "mg_geometrie.h"
50 #include "mg_gestionnaire.h"
51 
53 {
54 }
55 
56 
58 {
59 }
60 
61 
63 {
64  MG_GEOMETRIE *mggeo=new MG_GEOMETRIE((char*)"ACIS",path);
65  gest.ajouter_mg_geometrie(mggeo);
66 
67  long nb_body=mggeo->get_gest_sat().lst_body.get_nb();
68  for (long i=0;i<nb_body;i++)
69  {
70  SAT_BODY* body=mggeo->get_gest_sat().lst_body.get(i);
71  char idori[10];
72  sprintf(idori,"%lu",body->get_id());
73  MG_VOLUME* mgvol=new MG_VOLUME(idori);
74  mggeo->ajouter_mg_volume(mgvol);
75 
76  SAT_LUMP* lump=body->first_lump;
77  while (lump!=NULL)
78  {
79  SAT_SHELL* shell=lump->first_shell;
80  while (shell!=NULL)
81  {
82  MG_COQUILLE* mgcoq=new MG_COQUILLE(mgvol);
83  mggeo->ajouter_mg_coquille(mgcoq,mgvol);
84  SAT_FACE* face=shell->first_face;
85  while (face!=NULL)
86  {
87  SAT_SURFACE* surface=face->surface;
88  MG_SURFACE* mgsurface=trouver(surface);
89  if (mgsurface==NULL)
90  {
91  ACIS_SURFACE* acissurface=new ACIS_SURFACE(surface);
92  mgsurface=acissurface;
93  mggeo->ajouter_mg_surface(mgsurface);
94  relation(surface,mgsurface);
95  }
96  MG_FACE* mgface=trouver(face);
97  if (mgface==NULL)
98  {
99  char idori[10];
100  sprintf(idori,"%lu",face->get_id());
101  mgface=new MG_FACE(idori,mgsurface,face->sense);
102  mggeo->ajouter_mg_face(mgface);
103  relation(face,mgface);
104  }
105  MG_COFACE* mgcoface=mggeo->ajouter_mg_coface(mgface,mgcoq,1);
106  mgcoq->ajouter_mg_coface(mgcoface);
107  SAT_LOOP* loop=face->first_loop;
108  while (loop!=NULL)
109  {
110  MG_BOUCLE* mgboucle=new MG_BOUCLE(mgface);
111  mggeo->ajouter_mg_boucle(mgboucle,mgface);
112  SAT_COEDGE* coedgedepart=loop->first_coedge;
113  SAT_COEDGE* coedge=coedgedepart;
114  do
115  {
116  SAT_EDGE* edge=coedge->edge;
117  SAT_COURBE* courbe=edge->curve;
118  MG_COURBE* mgcourbe=trouver(courbe);
119  if (mgcourbe==NULL)
120  {
121  ACIS_COURBE* aciscourbe=new ACIS_COURBE(courbe);
122  mgcourbe=aciscourbe;
123  mggeo->ajouter_mg_courbe(mgcourbe);
124  relation(courbe,mgcourbe);
125  }
126  SAT_VERTEX* sommet1=edge->start_vertex;
127  SAT_VERTEX* sommet2=edge->end_vertex;
128  MG_SOMMET* mgsom1=trouver(sommet1);
129  if (mgsom1==NULL)
130  {
131  SAT_POINT* point=sommet1->point;
132  ACIS_POINT* acispoint=new ACIS_POINT(point);
133  MG_POINT* mgpoint=acispoint;
134  mggeo->ajouter_mg_point(mgpoint);
135  char idori[10];
136  sprintf(idori,"%lu",sommet1->get_id());
137  mgsom1=new MG_SOMMET(idori,mgpoint);
138  mggeo->ajouter_mg_sommet(mgsom1);
139  relation(sommet1,mgsom1);
140  }
141  MG_SOMMET* mgsom2=trouver(sommet2);
142  if (mgsom2==NULL)
143  {
144  SAT_POINT* point=sommet2->point;
145  ACIS_POINT* acispoint=new ACIS_POINT(point);
146  MG_POINT* mgpoint=acispoint;
147  mggeo->ajouter_mg_point(mgpoint);
148  char idori[10];
149  sprintf(idori,"%lu",sommet2->get_id());
150  mgsom2=new MG_SOMMET(idori,mgpoint);
151  mggeo->ajouter_mg_sommet(mgsom2);
152  relation(sommet2,mgsom2);
153  }
154  MG_ARETE* mgarete=trouver((SAT_EDGE*)edge);
155  if (mgarete==NULL)
156  {
157  int sens;
158  if (edge->sense==1) sens=1;
159  else sens=-1;
160  char idori[10];
161  sprintf(idori,"%lu",edge->get_id());
162  mgarete=new MG_ARETE(idori,mgcourbe,sens);
163  mggeo->ajouter_mg_arete(mgarete);
164  relation((SAT_EDGE*)edge,mgarete);
165  MG_COSOMMET* mgcosom1=mggeo->ajouter_mg_cosommet(mgarete,mgsom1);
166  MG_COSOMMET* mgcosom2=mggeo->ajouter_mg_cosommet(mgarete,mgsom2);
167  mgarete->changer_cosommet1(mgcosom1);
168  mgarete->changer_cosommet2(mgcosom2);
169  }
170  int sens;
171  if (coedge->sense==1) sens=1;
172  else sens=-1;
173  MG_COARETE* mgcoarete=mggeo->ajouter_mg_coarete(mgarete,mgboucle,sens);
174  mgboucle->ajouter_mg_coarete(mgcoarete);
175  coedge=coedge->next_coedge;
176  }
177  while (coedge!=coedgedepart);
178  loop=loop->next_loop;
179  }
180  face=face->next_face;
181  }
182  shell=shell->next_shell;
183  }
184  lump=lump->next_lump;
185  }
186  }
187 
188  return mggeo;
189 }
190 
191 
192 
193 #endif
194 
195 
196 
virtual ~ACIS_IMPORT()
Definition: acis_import.cpp:57
MG_FACE * trouver(SAT_FACE *face)
Definition: acis_import.h:78
void relation(class SAT_FACE *ent1, class MG_FACE *ent2)
Definition: acis_import.h:47
class MG_GEOMETRIE * importer(class MG_GESTIONNAIRE &gest, char *path)
Definition: acis_import.cpp:62
virtual void changer_cosommet1(class MG_COSOMMET *cosom)
Definition: mg_arete.cpp:73
virtual void changer_cosommet2(class MG_COSOMMET *cosom)
Definition: mg_arete.cpp:77
virtual void ajouter_mg_coarete(class MG_COARETE *mgcoarete)
Definition: mg_boucle.cpp:73
virtual void ajouter_mg_coface(class MG_COFACE *mgcoface)
Definition: mg_coquille.cpp:71
virtual int ajouter_mg_courbe(MG_COURBE *mgcrb)
virtual int ajouter_mg_face(MG_FACE *mgface)
virtual int ajouter_mg_coquille(MG_COQUILLE *mgcoq)
virtual int ajouter_mg_surface(MG_SURFACE *mgsrf)
virtual int ajouter_mg_point(MG_POINT *mgpt)
virtual int ajouter_mg_coarete(MG_COARETE *mgcoarete)
virtual int ajouter_mg_volume(MG_VOLUME *mgvol)
virtual int ajouter_mg_arete(MG_ARETE *mgarete)
virtual int ajouter_mg_cosommet(MG_COSOMMET *mgcosom)
class SAT_GESTIONNAIRE & get_gest_sat(void)
virtual int ajouter_mg_boucle(MG_BOUCLE *mgboucle)
virtual int ajouter_mg_sommet(MG_SOMMET *mgsom)
virtual int ajouter_mg_coface(MG_COFACE *mgcoface)
int ajouter_mg_geometrie(MG_GEOMETRIE *mggeo)
class SAT_LUMP * first_lump
Definition: sat_body.h:36
class SAT_EDGE * edge
Definition: sat_coedge.h:39
class SAT_COEDGE * next_coedge
Definition: sat_coedge.h:36
class SAT_VERTEX * start_vertex
Definition: sat_edge.h:36
int sense
Definition: sat_edge.h:40
class SAT_VERTEX * end_vertex
Definition: sat_edge.h:37
class SAT_COURBE * curve
Definition: sat_edge.h:39
class SAT_FACE * next_face
Definition: sat_face.h:36
class SAT_LOOP * first_loop
Definition: sat_face.h:37
int sense
Definition: sat_face.h:41
class SAT_SURFACE * surface
Definition: sat_face.h:40
TPL_MAP_ENTITE< class SAT_BODY * > lst_body
unsigned long get_id()
class SAT_LOOP * next_loop
Definition: sat_loop.h:37
class SAT_COEDGE * first_coedge
Definition: sat_loop.h:38
class SAT_SHELL * first_shell
Definition: sat_lump.h:38
class SAT_LUMP * next_lump
Definition: sat_lump.h:37
class SAT_SHELL * next_shell
Definition: sat_shell.h:36
class SAT_FACE * first_face
Definition: sat_shell.h:38
class SAT_POINT * point
Definition: sat_vertex.h:38
virtual int get_nb(void)
virtual X get(int num)