ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/vct_surface.cpp
Revision: 743
Committed: Mon Oct 5 15:00:32 2015 UTC (9 years, 7 months ago) by francois
File size: 8177 byte(s)
Log Message:
Suppression des vecteurs nuls dans la vectorisation ca devient applicable pour une sphere complete

File Contents

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