RIC-Elemente

 

Wie ist nun eine RIC-Datei intern aufgebaut? Eigentliche Grafikdateien beinhalten einen Header, der z.B. Auskunft über die Größe des Bitmaps oder die Farbpalette gibt, und einem eigentlichen binären Bereich, der die Informationen über die Pixels der Grafik enthält. Bei RIC-Dateien verhält es sich hier ein wenig anders! Natürlich gibt es auch einen Bereich zum Speichern einer monochromen Matrix - darüber hinaus jedoch sind noch viele andere Elemente vorhanden, die für die Ausgabe auf den NXT-Bildschirm verwendet werden können:

 

Element

Symbol

Funktion

Information Dieses Element enthält die für NXT-G ausgewiesene Größe der Grafik, die in der RIC-Datei vorhanden ist
Point Zeichnet einen einzelnen Punkt auf dem NXT-Bildschirm
Line Zeichnet eine beliebige Linie auf den NXT-Bildschirm
Rectangle Zeichnet ein nicht gefülltes Rechteck auf dem NXT-Bildschirm
Circle Zeichnet einen Kreises auf dem NXT-Bildschirm
NumBox Gibt einen numerischen Wert auf dem NXT-Bildschirm aus
Sprite Definiert eine monochrome Bitmatrix, die Zeichnungen enthalten kann
CopyBits Kopiert einen Ausschnitt aus einem Sprite auf den NXT-Bildschirm
VarMap Definiert eine Funktion, die mittels linearer Interpolation Werte umrechnen kann

 

Jede RIC-Datei besteht aus einem oder mehren dieser RIC-Elemente, die beim Aufruf der RIC-Datei sequentiell abgearbeitet werden. Standard RIC-Dateien, die sowohl mit NXT-G mitgeliefert werden, bzw. mittels der alten Version von nxtRICedit erstellt wurden, enthalten immer nur drei dieser Elemente:

 

Element

Symbol

Funktion

Information Es ist hier die gesamte Größe der gespeicherten Bitmap ( X * Y Punkte) hinterlegt, damit NXT-G die genaue Angabe für die Größe der Grafik weiß
Sprite Enthält nur das eine anzuzeigende Bild (Größe X * Y Punkte), das in dieser Datei hinterlegt ist
CopyBits Die Parameter für das CopyBits-Element sind genau so gewählt, dass das gesamte Sprite an der relativen Position 0,0 ausgegeben wird

 

Für die Anzeige der einfachen RIC-Dateien werden keine zusätzlichen Parameter benötigt. Ein entsprechender Aufruf mittels NXC sieht dann wie folgt aus:

 

 

task main()
{
   GraphicOut( 0,0, "TEST.RIC" );


   while( 1 )

      ;
}

 

 

Aber selbst dieser parameterlose Aufruf kann mehr als nur ein einzelnes Bild auf dem NXT-Bildschirm ausgeben, wenn man die in der RIC-Datei gespeicherten RIC-Elemente entsprechend auswählt und anordnet!

 

Der eigentliche Vorteil der RIC-Dateien kommt erst beim erweiterten Aufruf mittels GraphicOutEx( ) zum Einsatz, bei dem man zusätzlich noch ein Array mit Integerwerten mitgeben kann:

 

 

task main()
{

   int parameter[ 3 ];

 

   parameter[ 0 ]= 10;

   parameter[ 1 ]= 2;

   parameter[ 2 ]= 40;


   GraphicOutEx( 0,0, "TEST.RIC" ,parameter );


   while( 1 )

      ;
}

 

 

Erst diese Form des Aufrufes stößt das bisher verschlossene Tor der zusätzlichen RIC-Funktionen auf!

 

Die Standard-Firmware unterstützt bis zu 16 Parameter (Array-Index 0 bis 15). Die von John Hansen korrigierte Version der Firmware kann dagegen bis zu 256 Parameter (Array-Index 0 bis 255) beim Aufruf von GraphicOutEx( ) mitgeben!

 

