REFSKRIPT
GET_N_PARAMS
GET_RESULT np
RETURN_IF_EQUAL np 0 ANIM_FX
GET_PARAM_NR 1
GET_RESULT modus
GET_PARAM_NR 2
GET_RESULT ich

IF_STR_EQUAL_GOTO modus INIT init
IF_STR_EQUAL_GOTO modus INIT_READ init_read
IF_STR_EQUAL_GOTO modus START start
IF_STR_EQUAL_GOTO modus PRE_RENDER prerender
IF_STR_EQUAL_GOTO modus AFTER_RENDER afterrender
IF_STR_EQUAL_GOTO modus FINISH finish
IF_STR_EQUAL_GOTO modus GET_OBJS get_objs
IF_STR_EQUAL_GOTO modus SET_OBJS set_objs
IF_STR_EQUAL_GOTO modus GET_INFO get_info

MELDUNG Falscher Aufruf

RETURN 0
;*****************************************************

>init:
; Ergebnis:
; OK alles geklapp
; ER fehler
; AB abbruch
;
; Objekt abfragen
GET_AUSWAHL Objekttyp? GeoObjekt Material
RETURN_IF_ABBRUCH AB
GET_RESULT objekttyp
IF_STR_EQUAL_GOTO objekttyp GeoObjekt LBL_GET_GEO
ADD_STR1 Bitte Material wählen
GET_RESULT dummy
GET_MAT_AUSWAHL dummy
RETURN_IF_ABBRUCH AB
GET_RESULT objekt
SET_VAR typ 1
GOTO LBL_OBJEKT_GEWAEHLT
>LBL_GET_GEO:
ADD_STR1 Bitte Objekt wählen
GET_RESULT dummy
GET_GEO_OBJ dummy
RETURN_IF_ABBRUCH AB
GET_RESULT objekt
SET_VAR typ 0
>LBL_OBJEKT_GEWAEHLT:

; sich selbst umbenennen
ADD_STR ich - objekt
GET_RESULT ich1
OBJ_SET_NAME ich ich1
GET_RESULT ich

GOTO INITX

>init_read:

AFX_ALLOK_INTERN_VARS ich 9 1 2
SET_VAR objekt ----
SET_VAR typ 0

; interne-variablen

>INITX:

; objekt 0 = Objekt (Geo oder Material)
AFX_SET_OBJ ich 0 objekt
; Typ
AFX_SET_INT ich 0 typ

; Die 9 real werden in <start> gesetzt

; jetzt 6 Variablen für freie Parameter bzw. Konstanten
; a bis c für kleine bis mittlere Werte
; d bis f für grosse Werte
; Das ist natuerlich nur ein Vorschlag und kann jederzeit
; geaendert werden (entweder durch die Eingabe des Wertes oder
; durch eine Aenderung hier im Skript)
AFX_SET_N_OBJ_VARS ich 6
AFX_DEFINE_OBJ_VAR ich 0 1 a 0 5
AFX_DEFINE_OBJ_VAR ich 1 1 b 0 5
AFX_DEFINE_OBJ_VAR ich 2 1 c 0 5
AFX_DEFINE_OBJ_VAR ich 3 1 d 0 500
AFX_DEFINE_OBJ_VAR ich 4 1 e 0 500
AFX_DEFINE_OBJ_VAR ich 5 1 f 0 500

; Jetzt wird da Objekt erzeugt und initialisiert, das
; die Funktionen speichern soll

; Objekt erzeugen

ADD_STR FFFUNC- objekt
GET_RESULT funcspeicher
OBJ_NEW funcspeicher 3
GET_RESULT funcspeicher
PKL_ADD funcspeicher
AFX_SET_OBJ ich 1 funcspeicher
AKT_KP_DREI funcspeicher

; Ab hier ist es dann fuer Geoobjekte und Materialien unterschiedlich

IF_EQUAL_GOTO typ 1 LBL_MATERIAL_KOERPER
ADD_STR1 MX cmx
GET_RESULT dummy
KP_QUADER dummy 0 0 0
ADD_STR1 MY cmy
GET_RESULT dummy
KP_QUADER dummy 0 0 0
ADD_STR1 MZ cmz
GET_RESULT dummy
KP_QUADER dummy 0 0 0
ADD_STR1 RX crx
GET_RESULT dummy
KP_QUADER dummy 0 0 0
ADD_STR1 RY cry
GET_RESULT dummy
KP_QUADER dummy 0 0 0
ADD_STR1 RZ crz
GET_RESULT dummy
KP_QUADER dummy 0 0 0
ADD_STR1 SX csx
GET_RESULT dummy
KP_QUADER dummy 0 0 0
ADD_STR1 SY csy
GET_RESULT dummy
KP_QUADER dummy 0 0 0
ADD_STR1 SZ csz
GET_RESULT dummy
KP_QUADER dummy 0 0 0
ADD_STR1 BO -
GET_RESULT dummy
KP_QUADER dummy 0 0 0

