ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/vct_surface.cpp
Revision: 283
Committed: Tue Sep 13 21:11:20 2011 UTC (13 years, 8 months ago) by francois
File size: 8011 byte(s)
Log Message:
structure de l'écriture

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     V1=V1.vecteur_norme();
46     OT_VECTEUR_4DD V2=P3-P1;
47     V2=V2.vecteur_norme();
48     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     V1=V1.vecteur_norme();
57     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     V1=V1.vecteur_norme();
65     lst_vecteurs.insert(lst_vecteurs.end(),V1);
66     }
67    
68     /*double2 ZERO=0.;
69     double2 INF=1e6;
70     OT_VECTEUR_4DD VCT_NUL(0.,0.,0.,0.);
71     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    
81     OT_VECTEUR_4DD V1,V2,V;
82    
83     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     //if (pt==0) lst_points.insert(lst_points.end(),V1);
90    
91     lst_points.insert(lst_points.end(),V1);
92     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     }
105    
106    
107    
108     if(!type||type==1)
109     for(int r=0;r<nb_v;r++)
110     {
111     for(int s=0;s<nb_u-1;s++)
112     {
113    
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    
119    
120    
121     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    
126    
127    
128     V=V2-V1;
129    
130     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    
133     if(V==VCT_NUL) {
134     lst_vecteurs.insert(lst_vecteurs.end(),VCT_NUL);
135     if(!type||type==1)
136     lst_vecteurs_axes.insert(lst_vecteurs_axes.end(),VCT_NUL);
137     }
138    
139     if(norm!=ZERO){
140     V=1./norm*V;
141     lst_vecteurs.insert(lst_vecteurs.end(),V);
142     if(!type||type==1)
143     lst_vecteurs_axes.insert(lst_vecteurs_axes.end(),V);
144     }
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     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    
158    
159    
160     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    
165    
166     V=V2-V1;
167    
168     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    
171     if(V==VCT_NUL) {
172     lst_vecteurs.insert(lst_vecteurs.end(),VCT_NUL);
173     if(!type||type==1)
174     lst_vecteurs_axes.insert(lst_vecteurs_axes.end(),VCT_NUL);
175     }
176    
177     if (norm!=ZERO){
178     V=1./norm*V;
179     lst_vecteurs.insert(lst_vecteurs.end(),V);
180     if(!type||type==1)
181     lst_vecteurs_axes.insert(lst_vecteurs_axes.end(),V);
182    
183     }
184     }
185     }
186    
187     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    
211     OT_VECTEUR_4DD V=lst_vecteurs_axes[1];
212     lst_vecteurs_axes[1]=lst_vecteurs_axes[2];
213     lst_vecteurs_axes[2]=V;
214    
215     }
216    
217     */
218     construire_forme_tensorielle();
219     }
220    
221    
222    
223    
224    
225    
226     VCT_SURFACE::VCT_SURFACE(VCT_SURFACE& mdd):VCT_ELEMENT_GEOMETRIQUE(mdd.elem_geo)
227     {
228    
229     }
230    
231    
232     VCT_SURFACE::~VCT_SURFACE()
233     {
234     }
235    
236