{$N+}
Program Lab_1_1;
uses crt, Types, Transf, IOGeom, GrGeom, Graph, OPolig;

(****************************************
 * Transformarea coordonatelor:
 * Rotatia unui set de puncte
 ****************************************)

const
  filein  = 'Puncte.txt';
  fileout = 'Lab_1_1.txt';

var
  r, p: TPoligon;
  i, mx, my: integer;
  alfa: real;

begin
  alfa := 0;
  p.Init(0);
  r.Init(0);

  clrscr;

  { Citirea datelor din fisierul <filein>, daca exista }
  p.LoadFromFile(filein);
  {nr := readf_puncte(filein ,p);}

  { Citirea coordonatelor punctelor de la tastatura }
  if p.nr = 0 then begin
     writeln(#10#13'Introdu nr de puncte: ');
     readln(i);

     writeln('Sa generez punctele? (D/N)');
     if(UpCase(ReadKey)='D') then begin
       if(MidX=0)or(MidY=0) then begin
         mx := 325; my := 200
       end else begin
         mx := MidX; my := MidY
       end;
       p.Generate(i, mx, my);
     end else p.Input(i);

     p.SaveToFile(filein);
  end;

  r.SetSize(p.nr);
  writeln;
  writeln('Introdu unghiul de rotatie: ');
  readln(alfa);

  { Afisarea coordonatelor inainte de transformare }
  gr_set := [fit_big];
  with p do drow_set_puncte(p^, nr, WHITE);
  readkey;
  clearviewport;
  gr_set := [];

  { Rotirea setului de puncte }
  rot_set_puncte(r.p^, p.p^, p.nr, alfa);

  { Afisarea rezultatului }
  drow_set_puncte(r.p^, r.nr, WHITE);
  readkey;
  closegraph;

  { Salvarea rezultatului in fisierul <fileout> }
  r.SaveToFile(fileout);

  r.Done;
  p.Done;
end.