GOTO LBL_KOERPER_DEFINIERT

>LBL_MATERIAL_KOERPER:
ADD_STR1 RO cro
GET_RESULT dummy
KP_QUADER dummy 0 0 0
ADD_STR1 GR cgr
GET_RESULT dummy
KP_QUADER dummy 0 0 0
ADD_STR1 BL cbl
GET_RESULT dummy
KP_QUADER dummy 0 0 0
ADD_STR1 DI cdi
GET_RESULT dummy
KP_QUADER dummy 0 0 0
ADD_STR1 SP csp
GET_RESULT dummy
KP_QUADER dummy 0 0 0
ADD_STR1 TR ctr
GET_RESULT dummy
KP_QUADER dummy 0 0 0
ADD_STR1 EI cei
GET_RESULT dummy
KP_QUADER dummy 0 0 0
ADD_STR1 BR cbr
GET_RESULT dummy
KP_QUADER dummy 0 0 0
ADD_STR1 BO -
GET_RESULT dummy
KP_QUADER dummy 0 0 0
>LBL_KOERPER_DEFINIERT:


RETURN OK
;********************************************************
>start:

; Werte einlesen
AFX_GET_INT ich 0
GET_RESULT typ
AFX_GET_OBJ ich 0
GET_RESULT objekt

; Startvariablen initialisieren
; Diese kann der User dann in Formeln einsetzen.
; Ausserdem werden sie in nicht benutzten Formeln verwendet,
; damit sich das Objekt dort nicht veraendert.

IF_EQUAL_GOTO typ 1 LBL_MAT_START

GEO_GET_POS objekt
GET_RESULT pos3
COPY_WORD pos3 1
GET_RESULT cmx
COPY_WORD pos3 2
GET_RESULT cmy
COPY_WORD pos3 3
GET_RESULT cmz
;GEO_GET_BBOX objekt
;GET_RESULT geo_start_bbox
GEO_SELECT_ALL_PTS objekt
GEO_GET_SELECTED_PTS_BBOX objekt
GET_RESULT geo_start_bbox
GEO_UNSELECT_ALL_PTS objekt
COPY_WORD geo_start_bbox 1
GET_RESULT nx1
COPY_WORD geo_start_bbox 2
GET_RESULT ny1
COPY_WORD geo_start_bbox 3
GET_RESULT nz1
COPY_WORD geo_start_bbox 4
GET_RESULT nx2
COPY_WORD geo_start_bbox 5
GET_RESULT ny2
COPY_WORD geo_start_bbox 6
GET_RESULT nz2
FUNCTION abs(nx1-nx2)
GET_RESULT csx 
FUNCTION abs(ny1-ny2)
GET_RESULT csy 
FUNCTION abs(nz1-nz2)
GET_RESULT csz
IF_NOT_EQUAL_GOTO csx 0 LBL_ASX_OK
SET_VAR csx 0.0001
>LBL_ASX_OK:
IF_NOT_EQUAL_GOTO csy 0 LBL_ASY_OK
SET_VAR csy 0.0001
>LBL_ASY_OK:
IF_NOT_EQUAL_GOTO csz 0 LBL_ASZ_OK
SET_VAR csz 0.0001
>LBL_ASZ_OK:
GEO_GET_ORIENT objekt
GET_RESULT orient
COPY_WORD orient 1
GET_RESULT crx
COPY_WORD orient 2
GET_RESULT cry
COPY_WORD orient 3
GET_RESULT crz
AFX_SET_REAL ich 0 cmx
AFX_SET_REAL ich 1 cmy
AFX_SET_REAL ich 2 cmz
AFX_SET_REAL ich 3 csx
AFX_SET_REAL ich 4 csy
AFX_SET_REAL ich 5 csz
AFX_SET_REAL ich 6 crx
AFX_SET_REAL ich 7 cry
AFX_SET_REAL ich 8 crz

GOTO LBL_START_OK

>LBL_MAT_START:
MAT_GET_COLOR objekt
GET_RESULT cc3
COPY_WORD cc3 1
GET_RESULT cro
COPY_WORD cc3 2
GET_RESULT cgr
COPY_WORD cc3 3
GET_RESULT cbl
SURF_GET_PARAM objekt 0
GET_RESULT cdi
SURF_GET_PARAM objekt 1
GET_RESULT csp
SURF_GET_PARAM objekt 2
GET_RESULT ctr
SURF_GET_PARAM objekt 3
GET_RESULT cei
SURF_GET_PARAM objekt 4
GET_RESULT cbr
AFX_SET_REAL ich 0 cro
AFX_SET_REAL ich 1 cgr
AFX_SET_REAL ich 2 cbl
AFX_SET_REAL ich 3 cdi
AFX_SET_REAL ich 4 csp
AFX_SET_REAL ich 5 ctr
AFX_SET_REAL ich 6 cei
AFX_SET_REAL ich 7 cbr

