ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/step/src/stline.cpp
Revision: 57
Committed: Fri Sep 28 20:53:02 2007 UTC (17 years, 7 months ago) by souaissa
Original Path: magic/lib/step/step/src/stline.cpp
File size: 5287 byte(s)
Log Message:
bug dans get_param_nurbs

File Contents

# User Rev Content
1 5 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4     // Jean Christophe Cuillière et Vincent FRANCOIS
5     // Département de Génie Mécanique - UQTR
6     //------------------------------------------------------------
7     // Le projet MAGIC est un projet de recherche du département
8     // de génie mécanique de l'Université du Québec à
9     // Trois Rivières
10     // Les librairies ne peuvent être utilisées sans l'accord
11     // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // stline.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 à 11H24
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23    
24    
25     #include "gestionversion.h"
26    
27     #include "stline.h"
28     #include "stvector.h"
29     #include "stdirection.h"
30     #include "st_point.h"
31     #include "st_gestionnaire.h"
32     #include "ot_mathematique.h"
33     #include "constantegeo.h"
34    
35     #include <math.h>
36    
37    
38    
39    
40    
41     ST_LINE::ST_LINE(long LigneCourante,std::string idori,long point,long vector):ST_COURBE(LigneCourante,idori),id_point(point),id_vector(vector)
42     {
43     }
44    
45     ST_LINE::ST_LINE(double *origine,double *dir):ST_COURBE()
46     {
47     point[0]=origine[0];
48     point[1]=origine[1];
49     point[2]=origine[2];
50     vecteur_directeur[0]=dir[0];
51     vecteur_directeur[1]=dir[1];
52     vecteur_directeur[2]=dir[2];
53     }
54    
55    
56    
57     long ST_LINE::get_id_point(void)
58     {
59     return id_point;
60     }
61    
62     void ST_LINE::initialiser(ST_GESTIONNAIRE *gest)
63     {
64     ST_VECTOR* vecteur=gest->lst_vector.getid(id_vector);
65     ST_POINT* pt=gest->lst_point.getid(id_point);
66     pt->evaluer(point);
67     ST_DIRECTION* dir=gest->lst_direction.getid(vecteur->get_id_direction());
68     double *direct=dir->get_direction();
69     vecteur_directeur[0]=direct[0];
70     vecteur_directeur[1]=direct[1];
71     vecteur_directeur[2]=direct[2];
72     }
73    
74     long ST_LINE::get_id_vector(void)
75     {
76     return id_vector;
77     }
78     void ST_LINE::evaluer(double t,double *xyz)
79     {
80     xyz[0]=point[0]+t*vecteur_directeur[0];
81     xyz[1]=point[1]+t*vecteur_directeur[1];
82     xyz[2]=point[2]+t*vecteur_directeur[2];
83     }
84     void ST_LINE::deriver(double t,double *dxyz)
85     {
86     dxyz[0]=vecteur_directeur[0];
87     dxyz[1]=vecteur_directeur[1];
88     dxyz[2]=vecteur_directeur[2];
89     }
90     void ST_LINE::deriver_seconde(double t,double *ddxyz,double* dxyz ,double* xyz )
91     {
92     ddxyz[0]=0.;
93     ddxyz[1]=0.;
94     ddxyz[2]=0.;
95    
96     if (dxyz!=NULL)
97     {
98     dxyz[0]=vecteur_directeur[0];
99     dxyz[1]=vecteur_directeur[1];
100     dxyz[2]=vecteur_directeur[2];
101     }
102     if (xyz!=NULL)
103     {
104     xyz[0]=point[0]+t*vecteur_directeur[0];
105     xyz[1]=point[1]+t*vecteur_directeur[1];
106     xyz[2]=point[2]+t*vecteur_directeur[2];
107     }
108     }
109    
110    
111     void ST_LINE::inverser(double& t,double *xyz,double precision)
112     {
113     int num;
114     if (!(OPERATEUR::egal(vecteur_directeur[0],0.,0.000001))) num=0;
115     else if (!(OPERATEUR::egal(vecteur_directeur[1],0.,0.000001))) num=1;
116     else num=2;
117     t=xyz[num]-point[num];
118     t=t/vecteur_directeur[num];
119     }
120    
121    
122     double ST_LINE::get_tmin()
123     {
124     return -1e300;
125     }
126     double ST_LINE::get_tmax()
127     {
128     return 1e300;
129     }
130     double ST_LINE::get_longueur(double t1,double t2,double precis)
131     {
132     double norme=vecteur_directeur[0]*vecteur_directeur[0]+vecteur_directeur[1]*vecteur_directeur[1]+vecteur_directeur[2]*vecteur_directeur[2];
133     norme=sqrt(norme);
134     return norme*(t2-t1);
135     }
136     int ST_LINE::est_periodique(void)
137     {
138     return 0;
139     }
140     double ST_LINE::get_periode(void)
141     {
142     return 0.;
143     }
144    
145     int ST_LINE::get_type_geometrique(TPL_LISTE_ENTITE<double> &param)
146     {
147     param.ajouter(point[0]);
148     param.ajouter(point[1]);
149     param.ajouter(point[2]);
150     param.ajouter(vecteur_directeur[0]);
151     param.ajouter(vecteur_directeur[1]);
152     param.ajouter(vecteur_directeur[2]);
153     return MGCo_LINE;
154     }
155    
156    
157     void ST_LINE::est_util(ST_GESTIONNAIRE* gest)
158     {
159     util=true;
160     gest->lst_point.getid(id_point)->est_util(gest);
161     gest->lst_vector.getid(id_vector)->est_util(gest);
162     }
163    
164    
165    
166 francois 19 void ST_LINE::get_param_NURBS(int& indx_premier_ptctr,TPL_LISTE_ENTITE<double> &param)
167 5 {
168     // The first parameter indicate the code access
169     param.ajouter(1);
170     // The follewing two parameters of the list indicate the orders of the net points
171    
172     param.ajouter(2);
173 francois 19 param.ajouter(0);
174 5
175     // The follewing two parameters indicate the number of rows and colons of the control points
176     // respectively to the two parameters directions
177    
178     param.ajouter(2);
179 francois 19 param.ajouter(0);
180 5
181     // this present the knot vector in the u-direction
182    
183     param.ajouter(0);
184     param.ajouter(0);
185     param.ajouter(1);
186 francois 19 param.ajouter(1);
187 5
188 francois 19 double u_inf=10e6;
189     double xyz[3];
190 souaissa 57
191 francois 19 xyz[0]=point[0]+u_inf*vecteur_directeur[0];
192     xyz[1]=point[1]+u_inf*vecteur_directeur[1];
193     xyz[2]=point[2]+u_inf*vecteur_directeur[2];
194 5
195     param.ajouter(xyz[0]);
196     param.ajouter(xyz[1]);
197     param.ajouter(xyz[2]);
198 francois 19 param.ajouter(0);
199 5
200    
201 francois 19 xyz[0]=point[0]-u_inf*vecteur_directeur[0];
202     xyz[1]=point[1]-u_inf*vecteur_directeur[1];
203     xyz[2]=point[2]-u_inf*vecteur_directeur[2];
204    
205 5 param.ajouter(xyz[0]);
206     param.ajouter(xyz[1]);
207     param.ajouter(xyz[2]);
208 francois 19 param.ajouter(0);
209 5
210 francois 19 indx_premier_ptctr=9;
211 5
212     }