1 |
|
3 |
//---------------------------------------------------------------------------
|
2 |
|
|
#include <vcl\vcl.h>
|
3 |
|
|
#include <vcl\printers.hpp>
|
4 |
|
|
#include <math.h>
|
5 |
|
|
#include <string.h>
|
6 |
|
|
#include <stdlib.h>
|
7 |
|
|
#pragma hdrstop
|
8 |
|
|
|
9 |
|
|
#include "fenetre.h"
|
10 |
|
|
#include "s_valeur.h"
|
11 |
|
|
//---------------------------------------------------------------------------
|
12 |
|
|
|
13 |
|
|
extern void trirea(float *a,int *la,int *ir);
|
14 |
|
|
|
15 |
|
|
|
16 |
|
|
void __fastcall TFenp::imprime(void)
|
17 |
|
|
{
|
18 |
|
|
int i,xc,yc;
|
19 |
|
|
float zoomx,zoomy;
|
20 |
|
|
int xcmax,ycmin,ycmax,xcmin;
|
21 |
|
|
int Height,Height2,Width;
|
22 |
|
|
char mess[500];
|
23 |
|
|
float zoomtmp,xcentretmp,ycentretmp;
|
24 |
|
|
|
25 |
|
|
Width=(int)(Printer()->PageWidth*rapport);
|
26 |
|
|
Height=(int)(Printer()->PageHeight*rapport*0.95);
|
27 |
|
|
Height2=(int)(Printer()->PageHeight*rapport);
|
28 |
|
|
/* normalisation sur la page */
|
29 |
|
|
for (i=0;i<nb_point;i++)
|
30 |
|
|
{
|
31 |
|
|
projection(point[i].x,point[i].y,point[i].z,&xc,&yc,0);
|
32 |
|
|
if (i==0)
|
33 |
|
|
{
|
34 |
|
|
xcmax=xc;
|
35 |
|
|
xcmin=xc;
|
36 |
|
|
ycmax=yc;
|
37 |
|
|
ycmin=yc;
|
38 |
|
|
}
|
39 |
|
|
if (xc>xcmax) xcmax=xc;
|
40 |
|
|
if (yc>ycmax) ycmax=yc;
|
41 |
|
|
if (xc<xcmin) xcmin=xc;
|
42 |
|
|
if (yc<ycmin) ycmin=yc;
|
43 |
|
|
}
|
44 |
|
|
xcmax++;xcmin--;
|
45 |
|
|
ycmax++;ycmin--;
|
46 |
|
|
if (xcmax!=xcmin) zoomx=Width*1./(xcmax-xcmin); else zoomx=1E30;
|
47 |
|
|
if (ycmax!=ycmin) zoomy=Height*1./(ycmax-ycmin); else zoomy=1E30;
|
48 |
|
|
if (zoomx>zoomy) zoom_p=zoomy; else zoom_p=zoomx;
|
49 |
|
|
zoom_p=zoom_p/1.15;
|
50 |
|
|
xcentre_p=(Width/2.-zoom_p*(xcmin+xcmax)/2.);
|
51 |
|
|
ycentre_p=(Height/2.-zoom_p*(ycmin+ycmax)/2.);
|
52 |
|
|
zoomtmp=zoom;
|
53 |
|
|
xcentretmp=xcentre;
|
54 |
|
|
ycentretmp=ycentre;
|
55 |
|
|
norme();
|
56 |
|
|
zoom_p=zoom_p*zoomtmp/zoom;
|
57 |
|
|
zoom=zoomtmp;
|
58 |
|
|
xcentre_p=xcentre_p+(xcentretmp-xcentre)/Fenp->Width*Width;
|
59 |
|
|
ycentre_p=ycentre_p+(ycentretmp-ycentre)/Fenp->Height*Height;
|
60 |
|
|
xcentre=xcentretmp;
|
61 |
|
|
ycentre=ycentretmp;
|
62 |
|
|
|
63 |
|
|
|
64 |
|
|
if (Geometrie1->Checked==true) strcpy(mess,"Geometrie de ");
|
65 |
|
|
if (Maillage1D1->Checked==true) strcpy(mess,"Maillage 1D de ");
|
66 |
|
|
if (Maillage2D1->Checked==true) strcpy(mess,"Maillage 2D de ");
|
67 |
|
|
if (Maillage3D1->Checked==true) strcpy(mess,"Maillage 3D de ");
|
68 |
|
|
if (Remaillage2D1->Checked==true) strcpy(mess,"Remaillage 2D de ");
|
69 |
|
|
if (Remaillage3D1->Checked==true) strcpy(mess,"Remaillage 3D de ");
|
70 |
|
|
strcat(mess,Fenp->Fichier);
|
71 |
|
|
strcpy(info,"Entrez la légende du dessin ?");
|
72 |
|
|
Valeur->Edit1->Text=mess;
|
73 |
|
|
Valeur->ShowModal();
|
74 |
|
|
strcpy(mess,Valeur->Edit1->Text.c_str());
|
75 |
|
|
|
76 |
|
|
|
77 |
|
|
|
78 |
|
|
|
79 |
|
|
|
80 |
|
|
|
81 |
|
|
|
82 |
|
|
/* debut d 'impression */
|
83 |
|
|
Printer()->Title=Fenp->Fichier;
|
84 |
|
|
Printer()->BeginDoc();
|
85 |
|
|
Printer()->Canvas->Pen->Color=clBlack;
|
86 |
|
|
Printer()->Canvas->MoveTo(1,1);
|
87 |
|
|
Printer()->Canvas->LineTo(1,Height2-2);
|
88 |
|
|
Printer()->Canvas->LineTo(Width-2,Height2-2);
|
89 |
|
|
Printer()->Canvas->LineTo(Width-2,1);
|
90 |
|
|
Printer()->Canvas->LineTo(1,1);
|
91 |
|
|
Printer()->Canvas->MoveTo(1,(int)(Height));
|
92 |
|
|
Printer()->Canvas->LineTo(Width-2,(int)(Height));
|
93 |
|
|
|
94 |
|
|
if (Geometrie1->Checked==true) print_geo();
|
95 |
|
|
if (Maillage1D1->Checked==true) print_1D();
|
96 |
|
|
if (Maillage2D1->Checked==true) print_2D();
|
97 |
|
|
if (Maillage3D1->Checked==true) print_3D();
|
98 |
|
|
if (Remaillage2D1->Checked==true) print_2D();
|
99 |
|
|
if (Remaillage3D1->Checked==true) print_3D();
|
100 |
|
|
if (Front3D1->Checked==true) print_2D();
|
101 |
|
|
print_axe();
|
102 |
|
|
Printer()->Canvas->Font->Color=clBlack;
|
103 |
|
|
Printer()->Canvas->Font->Size=(int)(16*rapport);
|
104 |
|
|
Printer()->Canvas->Brush->Color=clWhite;
|
105 |
|
|
Printer()->Canvas->Pen->Color=clBlack;
|
106 |
|
|
Printer()->Canvas->Rectangle(1,(int)(Height),Width-2,Height2-2);
|
107 |
|
|
Printer()->Canvas->TextOut((int)(0.05*Width),(int)(Height+0.3*(Height2-Height)),mess);
|
108 |
|
|
Printer()->EndDoc();
|
109 |
|
|
}
|
110 |
|
|
|
111 |
|
|
|
112 |
|
|
|
113 |
|
|
void __fastcall TFenp::print_geo(void)
|
114 |
|
|
{
|
115 |
|
|
int i,n1,n2;
|
116 |
|
|
float x1,x2,y1,y2,z1,z2;
|
117 |
|
|
int xc1,xc2,yc1,yc2;
|
118 |
|
|
|
119 |
|
|
Printer()->Canvas->Pen->Color=clBlack;
|
120 |
|
|
for (i=0;i<nb_segment;i++)
|
121 |
|
|
{
|
122 |
|
|
n1=segment[i].n1;
|
123 |
|
|
n2=segment[i].n2;
|
124 |
|
|
x1=point[n1].x;
|
125 |
|
|
y1=point[n1].y;
|
126 |
|
|
z1=point[n1].z;
|
127 |
|
|
x2=point[n2].x;
|
128 |
|
|
y2=point[n2].y;
|
129 |
|
|
z2=point[n2].z;
|
130 |
|
|
projection(x1,y1,z1,&xc1,&yc1,2);
|
131 |
|
|
projection(x2,y2,z2,&xc2,&yc2,2);
|
132 |
|
|
Printer()->Canvas->MoveTo(xc1,yc1);
|
133 |
|
|
Printer()->Canvas->LineTo(xc2,yc2);
|
134 |
|
|
}
|
135 |
|
|
}
|
136 |
|
|
|
137 |
|
|
|
138 |
|
|
void __fastcall TFenp::print_1D(void)
|
139 |
|
|
{
|
140 |
|
|
int i,n1,n2;
|
141 |
|
|
float x1,x2,y1,y2,z1,z2;
|
142 |
|
|
int xc1,xc2,yc1,yc2;
|
143 |
|
|
char mess[20];
|
144 |
|
|
|
145 |
|
|
Printer()->Canvas->Pen->Color=clRed;
|
146 |
|
|
Printer()->Canvas->Font->Color=clFuchsia;
|
147 |
|
|
for (i=0;i<nb_point;i++)
|
148 |
|
|
{
|
149 |
|
|
x1=point[i].x;
|
150 |
|
|
y1=point[i].y;
|
151 |
|
|
z1=point[i].z;
|
152 |
|
|
projection(x1,y1,z1,&xc1,&yc1,2);
|
153 |
|
|
Printer()->Canvas->MoveTo(xc1-2,yc1);
|
154 |
|
|
Printer()->Canvas->LineTo(xc1+2,yc1);
|
155 |
|
|
Printer()->Canvas->MoveTo(xc1,yc1-2);
|
156 |
|
|
Printer()->Canvas->LineTo(xc1,yc1+2);
|
157 |
|
|
if (Noeud1->Checked==true)
|
158 |
|
|
{
|
159 |
|
|
sprintf(mess,"%d",i);
|
160 |
|
|
Printer()->Canvas->TextOut(xc1+2,yc1+2,mess);
|
161 |
|
|
}
|
162 |
|
|
}
|
163 |
|
|
Printer()->Canvas->Font->Color=clYellow;
|
164 |
|
|
for (i=0;i<nb_segment;i++)
|
165 |
|
|
{
|
166 |
|
|
if ((segment[i].select==0)&& (Fenp->Debug1->Checked)) continue;
|
167 |
|
|
n1=segment[i].n1;
|
168 |
|
|
n2=segment[i].n2;
|
169 |
|
|
x1=point[n1].x;
|
170 |
|
|
y1=point[n1].y;
|
171 |
|
|
z1=point[n1].z;
|
172 |
|
|
x2=point[n2].x;
|
173 |
|
|
y2=point[n2].y;
|
174 |
|
|
z2=point[n2].z;
|
175 |
|
|
projection(x1,y1,z1,&xc1,&yc1,2);
|
176 |
|
|
projection(x2,y2,z2,&xc2,&yc2,2);
|
177 |
|
|
Printer()->Canvas->MoveTo(xc1,yc1);
|
178 |
|
|
Printer()->Canvas->LineTo(xc2,yc2);
|
179 |
|
|
if (Maille2->Checked==true)
|
180 |
|
|
{
|
181 |
|
|
sprintf(mess,"%d",i);
|
182 |
|
|
Printer()->Canvas->TextOut((int)((xc1+xc2)*0.5),(int)((yc1+yc2)*0.5),mess);
|
183 |
|
|
}
|
184 |
|
|
}
|
185 |
|
|
if (numero_noeud>=0)
|
186 |
|
|
{
|
187 |
|
|
Printer()->Canvas->Font->Color=clBlack;
|
188 |
|
|
x1=point[numero_noeud].x;
|
189 |
|
|
y1=point[numero_noeud].y;
|
190 |
|
|
z1=point[numero_noeud].z;
|
191 |
|
|
projection(x1,y1,z1,&xc1,&yc1,2);
|
192 |
|
|
sprintf(mess,"%d",numero_noeud);
|
193 |
|
|
Printer()->Canvas->TextOut(xc1+2,yc1+2,mess);
|
194 |
|
|
}
|
195 |
|
|
if (numero_maille>=0)
|
196 |
|
|
{
|
197 |
|
|
Printer()->Canvas->Font->Color=clBlack;
|
198 |
|
|
n1=segment[numero_maille].n1;
|
199 |
|
|
n2=segment[numero_maille].n2;
|
200 |
|
|
x1=point[n1].x;
|
201 |
|
|
y1=point[n1].y;
|
202 |
|
|
z1=point[n1].z;
|
203 |
|
|
x2=point[n2].x;
|
204 |
|
|
y2=point[n2].y;
|
205 |
|
|
z2=point[n2].z;
|
206 |
|
|
projection(x1,y1,z1,&xc1,&yc1,2);
|
207 |
|
|
projection(x2,y2,z2,&xc2,&yc2,2);
|
208 |
|
|
sprintf(mess,"%d",numero_maille);
|
209 |
|
|
Printer()->Canvas->TextOut((int)((xc1+xc2)*0.5),(int)((yc1+yc2)*0.5),mess);
|
210 |
|
|
}
|
211 |
|
|
}
|
212 |
|
|
//---------------------------------------------------------------------------
|
213 |
|
|
void __fastcall TFenp::print_2D(void)
|
214 |
|
|
{
|
215 |
|
|
int i,n1,n2,n3;
|
216 |
|
|
float x1,x2,y1,y2,z1,z2,x3,y3,z3;
|
217 |
|
|
float ab[3],ac[3],g[3],crit;
|
218 |
|
|
int xc1,xc2,yc1,yc2,xc3,yc3;
|
219 |
|
|
TRect r;
|
220 |
|
|
char mess[20];
|
221 |
|
|
|
222 |
|
|
if (fc==1)
|
223 |
|
|
{
|
224 |
|
|
print_reel();
|
225 |
|
|
return;
|
226 |
|
|
}
|
227 |
|
|
Printer()->Canvas->Pen->Color=clRed;
|
228 |
|
|
if (Eclatee1->Checked==true) Printer()->Canvas->Pen->Color=clOlive;
|
229 |
|
|
for (i=0;i<nb_triangle;i++)
|
230 |
|
|
{
|
231 |
|
|
if ((triangle[i].num_ent==numface) || (numface==(-1)))
|
232 |
|
|
{
|
233 |
|
|
if ((triangle[i].select==0) && (Fenp->Debug1->Checked)) continue;
|
234 |
|
|
n1=triangle[i].n1;
|
235 |
|
|
n2=triangle[i].n2;
|
236 |
|
|
n3=triangle[i].n3;
|
237 |
|
|
x1=point[n1].x;
|
238 |
|
|
y1=point[n1].y;
|
239 |
|
|
z1=point[n1].z;
|
240 |
|
|
x2=point[n2].x;
|
241 |
|
|
y2=point[n2].y;
|
242 |
|
|
z2=point[n2].z;
|
243 |
|
|
x3=point[n3].x;
|
244 |
|
|
y3=point[n3].y;
|
245 |
|
|
z3=point[n3].z;
|
246 |
|
|
if (Normal1->Checked==false)
|
247 |
|
|
{
|
248 |
|
|
if (Qualite1->Checked==true)
|
249 |
|
|
{
|
250 |
|
|
crit=crit_cal2d(n1,n2,n3);
|
251 |
|
|
if (crit>0.5) Printer()->Canvas->Pen->Color=clLime;
|
252 |
|
|
else if (crit>0.2) Printer()->Canvas->Pen->Color=clBlue;
|
253 |
|
|
else if (crit>0.1) Printer()->Canvas->Pen->Color=clRed;
|
254 |
|
|
else Printer()->Canvas->Pen->Color=clMaroon;
|
255 |
|
|
}
|
256 |
|
|
ab[0]=x2-x1;ab[1]=y2-y1;ab[2]=z2-z1;
|
257 |
|
|
ac[0]=x3-x1;ac[1]=y3-y1;ac[2]=z3-z1;
|
258 |
|
|
g[0]=x1+0.33333*(ab[0]+ac[0]);
|
259 |
|
|
g[1]=y1+0.33333*(ab[1]+ac[1]);
|
260 |
|
|
g[2]=z1+0.33333*(ab[2]+ac[2]);
|
261 |
|
|
x1=g[0]+0.8*(x1-g[0]);y1=g[1]+0.8*(y1-g[1]);z1=g[2]+0.8*(z1-g[2]);
|
262 |
|
|
x2=g[0]+0.8*(x2-g[0]);y2=g[1]+0.8*(y2-g[1]);z2=g[2]+0.8*(z2-g[2]);
|
263 |
|
|
x3=g[0]+0.8*(x3-g[0]);y3=g[1]+0.8*(y3-g[1]);z3=g[2]+0.8*(z3-g[2]);
|
264 |
|
|
}
|
265 |
|
|
projection(x1,y1,z1,&xc1,&yc1,2);
|
266 |
|
|
projection(x2,y2,z2,&xc2,&yc2,2);
|
267 |
|
|
projection(x3,y3,z3,&xc3,&yc3,2);
|
268 |
|
|
Printer()->Canvas->MoveTo(xc1,yc1);
|
269 |
|
|
Printer()->Canvas->LineTo(xc2,yc2);
|
270 |
|
|
Printer()->Canvas->LineTo(xc3,yc3);
|
271 |
|
|
Printer()->Canvas->LineTo(xc1,yc1);
|
272 |
|
|
Printer()->Canvas->Font->Color=clFuchsia;
|
273 |
|
|
if (Noeud1->Checked==true)
|
274 |
|
|
{
|
275 |
|
|
sprintf(mess,"%d",n1);
|
276 |
|
|
projection(point[n1].x,point[n1].y,point[n1].z,&xc1,&yc1,2);
|
277 |
|
|
Printer()->Canvas->TextOut(xc1+2,yc1+2,mess);
|
278 |
|
|
sprintf(mess,"%d",n2);
|
279 |
|
|
projection(point[n2].x,point[n2].y,point[n2].z,&xc2,&yc2,2);
|
280 |
|
|
Printer()->Canvas->TextOut(xc2+2,yc2+2,mess);
|
281 |
|
|
sprintf(mess,"%d",n3);
|
282 |
|
|
projection(point[n3].x,point[n3].y,point[n3].z,&xc3,&yc3,2);
|
283 |
|
|
Printer()->Canvas->TextOut(xc3+2,yc3+2,mess);
|
284 |
|
|
}
|
285 |
|
|
Printer()->Canvas->Font->Color=clYellow;
|
286 |
|
|
if (Maille2->Checked==true)
|
287 |
|
|
{
|
288 |
|
|
sprintf(mess,"%d",i);
|
289 |
|
|
Printer()->Canvas->TextOut((int)((xc1+xc2+xc3)*0.333333),(int)((yc1+yc2+yc3)*0.33333333),mess);
|
290 |
|
|
}
|
291 |
|
|
}
|
292 |
|
|
}
|
293 |
|
|
if (numero_noeud>=0)
|
294 |
|
|
{
|
295 |
|
|
Printer()->Canvas->Font->Color=clBlack;
|
296 |
|
|
x1=point[numero_noeud].x;
|
297 |
|
|
y1=point[numero_noeud].y;
|
298 |
|
|
z1=point[numero_noeud].z;
|
299 |
|
|
projection(x1,y1,z1,&xc1,&yc1,2);
|
300 |
|
|
sprintf(mess,"%d",numero_noeud);
|
301 |
|
|
Printer()->Canvas->TextOut(xc1+2,yc1+2,mess);
|
302 |
|
|
}
|
303 |
|
|
if (numero_maille>=0)
|
304 |
|
|
{
|
305 |
|
|
Printer()->Canvas->Font->Color=clBlack;
|
306 |
|
|
n1=triangle[numero_maille].n1;
|
307 |
|
|
n2=triangle[numero_maille].n2;
|
308 |
|
|
n3=triangle[numero_maille].n3;
|
309 |
|
|
x1=point[n1].x;
|
310 |
|
|
y1=point[n1].y;
|
311 |
|
|
z1=point[n1].z;
|
312 |
|
|
x2=point[n2].x;
|
313 |
|
|
y2=point[n2].y;
|
314 |
|
|
z2=point[n2].z;
|
315 |
|
|
x3=point[n3].x;
|
316 |
|
|
y3=point[n3].y;
|
317 |
|
|
z3=point[n3].z;
|
318 |
|
|
projection(x1,y1,z1,&xc1,&yc1,2);
|
319 |
|
|
projection(x2,y2,z2,&xc2,&yc2,2);
|
320 |
|
|
projection(x3,y3,z3,&xc3,&yc3,2);
|
321 |
|
|
sprintf(mess,"%d",numero_maille);
|
322 |
|
|
Printer()->Canvas->TextOut((int)((xc1+xc2+xc3)*0.333333),(int)((yc1+yc2+yc3)*0.33333333),mess);
|
323 |
|
|
}
|
324 |
|
|
|
325 |
|
|
}
|
326 |
|
|
//---------------------------------------------------------------------------
|
327 |
|
|
void __fastcall TFenp::print_3D(void)
|
328 |
|
|
{
|
329 |
|
|
int i,n1,n2,n3,n4;
|
330 |
|
|
float x1,x2,y1,y2,z1,z2,x3,y3,z3,x4,y4,z4;
|
331 |
|
|
float ab[3],ac[3],ad[3],g[3],crit;
|
332 |
|
|
int xc1,xc2,yc1,yc2,xc3,yc3,xc4,yc4;
|
333 |
|
|
char mess[20];
|
334 |
|
|
TRect r;
|
335 |
|
|
|
336 |
|
|
if ((Activerlerendu3D1->Checked==true)&&(fc==1))
|
337 |
|
|
{
|
338 |
|
|
print_reel();
|
339 |
|
|
return;
|
340 |
|
|
}
|
341 |
|
|
Printer()->Canvas->Pen->Color=clRed;
|
342 |
|
|
if (Eclatee1->Checked==true) Printer()->Canvas->Pen->Color=clOlive;
|
343 |
|
|
for (i=0;i<nb_tetra;i++)
|
344 |
|
|
{
|
345 |
|
|
if ((tetra[i].select==0)&& (Fenp->Debug1->Checked)) continue;
|
346 |
|
|
n1=tetra[i].n1;
|
347 |
|
|
n2=tetra[i].n2;
|
348 |
|
|
n3=tetra[i].n3;
|
349 |
|
|
n4=tetra[i].n4;
|
350 |
|
|
x1=point[n1].x;
|
351 |
|
|
y1=point[n1].y;
|
352 |
|
|
z1=point[n1].z;
|
353 |
|
|
x2=point[n2].x;
|
354 |
|
|
y2=point[n2].y;
|
355 |
|
|
z2=point[n2].z;
|
356 |
|
|
x3=point[n3].x;
|
357 |
|
|
y3=point[n3].y;
|
358 |
|
|
z3=point[n3].z;
|
359 |
|
|
x4=point[n4].x;
|
360 |
|
|
y4=point[n4].y;
|
361 |
|
|
z4=point[n4].z;
|
362 |
|
|
if (Normal1->Checked==false)
|
363 |
|
|
{
|
364 |
|
|
if (Qualite1->Checked==true)
|
365 |
|
|
{
|
366 |
|
|
crit=crit_cal3d(n1,n2,n3,n4);
|
367 |
|
|
if (crit>0.5) Printer()->Canvas->Pen->Color=clLime;
|
368 |
|
|
else if (crit>0.2) Printer()->Canvas->Pen->Color=clBlue;
|
369 |
|
|
else if (crit>0.1) Printer()->Canvas->Pen->Color=clRed;
|
370 |
|
|
else Printer()->Canvas->Pen->Color=clMaroon;
|
371 |
|
|
}
|
372 |
|
|
ab[0]=x2-x1;ab[1]=y2-y1;ab[2]=z2-z1;
|
373 |
|
|
ac[0]=x3-x1;ac[1]=y3-y1;ac[2]=z3-z1;
|
374 |
|
|
ad[0]=x4-x1;ad[1]=y4-y1;ad[2]=z4-z1;
|
375 |
|
|
g[0]=x1+0.25*(ab[0]+ac[0]+ad[0]);
|
376 |
|
|
g[1]=y1+0.25*(ab[1]+ac[1]+ad[1]);
|
377 |
|
|
g[2]=z1+0.25*(ab[2]+ac[2]+ad[2]);
|
378 |
|
|
x1=g[0]+0.8*(x1-g[0]);y1=g[1]+0.8*(y1-g[1]);z1=g[2]+0.8*(z1-g[2]);
|
379 |
|
|
x2=g[0]+0.8*(x2-g[0]);y2=g[1]+0.8*(y2-g[1]);z2=g[2]+0.8*(z2-g[2]);
|
380 |
|
|
x3=g[0]+0.8*(x3-g[0]);y3=g[1]+0.8*(y3-g[1]);z3=g[2]+0.8*(z3-g[2]);
|
381 |
|
|
x4=g[0]+0.8*(x4-g[0]);y4=g[1]+0.8*(y4-g[1]);z4=g[2]+0.8*(z4-g[2]);
|
382 |
|
|
}
|
383 |
|
|
projection(x1,y1,z1,&xc1,&yc1,2);
|
384 |
|
|
projection(x2,y2,z2,&xc2,&yc2,2);
|
385 |
|
|
projection(x3,y3,z3,&xc3,&yc3,2);
|
386 |
|
|
projection(x4,y4,z4,&xc4,&yc4,2);
|
387 |
|
|
Printer()->Canvas->MoveTo(xc1,yc1);
|
388 |
|
|
Printer()->Canvas->LineTo(xc2,yc2);
|
389 |
|
|
Printer()->Canvas->LineTo(xc3,yc3);
|
390 |
|
|
Printer()->Canvas->LineTo(xc1,yc1);
|
391 |
|
|
Printer()->Canvas->MoveTo(xc4,yc4);
|
392 |
|
|
Printer()->Canvas->LineTo(xc1,yc1);
|
393 |
|
|
Printer()->Canvas->MoveTo(xc4,yc4);
|
394 |
|
|
Printer()->Canvas->LineTo(xc2,yc2);
|
395 |
|
|
Printer()->Canvas->MoveTo(xc4,yc4);
|
396 |
|
|
Printer()->Canvas->LineTo(xc3,yc3);
|
397 |
|
|
Printer()->Canvas->Font->Color=clFuchsia;
|
398 |
|
|
if (Noeud1->Checked==true)
|
399 |
|
|
{
|
400 |
|
|
sprintf(mess,"%d",n1);
|
401 |
|
|
Printer()->Canvas->TextOut(xc1+2,yc1+2,mess);
|
402 |
|
|
sprintf(mess,"%d",n2);
|
403 |
|
|
Printer()->Canvas->TextOut(xc2+2,yc2+2,mess);
|
404 |
|
|
sprintf(mess,"%d",n3);
|
405 |
|
|
Printer()->Canvas->TextOut(xc3+2,yc3+2,mess);
|
406 |
|
|
sprintf(mess,"%d",n4);
|
407 |
|
|
Printer()->Canvas->TextOut(xc4+2,yc4+2,mess);
|
408 |
|
|
}
|
409 |
|
|
Printer()->Canvas->Font->Color=clYellow;
|
410 |
|
|
if (Maille2->Checked==true)
|
411 |
|
|
{
|
412 |
|
|
sprintf(mess,"%d",i);
|
413 |
|
|
Printer()->Canvas->TextOut((int)((xc1+xc2+xc3+xc4)*0.25),(int)((yc1+yc2+yc3+yc4)*0.25),mess);
|
414 |
|
|
}
|
415 |
|
|
}
|
416 |
|
|
if (numero_noeud>=0)
|
417 |
|
|
{
|
418 |
|
|
Printer()->Canvas->Font->Color=clBlack;
|
419 |
|
|
x1=point[numero_noeud].x;
|
420 |
|
|
y1=point[numero_noeud].y;
|
421 |
|
|
z1=point[numero_noeud].z;
|
422 |
|
|
projection(x1,y1,z1,&xc1,&yc1,2);
|
423 |
|
|
sprintf(mess,"%d",numero_noeud);
|
424 |
|
|
Printer()->Canvas->TextOut(xc1+2,yc1+2,mess);
|
425 |
|
|
}
|
426 |
|
|
if (numero_maille>=0)
|
427 |
|
|
{
|
428 |
|
|
Printer()->Canvas->Font->Color=clBlack;
|
429 |
|
|
n1=tetra[numero_maille].n1;
|
430 |
|
|
n2=tetra[numero_maille].n2;
|
431 |
|
|
n3=tetra[numero_maille].n3;
|
432 |
|
|
n4=tetra[numero_maille].n4;
|
433 |
|
|
x1=point[n1].x;
|
434 |
|
|
y1=point[n1].y;
|
435 |
|
|
z1=point[n1].z;
|
436 |
|
|
x2=point[n2].x;
|
437 |
|
|
y2=point[n2].y;
|
438 |
|
|
z2=point[n2].z;
|
439 |
|
|
x3=point[n3].x;
|
440 |
|
|
y3=point[n3].y;
|
441 |
|
|
z3=point[n3].z;
|
442 |
|
|
x4=point[n4].x;
|
443 |
|
|
y4=point[n4].y;
|
444 |
|
|
z4=point[n4].z;
|
445 |
|
|
projection(x1,y1,z1,&xc1,&yc1,2);
|
446 |
|
|
projection(x2,y2,z2,&xc2,&yc2,2);
|
447 |
|
|
projection(x3,y3,z3,&xc3,&yc3,2);
|
448 |
|
|
projection(x4,y4,z4,&xc4,&yc4,2);
|
449 |
|
|
sprintf(mess,"%d",numero_maille);
|
450 |
|
|
Printer()->Canvas->TextOut((int)((xc1+xc2+xc3+xc4)*0.25),(int)((yc1+yc2+yc3+yc4)*0.25),mess);
|
451 |
|
|
}
|
452 |
|
|
|
453 |
|
|
|
454 |
|
|
}
|
455 |
|
|
//---------------------------------------------------------------------------
|
456 |
|
|
void __fastcall TFenp::print_reel(void)
|
457 |
|
|
{
|
458 |
|
|
int *iordre;
|
459 |
|
|
float *distance;
|
460 |
|
|
int xpoint[8];
|
461 |
|
|
TPoint ypoint[8];
|
462 |
|
|
float xe,ye,ze,xee,yee,zee;
|
463 |
|
|
float xa,ya,za;
|
464 |
|
|
float xb,yb,zb;
|
465 |
|
|
float xc,yc,zc;
|
466 |
|
|
float xg,yg,zg;
|
467 |
|
|
float nx,ny,nz;
|
468 |
|
|
char mess[20];
|
469 |
|
|
struct s_triangle *tete=NULL,*tri;
|
470 |
|
|
int i;
|
471 |
|
|
int color;
|
472 |
|
|
float dismin,dismax,diff,g[4];
|
473 |
|
|
static float arot[3][3]={{-1.,-1.,-1.},{-1.,-1.,-1.},{-1.,-1.,-1.}};
|
474 |
|
|
int pareil;
|
475 |
|
|
|
476 |
|
|
|
477 |
|
|
|
478 |
|
|
|
479 |
|
|
pareil=0;
|
480 |
|
|
if (tete!=NULL)
|
481 |
|
|
if (arot[0][0]==rot[0][0])
|
482 |
|
|
if (arot[1][0]==rot[1][0])
|
483 |
|
|
if (arot[2][0]==rot[2][0])
|
484 |
|
|
if (arot[0][1]==rot[0][1])
|
485 |
|
|
if (arot[1][1]==rot[1][1])
|
486 |
|
|
if (arot[2][1]==rot[2][1])
|
487 |
|
|
if (arot[0][2]==rot[0][2])
|
488 |
|
|
if (arot[1][2]==rot[1][2])
|
489 |
|
|
if (arot[2][2]==rot[2][2]) pareil=1;
|
490 |
|
|
|
491 |
|
|
|
492 |
|
|
|
493 |
|
|
if (pareil==0)
|
494 |
|
|
{
|
495 |
|
|
tete=NULL;
|
496 |
|
|
arot[0][0]=rot[0][0];
|
497 |
|
|
arot[1][0]=rot[1][0];
|
498 |
|
|
arot[2][0]=rot[2][0];
|
499 |
|
|
arot[0][1]=rot[0][1];
|
500 |
|
|
arot[1][1]=rot[1][1];
|
501 |
|
|
arot[2][1]=rot[2][1];
|
502 |
|
|
arot[0][2]=rot[0][2];
|
503 |
|
|
arot[1][2]=rot[1][2];
|
504 |
|
|
arot[2][2]=rot[2][2];
|
505 |
|
|
/* oeuil */
|
506 |
|
|
xe=1000.*maxcoord-0.5*(xmin+xmax);
|
507 |
|
|
ye=1000.*maxcoord-0.5*(ymin+ymax);
|
508 |
|
|
ze=1000.*maxcoord-0.5*(zmin+zmax);
|
509 |
|
|
/* oeuil dans le repere local */
|
510 |
|
|
xee=rot[0][0]*xe+rot[1][0]*ye+rot[2][0]*ze;
|
511 |
|
|
yee=rot[0][1]*xe+rot[1][1]*ye+rot[2][1]*ze;
|
512 |
|
|
zee=rot[0][2]*xe+rot[1][2]*ye+rot[2][2]*ze;
|
513 |
|
|
iordre=(int *)calloc(nb_triangle+1,sizeof(int));
|
514 |
|
|
distance=(float *)calloc(nb_triangle+1,sizeof(float));
|
515 |
|
|
for (i=0;i<nb_triangle;i++)
|
516 |
|
|
{
|
517 |
|
|
triangle[i].dis=0.;
|
518 |
|
|
triangle[i].suivant=NULL;
|
519 |
|
|
xa=point[triangle[i].n1].x;
|
520 |
|
|
ya=point[triangle[i].n1].y;
|
521 |
|
|
za=point[triangle[i].n1].z;
|
522 |
|
|
xb=point[triangle[i].n2].x;
|
523 |
|
|
yb=point[triangle[i].n2].y;
|
524 |
|
|
zb=point[triangle[i].n2].z;
|
525 |
|
|
xc=point[triangle[i].n3].x;
|
526 |
|
|
yc=point[triangle[i].n3].y;
|
527 |
|
|
zc=point[triangle[i].n3].z;
|
528 |
|
|
xg=0.333333*(xa+xb+xc);
|
529 |
|
|
yg=0.333333*(ya+yb+yc);
|
530 |
|
|
zg=0.333333*(za+zb+zc);
|
531 |
|
|
triangle[i].dis=(xee-xg)*(xee-xg)+(yee-yg)*(yee-yg)+(zee-zg)*(zee-zg);
|
532 |
|
|
if (i==0)
|
533 |
|
|
{
|
534 |
|
|
dismin=triangle[i].dis;
|
535 |
|
|
dismax=triangle[i].dis;
|
536 |
|
|
}
|
537 |
|
|
else
|
538 |
|
|
{
|
539 |
|
|
if (triangle[i].dis<dismin) dismin=triangle[i].dis;
|
540 |
|
|
if (triangle[i].dis>dismax) dismax=triangle[i].dis;
|
541 |
|
|
}
|
542 |
|
|
nx=(yb-ya)*(zc-za)-(zb-za)*(yc-ya);
|
543 |
|
|
ny=(xc-xa)*(zb-za)-(xb-xa)*(zc-za);
|
544 |
|
|
nz=(xb-xa)*(yc-ya)-(yb-ya)*(xc-xa);
|
545 |
|
|
triangle[i].angle=(float)((nx*(xee-xg)+ny*(yee-yg)+nz*(zee-zg))/sqrt((double)((nx*nx+ny*ny+nz*nz)*(triangle[i].dis))));
|
546 |
|
|
if (triangle[i].angle>=1.) triangle[i].angle=0.99999999;
|
547 |
|
|
if (triangle[i].angle<=(-1.)) triangle[i].angle=(-0.99999999);
|
548 |
|
|
distance[i]=triangle[i].dis;
|
549 |
|
|
iordre[i]=i+1;
|
550 |
|
|
|
551 |
|
|
}
|
552 |
|
|
trirea(distance,&(nb_triangle),iordre);
|
553 |
|
|
diff=dismax-dismin;
|
554 |
|
|
dismin=dismin-0.025*diff;
|
555 |
|
|
dismax=dismax+0.025*diff;
|
556 |
|
|
Printer()->Canvas->Pen->Color=Cshade[0];
|
557 |
|
|
Printer()->Canvas->Brush->Color=Cshade[1];
|
558 |
|
|
for (i=nb_triangle-1;i>(-1);i--)
|
559 |
|
|
{
|
560 |
|
|
tri=&(triangle[iordre[i]-1]);
|
561 |
|
|
if ((tri->select==0)&& (Fenp->Debug1->Checked)) continue;
|
562 |
|
|
if (((tri->num_ent==numface) || (numface==(-1))&&(tri->dis-dismin*loin-(1.-loin)*dismax>0.)))
|
563 |
|
|
{
|
564 |
|
|
xa=point[tri->n1].x;
|
565 |
|
|
ya=point[tri->n1].y;
|
566 |
|
|
za=point[tri->n1].z;
|
567 |
|
|
xb=point[tri->n2].x;
|
568 |
|
|
yb=point[tri->n2].y;
|
569 |
|
|
zb=point[tri->n2].z;
|
570 |
|
|
xc=point[tri->n3].x;
|
571 |
|
|
yc=point[tri->n3].y;
|
572 |
|
|
zc=point[tri->n3].z;
|
573 |
|
|
if (Normal1->Checked==false)
|
574 |
|
|
{
|
575 |
|
|
g[0]=0.33333*(xa+xb+xc);
|
576 |
|
|
g[1]=0.33333*(ya+yb+yc);
|
577 |
|
|
g[2]=0.33333*(za+zb+zc);
|
578 |
|
|
xa=g[0]+homo*(xa-g[0]);ya=g[1]+homo*(ya-g[1]);za=g[2]+homo*(za-g[2]);
|
579 |
|
|
xb=g[0]+homo*(xb-g[0]);yb=g[1]+homo*(yb-g[1]);zb=g[2]+homo*(zb-g[2]);
|
580 |
|
|
xc=g[0]+homo*(xc-g[0]);yc=g[1]+homo*(yc-g[1]);zc=g[2]+homo*(zc-g[2]);
|
581 |
|
|
}
|
582 |
|
|
projection(xa,ya,za,&xpoint[0],&xpoint[1],2);
|
583 |
|
|
projection(xb,yb,zb,&xpoint[2],&xpoint[3],2);
|
584 |
|
|
projection(xc,yc,zc,&xpoint[4],&xpoint[5],2);
|
585 |
|
|
ypoint[0].x=xpoint[0];
|
586 |
|
|
ypoint[0].y=xpoint[1];
|
587 |
|
|
ypoint[1].x=xpoint[2];
|
588 |
|
|
ypoint[1].y=xpoint[3];
|
589 |
|
|
ypoint[2].x=xpoint[4];
|
590 |
|
|
ypoint[2].y=xpoint[5];
|
591 |
|
|
color=(int)(-10*fabs((double)(tri->angle))+10);
|
592 |
|
|
if (color>10) color=10;
|
593 |
|
|
if (color<1) color=1;
|
594 |
|
|
Printer()->Canvas->Brush->Color=Cshade[color];
|
595 |
|
|
Printer()->Canvas->Polygon(ypoint,2);
|
596 |
|
|
Printer()->Canvas->Font->Color=clFuchsia;
|
597 |
|
|
if (Noeud1->Checked==true)
|
598 |
|
|
{
|
599 |
|
|
sprintf(mess,"%d",tri->n1);
|
600 |
|
|
Printer()->Canvas->TextOut(xpoint[0]+2,xpoint[1]+2,mess);
|
601 |
|
|
sprintf(mess,"%d",tri->n2);
|
602 |
|
|
Printer()->Canvas->TextOut(xpoint[2]+2,xpoint[3]+2,mess);
|
603 |
|
|
sprintf(mess,"%d",tri->n3);
|
604 |
|
|
Printer()->Canvas->TextOut(xpoint[4]+2,xpoint[5]+2,mess);
|
605 |
|
|
}
|
606 |
|
|
if (tri->n1==numero_noeud)
|
607 |
|
|
{
|
608 |
|
|
Printer()->Canvas->Font->Color=clBlack;
|
609 |
|
|
sprintf(mess,"%d",tri->n1);
|
610 |
|
|
Printer()->Canvas->TextOut(xpoint[0]+2,xpoint[1]+2,mess);
|
611 |
|
|
}
|
612 |
|
|
if (tri->n2==numero_noeud)
|
613 |
|
|
{
|
614 |
|
|
Printer()->Canvas->Font->Color=clBlack;
|
615 |
|
|
sprintf(mess,"%d",tri->n2);
|
616 |
|
|
Printer()->Canvas->TextOut(xpoint[2]+2,xpoint[3]+2,mess);
|
617 |
|
|
}
|
618 |
|
|
if (tri->n3==numero_noeud)
|
619 |
|
|
{
|
620 |
|
|
Printer()->Canvas->Font->Color=clBlack;
|
621 |
|
|
sprintf(mess,"%d",tri->n3);
|
622 |
|
|
Printer()->Canvas->TextOut(xpoint[4]+2,xpoint[5]+2,mess);
|
623 |
|
|
}
|
624 |
|
|
if (tri->num!=numero_maille) Printer()->Canvas->Font->Color=clYellow;
|
625 |
|
|
else
|
626 |
|
|
{
|
627 |
|
|
Printer()->Canvas->Font->Color=clBlack;
|
628 |
|
|
sprintf(mess,"%d",tri->num);
|
629 |
|
|
Printer()->Canvas->TextOut((int)((xpoint[0]+xpoint[2]+xpoint[4])*0.333333),(int)((xpoint[1]+xpoint[3]+xpoint[5])*0.33333333),mess);
|
630 |
|
|
}
|
631 |
|
|
if (Maille2->Checked==true)
|
632 |
|
|
{
|
633 |
|
|
sprintf(mess,"%d",tri->num);
|
634 |
|
|
Printer()->Canvas->TextOut((int)((xpoint[0]+xpoint[2]+xpoint[4])*0.333333),(int)((xpoint[1]+xpoint[3]+xpoint[5])*0.33333333),mess);
|
635 |
|
|
}
|
636 |
|
|
}
|
637 |
|
|
}
|
638 |
|
|
free(iordre);
|
639 |
|
|
free(distance);
|
640 |
|
|
}
|
641 |
|
|
}
|
642 |
|
|
void __fastcall TFenp::print_axe(void)
|
643 |
|
|
{
|
644 |
|
|
int xc,yc;
|
645 |
|
|
|
646 |
|
|
Printer()->Canvas->Pen->Color=clBlue;
|
647 |
|
|
projection(75.,0.,0.,&xc,&yc,0);
|
648 |
|
|
Printer()->Canvas->MoveTo(100,100);
|
649 |
|
|
Printer()->Canvas->LineTo(100+xc,100+yc);
|
650 |
|
|
Printer()->Canvas->Pen->Color=clRed;
|
651 |
|
|
projection(0.,75.,0.,&xc,&yc,0);
|
652 |
|
|
Printer()->Canvas->MoveTo(100,100);
|
653 |
|
|
Printer()->Canvas->LineTo(100+xc,100+yc);
|
654 |
|
|
Printer()->Canvas->Pen->Color=clBlack;
|
655 |
|
|
projection(0.,0.,75.,&xc,&yc,0);
|
656 |
|
|
Printer()->Canvas->MoveTo(100,100);
|
657 |
|
|
Printer()->Canvas->LineTo(100+xc,100+yc);
|
658 |
|
|
}
|
659 |
|
|
|
660 |
|
|
|
661 |
|
|
|