>LBL_START_OK:


RETURN OK


;*******************************************************
>prerender:

; Werte einlesen
; Diese Variablen gelten fuer alle Objekte
AFX_GET_INT ich 0
GET_RESULT typ
AFX_GET_OBJ ich 0
GET_RESULT objekt
AFX_GET_OBJ ich 1
GET_RESULT funcspeicher
OBJ_GET_VAR ich 0
GET_RESULT a
OBJ_GET_VAR ich 1
GET_RESULT b
OBJ_GET_VAR ich 2
GET_RESULT c
OBJ_GET_VAR ich 3
GET_RESULT d
OBJ_GET_VAR ich 4
GET_RESULT e
OBJ_GET_VAR ich 5
GET_RESULT f

GET_PARAM_NR 5
GET_RESULT t

RAND 
GET_RESULT zu

SET_VAR pi 3.141592654

SET_VAR g 9.80665

DIV 180 PI
GET_RESULT bzg

; Jetzt der Block fuer Geoobjekte

IF_EQUAL_GOTO typ 1 LBL_CALL_MATTRANS

AFX_GET_REAL ich 0
GET_RESULT cmx
AFX_GET_REAL ich 1
GET_RESULT cmy
AFX_GET_REAL ich 2
GET_RESULT cmz
AFX_GET_REAL ich 3
GET_RESULT csx
AFX_GET_REAL ich 4
GET_RESULT csy
AFX_GET_REAL ich 5
GET_RESULT csz
AFX_GET_REAL ich 6
GET_RESULT crx
AFX_GET_REAL ich 7
GET_RESULT cry
AFX_GET_REAL ich 8
GET_RESULT crz

; Aktuelle Geo-Objektwerte auslesen, damit sie auch als
; Parameter verwendet werden koennen
; Zu viele Parameter fuer einen Skriptaufruf

GEO_GET_POS objekt
GET_RESULT geo_akt_pos
COPY_WORD geo_akt_pos 1
GET_RESULT amx
GET_RESULT geo_akt_pos
COPY_WORD geo_akt_pos 2
GET_RESULT amy
GET_RESULT geo_akt_pos
COPY_WORD geo_akt_pos 3
GET_RESULT amz
GEO_GET_ORIENT objekt
GET_RESULT geo_akt_winkel
COPY_WORD geo_akt_winkel 1
GET_RESULT arx
COPY_WORD geo_akt_winkel 2
GET_RESULT ary
COPY_WORD geo_akt_winkel 3
GET_RESULT arz
;GEO_GET_BBOX objekt
;GET_RESULT geo_akt_bbox
GEO_SELECT_ALL_PTS objekt
GEO_GET_SELECTED_PTS_BBOX objekt
GET_RESULT geo_akt_bbox
GEO_UNSELECT_ALL_PTS objekt
COPY_WORD geo_akt_bbox 1
GET_RESULT bx1
COPY_WORD geo_akt_bbox 2
GET_RESULT by1
COPY_WORD geo_akt_bbox 3
GET_RESULT bz1
COPY_WORD geo_akt_bbox 4
GET_RESULT bx2
COPY_WORD geo_akt_bbox 5
GET_RESULT by2
COPY_WORD geo_akt_bbox 6
GET_RESULT bz2
FUNCTION abs(bx1-bx2)
GET_RESULT asx
FUNCTION abs(by1-by2)
GET_RESULT asy 
FUNCTION abs(bz1-bz2)
GET_RESULT asz
IF_NOT_EQUAL_GOTO asx 0 LBL_BSX_OK
SET_VAR asx 0.0001
>LBL_BSX_OK:
IF_NOT_EQUAL_GOTO asy 0 LBL_BSY_OK
SET_VAR asy 0.0001
>LBL_BSY_OK:
IF_NOT_EQUAL_GOTO asz 0 LBL_BSZ_OK
SET_VAR asz 0.0001
>LBL_BSZ_OK:

; Auslesen der Koerpernamen von funcspeicher

AKT_KP_DREI funcspeicher
GET_NKOERPER
GET_RESULT numkoerper
IF_EQUAL_GOTO numkoerper 11 LBL_NUMKOERPER_OK
ADD_STR1 ER Die Koerper wurden veraendert
GET_RESULT fehler
RETURN fehler
>LBL_NUMKOERPER_OK:
ADD_STR1 MX MY MZ RX RY RZ SX SY SZ BO
GET_RESULT prefixes
; Die 9 Strings in einen String zu packen und aus den folgenden
; Zeilen eine Schleife zu machen, waere zwar guenstiger, aber
; bei diesem Vorhaben koennte es erfahrungsgemaess Probleme geben. 
; Also alles schoen aufgerollt :O|

