Přidáno 2 940 bajtů,
4. 10. 2012, 16:39 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.
[[Category:Graph]]
[[Category:Procedúry Graph]]