unit Unit5; { This software has been designed and it is CopyLefted by Han de Bruijn: (===) @-O^O-@ #/_\# ### DELAUNAY TESSELLATION FIELD ESTIMATOR TEST ========================================== } INTERFACE uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, Algemeen, Grafisch, Zijdelings, Sterren, PaulBourke; type TForm1 = class(TForm) Image1: TImage; procedure Toetsdruk(Sender: TObject; var Key: Char); procedure Scheppen(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; IMPLEMENTATION {$R *.dfm} var even : boolean; { Make your choice } rij : punten; procedure tekenen(nV,nD : integer); { Calculate and Draw } var zero : double; i,j,k,L,F,t : integer; veel : integer; mesh : drietal; DTFE : dubbel; a,b,c : punt3D; p,q : punt; OK : boolean; uit : string; begin Form1.Image1.Canvas.Pen.Color := clGray; Form1.Image1.Canvas.Brush.Color := clGray; Delaunay(rij,mesh); F := Length(mesh); for L := 0 to F-1 do { Triangles } begin i := mesh[L].A; j := mesh[L].B; k := mesh[L].C; Form1.Image1.Canvas.MoveTo(x2i(rij[i].x),y2j(rij[i].y)); Form1.Image1.Canvas.LineTo(x2i(rij[j].x),y2j(rij[j].y)); Form1.Image1.Canvas.LineTo(x2i(rij[k].x),y2j(rij[k].y)); Form1.Image1.Canvas.LineTo(x2i(rij[i].x),y2j(rij[i].y)); end; SetLength(DTFE,0); if even then Histogram(rij,mesh,DTFE) { Voronoi method } else Makkelijk(rij,mesh,DTFE); { Delaunay method } Setup_Contours; { Isolines with triangles } Form1.Image1.Canvas.Pen.Color := clRed; if even then veel := nV else veel := nD; for t := 0 to veel do { Contour Levels } begin zero := t/veel; for L := 0 to F-1 do { Triangles } begin i := mesh[L].A; j := mesh[L].B; k := mesh[L].C; a.x := rij[i].x; a.y := rij[i].y; a.z := DTFE[i]-zero; b.x := rij[j].x; b.y := rij[j].y; b.z := DTFE[j]-zero; c.x := rij[k].x; c.y := rij[k].y; c.z := DTFE[k]-zero; OK := Contour_Driehoek(a,b,c,p,q); if not OK then Continue; Form1.Image1.Canvas.MoveTo(x2i(p.x),y2j(p.y)); Form1.Image1.Canvas.LineTo(x2i(q.x),y2j(q.y)); end; end; if even then uit := 'Voronoi' else uit := 'Delaunay'; Form1.Image1.Canvas.Brush.Color := clWhite; Form1.Image1.Canvas.Font.Size := 15; Form1.Image1.Canvas.TextOut(220,Hoog-30,uit); if even then Form1.Image1.Picture.SaveToFile('tien_V_img.bmp') else Form1.Image1.Picture.SaveToFile('tien_D_img.bmp'); end; procedure TForm1.Toetsdruk(Sender: TObject; var Key: Char); { On KeyPress } begin ClearDevice; even := not even; Tekenen(50,250); end; procedure TForm1.Scheppen(Sender: TObject); { At moment of creation } begin xmin := -0.1; xmax := +1.1; ymin := -0.1; ymax := +1.1; TV(Form1.Image1); even := true; ClearDevice; Opnieuw(400,rij); Tekenen(50,250); end; END.