COPY_WORD prefixes 1
GET_RESULT pre
GET_KP_NAME 2
GET_RESULT kname
COPY_WORD kname 1
GET_RESULT kpre
IF_STR_EQUAL_GOTO pre kpre LBL_PREFIX_OK1
ADD_STR1 ER Funktion fuer pre hat keinen gueltigen Marker
GET_RESULT fehler
RETURN fehler
>LBL_PREFIX_OK1:
COPY_WORD kname 2
GET_RESULT func_MX

COPY_WORD prefixes 2
GET_RESULT pre
GET_KP_NAME 3
GET_RESULT kname
COPY_WORD kname 1
GET_RESULT kpre
IF_STR_EQUAL_GOTO pre kpre LBL_PREFIX_OK2
ADD_STR1 ER Funktion fuer pre hat keinen gueltigen Marker
GET_RESULT fehler
RETURN fehler
>LBL_PREFIX_OK2:
COPY_WORD kname 2
GET_RESULT func_MY

COPY_WORD prefixes 3
GET_RESULT pre
GET_KP_NAME 4
GET_RESULT kname
COPY_WORD kname 1
GET_RESULT kpre
IF_STR_EQUAL_GOTO pre kpre LBL_PREFIX_OK3
ADD_STR1 ER Funktion fuer pre hat keinen gueltigen Marker
GET_RESULT fehler
RETURN fehler
>LBL_PREFIX_OK3:
COPY_WORD kname 2
GET_RESULT func_MZ

COPY_WORD prefixes 4
GET_RESULT pre
GET_KP_NAME 5
GET_RESULT kname
COPY_WORD kname 1
GET_RESULT kpre
IF_STR_EQUAL_GOTO pre kpre LBL_PREFIX_OK4
ADD_STR1 ER Funktion fuer pre hat keinen gueltigen Marker
GET_RESULT fehler
RETURN fehler
>LBL_PREFIX_OK4:
COPY_WORD kname 2
GET_RESULT func_RX

COPY_WORD prefixes 5
GET_RESULT pre
GET_KP_NAME 6
GET_RESULT kname
COPY_WORD kname 1
GET_RESULT kpre
IF_STR_EQUAL_GOTO pre kpre LBL_PREFIX_OK5
ADD_STR1 ER Funktion fuer pre hat keinen gueltigen Marker
GET_RESULT fehler
RETURN fehler
>LBL_PREFIX_OK5:
COPY_WORD kname 2
GET_RESULT func_RY

COPY_WORD prefixes 6
GET_RESULT pre
GET_KP_NAME 7
GET_RESULT kname
COPY_WORD kname 1
GET_RESULT kpre
IF_STR_EQUAL_GOTO pre kpre LBL_PREFIX_OK6
ADD_STR1 ER Funktion fuer pre hat keinen gueltigen Marker
GET_RESULT fehler
RETURN fehler
>LBL_PREFIX_OK6:
COPY_WORD kname 2
GET_RESULT func_RZ

COPY_WORD prefixes 7
GET_RESULT pre
GET_KP_NAME 8
GET_RESULT kname
COPY_WORD kname 1
GET_RESULT kpre
IF_STR_EQUAL_GOTO pre kpre LBL_PREFIX_OK7
ADD_STR1 ER Funktion fuer pre hat keinen gueltigen Marker
GET_RESULT fehler
RETURN fehler
>LBL_PREFIX_OK7:
COPY_WORD kname 2
GET_RESULT func_SX

COPY_WORD prefixes 8
GET_RESULT pre
GET_KP_NAME 9
GET_RESULT kname
COPY_WORD kname 1
GET_RESULT kpre
IF_STR_EQUAL_GOTO pre kpre LBL_PREFIX_OK8
ADD_STR1 ER Funktion fuer pre hat keinen gueltigen Marker
GET_RESULT fehler
RETURN fehler
>LBL_PREFIX_OK8:
COPY_WORD kname 2
GET_RESULT func_SY

COPY_WORD prefixes 9
GET_RESULT pre
GET_KP_NAME 10
GET_RESULT kname
COPY_WORD kname 1
GET_RESULT kpre
IF_STR_EQUAL_GOTO pre kpre LBL_PREFIX_OK9
ADD_STR1 ER Funktion fuer pre hat keinen gueltigen Marker
GET_RESULT fehler
RETURN fehler
>LBL_PREFIX_OK9:
COPY_WORD kname 2
GET_RESULT func_SZ

