MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mg_segment_frontiere.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_segment_frontiere.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:55 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 #include "gestionversion.h"
24 #include "mg_segment_frontiere.h"
25 #include "mg_segment.h"
26 
27 #pragma package(smart_init)
28 
29 #include "ot_decalage_parametre.h"
30 #include <algorithm>
31 
32 
34 
35 
36 MG_SEGMENT_FRONTIERE::MG_SEGMENT_FRONTIERE(MG_SEGMENT* seg,MG_SEGMENT_FRONTIERE* s,MG_SEGMENT_FRONTIERE* p):segment(seg),ele(NULL),id(0),suivant(s),precedent(p)
37 {
38  attribueid();
39 }
40 
42 {
43  attribueid();
44 }
45 
47 {
48 }
49 
50 
52 {
53  if (segment!=NULL) return segment->get_lien_topologie();
54  return ele;
55 }
56 
57 BOITE_2D MG_SEGMENT_FRONTIERE::get_boite_2D(double periodeu,double periodev)
58 {
59  OT_DECALAGE_PARAMETRE decalage(periodeu,periodev);
60  double coouvd1[2];
61  double coouvd2[2];
62 
63  double du=decalage.calcul_decalage_parametre_u(uvpt1[0]);
64  double dv=decalage.calcul_decalage_parametre_v(uvpt1[1]);
65  coouvd1[0]=decalage.decalage_parametre_u(uvpt1[0],du);
66  coouvd1[1]=decalage.decalage_parametre_v(uvpt1[1],dv);
67  coouvd2[0]=decalage.decalage_parametre_u(uvpt2[0],du);
68  coouvd2[1]=decalage.decalage_parametre_v(uvpt2[1],dv);
69  if (etat==1)
70  {
71  double umin,vmin,umax,vmax;
72  umin=std::min(coouvd1[0],coouvd2[0]);
73  umax=std::max(coouvd1[0],coouvd2[0]);
74  vmin=std::min(coouvd1[1],coouvd2[1]);
75  vmax=std::max(coouvd1[1],coouvd2[1]);
76  umin=umin-du;
77  umax=umax-du;
78  vmin=vmin-dv;
79  vmax=vmax-dv;
80  BOITE_2D boite(umin,vmin,umax,vmax);
81  return boite;
82  }
83  else
84  {
85  double uv[2];
86  uv[0]=0.5*(coouvd1[0]+coouvd2[0])-du;
87  uv[1]=0.5*(coouvd1[1]+coouvd2[1])-dv;
88  BOITE_2D boite(uv[0],uv[1],uv[0],uv[1]);
89  return boite;
90  }
91 
92 }
93 
95 {
96  double dist=(uvpt1[0]-uv2[0])*(uvpt1[0]-uv2[0])+(uvpt1[1]-uv2[1])*(uvpt1[1]-uv2[1]);
97  double distref=(uvpt1[0]-uvpt2[0])*(uvpt1[0]-uvpt2[0])+(uvpt1[1]-uvpt2[1])*(uvpt1[1]-uvpt2[1]);
98  if (dist<1e-6*distref) return 1;
99  return 0;
100 }
101 
103 {
104  double dist=(uvpt2[0]-uv2[0])*(uvpt2[0]-uv2[0])+(uvpt2[1]-uv2[1])*(uvpt2[1]-uv2[1]);
105  double distref=(uvpt1[0]-uvpt2[0])*(uvpt1[0]-uvpt2[0])+(uvpt1[1]-uvpt2[1])*(uvpt1[1]-uvpt2[1]);
106  if (dist<1e-6*distref) return 1;
107  return 0;
108 }
109 
111 {
112  etat=2;
113 }
114 
116 {
117  etat=1;
118 }
119 
121 {
122  return precedent;
123 }
124 
126 {
127  return suivant;
128 }
129 
131 {
132  precedent=p;
133 }
134 
136 {
137  suivant=p;
138 }
MG_ELEMENT_TOPOLOGIQUE * get_lien_topologie(void)
MG_ELEMENT_TOPOLOGIQUE * get_lien_topologie(void)
void change_suivant(MG_SEGMENT_FRONTIERE *p)
MG_SEGMENT_FRONTIERE(class MG_SEGMENT *seg, MG_SEGMENT_FRONTIERE *s=NULL, MG_SEGMENT_FRONTIERE *p=NULL)
static void change_etat_initialise(void)
MG_SEGMENT_FRONTIERE * precedent
BOITE_2D get_boite_2D(double pu, double pv)
static void change_etat_normal(void)
MG_SEGMENT_FRONTIERE * suivant
MG_SEGMENT_FRONTIERE * get_suivant(void)
void change_precedent(MG_SEGMENT_FRONTIERE *p)
MG_ELEMENT_TOPOLOGIQUE * ele
MG_SEGMENT_FRONTIERE * get_precedent(void)
double decalage_parametre_v(double par, double dpar)
double calcul_decalage_parametre_v(double par)
double calcul_decalage_parametre_u(double par)
double decalage_parametre_u(double par, double dpar)