Allgemeiner Aufbau der Funktionsbeschreibungen
Befehl
Forth-Befehle haben eine oder mehrere fest definierte Parameterlisten.
- Parameterliste1 – Returnwert
- Parameterliste2 – Returnwert2
- ...
Beispiel
Mathematische Funktionen
add
- long long – long
- float float – float
- string string – string
1 1 add
= 2
sub
- long long – long
- Subtrahiert zwei long-werte
- float float – float
- Subtrahiert zwei float-werte
1 2 sub
= 1
2 1 sub
= -1
mul
- long long – long
- Multipliziert zwei long-werte
- float float – float
- Multipliziert zwei float-werte
2 2 mul
=4
div
- long long – long
- Dividiert zwei long-werte
- float float – float
- Dividiert zwei float-werte
2 4 div
= 4
4 2 div
= 0
4.0 2.0 div
0.5
Vergleichsoperationen
lt
- string string – bool
- float float – bool
- long long – bool
- bool bool – bool
- long float – bool
- float long – bool
- führt einen kleiner-Vergleich (<) durch.
5 10 lt
=false
10 5 lt
= true
ltEq
- string string – bool
- float float – bool
- long long – bool
- bool bool – bool
- long float – bool
- float long – bool
- führt einen kleiner-gleich-Vergleich (<=) durch.
10 10 ltEq
= true
10 5 ltEq
= true
5 10 ltEq
= false
eq
- string string – bool
- float float – bool
- long long – bool
- bool bool – bool
- long float – bool
- float long – bool
- Untersucht zwei Parameter auf Gleichheit
10 10 eq
= true
10 5 eq
= false
gtEq
- string string – bool
- float float – bool
- long long – bool
- bool bool – bool
- long float – bool
- float long – bool
- führt einen größer-gleich-Vergleich (>=) durch.
10 10 gtEq
= true
10 5 gtEq
= false
5 10 gtEq
= true
gt
- string string – bool
- float float – bool
- long long – bool
- bool bool – bool
- long float – bool
- float long – bool
- führt einen größer-Vergleich (>) durch.
nEq
- string string – bool
- float float – bool
- long long – bool
- bool bool – bool
- long float – bool
- float long – bool
- Untersucht zwei Parameter auf Ungleichheit
2 3 eq
= false
2 2 eq
= true
Logische Operatoren
and
- bool bool – bool
- Führt eine logische AND-Verknüfung durch
true true and
=true
false true and
=false
or
- bool bool – bool
- Führt eine logische OR-Verknüfung durch
true true or
=true
false true or
=true
false false or
=false
not
- bool bool – bool
- Führt eine logische NOT-Verknüfung durch
true not
=false
false not
=true
xOr
- bool bool – bool
- Führt eine logische XOR-Verknüfung durch
true true xOr
=false
false true xOr
=true
true false xOr
=true
false false xOr
=false
xNOr
- bool bool – bool
- Führt eine logische XNOR-Verknüfung durch
true true xOr
=true
false true xOr
=false
true false xOr
=false
false false xOr
=true
nAnd
- bool bool – bool
- Führt eine logische NAND-Verknüfung durch
true true nAnd
=false
false true nAnd
=true
nOr
- bool bool – bool
- Führt eine logische NOR-Verknüfung durch
true true nOr
=false
false true nOr
=false
false false nOr
=true
Operationen auf Variablen
gObj
- objectType newIdentifier – (null)
- objectType string – (null)
- Erstellt ein neues globales 3D-Objekt
Sphere3D mySphere gObj
Sphere3D "mySphere" gObj
(von Sphere3D wird angenommen dass es ein valider Objekttyp ist)
lObj
- newIdentifier objectType – (null)
- Erstellt ein neues lokales 3D-Objekt. Wenn lObj nicht innerhalb einer lokalen funktion aufgerufen wird, wird automatisch ein globales Objekt erstellt
Sphere3D mySphere lObj
Sphere3D "mySphere" lObj
(von Sphere3D wird angenommen dass es ein valider Objekttyp ist)
gObjSet
- newIdentifier – (null)
- Erstellt ein neues globales Objectset
motorBaugruppe gObjSet
lObjSet
- newIdentifier – (null)
- Erstellt ein neues lokales Objectset. Wenn lObjSet nicht innerhalb einer lokalen funktion aufgerufen wird, wird automatisch ein globales Objektset erstellt
motorBaugruppe lObjSet
gVar
- BasicType newIdentifier – (null)
- Erstellt eine neue globale Variable
"Hello World" w gVar
true x gVar
10 y gVar
10.0 z gVar
lVar
- newIdentifier BasicType – (null)
- Erstellt eine neue lokale Variable. Wenn lVar nicht innerhalb einer lokalen funktion aufgerufen wird, wird automatisch eine globale Variable erstellt
true w lVar
10 x lVar
10.0 y lVar
"Hello World" z lVar
setLVar
- long var_long – (null)
- bool var_bool – (null)
- string var_string – (null)
- float var_float – (null)
- belegt den Wert einer Variable neu
true x lVar
false y setLVar
setGVar
- long var_long – (null)
- bool var_bool – (null)
- string var_string – (null)
- float var_float – (null)
- belegt den Wert einer globalen Variable neu
true x gVar
false x setGVar
rmVar
- string – (null)
- Entfernt eine Variable (übergebener String muss einen Variablennamen enthalten). Übergabe als String weil die Variable sonst aufgelöst werden würde
#deklaration
10 x gVar
"x" rmVar
rmFunc
- string – (null)
- Entfernt eine Funktion (übergebener String muss einen Funktionsnamen enthalten). Übergabe als String weil die Funktion sonst ausgeführt werden würde
#funktionsdeklaration
"x lVar x x mul" sqr code
"sqr" rmFunc
rmObj
- string – (null)
- Entfernt ein 3D-Objekt (übergebener String muss einen Objektnamen enthalten). Übergabe als String damit rm_* einheitlich verwendet werden kann
#deklaration
Sphere3D x gObj
Sphere3D "y" gObj
"x" rmObj
"y" rmObj
rmObjSet
- string – (null)
- Entfernt ein Objektset (übergebener String muss einen Objektset-namen enthalten). Übergabe als String damit rm_* einheitlich verwendet werden kann
#deklaration
x gObjSet
"x" rmObj
Datenbankfunktionen
diff
- object3DSet object3DSet newIdentifier – object3DSet
- bildet die Differenzmenge aus zwei objectSets. Überschreibt vorhandene ObjectSets
intersect
- object3DSet object3DSet newIdentifier – object3DSet
- bildet die Schnittmenge aus zwei objectSets. Überschreibt vorhandene ObjectSets
join
- object3DSet object3DSet newIdentifier – object3DSet
- bildet die Produktmenge aus zwei objectSets. Überschreibt vorhandene ObjectSets
select
- string object3DSet newIdentifier – object3DSet
- wählt bestimmte objekte anhand des gegebenen Bedingungs-strings aus einem objectSet aus. Überschreibt vorhandene ObjectSets
3D-spezifische Funktionen
getObjectMember
- object3DMember object3D – basicType
- gibt den Inhalt der geforderten Objektvariable zurück
#Annahme: Objekt 'mySphere1' enthält eine Variable 'radius'
radius mySphere1 getValue
setObjectMember
- basicType object3DMember Object3D – (null)
- Setzt eine Objektvariable eines bestimmten 3D-Objekts
#Annahme: Objekt 'mySphere1' enthält eine Variable 'radius'
10.0 radius mySphere1 setValue
setObjectMembers
- [basicType object3DMember]+ Object3D – (null)
- String Object3D – (null)
- setzt mehrere Member auf einmal
Cylinder3D rolle020 g_obj
100 height 5 radius 10 origx 50 origy -112.5 origz 0 colorr 1 colorb 0 colorg rolle020 set_obj_members
translate
- float float float long long string object3D – (null)
- Fügt einem Objekt eine Translations-Animation hinzu. die drei angegebenen float werte sind nacheinander: z,y,x; die long-werte: start, duration
#translation nach:
#name der animation: verschiebung
#x=0.0, y=0.0, z=100.0
#duration=20 Sekunden
#start: nach 1 Sekunde
-300.0 0.0 0.0 20000 1000 verschiebung teil translate
rotate
- float float float float float float long long string object3D – (null)
- Fügt einem Objekt eine Rotations-Animation hinzu. die sechs angegebenen float werte sind nacheinander: z,y,x,; die long-werte: start, duration
#translation nach:
#name der animation: verschiebung
#x=0.0, y=0.0, z=100.0
#duration=20 Sekunden
#start: nach 1 Sekunde
1.0 0.0 0.0 -300.0 0.0 0.0 20000 1000 drehung teil translate
scale
- float float float long long string object3D – (null)
- Fügt einem Objekt eine Skalierungs-Animation hinzu. die drei angegebenen float werte sind nacheinander: z,y,x; die long-werte: start, duration
#Skalierung um:
#name der animation: skalierung
#x=0.0, y=0.0, z=100.0
#duration=20 Sekunden
#start: nach 1 Sekunde
-300.0 0.0 0.0 20000 1000 skalierung teil scale
transparency
- float long long string object3D – (null)
- Fügt einem Objekt eine Transparenz-Animation hinzu. die drei angegebenen float werte sind nacheinander: z,y,x; die long-werte: start, duration
#auf Transparenzwert 0.8 "morphen"
#name der animation: transperenz-morph1
#duration=20 Sekunden
#start: nach 1 Sekunde
-300.0 0.0 0.0 20000 1000 transperenz-morph1 teil scale
colorize
transform
- float float float float float float float float float object3D – (null)
- Fügt einem Objekt eine allgemeine transformation zu. die angegebenen float-werte sind Einträge in einer 3x3 Matrix
push
- object3D object3DSet – (null)
- Mit diesem Befehl kann man ein Object3D einer Objektgruppe zufügen
mySphere1 motorbaugruppe push
=Kontrollfunktionen=
code
- String newIdent – (null)
- Definiert eine Funktion. Der Funktionscode wird als string übergeben da er ansonsten ausgeführt werden würde
"x lVar x x mul" sqr code
if
- bool String String – (null)
- Wenn der übergebene boolsche Wert wahr(true) ist, wird der erste übergebene string als Funktion ausgeführt, ansonsten der zweite
10 x gVar
20 y gVar
x y gt "y print" "x print" if
Ausgabe: 20
do
- long String – (null)
- Führt einen code so oft aus, wie es in dem übergebenen long-Wert angegeben ist. Auf die Zählvariable kann mit "I" zugegriffen werden. nach ausführung wird sie entfernt.
#definition des newline-zeichens
"\n" newline gVar
#definiton einer inkrementierungsfunktion
"1 add" inc gVar
#1 auf den Stack legen und 10 mal inkrementieren, das ergebnis und ein newline ausgeben
0 x gVar
gVar 10 "inc print newLine print x" do
Ausgaben:
1
2
3
4
5
6
7
8
9
10
include
- String – (null)
- lädt die im String angegebene Datei und führt den enthaltenen code aus
#Inhalt der Datei /home/root/scripts/test1:
#"testScript loaded" print
"/home/root/scripts/test1" include
Ausgabe:
testScript loaded
Stack-Handling
getStackSize
pop
Sonstige Funktionen
print
startThreads
setLog
eval
visCmd
setMinObjChanges
exists
- var_bool – bool
- var_long – bool
- var_float – bool
- var_string – bool
- object3D – bool
- object3DSet – bool
- objectType – bool
- newIdent – bool
- Untersucht ob die gegebene Variable existiert
- object3DMember object3D – bool
- newIdent object3D – bool
- untersucht ob das gegebene Object3D den gegebenen Identifier/Object3DMember als Membervariable enthält
Typkonvertierung
toBool
toFloat
toLong
toString