############################## ### DM2_w24 hu_03_setUp ### ### _diag / 2024 10 17 ### ############################## import rhinoscriptsyntax as rs import random, time, sys ### sys.path.append("P:/WWW/zargut2406/lib") ### add path where "DM_lib.py" can be found !!! import DM_lib as dm ### reload(dm) ############################## rs.UnitSystem(3) rs.ShowGrid(view=None, show=0) rs.ShowGridAxes(view=None, show=0) rs.ViewDisplayMode(view=None, mode="Wireframe") rs.EnableRedraw(0) dm.PointRadius(displayModeX=0, rad=3, styl=1) rs.DeleteObjects(rs.AllObjects()) ###################################### anz = random.choice( range(2**4, 2**8, 4) ) dm.allCoords = dm.setUp_hu_03( anz ) coordsCir = dm.allCoords[0] ### calling def from DM_lib to get *new* set of coords coordsCub = dm.allCoords[1] ### calling def from DM_lib to get *new* set of coords ###################################### randomVec = [random.uniform(-30,30) for i in range(3)] coordsCub = [rs.VectorRotate(cor, randomVec[0], randomVec) for cor in coordsCub] coordsCir = [rs.VectorRotate(cor, randomVec[0], randomVec) for cor in coordsCir] siz = rs.Distance( coordsCub[0], coordsCub[1] ) ### edge length of cubus #dm.textDots( coordsCub ) #rs.AddCurve( coordsCub, 1 ) #rs.AddCurve( coordsCir, 1 ) #dm.textDots( coordsCir ) anz = len(coordsCub) print "*** anz =", anz print "*** siz =", round(siz, 2), "/ edge lenght =", round(siz, 2),"*",int(anz/4),"=", round(siz*anz/4, 2) print "*** **********\n" ### here we go: import rhinoscriptsyntax as rs import math # Parameter - Outer circle center = (0, 0, 0) radius = 10 num_circles = 23 # Kreise um das Zentrum rotieren und erstellen for i in range(num_circles): # Winkel fuer die Drehung jedes Kreises angle = i * (math.pi * 2 / num_circles) # Normalenvektor berechnen, um den Kreis in seiner eigenen Ebene zu platzieren normal = (math.cos(angle), math.sin(angle), 0) # Ebene mit dem gegebenen Mittelpunkt und Normalenvektor erzeugen plane = rs.PlaneFromNormal(center, normal) # Kreis erstellen circle = rs.AddCircle(plane, radius) # Parameter - inner circle center = (0, 0, 0) # Mittelpunkt aller Kreise radius = 7 # Radius der Kreise num_circles = 5 # Anzahl der Kreise # Kreise erstellen und in gruen umfaerben for i in range(num_circles): # Winkel fuer die Drehung jedes Kreises angle = i * (math.pi * 2 / num_circles) # Normalenvektor berechnen, um den Kreis in seiner eigenen Ebene zu platzieren normal = (math.cos(angle), math.sin(angle), 0) # Ebene mit dem gegebenen Mittelpunkt und Normalenvektor erzeugen plane = rs.PlaneFromNormal(center, normal) # Kreis erstellen circle = rs.AddCircle(plane, radius) # Farbe auf gruen setzen (RGB: 0, 255, 0) rs.ObjectColor(circle, (0, 255, 0)) curve_id = rs.GetObject("Waehlen Sie eine Kurve aus, um Punkte zu platzieren", rs.filter.curve) # ueberpruefen, ob eine gultige Kurve ausgewaehlt wurde if curve_id: num_points = 10 # Anzahl der Punkte, die auf der Kurve platziert werden sollen # Laenge der Kurve berechnen curve_length = rs.CurveLength(curve_id) # Punkte auf der Kurve randomisiert platzieren for _ in range(num_points): # Zufaelligen Parameter auf der Kurve generieren random_param = random.uniform(0, 1) * curve_length # Punkt auf der Kurve an der zufaelligen Parameterposition erhalten point = rs.EvaluateCurve(curve_id, random_param) # Punkt hinzufugen rs.AddPoint(point) else: print("Keine gueltige Kurve ausgewaehlt.") # Parameter radius = 10 # Radius der Kreislinie num_cubes = 10 # Anzahl der erstellten Quader (Satelliten) cube_size = 0.5 # Kantenlangen der Satelliten (in cm) # Eine kreisrunde Kurve erstellen circle = rs.AddCircle((0, 0, 0), radius) # uberprufen, ob die Kreislinie erfolgreich erstellt wurde if circle: for _ in range(num_cubes): # Zufalligen Winkel fur die Position auf dem Kreis generieren angle = random.uniform(0, 2 * math.pi) # Koordinaten auf dem Kreis berechnen x = radius * math.cos(angle) y = radius * math.sin(angle) z = 0 # Z-Position fur den Boden der Quader # Eckpunkte des Quaders berechnen points = [ (x - cube_size / 2, y - cube_size / 2, z), # Punkt 0 (x + cube_size / 2, y - cube_size / 2, z), # Punkt 1 (x + cube_size / 2, y + cube_size / 2, z), # Punkt 2 (x - cube_size / 2, y + cube_size / 2, z), # Punkt 3 (x - cube_size / 2, y - cube_size / 2, z + cube_size), # Punkt 4 (x + cube_size / 2, y - cube_size / 2, z + cube_size), # Punkt 5 (x + cube_size / 2, y + cube_size / 2, z + cube_size), # Punkt 6 (x - cube_size / 2, y + cube_size / 2, z + cube_size), # Punkt 7 ] # Linien zwischen den Punkten erstellen fuer Bildung Quader (Satel) edges = [ # Boden rs.AddLine(points[0], points[1]), rs.AddLine(points[1], points[2]), rs.AddLine(points[2], points[3]), rs.AddLine(points[3], points[0]), # Oberseite rs.AddLine(points[4], points[5]), rs.AddLine(points[5], points[6]), rs.AddLine(points[6], points[7]), rs.AddLine(points[7], points[4]), # Verbindungen zwischen Ober- und Unterseite rs.AddLine(points[0], points[4]), rs.AddLine(points[1], points[5]), rs.AddLine(points[2], points[6]), rs.AddLine(points[3], points[7]), ] else: print("Die Kreislinie konnte nicht erstellt werden.") ################ rs.ZoomExtents()