MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mg_geom_fonction.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 //####// mg_geom_fonction.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:55 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 
24 #include "gestionversion.h"
25 #include "mg_geom_fonction.h"
26 #include "ot_chaine.h"
27 
28 
30 {
31 }
32 
33 MG_GEOM_FONCTION::MG_GEOM_FONCTION(unsigned long id,int dim):MG_IDENTIFICATEUR(id),dimension(dim)
34 {
35 }
36 
37 
39 {
40 }
41 
42 
43 
45 {
46 lit_courbe(chemin);
47 }
48 
49 
50 
52 {
53 }
54 
55 
56 void MG_GEOM_FONCTION::change(char* chemin)
57 {
58 lst_point.clear();
59 lit_courbe(chemin);
60 }
61 
62 void MG_GEOM_FONCTION::lit_courbe(char* chemin)
63 {
64  FILE* in=fopen(chemin,"rt");
65 char mess[1000];
66 fgets(mess,1000,in);
67 sscanf(mess,"%d",&dimension);
68 OT_CHAINE ot;
69 fgets(mess,1000,in);
70 if (!feof(in))
71 do
72  {
73  std::string chaine=mess;
74  std::vector<std::string> lst=ot.split(chaine,' ');
75  int num=lst.size();
76  if (num==dimension)
77  for (int i=0;i<num;i++)
78  {
79  double val;
80  sscanf(lst[i].c_str(),"%lf",&val);
81  lst_point.push_back(val);
82  }
83  fgets(mess,1000,in);
84  }
85 while (!feof(in));
86 
87 fclose(in);
88 
89 
90 }
91 
92 
93 
94 
95 void MG_GEOM_FONCTION::get_point(int num, double* coo)
96 {
97 for (int i=0;i<dimension;i++)
98  coo[i]=lst_point[dimension*num+i];
99 }
100 
101 
103 {
104 for (int i=0;i<dimension;i++)
105  lst_point.push_back(coo[i]);
106 }
107 
108 
109 void MG_GEOM_FONCTION::change_point(int num, double* coo)
110 {
111 for (int i=0;i<dimension;i++)
112  lst_point[dimension*num+i]=coo[i];
113 }
114 
116 {
117  return (lst_point.size()/dimension);
118 }
119 
120 
121 
122 void MG_GEOM_FONCTION::enregistrer(std::ostream& o,double version)
123 {
124 int num=0;
125 if (dimension!=0) num=lst_point.size()/dimension;
126 o << "%" << get_id() << "=GEOM_FONCTION(" << dimension << "," << num << ",";
127 if (num!=0)
128 {
129  o << "(";
130  for (int i=0;i<num;i++)
131  {
132  o << "(";
133  for (int j=0;j<dimension;j++)
134  if (j!=dimension-1) o << lst_point[dimension*i+j] << ","; else o << lst_point[dimension*i+j];
135  o << ")";
136  if (i!=num-1) o << ",";
137  }
138  o << ")";
139 
140 }
141 o << ");" << std::endl;
142 }
143 
virtual void change(char *chemin)
virtual void ajouter_point(double *coo)
virtual void get_point(int num, double *coo)
virtual int get_nb_point(void)
virtual void enregistrer(std::ostream &o, double version)
virtual void change_point(int num, double *coo)
virtual void lit_courbe(char *chemin)
std::vector< double > lst_point
virtual ~MG_GEOM_FONCTION()
unsigned long get_id()
std::vector< std::string > split(std::string chaine, char c)
Definition: ot_chaine.cpp:187