Class TSpaceFillingCurve

DescriptionHierarchyFieldsMethodsProperties

Unit

Declaration

type TSpaceFillingCurve = class(TObject)

Description

To jest abstrakcyjna klasa reprezentujaca interfejs obiektu ktory zwraca kolejne punkty w przestrzeni 2d (0..SizeX-1, 0..SizeY-1) w taki sposob ze w momencie gdy EndOfPixels = true to kazdy pixel z tej przestrzeni zostal zwrocony dokladnie raz przez NextPixel. Innymi slowy, uzywajac konstrukcji w rodzaju while not SFCurve.EndOfPixels do DoSomethingOnPixel(SFCurve.NextPixel) kazdy punkt o wspolrzednych 0..SizeX-1, 0..SizeY-1 zostanie przekazany dokladnie raz do procedury DoSomethingOnPixel().

Te klasy beda zapisane w taki sposob zeby wywolania NextPixel i EndOfPixels dzialaly mozliwie blyskawicznie, za to byc moze skonstruowanie obiektu takiej klasy bedzie zajmowalo chwile czasu (innymi slowy, bedziemy raczej starali sie robic jakis preprocessing w czasie konstrukcji obiektu niz komplikowac obliczenia NextPixel i EndOfPixels).

Notka : dla SizeX lub SizeY = 0 te klasy tez beda dzialac poprawnie (zawsze bedzie EndOfPixels = true).

Hierarchy

Overview

Methods

Public constructor Create(ASizeX, ASizeY: Cardinal); virtual;
Public function EndOfPixels: boolean; virtual; abstract;
Public function NextPixel: TVector2Cardinal; virtual; abstract;
Public procedure SkipPixels(SkipCount: Cardinal); virtual; abstract;
Public procedure Reset; virtual; abstract;
Public function PixelsDone: Cardinal; virtual; abstract;
Public class function SFCName: string; virtual; abstract;

Properties

Public property SizeX: Cardinal read FSizeX;
Public property SizeY: Cardinal read FSizeY;
Public property PixelsCount: Cardinal read FPixelsCount;

Description

Methods

Public constructor Create(ASizeX, ASizeY: Cardinal); virtual;

= SizeX * SizeY

Public function EndOfPixels: boolean; virtual; abstract;
 
Public function NextPixel: TVector2Cardinal; virtual; abstract;

Jest bledem (ktory niekoniecznie zostanie wychwycony do wyjatku, zwlaszcza w wersji RELEASE) uzycie NextPixel gdy EndOfPixels = true.

Public procedure SkipPixels(SkipCount: Cardinal); virtual; abstract;

Zasymuluj wywolanie NextPixels SkipCount razy, ignorujac wynik. Zazwyczaj bedzie jednak mozna to zaimplementowac duzo szybciej niz for i := 1 to SkipCount do NextPixels, co ma znaczenie bo przeciez SkipCount jakie tu podamy moze byc dosc duze (np. dla SizeX = SizeY = 10ˆ3 to mamy PixelsCount = 10ˆ6. Chcesz zrobic SkipPixels z polowy obrazka ? To Skipcount = 5*10ˆ5. Sporo, zwlaszcza ze np. w podklasie TPrecalcCurve mozna takie SkipPixels zaimplementowac jako proste dodawanie.

Jest bledem (ktory niekoniecznie zostanie wychwycony do wyjatku, zwlaszcza w wersji RELEASE) uzycie SkipPixels gdy EndOfPixels = true lub uzycie SkipCount > PixelsCount-PixelsDone.

Public procedure Reset; virtual; abstract;

sprawia ze generowanie pixeli zaczyna sie od poczatku, tak jakby obiekt byl od nowa skonstruowany (ale SizeX, SizeY pozostaje bez zmian).

Public function PixelsDone: Cardinal; virtual; abstract;

zwraca ile razy NextPixel zostalo juz wywolane, od czasu ostatniego Reset'a lub konstrukcji obiektu

Public class function SFCName: string; virtual; abstract;

zwraca nazwe klasy curve'a. W naszych 3 podklasach zwraca w tym momencie 'swapscan', 'hilbert' i 'peano', odpowiednio.

Properties

Public property SizeX: Cardinal read FSizeX;
 
Public property SizeY: Cardinal read FSizeY;
 
Public property PixelsCount: Cardinal read FPixelsCount;
 

Generated by PasDoc 0.11.0 on 2008-09-12 11:58:32