###hue3 
###lisa fixl 
###dm2
##############################
import rhinoscriptsyntax as rs
import random, time, sys   ###                                              
sys.path.append("P:/")     ### add path where "DM_lib.py" can be found !!!                                              
sys.path.append("P:/DM2/")     ### add path where "DM_lib.py" can be found !!!                                              
sys.path.append("P:/WWW/limafi/dm2")     ### add path where "DM_lib.py" can be found !!!                                              
import DM_lib as dm        ### reload(dm)    
############################## 



    
    

###kugel 1

def pntRandVec(min_val, max_val):
    return [random.uniform(min_val, max_val), random.uniform(min_val, max_val), random.uniform(min_val, max_val)]

rad = 5.0
vec = [rad, 0, 0]
rs.AddPoint(vec)

anz = 32 * 3
deltaangle = 360 / anz

center = [5, 3, 7]

#punke
for i in range(2000):
    vecX = rs.VectorRotate(vec, deltaangle * i, pntRandVec(-1, 1))
    vecX = rs.VectorScale(vecX, random.uniform(0, 1))
    vecX = rs.VectorAdd(vecX, center)

    point = rs.AddPoint(vecX)

#farbe
    color = [0, 0, random.randint(100, 255)]  # Blau
    rs.ObjectColor(point, color)


###kugel 2

rad2 = 7.0
vec2 = [rad2, 0, 0]
center2 = [-4, 3, -7]  
anz2 = 32 * 4
deltaangle2 = 360 / anz2
rs.AddPoint(vec2)

for i in range(2000):
    vecX2 = rs.VectorRotate(vec2, deltaangle2 * i, pntRandVec(-1, 1))
    vecX2 = rs.VectorScale(vecX2, random.uniform(0, 1))
    vecX2 = rs.VectorAdd(vecX2, center2)
    point2 = rs.AddPoint(vecX2)
    color2 = [0, random.randint(100, 255), 0]  
    rs.ObjectColor(point2, color2)


###kugel 3

rad3 = 3.0
vec3 = [rad3, 0, 0]
center3 = [1, 6, 2]  
anz3 = 32 * 4
deltaangle3 = 360 / anz3
rs.AddPoint(vec3)

for i in range(2000):
    vecX3 = rs.VectorRotate(vec3, deltaangle3 * i, pntRandVec(-1, 1))
    vecX3 = rs.VectorScale(vecX3, random.uniform(0, 1))
    vecX3 = rs.VectorAdd(vecX3, center3)
    point3 = rs.AddPoint(vecX3)
    color3 = [random.randint(100, 255), 0, 0]  
    rs.ObjectColor(point3, color3)



###wuerfel
# Startparameter
anz2 = 10  # Anzahl der Wuerfel
base_side_length = 7.0  # Anfangsgroesse des Wuerfels
growth_factor = 1.5  # Wachstumsfaktor des Wuerfels
center = [0, 0, 0]  

# Punkte innerhalb des Wuerfels
num_random_points = 3000  

# Durchlaufe die Anzahl der Wuerfel
for i in range(anz2):
    # Berechne die neue Groesse exponentiell
    side_length = base_side_length * (growth_factor ** i)  # Exponentielles Wachstum der Groesse
    half_length = side_length / 2

    # Vektoren der 8 Ecken
    base_vectors = [
        [half_length, half_length, half_length],
        [-half_length, half_length, half_length],
        [-half_length, -half_length, half_length],
        [half_length, -half_length, half_length],
        [half_length, half_length, -half_length],
        [-half_length, half_length, -half_length],
        [-half_length, -half_length, -half_length],
        [half_length, -half_length, -half_length]
    ]

    # Eckpunkte verschieben
    vertices = [rs.VectorAdd(vec, center) for vec in base_vectors]

    # Fuege die Eckpunkte hinzu
    rs.AddPoints(vertices)

    # Fuege die zufaelligen Punkte innerhalb des Wuerfels hinzu
    for _ in range(num_random_points):
        x = random.uniform(-half_length, half_length) + center[0]
        y = random.uniform(-half_length, half_length) + center[1]
        z = random.uniform(-half_length, half_length) + center[2]
        
        rs.AddPoint([x, y, z])
