#verbindung vom zentrum zum punkt auf den Radius 
#selbst erfundene definition - aufgaben

import rhinoscriptsyntax as rs
import random, time, sys
##############################

rs.EnableRedraw(0)  #beschnleunigt den Vorgang
rs.DeleteObjects (rs.AllObjects())


abst = 5.5 #wie gross soll mein wuerfelhaufen sein
radiusX = 10.5
#for i in range(1001):
    #cor = [random.uniform(-abst, abst), random.uniform(-abst, abst), random.uniform(-abst, abst)]              #damit ich einen wuerfel random funktionieren lasse
    #rs.AddPoint(cor)
    
    
#rs.AddSphere ([0,0,0], radiusX)     #definition eines radius, aber auch die 10.5 radiusX
#rs.AddPoint(cor)

#wir suchen uns den vektor vom mittelpunkt - ist hier eigentlich die koordinate selbst
#vec2pt = cor
#uni_vec = rs.Vecotorunitize( cor)
#vec_sph = rs.VectorScale(uni_vec, radiusX)  #skaliert auf radiusX
#rs.AddLine (cor, vec_sph)                   #von cor nach vec_sph
#rs.AddPoint (vec_sph)

#wenn man es fur alle koordinaten machen moechte, dann muss mann es fuer alle anlegen

#wie die definition heissen soll
#damit die definition weiss was passiert, ruecke ich mit den punkten rein 
#def coords2sphere

def coords2sphere (myRadius, anzPts, makeCurves, mindesZ):
    coordsOnSph = []
    for i in range(anzPts):
        cor = [random.uniform(-abst, abst), random.uniform(-abst, abst), random.uniform(-abst, abst)]              #damit ich einen wuerfel random funktioniert
        rs.AddPoint(cor)
        vec2pt = cor
        uni_vec = rs.VectorUnitize( cor )
        vec_sph = rs.VectorScale(uni_vec, myRadius)     #skaliert auf radiusX oder mysphere, da kann ich selbst definieren, muss aber fuer myRadius ein argument eingeben
        if makeCurves and cor[2] > mindesZ:
            rs.AddLine (cor, vec_sph)                       #von cor nach vec-sph
        if cor[2] > mindesZ:                                #wenn z koordinate grosser ist als 2, dann sollen die punkte ausgefuehrt werden -definiert wird Z indem ich es in die eckige klammer setze
            #rs.AddPoint (vec_sph)
            coordsOnSph.append(vec_sph)                     #bestimmte punkte definieren mittels einer leeren liste, weelche oben definiert ist
     #rs.AddPoint(coordsOnSph)
    return coordsOnSph

coords = coords2sphere(10.8,1001,1, 3.1)          #hier gebe ich fuer myradius, anzpts, makecurves einen befehl - er macht zb linien zwischen punkte, wenn ich 1 eingebe und wenn ich 0 eingebe, dann nicht mehr

rs.AddCurve(coords, 1)
rs.AddPoints(coords2sphere (10.8,1001,1, 3.1) )

#x=0, y=1, z=2 - in dieser koordinatenreihenfolge stehen die punkte - daher auch der if befehl mit cor[]

rs.ZoomExtents()
