Spe3dForth Funktionsübersicht


Allgemeiner Aufbau der Funktionsbeschreibungen

Befehl

Forth-Befehle haben eine oder mehrere fest definierte Parameterlisten.
  • Parameterliste1 – Returnwert
  • Parameterliste2 – Returnwert2
  • ...
    • Beschreibung
Beispiel

Mathematische Funktionen

add

  • long long – long
    • Addiert zwei long-werte
  • float float – float
    • Addiert zwei float-werte
  • string string – string
    • Verkettet zwei strings
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

  • (null)

pop

  • (null)

Sonstige Funktionen

print

  • (null)

startThreads

  • (null)

setLog

  • (null)

eval

  • (null)

visCmd

  • (null)

setMinObjChanges

  • (null)

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

  • (null)

toFloat

  • (null)

toLong

  • (null)

toString

  • (null)