SetViewPort

Z Delphi & Pascal (česká wiki)
Skočit na navigaci Skočit na vyhledávání

Nastavuje aktuální výstupní výřez či okno pro grafický výstup.

Deklarace
procedure SetViewPort(x1, y1, x2, y2: Integer; Clip: Boolean);
Režim
Reálný, Chráněný
Poznámky
(X1,Y1) definují levý horní roh výřezu a (X2,Y2) definují pravý dolní roh (0<= X1 < X2 a 0 <= Y1 < Y2). Levý horní roh výřezu je (0, 0).
Booleovský parametr Clip určuje, zda budou grafické výstupy ořezávány na hranicích aktuálního výřezu. SetViewPort(0, 0, GetMaxX, GetMaxY, True) vždy nastaví grafické okno přes celou grafickou obrazovku. Pokud zadáte nesprávné parametry, GraphResult vrací grError a aktuální výřez se nemění.
Všechny příkazy grafiky jsou svými souřadnicemi relativní vzhledem k nastavenému výřezu (např. GetX, OutText, Rectangle, MoveTo atd.).
Pokud je parametr Clip nastavený na True, bude veškerá grafika ořezávána na hranici aktuálního výřezu, ovšem ukazatel aktuální pozice (CP, current pointer) se neořezává nikdy. V následujícím příkladě nebude nakreslená čára úplná, protože ji zkrátí hranice výřezu:
SetViewPort(10, 10, 20, 20, ClipOn);
Line(0, 5, 15, 5);
Úplná čára by začínala v absolutních souřadnicích (10,15) a končila by v absolutních souřadnicích (25,15), pokud by se ořezávání neprovádělo. V tomto případě je ořezávání zapnuté, a proto úsečka skončí již v bodě (20,15) podle absolutních souřadnic, zbytek se nevykreslí.
Procedury InitGraph, GraphDefaults a SetGraphMode nastaví výřez na celou grafickou obrazovku. Nastavení aktuálního výřezu lze zjistit voláním

procedury GetViewSettings, která má parametr typu ViewPortType.

Volání SetViewPort přesune ukazatel pozice do bodu (0,0).
Omezení
Je nutno být v grafickém režimu.
Viz také
ClearViewPort
GetViewSettings
GraphResult
Ořezávání - konstanty


Vzorový příklad

{SetVwPrt.PAS}
{Vzorový příklad pro proceduru SetViewPort.}
uses Graph;
const
  vp1 : ViewPortType =
    (x1: 10; y1: 80; x2: 100; y2: 150; Clip : ClipOn);
  vp2 : ViewPortType =
    (x1: 110; y1: 0; x2: 200; y2:  70; Clip : ClipOn);
var
  GraphDriver, GraphMode : Integer;
begin
  GraphDriver := Detect;
  InitGraph(GraphDriver,GraphMode,);
  if GraphResult <> grOk then
    Halt(1);
  with vp1 do
  begin
    Rectangle(Succ(x1),Succ(y1), { orámuje výřez 1 }
              Pred(x2),Pred(y2));
    SetViewPort(x1, y1, x2, y2, ClipOn);
    OutText('Výřez 1');
  end;

  { celá obrazovka }
  SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn);
  with vp2 do
  begin
    { orámuje výřez 2 }
    Rectangle(Succ(x1),Succ(y1),
              Pred(x2),Pred(y2));
    SetViewPort(x1, y1, x2, y2, ClipOn);
    OutText('Výřez 2');
  end;
  Readln;
  CloseGraph;
end.