############################ HU_08 ############################ # LIB Sys import rhinoscriptsyntax as rs import sys sys.path.append("P:\\WWW\\mraontu\\dm2") import DM_lib as dm reload(dm) ############################ # Rhino Setup rs.UnitSystem(4) # km = 5, meters = 4, cm = 3 etc rs.ShowGrid(None, 0) rs.ShowGridAxes(None, 0) rs.ViewDisplayMode(rs.CurrentView(), "shaded") rs.DeleteObjects(rs.AllObjects()) rs.EnableRedraw(False) ############################ # Layer Setup osm curve_layer = dm.newEmptyLayer("Curves", color=[0, 0, 0]) polysrf_layer = dm.newEmptyLayer("Polysrf", color=[0, 0, 0]) ############################ # Datei importieren file_path = "C:\\Users\\rothl\\dm2\\3DM\\OSM_obj.3dm" # Probleme mit import crv list rs.Command("-_Import \"" + file_path + "\" _Enter", echo=False) ############################ # Base Curve object_id = "f57bacc3-f51d-4620-a4bc-d27d925c01ff" curve_layer = dm.newEmptyLayer("base_curves", color=[0, 0, 255]) points_layer = dm.newEmptyLayer("base_points", color=[255, 0, 0]) path_curve_layer = dm.newEmptyLayer("path_curves", color=[0, 255, 0]) base_crv_points = [] if rs.IsCurve(object_id): base_crv = rs.CopyObject(object_id)# copy of osm basecurve if base_crv: rs.ObjectLayer(base_crv, "base_curves") base_crv_pts = rs.CurvePoints(base_crv) # Eckpunkte if base_crv_pts: for pt in base_crv_pts: point_id = rs.AddPoint(pt) rs.ObjectLayer(point_id, "base_points") base_crv_points.append(point_id) # Path Curves def create_path_curves(points, layer_name, degree=1, x_offset=0, y_offset=0, z_offset=0, divisions=0): created_curves = [] divided_points = [] for i in range(len(points) - 1): p1_coords = rs.PointCoordinates(points[i]) p2_coords = rs.PointCoordinates(points[i + 1]) # Verschiebung p1_offset = [p1_coords[0] + x_offset, p1_coords[1] + y_offset, p1_coords[2] + z_offset] p2_offset = [p2_coords[0] + x_offset, p2_coords[1] + y_offset, p2_coords[2] + z_offset] # Kurve erstellen curve = rs.AddCurve([p1_offset, p2_offset]) if curve: rs.ObjectLayer(curve, layer_name) created_curves.append(curve) # Kurve teilen if divisions > 0: div_pts = rs.DivideCurve(curve, divisions, create_points=True) divided_points.extend(div_pts) return created_curves, divided_points path_layer = dm.newEmptyLayer("path_curves", color=[0, 255, 0]) base_points = base_crv_points[:3] # erste drei Punkte aus liste curves, helix_startpoints = create_path_curves(points=base_points,layer_name="path_curves",degree=1,x_offset=0,y_offset=0,z_offset=5,divisions=5) ### Doppelhelix ### def generate_double_helix(base_pt, spiral_size=28, z_scale_factor=1, anz_spiral=40, num_turns=4, radius=4, A_color=[0, 222, 0], B_color=[0, 150, 0], C_color=[0, 200, 0]): vecX = [radius, 0, 0] vecY = [-radius, 0, 0] spiral_points_1 = [] spiral_points_2 = [] # Spirale A for i in range(anz_spiral): angle = (360 / anz_spiral) * num_turns * i rotated_vecX = rs.VectorRotate(vecX, angle, [0, 0, 1]) # rotiert um Z z_shift = (i / float(anz_spiral)) * spiral_size * z_scale_factor rotated_vecX[2] = z_shift # Verschiebe relativ zu Basispunkt final_point = rs.VectorAdd(base_pt, rotated_vecX) spiral_points_1.append(final_point) point_A = rs.AddPoint(final_point) rs.ObjectLayer(point_A, "Helix") # helix layer rs.ObjectColor(point_A, A_color) # Spirale B for i in range(anz_spiral): angle = (360 / anz_spiral) * num_turns * i rotated_vecY = rs.VectorRotate(vecY, angle, [0, 0, 1]) # rotiert um Z z_shift = (i / float(anz_spiral)) * spiral_size * z_scale_factor rotated_vecY[2] = z_shift # Verschiebe relativ zu Basispunkt final_point = rs.VectorAdd(base_pt, rotated_vecY) spiral_points_2.append(final_point) point_B = rs.AddPoint(final_point) rs.ObjectLayer(point_B, "Helix") # helix layer rs.ObjectColor(point_B, B_color) # Verbindungen zwischen den Spiralen for i in range(len(spiral_points_1)): start = spiral_points_1[i] end = spiral_points_2[i] crv_verbindung = rs.AddLine(start, end) rs.ObjectLayer(crv_verbindung, "Helix_Connections") # connections layer rs.ObjectColor(crv_verbindung, C_color) # crv helix crv_A = rs.AddCurve(spiral_points_1, 1) rs.ObjectLayer(crv_A, "Helix") # helix layer rs.ObjectColor(crv_A, A_color) crv_B = rs.AddCurve(spiral_points_2, 1) rs.ObjectLayer(crv_B, "Helix") # helix layer rs.ObjectColor(crv_B, B_color) # helix_layer = dm.newEmptyLayer("Helix", color=[0, 222, 0]) connections_layer = dm.newEmptyLayer("Helix_Connections", color=[0, 150, 0]) # Doppelhelix an den Punkten for point in helix_startpoints: generate_double_helix(base_pt=point) ############################ dm.esc() rs.LayerVisible("Strassen",False) rs.LayerVisible("Projekt DNA",False) rs.LayerVisible("Polysrf",False) rs.EnableRedraw(True)