import rhinoscriptsyntax as rs
import random

### erster versuch
# grosse dichte wolken

def erstelle_wolke(mittelpunkt, kugel_anzahl=6, basis_radius=9.0, streuung=3.0):
    """
    erstelle_wolke erzeugt kugeln die zusammen wolke bilden
    
    mittelpunkt: (x, y, z) koordinaten von wolke
    kugel_anzahl: anzahl der kugeln pro wolke
    basis_radius: durchschnittlicher radius der kugeln
    streuung: wie weit kugeln verteilt sind
    """
    kugeln = []

    for i in range(kugel_anzahl):
        # zufaellige verschiebung jeder Kugel relativ zum mittelpunkt
        x = mittelpunkt[0] + random.uniform(-streuung, streuung)
        y = mittelpunkt[1] + random.uniform(-streuung, streuung)
        z = mittelpunkt[2] + random.uniform(-streuung * 0.3, streuung * 0.3)



        radius = random.uniform(basis_radius * 0.8, basis_radius * 1.3)



        # kugel 
        kugel = rs.AddSphere((x, y, z), radius)
        kugeln.append(kugel)

    return kugeln


# wolkenfeld erzeugen quadratisch vier mal vier


wolken = []


reihe_anzahl = 4    # zeilen
spalte_anzahl = 4   # spalten



abstand_x = 12      # abstand der wolken in x
abstand_y = 12      # abstand der wolken in y

start_x = 0
start_y = 0
hoehe = 45          # z

for i in range(reihe_anzahl):
    for j in range(spalte_anzahl):

        wolke_x = start_x + j * abstand_x
        wolke_y = start_y + i * abstand_y
        wolke_z = hoehe

        # wolke 
        wolke = erstelle_wolke(
            mittelpunkt=(wolke_x, wolke_y, wolke_z),
            kugel_anzahl=6,
            basis_radius=9.0,
            streuung=3.0
        )

        wolken.append(wolke)

print("quadratisches wolkenfeld erzeugt")



##### step zwei 

# grundriss bodenplatte oberhalb der wolken
# mittelpunkt des viermalvier feldes berechnen
haus_x = start_x + (spalte_anzahl - 1) * abstand_x / 2
haus_y = start_y + (reihe_anzahl - 1) * abstand_y / 2
haus_z = hoehe + 18   # hoehe ueber den wolken

# groesse von zukuenftigen haus 6 m x 4 m
halb_laenge = 3  # 6 m / 2
halb_breite = 2  # 4 m / 2

# quader fuer hausplattform erzeugen also halt dicke
plattform = rs.AddBox([
    (haus_x - halb_laenge, haus_y - halb_breite, haus_z),
    (haus_x + halb_laenge, haus_y - halb_breite, haus_z),
    (haus_x + halb_laenge, haus_y + halb_breite, haus_z),
    (haus_x - halb_laenge, haus_y + halb_breite, haus_z),
    (haus_x - halb_laenge, haus_y - halb_breite, haus_z + 1),
    (haus_x + halb_laenge, haus_y - halb_breite, haus_z + 1),
    (haus_x + halb_laenge, haus_y + halb_breite, haus_z + 1),
    (haus_x - halb_laenge, haus_y + halb_breite, haus_z + 1)
])

print("hausplattform ueber dem wolkenfeld")

### mit der bodenplatte bin ich zufrieden sie befindet sich 45m in der luft und ist 6 mal 4 gross was denke ist sehr realistsich fuer eine darin lebende frau sein kann jedoch mag ich die form der wolken nicht es sieht unnatuerlich aus
#### ich faende es besser wenn die wolken random angeordnet sind und es etwas lebhafter aussieht
### weiters denke ich auch dass ich eine eigene library benoetigen werde vor allem weil ich auch rendern werde 




