################################################################################ import rhinoscriptsyntax as rs import random as rd import sys import math sys.path.append("P:\\WWW\\mraontu\\dm2") import DM_lib as dm reload(dm) for lay in rs.LayerNames(): rs.PurgeLayer(lay) # neuen layer dm.newEmptyLayer("hu_03_gr2_manuel", color=[0, 0, 0]) rs.ShowGrid(view="Perspective", show=0) rs.ShowGridAxes(view="Perspective", show=0) rs.ViewDisplayMode(view="Perspective", mode=None) rs.DeleteObjects(rs.AllObjects()) rs.EnableRedraw(False) ############################## parameter ####################################### rad = 12 #rd.uniform(1.0, 6.0) # radius punkte/vektoren anz_rotation = 50 # anzahl pts pro kugel spiral_size = 20 # z z_scale_factor = 5 #rd.uniform(2.0, 8.0) # skalierung z anz_spiral = 24 # anzahl punkte spirale num_turns = 4 #rd.uniform(2.0, 12.0) # windungen radius = spiral_size * 2 # spiralenradius sphere_radius = 2 spehre_farbe = [0, 0, 255]#[255, 215, 0] """ # z achse zeichnen start = [0, 0, - (spiral_size * z_scale_factor)] end = [0, 0, (spiral_size * z_scale_factor)] #rs.AddCurve() rs.ObjectColor(rs.AddLine(start , end),[0, 0, 255]) """ ########################### spirale erzeugen ################################### delta_angle = 360 / anz_rotation # rotationswinkel spiral_points = [] dot_pts = [] for i in range(anz_spiral): # berechnung der winkelposition t entlang der spirale t = i / float(anz_spiral) * (num_turns * 2 * math.pi) # turns * 360 grad # berechne x, y und z des punkts entlang der spirale x = radius * math.cos(t) y = radius * math.sin(t) z = (t / (num_turns * 2 * math.pi) - 0.5) * spiral_size * 1.5 * z_scale_factor spiral_point = [x, y, z] spiral_points.append(spiral_point) # liste hinzu point_id = rs.AddPoint(spiral_point) # spiralenpunkt anzeigen sphere_id = rs.AddSphere(spiral_point, sphere_radius) rs.ObjectColor(sphere_id, spehre_farbe) rs.ObjectColor(point_id, spehre_farbe) dot_pts.append(point_id) ######################### farbverlauf chat cpt ################################# min_z = min(pt[2] for pt in spiral_points) max_z = max(pt[2] for pt in spiral_points) start_color = [75, 0, 130] # dunkles Lila (RGB) end_color = [0, 0, 255] # Blau (RGB) def interpolate_color(z, min_z, max_z, start_color, end_color): t = max(0, min(1, (z - min_z) / float(max_z - min_z))) # normalisierung auf [0, 1] return [max(0, min(255, int(start_color[i] + t * (end_color[i] - start_color[i])))) for i in range(3)] ########################## farbverlauf chat cpt ################################ ############################ kugel vektors ##################################### for spiral_point in spiral_points: vec = [rad, 0, 0] # ausgangsvektor for i in range(anz_rotation): rotation_axis = [rd.uniform(-1, 1), rd.uniform(-1, 1), rd.uniform(-1, 1)] # random rotationsvektor rotated_vec = rs.VectorRotate(vec, delta_angle * i, rotation_axis) # vec rotate, um pts zu erzeugen scale_factor = 1 #rd.uniform(0.5, 2.0) # kugel vektor skalieren scaled_vec = rs.VectorScale(rotated_vec, scale_factor) ### punkt verschieben, spirale platzieren translated_point = rs.PointAdd(spiral_point, scaled_vec) point_id = rs.AddPoint(translated_point) # verschobener punkt anzeigen #rs.ObjectColor(point_id, [0, 0, 255]) # farbe color = interpolate_color(translated_point[2], min_z, max_z, start_color, end_color) rs.ObjectColor(point_id, color)# farbeverlauf zuweisen ### vektorlinien darstellen vec_line = rs.AddLine(spiral_point, translated_point) rs.CurveArrows(vec_line, 2) # pfeile rs.ObjectColor(vec_line, color) # farbverlauf zuweisen #dm.PointRadius(displayModeX=0, rad=2, styl=1) rs.EnableRedraw(True) rs.ZoomExtents() # prints print rad ,"radius pts/vec" total_points_red = len(spiral_points) print total_points_red, "pts spirale" total_points_blue = len(dot_pts) print (total_points_blue * total_points_red), "pts obj" print "windungen:", num_turns print "fin"