COPY_WORD prefixes 10
GET_RESULT pre
GET_KP_NAME 11
GET_RESULT kname
COPY_WORD kname 1
GET_RESULT kpre
IF_STR_EQUAL_GOTO pre kpre LBL_PREFIX_OK10
ADD_STR1 ER Funktion fuer pre hat keinen gueltigen Marker
GET_RESULT fehler
RETURN fehler
>LBL_PREFIX_OK10:
COPY_WORD kname 2
GET_RESULT bo_name
IF_STR_EQUAL_GOTO bo_name - LBL_KEIN_BO
OBJ_EXIST bo_name
GET_RESULT res
IF_STR_EQUAL_GOTO res JA LBL_BO_EX
ADD_STR1 ER Bezugsobjekt existiert nicht
GET_RESULT fehler
RETURN fehler
>LBL_BO_EX:
OBJ_IS_SUB_CLASS_OF bo_name 2
GET_RESULT res
IF_STR_EQUAL_GOTO res JA LBL_GET_BO
ADD_STR1 ER Bezugsobjekt ist kein GeoObjekt
GET_RESULT fehler
RETURN fehler
>LBL_GET_BO:
GEO_GET_POS bo_name
GET_RESULT bo_akt_pos
COPY_WORD bo_akt_pos 1
GET_RESULT omx
GET_RESULT bo_akt_pos
COPY_WORD bo_akt_pos 2
GET_RESULT omy
GET_RESULT bo_akt_pos
COPY_WORD bo_akt_pos 3
GET_RESULT omz
GEO_GET_ORIENT bo_name
GET_RESULT bo_akt_winkel
COPY_WORD bo_akt_winkel 1
GET_RESULT orx
COPY_WORD bo_akt_winkel 2
GET_RESULT ory
COPY_WORD bo_akt_winkel 3
GET_RESULT orz
;GEO_GET_BBOX bo_name
;GET_RESULT bo_akt_bbox
GEO_SELECT_ALL_PTS bo_name
GEO_GET_SELECTED_PTS_BBOX bo_name
GET_RESULT bo_akt_bbox
GEO_UNSELECT_ALL_PTS bo_name
COPY_WORD bo_akt_bbox 1
GET_RESULT ox1
COPY_WORD bo_akt_bbox 2
GET_RESULT oy1
COPY_WORD bo_akt_bbox 3
GET_RESULT oz1
COPY_WORD bo_akt_bbox 4
GET_RESULT ox2
COPY_WORD bo_akt_bbox 5
GET_RESULT oy2
COPY_WORD bo_akt_bbox 6
GET_RESULT oz2
FUNCTION abs(ox1-ox2)
GET_RESULT osx 
FUNCTION abs(oy1-oy2)
GET_RESULT osy 
FUNCTION abs(oz1-oz2)
GET_RESULT osz
IF_NOT_EQUAL_GOTO osx 0 LBL_OSX_OK
SET_VAR osx 0.0001
>LBL_OSX_OK:
IF_NOT_EQUAL_GOTO osy 0 LBL_OSY_OK
SET_VAR osy 0.0001
>LBL_OSY_OK:
IF_NOT_EQUAL_GOTO osz 0 LBL_OSZ_OK
SET_VAR osz 0.0001
>LBL_OSZ_OK:
FUNCTION sqrt(((amx-omx)^2)+((amy-omy)^2)+((amz-omz)^2))
GET_RESULT oeg
FUNCTION sqrt((amx-omx)^2)
GET_RESULT oex
FUNCTION sqrt((amy-omy)^2)
GET_RESULT oey
FUNCTION sqrt((amz-omz)^2)
GET_RESULT oez
GOTO LBL_BO_OK
>LBL_KEIN_BO:
SET_VAR omx 0
SET_VAR omy 0
SET_VAR omz 0
SET_VAR orx 0
SET_VAR ory 0
SET_VAR orz 0
SET_VAR osx 1
SET_VAR osy 1
SET_VAR osz 1
SET_VAR oeg 0
SET_VAR oex 0
SET_VAR oey 0
SET_VAR oez 0
>LBL_BO_OK:

; Folgendes geht leider nicht (man koennte dann eine Schleife
; konstruieren). Ref meldet bei FUNCTION dummy: "Unerlaubtes Zeichen
; in Funktion _MX" ???), obwohl dummy "func_MX" ist.
;SET_VAR i 1
;COPY_WORD prefixes i
;GET_RESULT dummy
;ADD_STR func_ dummy
;GET_RESULT dummy
;FUNCTION dummy
;GET_RESULT prefixes
; Also wieder alles einzeln...

FUNCTION func_MX
GET_RESULT MX
FUNCTION func_MY
GET_RESULT MY
FUNCTION func_MZ
GET_RESULT MZ
FUNCTION func_RX
GET_RESULT RX
FUNCTION func_RY
GET_RESULT RY
FUNCTION func_RZ
GET_RESULT RZ
FUNCTION func_SX
GET_RESULT SX
FUNCTION func_SY
GET_RESULT SY
FUNCTION func_SZ
GET_RESULT SZ

; Skalieren
GEO_SET_ORIENT objekt RX RY RZ
>LBL_NSCALE:

; Groesse in 3 Richtungen
DIV SX asx
GET_RESULT factor_sx
DIV SY asy
GET_RESULT factor_sy
DIV SZ asz
GET_RESULT factor_sz
IF_NOT_EQUAL_GOTO factor_sx 0 LBL_KSX_OK
SET_VAR factor_sx 1
>LBL_KSX_OK:
IF_NOT_EQUAL_GOTO factor_sy 0 LBL_KSY_OK
SET_VAR factor_sy 1
>LBL_KSY_OK:
IF_NOT_EQUAL_GOTO factor_sz 0 LBL_KSZ_OK
SET_VAR factor_sz 1
>LBL_KSZ_OK:

