REFSKRIPT
; überarbeitet von Carsten Lotz, 24.8.1997
; Aufruf: 
; wald1.skr kpquelle <geo_obj_name> kpname [opt.]
; Setzt den Körper "kp" an alle selektierten Punkte von
; <geo_obj_name>. 
;(Sind keine selektiert, Abfrage, ob Kopie an alle, oder:)
;(Besitzt das Objekt keine Punkte, wird gefragt eine Kopie)
;(an dessen Ursprungspunkt gesetzt, oder ob der Körper)
;(dorthin verschoben werden soll). 
; Die Körperkopien werden "kpname" benannt.
;(wird opt. (beliebig, aber ungleich Null) übergeben, werden die neu )
;(erzeugten Körper mit einzelnen Namen im Körpereditor erscheinen.)
GET_N_PARAMS
GET_RESULT x

IF_EQUAL_GOTO x 3 param_ok
IF_EQUAL_GOTO x 4 param_ok
  RETURN 0
>param_ok:
GET_PARAM_NR 1
GET_RESULT kp
GET_PARAM_NR 2
GET_RESULT wald_obj_name
GET_PARAM_NR 3
GET_RESULT name

SET_VAR einzel 0
IF_NOT_EQUAL_GOTO x 4 w3
  GET_PARAM_NR 4
  GET_RESULT res
  IF_EQUAL_GOTO res 0 w3
   SET_VAR einzel 1

>w3:
OBJ_EXIST wald_obj_name
GET_RESULT res
IF_STR_EQUAL_GOTO res JA w4
RETURN 0
>w4:
; testen, ob es ein geo-obj ist
OBJ_IS_SUB_CLASS_OF wald_obj_name 2
GET_RESULT res
IF_STR_EQUAL_GOTO res JA w5
RÉTURN 0

>w5:
GET_KP_DREI 
GET_RESULT kp_drei
; schauen, ob es kp ALLES ist, dann müssen wird zuerst
; einen neuen Koerper schaffen
IF_STR_NOT_EQUAL_GOTO kp ALLES w2b
CALL neukpnam.skr ALLES
GET_RESULT kp1
KP_ADDNEU kp kp1
ADD_STR kp1
GET_RESULT kp
>w2b:
COPY_WORD kp 1
GET_RESULT old

GET_KP_NOBJEKTE kp 
GET_RESULT n_kp
GET_NOBJEKTE
GET_RESULT nobj

RAND

GET_KP_KOORD kp
GET_RESULT res
COPY_WORD res 1
GET_RESULT kpx
COPY_WORD res 2
GET_RESULT kpy
COPY_WORD res 3
GET_RESULT kpz
GEO_N_SELECTED_PTS wald_obj_name
GET_RESULT ncopys
GEO_NPTS wald_obj_name
GET_RESULT npts
SET_VAR i 0
SET_VAR nc 0
>doloop:
   MOD i 100
   GET_RESULT i1
   IF_NOT_EQUAL_GOTO i1 0 wx
   PRINT pkt i
>wx:
  GEO_PT_IS_SELECTED wald_obj_name i
  GET_RESULT res
  IF_STR_EQUAL_GOTO res NEIN weiter2
   

       SET_VAR neu_name tmp
       SET_VAR found 0
       SET_VAR j 0
       KP_EXIST neu_name
       GET_RESULT res
       IF_STR_NOT_EQUAL_GOTO res JA name_ok
>do_while:
	ADD_STR neu_name _ j
	GET_RESULT neu_name
	KP_EXIST neu_name
	GET_RESULT res
	IF_STR_EQUAL_GOTO res NEIN name_ok
	ADD j 1
	GET_RESULT j
	GOTO do_while
>name_ok:
; jetzt neuen körper auf koordinaten von 
   COPY_WORD neu_name 1
   GET_RESULT new
   KP_DOPPELN kp new
   ADD nc 1
   GET_RESULT nc
   PRINT Kopie nc
   GEO_GET_PT wald_obj_name i
   GET_RESULT res
   COPY_WORD res 1
   GET_RESULT x  
   COPY_WORD res 2
   GET_RESULT y  
   COPY_WORD res 3
   GET_RESULT z  
; Punkt-koordinaten von <name> ins koordsystem von kp umwandeln
   GEO_PT_FROM_TO  wald_obj_name x y z kp_drei
   GET_RESULT res
   COPY_WORD res 1
   GET_RESULT x  
   COPY_WORD res 2
   GET_RESULT y  
   COPY_WORD res 3
   GET_RESULT z  
    RAND
    GET_RESULT res
    MUL res 360
    GET_RESULT wi
    KP_BEWEGE_NACH new x y z
    KP_DREHE new 5 wi
    KP_LOESCHEN new
>weiter2:
    IF_EQUAL_GOTO nc ncopys loop_fertig
    ADD i 1
    GET_RESULT i
	IF_NOT_EQUAL_GOTO i npts doloop
    
>loop_fertig:


GET_NOBJEKTE
GET_RESULT nobj1

KP_NEU name
SUB nobj1 1
GET_RESULT nobj2
KP_OBJ_VONBIS nobj nobj2
KP_FERTIG

RETURN 1
