44 template<
class Y,
class X>
void libere(Y& y)
46 for (
long i=0;i<y.get_nb();i++)
125 if (
nom!=NULL)
delete []
nom;
131 if (
nom!=NULL)
delete []
nom;
132 int num=strlen(path);
147 return atol(str.c_str()+1);
154 if (str==
".T.")
return 1;
155 if (str==
".F.")
return -1;
166 if (in==NULL)
return 0;
174 std::string ligne=parse.
lire(in,
';',&ierr);
175 if (ierr!=0)
return 0;
176 parse.
decode(ligne.c_str(),
"@;",param);
178 while (param[0].argument[0]!=
"DATA");
183 std::string ligne=parse.
lire(in,
';',&ierr);
184 int nbcar=ligne.length();
185 for (
int i=nbcar-1;i>=0;i--)
186 if (ligne[i]==
' ') ligne.erase(i,1);
187 parse.
decode(ligne.c_str(),
"@;",param);
188 if (param[0].argument[0]!=
"ENDSEC")
190 parse.
decode(ligne.c_str(),
"#@=@(@);",param);
191 std::string entite=param[1].
argument[0];
194 parse.
decode(ligne.c_str(),
"#@=(@);",param);
197 long id=atol(param[0].argument[0].c_str());
198 std::string data=param[2].
argument[0] ;
199 if (entite==
"VERTEX_POINT")
201 parse.
decode(data.c_str(),
"'@',@",param+2);
202 long id_point=
cid(param[3].argument[0].c_str());
207 else if (entite==
"VECTOR")
209 parse.
decode(data.c_str(),
"'@',@,@",param+2);
210 long iddirection=
cid(param[3].argument[0]);
211 double magnitude=atof(param[4].argument[0].c_str());
216 else if (entite==
"LINE")
218 parse.
decode(data.c_str(),
"'@',@,@",param+2);
219 long id_point=
cid(param[3].argument[0].c_str());
220 long id_vector=
cid(param[4].argument[0].c_str());
221 ST_LINE *line=
new ST_LINE(
id,param[2].argument[0],id_point,id_vector);
226 else if (entite==
"EDGE_CURVE")
228 parse.
decode(data.c_str(),
"'@',@,@,@,@",param+2);
229 long idvertex1=
cid(param[3].argument[0]);
230 long idvertex2=
cid(param[4].argument[0]);
231 long idcurve=
cid(param[5].argument[0]);
232 int sens=
cbool(param[6].argument[0]);
237 else if (entite==
"ORIENTED_EDGE")
239 parse.
decode(data.c_str(),
"'@',@,@,@,@",param+2);
240 long id_edge_curve=
cid(param[5].argument[0].c_str());
241 int sens=
cbool(param[6].argument[0]);
246 else if (entite==
"EDGE_LOOP")
248 parse.
decode(data.c_str(),
"'@',(&)",param+2);
249 std::vector<long> liste_tmp;
251 for (
long i=0;i<nb;i++)
252 liste_tmp.insert(liste_tmp.end(),
cid(param[3].argument[i]));
257 else if ((entite==
"FACE_BOUND") || (entite==
"FACE_OUTER_BOUND"))
259 parse.
decode(data.c_str(),
"'@',@,@",param+2);
260 long id_edge_loop=
cid(param[3].argument[0].c_str());
261 int sens=
cbool(param[4].argument[0]);
267 else if (entite==
"ADVANCED_FACE")
269 parse.
decode(data.c_str(),
"'@',(&),@,@",param+2);
270 std::vector<long> liste_tmp;
272 for (
long i=0;i<nb;i++)
273 liste_tmp.insert(liste_tmp.end(),
cid(param[3].argument[i]));
274 long id_surface=
cid(param[4].argument[0].c_str());
275 int sens=
cbool(param[5].argument[0]);
280 else if (entite==
"AXIS2_PLACEMENT_3D")
282 parse.
decode(data.c_str(),
"'@',@,@,@",param+2);
283 long id_point=
cid(param[3].argument[0].c_str());
284 long id_direction1=
cid(param[4].argument[0].c_str());
286 if (param[5].argument[0].c_str()==
"$")
292 id_direction2=
cid(param[5].argument[0].c_str());
298 else if (entite==
"PLANE")
300 parse.
decode(data.c_str(),
"'@',@",param+2);
301 long id_axis2_placement_3d=
cid(param[3].argument[0].c_str());
302 ST_PLANE *plane=
new ST_PLANE(
id,param[2].argument[0],id_axis2_placement_3d);
307 else if (entite==
"CYLINDRICAL_SURFACE")
309 parse.
decode(data.c_str(),
"'@',@,@",param+2);
310 long id_axis2_placement_3d=
cid(param[3].argument[0].c_str());
311 double rayon=atof(param[4].argument[0].c_str());
317 else if (entite==
"TOROIDAL_SURFACE")
319 parse.
decode(data.c_str(),
"'@',@,@,@",param+2);
320 long id_axis2_placement_3d=
cid(param[3].argument[0].c_str());
321 double grandray=atof(param[4].argument[0].c_str());
322 double petitray=atof(param[5].argument[0].c_str());
328 else if (entite==
"CONICAL_SURFACE")
330 parse.
decode(data.c_str(),
"'@',@,@,@",param+2);
331 long id_axis2_placement_3d=
cid(param[3].argument[0].c_str());
332 double rayon=atof(param[4].argument[0].c_str());
333 double angle=atof(param[5].argument[0].c_str());
339 else if (entite==
"SPHERICAL_SURFACE")
341 parse.
decode(data.c_str(),
"'@',@,@",param+2);
342 long id_axis2_placement_3d=
cid(param[3].argument[0].c_str());
343 double rayon=atof(param[4].argument[0].c_str());
349 else if (entite==
"CLOSED_SHELL")
351 parse.
decode(data.c_str(),
"'@',(&)",param+2);
352 std::vector<long> liste_tmp;
354 for (
long i=0;i<nb;i++)
355 liste_tmp.insert(liste_tmp.end(),
cid(param[3].argument[i]));
360 else if (entite==
"ORIENTED_CLOSED_SHELL")
362 parse.
decode(data.c_str(),
"'@',@,@,@",param+2);
363 long id_closed_shell=
cid(param[4].argument[0].c_str());
364 int sens=
cbool(param[5].argument[0]);
369 else if (entite==
"MANIFOLD_SOLID_BREP")
371 parse.
decode(data.c_str(),
"'@',@",param+2);
372 long id_closed_shell=
cid(param[3].argument[0].c_str());
377 else if (entite==
"BREP_WITH_VOIDS")
379 parse.
decode(data.c_str(),
"'@',@,(&)",param+2);
380 long id_closed_shell=
cid(param[3].argument[0].c_str());
381 std::vector<long> liste_tmp;
383 for (
long i=0;i<nb;i++)
384 liste_tmp.insert(liste_tmp.end(),
cid(param[4].argument[i]));
389 else if (entite==
"CIRCLE")
391 parse.
decode(data.c_str(),
"'@',@,@",param+2);
392 long id_axis2_placement_3d=
cid(param[3].argument[0].c_str());
393 double rayon=atof(param[4].argument[0].c_str());
399 else if (entite==
"ELLIPSE")
401 parse.
decode(data.c_str(),
"'@',@,@,@",param+2);
402 long id_axis2_placement_3d=
cid(param[3].argument[0].c_str());
403 double a=atof(param[4].argument[0].c_str());
404 double b=atof(param[5].argument[0].c_str());
410 else if (entite==
"DIRECTION")
412 parse.
decode(data.c_str(),
"'@',(&)",param+2);
416 double x=atof(param[3].argument[0].c_str());
417 double y=atof(param[3].argument[1].c_str());
418 double z=atof(param[3].argument[2].c_str());
423 else if (entite==
"CARTESIAN_POINT")
425 parse.
decode(data.c_str(),
"'@',(&)",param+2);
426 double x=atof(param[3].argument[0].c_str());
427 double y=atof(param[3].argument[1].c_str());
428 double z=atof(param[3].argument[2].c_str());
433 else if (entite==
"B_SPLINE_CURVE_WITH_KNOTS")
435 parse.
decode(data.c_str(),
"'@',@,(&),@,@,@,(&),(&),@",param+2);
436 int bs_degre=atoi(param[3].argument[0].c_str());
437 std::vector<int> liste_tmp_1;
439 for (
int i=0;i<nb_1;i++)
440 liste_tmp_1.insert(liste_tmp_1.end(),
cid(param[4].argument[i]));
441 std::vector<int> liste_tmp_2;
443 for (
int j=0;j<nb_2;j++)
444 liste_tmp_2.insert(liste_tmp_2.end(),atoi(param[8].argument[j].c_str()));
445 std::vector<double> liste_tmp_3;
447 for (
long k=0;k<nb_3;k++)
448 liste_tmp_3.insert(liste_tmp_3.end(),atof(param[9].argument[k].c_str()));
449 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 else if (entite==
"B_SPLINE_SURFACE_WITH_KNOTS")
456 parse.
decode(data.c_str(),
"'@',@,@,(&),@,@,@,@,(&),(&),(&),(&),@",param+2);
457 int bs_degre_u=atoi(param[3].argument[0].c_str());
458 int bs_degre_v=atoi(param[4].argument[0].c_str());
460 std::vector<int> liste_tmp_1;
461 for (
int i=0;i<nb_1;i++)
464 parse.
decode(param[5].argument[i].c_str(),
"(&)", ¶m2);
466 for (
int j=0;j<nb_11;j++)
467 liste_tmp_1.insert(liste_tmp_1.end(),
cid(param2.
argument[j].c_str()));
469 std::vector<int> liste_tmp_2;
471 for (
int j=0;j<nb_2;j++)
472 liste_tmp_2.insert(liste_tmp_2.end(),atoi(param[10].argument[j].c_str()));
473 std::vector<int> liste_tmp_3;
475 for (
int j=0;j<nb_3;j++)
476 liste_tmp_3.insert(liste_tmp_3.end(),atoi(param[11].argument[j].c_str()));
477 std::vector<double> liste_tmp_4;
479 for (
long k=0;k<nb_4;k++)
480 liste_tmp_4.insert(liste_tmp_4.end(),atof(param[12].argument[k].c_str()));
481 std::vector<double> liste_tmp_5;
483 for (
long k=0;k<nb_5;k++)
484 liste_tmp_5.insert(liste_tmp_5.end(),atof(param[13].argument[k].c_str()));
493 while (param[0].argument[0]!=
"ENDSEC");
504 for (
long i=0;i<nb_ligne;i++)
510 for (
long i=0;i<nb_cercle;i++)
516 for (
long i=0;i<nb_ellipse;i++)
522 for (
long i=0;i<nb_plane;i++)
528 for (
long i=0;i<nb_cylindrical;i++)
534 for (
long i=0;i<nb_conical;i++)
540 for (
long i=0;i<nb_spherical;i++)
546 for (
long i=0;i<nb_toroidal;i++)
552 for (
long i=0;i<nb_bspline;i++)
558 for (
long i=0;i<nb_bsplines;i++)