AKT_KP_DREI objekt
KP_ZERREN Alles factor_sx factor_sy factor_sz

; Position setzen
GEO_SET objekt MX MY MZ

GOTO LBL_TRANSFORMED
; Nun der Block fuer Materialien
>LBL_CALL_MATTRANS:
;** MAT *********************************************

; Startkonstanten
AFX_GET_REAL ich 0
GET_RESULT cro
AFX_GET_REAL ich 1
GET_RESULT cgr
AFX_GET_REAL ich 2
GET_RESULT cbl
AFX_GET_REAL ich 3
GET_RESULT cdi
AFX_GET_REAL ich 4
GET_RESULT csp
AFX_GET_REAL ich 5
GET_RESULT ctr
AFX_GET_REAL ich 6
GET_RESULT cei
AFX_GET_REAL ich 7
GET_RESULT cbr

; Objektzustand
MAT_GET_COLOR objekt
GET_RESULT akt_color3
COPY_WORD akt_color3 1
GET_RESULT aro
COPY_WORD akt_color3 2
GET_RESULT agr
COPY_WORD akt_color3 3
GET_RESULT abl
SURF_GET_PARAM objekt 0
GET_RESULT adi
SURF_GET_PARAM objekt 1
GET_RESULT asp
SURF_GET_PARAM objekt 2
GET_RESULT atr
SURF_GET_PARAM objekt 3
GET_RESULT aei
SURF_GET_PARAM objekt 4
GET_RESULT abr

; Auslesen der Koerpernamen von funcspeicher
; Koennte man natuerlich alles geschickter machen (u.a. Unterprogramme), aber
; ich hab jetzt keine Lust dazu :-)

