# Final assingment for Ponte 25 de Abril in Lisbon import rhinoscriptsyntax as rs import random as ran import flipped_classroom_lib as fc rs.DeleteObjects(rs.AllObjects()) rs.EnableRedraw(False) ########################################################################################################################################### # Aproximate Bridge dimensions for Ponte 25 de Abril in Lisbon height = 190 # total height - Adjusted for Ponte 25 de Abril bsize = 70 # Road width csize = 1980 # Length after the supports (m) dsize = bsize * 0.15 # Road thickness fsize = 20 # Y-value for support under the road xsize = 5 # X-value for support ysize = 10 # Middle part Z-value x= 100 xsize2 = 10 ########################################################################################################################################### #Train dimensions bsize2 = 10 csize2 = 1980 dsize2 = bsize * 0.08 bsize3 = 40 csize3 = 1980 dsize3 = bsize * 0.08 ########################################################################################################################################### #Dimensions top of pillar bsize4 = 67 bsize5 = 20 ########################################################################################################################################### # Create Street corners = [(0, 0, 0), (bsize, 0, 0), (bsize, csize, 0), (0, csize, 0), (0, 0, dsize), (bsize, 0, dsize), (bsize, csize, dsize), (0, csize, dsize)] roadway = rs.AddBox(corners) rs.MoveObject(roadway, [0, 0, bsize * 2.48148148]) ########################################################################################################################################### # 1. Part for Train under the street corners = [(0, 0, 0), (bsize2, 0, 0), (bsize2, csize2, 0), (0, csize, 0), (0, 0, dsize2), (bsize2, 0, dsize2), (bsize2, csize2, dsize2), (0, csize2, dsize2)] roadway = rs.AddBox(corners) rs.MoveObject(roadway, [0, 0, bsize2 * 14.5]) # 2. Part for Train under the street corners = [(0, 0, 0), (bsize2, 0, 0), (bsize2, csize2, 0), (0, csize2, 0), (0, 0, dsize2), (bsize2, 0, dsize2), (bsize2, csize2, dsize2), (0, csize2, dsize2)] roadway = rs.AddBox(corners) rs.MoveObject(roadway, [60, 0, bsize2 * 14.5]) # middle part train corners = [(0, 0, 0), (bsize3, 0, 0), (bsize3, csize3, 0), (0, csize3, 0), (0, 0, dsize3), (bsize3, 0, dsize3), (bsize3, csize3, dsize3), (0, csize3, dsize3)] roadway = rs.AddBox(corners) rs.MoveObject(roadway, [15, 0, bsize2 * 14.5]) ########################################################################################################################################### #Support 1 and 2 corners = [(0, 0, 0), (bsize + 8, 0, 0), (bsize + 8, bsize + 8, 0), (0, bsize + 8, 0), (0, 0, bsize * 0.3), (bsize + 8, 0, bsize * 0.3), (bsize + 8, bsize + 8, bsize * 0.3), (0, bsize + 8, bsize * 0.3)] support_base = rs.AddBox(corners) support_base_moved = rs.MoveObject(support_base, [-4, 315, -60]) ########################################################################################################################################### # Support - Pillar 1 and 2 corners = [(0, 0, 0), (xsize2, 0, 0), (xsize2, fsize, 0), (0, fsize, 0), (0, 0, bsize * 9.5), (xsize2, 0, bsize * 9.5), (xsize2, fsize, bsize * 9.5), (0, fsize, bsize * 9.5)] support_under_road = rs.AddBox(corners) support_under_road_moved = rs.MoveObject(support_under_road, [-2.5, 345, -500 * 0.1]) support_copy = rs.CopyObject(support_under_road_moved, [bsize - xsize, 0, 0]) rs.CopyObject([support_copy, support_under_road_moved, support_base_moved], [0, 1280, 0]) ########################################################################################################################################### #Elements on Top of Pillar # Support - Pillar 1 and 2 corners = [(0, 30, 0), (bsize4 + 8, 30, 0), (bsize4 + 8, bsize4 + -17, 0), (0, bsize4 + -17, 0), (0, 30, bsize4 * 0.3), (bsize4 + 8, 30, bsize4 * 0.3), (bsize4 + 8, bsize4 + -17, bsize4 * 0.3), (0, bsize4 + -17, bsize4 * 0.3)] support_base = rs.AddBox(corners) support_base_moved = rs.MoveObject(support_base, [-2.5, 315, 580]) rs.CopyObject([support_under_road_moved, support_base_moved], [0, 1280, 0]) #Elements on Top of Pillar # Support - Pillar 1 and 2 corners = [(0, 30, 0), (bsize5 + 8, 30, 0), (bsize5 + 8, bsize5 + -17, 0), (0, bsize5 + -17, 0), (0, 30, bsize5 * 1), (bsize5 + 8, 30, bsize5 * 1), (bsize5 + 8, bsize5 + -17, bsize5 * 1), (0, bsize5 + -17, bsize5 * 1)] support_base = rs.AddBox(corners) support_base_moved = rs.MoveObject(support_base, [-11.5, 338.5, 605]) rs.CopyObject([support_under_road_moved, support_base_moved], [0, 1280, 0]) #Elements on Top of Pillar # Support - Pillar 1 and 2 corners = [(0, 30, 0), (bsize5 + 8, 30, 0), (bsize5 + 8, bsize5 + -17, 0), (0, bsize5 + -17, 0), (0, 30, bsize5 * 1), (bsize5 + 8, 30, bsize5 * 1), (bsize5 + 8, bsize5 + -17, bsize5 * 1), (0, bsize5 + -17, bsize5 * 1)] support_base = rs.AddBox(corners) support_base_moved = rs.MoveObject(support_base, [51.5, 338.5, 605]) rs.CopyObject([support_under_road_moved, support_base_moved], [0, 1280, 0]) ########################################################################################################################################### #Cross-bracing under Street - Side one # Cross-bracing 1 corners = [(0, 0, -xsize / 2), (x, 0, -xsize / 2), (x, fsize, -xsize / 2), (0, fsize, -xsize / 2), (0, 0, xsize / 2), (x, 0, xsize / 2), (x, fsize, xsize / 2), (0, fsize, xsize / 2)] cross_brace = rs.AddBox(corners) rs.MoveObject(cross_brace, [0, 1625, 70 * 1.5]) cross_brace_rotated = rs.RotateObject(cross_brace, [0, 1625, bsize * 1.57407407], 45, axis=[0, 10, 0], copy=False) cross_brace_moved = rs.MoveObject(cross_brace_rotated, [bsize * 0.0555555556, 0, 30]) cross_brace_mirrored = rs.MirrorObject(cross_brace_moved, [bsize / 2, 0, 0], [bsize / 2, 10, bsize * 3.7037037], copy=True) # Cross-bracing 2 corners = [(0, 0, -xsize / 2), (x, 0, -xsize / 2), (x, fsize, -xsize / 2), (0, fsize, -xsize / 2), (0, 0, xsize / 2), (x, 0, xsize / 2), (x, fsize, xsize / 2), (0, fsize, xsize / 2)] cross_brace = rs.AddBox(corners) rs.MoveObject(cross_brace, [0, 1625, 70 * 1.5]) cross_brace_rotated = rs.RotateObject(cross_brace, [0, 1625, bsize * 1.57407407], 45, axis=[0, 10, 0], copy=False) cross_brace_moved = rs.MoveObject(cross_brace_rotated, [bsize * 0.0555555556, 0, -50]) cross_brace_mirrored = rs.MirrorObject(cross_brace_moved, [bsize / 2, 0, 0], [bsize / 2, 10, bsize * 3.7037037], copy=True) #Cross-bracing under Street - Side two # Cross-bracing 1 corners = [(0, 0, -xsize / 2), (x, 0, -xsize / 2), (x, fsize, -xsize / 2), (0, fsize, -xsize / 2), (0, 0, xsize / 2), (x, 0, xsize / 2), (x, fsize, xsize / 2), (0, fsize, xsize / 2)] cross_brace = rs.AddBox(corners) rs.MoveObject(cross_brace, [0, 345, bsize * 1.5]) cross_brace_rotated = rs.RotateObject(cross_brace, [0, 1625, bsize * 1.57407407], 45, axis=[0, 10, 0], copy=False) cross_brace_moved = rs.MoveObject(cross_brace_rotated, [bsize * 0.0555555556, 0, 30]) cross_brace_mirrored = rs.MirrorObject(cross_brace_moved, [bsize / 2, 0, 0], [bsize / 2, 10, bsize * 3.7037037], copy=True) # Cross-bracing 2 corners = [(0, 0, -xsize / 2), (x, 0, -xsize / 2), (x, fsize, -xsize / 2), (0, fsize, -xsize / 2), (0, 0, xsize / 2), (x, 0, xsize / 2), (x, fsize, xsize / 2), (0, fsize, xsize / 2)] cross_brace = rs.AddBox(corners) rs.MoveObject(cross_brace, [0, 345, bsize * 1.5]) cross_brace_rotated = rs.RotateObject(cross_brace, [0, 1625, bsize * 1.57407407], 45, axis=[0, 10, 0], copy=False) cross_brace_moved = rs.MoveObject(cross_brace_rotated, [bsize * 0.0555555556, 0, -50]) cross_brace_mirrored = rs.MirrorObject(cross_brace_moved, [bsize / 2, 0, 0], [bsize / 2, 10, bsize * 3.7037037], copy=True) #Cross-bracing above the Street - Side one # Cross-bracing 1 corners = [(0, 0, -xsize / 2), (x, 0, -xsize / 2), (x, fsize, -xsize / 2), (0, fsize, -xsize / 2), (0, 0, xsize / 2), (x, 0, xsize / 2), (x, fsize, xsize / 2), (0, fsize, xsize / 2)] cross_brace = rs.AddBox(corners) rs.MoveObject(cross_brace, [0, 1625, 70 * 1.5]) cross_brace_rotated = rs.RotateObject(cross_brace, [0, 1625, bsize * 1.57407407], 45, axis=[0, 10, 0], copy=False) cross_brace_moved = rs.MoveObject(cross_brace_rotated, [bsize * 0.0555555556, 0, 210]) cross_brace_mirrored = rs.MirrorObject(cross_brace_moved, [bsize / 2, 0, 0], [bsize / 2, 10, bsize * 3.7037037], copy=True) # Cross-bracing 2 corners = [(0, 0, -xsize / 2), (x, 0, -xsize / 2), (x, fsize, -xsize / 2), (0, fsize, -xsize / 2), (0, 0, xsize / 2), (x, 0, xsize / 2), (x, fsize, xsize / 2), (0, fsize, xsize / 2)] cross_brace = rs.AddBox(corners) rs.MoveObject(cross_brace, [0, 1625, 70 * 1.5]) cross_brace_rotated = rs.RotateObject(cross_brace, [0, 1625, bsize * 1.57407407], 45, axis=[0, 10, 0], copy=False) cross_brace_moved = rs.MoveObject(cross_brace_rotated, [bsize * 0.0555555556, 0, 340]) cross_brace_mirrored = rs.MirrorObject(cross_brace_moved, [bsize / 2, 0, 0], [bsize / 2, 10, bsize * 3.7037037], copy=True) # Cross-bracing 3 corners = [(0, 0, -xsize / 2), (x, 0, -xsize / 2), (x, fsize, -xsize / 2), (0, fsize, -xsize / 2), (0, 0, xsize / 2), (x, 0, xsize / 2), (x, fsize, xsize / 2), (0, fsize, xsize / 2)] cross_brace = rs.AddBox(corners) rs.MoveObject(cross_brace, [0, 1625, 70 * 1.5]) cross_brace_rotated = rs.RotateObject(cross_brace, [0, 1625, bsize * 1.57407407], 45, axis=[0, 10, 0], copy=False) cross_brace_moved = rs.MoveObject(cross_brace_rotated, [bsize * 0.0555555556, 0, 472]) cross_brace_mirrored = rs.MirrorObject(cross_brace_moved, [bsize / 2, 0, 0], [bsize / 2, 10, bsize * 3.7037037], copy=True) #Cross-bracing above Street- Side Two # Cross-bracing 1 corners = [(0, 0, -xsize / 2), (x, 0, -xsize / 2), (x, fsize, -xsize / 2), (0, fsize, -xsize / 2), (0, 0, xsize / 2), (x, 0, xsize / 2), (x, fsize, xsize / 2), (0, fsize, xsize / 2)] cross_brace = rs.AddBox(corners) rs.MoveObject(cross_brace, [0, 345, bsize * 1.5]) cross_brace_rotated = rs.RotateObject(cross_brace, [0, 1625, bsize * 1.57407407], 45, axis=[0, 10, 0], copy=False) cross_brace_moved = rs.MoveObject(cross_brace_rotated, [bsize * 0.0555555556, 0, 210]) cross_brace_mirrored = rs.MirrorObject(cross_brace_moved, [bsize / 2, 0, 0], [bsize / 2, 10, bsize * 3.7037037], copy=True) # Cross-bracing 2 corners = [(0, 0, -xsize / 2), (x, 0, -xsize / 2), (x, fsize, -xsize / 2), (0, fsize, -xsize / 2), (0, 0, xsize / 2), (x, 0, xsize / 2), (x, fsize, xsize / 2), (0, fsize, xsize / 2)] cross_brace = rs.AddBox(corners) rs.MoveObject(cross_brace, [0, 345, bsize * 1.5]) cross_brace_rotated = rs.RotateObject(cross_brace, [0, 1625, bsize * 1.57407407], 45, axis=[0, 10, 0], copy=False) cross_brace_moved = rs.MoveObject(cross_brace_rotated, [bsize * 0.0555555556, 0, 340]) cross_brace_mirrored = rs.MirrorObject(cross_brace_moved, [bsize / 2, 0, 0], [bsize / 2, 10, bsize * 3.7037037], copy=True) # Cross-bracing 3 corners = [(0, 0, -xsize / 2), (x, 0, -xsize / 2), (x, fsize, -xsize / 2), (0, fsize, -xsize / 2), (0, 0, xsize / 2), (x, 0, xsize / 2), (x, fsize, xsize / 2), (0, fsize, xsize / 2)] cross_brace = rs.AddBox(corners) rs.MoveObject(cross_brace, [0, 345, bsize * 1.5]) cross_brace_rotated = rs.RotateObject(cross_brace, [0, 1625, bsize * 1.57407407], 45, axis=[0, 10, 0], copy=False) cross_brace_moved = rs.MoveObject(cross_brace_rotated, [bsize * 0.0555555556, 0, 472]) cross_brace_mirrored = rs.MirrorObject(cross_brace_moved, [bsize / 2, 0, 0], [bsize / 2, 10, bsize * 3.7037037], copy=True) ########################################################################################################################################### # 1. Steel Cables steel_cable = rs.AddCurve(([6, 350, bsize * 8.51851852], [-5, 985, -bsize * 2.48148148], [6, 1630, bsize * 8.51851852]), degree=2) steel_cable_mirrored = rs.MirrorObject(steel_cable, [bsize / 2, 0, 0], [bsize / 2, csize, 0], copy=True) rs.AddPipe(steel_cable, 0, 1) rs.AddPipe(steel_cable_mirrored, 0, 1) steel_cable_side1 = rs.AddCurve(([0, 0, bsize * 2.62962963], [0, 167.5, bsize * 2.48148148], [6, 349, bsize * 8.51851852]), 2) pipe1 = rs.AddPipe(steel_cable_side1, 0, 1) steel_cable_side2 = rs.MirrorObject(steel_cable_side1, [bsize / 2, 10, 0], [bsize / 2, 0, 0], copy=True) pipe2 = rs.AddPipe(steel_cable_side2, 0, 1) rs.RotateObject((pipe1, pipe2), [bsize / 2, 990, 0], 180, axis=None, copy=True) ########################################################################################################################################### # 2. Steel Cables steel_cable = rs.AddCurve(([20, 350, bsize * 8.51851852], [-5, 985, -bsize * 2.48148148], [20, 1630, bsize * 8.51851852]), degree=2) steel_cable_mirrored = rs.MirrorObject(steel_cable, [bsize / 2, 0, 0], [bsize / 2, csize, 0], copy=True) rs.AddPipe(steel_cable, 0, 1) rs.AddPipe(steel_cable_mirrored, 0, 1) steel_cable_side1 = rs.AddCurve(([5, 0, bsize * 2.62962963], [0, 167.5, bsize * 2.48148148], [20, 349, bsize * 8.51851852]), 2) pipe1 = rs.AddPipe(steel_cable_side1, 0, 1) steel_cable_side2 = rs.MirrorObject(steel_cable_side1, [bsize / 2, 10, 0], [bsize / 2, 0, 0], copy=True) pipe2 = rs.AddPipe(steel_cable_side2, 0, 1) rs.RotateObject((pipe1, pipe2), [bsize / 2, 990, 0], 180, axis=None, copy=True) ########################################################################################################################################### # Firts Pillar pillar_line = rs.AddLine([0, 0, bsize * 2.62962963], [0, 345, bsize * 2.62962963]) pillar_points = rs.DivideCurveLength(pillar_line, 15) for point in pillar_points: rs.AddPoint(point) l = 0 for point in pillar_points: line1 = rs.AddLine(point, [point[0], point[1], point[2] + 200]) surface = rs.AddPlaneSurface(rs.WorldZXPlane(), bsize * 7.40740741, bsize * 7.40740741) rs.MoveObject(surface, point) rs.MoveObject(surface, (0, 0, -5)) intersection = rs.CurveSurfaceIntersection(steel_cable_side1, surface) if l > 0: line = rs.AddLine(point, intersection[0][2]) pipe = rs.AddPipe(line, 0, 0.1) mirrored_pipe = rs.MirrorObject(pipe, [bsize / 2, 0, 0], [bsize / 2, 10, 0], copy=True) rs.MirrorObject([mirrored_pipe, pipe], [0, 989.5, 0], [10, 989.5, 0], copy=True) rs.DeleteObject(line1) rs.DeleteObject(surface) l += 1 # Second pillar pillar_line2 = rs.AddLine([0, 355, bsize * 2.62962963], [0, 1625, bsize * 2.62962963]) pillar_points2 = rs.DivideCurveLength(pillar_line2, 15) for point in pillar_points2: rs.AddPoint(point) l = 0 for point in pillar_points2: line2 = rs.AddLine(point, [point[0], point[1], point[2] + 200]) surface2 = rs.AddPlaneSurface(rs.WorldZXPlane(), bsize * 7.40740741, bsize * 7.40740741) rs.MoveObject(surface2, point) rs.MoveObject(surface2, (0, 0, -10)) intersection2 = rs.CurveSurfaceIntersection(steel_cable, surface2) rs.DeleteObject(line2) if l > 0: line2 = rs.AddLine(point, intersection2[0][1]) pipe2 = rs.AddPipe(line2, 0, 0.1) mirrored_pipe2 = rs.MirrorObject(pipe2, [bsize / 2, 0, 0], [bsize / 2, 10, 0], copy=True) rs.DeleteObject(line2) rs.DeleteObject(surface2) l += 1 ########################################################################################################################################### rs.EnableRedraw(True)