ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/mesh/imprime.cpp
Revision: 3
Committed: Tue Jun 12 12:42:51 2007 UTC (17 years, 11 months ago)
File size: 19997 byte(s)
Log Message:

File Contents

# Content
1 //---------------------------------------------------------------------------
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