AKT_KP_DREI funcspeicher
GET_NKOERPER
GET_RESULT numkoerper
IF_EQUAL_GOTO numkoerper 10 LBL_NUMKOERPER_OK2
ADD_STR1 ER Die Koerper wurden veraendert
GET_RESULT fehler
RETURN fehler
>LBL_NUMKOERPER_OK2:
ADD_STR1 RO GR BL DI SP TR EI BR BO
GET_RESULT prefMAT
COPY_WORD prefMAT 1
GET_RESULT pre
GET_KP_NAME 2
GET_RESULT kname
COPY_WORD kname 1
GET_RESULT kpre
IF_STR_EQUAL_GOTO pre kpre LBL_PREFIX_OKA
ADD_STR1 ER Funktion fuer pre hat keinen gueltigen Marker
GET_RESULT fehler
RETURN fehler
>LBL_PREFIX_OKA:
COPY_WORD kname 2
GET_RESULT func_RO
COPY_WORD prefMAT 2
GET_RESULT pre
GET_KP_NAME 3
GET_RESULT kname
COPY_WORD kname 1
GET_RESULT kpre
IF_STR_EQUAL_GOTO pre kpre LBL_PREFIX_OKB
ADD_STR1 ER Funktion fuer pre hat keinen gueltigen Marker
GET_RESULT fehler
RETURN fehler
>LBL_PREFIX_OKB:
COPY_WORD kname 2
GET_RESULT func_GR
COPY_WORD prefMAT 3
GET_RESULT pre
GET_KP_NAME 4
GET_RESULT kname
COPY_WORD kname 1
GET_RESULT kpre
IF_STR_EQUAL_GOTO pre kpre LBL_PREFIX_OKC
ADD_STR1 ER Funktion fuer pre hat keinen gueltigen Marker
GET_RESULT fehler
RETURN fehler
>LBL_PREFIX_OKC:
COPY_WORD kname 2
GET_RESULT func_BL
COPY_WORD prefMAT 4
GET_RESULT pre
GET_KP_NAME 5
GET_RESULT kname
COPY_WORD kname 1
GET_RESULT kpre
IF_STR_EQUAL_GOTO pre kpre LBL_PREFIX_OKD
ADD_STR1 ER Funktion fuer pre hat keinen gueltigen Marker
GET_RESULT fehler
RETURN fehler
>LBL_PREFIX_OKD:
COPY_WORD kname 2
GET_RESULT func_DI
COPY_WORD prefMAT 5
GET_RESULT pre
GET_KP_NAME 6
GET_RESULT kname
COPY_WORD kname 1
GET_RESULT kpre
IF_STR_EQUAL_GOTO pre kpre LBL_PREFIX_OKE
ADD_STR1 ER Funktion fuer pre hat keinen gueltigen Marker
GET_RESULT fehler
RETURN fehler
>LBL_PREFIX_OKE:
COPY_WORD kname 2
GET_RESULT func_SP
COPY_WORD prefMAT 6
GET_RESULT pre
GET_KP_NAME 7
GET_RESULT kname
COPY_WORD kname 1
GET_RESULT kpre
IF_STR_EQUAL_GOTO pre kpre LBL_PREFIX_OKF
ADD_STR1 ER Funktion fuer pre hat keinen gueltigen Marker
GET_RESULT fehler
RETURN fehler
>LBL_PREFIX_OKF:
COPY_WORD kname 2
GET_RESULT func_TR
COPY_WORD prefMAT 7
GET_RESULT pre
GET_KP_NAME 8
GET_RESULT kname
COPY_WORD kname 1
GET_RESULT kpre
IF_STR_EQUAL_GOTO pre kpre LBL_PREFIX_OKG
ADD_STR1 ER Funktion fuer pre hat keinen gueltigen Marker
GET_RESULT fehler
RETURN fehler
>LBL_PREFIX_OKG:
COPY_WORD kname 2
GET_RESULT func_EI
COPY_WORD prefMAT 8
GET_RESULT pre
GET_KP_NAME 9
GET_RESULT kname
COPY_WORD kname 1
GET_RESULT kpre
IF_STR_EQUAL_GOTO pre kpre LBL_PREFIX_OKH
ADD_STR1 ER Funktion fuer pre hat keinen gueltigen Marker
GET_RESULT fehler
RETURN fehler
>LBL_PREFIX_OKH:
COPY_WORD kname 2
GET_RESULT func_BR
COPY_WORD prefMAT 9
GET_RESULT pre
GET_KP_NAME 10
GET_RESULT kname
COPY_WORD kname 1
GET_RESULT kpre
IF_STR_EQUAL_GOTO pre kpre LBL_PREFIX_OKI
ADD_STR1 ER Funktion fuer pre hat keinen gueltigen Marker
GET_RESULT fehler
RETURN fehler
>LBL_PREFIX_OKI:
COPY_WORD kname 2
GET_RESULT bo_name
IF_STR_EQUAL_GOTO bo_name - LBL_KEIN_BO2
OBJ_EXIST bo_name
GET_RESULT res
IF_STR_EQUAL_GOTO res JA LBL_BO_EX2
ADD_STR1 ER Bezugsobjekt existiert nicht
GET_RESULT fehler
RETURN fehler
>LBL_BO_EX2:
OBJ_IS_SUB_CLASS_OF bo_name 2
GET_RESULT res
IF_STR_EQUAL_GOTO res JA LBL_GET_BO2
ADD_STR1 ER Bezugsobjekt ist kein GeoObjekt
GET_RESULT fehler
RETURN fehler
>LBL_GET_BO2:
GEO_GET_POS bo_name
GET_RESULT bo_akt_pos
COPY_WORD bo_akt_pos 1
GET_RESULT omx
GET_RESULT bo_akt_pos
COPY_WORD bo_akt_pos 2
GET_RESULT omy
GET_RESULT bo_akt_pos
COPY_WORD bo_akt_pos 3
GET_RESULT omz
GEO_GET_ORIENT bo_name
GET_RESULT bo_akt_winkel
COPY_WORD bo_akt_winkel 1
GET_RESULT orx
COPY_WORD bo_akt_winkel 2
GET_RESULT ory
COPY_WORD bo_akt_winkel 3
GET_RESULT orz
;GEO_GET_BBOX bo_name
;GET_RESULT bo_akt_bbox
GEO_SELECT_ALL_PTS bo_name
GEO_GET_SELECTED_PTS_BBOX bo_name
GET_RESULT bo_akt_bbox
GEO_UNSELECT_ALL_PTS bo_name
COPY_WORD bo_akt_bbox 1
GET_RESULT ox1
COPY_WORD bo_akt_bbox 2
GET_RESULT oy1
COPY_WORD bo_akt_bbox 3
GET_RESULT oz1
COPY_WORD bo_akt_bbox 4
GET_RESULT ox2
COPY_WORD bo_akt_bbox 5
GET_RESULT oy2
COPY_WORD bo_akt_bbox 6
GET_RESULT oz2
FUNCTION abs(ox1-ox2)
GET_RESULT osx 
FUNCTION abs(oy1-oy2)
GET_RESULT osy 
FUNCTION abs(oz1-oz2)
GET_RESULT osz
IF_NOT_EQUAL_GOTO osx 0 LBL_OSX_OK2
SET_VAR osx 0.0001
>LBL_OSX_OK2:
IF_NOT_EQUAL_GOTO osy 0 LBL_OSY_OK2
SET_VAR osy 0.0001
>LBL_OSY_OK2:
IF_NOT_EQUAL_GOTO osz 0 LBL_OSZ_OK2
SET_VAR osz 0.0001
>LBL_OSZ_OK2:
SET_VAR oe 1
GOTO LBL_BO_OK2
>LBL_KEIN_BO2:
SET_VAR omx 0
SET_VAR omy 0
SET_VAR omz 0
SET_VAR orx 0
SET_VAR ory 0
SET_VAR orz 0
SET_VAR osx 1
SET_VAR osy 1
SET_VAR osz 1
>LBL_BO_OK2:
SET_VAR oeg 0
SET_VAR oex 0
SET_VAR oey 0
SET_VAR oez 0

