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

# User Rev Content
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