| 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 |
|