FUNCTION func_RO
GET_RESULT rot
FUNCTION func_GR
GET_RESULT gruen
FUNCTION func_BL
GET_RESULT blau
FUNCTION func_DI
GET_RESULT diff
FUNCTION func_SP
GET_RESULT spieg
FUNCTION func_TR
GET_RESULT trans
FUNCTION func_EI
GET_RESULT eigen
FUNCTION func_BR
GET_RESULT brech

MAT_SET_COLOR objekt rot gruen blau
SURF_SET_PARAM objekt 0 diff
SURF_SET_PARAM objekt 1 spieg
SURF_SET_PARAM objekt 2 trans
SURF_SET_PARAM objekt 3 eigen
SURF_SET_PARAM objekt 4 brech

>LBL_TRANSFORMED:

; Fertig

RETURN OK
;*********************************************************************
>afterrender:
RETURN OK

;*********************************************************

>finish:

AFX_GET_INT ich 0
GET_RESULT typ
AFX_GET_OBJ ich 0
GET_RESULT objekt

IF_EQUAL_GOTO typ 1 LBL_MAT_ARENDER
AFX_GET_REAL ich 0
GET_RESULT cmx
AFX_GET_REAL ich 1
GET_RESULT cmy
AFX_GET_REAL ich 2
GET_RESULT cmz
AFX_GET_REAL ich 3
GET_RESULT csx
AFX_GET_REAL ich 4
GET_RESULT csy
AFX_GET_REAL ich 5
GET_RESULT csz
AFX_GET_REAL ich 6
GET_RESULT crx
AFX_GET_REAL ich 7
GET_RESULT cry
AFX_GET_REAL ich 8
GET_RESULT crz
GEO_SET objekt cmx cmy cmz
GEO_SET_ORIENT objekt crx cry crz
;GEO_GET_BBOX objekt
;GET_RESULT geo_a_bbox
GEO_SELECT_ALL_PTS objekt
GEO_GET_SELECTED_PTS_BBOX objekt
GET_RESULT geo_a_bbox
GEO_UNSELECT_ALL_PTS objekt
COPY_WORD geo_a_bbox 1
GET_RESULT hx1
COPY_WORD geo_a_bbox 2
GET_RESULT hy1
COPY_WORD geo_a_bbox 3
GET_RESULT hz1
COPY_WORD geo_a_bbox 4
GET_RESULT hx2
COPY_WORD geo_a_bbox 5
GET_RESULT hy2
COPY_WORD geo_a_bbox 6
GET_RESULT hz2
FUNCTION abs(hx1-hx2)
GET_RESULT hx 
FUNCTION abs(hy1-hy2)
GET_RESULT hy 
FUNCTION abs(hz1-hz2)
GET_RESULT hz
IF_NOT_EQUAL_GOTO hx 0 LBL_HSX_OK
SET_VAR hx 0.0001
>LBL_HSX_OK:
IF_NOT_EQUAL_GOTO hy 0 LBL_HSY_OK
SET_VAR hy 0.0001
>LBL_HSY_OK:
IF_NOT_EQUAL_GOTO hz 0 LBL_HSZ_OK
SET_VAR hz 0.0001
>LBL_HSZ_OK:
DIV csx hx
GET_RESULT fhx
DIV csy hy
GET_RESULT fhy
DIV csz hz
GET_RESULT fhz

AKT_KP_DREI objekt
KP_ZERREN Alles fhx fhy fhz

GOTO LBL_ARENDER_OK

>LBL_MAT_ARENDER:
AFX_GET_REAL ich 0
GET_RESULT cro
AFX_GET_REAL ich 1
GET_RESULT cgr
AFX_GET_REAL ich 2
GET_RESULT cbl
AFX_GET_REAL ich 3
GET_RESULT cdi
AFX_GET_REAL ich 4
GET_RESULT csp
AFX_GET_REAL ich 5
GET_RESULT ctr
AFX_GET_REAL ich 6
GET_RESULT cei
AFX_GET_REAL ich 7
GET_RESULT cbr
MAT_SET_COLOR objekt cro cgr cbl
SURF_SET_PARAM objekt 0 cdi
SURF_SET_PARAM objekt 1 csp
SURF_SET_PARAM objekt 2 ctr
SURF_SET_PARAM objekt 3 cei
SURF_SET_PARAM objekt 4 cbr
>LBL_ARENDER_OK:

RETURN OK

;**********************************************************

>get_objs:
RETURN OK

;*********************************************************
>set_objs:
RETURN OK

;*********************************************************

>get_info:
RETURN OK0
;*********************************************************