Viele werden sich nun fragen, wozu eigentlich diese Parameter eingesetzt werden können? Um diese Frage zu beantworten, muss man verstehen, wie die einzelnen RIC-Elemente aufgebaut sind, und wie sie funktionieren. Grundsätzlich kann man bei fast jedem RIC-Parameter drei Formen von Werten angeben:

 

  Parametertyp Anzeigebild Bedeutung / Funktion
 

Konstante

Der Wert dieser Konstante wird zur Designzeit im RIC-Element festgelegt und kann nachträglich nicht mehr geändert werden. Der Wertebereich dieser Werte ist von 0 bis 4195 (0x0000 - 0x0FFF).

 

Parameter

Hier wird der Index angegeben, welcher zur Laufzeit den zu verwendenden Wert aus dem übergebenen Integer-Array adressiert. So kann dynamisch zur Laufzeit der zu verwendende Wert übergeben werden.

 

Der Wert für den Index ist abhängig von der im NXT eingesetzten Firmware:

 

Firmware

Dezimal

Hex

Standard

0 - 15

0x0000 - 0x000F

Extended

by John Hansen

0 - 255

0x0000 - 0x00FF

 

Über File » Settings » Parameters kann die Anzahl der zu verwendenden Parameter eingestellt werden. Alternativ direkt über die beiden Symbole und .

 

VarMap

Bei dieser Parameterangabe handelt es sich um eine zweifach indirekten Adressierung. Der linke Wert gibt an, welches zuvor definierte VarMap-Element verwendet werden soll. Der rechte Parameter gibt dann den Index für den Parameter an, dessen Wert über die VarMap-Funktion umgesetzt wird.

 

Beispiel:

Links wurde das VarMap-Element 1 und der Parameter 3 ausgewählt. Zur Laufzeit sieht der NXT nach, welcher Wert im vierten Parameter ( parameter[3] ) übergeben wurde. Dieser Wert wird dann gegen die Funktion, die im VarMap-Element 1 hinterlegt ist, übergeben und der daraus ermittelte Wert wird dann erst zur Laufzeit für das RIC-Element angewendet.

 

Auch hier gilt das Gleiche wie für die Parameter-Adressierung: Es kann nur ein Parameter-Index verwendet werden, der auch von der Firmware unterstützt wird.

 

Erstellen einer RIC-Datei

 

Für die Erstellung der RIC-Datei können die RIC-Elemente in beliebiger Reihenfolge wie Perlen auf eine Schnur gefädelt werden. In unserem Fall ist der Faden jedoch vertikal angeordnet und neue RIC-Elemente werden an das untere Ende angefügt (siehe rot umrandeten Bereich):

 

 

Das Anhängen ist denkbar einfach und wird durch das Drücken des gewünschten RIC-Element-Symbols im unteren linken Fensterbereich gemacht:

 

 

Hängt das RIC-Element Information an das Ende der Liste an

 

Hängt das RIC-Element Point an das Ende der Liste an

 

Hängt das RIC-Element Line an das Ende der Liste an

 

Hängt das RIC-Element Rectangle an das Ende der Liste an

 

Hängt das RIC-Element Circle an das Ende der Liste an

 

Hängt das RIC-Element NumBox an das Ende der Liste an

  Hängt das RIC-Element Sprite an das Ende der Liste an

 

Hängt das RIC-Element CopyBits an das Ende der Liste an

 

Hängt das RIC-Element VarMap an das Ende der Liste an

 

Selbstverständlich kann die Reihenfolge der Elemente in der RIC-Datei auch im nachhinein geändert werden:

 

Löscht das aktuell ausgewählte RIC-Element

 

Erstellt eine Kopie des aktuell ausgewählten RIC-Elements und fügt es dahinter ein

 

Verschiebt das aktuell ausgewählte RIC-Element eine Position nach vorne

 

Verschiebt das aktuell ausgewählte RIC-Element eine Position nach hinten