ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/step/src/st_gestionnaire.cpp
Revision: 5
Committed: Tue Jun 12 20:26:34 2007 UTC (17 years, 11 months ago)
Original Path: magic/lib/step/step/src/st_gestionnaire.cpp
File size: 28520 byte(s)
Log Message:

File Contents

# User Rev Content
1 5 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4     // Jean Christophe Cuillière et Vincent FRANCOIS
5     // Département de Génie Mécanique - UQTR
6     //------------------------------------------------------------
7     // Le projet MAGIC est un projet de recherche du département
8     // de génie mécanique de l'Université du Québec à
9     // Trois Rivières
10     // Les librairies ne peuvent être utilisées sans l'accord
11     // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // st_gestionnaire.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 à 11H24
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23    
24    
25     #include "gestionversion.h"
26    
27     #include <stdio.h>
28    
29     #include <stdlib.h>
30     #include "st_gestionnaire.h"
31     #include "parse.h"
32     #include "pars_argument.h"
33    
34    
35    
36    
37     //---------------------------------------------------------------------------
38    
39    
40     template<class Y,class X> void ajouter(Y& y,X x,ST_GESTIONNAIRE& gest)
41     {
42     y.ajouter(x);
43     gest.lst_entity.ajouter(x);
44     }
45    
46     template<class Y,class X>void libere(Y& y)
47     {
48     for (long i=0;i<y.get_nb();i++)
49     {
50     X* x=y.get(i);
51     delete x;
52     }
53     y.vide();
54     }
55    
56     ST_GESTIONNAIRE::ST_GESTIONNAIRE(char *path):nom(NULL)
57     {
58     int num=strlen(path);
59     nom=new char[num+1];
60     strcpy(nom,path);
61     init();
62     }
63    
64     ST_GESTIONNAIRE::ST_GESTIONNAIRE():nom(NULL)
65     {
66     init();
67     }
68    
69    
70     void ST_GESTIONNAIRE::init(void)
71     {
72     for (int i=0;i<25;i++) tabentite[i]=0;
73     entitenom.insert(entitenom.end(),"VERTEX_POINT");
74     entitenom.insert(entitenom.end(),"VECTOR");
75     entitenom.insert(entitenom.end(),"LINE");
76     entitenom.insert(entitenom.end(),"EDGE_CURVE");
77     entitenom.insert(entitenom.end(),"ORIENTED_EDGE");
78     entitenom.insert(entitenom.end(),"EDGE_LOOP");
79     entitenom.insert(entitenom.end(),"FACE_BOUND");
80     entitenom.insert(entitenom.end(),"FACE_OUTER_BOUND");
81     entitenom.insert(entitenom.end(),"ADVANCED_FACE");
82     entitenom.insert(entitenom.end(),"AXIS2_PLACEMENT_3D");
83     entitenom.insert(entitenom.end(),"PLANE");
84     entitenom.insert(entitenom.end(),"CYLINDRICAL_SURFACE");
85     entitenom.insert(entitenom.end(),"TOROIDAL_SURFACE");
86     entitenom.insert(entitenom.end(),"CONICAL_SURFACE");
87     entitenom.insert(entitenom.end(),"SPHERICAL_SURFACE");
88     entitenom.insert(entitenom.end(),"CLOSED_SHELL");
89     entitenom.insert(entitenom.end(),"ORIENTED_CLOSED_SHELL");
90     entitenom.insert(entitenom.end(),"MANIFOLD_SOLID_BREP");
91     entitenom.insert(entitenom.end(),"BREP_WITH_VOIDS");
92     entitenom.insert(entitenom.end(),"CIRCLE");
93     entitenom.insert(entitenom.end(),"ELLIPSE");
94     entitenom.insert(entitenom.end(),"DIRECTION");
95     entitenom.insert(entitenom.end(),"CARTESIAN_POINT");
96     entitenom.insert(entitenom.end(),"B_SPLINE_CURVE_WITH_KNOTS");
97     entitenom.insert(entitenom.end(),"B_SPLINE_SURFACE_WITH_KNOTS");
98     }
99    
100     ST_GESTIONNAIRE::~ST_GESTIONNAIRE()
101     {
102     libere<TPL_MAP_ENTITE<class ST_VECTOR*>,ST_VECTOR>(lst_vector);
103     libere<TPL_MAP_ENTITE<class ST_EDGE_CURVE*>,ST_EDGE_CURVE>(lst_edgecurve);
104     libere<TPL_MAP_ENTITE<class ST_ORIENTED_EDGE*>,ST_ORIENTED_EDGE>(lst_oriedge);
105     libere<TPL_MAP_ENTITE<class ST_LINE*>,ST_LINE>(lst_line);
106     libere<TPL_MAP_ENTITE<class ST_FACE_BOUND*>,ST_FACE_BOUND>(lst_facebound);
107     libere<TPL_MAP_ENTITE<class ST_VERTEX*>,ST_VERTEX>(lst_vertex);
108     libere<TPL_MAP_ENTITE<class ST_PLANE*>,ST_PLANE>(lst_plane);
109     libere<TPL_MAP_ENTITE<class ST_CYLINDRICAL*>,ST_CYLINDRICAL>(lst_cylindrical);
110     libere<TPL_MAP_ENTITE<class ST_SPHERICAL*>,ST_SPHERICAL>(lst_spherical);
111     libere<TPL_MAP_ENTITE<class ST_TOROIDAL*>,ST_TOROIDAL>(lst_toroidal);
112     libere<TPL_MAP_ENTITE<class ST_CONICAL*>,ST_CONICAL>(lst_conical);
113     libere<TPL_MAP_ENTITE<class ST_AXIS2_PLACEMENT_3D*>,ST_AXIS2_PLACEMENT_3D>(lst_axis2_placement_3d);
114     libere<TPL_MAP_ENTITE<class ST_CLOSED_SHELL*>,ST_CLOSED_SHELL>(lst_closed_shell);
115     libere<TPL_MAP_ENTITE<class ST_ORIENTED_CLOSED_SHELL*>,ST_ORIENTED_CLOSED_SHELL>(lst_oriented_closed_shell);
116     libere<TPL_MAP_ENTITE<class ST_ADVANCED_FACE*>,ST_ADVANCED_FACE>(lst_advanced_face);
117     libere<TPL_MAP_ENTITE<class ST_EDGE_LOOP*>,ST_EDGE_LOOP>(lst_edge_loop);
118     libere<TPL_MAP_ENTITE<class ST_MANIFOLD_BREP*>,ST_MANIFOLD_BREP>(lst_manifold_brep);
119     libere<TPL_MAP_ENTITE<class ST_BREP_WITH_VOIDS*>,ST_BREP_WITH_VOIDS>(lst_brep_with_voids);
120     libere<TPL_MAP_ENTITE<class ST_CIRCLE*>,ST_CIRCLE>(lst_circle);
121     libere<TPL_MAP_ENTITE<class ST_ELLIPSE*>,ST_ELLIPSE>(lst_ellipse);
122     libere<TPL_MAP_ENTITE<class ST_DIRECTION*>,ST_DIRECTION>(lst_direction);
123     libere<TPL_MAP_ENTITE<class ST_POINT*>,ST_POINT>(lst_point);
124     libere<TPL_MAP_ENTITE<class ST_B_SPLINE*>,ST_B_SPLINE>(lst_bspline);
125     libere<TPL_MAP_ENTITE<class ST_B_SPLINE_SURF*>,ST_B_SPLINE_SURF>(lst_bsplines);
126     lst_entity.vide();
127     if (nom!=NULL) delete [] nom;
128     }
129    
130    
131     void ST_GESTIONNAIRE::change_nom(char *path)
132     {
133     delete nom;
134     int num=strlen(path);
135     nom=new char[num+1];
136     strcpy(nom,path);
137     }
138    
139    
140    
141    
142     char* ST_GESTIONNAIRE::get_nom(void)
143     {
144     return nom;
145     }
146    
147     long ST_GESTIONNAIRE::cid(std::string str)
148     {
149     return atol(str.c_str()+1);
150     }
151    
152    
153    
154     int ST_GESTIONNAIRE::cbool(std::string str)
155     {
156     if (str==".T.") return 1;
157     if (str==".F.") return -1;
158     return 0;
159     }
160    
161    
162     int ST_GESTIONNAIRE::lire(void)
163     {
164     FILE *in;
165    
166    
167     in=fopen(nom,"rt");
168     if (in==NULL) return 0;
169    
170    
171     // Headers
172     PARS_ARGUMENT param[20];
173     PARSE parse;
174     do
175     {
176     int ierr;
177     std::string ligne=parse.lire(in,';',&ierr);
178     if (ierr!=0) return 0;
179     parse.decode(ligne.c_str(),"@;",param);
180     }
181     while (param[0].argument[0]!="DATA");
182    
183     // Data
184     do
185     {
186     int ierr;
187     std::string ligne=parse.lire(in,';',&ierr);
188     int nbcar=ligne.length();
189     for (int i=nbcar-1;i>=0;i--)
190     if (ligne[i]==' ') ligne.erase(i,1);
191     parse.decode(ligne.c_str(),"@;",param);
192     if (param[0].argument[0]!="ENDSEC")
193     {
194     parse.decode(ligne.c_str(),"#@=@(@);",param);
195     std::string entite=param[1].argument[0];
196     if (entite=="")
197     {
198     parse.decode(ligne.c_str(),"#@=(@);",param);
199     entite=param[1].argument[0];
200     }
201     long id=atol(param[0].argument[0].c_str());
202     std::string data=param[2].argument[0] ;
203     if (entite=="VERTEX_POINT")
204     {
205     parse.decode(data.c_str(),"'@',@",param+2);
206     long id_point=cid(param[3].argument[0].c_str());
207     ST_VERTEX *vertex=new ST_VERTEX(id,param[2].argument[0],id_point);
208     ajouter<TPL_MAP_ENTITE<ST_VERTEX*>,ST_VERTEX*>(lst_vertex,vertex,*this);
209     tabentite[VERTEX_POINT]++;
210     }
211     else if (entite=="VECTOR")
212     {
213     parse.decode(data.c_str(),"'@',@,@",param+2);
214     long iddirection=cid(param[3].argument[0]);
215     double magnitude=atof(param[4].argument[0].c_str());
216     ST_VECTOR* vector=new ST_VECTOR(id,param[2].argument[0],iddirection,magnitude);
217     ajouter<TPL_MAP_ENTITE<ST_VECTOR*>,ST_VECTOR*>(lst_vector,vector,*this);
218     tabentite[VECTOR]++;
219     }
220     else if (entite=="LINE")
221     {
222     parse.decode(data.c_str(),"'@',@,@",param+2);
223     long id_point=cid(param[3].argument[0].c_str());
224     long id_vector=cid(param[4].argument[0].c_str());
225     ST_LINE *line=new ST_LINE(id,param[2].argument[0],id_point,id_vector);
226     ajouter<TPL_MAP_ENTITE<ST_LINE*>,ST_LINE*>(lst_line,line,*this);
227     ajouter<TPL_MAP_ENTITE<ST_COURBE*>,ST_COURBE*>(lst_courbe,line,*this);
228     tabentite[LINE]++;
229     }
230     else if (entite=="EDGE_CURVE")
231     {
232     parse.decode(data.c_str(),"'@',@,@,@,@",param+2);
233     long idvertex1=cid(param[3].argument[0]);
234     long idvertex2=cid(param[4].argument[0]);
235     long idcurve=cid(param[5].argument[0]);
236     int sens=cbool(param[6].argument[0]);
237     ST_EDGE_CURVE *edgecurve=new ST_EDGE_CURVE(id,param[2].argument[0],idvertex1,idvertex2,idcurve,sens);
238     ajouter<TPL_MAP_ENTITE<ST_EDGE_CURVE*>,ST_EDGE_CURVE*>(lst_edgecurve,edgecurve,*this);
239     tabentite[EDGE_CURVE]++;
240     }
241     else if (entite=="ORIENTED_EDGE")
242     {
243     parse.decode(data.c_str(),"'@',@,@,@,@",param+2);
244     long id_edge_curve=cid(param[5].argument[0].c_str());
245     int sens=cbool(param[6].argument[0]);
246     ST_ORIENTED_EDGE *oriedge=new ST_ORIENTED_EDGE(id,param[2].argument[0],id_edge_curve,sens);
247     ajouter<TPL_MAP_ENTITE<ST_ORIENTED_EDGE*>,ST_ORIENTED_EDGE*>(lst_oriedge,oriedge,*this);
248     tabentite[ORIENTED_EDGE]++;
249     }
250     else if (entite=="EDGE_LOOP")
251     {
252     parse.decode(data.c_str(),"'@',(&)",param+2);
253     std::vector<long> liste_tmp;
254     long nb=param[3].get_nombre();
255     for (long i=0;i<nb;i++)
256     liste_tmp.insert(liste_tmp.end(),cid(param[3].argument[i]));
257     ST_EDGE_LOOP *edge_loop=new ST_EDGE_LOOP(id,param[2].argument[0],&liste_tmp);
258     ajouter<TPL_MAP_ENTITE<ST_EDGE_LOOP*>,ST_EDGE_LOOP*>(lst_edge_loop,edge_loop,*this);
259     tabentite[EDGE_LOOP]++;
260     }
261     else if ((entite=="FACE_BOUND") || (entite=="FACE_OUTER_BOUND"))
262     {
263     parse.decode(data.c_str(),"'@',@,@",param+2);
264     long id_edge_loop=cid(param[3].argument[0].c_str());
265     int sens=cbool(param[4].argument[0]);
266     ST_FACE_BOUND *facebound=new ST_FACE_BOUND(id,param[2].argument[0],id_edge_loop,sens);
267     ajouter<TPL_MAP_ENTITE<ST_FACE_BOUND*>,ST_FACE_BOUND*>(lst_facebound,facebound,*this);
268     if (entite=="FACE_BOUND") tabentite[FACE_BOUND]++;
269     if (entite=="FACE_OUTER_BOUND") tabentite[FACE_OUTER_BOUND]++;
270     }
271     else if (entite=="ADVANCED_FACE")
272     {
273     parse.decode(data.c_str(),"'@',(&),@,@",param+2);
274     std::vector<long> liste_tmp;
275     long nb=param[3].get_nombre();
276     for (long i=0;i<nb;i++)
277     liste_tmp.insert(liste_tmp.end(),cid(param[3].argument[i]));
278     long id_surface=cid(param[4].argument[0].c_str());
279     int sens=cbool(param[5].argument[0]);
280     ST_ADVANCED_FACE *advanced_face=new ST_ADVANCED_FACE(id,param[2].argument[0],&liste_tmp,id_surface,sens);
281     ajouter<TPL_MAP_ENTITE<ST_ADVANCED_FACE*>,ST_ADVANCED_FACE*>(lst_advanced_face,advanced_face,*this);
282     tabentite[ADVANCED_FACE]++;
283     }
284     else if (entite=="AXIS2_PLACEMENT_3D")
285     {
286     parse.decode(data.c_str(),"'@',@,@,@",param+2);
287     long id_point=cid(param[3].argument[0].c_str());
288     long id_direction1=cid(param[4].argument[0].c_str());
289     long id_direction2;
290     if (param[5].argument[0].c_str()=="$")
291     {
292     id_direction2=-1;
293     }
294     else
295     {
296     id_direction2=cid(param[5].argument[0].c_str());
297     }
298     ST_AXIS2_PLACEMENT_3D *axis2_placement_3d=new ST_AXIS2_PLACEMENT_3D(id,param[2].argument[0],id_point,id_direction1,id_direction2);
299     ajouter<TPL_MAP_ENTITE<ST_AXIS2_PLACEMENT_3D*>,ST_AXIS2_PLACEMENT_3D*>(lst_axis2_placement_3d,axis2_placement_3d,*this);
300     tabentite[AXIS2_PLACEMENT_3D]++;
301     }
302     else if (entite=="PLANE")
303     {
304     parse.decode(data.c_str(),"'@',@",param+2);
305     long id_axis2_placement_3d=cid(param[3].argument[0].c_str());
306     ST_PLANE *plane=new ST_PLANE(id,param[2].argument[0],id_axis2_placement_3d);
307     ajouter<TPL_MAP_ENTITE<ST_PLANE*>,ST_PLANE*>(lst_plane,plane,*this);
308     ajouter<TPL_MAP_ENTITE<ST_SURFACE*>,ST_SURFACE*>(lst_surface,plane,*this);
309     tabentite[PLANE]++;
310     }
311     else if (entite=="CYLINDRICAL_SURFACE")
312     {
313     parse.decode(data.c_str(),"'@',@,@",param+2);
314     long id_axis2_placement_3d=cid(param[3].argument[0].c_str());
315     double rayon=atof(param[4].argument[0].c_str());
316     ST_CYLINDRICAL *cylindrical=new ST_CYLINDRICAL(id,param[2].argument[0],id_axis2_placement_3d,rayon);
317     ajouter<TPL_MAP_ENTITE<ST_CYLINDRICAL*>,ST_CYLINDRICAL*>(lst_cylindrical,cylindrical,*this);
318     ajouter<TPL_MAP_ENTITE<ST_SURFACE*>,ST_SURFACE*>(lst_surface,cylindrical,*this);
319     tabentite[CYLINDRICAL_SURFACE]++;
320     }
321     else if (entite=="TOROIDAL_SURFACE")
322     {
323     parse.decode(data.c_str(),"'@',@,@,@",param+2);
324     long id_axis2_placement_3d=cid(param[3].argument[0].c_str());
325     double grandray=atof(param[4].argument[0].c_str());
326     double petitray=atof(param[5].argument[0].c_str());
327     ST_TOROIDAL *toroidal=new ST_TOROIDAL(id,param[2].argument[0],id_axis2_placement_3d,grandray,petitray);
328     ajouter<TPL_MAP_ENTITE<ST_TOROIDAL*>,ST_TOROIDAL*>(lst_toroidal,toroidal,*this);
329     ajouter<TPL_MAP_ENTITE<ST_SURFACE*>,ST_SURFACE*>(lst_surface,toroidal,*this);
330     tabentite[TOROIDAL_SURFACE]++;
331     }
332     else if (entite=="CONICAL_SURFACE")
333     {
334     parse.decode(data.c_str(),"'@',@,@,@",param+2);
335     long id_axis2_placement_3d=cid(param[3].argument[0].c_str());
336     double rayon=atof(param[4].argument[0].c_str());
337     double angle=atof(param[5].argument[0].c_str());
338     ST_CONICAL *conical=new ST_CONICAL(id,param[2].argument[0],id_axis2_placement_3d,rayon,angle);
339     ajouter<TPL_MAP_ENTITE<ST_CONICAL*>,ST_CONICAL*>(lst_conical,conical,*this);
340     ajouter<TPL_MAP_ENTITE<ST_SURFACE*>,ST_SURFACE*>(lst_surface,conical,*this);
341     tabentite[CONICAL_SURFACE]++;
342     }
343     else if (entite=="SPHERICAL_SURFACE")
344     {
345     parse.decode(data.c_str(),"'@',@,@",param+2);
346     long id_axis2_placement_3d=cid(param[3].argument[0].c_str());
347     double rayon=atof(param[4].argument[0].c_str());
348     ST_SPHERICAL *spherical=new ST_SPHERICAL(id,param[2].argument[0],id_axis2_placement_3d,rayon);
349     ajouter<TPL_MAP_ENTITE<ST_SPHERICAL*>,ST_SPHERICAL*>(lst_spherical,spherical,*this);
350     ajouter<TPL_MAP_ENTITE<ST_SURFACE*>,ST_SURFACE*>(lst_surface,spherical,*this);
351     tabentite[SPHERICAL_SURFACE]++;
352     }
353     else if (entite=="CLOSED_SHELL")
354     {
355     parse.decode(data.c_str(),"'@',(&)",param+2);
356     std::vector<long> liste_tmp;
357     long nb=param[3].get_nombre();
358     for (long i=0;i<nb;i++)
359     liste_tmp.insert(liste_tmp.end(),cid(param[3].argument[i]));
360     ST_CLOSED_SHELL *closed_shell=new ST_CLOSED_SHELL(id,param[2].argument[0],&liste_tmp);
361     ajouter<TPL_MAP_ENTITE<ST_CLOSED_SHELL*>,ST_CLOSED_SHELL*>(lst_closed_shell,closed_shell,*this);
362     tabentite[CLOSED_SHELL]++;
363     }
364     else if (entite=="ORIENTED_CLOSED_SHELL")
365     {
366     parse.decode(data.c_str(),"'@',@,@,@",param+2);
367     long id_closed_shell=cid(param[4].argument[0].c_str());
368     int sens=cbool(param[5].argument[0]);
369     ST_ORIENTED_CLOSED_SHELL *oriented_closed_shell=new ST_ORIENTED_CLOSED_SHELL(id,param[2].argument[0],id_closed_shell,sens);
370     ajouter<TPL_MAP_ENTITE<ST_ORIENTED_CLOSED_SHELL*>,ST_ORIENTED_CLOSED_SHELL*>(lst_oriented_closed_shell,oriented_closed_shell,*this);
371     tabentite[ORIENTED_CLOSED_SHELL]++;
372     }
373     else if (entite=="MANIFOLD_SOLID_BREP")
374     {
375     parse.decode(data.c_str(),"'@',@",param+2);
376     long id_closed_shell=cid(param[3].argument[0].c_str());
377     ST_MANIFOLD_BREP *manifold_brep=new ST_MANIFOLD_BREP(id,param[2].argument[0],id_closed_shell);
378     ajouter<TPL_MAP_ENTITE<ST_MANIFOLD_BREP*>,ST_MANIFOLD_BREP*>(lst_manifold_brep,manifold_brep,*this);
379     tabentite[MANIFOLD_SOLID_BREP]++;
380     }
381     else if (entite=="BREP_WITH_VOIDS")
382     {
383     parse.decode(data.c_str(),"'@',@,(&)",param+2);
384     long id_closed_shell=cid(param[3].argument[0].c_str());
385     std::vector<long> liste_tmp;
386     long nb=param[4].get_nombre();
387     for (long i=0;i<nb;i++)
388     liste_tmp.insert(liste_tmp.end(),cid(param[4].argument[i]));
389     ST_BREP_WITH_VOIDS *brep_with_voids=new ST_BREP_WITH_VOIDS(id,param[2].argument[0],id_closed_shell,&liste_tmp);
390     ajouter<TPL_MAP_ENTITE<ST_BREP_WITH_VOIDS*>,ST_BREP_WITH_VOIDS*>(lst_brep_with_voids,brep_with_voids,*this);
391     tabentite[BREP_WITH_VOIDS]++;
392     }
393     else if (entite=="CIRCLE")
394     {
395     parse.decode(data.c_str(),"'@',@,@",param+2);
396     long id_axis2_placement_3d=cid(param[3].argument[0].c_str());
397     double rayon=atof(param[4].argument[0].c_str());
398     ST_CIRCLE *circle=new ST_CIRCLE(id,param[2].argument[0],id_axis2_placement_3d,rayon);
399     ajouter<TPL_MAP_ENTITE<ST_CIRCLE*>,ST_CIRCLE*>(lst_circle,circle,*this);
400     ajouter<TPL_MAP_ENTITE<ST_COURBE*>,ST_COURBE*>(lst_courbe,circle,*this);
401     tabentite[CIRCLE]++;
402     }
403     else if (entite=="ELLIPSE")
404     {
405     parse.decode(data.c_str(),"'@',@,@,@",param+2);
406     long id_axis2_placement_3d=cid(param[3].argument[0].c_str());
407     double a=atof(param[4].argument[0].c_str());
408     double b=atof(param[5].argument[0].c_str());
409     ST_ELLIPSE *ellipse=new ST_ELLIPSE(id,param[2].argument[0],id_axis2_placement_3d,a,b);
410     ajouter<TPL_MAP_ENTITE<ST_ELLIPSE*>,ST_ELLIPSE*>(lst_ellipse,ellipse,*this);
411     ajouter<TPL_MAP_ENTITE<ST_COURBE*>,ST_COURBE*>(lst_courbe,ellipse,*this);
412     tabentite[ELLIPSE]++;
413     }
414     else if (entite=="DIRECTION")
415     {
416     parse.decode(data.c_str(),"'@',(&)",param+2);
417     int nb=param[3].get_nombre();
418     nb++;
419     nb--;
420     double x=atof(param[3].argument[0].c_str());
421     double y=atof(param[3].argument[1].c_str());
422     double z=atof(param[3].argument[2].c_str());
423     ST_DIRECTION *direction=new ST_DIRECTION(id,param[2].argument[0],x,y,z);
424     ajouter<TPL_MAP_ENTITE<ST_DIRECTION*>,ST_DIRECTION*>(lst_direction,direction,*this);
425     tabentite[DIRECTION]++;
426     }
427     else if (entite=="CARTESIAN_POINT")
428     {
429     parse.decode(data.c_str(),"'@',(&)",param+2);
430     double x=atof(param[3].argument[0].c_str());
431     double y=atof(param[3].argument[1].c_str());
432     double z=atof(param[3].argument[2].c_str());
433     ST_POINT *point=new ST_POINT(id,param[2].argument[0],x,y,z);
434     ajouter<TPL_MAP_ENTITE<ST_POINT*>,ST_POINT*>(lst_point,point,*this);
435     tabentite[CARTESIAN_POINT]++;
436     }
437     else if (entite=="B_SPLINE_CURVE_WITH_KNOTS")
438     {
439     parse.decode(data.c_str(),"'@',@,(&),@,@,@,(&),(&),@",param+2);
440     int bs_degre=atoi(param[3].argument[0].c_str());
441     std::vector<int> liste_tmp_1;
442     int nb_1=param[4].get_nombre();
443     for (int i=0;i<nb_1;i++)
444     liste_tmp_1.insert(liste_tmp_1.end(),cid(param[4].argument[i]));
445     std::vector<int> liste_tmp_2;
446     int nb_2=param[8].get_nombre();
447     for (int j=0;j<nb_2;j++)
448     liste_tmp_2.insert(liste_tmp_2.end(),atoi(param[8].argument[j].c_str()));
449     std::vector<double> liste_tmp_3;
450     long nb_3=param[9].get_nombre();
451     for (long k=0;k<nb_3;k++)
452     liste_tmp_3.insert(liste_tmp_3.end(),atof(param[9].argument[k].c_str()));
453     ST_B_SPLINE *bspline=new ST_B_SPLINE(id,param[2].argument[0],bs_degre,liste_tmp_1,liste_tmp_2,liste_tmp_3);
454     ajouter<TPL_MAP_ENTITE<ST_B_SPLINE*>,ST_B_SPLINE*>(lst_bspline,bspline,*this);
455     ajouter<TPL_MAP_ENTITE<ST_COURBE*>,ST_COURBE*>(lst_courbe,bspline,*this);
456     tabentite[B_SPLINE_CURVE_WITH_KNOTS]++;
457     }
458     else if (entite=="B_SPLINE_SURFACE_WITH_KNOTS")
459     {
460     parse.decode(data.c_str(),"'@',@,@,(&),@,@,@,@,(&),(&),(&),(&),@",param+2);
461     int bs_degre_u=atoi(param[3].argument[0].c_str());
462     int bs_degre_v=atoi(param[4].argument[0].c_str());
463     int nb_1=param[5].get_nombre();
464     std::vector<int> liste_tmp_1;
465     for (int i=0;i<nb_1;i++)
466     {
467     PARS_ARGUMENT param2;
468     parse.decode(param[5].argument[i].c_str(),"(&)", &param2);
469     int nb_11=param2.get_nombre();
470     for (int j=0;j<nb_11;j++)
471     liste_tmp_1.insert(liste_tmp_1.end(),cid(param2.argument[j].c_str()));
472     }
473     std::vector<int> liste_tmp_2;
474     int nb_2=param[10].get_nombre();
475     for (int j=0;j<nb_2;j++)
476     liste_tmp_2.insert(liste_tmp_2.end(),atoi(param[10].argument[j].c_str()));
477     std::vector<int> liste_tmp_3;
478     int nb_3=param[11].get_nombre();
479     for (int j=0;j<nb_3;j++)
480     liste_tmp_3.insert(liste_tmp_3.end(),atoi(param[11].argument[j].c_str()));
481     std::vector<double> liste_tmp_4;
482     long nb_4=param[12].get_nombre();
483     for (long k=0;k<nb_4;k++)
484     liste_tmp_4.insert(liste_tmp_4.end(),atof(param[12].argument[k].c_str()));
485     std::vector<double> liste_tmp_5;
486     long nb_5=param[13].get_nombre();
487     for (long k=0;k<nb_5;k++)
488     liste_tmp_5.insert(liste_tmp_5.end(),atof(param[13].argument[k].c_str()));
489     ST_B_SPLINE_SURF *bsplines=new ST_B_SPLINE_SURF(id,param[2].argument[0],bs_degre_u,bs_degre_v,liste_tmp_1,liste_tmp_2,liste_tmp_3,liste_tmp_4,liste_tmp_5);
490     ajouter<TPL_MAP_ENTITE<ST_B_SPLINE_SURF*>,ST_B_SPLINE_SURF*>(lst_bsplines,bsplines,*this);
491     ajouter<TPL_MAP_ENTITE<ST_SURFACE*>,ST_SURFACE*>(lst_surface,bsplines,*this);
492     tabentite[B_SPLINE_SURFACE_WITH_KNOTS]++;
493     }
494     else entitenontraite.insert(entitenontraite.end(),entite);
495     }
496     }
497     while (param[0].argument[0]!="ENDSEC");
498     fclose(in);
499     initialiser();
500     return 1;
501     }
502    
503    
504    
505     void ST_GESTIONNAIRE::initialiser(void)
506     {
507     long nb_ligne=lst_line.get_nb();
508     for (long i=0;i<nb_ligne;i++)
509     {
510     ST_LINE* ligne=lst_line.get(i);
511     ligne->initialiser(this);
512     }
513     long nb_cercle=lst_circle.get_nb();
514     for (long i=0;i<nb_cercle;i++)
515     {
516     ST_CIRCLE* cercle=lst_circle.get(i);
517     cercle->initialiser(this);
518     }
519     long nb_ellipse=lst_ellipse.get_nb();
520     for (long i=0;i<nb_ellipse;i++)
521     {
522     ST_ELLIPSE* ellipse=lst_ellipse.get(i);
523     ellipse->initialiser(this);
524     }
525     long nb_plane=lst_plane.get_nb();
526     for (long i=0;i<nb_plane;i++)
527     {
528     ST_PLANE* plane=lst_plane.get(i);
529     plane->initialiser(this);
530     }
531     long nb_cylindrical=lst_cylindrical.get_nb();
532     for (long i=0;i<nb_cylindrical;i++)
533     {
534     ST_CYLINDRICAL* cylindrical=lst_cylindrical.get(i);
535     cylindrical->initialiser(this);
536     }
537     long nb_conical=lst_conical.get_nb();
538     for (long i=0;i<nb_conical;i++)
539     {
540     ST_CONICAL* conical=lst_conical.get(i);
541     conical->initialiser(this);
542     }
543     long nb_spherical=lst_spherical.get_nb();
544     for (long i=0;i<nb_spherical;i++)
545     {
546     ST_SPHERICAL* spherical=lst_spherical.get(i);
547     spherical->initialiser(this);
548     }
549     long nb_toroidal=lst_toroidal.get_nb();
550     for (long i=0;i<nb_toroidal;i++)
551     {
552     ST_TOROIDAL* toroidal=lst_toroidal.get(i);
553     toroidal->initialiser(this);
554     }
555     long nb_bspline=lst_bspline.get_nb();
556     for (long i=0;i<nb_bspline;i++)
557     {
558     ST_B_SPLINE* bspline=lst_bspline.get(i);
559     bspline->initialiser(this);
560     }
561     long nb_bsplines=lst_bsplines.get_nb();
562     for (long i=0;i<nb_bsplines;i++)
563     {
564     ST_B_SPLINE_SURF* bsplines=lst_bsplines.get(i);
565     bsplines->initialiser(this);
566     }
567     }
568