SetViewPort
Verze z 4. 10. 2012, 17:01, kterou vytvořil Zdeno Sekerák (diskuse | příspěvky) (1 revízia: Unit Graph)
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
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.