import rhinoscriptsyntax as rs allobj = rs.AllObjects() rs.DeleteObjects(allobj) ############## #parameters ############## thick_boden= 2.8 height_balken= 5.5 einzug= 0.2 dis_col= 6 #distance between columns extrusion_width = 2; height = 4 height1 = 32 start_x = 0 start_z = 0 y_offset = 10 #offset distance along y axis extrusions = [] # Store all extrusions to rotate them later for i in range(4): #4 columns each side points = [ [0, i * y_offset, 0], [thick_boden, i * y_offset, 0], [thick_boden-einzug, height_balken-einzug + i * y_offset, 0], [thick_boden, height_balken + i * y_offset, 0], [thick_boden+dis_col, height_balken + i * y_offset, 0], [thick_boden+dis_col, i * y_offset, 0], [thick_boden+dis_col+thick_boden/1.5, i * y_offset, 0], [thick_boden+dis_col+thick_boden/1.5, height_balken+thick_boden/1.5 + i * y_offset, 0], [0, height_balken+thick_boden/1.5 + i * y_offset, 0], [(-dis_col)*2, height_balken*2.8 + i * y_offset, 0], [(-dis_col)*2, height_balken*3+thick_boden/1.5 + i * y_offset, 0], [(-dis_col)*2-thick_boden/1.5, height_balken*3+thick_boden/1.5 + i * y_offset, 0], [(-dis_col)*2-thick_boden/1.5, height_balken*3-thick_boden/1.5 + i * y_offset, 0], [0, height_balken + i * y_offset, 0], [0, i * y_offset, 0]] col_line = rs.AddPolyline(points) rs.CloseCurve(col_line) # Ensure the curve is closed if col_line: rs.RotateObject(col_line, (0, i * y_offset, 0), 90, (1, 0, 0)) # Rotate extrusion = rs.ExtrudeCurveStraight(col_line, (0, i * y_offset, 0), (0, i * y_offset + extrusion_width, 0)) if extrusion: rs.CapPlanarHoles(extrusion) # Ensure the extrusion is capped and solid extrusions.append(extrusion) if extrusion: rs.DeleteObject(col_line) mirrorOffset = (32 + 2*10.667)/2; xRotate = 32/2+10.667; yRotate = 32/2; copied_extrusions = [rs.CopyObject(extrusion) for extrusion in extrusions] # Define the mirror plane for 3D mirroring (X, Y, Z reflection) mirror_plane_start = (mirrorOffset, 0, 0) # Define a point on the mirror plane mirror_plane_end = (mirrorOffset, 1, 0) # Another point to define the plane direction mirrored_extrusions = [rs.MirrorObject(extrusion, mirror_plane_start, mirror_plane_end) for extrusion in copied_extrusions] if mirrored_extrusions: extrusions.extend(mirrored_extrusions) rotated_extrusions = [] for extrusion in extrusions: copied_extrusion = rs.CopyObject(extrusion) rs.RotateObject(copied_extrusion, (xRotate, yRotate, 0), 90, (0, 0, 1)) rotated_extrusions.append(copied_extrusion) extrusions.extend(rotated_extrusions) ########### #columns to layer1 ########### layer_name = "Layer1" if not rs.IsLayer(layer_name): rs.AddLayer(layer_name) if extrusions: rs.ObjectLayer(extrusions, layer_name) ############## #staircase ############## points0 = [(thick_boden+dis_col+thick_boden/1.5,y_offset*2-4,0), (thick_boden+dis_col+thick_boden/1.5,0,0), (y_offset*2-4+thick_boden+dis_col+thick_boden/1.5,0,0)] polyline=rs.AddPolyline(points0) if polyline: center = (26.667, 16, 0) rotation_angles = [90, 180, 270] copied_polylines = [polyline] for angle in rotation_angles: copied = rs.RotateObject(rs.CopyObject(polyline), center, angle, (0, 0, 1)) if copied: copied_polylines.append(copied) joined_curve = rs.JoinCurves(copied_polylines) if joined_curve: extrusion_vector = (0, 0, height1) solid = rs.ExtrudeCurveStraight(joined_curve,(0,0,0), extrusion_vector) if solid: capped_solid = rs.CapPlanarHoles(solid) if capped_solid: rs.DeleteObject(polyline) for copied in copied_polylines: rs.DeleteObject(copied) rs.DeleteObject(joined_curve) ###################################### #3rd floor ###################################### points1 = [((-dis_col)*2,2*y_offset-4, height_balken*2.8), ((-dis_col)*2,-11.072/2,height_balken*2.8), (-dis_col-extrusion_width,-11.072/2,height_balken*2.8), (-dis_col-extrusion_width,-11.072/2-5,height_balken*2.8), (-3,-11.072/2-5,height_balken*2.8), (-3,-11.072/2-5-3,height_balken*2.8), (0,-11.072/2-5-3,height_balken*2.8), (0,-11.072/2-5*2-3,height_balken*2.8), (5,-11.072/2-5*2-3,height_balken*2.8), (5,-11.072/2-5*2-3-4.131,height_balken*2.8), ((10.667+16),-11.072/2-5*2-3-4.131,height_balken*2.8)] polyline = rs.AddPolyline(points1) if polyline: center = (26.667, 16, 0) rotation_angles = [90, 180, 270] copied_polylines = [polyline] for angle in rotation_angles: copied = rs.RotateObject(rs.CopyObject(polyline), center, angle, (0, 0, 1)) if copied: copied_polylines.append(copied) joined_curve = rs.JoinCurves(copied_polylines) #offset_curve - inner curve if joined_curve: offset_distance = -0.2 offset_curve = rs.OffsetCurve(joined_curve, (0,0,0), offset_distance) #offset curve1 if joined_curve: offset_distance1 = -1 offset_curve1 = rs.OffsetCurve(joined_curve, (0,0,0), offset_distance1) if joined_curve: height = 4 extrusion_vector = (0, 0, height) solid = rs.ExtrudeCurveStraight(joined_curve,(0,0,0), extrusion_vector) if solid: capped_solid = rs.CapPlanarHoles(solid) extruded_objects = [] if offset_curve: height2 = -0.7 extrusion_vector2 = (0,0, height2) solid = rs.ExtrudeCurveStraight(offset_curve,(0,0,0), extrusion_vector2) if solid: capped_solid = rs.CapPlanarHoles(solid) if capped_solid: extruded_objects.append(capped_solid) rs.DeleteObject(offset_curve) if offset_curve1: height1 = 0.3 extrusion_vector1 = (0,0, height1) solid = rs.ExtrudeCurveStraight(offset_curve1,(0,0,0), extrusion_vector1) if solid: capped_solid = rs.CapPlanarHoles(solid) if capped_solid: extruded_objects.append(capped_solid) rs.DeleteObject(offset_curve1) if joined_curve: offset_distance1 = -1 offset_curve2 = rs.OffsetCurve(joined_curve, (0,0,0), offset_distance1) if offset_curve2: rs.MoveObject(offset_curve2, (0, 0, height)) if offset_curve2: height2 = 0.3 extrusion_vector2 = (0,0, height2) solid = rs.ExtrudeCurveStraight(offset_curve2,(0,0,0), extrusion_vector2) if solid: capped_solid = rs.CapPlanarHoles(solid) if capped_solid: extruded_objects.append(capped_solid) rs.DeleteObject(offset_curve2) if joined_curve: offset_distance1 = -0.2 offset_curve3 = rs.OffsetCurve(joined_curve, (0,0,0), offset_distance1) if offset_curve3: rs.MoveObject(offset_curve3, (0, 0, height)) if offset_curve3: height2 = 0.7 extrusion_vector2 = (0,0, height2) solid = rs.ExtrudeCurveStraight(offset_curve3,(0,0,0), extrusion_vector2) if solid: capped_solid = rs.CapPlanarHoles(solid) if capped_solid: extruded_objects.append(capped_solid) rs.DeleteObject(offset_curve3) ###################### #2nd floor ###################### #11.383 points2 = [(-5.667-0.333,(extrusion_width*2)+(2*y_offset-8), height_balken*2.8-2*extrusion_width), (-5.667-0.333,-5.334,height_balken*2.8-2*extrusion_width), (-0.333,-5.334,height_balken*2.8-2*extrusion_width), (-0.333,-5.334-5.667,height_balken*2.8-2*extrusion_width), (5.667-0.333,-5.334-5.667,height_balken*2.8-2*extrusion_width), (5.667-0.333,-5.334-5.667*2,height_balken*2.8-2*extrusion_width), ((extrusion_width*2)+(2*y_offset-8)+10.667,-5.334-5.667*2,height_balken*2.8-2*extrusion_width)] polyline2 = rs.AddPolyline(points2) if polyline2: center = (26.667, 16, 0) rotation_angles = [90, 180, 270] copied_polylines = [polyline2] # Original speichern for angle in rotation_angles: copied = rs.RotateObject(rs.CopyObject(polyline2), center, angle, (0, 0, 1)) if copied: copied_polylines.append(copied) joined_curve = rs.JoinCurves(copied_polylines) if joined_curve: for poly in copied_polylines: rs.DeleteObject(poly) #offset_curve - inner curve 2 if joined_curve: offset_distance = -0.2 offset_curve = rs.OffsetCurve(joined_curve, (0,0,0), offset_distance) #offset curve1 if joined_curve: offset_distance1 = -1 offset_curve1 = rs.OffsetCurve(joined_curve, (0,0,0), offset_distance1) #extrude if joined_curve: height = 4 extrusion_vector = (0, 0, height) solid = rs.ExtrudeCurveStraight(joined_curve,(0,0,0), extrusion_vector) if solid: capped_solid = rs.CapPlanarHoles(solid) if offset_curve1: height1 = 0.3 extrusion_vector1 = (0,0, height1) solid = rs.ExtrudeCurveStraight(offset_curve1,(0,0,0), extrusion_vector1) if solid: capped_solid = rs.CapPlanarHoles(solid) if capped_solid: extruded_objects.append(capped_solid) rs.DeleteObject(offset_curve1) if offset_curve: height2 = -0.7 extrusion_vector2 = (0,0, height2) solid = rs.ExtrudeCurveStraight(offset_curve,(0,0,0), extrusion_vector2) if solid: capped_solid = rs.CapPlanarHoles(solid) if capped_solid: extruded_objects.append(capped_solid) rs.DeleteObject(offset_curve) ############# #1st floor ############# points3 = [(0,2*y_offset-4,height_balken+thick_boden/1.5),(0,-2*extrusion_width,height_balken+thick_boden/1.5), (5,-2*extrusion_width,height_balken+thick_boden/1.5), (5,-2*extrusion_width-1.667,height_balken+thick_boden/1.5), (5+1.667,-2*extrusion_width-1.667,height_balken+thick_boden/1.5), (5+1.667,-2*extrusion_width-1.667-5,height_balken+thick_boden/1.5), (thick_boden+dis_col+thick_boden/1.5+2*y_offset-4,-2*extrusion_width-1.667-5,height_balken+thick_boden/1.5)] polyline3 = rs.AddPolyline(points3) if polyline3: center = (26.667, 16, 0) rotation_angles = [90, 180, 270] copied_polylines = [polyline3] # Original speichern for angle in rotation_angles: copied = rs.RotateObject(rs.CopyObject(polyline3), center, angle, (0, 0, 1)) if copied: copied_polylines.append(copied) joined_curve = rs.JoinCurves(copied_polylines) #offset_curve - inner curve if joined_curve: offset_distance = 0.2 offset_curve = rs.OffsetCurve(joined_curve, (0,0,0), offset_distance) #offset curve1 if joined_curve: offset_distance1 = 1 offset_curve1 = rs.OffsetCurve(joined_curve, (0,0,0), offset_distance1) if joined_curve: height = 4 extrusion_vector = (0, 0, height) solid = rs.ExtrudeCurveStraight(joined_curve,(0,0,0), extrusion_vector) if solid: capped_solid = rs.CapPlanarHoles(solid) extruded_objects = [] if offset_curve: height2 = -0.7 extrusion_vector2 = (0,0, height2) solid = rs.ExtrudeCurveStraight(offset_curve,(0,0,0), extrusion_vector2) if solid: capped_solid = rs.CapPlanarHoles(solid) if capped_solid: extruded_objects.append(capped_solid) rs.DeleteObject(offset_curve) if offset_curve1: height1 = 0.3 extrusion_vector1 = (0,0, height1) solid = rs.ExtrudeCurveStraight(offset_curve1,(0,0,0), extrusion_vector1) if solid: capped_solid = rs.CapPlanarHoles(solid) if capped_solid: extruded_objects.append(capped_solid) rs.DeleteObject(offset_curve1) ###################### #4th floor ###################### height = 4 z_value = height_balken * 2.8 + 2 * extrusion_width points2 = [ (-5.667 - 0.333, (extrusion_width * 2) + (2 * y_offset - 8), z_value), (-5.667 - 0.333, -5.334, z_value), (-0.333, -5.334, z_value), (-0.333, -5.334 - 5.667, z_value), (5.667 - 0.333, -5.334 - 5.667, z_value), (5.667 - 0.333, -5.334 - 5.667 * 2, z_value), ((extrusion_width * 2) + (2 * y_offset - 8) + 10.667, -5.334 - 5.667 * 2, z_value)] polyline3 = rs.AddPolyline(points2) if polyline3: center = (26.667, 16, 0) rotation_angles = [90, 180, 270] copied_polylines = [polyline3] # Original speichern for angle in rotation_angles: copied = rs.RotateObject(rs.CopyObject(polyline3), center, angle, (0, 0, 1)) if copied: copied_polylines.append(copied) joined_curve = rs.JoinCurves(copied_polylines) if joined_curve: for poly in copied_polylines: rs.DeleteObject(poly) #offset_curve - inner curve 2 if joined_curve: offset_distance = -0.2 offset_curve = rs.OffsetCurve(joined_curve, (0,0,0), offset_distance) if offset_curve: rs.MoveObject(offset_curve, (0, 0, height)) #offset curve1 if joined_curve: offset_distance1 = -1 offset_curve1 = rs.OffsetCurve(joined_curve, (0,0,0), offset_distance1) if offset_curve1: rs.MoveObject(offset_curve1, (0, 0, height)) ##extrude if joined_curve: extrusion_vector = (0, 0, height) solid = rs.ExtrudeCurveStraight(joined_curve,(0,0,0), extrusion_vector) if solid: capped_solid = rs.CapPlanarHoles(solid) if offset_curve1: height1 = 0.3 extrusion_vector1 = (0,0, height1) solid = rs.ExtrudeCurveStraight(offset_curve1,(0,0,0), extrusion_vector1) if solid: capped_solid = rs.CapPlanarHoles(solid) if capped_solid: extruded_objects.append(capped_solid) rs.DeleteObject(offset_curve1) #if offset_curve: height2 = 0.7 extrusion_vector2 = (0,0, height2) solid = rs.ExtrudeCurveStraight(offset_curve,(0,0,0), extrusion_vector2) if solid: capped_solid = rs.CapPlanarHoles(solid) if capped_solid: extruded_objects.append(capped_solid) rs.DeleteObject(offset_curve) ###################### #5th floor ###################### z_value = height_balken + thick_boden / 1.5 + 16.7; points3 = [ (0, 2 * y_offset - 4, z_value), (0, -2 * extrusion_width, z_value), (5, -2 * extrusion_width, z_value), (5, -2 * extrusion_width - 1.667, z_value), (5 + 1.667, -2 * extrusion_width - 1.667, z_value), (5 + 1.667, -2 * extrusion_width - 1.667 - 5, z_value), (thick_boden + dis_col + thick_boden / 1.5 + 2 * y_offset - 4, -2 * extrusion_width - 1.667 - 5, z_value)] polyline3 = rs.AddPolyline(points3) if polyline3: center = (26.667, 16, 0) rotation_angles = [90, 180, 270] copied_polylines = [polyline3] # Original speichern for angle in rotation_angles: copied = rs.RotateObject(rs.CopyObject(polyline3), center, angle, (0, 0, 1)) if copied: copied_polylines.append(copied) joined_curve = rs.JoinCurves(copied_polylines) if joined_curve: for poly in copied_polylines: rs.DeleteObject(poly) #offset_curve - inner curve 2 if joined_curve: offset_distance = 0.2 offset_curve = rs.OffsetCurve(joined_curve, (0,0,0), offset_distance) if offset_curve: rs.MoveObject(offset_curve, (0, 0, height)) #offset curve1 if joined_curve: offset_distance1 = 1 offset_curve1 = rs.OffsetCurve(joined_curve, (0,0,0), offset_distance1) if offset_curve1: rs.MoveObject(offset_curve1, (0, 0, height)) ##extrude if joined_curve: extrusion_vector = (0, 0, height) solid = rs.ExtrudeCurveStraight(joined_curve,(0,0,0), extrusion_vector) if solid: capped_solid = rs.CapPlanarHoles(solid) if offset_curve1: height1 = 0.3 extrusion_vector1 = (0,0, height1) solid = rs.ExtrudeCurveStraight(offset_curve1,(0,0,0), extrusion_vector1) if solid: capped_solid = rs.CapPlanarHoles(solid) if capped_solid: extruded_objects.append(capped_solid) rs.DeleteObject(offset_curve1) # #if offset_curve: height2 = 0.7 extrusion_vector2 = (0,0, height2) solid = rs.ExtrudeCurveStraight(offset_curve,(0,0,0), extrusion_vector2) if solid: capped_solid = rs.CapPlanarHoles(solid) if capped_solid: extruded_objects.append(capped_solid) rs.DeleteObject(offset_curve)