# Mako: the stern's moving parts (exec'd by build_mako.py after mk_cabin.py). Each is its own object with its origin on its axis: # * SM_Mako_Rotor: five blades on a hub in the stern duct, spins about the long axis; # * SM_Mako_Arm_L / _R: the tool cluster's two manipulators (SIDE and TOP views: forked tools out of the stern), stowed # straight aft beside the duct (they then reach image x 949, inside the moon pool's 1 m), swing out about a vertical axis. ROT_C = TH_C + Vector((0, 0.065, 0)) # in the duct on the hub's aft face rotor = MB("SM_Mako_Rotor", [STEEL, GRAPH]) qcyl(rotor, 0.042, 0.05, ROT_C, GRAPH, rot=(math.pi / 2, 0, 0), segs=12) qsphere(rotor, ROT_C + Vector((0, 0.03, 0)), (0.040, 0.035, 0.040), GRAPH, cuts=2) NBL, PITCH = 5, math.radians(32.0) for b in range(NBL): a = 2 * math.pi * b / NBL rad = Vector((math.cos(a), 0, math.sin(a))) tan = Vector((-math.sin(a), 0, math.cos(a))) secs = [] for j in range(5): r = 0.036 + (0.112 - 0.036) * j / 4 pitch = PITCH + math.radians(10.0) * (1 - j / 4) cd = (tan * math.cos(pitch) + Vector((0, 1, 0)) * math.sin(pitch)).normalized() nd = rad.cross(cd).normalized() secs.append((ROT_C + rad * r, cd, nd, 0.050 - 0.012 * j / 4, 0.010 - 0.004 * j / 4)) foil(rotor, secs, STEEL) ARMS = {} HOUSING_HW = HUB4["half"] # v04: beside the stern machine's square hub, below its orange rings for side in (1, -1): tag = "L" if side > 0 else "R" A0 = Vector((side * (HOUSING_HW + 0.012), Yi(STERN_HOUSING[1]) - 0.07, Zi(802.0))) # SIDE draws one, at y 800: the other behind it arm = MB("SM_Mako_Arm_" + tag, [GRAPH, STEEL, DARK, YELLOW, RUBBER]) qcyl(arm, 0.042, 0.10, A0 + Vector((side * 0.020, 0, 0)), STEEL, segs=12) # shoulder knuckle (vertical axis) off = Vector((side * 0.030, 0, 0)) def seg(p0, p1, w, h, mat): L_ = (p1 - p0).length qbox(arm, (w, L_, h), (p0 + p1) * 0.5, mat, bevel=0.010) E = A0 + off + Vector((0, 0.10, 0)) seg(A0 + off + Vector((0, 0.01, 0)), E, 0.052, 0.058, DARK) # boom qcyl(arm, 0.034, 0.075, E, STEEL, segs=12) # elbow knuckle W_ = E + Vector((0, 0.085, 0)) seg(E + Vector((0, 0.01, 0)), W_, 0.042, 0.046, DARK) # forearm qcyl(arm, 0.028, 0.03, W_ + Vector((0, 0.012, 0)), STEEL, rot=(math.pi / 2, 0, 0), segs=12) # wrist roll ring palm = W_ + Vector((0, 0.04, 0)) qbox(arm, (0.075, 0.03, 0.048), palm, GRAPH, bevel=0.006) for fz in (1, -1): # two fingers, closed f0 = palm + Vector((0, 0.012, fz * 0.026)) f1 = f0 + Vector((0, 0.045, -fz * 0.004)) f2 = f1 + Vector((0, 0.025, -fz * 0.014)) seg(f0, f1, 0.030, 0.012, STEEL) seg(f1, f2, 0.026, 0.011, STEEL) qbox(arm, (0.026, 0.012, 0.006), f2 + Vector((0, 0.004, -fz * 0.003)), RUBBER) qbox(arm, (0.012, 0.06, 0.004), A0 + off + Vector((side * 0.027, 0.09, 0.0)), YELLOW) # a mark on the boom ARMS[side] = (arm, A0.copy()) REPORT["arm_tip_y"] = round(Yi(STERN_HOUSING[1]) - 0.07 + 0.10 + 0.085 + 0.04 + 0.012 + 0.07 + 0.01, 3) REPORT["stage"] = "tools"