MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
sat_gestionnaire.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 //####// sat_gestionnaire.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:54:00 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 
24 #include <stdio.h>
25 #include <string.h>
26 
27 #include "sat_gestionnaire.h"
28 
29 
30 
31 
32 
33 
34 template<class Y,class X> void ajouter(Y& y,X x,SAT_GESTIONNAIRE& gest)
35 {
36  y.ajouter(x);
37  gest.lst_entity.ajouter(x);
38 }
39 
40 template<class Y,class X>void libere(Y& y)
41 {
42  for (long i=0;i<y.get_nb();i++)
43  {
44  X* x=y.get(i);
45  delete x;
46  }
47  y.vide();
48 }
49 
50 SAT_GESTIONNAIRE::SAT_GESTIONNAIRE():FORWARD(1),REVERSED(-1),DOUBLE(2),SINGLE(1),IS_OUT(10),IS_IN(11),nom(NULL)
51 {
52 }
53 
54 SAT_GESTIONNAIRE::SAT_GESTIONNAIRE(char *path):FORWARD(1),REVERSED(-1),DOUBLE(2),SINGLE(1),IS_OUT(10),IS_IN(11),nom(NULL)
55 {
56  int num=strlen(path);
57  nom=new char[num+1];
58  strcpy(nom,path);
59 }
60 
62 {
63  libere<TPL_MAP_ENTITE<class SAT_ATTRIB*>,SAT_ATTRIB>(lst_attrib);
64  libere<TPL_MAP_ENTITE<class SAT_BODY*>,SAT_BODY>(lst_body);
65  libere<TPL_MAP_ENTITE<class SAT_COEDGE*>,SAT_COEDGE>(lst_coedge);
66  libere<TPL_MAP_ENTITE<class SAT_CONE*>,SAT_CONE>(lst_cone);
67  libere<TPL_MAP_ENTITE<class SAT_EDGE*>,SAT_EDGE>(lst_edge);
68  libere<TPL_MAP_ENTITE<class SAT_ELLIPSE*>,SAT_ELLIPSE>(lst_ellipse);
69  libere<TPL_MAP_ENTITE<class SAT_FACE*>,SAT_FACE>(lst_face);
70  libere<TPL_MAP_ENTITE<class SAT_LOOP*>,SAT_LOOP>(lst_loop);
71  libere<TPL_MAP_ENTITE<class SAT_LUMP*>,SAT_LUMP>(lst_lump);
72  libere<TPL_MAP_ENTITE<class SAT_PLANE*>,SAT_PLANE>(lst_plane);
73  libere<TPL_MAP_ENTITE<class SAT_POINT*>,SAT_POINT>(lst_point);
74  libere<TPL_MAP_ENTITE<class SAT_SHELL*>,SAT_SHELL>(lst_shell);
75  libere<TPL_MAP_ENTITE<class SAT_STRAIGHT*>,SAT_STRAIGHT>(lst_straight);
76  libere<TPL_MAP_ENTITE<class SAT_SUBSHELL*>,SAT_SUBSHELL>(lst_subshell);
77  libere<TPL_MAP_ENTITE<class SAT_TRANSFORM*>,SAT_TRANSFORM>(lst_transform);
78  libere<TPL_MAP_ENTITE<class SAT_VERTEX*>,SAT_VERTEX>(lst_vertex);
79  libere<TPL_MAP_ENTITE<class SAT_WIRE*>,SAT_WIRE>(lst_wire);
80  lst_entity.vide();
81  if (nom!=NULL) delete [] nom;
82 }
83 
85 {
86  int num=strlen(path);
87  nom=new char[num+1];
88  strcpy(nom,path);
89 }
90 
92 {
93  return nom;
94 }
95 
96 
98 {
99  FILE* fic=fopen(nom,"rt");
100  if (fic==NULL)
101  {
102  return 0;
103  }
104  int num=0;
105  int version;
106  char mess[500];
107  while (num<100)
108  {
109  char* res=fgets(mess,500,fic);
110  sscanf(mess,"%d",&num);
111  }
112  sscanf(mess,"%d %d",&version,&num);
113  unsigned long ident=0;
114  while (feof(fic)==0)
115  {
116  char type_entite[30];
117  char* res=fgets(mess,500,fic);
118  sscanf(mess,"%s",type_entite);
119  num=strlen(type_entite);
120  int commentaire=0;
121  if (num>6)
122  {
123  if (type_entite[num-1]=='b')
124  if (type_entite[num-2]=='i')
125  if (type_entite[num-3]=='r')
126  if (type_entite[num-4]=='t')
127  if (type_entite[num-5]=='t')
128  if (type_entite[num-6]=='a')
129  strcpy(type_entite,"attrib");
130  }
131  if (strcmp(type_entite,"body")==0)
132  {
133  SAT_BODY* body=new SAT_BODY(ident);
134  ajouter<TPL_MAP_ENTITE<SAT_BODY*>,SAT_BODY*>(lst_body,body,*this);
135  }
136  else if (strcmp(type_entite,"attrib")==0)
137  {
138  SAT_ATTRIB* attrib=new SAT_ATTRIB(ident);
139  ajouter<TPL_MAP_ENTITE<SAT_ATTRIB*>,SAT_ATTRIB*>(lst_attrib,attrib,*this);
140  }
141  else if (strcmp(type_entite,"lump")==0)
142  {
143  SAT_LUMP* lump=new SAT_LUMP(ident);
144  ajouter<TPL_MAP_ENTITE<SAT_LUMP*>,SAT_LUMP*>(lst_lump,lump,*this);
145  }
146  else if (strcmp(type_entite,"shell")==0)
147  {
148  SAT_SHELL* shell=new SAT_SHELL(ident);
149  ajouter<TPL_MAP_ENTITE<SAT_SHELL*>,SAT_SHELL*>(lst_shell,shell,*this);
150  }
151  else if (strcmp(type_entite,"face")==0)
152  {
153  SAT_FACE* face=new SAT_FACE(ident);
154  ajouter<TPL_MAP_ENTITE<SAT_FACE*>,SAT_FACE*>(lst_face,face,*this);
155  }
156  else if (strcmp(type_entite,"loop")==0)
157  {
158  SAT_LOOP* loop=new SAT_LOOP(ident);
159  ajouter<TPL_MAP_ENTITE<SAT_LOOP*>,SAT_LOOP*>(lst_loop,loop,*this);
160  }
161  else if (strcmp(type_entite,"subshell")==0)
162  {
163  SAT_SUBSHELL* subshell=new SAT_SUBSHELL(ident);
164  ajouter<TPL_MAP_ENTITE<SAT_SUBSHELL*>,SAT_SUBSHELL*>(lst_subshell,subshell,*this);
165  }
166  else if (strcmp(type_entite,"wire")==0)
167  {
168  SAT_WIRE* wire=new SAT_WIRE(ident);
169  ajouter<TPL_MAP_ENTITE<SAT_WIRE*>,SAT_WIRE*>(lst_wire,wire,*this);
170  }
171  else if (strcmp(type_entite,"coedge")==0)
172  {
173  SAT_COEDGE* coedge=new SAT_COEDGE(ident);
174  ajouter<TPL_MAP_ENTITE<SAT_COEDGE*>,SAT_COEDGE*>(lst_coedge,coedge,*this);
175  }
176  else if (strcmp(type_entite,"edge")==0)
177  {
178  SAT_EDGE* edge=new SAT_EDGE(ident);
179  ajouter<TPL_MAP_ENTITE<SAT_EDGE*>,SAT_EDGE*>(lst_edge,edge,*this);
180  }
181  else if (strcmp(type_entite,"vertex")==0)
182  {
183  SAT_VERTEX* vertex=new SAT_VERTEX(ident);
184  ajouter<TPL_MAP_ENTITE<SAT_VERTEX*>,SAT_VERTEX*>(lst_vertex,vertex,*this);
185  }
186  else if (strcmp(type_entite,"cone-surface")==0)
187  {
188  SAT_CONE* cone=new SAT_CONE(ident);
189  ajouter<TPL_MAP_ENTITE<SAT_CONE*>,SAT_CONE*>(lst_cone,cone,*this);
190  ajouter<TPL_MAP_ENTITE<SAT_SURFACE*>,SAT_SURFACE*>(lst_surface,cone,*this);
191  }
192  else if (strcmp(type_entite,"ellipse-curve")==0)
193  {
194  SAT_ELLIPSE* ellipse=new SAT_ELLIPSE(ident);
195  ajouter<TPL_MAP_ENTITE<SAT_ELLIPSE*>,SAT_ELLIPSE*>(lst_ellipse,ellipse,*this);
196  ajouter<TPL_MAP_ENTITE<SAT_COURBE*>,SAT_COURBE*>(lst_courbe,ellipse,*this);
197  }
198  else if (strcmp(type_entite,"plane-surface")==0)
199  {
200  SAT_PLANE* plane=new SAT_PLANE(ident);
201  ajouter<TPL_MAP_ENTITE<SAT_PLANE*>,SAT_PLANE*>(lst_plane,plane,*this);
202  ajouter<TPL_MAP_ENTITE<SAT_SURFACE*>,SAT_SURFACE*>(lst_surface,plane,*this);
203  }
204  else if (strcmp(type_entite,"point")==0)
205  {
206  SAT_POINT* point=new SAT_POINT(ident);
207  ajouter<TPL_MAP_ENTITE<SAT_POINT*>,SAT_POINT*>(lst_point,point,*this);
208  }
209  else if (strcmp(type_entite,"straight-curve")==0)
210  {
211  SAT_STRAIGHT* straight=new SAT_STRAIGHT(ident);
212  ajouter<TPL_MAP_ENTITE<SAT_STRAIGHT*>,SAT_STRAIGHT*>(lst_straight,straight,*this);
213  ajouter<TPL_MAP_ENTITE<SAT_COURBE*>,SAT_COURBE*>(lst_courbe,straight,*this);
214  }
215  else if (strcmp(type_entite,"transform")==0)
216  {
217  SAT_TRANSFORM* transform=new SAT_TRANSFORM(ident);
218  ajouter<TPL_MAP_ENTITE<SAT_TRANSFORM*>,SAT_TRANSFORM*>(lst_transform,transform,*this);
219  }
220 
221  else if (ident==0) commentaire=1;
222  else
223  {
224  // entite non traite
225  }
226  if (commentaire==0) ident++;
227  }
228  fclose(fic);
229  fic=fopen(nom,"rt");
230  if (fic==NULL)
231  {
232  return -1;
233  }
234  num=0;
235  while (num<100)
236  {
237  char* res=fgets(mess,500,fic);
238  sscanf(mess,"%d",&num);
239  }
240  sscanf(mess,"%d %d",&version,&num);
241  ident=0;
242  while (feof(fic)==0)
243  {
244  int commentaire=0;
245  char type_entite[30];
246  char* res=fgets(mess,500,fic);
247  int num;
248  for (num=0;num<(int)strlen(mess);num++)
249  if (mess[num]=='I') mess[num]=' ';
250  sscanf(mess,"%s",type_entite);
251  num=strlen(type_entite);
252  if (num>6)
253  {
254  if (type_entite[num-1]=='b')
255  if (type_entite[num-2]=='i')
256  if (type_entite[num-3]=='r')
257  if (type_entite[num-4]=='t')
258  if (type_entite[num-5]=='t')
259  if (type_entite[num-6]=='a')
260  strcpy(type_entite,"attrib");
261  }
262  if (strcmp(type_entite,"body")==0)
263  {
264  int n1,n2,n3,n4;
265  char c;
266  sscanf(mess,"%s %c%d %c%d %c%d %c%d",type_entite,&c,&n1,&c,&n2,&c,&n3,&c,&n4);
267  SAT_BODY* body=(SAT_BODY *)lst_entity.getid(ident);
268  if (n1!=-1) body->attrib=(SAT_ATTRIB*)lst_entity.getid(n1);
269  else body->attrib=NULL;
270  if (n2!=-1) body->first_lump=(SAT_LUMP*)lst_entity.getid(n2);
271  else body->first_lump=NULL;
272  if (n3!=-1) body->first_wire=(SAT_WIRE*)lst_entity.getid(n3);
273  else body->first_wire=NULL;
274  if (n4!=-1) body->transform=(SAT_TRANSFORM*)lst_entity.getid(n4);
275  else body->transform=NULL;
276  }
277  else if (strcmp(type_entite,"attrib")==0)
278  {
279  }
280  else if (strcmp(type_entite,"lump")==0)
281  {
282  int n1,n2,n3,n4;
283  char c;
284  sscanf(mess,"%s %c%d %c%d %c%d %c%d",type_entite,&c,&n1,&c,&n2,&c,&n3,&c,&n4);
285  SAT_LUMP* lump=(SAT_LUMP*)lst_entity.getid(ident);
286  if (n1!=-1) lump->attrib=(SAT_ATTRIB*)lst_entity.getid(n1);
287  else lump->attrib=NULL;
288  if (n2!=-1) lump->next_lump=(SAT_LUMP*)lst_entity.getid(n2);
289  else lump->next_lump=NULL;
290  if (n3!=-1) lump->first_shell=(SAT_SHELL*)lst_entity.getid(n3);
291  else lump->first_shell=NULL;
292  if (n4!=-1) lump->body=(SAT_BODY*)lst_entity.getid(n4);
293  else lump->body=NULL;
294  }
295  else if (strcmp(type_entite,"shell")==0)
296  {
297  int n1,n2,n3,n4,n5;
298  char c;
299  sscanf(mess,"%s %c%d %c%d %c%d %c%d %c%d",type_entite,&c,&n1,&c,&n2,&c,&n3,&c,&n4,&c,&n5);
300  SAT_SHELL* shell=(SAT_SHELL*)lst_entity.getid(ident);
301  if (n1!=-1) shell->attrib=(SAT_ATTRIB*)lst_entity.getid(n1);
302  else shell->attrib=NULL;
303  if (n2!=-1) shell->next_shell=(SAT_SHELL*)lst_entity.getid(n2);
304  else shell->next_shell=NULL;
305  if (n3!=-1) shell->first_subshell=(SAT_SUBSHELL*)lst_entity.getid(n3);
306  else shell->first_subshell=NULL;
307  if (n4!=-1) shell->first_face=(SAT_FACE*)lst_entity.getid(n4);
308  else shell->first_face=NULL;
309  if (n5!=-1) shell->owning_lump=(SAT_LUMP*)lst_entity.getid(n5);
310  else shell->owning_lump=NULL;
311  }
312  else if (strcmp(type_entite,"face")==0)
313  {
314  int n1,n2,n3,n4,n5,n6;
315  char string1[25];
316  char string2[25];
317  char string3[25];
318  char c;
319  sscanf(mess,"%s %c%d %c%d %c%d %c%d %c%d %c%d %s %s %s",type_entite,&c,&n1,&c,&n2,&c,&n3,&c,&n4,&c,&n5,&c,&n6,string1,string2,string3);
320  SAT_FACE* face=(SAT_FACE*)lst_entity.getid(ident);
321  if (n1!=-1) face->attrib=(SAT_ATTRIB*)lst_entity.getid(n1);
322  else face->attrib=NULL;
323  if (n2!=-1) face->next_face=(SAT_FACE*)lst_entity.getid(n2);
324  else face->next_face=NULL;
325  if (n3!=-1) face->first_loop=(SAT_LOOP*)lst_entity.getid(n3);
326  else face->first_loop=NULL;
327  if (n4!=-1) face->owning_shell=(SAT_SHELL*)lst_entity.getid(n4);
328  else face->owning_shell=NULL;
329  if (n5!=-1) face->owning_subshell=(SAT_SUBSHELL*)lst_entity.getid(n5);
330  else face->owning_subshell=NULL;
331  if (n6!=-1) face->surface=(SAT_SURFACE*)lst_entity.getid(n6);
332  else face->surface=NULL;
333  if (strcmp(string1,"forward")==0) face->sense=FORWARD;
334  else face->sense=REVERSED;
335  if (strcmp(string2,"single")==0) face->simple_face=SINGLE;
336  else face->simple_face=DOUBLE;
337  if (strcmp(string3,"out")==0) face->exterieur=IS_OUT;
338  else face->exterieur=IS_IN;
339  }
340  else if (strcmp(type_entite,"loop")==0)
341  {
342  int n1,n2,n3,n4;
343  char c;
344  sscanf(mess,"%s %c%d %c%d %c%d %c%d",type_entite,&c,&n1,&c,&n2,&c,&n3,&c,&n4);
345  SAT_LOOP* loop=(SAT_LOOP*)lst_entity.getid(ident);
346  if (n1!=-1) loop->attrib=(SAT_ATTRIB*)lst_entity.getid(n1);
347  else loop->attrib=NULL;
348  if (n2!=-1) loop->next_loop=(SAT_LOOP*)lst_entity.getid(n2);
349  else loop->next_loop=NULL;
350  if (n3!=-1) loop->first_coedge=(SAT_COEDGE*)lst_entity.getid(n3);
351  else loop->first_coedge=NULL;
352  if (n4!=-1) loop->owning_face=(SAT_FACE*)lst_entity.getid(n4);
353  else loop->owning_face=NULL;
354  }
355  else if (strcmp(type_entite,"subshell")==0)
356  {
357  int n1,n2,n3,n4,n5,n6;
358  char c;
359  sscanf(mess,"%s %c%d %c%d %c%d %c%d %c%d %c%d",type_entite,&c,&n1,&c,&n2,&c,&n3,&c,&n4,&c,&n5,&c,&n6);
360  SAT_SUBSHELL* subshell=(SAT_SUBSHELL*)lst_entity.getid(ident);
361  if (n1!=-1) subshell->attrib=(SAT_ATTRIB*)lst_entity.getid(n1);
362  else subshell->attrib=NULL;
363  if (n2!=-1) subshell->parent_subshell=(SAT_SUBSHELL*)lst_entity.getid(n2);
364  else subshell->parent_subshell=NULL;
365  if (n3!=-1) subshell->next_subshell=(SAT_SUBSHELL*)lst_entity.getid(n3);
366  else subshell->next_subshell=NULL;
367  if (n4!=-1) subshell->first_subshell=(SAT_SUBSHELL*)lst_entity.getid(n4);
368  else subshell->first_subshell=NULL;
369  if (n5!=-1) subshell->first_face=(SAT_FACE*)lst_entity.getid(n5);
370  else subshell->first_face=NULL;
371  if (n6!=-1) subshell->owning_wire=(SAT_WIRE*)lst_entity.getid(n6);
372  else subshell->owning_wire=NULL;
373  }
374  else if (strcmp(type_entite,"wire")==0)
375  {
376  int n1,n2,n3,n4;
377  char c;
378  sscanf(mess,"%s %c%d %c%d %c%d %c%d",type_entite,&c,&n1,&c,&n2,&c,&n3,&c,&n4);
379  SAT_WIRE* wire=(SAT_WIRE*)lst_entity.getid(ident);
380  if (n1!=-1) wire->attrib=(SAT_ATTRIB*)lst_entity.getid(n1);
381  else wire->attrib=NULL;
382  if (n2!=-1) wire->next_wire=(SAT_WIRE*)lst_entity.getid(n2);
383  else wire->next_wire=NULL;
384  if (n3!=-1) wire->first_coedge=(SAT_COEDGE*)lst_entity.getid(n3);
385  else wire->first_coedge=NULL;
386  if (n4!=-1) wire->owning=(void *)lst_entity.getid(n4);
387  else wire->owning=NULL;
388  }
389  else if (strcmp(type_entite,"coedge")==0)
390  {
391  int n1,n2,n3,n4,n5,n6,n7;
392  int num;
393  char string1[30];
394  char c;
395  if (version<200)
396  sscanf(mess,"%s %c%d %c%d %c%d %c%d %c%d %d %c%d %c%d",type_entite,&c,&n1,&c,&n2,&c,&n3,&c,&n4,&c,&n5,&num,&c,&n6,&c,&n7);
397  else sscanf(mess,"%s %c%d %c%d %c%d %c%d %c%d %s %c%d %c%d",type_entite,&c,&n1,&c,&n2,&c,&n3,&c,&n4,&c,&n5,string1,&c,&n6,&c,&n7);
398 
399  SAT_COEDGE* coedge=(SAT_COEDGE*)lst_entity.getid(ident);
400  if (n1!=-1) coedge->attrib=(SAT_ATTRIB*)lst_entity.getid(n1);
401  else coedge->attrib=NULL;
402  if (n2!=-1) coedge->next_coedge=(SAT_COEDGE*)lst_entity.getid(n2);
403  else coedge->next_coedge=NULL;
404  if (n3!=-1) coedge->previous_coedge=(SAT_COEDGE*)lst_entity.getid(n3);
405  else coedge->previous_coedge=NULL;
406  if (n4!=-1) coedge->partner_coedge=(SAT_COEDGE*)lst_entity.getid(n4);
407  else coedge->partner_coedge=NULL;
408  if (n5!=-1) coedge->edge=(SAT_EDGE*)lst_entity.getid(n5);
409  else coedge->edge=NULL;
410  if (version<200) coedge->sense=-2*num+1;
411  else
412  if (strcmp(string1,"forward")==0) coedge->sense=FORWARD;
413  else coedge->sense=REVERSED;
414  if (n6!=-1) coedge->owning_loop=(SAT_LOOP*)lst_entity.getid(n6);
415  else coedge->owning_loop=NULL;
416  if (n7!=-1) coedge->pcurve=(SAT_PCURVE*)lst_entity.getid(n7);
417  else coedge->pcurve=NULL;
418  }
419  else if (strcmp(type_entite,"edge")==0)
420  {
421  int n1,n2,n3,n4,n5;
422  double f1,f2;
423  int num;
424  char string1[30];
425  char c;
426  if (version<200)
427  sscanf(mess,"%s %c%d %c%d %c%d %c%d %c%d %d",type_entite,&c,&n1,&c,&n2,&c,&n3,&c,&n4,&c,&n5,&num);
428  else if (version<500)
429  sscanf(mess,"%s %c%d %c%d %c%d %c%d %c%d %s",type_entite,&c,&n1,&c,&n2,&c,&n3,&c,&n4,&c,&n5,string1);
430  else sscanf(mess,"%s %c%d %c%d %lf %c%d %lf %c%d %c%d %s",type_entite,&c,&n1,&c,&n2,&f1,&c,&n3,&f2,&c,&n4,&c,&n5,string1);
431  SAT_EDGE* edge=(SAT_EDGE*)lst_entity.getid(ident);
432  if (n1!=-1) edge->attrib=(SAT_ATTRIB*)lst_entity.getid(n1);
433  else edge->attrib=NULL;
434  if (n2!=-1) edge->start_vertex=(SAT_VERTEX*)lst_entity.getid(n2);
435  else edge->start_vertex=NULL;
436  if (n3!=-1) edge->end_vertex=(SAT_VERTEX*)lst_entity.getid(n3);
437  else edge->end_vertex=NULL;
438  if (n4!=-1) edge->owning_coedge=(SAT_COEDGE*)lst_entity.getid(n4);
439  else edge->owning_coedge=NULL;
440  if (n5!=-1) edge->curve=(SAT_COURBE*) lst_entity.getid(n5);
441  else edge->curve=NULL;
442  if (version<200)
443  if (num==0) edge->sense=1;
444  else edge->sense=-1;
445  else
446  if (strcmp(string1,"forward")==0) edge->sense=FORWARD;
447  else edge->sense=REVERSED;
448  }
449  else if (strcmp(type_entite,"vertex")==0)
450  {
451  int n1,n2,n3;
452  char c;
453  sscanf(mess,"%s %c%d %c%d %c%d",type_entite,&c,&n1,&c,&n2,&c,&n3);
454  SAT_VERTEX* vertex=(SAT_VERTEX*)lst_entity.getid(ident);
455  if (n1!=-1) vertex->attrib=(SAT_ATTRIB*)lst_entity.getid(n1);
456  else vertex->attrib=NULL;
457  if (n2!=-1) vertex->owning_edge=(SAT_EDGE*)lst_entity.getid(n2);
458  else vertex->owning_edge=NULL;
459  if (n3!=-1) vertex->point=(SAT_POINT*)lst_entity.getid(n3);
460  else vertex->point=NULL;
461  }
462  else if (strcmp(type_entite,"cone-surface")==0)
463  {
464  int n1;
465  double f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12;
466  char c;
467  sscanf(mess,"%s %c%d %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf",type_entite,&c,&n1,&f1,&f2,&f3,&f4,&f5,&f6,&f7,&f8,&f9,&f10,&f11,&f12);
468  SAT_CONE* cone=(SAT_CONE*)lst_entity.getid(ident);
469  if (n1!=-1) cone->attrib=(SAT_ATTRIB*)lst_entity.getid(n1);
470  else cone->attrib=NULL;
471  cone->center[0]=f1;
472  cone->center[1]=f2;
473  cone->center[2]=f3;
474  cone->normal[0]=f4;
475  cone->normal[1]=f5;
476  cone->normal[2]=f6;
477  cone->major[0]=f7;
478  cone->major[1]=f8;
479  cone->major[2]=f9;
480  cone->ratio=f10;
481  cone->cosalpha=f12;
482  cone->sinalpha=f11;
483  cone->calcule_parametre();
484  }
485  else if (strcmp(type_entite,"ellipse-curve")==0)
486  {
487  int n1;
488  double f1,f2,f3,f4,f5,f6,f7,f8,f9,f10;
489  char c;
490  sscanf(mess,"%s %c%d %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf",type_entite,&c,&n1,&f1,&f2,&f3,&f4,&f5,&f6,&f7,&f8,&f9,&f10);
491  SAT_ELLIPSE* ellipse=(SAT_ELLIPSE*)lst_entity.getid(ident);
492  if (n1!=-1) ellipse->attrib=(SAT_ATTRIB*)lst_entity.getid(n1);
493  else ellipse->attrib=NULL;
494  ellipse->center[0]=f1;
495  ellipse->center[1]=f2;
496  ellipse->center[2]=f3;
497  ellipse->normal[0]=f4;
498  ellipse->normal[1]=f5;
499  ellipse->normal[2]=f6;
500  ellipse->major[0]=f7;
501  ellipse->major[1]=f8;
502  ellipse->major[2]=f9;
503  ellipse->ratio=f10;
504  ellipse->calcul_parametre();
505  }
506  else if (strcmp(type_entite,"pcurve")==0)
507  {
508  }
509  else if (strcmp(type_entite,"plane-surface")==0)
510  {
511  int n1;
512  double f1,f2,f3,f4,f5,f6,f7,f8,f9;
513  char c;
514  sscanf(mess,"%s %c%d %lf %lf %lf %lf %lf %lf %lf %lf %lf",type_entite,&c,&n1,&f1,&f2,&f3,&f4,&f5,&f6,&f7,&f8,&f9);
515  SAT_PLANE* plane=(SAT_PLANE*)lst_entity.getid(ident);
516  if (n1!=-1) plane->attrib=(SAT_ATTRIB*)lst_entity.getid(n1);
517  else plane->attrib=NULL;
518  plane->root[0]=f1;
519  plane->root[1]=f2;
520  plane->root[2]=f3;
521  plane->normal[0]=f4;
522  plane->normal[1]=f5;
523  plane->normal[2]=f6;
524  plane->u_deriv[0]=f7;
525  plane->u_deriv[1]=f8;
526  plane->u_deriv[2]=f9;
527  plane->calcule_parametre();
528  }
529  else if (strcmp(type_entite,"point")==0)
530  {
531  int n1;
532  double f1,f2,f3;
533  char c;
534  sscanf(mess,"%s %c%d %lf %lf %lf",type_entite,&c,&n1,&f1,&f2,&f3);
535  SAT_POINT* point=(SAT_POINT*)lst_entity.getid(ident);
536  if (n1!=-1) point->attrib=(SAT_ATTRIB*)lst_entity.getid(n1);
537  else point->attrib=NULL;
538  point->coord[0]=f1;
539  point->coord[1]=f2;
540  point->coord[2]=f3;
541  }
542  else if (strcmp(type_entite,"straight-curve")==0)
543  {
544  int n1;
545  double f1,f2,f3,f4,f5,f6;
546  char c;
547  sscanf(mess,"%s %c%d %lf %lf %lf %lf %lf %lf ",type_entite,&c,&n1,&f1,&f2,&f3,&f4,&f5,&f6);
548  SAT_STRAIGHT* straight=(SAT_STRAIGHT*)lst_entity.getid(ident);
549  if (n1!=-1) straight->attrib=(SAT_ATTRIB*)lst_entity.getid(n1);
550  else straight->attrib=NULL;
551  straight->root[0]=f1;
552  straight->root[1]=f2;
553  straight->root[2]=f3;
554  straight->dir[0]=f4;
555  straight->dir[1]=f5;
556  straight->dir[2]=f6;
557  }
558  else if (strcmp(type_entite,"transform")==0)
559  {
560  int n1,n2,n3,n4;
561  double f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13;
562  char c;
563  sscanf(mess,"%s %c%d %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %d %d %d",type_entite,&c,&n1,&f1,&f2,&f3,&f4,&f5,&f6,&f7,&f8,&f9,&f10,&f11,&f12,&f13,&n2,&n3,&n4);
564  SAT_TRANSFORM* transform=(SAT_TRANSFORM*)lst_entity.getid(ident);
565  if (n1!=-1) transform->attrib=(SAT_ATTRIB*)lst_entity.getid(n1);
566  else transform->attrib=NULL;
567  transform->rotation[0][0]=f1;
568  transform->rotation[0][1]=f2;
569  transform->rotation[0][2]=f3;
570  transform->rotation[1][0]=f4;
571  transform->rotation[1][1]=f5;
572  transform->rotation[1][2]=f6;
573  transform->rotation[2][0]=f7;
574  transform->rotation[2][1]=f8;
575  transform->rotation[2][2]=f9;
576  transform->trans[0]=f10;
577  transform->trans[1]=f11;
578  transform->trans[2]=f12;
579  transform->scaling_factor=f13;
580  transform->rotate=n2;
581  transform->reflection=n3;
582  transform->shear=n4;
583  }
584  else if (ident==0) commentaire=1;
585  if (commentaire==0) ident++;
586  }
587  fclose(fic);
588  return version;
589 }
590 
SAT_COEDGE::sense
int sense
Definition: sat_coedge.h:42
SAT_BODY::transform
class SAT_TRANSFORM * transform
Definition: sat_body.h:38
SAT_TRANSFORM::scaling_factor
double scaling_factor
Definition: sat_transform.h:40
SAT_GESTIONNAIRE::lst_entity
TPL_MAP_ENTITE< class SAT_IDENTIFICATEUR * > lst_entity
Definition: sat_gestionnaire.h:62
SAT_STRAIGHT
Definition: sat_straight.h:29
SAT_GESTIONNAIRE::lst_shell
TPL_MAP_ENTITE< class SAT_SHELL * > lst_shell
Definition: sat_gestionnaire.h:66
SAT_TRANSFORM
Definition: sat_transform.h:30
SAT_SUBSHELL::attrib
class SAT_ATTRIB * attrib
Definition: sat_subshell.h:35
SAT_COEDGE::owning_loop
class SAT_LOOP * owning_loop
Definition: sat_coedge.h:40
SAT_GESTIONNAIRE::lst_face
TPL_MAP_ENTITE< class SAT_FACE * > lst_face
Definition: sat_gestionnaire.h:68
SAT_SUBSHELL::parent_subshell
class SAT_SUBSHELL * parent_subshell
Definition: sat_subshell.h:36
SAT_VERTEX::point
class SAT_POINT * point
Definition: sat_vertex.h:38
SAT_POINT::attrib
class SAT_ATTRIB * attrib
Definition: sat_point.h:40
ajouter
void ajouter(Y &y, X x, SAT_GESTIONNAIRE &gest)
Definition: sat_gestionnaire.cpp:34
SAT_WIRE::attrib
class SAT_ATTRIB * attrib
Definition: sat_wire.h:35
SAT_GESTIONNAIRE::lst_wire
TPL_MAP_ENTITE< class SAT_WIRE * > lst_wire
Definition: sat_gestionnaire.h:70
SAT_SHELL::owning_lump
class SAT_LUMP * owning_lump
Definition: sat_shell.h:39
SAT_EDGE::attrib
class SAT_ATTRIB * attrib
Definition: sat_edge.h:35
SAT_EDGE::end_vertex
class SAT_VERTEX * end_vertex
Definition: sat_edge.h:37
SAT_FACE::owning_shell
class SAT_SHELL * owning_shell
Definition: sat_face.h:38
SAT_GESTIONNAIRE::lst_vertex
TPL_MAP_ENTITE< class SAT_VERTEX * > lst_vertex
Definition: sat_gestionnaire.h:73
SAT_LOOP::first_coedge
class SAT_COEDGE * first_coedge
Definition: sat_loop.h:38
SAT_GESTIONNAIRE::lire
int lire(void)
Definition: sat_gestionnaire.cpp:97
SAT_GESTIONNAIRE::lst_lump
TPL_MAP_ENTITE< class SAT_LUMP * > lst_lump
Definition: sat_gestionnaire.h:65
SAT_ELLIPSE::attrib
class SAT_ATTRIB * attrib
Definition: sat_ellipse.h:38
SAT_ELLIPSE::calcul_parametre
virtual void calcul_parametre(void)
Definition: sat_ellipse.cpp:137
SAT_ELLIPSE::center
double center[3]
Definition: sat_ellipse.h:39
SAT_TRANSFORM::shear
int shear
Definition: sat_transform.h:43
SAT_GESTIONNAIRE::REVERSED
const int REVERSED
Definition: sat_gestionnaire.h:85
SAT_GESTIONNAIRE::lst_loop
TPL_MAP_ENTITE< class SAT_LOOP * > lst_loop
Definition: sat_gestionnaire.h:69
SAT_CONE::major
double major[3]
Definition: sat_cone.h:39
SAT_ELLIPSE::major
double major[3]
Definition: sat_ellipse.h:41
SAT_COEDGE::attrib
class SAT_ATTRIB * attrib
Definition: sat_coedge.h:35
SAT_GESTIONNAIRE::IS_OUT
const int IS_OUT
Definition: sat_gestionnaire.h:89
SAT_FACE::simple_face
int simple_face
Definition: sat_face.h:42
SAT_SHELL::next_shell
class SAT_SHELL * next_shell
Definition: sat_shell.h:36
SAT_EDGE::curve
class SAT_COURBE * curve
Definition: sat_edge.h:39
SAT_SHELL::first_face
class SAT_FACE * first_face
Definition: sat_shell.h:38
SAT_GESTIONNAIRE::lst_straight
TPL_MAP_ENTITE< class SAT_STRAIGHT * > lst_straight
Definition: sat_gestionnaire.h:78
SAT_GESTIONNAIRE::lst_plane
TPL_MAP_ENTITE< class SAT_PLANE * > lst_plane
Definition: sat_gestionnaire.h:76
SAT_PLANE::normal
double normal[3]
Definition: sat_plane.h:39
SAT_FACE::surface
class SAT_SURFACE * surface
Definition: sat_face.h:40
SAT_FACE::owning_subshell
class SAT_SUBSHELL * owning_subshell
Definition: sat_face.h:39
SAT_COEDGE::next_coedge
class SAT_COEDGE * next_coedge
Definition: sat_coedge.h:36
SAT_TRANSFORM::reflection
int reflection
Definition: sat_transform.h:42
SAT_ELLIPSE
Definition: sat_ellipse.h:29
SAT_COEDGE::partner_coedge
class SAT_COEDGE * partner_coedge
Definition: sat_coedge.h:38
SAT_FACE::exterieur
int exterieur
Definition: sat_face.h:43
SAT_CONE
Definition: sat_cone.h:28
SAT_SHELL
Definition: sat_shell.h:28
SAT_GESTIONNAIRE::SINGLE
const int SINGLE
Definition: sat_gestionnaire.h:87
SAT_LUMP::next_lump
class SAT_LUMP * next_lump
Definition: sat_lump.h:37
SAT_GESTIONNAIRE::lst_attrib
TPL_MAP_ENTITE< class SAT_ATTRIB * > lst_attrib
Definition: sat_gestionnaire.h:63
SAT_LUMP
Definition: sat_lump.h:28
SAT_GESTIONNAIRE::lst_subshell
TPL_MAP_ENTITE< class SAT_SUBSHELL * > lst_subshell
Definition: sat_gestionnaire.h:67
SAT_GESTIONNAIRE::IS_IN
const int IS_IN
Definition: sat_gestionnaire.h:88
SAT_STRAIGHT::dir
double dir[3]
Definition: sat_straight.h:38
sat_gestionnaire.h
SAT_PLANE::calcule_parametre
virtual void calcule_parametre(void)
Definition: sat_plane.cpp:43
SAT_CONE::center
double center[3]
Definition: sat_cone.h:37
SAT_GESTIONNAIRE::lst_transform
TPL_MAP_ENTITE< class SAT_TRANSFORM * > lst_transform
Definition: sat_gestionnaire.h:79
SAT_EDGE::sense
int sense
Definition: sat_edge.h:40
SAT_SUBSHELL::first_subshell
class SAT_SUBSHELL * first_subshell
Definition: sat_subshell.h:38
SAT_COEDGE::pcurve
class SAT_PCURVE * pcurve
Definition: sat_coedge.h:41
SAT_BODY
Definition: sat_body.h:28
SAT_LUMP::attrib
class SAT_ATTRIB * attrib
Definition: sat_lump.h:36
SAT_LOOP::next_loop
class SAT_LOOP * next_loop
Definition: sat_loop.h:37
SAT_FACE::first_loop
class SAT_LOOP * first_loop
Definition: sat_face.h:37
SAT_BODY::attrib
class SAT_ATTRIB * attrib
Definition: sat_body.h:35
SAT_GESTIONNAIRE::lst_body
TPL_MAP_ENTITE< class SAT_BODY * > lst_body
Definition: sat_gestionnaire.h:64
SAT_SHELL::attrib
class SAT_ATTRIB * attrib
Definition: sat_shell.h:35
SAT_LOOP::attrib
class SAT_ATTRIB * attrib
Definition: sat_loop.h:36
SAT_LOOP
Definition: sat_loop.h:29
SAT_VERTEX::attrib
class SAT_ATTRIB * attrib
Definition: sat_vertex.h:36
SAT_GESTIONNAIRE::lst_surface
TPL_MAP_ENTITE< class SAT_SURFACE * > lst_surface
Definition: sat_gestionnaire.h:80
SAT_POINT
Definition: sat_point.h:30
SAT_FACE
Definition: sat_face.h:28
SAT_STRAIGHT::root
double root[3]
Definition: sat_straight.h:37
SAT_ATTRIB
Definition: sat_attrib.h:28
SAT_GESTIONNAIRE::lst_coedge
TPL_MAP_ENTITE< class SAT_COEDGE * > lst_coedge
Definition: sat_gestionnaire.h:71
SAT_LUMP::body
class SAT_BODY * body
Definition: sat_lump.h:39
SAT_LUMP::first_shell
class SAT_SHELL * first_shell
Definition: sat_lump.h:38
SAT_SUBSHELL::owning_wire
class SAT_WIRE * owning_wire
Definition: sat_subshell.h:40
SAT_BODY::first_lump
class SAT_LUMP * first_lump
Definition: sat_body.h:36
SAT_GESTIONNAIRE::SAT_GESTIONNAIRE
SAT_GESTIONNAIRE()
Definition: sat_gestionnaire.cpp:50
SAT_CONE::normal
double normal[3]
Definition: sat_cone.h:38
SAT_GESTIONNAIRE::change_nom
void change_nom(char *path)
Definition: sat_gestionnaire.cpp:84
SAT_POINT::coord
double coord[3]
Definition: sat_point.h:43
SAT_COEDGE::edge
class SAT_EDGE * edge
Definition: sat_coedge.h:39
SAT_PLANE::u_deriv
double u_deriv[3]
Definition: sat_plane.h:40
SAT_GESTIONNAIRE::nom
char * nom
Definition: sat_gestionnaire.h:90
SAT_SURFACE
Definition: sat_surface.h:29
SAT_TRANSFORM::trans
double trans[3]
Definition: sat_transform.h:39
SAT_PLANE::root
double root[3]
Definition: sat_plane.h:38
SAT_CONE::calcule_parametre
void calcule_parametre(void)
Definition: sat_cone.cpp:44
SAT_EDGE::owning_coedge
class SAT_COEDGE * owning_coedge
Definition: sat_edge.h:38
SAT_TRANSFORM::rotation
double rotation[3][3]
Definition: sat_transform.h:38
TPL_MAP_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_map_entite.h:55
SAT_PCURVE
Definition: sat_pcurve.h:27
SAT_COEDGE::previous_coedge
class SAT_COEDGE * previous_coedge
Definition: sat_coedge.h:37
TPL_MAP_ENTITE::getid
virtual X getid(unsigned long num)
Definition: tpl_map_entite.h:96
SAT_GESTIONNAIRE
Definition: sat_gestionnaire.h:46
SAT_COEDGE
Definition: sat_coedge.h:28
SAT_VERTEX::owning_edge
class SAT_EDGE * owning_edge
Definition: sat_vertex.h:37
SAT_WIRE::next_wire
class SAT_WIRE * next_wire
Definition: sat_wire.h:36
SAT_GESTIONNAIRE::get_nom
char * get_nom(void)
Definition: sat_gestionnaire.cpp:91
SAT_GESTIONNAIRE::lst_ellipse
TPL_MAP_ENTITE< class SAT_ELLIPSE * > lst_ellipse
Definition: sat_gestionnaire.h:75
SAT_WIRE::first_coedge
class SAT_COEDGE * first_coedge
Definition: sat_wire.h:37
SAT_CONE::sinalpha
double sinalpha
Definition: sat_cone.h:42
SAT_ELLIPSE::normal
double normal[3]
Definition: sat_ellipse.h:40
SAT_BODY::first_wire
class SAT_WIRE * first_wire
Definition: sat_body.h:37
SAT_CONE::ratio
double ratio
Definition: sat_cone.h:40
SAT_PLANE::attrib
class SAT_ATTRIB * attrib
Definition: sat_plane.h:37
SAT_GESTIONNAIRE::lst_edge
TPL_MAP_ENTITE< class SAT_EDGE * > lst_edge
Definition: sat_gestionnaire.h:72
SAT_CONE::cosalpha
double cosalpha
Definition: sat_cone.h:41
SAT_SUBSHELL
Definition: sat_subshell.h:28
SAT_FACE::next_face
class SAT_FACE * next_face
Definition: sat_face.h:36
SAT_ELLIPSE::ratio
double ratio
Definition: sat_ellipse.h:42
res
#define res(i, j)
SAT_FACE::attrib
class SAT_ATTRIB * attrib
Definition: sat_face.h:35
SAT_GESTIONNAIRE::lst_point
TPL_MAP_ENTITE< class SAT_POINT * > lst_point
Definition: sat_gestionnaire.h:77
SAT_STRAIGHT::attrib
class SAT_ATTRIB * attrib
Definition: sat_straight.h:36
SAT_WIRE::owning
void * owning
Definition: sat_wire.h:38
SAT_SHELL::first_subshell
class SAT_SUBSHELL * first_subshell
Definition: sat_shell.h:37
SAT_SUBSHELL::next_subshell
class SAT_SUBSHELL * next_subshell
Definition: sat_subshell.h:37
SAT_LOOP::owning_face
class SAT_FACE * owning_face
Definition: sat_loop.h:39
SAT_GESTIONNAIRE::FORWARD
const int FORWARD
Definition: sat_gestionnaire.h:84
SAT_FACE::sense
int sense
Definition: sat_face.h:41
SAT_EDGE
Definition: sat_edge.h:28
SAT_COURBE
Definition: sat_courbe.h:33
SAT_GESTIONNAIRE::DOUBLE
const int DOUBLE
Definition: sat_gestionnaire.h:86
SAT_TRANSFORM::rotate
int rotate
Definition: sat_transform.h:41
SAT_SUBSHELL::first_face
class SAT_FACE * first_face
Definition: sat_subshell.h:39
SAT_WIRE
Definition: sat_wire.h:29
SAT_GESTIONNAIRE::~SAT_GESTIONNAIRE
virtual ~SAT_GESTIONNAIRE()
Definition: sat_gestionnaire.cpp:61
SAT_TRANSFORM::attrib
class SAT_ATTRIB * attrib
Definition: sat_transform.h:37
SAT_GESTIONNAIRE::lst_cone
TPL_MAP_ENTITE< class SAT_CONE * > lst_cone
Definition: sat_gestionnaire.h:74
SAT_PLANE
Definition: sat_plane.h:30
SAT_VERTEX
Definition: sat_vertex.h:29
TPL_MAP_ENTITE::vide
virtual void vide(void)
Definition: tpl_map_entite.h:106
libere
void libere(Y &y)
Definition: sat_gestionnaire.cpp:40
SAT_GESTIONNAIRE::lst_courbe
TPL_MAP_ENTITE< class SAT_COURBE * > lst_courbe
Definition: sat_gestionnaire.h:81
SAT_EDGE::start_vertex
class SAT_VERTEX * start_vertex
Definition: sat_edge.h:36
SAT_CONE::attrib
class SAT_ATTRIB * attrib
Definition: sat_cone.h:36