# Mako Tender: the user's reference sheet measured (exec'd by build_mako.py; plain Python, no bpy). # # Source: reference/user_reference.webp (1448 x 1086 px: TOP, FRONT, SIDE, REAR), sent 2026-10-20 with "can you create me a 3d # tender model that can be usable as an real asset in the descent vessel. try to create similiar from that referance picture. # red line indicates where the the arm holder clips place so arms can hold the sub tub." Every number below is a pixel read # off the original picture: colour runs per column (build/mk_runs.py, classes in reference/classes.png) and zooms with rulers # (reference/z_*.png). TOP and SIDE share their image x (nose tip x 42, orange tail end x 888, tool cluster to x 952); SIDE # heights are image y (down = larger), TOP lateral offsets are px from its centre line (image y 267). # # Scale and axes (the Kazah's: nose to -Y, port +X, Z up, origin 9 cm behind the docking clamp's axis): # * the clamp axis is the centre of the user's red loop in the TOP view, image x 292 (over the canopy's rear and the collar); # the origin 9 cm behind it is image x 304; # * S = 0.0075 m per pixel: the largest scale at which the whole Tender, fins and stern tools included, stays 1 m inside # the deck well at BOARD (the user's limit since the Manta). The well is an oval 6.3 x 12.3 m centred on the origin # (checks/well_tender_frame.json); at 7.6 mm/px the fin tips and the tool cluster come within 1 m. 6.8 m long overall; # * height (v03): the hull top at the clamp axis (image y 672) at z 1.10, 10 cm higher on the arm than v02, so the holder # clips can be short: the aft pair sits on the collar, the fore pair on short posts on the canopy's two top frame bars. # The docking head's claws never come below z 1.213 (shut: r 0.558-0.693, about 10 deg either side of each diagonal; # open: r 0.61-0.79) and its landing feet stay at z 1.405 (r 0.41-0.53): build/probe_head.py, checks/head_parts.json. # # The FRONT and REAR views are drawn about 1.4x larger than TOP/SIDE for the body but not for the fins (an AI-drawn sheet): # they give section shapes and the fins' droop (about 60 deg below level), not sizes. Where views disagree, the choice: # * big fins: TOP puts the tips at image x 711, SIDE at x 600: built at x 640, lateral and height from TOP and SIDE; # * canopy (v03, the user: "fix the glass"): glass from the nose right to the collar, as all four views draw it, with the # frames TOP and SIDE show (an arc across the front, two bars over the top, a belt along each side, a nose seam). v02's # orange hood over the top-rear is gone; the clips stand on the collar and on the two top bars instead; # * behind the collar (v03): TOP draws a narrow orange roof, a black intake slot either side and the grey pods outboard; # REAR draws the pods as big round nozzles under the roof's shoulders. So the hull narrows behind the collar and the pods # are big side bodies standing off it, the slot between them; # * the hatch (v03) is on the back behind the dorsal fin (the glass is under the clips now). S = 0.0075 X0 = 304.0 # image x of the origin (clamp axis at 292); v04 moves both 20 px aft (end of this file) Z0 = 805.333 # image y of z = 0 (672 -> 1.00) CL_IMG = 292.0 # clamp axis TOP_CY = 267.0 # TOP view centre line (image y) def Yi(x): return (x - X0) * S DZ = 0.10 # v03: the whole Tender 10 cm higher on the arm (see the header) def Zi(v): return (Z0 - v) * S + DZ def Lp(px): return px * S X_TIP, X_STERN = 42.0, 884.0 # nose point; the hull grid ends here (the stern housing and tools go on to x 952) # ---- hull silhouette: SIDE top line, SIDE keel line (image y), TOP half width (px), fins and fittings left out TOPY = [(42, 790), (50, 784), (60, 780), (70, 775), (80, 768), (90, 761), (100, 754), (110, 747), (120, 741), (130, 736), (140, 731), (150, 727), (160, 722), (170, 718), (180, 714), (190, 709), (200, 705), (210, 700), (220, 696), (230, 692), (240, 689), (250, 686), (260, 683), (270, 679), (280, 676), (290, 674), (300, 672), (320, 669), (340, 667), (360, 664), (380, 659), (400, 655), (420, 652), (440, 651), (460, 652), (480, 656), (500, 661), (520, 667), (540, 673), (560, 680), (580, 686), (600, 692), (620, 698), (640, 704), (660, 709), (680, 714), (700, 719), (720, 724), (740, 729), (760, 734), (780, 738), (800, 742), (820, 746), (840, 749), (860, 752), (884, 756)] BOTY = [(42, 790), (50, 798), (60, 806), (70, 813), (80, 820), (90, 827), (100, 834), (110, 841), (120, 848), (130, 856), (140, 865), (160, 880), (180, 895), (200, 909), (220, 924), (240, 938), (260, 948), (280, 954), (300, 957), (320, 958), (340, 957), (360, 956), (380, 954), (400, 950), (420, 940), (440, 918), (460, 898), (480, 883), (500, 872), (520, 863), (540, 856), (560, 851), (580, 847), (600, 845), (650, 844), (700, 845), (750, 848), (800, 852), (840, 854), (870, 853), (884, 851)] WPX = [(42, 0.0), (50, 9), (60, 17), (70, 26), (80, 35), (90, 44), (100, 52), (110, 59), (120, 65), (130, 71), (140, 76), (150, 80), (160, 85), (170, 89), (180, 93), (190, 98), (200, 103), (210, 107), (220, 111), (230, 114), (240, 116), (250, 118), (260, 120), (270, 121), (280, 122), (290, 121), (300, 120), (320, 118), (340, 115), (352, 104), (364, 90), (378, 80), (400, 76), (430, 75), (460, 76), (490, 78), (520, 79), (545, 78), (565, 76), (585, 72), (600, 68), (625, 62), (650, 58), (675, 55), (700, 52), (725, 49), (750, 46), (775, 42), (800, 38), (825, 34), (850, 31), (870, 28), (884, 26)] # v03: narrowed behind the collar (352-585) to the roof and lower body; the pods stand off it # widest line, as a fraction of the section's height from the top (canopy: the dome's centre; aft: the shell's lower edge) ZMFRAC = [(42, 0.50), (100, 0.47), (130, 0.42), (160, 0.36), (200, 0.32), (240, 0.28), (280, 0.25), (320, 0.25), (400, 0.29), (500, 0.31), (600, 0.31), (800, 0.35), (884, 0.40)] # ---- canopy (SIDE outline of the glass's lower edge), collar, frames on the glass CHIN = [(140, 853), (150, 851), (175, 843), (200, 836), (225, 830), (250, 827), (275, 826), (300, 826)] # v03: the sill, read # where the jaw's orange starts (x 150: 860, 200: 848, 250: 839, 300: 837) less its dark band; v02 had taken the dark cockpit # drawn inside the glass for the glass's edge and put the edge up to 15 cm too high X_JAW = 140.0 # the jaw's front: ahead of it the glass wraps the whole nose X_COL0, X_COL1 = 292.0, 350.0 # the collar ring round the canopy's back (TOP: 285-350 at the sides, 300-352 on top) COLLAR_H = 0.070 # it stands 7 cm proud, a thick ring, with 45 deg chamfers front and back HOOP = dict(cx=228.0, r=103.0) # TOP: the frame arc across the canopy is a circle in plan, centre image x 228, r 103 px MERIDIAN_LAT = 54.0 # TOP: two bars over the top, px either side of the centre line, from the arc to the collar BELT_X0 = 92.0 # SIDE: the belt along the widest line, from image x 92 to the collar NOSE_SEAM = (58.0, 126.0) # TOP: the seam along the centre line from near the point to the arc # the orange shell's lower edge aft of the collar (SIDE image y) SHELL = [(345, 708), (380, 709), (410, 714), (440, 727), (470, 740), (520, 743), (600, 741), (700, 745), (800, 755), (884, 763)] # rear bay's side window (SIDE outline) SIDEWIN = [(668, 793), (670, 778), (680, 769), (780, 769), (790, 778), (792, 793), (790, 809), (780, 818), (680, 818), (670, 809)] # v03: SIDE x 668-792, y 768-818, the long framed window in the rear side panel SIDE_PANEL = (498.0, 846.0, 762.0, 846.0, 18.0) # SIDE: the rear hull's recessed side panel: x0, x1, y0, y1, corner r (px) WIN_MULLIONS = (708.0, 750.0) # SIDE: the window's two frame posts # ---- jaw: the two curved grooves between its slats, and the slats' two prongs (SIDE) GROOVES = [[(209, 862), (204, 880), (212, 896), (236, 915), (262, 932)], [(263, 853), (256, 872), (259, 890), (276, 910), (292, 924)]] PRONG = ((249.0, 932.0), (302.0, 983.0), 0.165) # one fang a side: root, tip (SIDE, the two drawn lines averaged), lateral m (FRONT 1163/1210) KEEL_TOOTH = (250.0, 302.0, 0.10) # FRONT: a dark blade under the jaw's centre (1180-1195, 445-485): x from, to, depth m # ---- fins # big fins (v03): SIDE draws the root rising from front-low under the canopy (300-316, 830-835) to rear-high at the pod # (470-490, 737-748), a broad pale root panel, the trailing edge dropping almost straight (480-495, 780-905), then the spike # to the tip. TOP has the leading edge leave the pod at (435, 137 px) and the trailing edge root at (490, 99 px); FRONT has # the fins leave the pods' lower inner corners about 0.7 m out and droop about 60 deg. FIN_A = (316.0, 0.70, 834.0) # root, front: image x, lateral m, SIDE y FIN_B = (486.0, 0.82, 748.0) # root, rear FIN_K = (500.0, 905.0) # trailing edge kink: image x, SIDE y (on the fin's plane) FIN_TIP = (662.0, 229.0, 1043.0) # image x (TOP 711, SIDE 600: nearer TOP, the planform view), lateral px (TOP), SIDE image y # dorsal fin (SIDE): leading edge from its root to the tip, trailing edge from the tip down to its root DORSAL_LE = [(395, 654), (400, 646), (410, 635), (420, 627), (430, 617), (440, 607), (450, 597), (460, 589), (470, 580), (480, 573), (490, 565), (500, 559), (510, 555), (520, 551), (530, 548), (538, 547)] DORSAL_TE = [(538, 547), (540, 560), (541, 590), (542, 620), (544, 650), (546, 676)] TAIL_LE = [(822, 752), (825, 742), (830, 733), (835, 716), (840, 697), (845, 681), (850, 666), (855, 660), (860, 657)] TAIL_TE = [(860, 657), (865, 658), (870, 663), (875, 678), (880, 694), (885, 715), (890, 736), (895, 752)] VENTRAL = [(832, 852), (848, 880), (862, 915), (870, 943), (874, 925), (877, 880), (878, 852)] # LE root .. tip .. TE root # ---- side pods (v03): big water-jet bodies standing off the narrowed hull: SIDE 318-488 x 705-795 (front right behind the # collar, a dark intake on the front), TOP outer edge 140 px and a black slot along the top-inner side (x 330-435, 72-115 px), # REAR big round nozzles under the roof's shoulders, FRONT dark rounded fronts flanking the dome. POD = dict(x0=318.0, x1=488.0, lat=107.0, y=750.0, hw=33.0, hh=45.0) POD_SLOT = (332.0, 436.0) # the black slot along the pod's top-inner side (TOP), image x from, to BELLY = (510.0, 632.0, 40.0, 910.0) # x from, x to, half width px, bottom (SIDE image y) STERN_HOUSING = (880.0, 912.0) # x from, x to (the hull's last section continues into it) TOOL_TIPS = 950.0 # stowed manipulators reach image x 950 (moon pool limit 952) SEAMS_X = (352, 600, 730) # transverse panel seams (behind the collar, and two on the rear hull) # shell plates (TOP, v03): the dorsal spine strip from the collar to its point, and a transverse seam band between the front # and the rear plates (two curved lines), as polylines of (image x, lateral px) SPINE = [(352, 6.0), (400, 9.0), (450, 11.5), (490, 14.0), (515, 7.0), (560, 6.0), (600, 5.0), (614, 0.0)] PLATE_LINES = [[(412, 87.0), (432, 67.0), (437, 42.0), (441, 22.0), (445, 12.0)], [(468, 95.0), (480, 77.0), (483, 37.0), (487, 18.0), (492, 14.0)]] DORSAL_RIDGE = (352.0, 614.0, 0.070, 0.035) # the spine strip raised as a ridge: x from, to, half width m, height m HATCH_X = 642.0 # v03: the hatch on the back, behind the dorsal fin (image x of its centre) # ==================================================================================================================== v04 # v04 (2026-10-20, the user: "work with the critique and do it accordingly to the reference picture"). The Critique's report # (critique/round1.md) and new colour runs on all four views (critique/runs.py): the TOP and SIDE outlines stay, the parts # inside them are rebuilt as the sheet draws them. FRONT and REAR are drawn about 1.07x TOP/SIDE (7.0 mm per px, the # Critique), so their sizes are used: lat = (x - 1185) * 0.007, z = 1.13 + (150 - y) * 0.007 (FRONT); REAR the same about # x 1188, y 645. The tables below supersede v03's where they overlap (CHIN, POD, FIN_*, SIDEWIN, HATCH_X). # # canopy: an elliptic glass bubble (FRONT: an ellipse 1.47 x 1.16 m at the collar, centre z 0.24) with a blunt nose (SIDE: 17 px # tall at x 50), set into a thick orange bezel. Its crest (SIDE, image y), its half width (TOP px) and the height of its widest # line (m); the half height is crest - centre, the lower half the same (the nose's lower outline confirms it). # (v04, second pass: read off the sheet's dark outline line, which takes in the pale outer bubble the colour classes missed: # the nose is blunt in SIDE, 29 px tall 9 px behind its tip, and its centre stays at image y 790.5; TOP keeps it pointed) X_TIP = 41.0 GTOP = [(41, 788), (42, 786), (44, 781), (46, 780), (48, 778), (50, 776), (55, 771), (60, 767), (65, 763), (70, 759), (80, 752), (90, 746), (100, 740), (110, 734), (120, 729), (130, 724), (140, 720), (150, 716), (160, 712), (180, 710), (200, 709), (286, 709), (300, 709)] DOMEW = [(41, 0.0), (43, 1.5), (44, 2.5), (46, 4.5), (48, 7.5), (50, 10.0), (54, 15.0), (58, 19.0), (62, 23.0), (66, 27.0), (70, 31.0), (80, 39.5), (90, 47.0), (100, 54.5), (110, 61.0), (120, 67.0), (130, 73.0), (140, 78.0), (150, 83.0), (160, 87.0), (170, 91.0), (180, 95.0), (190, 98.0), (200, 100.0), (220, 102.0), (240, 103.0), (260, 101.0), (286, 99.0), (300, 99.0)] DOMEZC = [(41, 0.211), (110, 0.211), (120, 0.212), (160, 0.218), (200, 0.226), (240, 0.234), (286, 0.24), (300, 0.24)] # the glass's lower edge on the flank (the sill), and the jaw's top outer corner just below it (SIDE image y); between them # the jaw's dark top rim, a shelf from the jaw's flank in to the bubble SILL = [(120, 851), (140, 849), (160, 843), (180, 836), (200, 830), (225, 825), (250, 822), (286, 820), (300, 820)] JTOP = [(120, 852), (130, 856), (140, 859), (160, 856), (180, 852), (200, 848), (220, 844), (240, 840), (260, 838), (280, 837), (300, 836), (370, 836)] # the jaw: its sloped front edge (SIDE, the section's lowest point) and its body's flat bottom behind it; its half width by # height from FRONT (the jaw outline, its height range scaled onto SIDE's: top z -0.13, bottom z -0.79); its plan limit JBOT = [(120, 851), (125, 857), (140, 869), (160, 882), (180, 895), (200, 908), (220, 919), (235, 925), (250, 926), (300, 926)] W_J = [(-0.13, 0.63), (-0.236, 0.60), (-0.31, 0.565), (-0.386, 0.53), (-0.46, 0.50), (-0.535, 0.47), (-0.61, 0.45), (-0.684, 0.365), (-0.758, 0.32), (-0.79, 0.29)] JW_PLAN = [(120, 0.03), (130, 0.20), (140, 0.33), (160, 0.48), (180, 0.57), (200, 0.62), (300, 0.63)] X_JAW4 = 120.0 # the jaw's front corner (the Critique: forward from about 165 to 120) X_LB = 300.0 # the lower body's front face behind the jaw (its bottom drops from the jaw's to the keel's) # the bezel (v03's collar): a band x 286-340 (SIDE 286-339), its outline from FRONT (port half, metres, from its foot up): # sides at 0.76-0.80 down to z 0.05, a sharp shoulder at (0.94, 0.73) over the dark recess opening, a peaked top, flat over # 0.19 m, at the hull's top line; it does not go round the bottom (the jaw meets the bubble there) X_BZ0, X_BZ1 = 286.0, 340.0 BEZEL = [(0.765, 0.05), (0.790, 0.15), (0.800, 0.29), (0.785, 0.43), (0.735, 0.57), (0.690, 0.645), (0.800, 0.675), (0.925, 0.705), (0.940, 0.725), (0.900, 0.750), (0.780, 0.820), (0.545, 0.955), (0.345, 1.060), (0.190, 1.100), (0.0, 1.100)] # the hood (SIDE's orange wedge over the glass's top rear, FRONT's orange above the dome; it carries the fore clips): plan # half width and its crest (z, m), from x 197 to the bezel # (second pass: the clamp axis 20 px aft, x 312, so the fore clips stand close to the bezel and the hood can stay small and # pointed: TOP draws glass under the red loop) HOODW = [(205, 0.07), (215, 0.15), (228, 0.25), (240, 0.33), (250, 0.39), (258, 0.43), (270, 0.46), (286, 0.48)] HOODZ = [(205, 0.83), (220, 0.90), (240, 0.98), (260, 1.04), (286, 1.10)] X_HOOD0 = 205.0 # the lips: TOP's orange along the canopy's outer edges, x 205-286 (the bezel ring's side carried forward on the bubble, 6.5 cm # proud at the bezel, nothing at x 205); its band on the bubble (image x, z from, z to) X_LIP0 = 252.0 # (second pass: slimmer and shorter; SIDE draws glass where the first lips put orange) LIP_H = 0.040 LIPZ = [(252, 0.25, 0.28), (286, 0.20, 0.33)] # the body behind the bezel: TOP's orange shell is a narrow cape over a wider dark body (TOP runs); SIDE gives its lower edge SHELL_W = [(340, 0.53), (420, 0.55), (440, 0.585), (460, 0.65), (480, 0.615), (500, 0.60), (520, 0.56), (540, 0.52), (560, 0.465), (600, 0.35), (650, 0.225), (700, 0.15), (750, 0.12), (800, 0.10), (850, 0.075), (884, 0.07)] SHELL_Z = [(340, 0.89), (420, 0.89), (432, 0.80), (445, 0.63), (460, 0.57), (480, 0.59), (500, 0.58), (540, 0.565), (600, 0.59), (640, 0.585), (700, 0.55), (760, 0.51), (800, 0.48), (840, 0.44), (884, 0.42)] # the body's widest point (the section's waist: image x, lat m, z m); ahead of x 340 the jaw's top corner under the bezel WAIST = [(300, 0.630, -0.13), (340, 0.660, -0.05), (380, 0.700, 0.15), (420, 0.700, 0.30), (450, 0.670, 0.36), (480, 0.650, 0.35), (500, 0.615, 0.30), (545, 0.585, 0.25), (600, 0.510, 0.18), (650, 0.435, 0.14), (700, 0.390, 0.12), (750, 0.345, 0.11), (800, 0.285, 0.10), (850, 0.230, 0.10), (884, 0.195, 0.10)] # the side bodies (v03's "pods"): SIDE's light grey cheek panel, TOP's grey outer edge (out to 1.03 m) with the dark recess # inboard, FRONT's grey fronts under the recess openings, REAR's rounded dark lobes; the fins grow out of their lower rear. # Above them, under the shell, the dark recess (SIDE x 338-445), closed at the back where the shell curls down (x 420-445). POD4 = dict(x0=300.0, x1=530.0) POD_OUT = [(300, 0.94), (306, 0.98), (315, 0.995), (330, 1.00), (360, 1.01), (380, 1.015), (400, 1.015), (420, 1.00), (440, 0.97), (460, 0.92), (480, 0.86), (500, 0.78), (520, 0.68), (530, 0.62)] POD_TOP = [(300, 0.05), (330, 0.10), (350, 0.16), (380, 0.25), (400, 0.32), (420, 0.40), (440, 0.46), (460, 0.54), (480, 0.58), (500, 0.55), (520, 0.46), (530, 0.40)] POD_BOT = [(300, -0.09), (350, -0.13), (380, -0.17), (420, -0.24), (460, -0.31), (500, -0.33), (520, -0.28), (530, -0.24)] # (second pass: full width from the front, so FRONT sees their fronts below the dark recess openings and not their flanks; # the bottom at SIDE's cheek panel's lower edge, so the jaw's C shows under it) PORT4 = (358.0, 752.0, 0.032) # SIDE: the small round port in the recess (image x, y, radius m) SLOT4 = [(396, 768), (412, 758), (428, 742), (444, 716)] # SIDE: the black slot along the shell's curl # big fins (v04, the Critique: straight spikes rooted low and inboard): each a flat blade in a plane along the hull's length, # through the FRONT root (0.78, -0.13) and the tip; the tip between the views (FRONT lat 1.33 z -1.28, TOP lat 1.49 at x 712, # SIDE z -1.68 at x 605): lat 1.42, z -1.45, x 655. Root chord SIDE x 380-505; the trailing edge drops to a kink at x 525 # (SIDE) and runs to the tip; a diamond section 16 cm thick at the root. FIN4_ROOT = (0.78, -0.13) FIN4_TIP = (640.0, 1.42, -1.45) FIN4_LE0, FIN4_TE0 = 380.0, 505.0 FIN4_KINK = (535.0, -0.80) # kept above the leading edge (SIDE: the trailing edge's steep drop, then to the tip) # the jaw's rear "C" round its dark opening (SIDE), the prongs (two flat prongs a side, SIDE; FRONT: 12 cm wide at lat 0.19), # the keel tooth (FRONT: 0.19 m wide, to z -1.24) C_OPEN = [(296, 878), (300, 862), (310, 856), (360, 856), (370, 862), (372, 880), (368, 896), (356, 900), (308, 900), (298, 892)] C_ARM_UP = [(296, 843), (368, 843)] # the C's upper arm: jaw paint above the opening (y 836-850), to x 368 C_ARM_LO = [(298, 907), (342, 907)] # its lower arm (y 900-916), to x 342 PRONGS4 = [((248, 921), (300, 966)), ((262, 930), (305, 989))] # root, tip (SIDE), each 9 cm in the side plane PRONG_LAT, PRONG_W = 0.195, 0.12 KEEL4 = (0.19, -1.24) # the keel tooth: width, tip z # the rear glass bay (SIDE: long, low and recessed, its front rounded and sloped like a small second canopy, two thin raked # posts) replaces v03's window BAY = [(640, 830), (648, 812), (660, 795), (676, 780), (695, 770), (710, 768), (860, 768), (860, 830)] BAY_POSTS = [((698, 830), (712, 768)), ((743, 830), (757, 768))] HATCH_X4 = 652.0 # the hatch: flush, one more plate of the spine (behind its point at x 614) # stern machine (REAR: a square hub 0.42 m with a round face, cross arms with knobs, orange rings at its sides; SIDE: a mast at # x 903 from y 725 to 790, the tool arms at y 800 and 830 reaching x 950, a block at x 880-935, y 820-850) HUB4 = dict(x0=884.0, x1=918.0, half=0.21, zc=0.0) MAST4 = (903.0, 725.0, 790.0) # fins on the centre plane (v04): thicker roots; the tail fin's top is a flat cut; the ventral fin is straight TAIL4_LE = [(822, 760), (830, 735), (840, 703), (850, 670), (853, 657)] TAIL4_TE = [(870, 657), (876, 680), (884, 712), (893, 748)] VENT4 = [(840, 850), (873, 948), (880, 850)] # v04 second pass: the clamp axis (see HOODW) and with it the origin, 9 cm behind it CL_IMG = 312.0 X0 = CL_IMG + 12.0 # FRONT: the jaw's front face carries vertical slots (two a side drawn clearly): lat, z from, z to (SIDE heights) JAW_SLOTS = [(0.26, -0.40, -0.70), (0.43, -0.36, -0.62)] # ==================================================================================================================== v04, SIDE first # The user (2026-10-20, with the SIDE view alone and without the red marks: reference/user_side_clean.png, the sheet's SIDE panel # pixel for pixel, offset (+1, -515)): "maybe just use the side referance you dont have to obey the other wiev pictures". So the # SIDE view rules; TOP, FRONT and REAR only guide what SIDE cannot show. What the red line had covered (read on the clean view): # * the glass's crest rises to image y 700 at x 220-240 and rounds down to the collar (716 at x 286): the bubble's rounded back; # * over it a thin orange BROW (v04's hood was too deep for it): its top from a point at (178, 705) to the collar (280, 677), # its lower edge on the glass's crest; a flat visor plate over the crest, which carries the fore clips; # * the collar band follows the bubble's rounded back as an arc: front edge x 266 at the top, 300 at mid height, 281 at its # foot; back edge 310 at the top, 340 at mid height, 288 at its foot (it tapers to a point there). GTOP = [(41, 788), (42, 786), (44, 781), (46, 780), (48, 778), (50, 776), (55, 771), (60, 767), (65, 763), (70, 759), (80, 752), (90, 746), (100, 740), (110, 734), (120, 729), (130, 724), (140, 720), (150, 716), (160, 712), (170, 709), (178, 707), (190, 704), (200, 702), (220, 700), (240, 700), (255, 701), (265, 704), (275, 709), (286, 716), (300, 725)] X_HOOD0 = None # no hood in the hull (the brow is a part of its own, mk_fittings.py) X_LIP0 = None # no lips (SIDE draws glass there) BROW_TOP = [(178, 705), (190, 701), (200, 698), (210, 695), (220, 692), (230, 689), (240, 685), (250, 684), (260, 682), (270, 678), (280, 677), (292, 673)] BROW_W = [(178, 0.0), (182, 0.05), (190, 0.11), (205, 0.21), (220, 0.29), (235, 0.36), (250, 0.41), (265, 0.45), (280, 0.47), (292, 0.48)] # the collar band's edges in SIDE (z in m, image x), from its foot up BAND_F = [(-0.10, 286), (0.02, 281), (0.08, 286), (0.14, 291), (0.20, 294), (0.26, 297), (0.32, 299), (0.38, 300), (0.44, 300), (0.50, 299), (0.56, 296), (0.62, 293), (0.68, 289), (0.74, 285), (0.80, 278), (0.86, 266), (1.20, 266)] BAND_B = [(-0.10, 340), (0.02, 290), (0.08, 316), (0.14, 327), (0.20, 332), (0.26, 335), (0.32, 337), (0.38, 339), (0.44, 340), (0.50, 340), (0.56, 339), (0.62, 338), (0.68, 336), (0.74, 334), (0.80, 331), (0.86, 326), (0.92, 320), (0.98, 310), (1.20, 302)] # big fins: SIDE's tip and kink exactly (the other views no longer bind); lateral as before FIN4_TIP = (605.0, 1.42, -1.68) FIN4_KINK = (525.0, -0.91) # the prongs (clean SIDE, the jaw paint's runs per column): the lower one is the jaw's sloped bottom edge carried on, split from # the jaw by a groove from x 205 and free from x 245, its tip at (304, 985); the upper one leaves the jaw's bottom at x 258, its # tip at (312, 974); about 8 and 10 cm thick. The keel tooth stays short, behind them (SIDE does not draw it). PRONGS4 = [((256, 912), (312, 974), 0.10), ((208, 906), (304, 985), 0.085)] KEEL4 = (0.19, -1.05) # the bezel's section (SIDE first): a smooth rounded collar round the bubble, flush with the body's top behind it; the shoulder # wings FRONT drew over its recess openings are gone (with the collar's arcs they turned into shards in perspective) BEZEL = [(0.765, 0.05), (0.790, 0.15), (0.800, 0.28), (0.795, 0.40), (0.780, 0.52), (0.750, 0.63), (0.700, 0.74), (0.620, 0.85), (0.500, 0.95), (0.360, 1.03), (0.200, 1.08), (0.0, 1.10)] JAW_SLOTS = [] # FRONT's slots on the jaw's front face: not drawn in SIDE # the brow tapers into the collar (its back corners stood out of the bezel's sides): wide enough for the fore clips' fairings at # x 255-272, narrower behind BROW_W = [(178, 0.0), (182, 0.05), (190, 0.11), (205, 0.21), (220, 0.29), (235, 0.36), (248, 0.41), (256, 0.43), (270, 0.43), (280, 0.39), (292, 0.33)] # ==================================================================================================================== v04 round 2 # The user drew red lines over the side render ("check the redlines fix this", reference/user_redlines_v04.png) and the # Critique's round 2 (critique/round2.md) agrees with them: # * the brow, collar top and fore clip read as one smooth orange hood: the brow's top (178,705)-(250,684)-(300,672), its # underside on the glass's crest at the front and curving down into the collar's front edge behind x 250 # ((262,706), (280,720), (290,740)); each fore clip grows out of it as a smooth orange crest (x 245-300); # * the canopy is two-toned: pale upper glass above a line from the nose tip up to the collar ((52,785), (160,768), # (291,740)), the cockpit clear below it; # * the cheek is the fins' light grey; the recess behind the collar a lit mid grey, only its slot black (x 420-450); # * the rear glass bay is x 645-800, dark tinted but for its front; machinery from x 800 to 880; # * the stern post is a flat plate (x 912-918, y 740-785); an orange lens on each flank at (871, 808); the two tool arms one # over the other (y 800 and 830); the block under the hub ends at y 852; # * the prongs: two flat bars side by side with a 6 px slit from (272, 950); narrower grooves; the C's upper arm tapers to # a point at (368, 840); # * the lower front body's rear corner rounded up (425,940)-(440,909)-(455,890); no skids; # * the ventral fin's leading edge straight from (835,858) to (868,948). BROW_TOP = [(178, 705), (190, 701), (200, 698), (210, 694), (220, 691), (230, 688), (240, 686), (250, 684), (260, 681), (270, 678), (280, 676), (292, 673), (300, 672)] BROW_BOT = [(178, 706), (240, 701), (250, 702), (262, 706), (272, 711), (280, 720), (290, 740), (300, 752)] GLASS_UP = [(41, 0.254), (52, 0.254), (160, 0.38), (291, 0.59), (300, 0.60)] BAY = [(645, 830), (652, 812), (664, 795), (680, 781), (700, 771), (720, 768), (800, 768), (800, 830)] BAY_FRONT_X = 690.0 # the bay's glass is clear blue ahead of this, dark tinted behind STERN_PLATE = (915.0, 740.0, 785.0) STERN_LENS = (871.0, 808.0, 0.062) PRONGS4 = [((250, 905), (312, 975), 0.125), ((208, 906), (305, 987), 0.105)] GROOVE_HALF = 0.013 BOTY = [(42, 790), (50, 798), (60, 806), (70, 813), (80, 820), (90, 827), (100, 834), (110, 841), (120, 848), (130, 856), (140, 865), (160, 880), (180, 895), (200, 909), (220, 924), (240, 938), (260, 948), (280, 954), (300, 957), (320, 958), (340, 957), (360, 956), (380, 954), (400, 950), (415, 944), (425, 937), (440, 910), (455, 891), (470, 881), (485, 875), (500, 871), (520, 863), (540, 856), (560, 851), (580, 847), (600, 845), (650, 844), (700, 845), (750, 848), (800, 852), (840, 854), (870, 853), (884, 851)] VENT4 = [(835, 858), (868, 948), (878, 852)] SIDE_SEAMS4 = [[(505, 748), (490, 762), (481, 782), (480, 802), (486, 822), (500, 840)]] # the rear capsule's rounded front # the user (2026-10-20, a cross over the rear bay's window on the side render): "no need a glass window remove that just plain # metal". The bay's opening, glass and posts are switched off; that flank is the dark body's skin (the machinery behind stays). BAY_ON = False # ==================================================================================================================== v04 round 3 # The Critique's round 3 (critique/round3.md; SIDE about 95 % in outline, 80 % in look): # * the jaw solid orange down to y 945 between x 243 and 289, the prongs' slit 6 px wide from (282, 948): the jaw body's # bottom lowered at its rear and the lower prong raised under it; # * the stern: the flat plate 10 px higher (y 730-775), an angled orange lens at (863-880, 797-820), no rod below the hub, the # second tool arm behind the first (SIDE draws one, at y 800). JBOT = [(120, 851), (125, 857), (140, 869), (160, 882), (180, 895), (200, 908), (220, 919), (240, 932), (250, 939), (265, 944), (280, 946), (300, 948)] PRONGS4 = [((250, 905), (312, 975), 0.125), ((208, 900), (305, 982), 0.105)] STERN_PLATE = (915.0, 730.0, 775.0) STERN_LENS = (872.0, 808.0, 0.072)