ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/vct_surface.cpp
Revision: 253
Committed: Tue Jul 13 19:40:46 2010 UTC (14 years, 10 months ago) by francois
File size: 7539 byte(s)
Log Message:
changement de hiearchie et utilisation de ccmake + mise a jour

File Contents

# User Rev Content
1 souaissa 66 #include "gestionversion.h"
2    
3     //---------------------------------------------------------------------------
4    
5    
6     #pragma hdrstop
7 souaissa 85 #include<math.h>
8 souaissa 66 #include "vct_surface.h"
9     #include "mg_surface.h"
10 francois 169 #include <iomanip>
11 souaissa 150 #include "vct_outils.h"
12     #include "constantegeo.h"
13 souaissa 66 //---------------------------------------------------------------------------
14    
15     #pragma package(smart_init)
16    
17    
18     VCT_SURFACE::VCT_SURFACE(MG_SURFACE* elemgeo):VCT_ELEMENT_GEOMETRIQUE(elemgeo)
19     {
20 souaissa 69 int indx_premier_ptctr;
21     TPL_LISTE_ENTITE<double> nurbs_params;
22 souaissa 150 TPL_LISTE_ENTITE<double> param_surf;
23 souaissa 66 elem_geo->get_param_NURBS(indx_premier_ptctr,nurbs_params);
24 francois 253 int nb_points=1/4.*(nurbs_params.get_nb()-indx_premier_ptctr);
25 souaissa 69 int nb_u=nurbs_params.get(3);
26     int nb_v=nurbs_params.get(4);
27 francois 222
28     for(int pt=0;pt< nb_points;pt++)
29     {
30     OT_VECTEUR_4DD V1;
31     V1[0]=nurbs_params.get( indx_premier_ptctr+ 4 * pt);
32     V1[1]=nurbs_params.get( indx_premier_ptctr+ 4 * pt + 1);
33     V1[2]=nurbs_params.get( indx_premier_ptctr+ 4 * pt + 2);
34     V1[3]=nurbs_params.get( indx_premier_ptctr+ 4 * pt + 3);
35     lst_points.insert(lst_points.end(),V1);
36     }
37    
38     for (int j=0;j<nb_v-1;j++)
39     for (int i=0;i<nb_u-1;i++)
40     {
41     OT_VECTEUR_4DD P1=lst_points[j*nb_u+i];
42     OT_VECTEUR_4DD P2=lst_points[j*nb_u+i+1];
43     OT_VECTEUR_4DD P3=lst_points[(j+1)*nb_u+i];
44     OT_VECTEUR_4DD V1=P2-P1;
45 francois 253 V1=V1.vecteur_norme();
46 francois 222 OT_VECTEUR_4DD V2=P3-P1;
47 francois 253 V2=V2.vecteur_norme();
48 francois 222 lst_vecteurs.insert(lst_vecteurs.end(),V1);
49     lst_vecteurs.insert(lst_vecteurs.end(),V2);
50     }
51     for (int i=0;i<nb_u-1;i++)
52     {
53     OT_VECTEUR_4DD P1=lst_points[(nb_v-1)*nb_u+i];
54     OT_VECTEUR_4DD P2=lst_points[(nb_v-1)*nb_u+i+1];
55     OT_VECTEUR_4DD V1=P2-P1;
56 francois 253 V1=V1.vecteur_norme();
57 francois 222 lst_vecteurs.insert(lst_vecteurs.end(),V1);
58     }
59     for (int i=0;i<nb_v-1;i++)
60     {
61     OT_VECTEUR_4DD P1=lst_points[i*nb_u+nb_u-1];
62     OT_VECTEUR_4DD P2=lst_points[(i+1)*nb_u+nb_u-1];
63     OT_VECTEUR_4DD V1=P2-P1;
64 francois 253 V1=V1.vecteur_norme();
65 francois 222 lst_vecteurs.insert(lst_vecteurs.end(),V1);
66     }
67    
68     /*double2 ZERO=0.;
69 souaissa 150 double2 INF=1e6;
70 souaissa 69 OT_VECTEUR_4DD VCT_NUL(0.,0.,0.,0.);
71 souaissa 150 int type=0;
72     if(((MG_SURFACE*)elem_geo)->get_type_geometrique(param_surf)==MGCo_PLAN)
73     {
74     type=1;
75     }
76     if(((MG_SURFACE*)elem_geo)->get_type_geometrique(param_surf)==MGCo_CYLINDRE)
77     {
78     type=2;
79     }
80 souaissa 66
81 souaissa 69 OT_VECTEUR_4DD V1,V2,V;
82 souaissa 66
83 souaissa 79 for(int pt=0;pt< nb_points;pt++)
84     {
85     V1[0]=nurbs_params.get( indx_premier_ptctr+ 4 * pt);
86     V1[1]=nurbs_params.get( indx_premier_ptctr+ 4 * pt + 1);
87     V1[2]=nurbs_params.get( indx_premier_ptctr+ 4 * pt + 2);
88     V1[3]=nurbs_params.get( indx_premier_ptctr+ 4 * pt + 3);
89 souaissa 157 //if (pt==0) lst_points.insert(lst_points.end(),V1);
90 souaissa 66
91 souaissa 79 lst_points.insert(lst_points.end(),V1);
92 souaissa 150 if(type==2)
93     {
94     if (pt==0|| pt==3||pt==7|| pt==10)
95     {
96     lst_points_axes.insert(lst_points_axes.end(),V1);
97     }
98     }
99     if(!type||type==1)
100     {
101     lst_points_axes.insert(lst_points_axes.end(),V1);
102    
103     }
104 souaissa 79 }
105    
106    
107    
108 souaissa 150 if(!type||type==1)
109 souaissa 66 for(int r=0;r<nb_v;r++)
110     {
111     for(int s=0;s<nb_u-1;s++)
112     {
113 souaissa 69
114     V1[0]=nurbs_params.get( indx_premier_ptctr+ r *4 * nb_u + 4 * s);
115     V1[1]=nurbs_params.get( indx_premier_ptctr+ r *4 * nb_u + 4 * s + 1);
116     V1[2]=nurbs_params.get( indx_premier_ptctr+ r *4 * nb_u + 4 * s + 2);
117     V1[3]=nurbs_params.get( indx_premier_ptctr+ r *4 * nb_u + 4 * s + 3);
118 souaissa 71
119    
120 souaissa 79
121 souaissa 69 V2[0]=nurbs_params.get( indx_premier_ptctr+ r *4 * nb_u + 4 * (s + 1));
122     V2[1]=nurbs_params.get( indx_premier_ptctr+ r *4 * nb_u + 4 * (s + 1) + 1);
123     V2[2]=nurbs_params.get( indx_premier_ptctr+ r *4 * nb_u + 4 * (s + 1) + 2);
124     V2[3]=nurbs_params.get( indx_premier_ptctr+ r *4 * nb_u + 4 * (s + 1) + 3);
125 souaissa 71
126 souaissa 66
127 souaissa 79
128 souaissa 69 V=V2-V1;
129 souaissa 66
130 souaissa 69 double2 norm_au_carre=(V[0]*V[0])+(V[1]*V[1])+(V[2]*V[2])+(V[3]*V[3]);
131     double2 norm=norm_au_carre^0.5;
132 souaissa 66
133 souaissa 150 if(V==VCT_NUL) {
134 souaissa 69 lst_vecteurs.insert(lst_vecteurs.end(),VCT_NUL);
135 souaissa 150 if(!type||type==1)
136     lst_vecteurs_axes.insert(lst_vecteurs_axes.end(),VCT_NUL);
137     }
138 souaissa 69
139 souaissa 66 if(norm!=ZERO){
140 souaissa 69 V=1./norm*V;
141     lst_vecteurs.insert(lst_vecteurs.end(),V);
142 souaissa 150 if(!type||type==1)
143     lst_vecteurs_axes.insert(lst_vecteurs_axes.end(),V);
144 souaissa 66 }
145    
146     }
147     }
148    
149     for(int r=0;r<nb_v-1;r++)
150     {
151     for(int s=0;s<nb_u;s++)
152     {
153 souaissa 69 V1[0]=nurbs_params.get(indx_premier_ptctr+ r * 4 * nb_u + 4 * s);
154     V1[1]=nurbs_params.get(indx_premier_ptctr+ r * 4 * nb_u + 4 * s + 1);
155     V1[2]=nurbs_params.get(indx_premier_ptctr+ r * 4 * nb_u + 4 * s + 2);
156     V1[3]=nurbs_params.get(indx_premier_ptctr+ r * 4 * nb_u + 4 * s + 3);
157 souaissa 71
158    
159 souaissa 79
160 souaissa 69 V2[0]=nurbs_params.get(indx_premier_ptctr+ (r+1) *4 * nb_u + 4 * s);
161     V2[1]=nurbs_params.get(indx_premier_ptctr+ (r+1) *4 * nb_u + 4 * s + 1);
162     V2[2]=nurbs_params.get(indx_premier_ptctr+ (r+1) *4 * nb_u + 4 * s + 2);
163     V2[3]=nurbs_params.get(indx_premier_ptctr+ (r+1) *4 * nb_u + 4 * s + 3);
164 souaissa 71
165 souaissa 79
166 souaissa 69 V=V2-V1;
167 souaissa 66
168 souaissa 69 double2 norm_au_carre=(V[0]*V[0])+(V[1]*V[1])+(V[2]*V[2])+(V[3]*V[3]);
169     double2 norm=norm_au_carre^0.5;
170 souaissa 66
171 souaissa 150 if(V==VCT_NUL) {
172 souaissa 69 lst_vecteurs.insert(lst_vecteurs.end(),VCT_NUL);
173 souaissa 150 if(!type||type==1)
174     lst_vecteurs_axes.insert(lst_vecteurs_axes.end(),VCT_NUL);
175     }
176 souaissa 66
177 souaissa 69 if (norm!=ZERO){
178     V=1./norm*V;
179     lst_vecteurs.insert(lst_vecteurs.end(),V);
180 souaissa 150 if(!type||type==1)
181     lst_vecteurs_axes.insert(lst_vecteurs_axes.end(),V);
182 souaissa 66
183     }
184     }
185     }
186    
187 souaissa 150 if(type==2)
188     {
189     vector<OT_VECTEUR_4DD> lst_pts;
190     lst_pts.insert(lst_pts.end(),lst_points_axes[0] ) ;
191     lst_pts.insert(lst_pts.end(),lst_points_axes[1] ) ;
192     lst_pts.insert(lst_pts.end(),lst_points_axes[3] ) ;
193     lst_pts.insert(lst_pts.end(),lst_points_axes[2] ) ;
194     for(int r=0;r<lst_pts.size();r++)
195     { OT_VECTEUR_4DD V;
196     if(r<lst_pts.size()-1)
197     V=lst_pts[r+1]-lst_pts[r];
198     if(r==lst_pts.size()-1)
199     V=lst_pts[0]-lst_pts[r];
200     double2 norm_au_carre=(V[0]*V[0])+(V[1]*V[1])+(V[2]*V[2])+(V[3]*V[3]);
201     double2 norm=norm_au_carre^0.5;
202     if(V==VCT_NUL)
203     lst_vecteurs.insert(lst_vecteurs.end(),VCT_NUL);
204     if(norm!=ZERO)
205     {
206     V=1./norm*V;
207     lst_vecteurs_axes.insert(lst_vecteurs_axes.end(),V);
208     }
209     }
210 souaissa 69
211 souaissa 150 OT_VECTEUR_4DD V=lst_vecteurs_axes[1];
212     lst_vecteurs_axes[1]=lst_vecteurs_axes[2];
213     lst_vecteurs_axes[2]=V;
214 souaissa 69
215 souaissa 150 }
216    
217 francois 222 */
218 francois 253 construire_forme_tensorielle();
219 souaissa 66 }
220    
221    
222    
223 souaissa 69
224    
225    
226     VCT_SURFACE::VCT_SURFACE(VCT_SURFACE& mdd):VCT_ELEMENT_GEOMETRIQUE(mdd.elem_geo)
227 souaissa 66 {
228 francois 253
229 souaissa 69 }
230 souaissa 66
231    
232 souaissa 69 VCT_SURFACE::~VCT_SURFACE()
233     {
234     }
235    
236