Class TSpaceFillingCurve
Unit
SpaceFillingCurves
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
- TObject
- TSpaceFillingCurve
Overview
Methods
Properties
 |
property SizeX: Cardinal read FSizeX; |
 |
property SizeY: Cardinal read FSizeY; |
 |
property PixelsCount: Cardinal read FPixelsCount; |
Description
Methods
 |
constructor Create(ASizeX, ASizeY: Cardinal); virtual; |
|
= SizeX * SizeY
|
 |
function EndOfPixels: boolean; virtual; abstract; |
|
|
 |
function NextPixel: TVector2Cardinal; virtual; abstract; |
|
Jest bledem (ktory niekoniecznie zostanie wychwycony do wyjatku, zwlaszcza w wersji RELEASE) uzycie NextPixel gdy EndOfPixels = true.
|
 |
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.
|
 |
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).
|
 |
function PixelsDone: Cardinal; virtual; abstract; |
|
zwraca ile razy NextPixel zostalo juz wywolane, od czasu ostatniego Reset'a lub konstrukcji obiektu
|
 |
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
 |
property SizeX: Cardinal read FSizeX; |
|
|
 |
property SizeY: Cardinal read FSizeY; |
|
|
 |
property PixelsCount: Cardinal read FPixelsCount; |
|
|
Generated by PasDoc 0.11.0 on 2008-09-12 11:58:32