# -*- coding: utf-8 -*- import rhinoscriptsyntax as rs #rs.DeleteObjects(rs.AllObjects()) # Alle vorherigen Objekte löschen # Parameter l_fassade = 800 # Laenge der Fassade in cm h_fassade = 590 # Hoehe der Fassade in cm num_segments = 10 # Anzahl der Segmente für die Unterteilung (4 Punkte + 1 Anfangspunkt) step = 5 # Schrittweite der Verschiebung min_shift = 5 # Minimale Verschiebung max_shift = 20 # Maximale Verschiebung # Erste Linie auf der Grundebene zeichnen start_point = (0, 0, 0) # Anfangspunkt der Linie end_point = (0, l_fassade, 0) # Endpunkt der Linie line1 = rs.AddLine(start_point, end_point) # Funktion zur Erzeugung und Extrusion der Elemente def create_element(start_shift, i, total_shift_accumulated): # Zweite Linie in z-Richtung vom Anfangspunkt der ersten Linie z_point = (start_point[0], start_point[1], start_point[2] + h_fassade) line2 = rs.AddLine(start_point, z_point) # Linie unterteilen in 5 Punkte (4 Segmente) division_points = rs.DivideCurve(line2, num_segments) # Anfangswerte für die Verschiebung current_shift = min(start_shift, max_shift) # Sicherstellen, dass der Startwert nicht über max_shift hinausgeht increasing = True # Verschiebungsrichtung shifted_points = [] for point in division_points: # Verschiebung berechnen (in X-Richtung) vector = (current_shift, 0, 0) new_point = rs.PointAdd(point, vector) shifted_points.append(new_point) rs.AddPoint(new_point) # Visualisierung des verschobenen Punkts # Verschiebungswert für den nächsten Punkt anpassen if increasing: current_shift += step if current_shift >= max_shift: # Maximalwert erreicht current_shift = max_shift increasing = False else: current_shift -= step if current_shift <= min_shift: # Minimalwert erreicht current_shift = min_shift # Sicherstellen, dass der Wert nicht unter 5 geht increasing = True # Verbinde die verschobenen Punkte mit einer neuen Kurve shifted_curve = rs.AddInterpCurve(shifted_points) # Punkte für die geschlossene Kurve sammeln points_for_curve = rs.DivideCurve(line2, num_segments) # Punkte der vertikalen Linie points_for_curve += shifted_points[::-1] # Umgekehrte verschobene Punkte hinzufügen points_for_curve.append(points_for_curve[0]) # Kurve schließen # Erstellen der geschlossenen Kurve closed_curve = rs.AddInterpCurve(points_for_curve, degree=3) # Fläche aus der geschlossenen Kurve erzeugen if rs.IsCurveClosed(closed_curve): surface = rs.AddPlanarSrf(closed_curve) if surface and len(surface) > 0: # Überprüfen, ob eine gültige Fläche erzeugt wurde print("Planare Fläche für Element {} erstellt.".format(i+1)) # Extrusion der Fläche extrusion_vector = (0, -5, 0) # Vektor für die Extrusion extruded_body = rs.ExtrudeSurface(surface[0], rs.AddLine((0, 0, 0), extrusion_vector)) if extruded_body: # Verschiebe den extrudierten Körper um die Y-Verschiebung rs.MoveObject(extruded_body, (0, total_shift_accumulated , 0)) # Verschiebung entlang Y-Achse rs.ObjectColor(extruded_body, (200, 100, 50)) # Farbe setzen else: print("Fehler bei der Extrusion für Element {}.".format(i+1)) else: print("Fehler: Keine gültige Fläche für Element {} erstellt.".format(i+1)) else: print("Die Kurve ist nicht geschlossen für Element {}.".format(i+1)) # Lösche alle Hilfselemente (Linien, Punkte, Kurven) rs.DeleteObject(line2) # Lösche die vertikale Linie rs.DeleteObject(shifted_curve) # Lösche die verschobene Kurve rs.DeleteObject(closed_curve) # Lösche die geschlossene Kurve rs.DeleteObject(surface[0]) # Lösche die Fläche # Erzeuge jedes Element mit unterschiedlichen Startverschiebungen und Rhythmus start_shifts = [5, 10, 15, 25] # Die Y-Startverschiebungen für die vier Elemente, beginnt jetzt bei 5 rhythm = [0, 1, 2, 3, 2, 1] # Rhythmus der Reihenfolge (1-2-3-4-3-2-1) total_shift_accumulated1 = 0 # Gesamtverschiebung, um sicherzustellen, dass der Endpunkt erreicht wird # Berechne, wie viele Zyklen des Rhythmus notwendig sind, um das Ende zu erreichen while total_shift_accumulated1 < l_fassade: for i in rhythm: if total_shift_accumulated1 >= l_fassade: # Wenn der Endpunkt erreicht ist, abbrechen break current_shift = start_shifts[i] total_shift_accumulated1 += current_shift # Gesamtverschiebung erhöhen print("Erzeuge Element {}...".format(i+1)) create_element(current_shift, i, total_shift_accumulated1)