//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "stereo.h"
#include "fdroga.h"
#include <math.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
 odczytaj_parametry();
}
//---------------------------------------------------------------------------
// Odczytaj parametry
void TForm1 :: odczytaj_parametry( void)
{
 try
 {
    sp = (StylPatrzenia)RadioGroup1 -> ItemIndex;
    if( sp == Anaglif)
    {
        Lkolor = clRed;
        Rkolor = clAqua;
    }
    else
    {
        Lkolor = Rkolor = clBlack;
    }
    baza = (double)TrackBar1 -> Position / 100.;
    obserwator.x = (double)TrackBar2 -> Position / 10.;
    obserwator.y = (double)TrackBar3 -> Position / 10.;
    obserwator.z = (double)TrackBar4 -> Position / 10.;
    ogniskowa = (double)TrackBar5 -> Position/100.;
 }
 catch(...)
 {
 }
}
//---------------------------------------------------------------------------
//  Wykreślenie kostki, rozpiętej na podanych wierzchołkach
void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
{
 TStereo s( obserwator,         //pozycja obserwatora
    0, 0, PaintBox1 -> Width, PaintBox1 -> Height, //okienko ekranowe
    baza,                       //odległość między oczami
    PaintBox1 -> Canvas,        //aparat graficzny
    sp,                         //styl projekcji stereo
    ogniskowa);                 //odległość oka od płaszczyzny obrazowej

 int i;
 double h = -10;                //poziom gruntu
                                //p1 ...p4 odpowiadają za pas drogi
                                //p5 ...p8 odpowiadają za linię środkową
                                //p9 ...p10 - to przydrożne słupy
 TPunkt p1(0,-10,h), p2(0,10,h), p3(-5000,10,h), p4(-5000,-10,h);
 TPunkt p5(0,-0.2,h), p6(0,0.2,h), p7(0,0.2,h), p8(0,-0.2,h);
 TPunkt p9(0,0,h), p10(0,0,10);

 s.czworokat_stereo( p1, p2, p3, p4, Lkolor, Rkolor);  //pas drogi

 for( i = 0; i < 20; i++)       //linie środkowe
 {
    p5.x = p6.x = - i * 50;
    p7.x = p8.x = p5.x - 20;
    s.czworokat_stereo( p5, p6, p7, p8, Lkolor, Rkolor);
 }

 for( i = 0; i < 20; i++)       //słupy
 {
    if( i < 2)
        PaintBox1 -> Canvas -> Pen -> Width = 3;
    else
    if( i < 5)
        PaintBox1 -> Canvas -> Pen -> Width = 2;
    else
        PaintBox1 -> Canvas -> Pen -> Width = 1;

    if( i < 10)
        p9.x = p10.x = - i * 20;
    else
        p9.x = p10.x = - i * 25;
    p9.y = p10.y = -10.;
    s.linia_stereo( p9, p10, Lkolor, Rkolor);

    p9.y = p10.y = 10.;
    s.linia_stereo( p9, p10, Lkolor, Rkolor);
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TrackBar1Change(TObject *Sender)
{
 odczytaj_parametry();
 PaintBox1 -> Refresh();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
 if( Key == VK_ESCAPE)
    Close();
}
//---------------------------------------------------------------------------

