MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
tpl_grille.h
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 //####// tpl_grille.h
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:54:00 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #ifndef _TPLGRILLE_
23 #define _TPLGRILLE_
24 
25 
26 #include "ot_boite_3d.h"
27 #include "tpl_liste_entite.h"
28 #include "tpl_map_entite.h"
29 
31 {
32 public:
34  {
35  static unsigned long idmax=0;
36  id=idmax;
37  idmax++;
38  tag=0;
39  };
40 
41  virtual ~CELLULE_GRILLE_BASE() {};
42  virtual BOITE_3D get_boite(void)=0;
43  virtual unsigned long get_id() {return id;};
44  virtual int get_tag(void)
45  {
46  return tag;
47  };
48  virtual void change_tag(int val)
49  {
50  tag=val;
51  };
52 
53  private :
54  unsigned long id;
55  int tag;
56 };
57 
58 
60 {
61  public:
63  virtual ~GRILLE_BASE() {};
64  virtual int get_nb_cellule(void)=0;
65  virtual CELLULE_GRILLE_BASE* get_cellule(int num)=0;
66 };
67 
68 
69 template <class A>
71 {
72 public:
73  TPL_CELLULE_GRILLE(double xmin,double ymin,double zmin,double xmax,double ymax,double zmax):CELLULE_GRILLE_BASE(),boite(xmin,ymin,zmin,xmax,ymax,zmax)
74  {
75  };
76 virtual ~TPL_CELLULE_GRILLE() {};
77 BOITE_3D get_boite(void) {return boite;};
80 int get_nb_entite(void)
81 {
82 return lst_entite_A.get_nb();
83 };
84 A get_entite(int num)
85 {
86 return lst_entite_A.get(num);
87 };
88 
89 
90 };
91 
92 template <class A,class B>
94 {
95 public:
96  TPL_CELLULE_GRILLE_INFO(double xmin,double ymin,double zmin,double xmax,double ymax,double zmax):CELLULE_GRILLE_BASE(),boite(xmin,ymin,zmin,xmax,ymax,zmax)
97  {
98  };
100 BOITE_3D get_boite(void) {return boite;};
103 B tab[8];
104 int get_nb_entite(void)
105 {
106 return lst_entite_A.get_nb();
107 };
108 A get_entite(int num)
109 {
110 return lst_entite_A.get(num);
111 };
112 
113 B get_info(int num) {return tab[num];};
114 void change_info(int num,B val) {tab[num]=val;};
115 
116 };
117 
118 
119 
120 template <class A>
122 {
123 public:
126 {
127  for (int i=0;i<lst_entite_cellule.get_nb();i++)
128  {
130  delete cellule;
131  }
132 
133 
134 
135 };
136 
137 virtual int get_nb_cellule(void) {return lst_entite_cellule.get_nb();};
138 
139 virtual TPL_CELLULE_GRILLE<A>* get_cellule(int num) {return lst_entite_cellule.get(num); };
140 
141 
142 virtual void initialiser(double xmin,double ymin,double zmin,double xmax,double ymax,double zmax,int nb_pasx,int nb_pasy,int nb_pasz)
143 {
144 nbpasx=nb_pasx;
145 nbpasy=nb_pasy;
146 nbpasz=nb_pasz;
147 pasx=(xmax-xmin)/nb_pasx;
148 pasy=(ymax-ymin)/nb_pasy;
149 pasz=(zmax-zmin)/nb_pasz;
150 boite.reinit(xmin,ymin,zmin,xmax,ymax,zmax);
151 for (int k=0;k<nb_pasz;k++)
152  for (int j=0;j<nb_pasy;j++)
153  for (int i=0;i<nb_pasx;i++)
154  {
155  double x1=xmin+i*pasx;
156  double x2=xmin+(i+1)*pasx;
157  double y1=ymin+j*pasy;
158  double y2=ymin+(j+1)*pasy;
159  double z1=zmin+k*pasz;
160  double z2=zmin+(k+1)*pasz;
161  TPL_CELLULE_GRILLE<A>* cellule=new TPL_CELLULE_GRILLE<A>(x1,y1,z1,x2,y2,z2);
162  lst_entite_cellule.ajouter(cellule);
163  }
164 
165 }
166 
167 virtual TPL_CELLULE_GRILLE<A> *get_cellule(double x,double y, double z)
168 {
169 int nx=(int)((x-boite.get_xmin())/pasx);
170 int ny=(int)((y-boite.get_ymin())/pasy);
171 int nz=(int)((z-boite.get_zmin())/pasz);
172 int num=nx+ny*nbpasx+nz*nbpasy*nbpasx;
173 if ((num<0) || (num>=lst_entite_cellule.get_nb()) ) return NULL;
174 return lst_entite_cellule.get(num);
175 };
176 
177 virtual void get_coord_cellule(TPL_CELLULE_GRILLE<A>* cell,int& nx,int& ny,int& nz)
178 {
179 BOITE_3D boitecell=cell->get_boite();
180 double xyz[3];
181 boitecell.get_centre(xyz);
182 nx=(int)((xyz[0]-boite.get_xmin())/pasx);
183 ny=(int)((xyz[1]-boite.get_ymin())/pasy);
184 nz=(int)((xyz[2]-boite.get_zmin())/pasz);
185 };
186 
187 
188 virtual TPL_CELLULE_GRILLE<A> *get_cellule(int nx,int ny,int nz)
189 {
190 if (nx>=nbpasx) return NULL;
191 if (ny>=nbpasy) return NULL;
192 if (nz>=nbpasz) return NULL;
193 if (nx<0) return NULL;
194 if (ny<0) return NULL;
195 if (nz<0) return NULL;
196 int num=nx+ny*nbpasx+nz*nbpasy*nbpasx;
197 if ((num<0) || (num>=lst_entite_cellule.get_nb()) ) return NULL;
198 return lst_entite_cellule.get(num);
199 };
200 
201 
202 virtual void rechercher(BOITE_3D bt,TPL_MAP_ENTITE<A>& liste_entite_trouve)
203 {
204 int nxmin=(int)((bt.get_xmin()-boite.get_xmin())/pasx);
205 int nymin=(int)((bt.get_ymin()-boite.get_ymin())/pasy);
206 int nzmin=(int)((bt.get_zmin()-boite.get_zmin())/pasz);
207 int nxmax=(int)((bt.get_xmax()-boite.get_xmin())/pasx);
208 int nymax=(int)((bt.get_ymax()-boite.get_ymin())/pasy);
209 int nzmax=(int)((bt.get_zmax()-boite.get_zmin())/pasz);
210 if (nxmin<0) nxmin=0;
211 if (nymin<0) nymin=0;
212 if (nzmin<0) nzmin=0;
213 if (nxmin>nbpasx-1) nxmin=0;
214 if (nymin>nbpasy-1) nymin=0;
215 if (nzmin>nbpasz-1) nzmin=0;
216 if (nxmax<0) nxmax=nbpasx-1;
217 if (nymax<0) nymax=nbpasy-1;
218 if (nzmax<0) nzmax=nbpasz-1;
219 if (nxmax>nbpasx-1) nxmax=nbpasx-1;
220 if (nymax>nbpasy-1) nymax=nbpasy-1;
221 if (nzmax>nbpasz-1) nzmax=nbpasz-1;
222 for (int i=nxmin;i<nxmax+1;i++)
223  for (int j=nymin;j<nymax+1;j++)
224  for (int k=nzmin;k<nzmax+1;k++)
225  {
226  /*int num=i+j*nbpasx+k*nbpasy*nbpasx;
227  if ((num<0) || (num>=lst_entite_cellule.get_nb())) continue;
228  TPL_CELLULE_GRILLE<A>* cellule=lst_entite_cellule.get(num);*/
229  TPL_CELLULE_GRILLE<A>* cellule=get_cellule(i,j,k);
230  if (cellule==NULL) continue;
231  for (int ii=0;ii<cellule->lst_entite_A.get_nb();ii++)
232  if (bt*cellule->lst_entite_A.get(ii)->get_boite_3D())
233  liste_entite_trouve.ajouter(cellule->lst_entite_A.get(ii));
234  }
235 };
236 
237 virtual void rechercher(double xcentre,double ycentre,double zcentre,double rayon_recherche,TPL_MAP_ENTITE<A>& liste_entite_trouve)
238 {
239 BOITE_3D bt(xcentre-rayon_recherche,ycentre-rayon_recherche,zcentre-rayon_recherche,xcentre+rayon_recherche,ycentre+rayon_recherche,zcentre+rayon_recherche);
240 int nxmin=(int)((bt.get_xmin()-boite.get_xmin())/pasx);
241 int nymin=(int)((bt.get_ymin()-boite.get_ymin())/pasy);
242 int nzmin=(int)((bt.get_zmin()-boite.get_zmin())/pasz);
243 int nxmax=(int)((bt.get_xmax()-boite.get_xmin())/pasx);
244 int nymax=(int)((bt.get_ymax()-boite.get_ymin())/pasy);
245 int nzmax=(int)((bt.get_zmax()-boite.get_zmin())/pasz);
246 if (nxmin<0) nxmin=0;
247 if (nymin<0) nymin=0;
248 if (nzmin<0) nzmin=0;
249 if (nxmin>nbpasx-1) nxmin=0;
250 if (nymin>nbpasy-1) nymin=0;
251 if (nzmin>nbpasz-1) nzmin=0;
252 if (nxmax<0) nxmax=nbpasx-1;
253 if (nymax<0) nymax=nbpasy-1;
254 if (nzmax<0) nzmax=nbpasz-1;
255 if (nxmax>nbpasx-1) nxmax=nbpasx-1;
256 if (nymax>nbpasy-1) nymax=nbpasy-1;
257 if (nzmax>nbpasz-1) nzmax=nbpasz-1;
258 for (int i=nxmin;i<nxmax+1;i++)
259  for (int j=nymin;j<nymax+1;j++)
260  for (int k=nzmin;k<nzmax+1;k++)
261  {
262  /*int num=i+j*nbpasx+k*nbpasy*nbpasx;
263  if ((num<0) || (num>=lst_entite_cellule.get_nb())) continue;
264  TPL_CELLULE_GRILLE<A>* cellule=lst_entite_cellule.get(num);*/
265  TPL_CELLULE_GRILLE<A>* cellule=get_cellule(i,j,k);
266  if (cellule==NULL) continue;
267  for (int ii=0;ii<cellule->lst_entite_A.get_nb();ii++)
268  if (bt*cellule->lst_entite_A.get(ii)->get_boite_3D())
269  liste_entite_trouve.ajouter(cellule->lst_entite_A.get(ii));
270  }
271 };
272 
273 
274 virtual void inserer(A a)
275 {
276 BOITE_3D bt=a->get_boite_3D();
277 int nxmin=(int)((bt.get_xmin()-boite.get_xmin())/pasx);
278 int nymin=(int)((bt.get_ymin()-boite.get_ymin())/pasy);
279 int nzmin=(int)((bt.get_zmin()-boite.get_zmin())/pasz);
280 int nxmax=(int)((bt.get_xmax()-boite.get_xmin())/pasx);
281 int nymax=(int)((bt.get_ymax()-boite.get_ymin())/pasy);
282 int nzmax=(int)((bt.get_zmax()-boite.get_zmin())/pasz);
283 if (nxmin<0) nxmin=0;
284 if (nymin<0) nymin=0;
285 if (nzmin<0) nzmin=0;
286 if (nxmin>nbpasx-1) nxmin=0;
287 if (nymin>nbpasy-1) nymin=0;
288 if (nzmin>nbpasz-1) nzmin=0;
289 if (nxmax<0) nxmax=nbpasx-1;
290 if (nymax<0) nymax=nbpasy-1;
291 if (nzmax<0) nzmax=nbpasz-1;
292 if (nxmax>nbpasx-1) nxmax=nbpasx-1;
293 if (nymax>nbpasy-1) nymax=nbpasy-1;
294 if (nzmax>nbpasz-1) nzmax=nbpasz-1;
295 
296 for (int i=nxmin;i<nxmax+1;i++)
297  for (int j=nymin;j<nymax+1;j++)
298  for (int k=nzmin;k<nzmax+1;k++)
299  {
300  //int num=i+j*nbpasx+k*nbpasy*nbpasx;
301  TPL_CELLULE_GRILLE<A>* cellule=get_cellule(i,j,k);
302  if (cellule==NULL) continue;
303  cellule->lst_entite_A.ajouter(a);
304  }
305 }
306 
307 virtual void supprimer(A a)
308 {
309 BOITE_3D bt=a->get_boite_3D();
310 int nxmin=(int)((bt.get_xmin()-boite.get_xmin())/pasx);
311 int nymin=(int)((bt.get_ymin()-boite.get_ymin())/pasy);
312 int nzmin=(int)((bt.get_zmin()-boite.get_zmin())/pasz);
313 int nxmax=(int)((bt.get_xmax()-boite.get_xmin())/pasx);
314 int nymax=(int)((bt.get_ymax()-boite.get_ymin())/pasy);
315 int nzmax=(int)((bt.get_zmax()-boite.get_zmin())/pasz);
316 nxmin=std::max(nxmin,0);
317 nymin=std::max(nymin,0);
318 nzmin=std::max(nzmin,0);
319 nxmax=std::min(nxmax,nbpasx-1);
320 nymax=std::min(nymax,nbpasy-1);
321 nzmax=std::min(nzmax,nbpasz-1);
322 for (int i=nxmin;i<nxmax+1;i++)
323  for (int j=nymin;j<nymax+1;j++)
324  for (int k=nzmin;k<nzmax+1;k++)
325  {
326  //int num=i+j*nbpasx+k*nbpasy*nbpasx;
327  TPL_CELLULE_GRILLE<A>* cellule=get_cellule(i,j,k);
328  if (cellule==NULL) continue;
329  cellule->lst_entite_A.supprimer(a);
330  }
331 }
332 
333 virtual BOITE_3D get_boite(void)
334 {
335 return boite;
336 }
337 
338 virtual int get_pasx(void)
339 {
340 return nbpasx;
341 }
342 
343 virtual int get_pasy(void)
344 {
345 return nbpasy;
346 }
347 
348 virtual int get_pasz(void)
349 {
350 return nbpasz;
351 }
352 
353 
354 private:
356 double pasx;
357 double pasy;
358 double pasz;
359 int nbpasx;
360 int nbpasy;
361 int nbpasz;
363 };
364 
365 
366 
367 template <class A,class B>
369 {
370 public:
373 {
374  for (int i=0;i<lst_entite_cellule.get_nb();i++)
375  {
377  delete cellule;
378  }
379 };
380 
381 virtual int get_nb_cellule(void) {return lst_entite_cellule.get_nb();};
382 
383 
384 
386 
387 
388 virtual void initialiser(double xmin,double ymin,double zmin,double xmax,double ymax,double zmax,int nb_pasx,int nb_pasy,int nb_pasz)
389 {
390 nbpasx=nb_pasx;
391 nbpasy=nb_pasy;
392 nbpasz=nb_pasz;
393 pasx=(xmax-xmin)/nb_pasx;
394 pasy=(ymax-ymin)/nb_pasy;
395 pasz=(zmax-zmin)/nb_pasz;
396 boite.reinit(xmin,ymin,zmin,xmax,ymax,zmax);
397 for (int k=0;k<nb_pasz;k++)
398  for (int j=0;j<nb_pasy;j++)
399  for (int i=0;i<nb_pasx;i++)
400  {
401  double x1=xmin+i*pasx;
402  double x2=xmin+(i+1)*pasx;
403  double y1=ymin+j*pasy;
404  double y2=ymin+(j+1)*pasy;
405  double z1=zmin+k*pasz;
406  double z2=zmin+(k+1)*pasz;
407  TPL_CELLULE_GRILLE_INFO<A,B>* cellule=new TPL_CELLULE_GRILLE_INFO<A,B>(x1,y1,z1,x2,y2,z2);
408  lst_entite_cellule.ajouter(cellule);
409  }
410 
411 }
412 
413 virtual TPL_CELLULE_GRILLE_INFO<A,B> *get_cellule(double x,double y, double z)
414 {
415 int nx=(int)((x-boite.get_xmin())/pasx);
416 int ny=(int)((y-boite.get_ymin())/pasy);
417 int nz=(int)((z-boite.get_zmin())/pasz);
418 int num=nx+ny*nbpasx+nz*nbpasy*nbpasx;
419 if ((num<0) || (num>=lst_entite_cellule.get_nb()) ) return NULL;
420 return lst_entite_cellule.get(num);
421 };
422 
423 virtual void get_coord_cellule(TPL_CELLULE_GRILLE_INFO<A,B>* cell,int& nx,int& ny,int& nz)
424 {
425 BOITE_3D boitecell=cell->get_boite();
426 double xyz[3];
427 boitecell.get_centre(xyz);
428 nx=(int)((xyz[0]-boite.get_xmin())/pasx);
429 ny=(int)((xyz[1]-boite.get_ymin())/pasy);
430 nz=(int)((xyz[2]-boite.get_zmin())/pasz);
431 };
432 
433 
434 virtual TPL_CELLULE_GRILLE_INFO<A,B> *get_cellule(int nx,int ny,int nz)
435 {
436 if (nx>=nbpasx) return NULL;
437 if (ny>=nbpasy) return NULL;
438 if (nz>=nbpasz) return NULL;
439 if (nx<0) return NULL;
440 if (ny<0) return NULL;
441 if (nz<0) return NULL;
442 int num=nx+ny*nbpasx+nz*nbpasy*nbpasx;
443 if ((num<0) || (num>=lst_entite_cellule.get_nb()) ) return NULL;
444 return lst_entite_cellule.get(num);
445 };
446 
447 
448 virtual void rechercher(double xcentre,double ycentre,double zcentre,double rayon_recherche,TPL_MAP_ENTITE<A>& liste_entite_trouve)
449 {
450 BOITE_3D bt(xcentre-rayon_recherche,ycentre-rayon_recherche,zcentre-rayon_recherche,xcentre+rayon_recherche,ycentre+rayon_recherche,zcentre+rayon_recherche);
451 int nxmin=(int)((bt.get_xmin()-boite.get_xmin())/pasx);
452 int nymin=(int)((bt.get_ymin()-boite.get_ymin())/pasy);
453 int nzmin=(int)((bt.get_zmin()-boite.get_zmin())/pasz);
454 int nxmax=(int)((bt.get_xmax()-boite.get_xmin())/pasx);
455 int nymax=(int)((bt.get_ymax()-boite.get_ymin())/pasy);
456 int nzmax=(int)((bt.get_zmax()-boite.get_zmin())/pasz);
457 nxmin=std::max(nxmin,0);
458 nymin=std::max(nymin,0);
459 nzmin=std::max(nzmin,0);
460 nxmax=std::min(nxmax,nbpasx-1);
461 nymax=std::min(nymax,nbpasy-1);
462 nzmax=std::min(nzmax,nbpasz-1);
463 for (int i=nxmin;i<nxmax+1;i++)
464  for (int j=nymin;j<nymax+1;j++)
465  for (int k=nzmin;k<nzmax+1;k++)
466  {
467  //int num=i+j*nbpasx+k*nbpasy*nbpasx;
468  //if ((num<0) || (num>=lst_entite_cellule.get_nb())) continue;
469  //TPL_CELLULE_GRILLE_INFO<A,B>* cellule=lst_entite_cellule.get(num);
471  if (cellule==NULL) continue;
472  for (int ii=0;ii<cellule->lst_entite_A.get_nb();ii++)
473  if (bt*cellule->lst_entite_A.get(ii)->get_boite_3D())
474  liste_entite_trouve.ajouter(cellule->lst_entite_A.get(ii));
475  }
476 
477 };
478 
479 
480 virtual void inserer(A a)
481 {
482 BOITE_3D bt=a->get_boite_3D();
483 int nxmin=(int)((bt.get_xmin()-boite.get_xmin())/pasx);
484 int nymin=(int)((bt.get_ymin()-boite.get_ymin())/pasy);
485 int nzmin=(int)((bt.get_zmin()-boite.get_zmin())/pasz);
486 int nxmax=(int)((bt.get_xmax()-boite.get_xmin())/pasx);
487 int nymax=(int)((bt.get_ymax()-boite.get_ymin())/pasy);
488 int nzmax=(int)((bt.get_zmax()-boite.get_zmin())/pasz);
489 if (nxmin<0) nxmin=0;
490 if (nymin<0) nymin=0;
491 if (nzmin<0) nzmin=0;
492 if (nxmin>nbpasx-1) nxmin=0;
493 if (nymin>nbpasy-1) nymin=0;
494 if (nzmin>nbpasz-1) nzmin=0;
495 if (nxmax<0) nxmax=nbpasx-1;
496 if (nymax<0) nymax=nbpasy-1;
497 if (nzmax<0) nzmax=nbpasz-1;
498 if (nxmax>nbpasx-1) nxmax=nbpasx-1;
499 if (nymax>nbpasy-1) nymax=nbpasy-1;
500 if (nzmax>nbpasz-1) nzmax=nbpasz-1;
501 for (int i=nxmin;i<nxmax+1;i++)
502  for (int j=nymin;j<nymax+1;j++)
503  for (int k=nzmin;k<nzmax+1;k++)
504  {
505  //int num=i+j*nbpasx+k*nbpasy*nbpasx;
507  if (cellule==NULL) continue;
508  cellule->lst_entite_A.ajouter(a);
509  }
510 }
511 
512 virtual void supprimer(A a)
513 {
514 BOITE_3D bt=a->get_boite_3D();
515 int nxmin=(int)((bt.get_xmin()-boite.get_xmin())/pasx);
516 int nymin=(int)((bt.get_ymin()-boite.get_ymin())/pasy);
517 int nzmin=(int)((bt.get_zmin()-boite.get_zmin())/pasz);
518 int nxmax=(int)((bt.get_xmax()-boite.get_xmin())/pasx);
519 int nymax=(int)((bt.get_ymax()-boite.get_ymin())/pasy);
520 int nzmax=(int)((bt.get_zmax()-boite.get_zmin())/pasz);
521 if (nxmin<0) nxmin=0;
522 if (nymin<0) nymin=0;
523 if (nzmin<0) nzmin=0;
524 if (nxmin>nbpasx-1) nxmin=0;
525 if (nymin>nbpasy-1) nymin=0;
526 if (nzmin>nbpasz-1) nzmin=0;
527 if (nxmax<0) nxmax=nbpasx-1;
528 if (nymax<0) nymax=nbpasy-1;
529 if (nzmax<0) nzmax=nbpasz-1;
530 if (nxmax>nbpasx-1) nxmax=nbpasx-1;
531 if (nymax>nbpasy-1) nymax=nbpasy-1;
532 if (nzmax>nbpasz-1) nzmax=nbpasz-1;
533 for (int i=nxmin;i<nxmax+1;i++)
534  for (int j=nymin;j<nymax+1;j++)
535  for (int k=nzmin;k<nzmax+1;k++)
536  {
537  //int num=i+j*nbpasx+k*nbpasy*nbpasx;
539  if (cellule==NULL) continue;
540  cellule->lst_entite_A.supprimer(a);
541  }
542 }
543 
544 virtual BOITE_3D get_boite(void)
545 {
546 return boite;
547 }
548 
549 virtual int get_pasx(void)
550 {
551 return nbpasx;
552 }
553 
554 virtual int get_pasy(void)
555 {
556 return nbpasy;
557 }
558 
559 virtual int get_pasz(void)
560 {
561 return nbpasz;
562 }
563 
564 
565 virtual unsigned long determine_keycode(int nx,int ny,int nz)
566 {
567 std::vector<int> bits;
568 int ok=0,i=0;
569 do
570  {
571  int nnz=nz>>i;
572  int nny=ny>>i;
573  int nnx=nx>>i;
574  int bit1= nnz & 1;
575  int bit2= nny & 1;
576  int bit3= nnx & 1;
577  if ((nnz==0) && (nny==0) && (nnx==0)) ok=1;
578  bits.insert(bits.end(),bit1);
579  bits.insert(bits.end(),bit2);
580  bits.insert(bits.end(),bit3);
581  i++;
582  }
583 while (ok==0);
584 unsigned long keycode=0;
585 for (int i=0;i<bits.size();i++)
586  keycode=keycode+bits[i]*(1<<i);
587 return keycode;
588 }
589 
590 private:
592 double pasx;
593 double pasy;
594 double pasz;
595 int nbpasx;
596 int nbpasy;
597 int nbpasz;
599 };
600 
601 
602 
603 
604 
605 
606 #endif
TPL_CELLULE_GRILLE
Definition: tpl_grille.h:70
TPL_GRILLE_INFO::get_pasy
virtual int get_pasy(void)
Definition: tpl_grille.h:554
TPL_GRILLE_INFO::rechercher
virtual void rechercher(double xcentre, double ycentre, double zcentre, double rayon_recherche, TPL_MAP_ENTITE< A > &liste_entite_trouve)
Definition: tpl_grille.h:448
GRILLE_BASE::~GRILLE_BASE
virtual ~GRILLE_BASE()
Definition: tpl_grille.h:63
TPL_GRILLE_INFO::determine_keycode
virtual unsigned long determine_keycode(int nx, int ny, int nz)
Definition: tpl_grille.h:565
TPL_GRILLE_INFO::get_coord_cellule
virtual void get_coord_cellule(TPL_CELLULE_GRILLE_INFO< A, B > *cell, int &nx, int &ny, int &nz)
Definition: tpl_grille.h:423
TPL_GRILLE::lst_entite_cellule
TPL_LISTE_ENTITE< TPL_CELLULE_GRILLE< A > * > lst_entite_cellule
Definition: tpl_grille.h:355
TPL_GRILLE::pasy
double pasy
Definition: tpl_grille.h:357
TPL_GRILLE_INFO::get_cellule
virtual TPL_CELLULE_GRILLE_INFO< A, B > * get_cellule(int nx, int ny, int nz)
Definition: tpl_grille.h:434
TPL_GRILLE_INFO::get_pasz
virtual int get_pasz(void)
Definition: tpl_grille.h:559
TPL_CELLULE_GRILLE::get_nb_entite
int get_nb_entite(void)
Definition: tpl_grille.h:80
TPL_MAP_ENTITE
Definition: tpl_map_entite.h:35
BOITE_3D::get_xmin
double get_xmin(void)
Definition: ot_boite_3d.cpp:104
TPL_CELLULE_GRILLE_INFO::TPL_CELLULE_GRILLE_INFO
TPL_CELLULE_GRILLE_INFO(double xmin, double ymin, double zmin, double xmax, double ymax, double zmax)
Definition: tpl_grille.h:96
CELLULE_GRILLE_BASE::get_id
virtual unsigned long get_id()
Definition: tpl_grille.h:43
TPL_GRILLE::inserer
virtual void inserer(A a)
Definition: tpl_grille.h:274
BOITE_3D::get_centre
void get_centre(double *coo)
Definition: ot_boite_3d.cpp:149
TPL_CELLULE_GRILLE::TPL_CELLULE_GRILLE
TPL_CELLULE_GRILLE(double xmin, double ymin, double zmin, double xmax, double ymax, double zmax)
Definition: tpl_grille.h:73
a
#define a(i, j)
TPL_GRILLE::~TPL_GRILLE
~TPL_GRILLE()
Definition: tpl_grille.h:125
TPL_CELLULE_GRILLE_INFO::lst_entite_A
TPL_LISTE_ENTITE< A > lst_entite_A
Definition: tpl_grille.h:102
TPL_GRILLE::get_cellule
virtual TPL_CELLULE_GRILLE< A > * get_cellule(int num)
Definition: tpl_grille.h:139
TPL_GRILLE::nbpasz
int nbpasz
Definition: tpl_grille.h:361
TPL_GRILLE::get_cellule
virtual TPL_CELLULE_GRILLE< A > * get_cellule(double x, double y, double z)
Definition: tpl_grille.h:167
TPL_GRILLE
Definition: tpl_grille.h:121
GRILLE_BASE::get_nb_cellule
virtual int get_nb_cellule(void)=0
TPL_GRILLE::pasx
double pasx
Definition: tpl_grille.h:356
TPL_CELLULE_GRILLE::get_boite
BOITE_3D get_boite(void)
Definition: tpl_grille.h:77
TPL_GRILLE_INFO::TPL_GRILLE_INFO
TPL_GRILLE_INFO()
Definition: tpl_grille.h:371
TPL_GRILLE::supprimer
virtual void supprimer(A a)
Definition: tpl_grille.h:307
TPL_CELLULE_GRILLE::get_entite
A get_entite(int num)
Definition: tpl_grille.h:84
TPL_CELLULE_GRILLE_INFO::get_boite
BOITE_3D get_boite(void)
Definition: tpl_grille.h:100
BOITE_3D::get_zmax
double get_zmax(void)
Definition: ot_boite_3d.cpp:129
BOITE_3D::get_ymin
double get_ymin(void)
Definition: ot_boite_3d.cpp:114
TPL_GRILLE::get_nb_cellule
virtual int get_nb_cellule(void)
Definition: tpl_grille.h:137
TPL_GRILLE_INFO::get_pasx
virtual int get_pasx(void)
Definition: tpl_grille.h:549
TPL_GRILLE_INFO::nbpasy
int nbpasy
Definition: tpl_grille.h:596
TPL_GRILLE_INFO::get_cellule
virtual TPL_CELLULE_GRILLE_INFO< A, B > * get_cellule(double x, double y, double z)
Definition: tpl_grille.h:413
GRILLE_BASE
Definition: tpl_grille.h:59
BOITE_3D::get_xmax
double get_xmax(void)
Definition: ot_boite_3d.cpp:109
TPL_CELLULE_GRILLE_INFO::change_info
void change_info(int num, B val)
Definition: tpl_grille.h:114
TPL_CELLULE_GRILLE::boite
BOITE_3D boite
Definition: tpl_grille.h:77
TPL_GRILLE_INFO::boite
BOITE_3D boite
Definition: tpl_grille.h:598
TPL_GRILLE::rechercher
virtual void rechercher(BOITE_3D bt, TPL_MAP_ENTITE< A > &liste_entite_trouve)
Definition: tpl_grille.h:202
CELLULE_GRILLE_BASE::CELLULE_GRILLE_BASE
CELLULE_GRILLE_BASE()
Definition: tpl_grille.h:33
TPL_CELLULE_GRILLE_INFO::get_entite
A get_entite(int num)
Definition: tpl_grille.h:108
TPL_CELLULE_GRILLE_INFO::get_nb_entite
int get_nb_entite(void)
Definition: tpl_grille.h:104
TPL_LISTE_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_liste_entite.h:38
TPL_GRILLE::boite
BOITE_3D boite
Definition: tpl_grille.h:362
tpl_map_entite.h
TPL_GRILLE_INFO::supprimer
virtual void supprimer(A a)
Definition: tpl_grille.h:512
CELLULE_GRILLE_BASE::get_tag
virtual int get_tag(void)
Definition: tpl_grille.h:44
TPL_GRILLE::nbpasy
int nbpasy
Definition: tpl_grille.h:360
TPL_LISTE_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_liste_entite.h:67
BOITE_3D::reinit
void reinit(double xmin, double ymin, double zmin, double xmax, double ymax, double zmax)
Definition: ot_boite_3d.cpp:55
CELLULE_GRILLE_BASE::tag
int tag
Definition: tpl_grille.h:55
TPL_GRILLE::get_cellule
virtual TPL_CELLULE_GRILLE< A > * get_cellule(int nx, int ny, int nz)
Definition: tpl_grille.h:188
CELLULE_GRILLE_BASE::~CELLULE_GRILLE_BASE
virtual ~CELLULE_GRILLE_BASE()
Definition: tpl_grille.h:41
TPL_LISTE_ENTITE::get
virtual X get(int num)
Definition: tpl_liste_entite.h:72
BOITE_3D::get_ymax
double get_ymax(void)
Definition: ot_boite_3d.cpp:119
TPL_GRILLE_INFO::inserer
virtual void inserer(A a)
Definition: tpl_grille.h:480
TPL_GRILLE::TPL_GRILLE
TPL_GRILLE()
Definition: tpl_grille.h:124
TPL_CELLULE_GRILLE_INFO::tab
B tab[8]
Definition: tpl_grille.h:103
CELLULE_GRILLE_BASE::id
unsigned long id
Definition: tpl_grille.h:51
TPL_CELLULE_GRILLE::lst_entite_A
TPL_LISTE_ENTITE< A > lst_entite_A
Definition: tpl_grille.h:79
TPL_MAP_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_map_entite.h:55
TPL_GRILLE_INFO::get_cellule
virtual TPL_CELLULE_GRILLE_INFO< A, B > * get_cellule(int num)
Definition: tpl_grille.h:385
TPL_CELLULE_GRILLE_INFO::get_info
B get_info(int num)
Definition: tpl_grille.h:113
BOITE_3D
Definition: ot_boite_3d.h:27
CELLULE_GRILLE_BASE
Definition: tpl_grille.h:30
TPL_GRILLE::get_pasy
virtual int get_pasy(void)
Definition: tpl_grille.h:343
TPL_GRILLE_INFO::nbpasx
int nbpasx
Definition: tpl_grille.h:595
TPL_CELLULE_GRILLE::~TPL_CELLULE_GRILLE
virtual ~TPL_CELLULE_GRILLE()
Definition: tpl_grille.h:76
TPL_CELLULE_GRILLE_INFO::boite
BOITE_3D boite
Definition: tpl_grille.h:100
TPL_GRILLE_INFO::get_boite
virtual BOITE_3D get_boite(void)
Definition: tpl_grille.h:544
ot_boite_3d.h
GRILLE_BASE::GRILLE_BASE
GRILLE_BASE()
Definition: tpl_grille.h:62
TPL_GRILLE_INFO::~TPL_GRILLE_INFO
~TPL_GRILLE_INFO()
Definition: tpl_grille.h:372
TPL_GRILLE_INFO
Definition: tpl_grille.h:368
TPL_GRILLE::get_boite
virtual BOITE_3D get_boite(void)
Definition: tpl_grille.h:333
TPL_GRILLE::get_coord_cellule
virtual void get_coord_cellule(TPL_CELLULE_GRILLE< A > *cell, int &nx, int &ny, int &nz)
Definition: tpl_grille.h:177
TPL_GRILLE_INFO::pasy
double pasy
Definition: tpl_grille.h:593
TPL_CELLULE_GRILLE_INFO
Definition: tpl_grille.h:93
CELLULE_GRILLE_BASE::change_tag
virtual void change_tag(int val)
Definition: tpl_grille.h:48
BOITE_3D::get_zmin
double get_zmin(void)
Definition: ot_boite_3d.cpp:124
TPL_CELLULE_GRILLE_INFO::~TPL_CELLULE_GRILLE_INFO
virtual ~TPL_CELLULE_GRILLE_INFO()
Definition: tpl_grille.h:99
TPL_GRILLE::get_pasz
virtual int get_pasz(void)
Definition: tpl_grille.h:348
TPL_GRILLE_INFO::initialiser
virtual void initialiser(double xmin, double ymin, double zmin, double xmax, double ymax, double zmax, int nb_pasx, int nb_pasy, int nb_pasz)
Definition: tpl_grille.h:388
TPL_LISTE_ENTITE< A >
TPL_GRILLE::rechercher
virtual void rechercher(double xcentre, double ycentre, double zcentre, double rayon_recherche, TPL_MAP_ENTITE< A > &liste_entite_trouve)
Definition: tpl_grille.h:237
TPL_GRILLE_INFO::lst_entite_cellule
TPL_LISTE_ENTITE< TPL_CELLULE_GRILLE_INFO< A, B > * > lst_entite_cellule
Definition: tpl_grille.h:591
TPL_GRILLE::get_pasx
virtual int get_pasx(void)
Definition: tpl_grille.h:338
TPL_GRILLE_INFO::pasz
double pasz
Definition: tpl_grille.h:594
GRILLE_BASE::get_cellule
virtual CELLULE_GRILLE_BASE * get_cellule(int num)=0
TPL_LISTE_ENTITE::supprimer
virtual void supprimer(X x)
Definition: tpl_liste_entite.h:42
TPL_GRILLE_INFO::nbpasz
int nbpasz
Definition: tpl_grille.h:597
TPL_GRILLE::initialiser
virtual void initialiser(double xmin, double ymin, double zmin, double xmax, double ymax, double zmax, int nb_pasx, int nb_pasy, int nb_pasz)
Definition: tpl_grille.h:142
tpl_liste_entite.h
CELLULE_GRILLE_BASE::get_boite
virtual BOITE_3D get_boite(void)=0
TPL_GRILLE_INFO::get_nb_cellule
virtual int get_nb_cellule(void)
Definition: tpl_grille.h:381
TPL_GRILLE_INFO::pasx
double pasx
Definition: tpl_grille.h:592
TPL_GRILLE::nbpasx
int nbpasx
Definition: tpl_grille.h:359
TPL_GRILLE::pasz
double pasz
Definition: tpl_grille.h:358