aboutsummaryrefslogtreecommitdiff
path: root/mechanical-specifications.typ
diff options
context:
space:
mode:
authorDenis Chevalier <perso@denischevalier.fr>2026-08-10 22:32:38 +0200
committerDenis Chevalier <perso@denischevalier.fr>2026-08-10 22:32:38 +0200
commitb28f97f3526859633fde603764b827389279d10f (patch)
treeef483985fc0be4237f98b2ad7dd0682b160b4cef /mechanical-specifications.typ
parent32d3f3d945002c1413490449aa08522c78f4dcad (diff)
downloadsame-b28f97f3526859633fde603764b827389279d10f.tar.gz
same-b28f97f3526859633fde603764b827389279d10f.tar.bz2
same-b28f97f3526859633fde603764b827389279d10f.zip
extract figures in separate files
Diffstat (limited to 'mechanical-specifications.typ')
-rw-r--r--mechanical-specifications.typ3264
1 files changed, 58 insertions, 3206 deletions
diff --git a/mechanical-specifications.typ b/mechanical-specifications.typ
index de765f6..6e53a87 100644
--- a/mechanical-specifications.typ
+++ b/mechanical-specifications.typ
@@ -23,268 +23,13 @@ individual steel cassettes.
We chose steel instead of aluminum, as it has better shielding properties,
especially in terms of magnetic shielding.
-#figure(
- table(
- columns: 2,
- table.header([Parameter], [Value]),
- [Material], [DC01 cold-rolled steel (EN 10130)],
- [Thickness], [$qty(1.2, "mm")$],
- [Finish], [Matte black powder coard (RAL 9005), all surfaces],
- ),
- caption: [Cassette construction parameters],
-) <table-cassette-construction-parameters>
+#include "tables/cassette-construction-parameters.typ"
==== External dimensions <cassette-external-dimensions>
-#figure(
- cetz.canvas({
- import cetz.draw: *
-
- // Scale factor: 1 mm = 0.06 drawing units
- let s = 0.06
-
- let h-panel = 177.8 * s // 6.223
- let h-body = 165.1 * s // 5.7785
- let h-lip = 6.35 * s // 0.22225
- let w-panel = 38.0 * s // 1.33
- let d-body = 152.4 * s // 5.334
- let t-panel = 3.0 * s // 0.105 (exaggerated slightly for visual clarity)
-
- let y-center = 0
- let y-top-panel = h-panel / 2
- let y-bot-panel = -h-panel / 2
- let y-top-body = h-body / 2
- let y-bot-body = -h-body / 2
-
- // --- FRONT ELEVATION ---
- let x-front-left = 0
- let x-front-right = w-panel
- let x-front-mid = w-panel / 2
-
- // View Title
- content((x-front-mid, y-top-panel + 0.8), text(
- size: 9pt,
- weight: "bold",
- )[FRONT ELEVATION])
-
- // Front Panel Outline
- rect(
- (x-front-left, y-bot-panel),
- (x-front-right, y-top-panel),
- fill: luma(250),
- stroke: 1.2pt + black,
- )
-
- // Hidden Body Transition Lines (Dashed)
- line(
- (x-front-left, y-top-body),
- (x-front-right, y-top-body),
- stroke: (paint: luma(130), thickness: 0.7pt, dash: "dashed"),
- )
- line(
- (x-front-left, y-bot-body),
- (x-front-right, y-bot-body),
- stroke: (paint: luma(130), thickness: 0.7pt, dash: "dashed"),
- )
-
- // Panel Mounting Screw Holes (Top and Bottom Lips)
- circle(
- (x-front-mid, y-top-panel - h-lip / 2),
- radius: 0.08,
- fill: white,
- stroke: 0.8pt + black,
- )
- circle(
- (x-front-mid, y-bot-panel + h-lip / 2),
- radius: 0.08,
- fill: white,
- stroke: 0.8pt + black,
- )
-
- // Dimension: Panel Width (38.0 mm)
- line(
- (x-front-left, y-bot-panel),
- (x-front-left, y-bot-panel - 0.6),
- stroke: 0.5pt + luma(120),
- )
- line(
- (x-front-right, y-bot-panel),
- (x-front-right, y-bot-panel - 0.6),
- stroke: 0.5pt + luma(120),
- )
- line(
- (x-front-left, y-bot-panel - 0.6),
- (x-front-right, y-bot-panel - 0.6),
- mark: (start: "stealth", end: "stealth"),
- mark-size: 0.12,
- stroke: 0.7pt + black,
- )
- content((x-front-mid, y-bot-panel - 0.9), text(
- size: 7.5pt,
- )[$qty(38.0, "mm")$])
-
- // Dimension: Panel Height (177.8 mm / 4U)
- line(
- (x-front-left, y-top-panel),
- (x-front-left - 0.6, y-top-panel),
- stroke: 0.5pt + luma(120),
- )
- line(
- (x-front-left, y-bot-panel),
- (x-front-left - 0.6, y-bot-panel),
- stroke: 0.5pt + luma(120),
- )
- line(
- (x-front-left - 0.6, y-bot-panel),
- (x-front-left - 0.6, y-top-panel),
- mark: (start: "stealth", end: "stealth"),
- mark-size: 0.12,
- stroke: 0.7pt + black,
- )
- content(
- (x-front-left - 0.95, y-center),
- text(size: 7.5pt)[$qty(177.8, "mm")$ ($qty(4, "U")$)],
- angle: 90deg,
- )
-
- // --- SIDE ELEVATION ---
- let x-side-start = 2.8
- let x-panel-back = x-side-start + t-panel
- let x-body-rear = x-panel-back + d-body
- let x-side-mid = (x-side-start + x-body-rear) / 2
-
- // View Title
- content((x-side-mid, y-top-panel + 0.8), text(
- size: 9pt,
- weight: "bold",
- )[SIDE ELEVATION])
-
- // Cassette Steel Body
- rect(
- (x-panel-back, y-bot-body),
- (x-body-rear, y-top-body),
- fill: luma(235),
- stroke: 1.2pt + black,
- )
-
- // Front Panel Plate Attached to Body
- rect(
- (x-side-start, y-bot-panel),
- (x-panel-back, y-top-panel),
- fill: luma(210),
- stroke: 1.2pt + black,
- )
-
- // Rear DB-25 Connector Standoff / Bezel Projection
- rect(
- (x-body-rear, y-center - 0.6),
- (x-body-rear + 0.25, y-center + 0.6),
- fill: luma(240),
- stroke: 0.8pt + black,
- )
-
- // Dimension: Depth (152.4 mm)
- line(
- (x-panel-back, y-top-panel),
- (x-panel-back, y-top-panel + 0.2),
- stroke: 0.5pt + luma(120),
- )
- line(
- (x-body-rear, y-top-panel - 0.4),
- (x-body-rear, y-top-panel + 0.2),
- stroke: 0.5pt + luma(120),
- )
- line(
- (x-panel-back, y-top-panel + 0.2),
- (x-body-rear, y-top-panel + 0.2),
- mark: (start: "stealth", end: "stealth"),
- mark-size: 0.12,
- stroke: 0.7pt + black,
- )
- content(((x-panel-back + x-body-rear) / 2, y-top-panel + 0.4), text(
- size: 7.5pt,
- )[$qty(152.4, "mm")$])
-
- // Dimension: Body Height (165.1 mm)
- line(
- (x-body-rear, y-top-body),
- (x-body-rear + 0.6, y-top-body),
- stroke: 0.5pt + luma(120),
- )
- line(
- (x-body-rear, y-bot-body),
- (x-body-rear + 0.6, y-bot-body),
- stroke: 0.5pt + luma(120),
- )
- line(
- (x-body-rear + 0.6, y-bot-body),
- (x-body-rear + 0.6, y-top-body),
- mark: (start: "stealth", end: "stealth"),
- mark-size: 0.12,
- stroke: 0.7pt + black,
- )
- content(
- (x-body-rear + 0.9, y-center),
- text(size: 7.5pt)[$qty(165.1, "mm")$],
- angle: -90deg,
- )
-
- // Dimension: Top Lip Height (6.35 mm)
- line(
- (x-panel-back, y-top-panel),
- (x-body-rear + 1.8, y-top-panel),
- stroke: 0.4pt + luma(160),
- )
- line(
- (x-panel-back, y-top-body),
- (x-body-rear + 1.8, y-top-body),
- stroke: 0.4pt + luma(160),
- )
- line(
- (x-body-rear + 1.65, y-top-body),
- (x-body-rear + 1.65, y-top-panel),
- mark: (start: "stealth", end: "stealth"),
- mark-size: 0.10,
- stroke: 0.7pt + black,
- )
- content(
- (x-body-rear + 2.2, (y-top-panel + y-top-body) / 2),
- text(size: 7.0pt)[$qty(6.35, "mm")$],
- )
- }),
- caption: [Cassette enclosure orthographic projections (front and side elevation) detailing external physical dimensions and lip offsets],
-) <figure-cassette-external-dimensions-diagram>
-
-#figure(
- table(
- columns: 4,
- table.header([Dimension], [Value], [Tolerance], [Note]),
- [Panel height],
- [$qty(177.8, "mm")$ ($qty(4, "U"), qty(7, "inch")$)],
- [$plus.minus qty(0.1, "mm")$],
- [Full rack unit height],
-
- [Grid pitch],
- [$qty(38.1, "mm")$ ($qty(1.5, "inch")$)],
- [N/A],
- [Theoretical center to center spacing. Two columns of banana jacks
- ($qty(0.75, "inch")$ grid)],
-
- [Panel Width],
- [$qty(38.0, "mm")$ ($qty(1.5, "inch")$)],
- [$+0.0 "/" -0.1 "mm"$],
- [Undersized to accomodate paint thickness and thermal expansion],
-
- [Body height], [$qty(165.1, "mm")$, ($qty(6.5, "inch")$)], [$plus.minus qty(0.1, "mm")$], [Fits between rails],
-
- [Body width], [$qty(38.0, "mm")$ ($qty(1.5, "inch")$)], [$+0.0 "/" -0.1 "mm"$], [Same as panel],
-
- [Depth], [$qty(152.4, "mm")$ ($qty(6, "inch")$)], [$plus.minus qty(0.2, "mm")$], [Front to rear],
-
- [Lip height], [$qty(6.35, "mm")$ ($qty(0.25, "inch")$)], [N/A], [Top and bottom],
- ),
- caption: [Cassette external dimensions],
-) <table-cassette-external-dimensions>
+#include "diagrams/cassette-external-dimensions.typ"
+
+#include "tables/cassette-external-dimensions.typ"
The panel lips extend above and below the cassette body to fill the full
$qty(4, "U")$ rack opening while the body fits between the chassis rails.
@@ -296,425 +41,7 @@ interlocking U-shaped steel channel:
===== L-channel (chassis) <l-channel-chassis>
-#figure(
- cetz.canvas({
- import cetz.draw: *
-
- // Scale factor: 1 mm = 0.030 drawing units
- let s = 0.030
-
- let h = 165.1 * s // 4.953
- let d = 152.4 * s // 4.572
- let w = 35.7 * s // 1.071
- let f = 8.0 * s // 0.240 (8 mm flange width)
-
- let db25-y = 55.0 * s // 1.650
- let bnc-y = 130.0 * s // 3.900
- let db25-x = 17.85 * s // 0.5355 (centered in 35.7 mm width)
-
- let y-bot = 0
- let y-top = h
-
- // ==========================================
- // 1. LEFT ELEVATION (Left Wall: 152.4 x 165.1 mm)
- // ==========================================
- let x-left-start = 0
- let x-left-end = x-left-start + d
- let x-left-mid = (x-left-start + x-left-end) / 2
-
- // View Title
- content((x-left-mid, y-top + 0.8), text(
- size: 8.5pt,
- weight: "bold",
- )[LEFT ELEVATION])
-
- // Main Left Wall Sheet
- rect(
- (x-left-start, y-bot),
- (x-left-end, y-top),
- fill: luma(245),
- stroke: 1.2pt + black,
- )
-
- // Folded Flanges (Top, Bottom, Front folded 90 deg inward - shown as dashed lines)
- // Top Flange
- line(
- (x-left-start, y-top - f),
- (x-left-end, y-top - f),
- stroke: (paint: luma(120), thickness: 0.7pt, dash: "dashed"),
- )
- // Bottom Flange
- line(
- (x-left-start, y-bot + f),
- (x-left-end, y-bot + f),
- stroke: (paint: luma(120), thickness: 0.7pt, dash: "dashed"),
- )
- // Front Flange (at x-left-start)
- line(
- (x-left-start + f, y-bot),
- (x-left-start + f, y-top),
- stroke: (paint: luma(120), thickness: 0.7pt, dash: "dashed"),
- )
-
- // PEM Nut Press-Fit Inserts on Flanges (Representative circles)
- circle(
- (x-left-start + f / 2, y-bot + 12 * s),
- radius: 0.06,
- fill: white,
- stroke: 0.6pt + black,
- )
- circle(
- (x-left-start + f / 2, y-top - 12 * s),
- radius: 0.06,
- fill: white,
- stroke: 0.6pt + black,
- )
- circle(
- (x-left-mid, y-bot + f / 2),
- radius: 0.06,
- fill: white,
- stroke: 0.6pt + black,
- )
- circle(
- (x-left-mid, y-top - f / 2),
- radius: 0.06,
- fill: white,
- stroke: 0.6pt + black,
- )
-
- // Dimensions: Depth & Height
- line(
- (x-left-start, y-bot),
- (x-left-start, y-bot - 0.6),
- stroke: 0.4pt + luma(140),
- )
- line(
- (x-left-end, y-bot),
- (x-left-end, y-bot - 0.6),
- stroke: 0.4pt + luma(140),
- )
- line(
- (x-left-start, y-bot - 0.6),
- (x-left-end, y-bot - 0.6),
- mark: (start: "stealth", end: "stealth"),
- mark-size: 0.10,
- stroke: 0.6pt + black,
- )
- content((x-left-mid, y-bot - 0.9), text(size: 7pt)[$qty(152.4, "mm")$])
-
- line(
- (x-left-start, y-bot),
- (x-left-start - 0.6, y-bot),
- stroke: 0.4pt + luma(140),
- )
- line(
- (x-left-start, y-top),
- (x-left-start - 0.6, y-top),
- stroke: 0.4pt + luma(140),
- )
- line(
- (x-left-start - 0.6, y-bot),
- (x-left-start - 0.6, y-top),
- mark: (start: "stealth", end: "stealth"),
- mark-size: 0.10,
- stroke: 0.6pt + black,
- )
- content(
- (x-left-start - 0.9, (y-bot + y-top) / 2),
- text(size: 7pt)[$qty(165.1, "mm")$],
- angle: 90deg,
- )
-
- // ==========================================
- // 2. REAR ELEVATION (Rear Closure: 35.7 x 165.1 mm)
- // ==========================================
- let x-rear-start = 5.8
- let x-rear-end = x-rear-start + w
- let x-rear-mid = (x-rear-start + x-rear-end) / 2
-
- // View Title
- content((x-rear-mid, y-top + 0.8), text(
- size: 8.5pt,
- weight: "bold",
- )[REAR ELEVATION])
-
- // Main Rear Closure Plate
- rect(
- (x-rear-start, y-bot),
- (x-rear-end, y-top),
- fill: luma(235),
- stroke: 1.2pt + black,
- )
-
- // Flanges (Top, Bottom, Right folded 90 deg inward)
- line((x-rear-start, y-top - f), (x-rear-end, y-top - f), stroke: (
- paint: luma(120),
- thickness: 0.7pt,
- dash: "dashed",
- ))
- line((x-rear-start, y-bot + f), (x-rear-end, y-bot + f), stroke: (
- paint: luma(120),
- thickness: 0.7pt,
- dash: "dashed",
- ))
- line((x-rear-end - f, y-bot), (x-rear-end - f, y-top), stroke: (
- paint: luma(120),
- thickness: 0.7pt,
- dash: "dashed",
- ))
-
- // DB-25 Cutout at Y = 55.0 mm (Centered)
- let db25-w = 26.0 * s
- let db25-h = 11.0 * s
- rect(
- (x-rear-start + db25-x - db25-w / 2, db25-y - db25-h / 2),
- (x-rear-start + db25-x + db25-w / 2, db25-y + db25-h / 2),
- fill: white,
- stroke: 0.9pt + black,
- )
- content((x-rear-start + db25-x, db25-y), text(
- size: 5.5pt,
- weight: "bold",
- )[DB-25])
-
- // BNC Cutout at Y = 130.0 mm (Centered, Facultative)
- let bnc-r = 6.0 * s
- circle(
- (x-rear-start + db25-x, bnc-y),
- radius: bnc-r,
- fill: white,
- stroke: 0.9pt + black,
- )
- content((x-rear-start + db25-x, bnc-y), text(
- size: 5pt,
- weight: "bold",
- )[BNC])
-
- // Cutout Centerline Indicators & Heights
- line((x-rear-start - 0.2, db25-y), (x-rear-end + 0.6, db25-y), stroke: (
- paint: luma(160),
- thickness: 0.4pt,
- dash: "dash-dotted",
- ))
- line((x-rear-start - 0.2, bnc-y), (x-rear-end + 0.6, bnc-y), stroke: (
- paint: luma(160),
- thickness: 0.4pt,
- dash: "dash-dotted",
- ))
-
- // Width Dimension (35.7 mm)
- line(
- (x-rear-start, y-bot),
- (x-rear-start, y-bot - 0.6),
- stroke: 0.4pt + luma(140),
- )
- line(
- (x-rear-end, y-bot),
- (x-rear-end, y-bot - 0.6),
- stroke: 0.4pt + luma(140),
- )
- line(
- (x-rear-start, y-bot - 0.6),
- (x-rear-end, y-bot - 0.6),
- mark: (start: "stealth", end: "stealth"),
- mark-size: 0.10,
- stroke: 0.6pt + black,
- )
- content((x-rear-mid, y-bot - 0.9), text(size: 7pt)[$qty(35.7, "mm")$])
-
- // Height Dimensions: DB-25 (55 mm) & BNC (130 mm)
- line(
- (x-rear-end, y-bot),
- (x-rear-end + 0.6, y-bot),
- stroke: 0.4pt + luma(140),
- )
- line(
- (x-rear-end + 0.6, y-bot),
- (x-rear-end + 0.6, db25-y),
- mark: (start: "stealth", end: "stealth"),
- mark-size: 0.10,
- stroke: 0.6pt + black,
- )
- content(
- (x-rear-end + 0.9, db25-y / 2),
- text(size: 6.5pt)[$qty(55.0, "mm")$],
- angle: -90deg,
- )
-
- line(
- (x-rear-end + 0.6, db25-y),
- (x-rear-end + 0.6, bnc-y),
- mark: (start: "stealth", end: "stealth"),
- mark-size: 0.10,
- stroke: 0.6pt + black,
- )
- content(
- (x-rear-end + 0.9, (db25-y + bnc-y) / 2),
- text(size: 6.5pt)[$qty(130.0, "mm")$],
- angle: -90deg,
- )
-
- // ==========================================
- // 3. ISOMETRIC VIEW (3D Sheet Metal Structure)
- // ==========================================
- let iso-x0 = 12.5
- let iso-y0 = -1
-
- // Helper function for isometric projection
- // X = Width (0..35.7 mm), Y = Height (0..165.1 mm), Z = Depth (0..152.4 mm)
- let p(x-mm, y-mm, z-mm) = {
- let px = iso-x0 + (x-mm * 0.866 - z-mm * 0.866) * s
- let py = iso-y0 + (y-mm + x-mm * 0.5 + z-mm * 0.5) * s
- return (px, py)
- }
-
- // View Title
- content((iso-x0, y-top + 0.8), text(
- size: 8.5pt,
- weight: "bold",
- )[ISOMETRIC VIEW])
-
- // Left Wall Outer Face (Z=0..152.4, Y=0..165.1, X=0)
- line(
- p(0, 0, 0),
- p(0, 0, 152.4),
- p(0, 165.1, 152.4),
- p(0, 165.1, 0),
- close: true,
- fill: luma(240),
- stroke: 1pt + black,
- )
-
- // Rear Closure Outer Face (X=0..35.7, Y=0..165.1, Z=0)
- line(
- p(0, 0, 0),
- p(35.7, 0, 0),
- p(35.7, 165.1, 0),
- p(0, 165.1, 0),
- close: true,
- fill: luma(225),
- stroke: 1pt + black,
- )
-
- // Folded Inward Flanges (8 mm width)
- // Left Wall Top Flange
- line(
- p(0, 165.1, 0),
- p(0, 165.1, 152.4),
- p(8.0, 165.1, 152.4),
- p(8.0, 165.1, 0),
- close: true,
- fill: luma(210),
- stroke: 0.8pt + black,
- )
-
- // Left Wall Front Flange
- line(
- p(0, 0, 152.4),
- p(0, 165.1, 152.4),
- p(8.0, 165.1, 152.4),
- p(8.0, 0, 152.4),
- close: true,
- fill: luma(215),
- stroke: 0.8pt + black,
- )
-
- // Rear Wall Bottom Flange
- line(
- p(0, 0, 0),
- p(0, 0, 8.0),
- p(35.7, 0, 8.0),
- p(35.7, 0, 0.0),
- close: true,
- fill: luma(200),
- stroke: 0.8pt + black,
- )
-
- // Left Wall Bottom Flange
- line(
- p(0, 0, 0),
- p(0, 0, 152.4),
- p(8.0, 0, 152.4),
- p(8.0, 0, 8),
- close: true,
- fill: luma(210),
- stroke: 0.8pt + black,
- )
-
- // Rear Wall Right Flange
- line(
- p(35.7, 0, 0),
- p(35.7, 165.1, 0),
- p(35.7, 165.1, 8.0),
- p(35.7, 0, 8.0),
- close: true,
- fill: luma(200),
- stroke: 0.8pt + black,
- )
-
- // Rear Wall Top Flange
- line(
- p(0, 165.1, 0),
- p(0, 165.1, 8.0),
- p(35.7, 165.1, 8.0),
- p(35.7, 165.1, 0.0),
- close: true,
- fill: luma(200),
- stroke: 0.8pt + black,
- )
-
- // DB-25 Cutout on Rear Face (Z=0)
- let db-w2 = 13.0
- let db-h2 = 5.5
- line(
- p(17.85 - db-w2, 55.0 - db-h2, 0),
- p(17.85 + db-w2, 55.0 - db-h2, 0),
- p(17.85 + db-w2, 55.0 + db-h2, 0),
- p(17.85 - db-w2, 55.0 + db-h2, 0),
- close: true,
- fill: white,
- stroke: 0.8pt + black,
- )
-
- // BNC Cutout on Rear Face (Z=0)
- line(
- p(17.85 - 4.5, 130.0 - 4.5, 0),
- p(17.85 + 4.5, 130.0 - 4.5, 0),
- p(17.85 + 4.5, 130.0 + 4.5, 0),
- p(17.85 - 4.5, 130.0 + 4.5, 0),
- close: true,
- fill: white,
- stroke: 0.8pt + black,
- )
-
- // PEM Nut Threaded Insert Points (Visual markers on top/front flanges)
- circle(p(4.0, 165.1, 30.0), radius: 0.05, fill: black)
- circle(p(4.0, 165.1, 120.0), radius: 0.05, fill: black)
- circle(p(4.0, 0, 30.0), radius: 0.05, fill: black)
- circle(p(4.0, 0, 120.0), radius: 0.05, fill: black)
- circle(p(4.0, 30.0, 152.4), radius: 0.05, fill: black)
- circle(p(4.0, 135.0, 152.4), radius: 0.05, fill: black)
- circle(p(35.7 - 4.0, 30.0, 0), radius: 0.05, fill: black)
- circle(p(35.7 - 4.0, 135.0, 0), radius: 0.05, fill: black)
- circle(p(17.85, 165.1, 4.0), radius: 0.05, fill: black)
- circle(p(17.85, 0, 4.0), radius: 0.05, fill: black)
-
- // Masked Unpainted Area Callout Annotation
- line(
- p(4.0, 165.1, 75.0),
- (iso-x0 + 1.2, y-top),
- stroke: 0.5pt + black,
- )
- content(
- (iso-x0 + 1.25, y-top - 0.3),
- text(size: 6.5pt)[Unpainted EMI flange \
- contact area (PEM nuts \
- fitted)],
- anchor: "south-west",
- )
- }),
- caption: [Cassette L-Channel structural spine technical drawings showing orthographic projections (left and rear elevations) and 3D isometric sheet metal form],
-) <figure-cassette-lchannel-diagram>
+#include "diagrams/l-channel-chassis.typ"
/ Role: Structural spine. Holds the PCB and Front Panel.
/ Geometry:
@@ -743,200 +70,7 @@ interlocking U-shaped steel channel:
===== U-channel (cover) <u-channel-cover>
-#figure(
- cetz.canvas({
- import cetz.draw: *
-
- // Scale factor: 1 mm = 0.060 drawing units
- let s = 0.060
-
- let h = 165.1 * s // 4.953 mm
- let d = 152.4 * s // 4.572 mm
- let w = 35.7 * s // 1.071 mm
- let f = 8.0 * s // 0.240 mm (8 mm flange overlap)
- let t = 1.2 * s // Sheet metal thickness (1.2 mm)
-
- let y-bot = 0
- let y-top = h
-
- // ==========================================
- // 1. FRONT ELEVATION (U-Profile End View: 35.7 x 165.1 mm)
- // ==========================================
- let x-front-start = 0
- let x-front-end = x-front-start + w
- let x-front-mid = (x-front-start + x-front-end) / 2
-
- // View Title
- content((x-front-mid, y-top + 0.8), text(
- size: 8.5pt,
- weight: "bold",
- )[FRONT ELEVATION])
-
- // U-Channel Sheet Metal Cross-Section Outline
- // Top Limb
- rect(
- (x-front-start, y-top - t),
- (x-front-end, y-top),
- fill: luma(210),
- stroke: 0.8pt + black,
- )
- // Right Side Wall
- rect(
- (x-front-end - t, y-bot),
- (x-front-end, y-top),
- fill: luma(230),
- stroke: 0.8pt + black,
- )
- // Bottom Limb
- rect(
- (x-front-start, y-bot),
- (x-front-end, y-bot + t),
- fill: luma(210),
- stroke: 0.8pt + black,
- )
-
- // Inner Cavity Hatch/Indicator Line
- line(
- (x-front-start, y-bot + t),
- (x-front-end - t, y-bot + t),
- (x-front-end - t, y-top - t),
- (x-front-start, y-top - t),
- stroke: (paint: luma(140), thickness: 0.5pt, dash: "dotted"),
- )
-
- // Front Width Dimension (35.7 mm)
- line(
- (x-front-start, y-bot),
- (x-front-start, y-bot - 0.6),
- stroke: 0.4pt + luma(140),
- )
- line(
- (x-front-end, y-bot),
- (x-front-end, y-bot - 0.6),
- stroke: 0.4pt + luma(140),
- )
- line(
- (x-front-start, y-bot - 0.6),
- (x-front-end, y-bot - 0.6),
- mark: (start: "stealth", end: "stealth"),
- mark-size: 0.10,
- stroke: 0.6pt + black,
- )
- content((x-front-mid, y-bot - 0.9), text(size: 7pt)[$qty(35.7, "mm")$])
-
- // Front Height Dimension (165.1 mm)
- line(
- (x-front-start, y-bot),
- (x-front-start - 0.6, y-bot),
- stroke: 0.4pt + luma(140),
- )
- line(
- (x-front-start, y-top),
- (x-front-start - 0.6, y-top),
- stroke: 0.4pt + luma(140),
- )
- line(
- (x-front-start - 0.6, y-bot),
- (x-front-start - 0.6, y-top),
- mark: (start: "stealth", end: "stealth"),
- mark-size: 0.10,
- stroke: 0.6pt + black,
- )
- content(
- (x-front-start - 0.9, (y-bot + y-top) / 2),
- text(size: 7pt)[$qty(165.1, "mm")$],
- angle: 90deg,
- )
-
- // ==========================================
- // 2. RIGHT ELEVATION (Inner Face View: 152.4 x 165.1 mm)
- // ==========================================
- let x-right-start = 3.5
- let x-right-end = x-right-start + d
- let x-right-mid = (x-right-start + x-right-end) / 2
-
- // View Title
- content((x-right-mid, y-top + 0.8), text(
- size: 8.5pt,
- weight: "bold",
- )[RIGHT ELEVATION (INNER FACE)])
-
- // Main Right Wall Sheet Metal Surface
- rect(
- (x-right-start, y-bot),
- (x-right-end, y-top),
- fill: luma(245),
- stroke: 1.2pt + black,
- )
-
- // Masked Unpainted Perimeter Area (8mm border where it mates with L-channel flanges)
- rect(
- (x-right-start + f, y-bot + f),
- (x-right-end - f, y-top - f),
- fill: luma(230),
- stroke: (paint: luma(130), thickness: 0.7pt, dash: "dashed"),
- )
- content(
- (x-right-mid, (y-bot + y-top) / 2),
- text(size: 7.5pt, fill: luma(100))[Painted Central Surface],
- )
-
- // Countersunk Through-Holes (Crosshair + concentric circles for 90-deg countersink)
- let draw-csink(cx, cy) = {
- circle((cx, cy), radius: 0.10, fill: white, stroke: 0.6pt + black)
- circle((cx, cy), radius: 0.05, fill: luma(180), stroke: 0.4pt + black)
- line((cx - 0.13, cy), (cx + 0.13, cy), stroke: 0.3pt + luma(120))
- line((cx, cy - 0.13), (cx, cy + 0.13), stroke: 0.3pt + luma(120))
- }
-
- // Top & Bottom Edge Countersunk Hole Pattern (matching top/bottom flanges)
- draw-csink(x-right-start + 30.0 * s, y-top - f / 2)
- draw-csink(x-right-start + 122.4 * s, y-top - f / 2)
- draw-csink(x-right-start + 30.0 * s, y-bot + f / 2)
- draw-csink(x-right-start + 122.4 * s, y-bot + f / 2)
-
- // Front & Rear Edge Countersunk Hole Pattern
- draw-csink(x-right-start + f / 2, y-bot + 30.0 * s)
- draw-csink(x-right-start + f / 2, y-top - 30.0 * s)
- draw-csink(x-right-end - f / 2, y-bot + 30.0 * s)
- draw-csink(x-right-end - f / 2, y-top - 30.0 * s)
-
- // Depth Dimension (152.4 mm)
- line(
- (x-right-start, y-bot),
- (x-right-start, y-bot - 0.6),
- stroke: 0.4pt + luma(140),
- )
- line(
- (x-right-end, y-bot),
- (x-right-end, y-bot - 0.6),
- stroke: 0.4pt + luma(140),
- )
- line(
- (x-right-start, y-bot - 0.6),
- (x-right-end, y-bot - 0.6),
- mark: (start: "stealth", end: "stealth"),
- mark-size: 0.10,
- stroke: 0.6pt + black,
- )
- content((x-right-mid, y-bot - 0.9), text(size: 7pt)[$qty(152.4, "mm")$])
-
- // Masked Border Callout Annotation
- line(
- (x-right-start + f / 2, y-top - 15.0 * s),
- (x-right-start - 0.5, y-top - 1.0),
- stroke: 0.5pt + black,
- )
- content(
- (x-right-start - 0.5, y-top),
- text(size: 6.5pt)[Masked unpainted perimeter \
- (8 mm EMI contact area)],
- anchor: "south-east",
- angle: 90deg,
- )
- }),
- caption: [Cassette U-Channel cover technical drawings showing Front Elevation (profile) and Right Elevation (inner face showing masked unpainted EMI perimeter and countersunk hole grid)],
-) <figure-cassette-uchannel-diagram>
+#include "diagrams/u-channel-cover.typ"
/ Role: EMI Shielding and Protection.
/ Geometry:
@@ -949,255 +83,8 @@ interlocking U-shaped steel channel:
===== Front panel <front-panel>
-#figure(
- cetz.canvas({
- import cetz.draw: *
-
- // Scale factor: 1 mm = 0.050 drawing units
- let s = 0.050
-
- let h-total = 177.8 * s // 8.890 mm
- let h-body = 165.1 * s // 8.255 mm
- let h-lip = 6.35 * s // 0.3175 mm (6.35 mm top/bottom lips)
- let w = 38.0 * s // 1.900 mm (panel width)
- let f = 8.0 * s // 0.400 mm (8 mm L-channel flange overlap)
-
- let y-bot = 0
- let y-lip-bot = h-lip
- let y-lip-top = h-total - h-lip
- let y-top = h-total
-
- // Helper: Draw M3 clearance hole (3.2 mm diameter)
- let draw-m3-hole(cx, cy) = {
- circle((cx, cy), radius: 1.6 * s, fill: white, stroke: 0.8pt + black)
- line((cx - 2.5 * s, cy), (cx + 2.5 * s, cy), stroke: 0.3pt + luma(120))
- line((cx, cy - 2.5 * s), (cx, cy + 2.5 * s), stroke: 0.3pt + luma(120))
- }
-
- // Helper: Draw M3 countersunk hole (concentric circles + crosshair)
- let draw-csink(cx, cy) = {
- circle((cx, cy), radius: 3.0 * s, fill: white, stroke: 0.8pt + black)
- circle((cx, cy), radius: 1.6 * s, fill: luma(200), stroke: 0.5pt + black)
- line((cx - 4.0 * s, cy), (cx + 4.0 * s, cy), stroke: 0.3pt + luma(120))
- line((cx, cy - 4.0 * s), (cx, cy + 4.0 * s), stroke: 0.3pt + luma(120))
- }
-
- // ==========================================
- // 1. FRONT ELEVATION (38.0 x 177.8 mm)
- // ==========================================
- let x-front-start = 0
- let x-front-end = x-front-start + w
- let x-front-mid = (x-front-start + x-front-end) / 2
-
- // View Title
- content((x-front-mid, y-top + 0.8), text(
- size: 8.5pt,
- weight: "bold",
- )[FRONT ELEVATION])
-
- // Main Panel Outer Boundary
- rect(
- (x-front-start, y-bot),
- (x-front-end, y-top),
- fill: luma(245),
- stroke: 1.2pt + black,
- )
-
- // Lip Limit Boundary Indicators (Dashed horizontal lines at 6.35 mm from top/bottom)
- line(
- (x-front-start, y-lip-bot),
- (x-front-end, y-lip-bot),
- stroke: (paint: luma(110), thickness: 0.7pt, dash: "dashed"),
- )
- line(
- (x-front-start, y-lip-top),
- (x-front-end, y-lip-top),
- stroke: (paint: luma(110), thickness: 0.7pt, dash: "dashed"),
- )
-
- // Centered M3 Panel Mounting Holes in Top and Bottom Lips
- draw-m3-hole(x-front-mid, h-lip / 2)
- draw-m3-hole(x-front-mid, h-total - h-lip / 2)
-
- // L-Channel Attachment Countersunk Holes (X = 4.0 mm, Y = 30.0 mm and 135.0 mm from body start)
- let y-hole-lower = y-lip-bot + 30.0 * s
- let y-hole-upper = y-lip-bot + 135.0 * s
- let x-hole-lchannel = x-front-start + 4.0 * s
-
- draw-csink(x-hole-lchannel, y-hole-lower)
- draw-csink(x-hole-lchannel, y-hole-upper)
-
- // Dimension: Panel Width (38.0 mm)
- line(
- (x-front-start, y-bot),
- (x-front-start, y-bot - 0.6),
- stroke: 0.4pt + luma(140),
- )
- line(
- (x-front-end, y-bot),
- (x-front-end, y-bot - 0.6),
- stroke: 0.4pt + luma(140),
- )
- line(
- (x-front-start, y-bot - 0.55),
- (x-front-end, y-bot - 0.55),
- mark: (start: "stealth", end: "stealth"),
- mark-size: 0.10,
- stroke: 0.6pt + black,
- )
- content((x-front-mid, y-bot - 0.85), text(size: 7pt)[$qty(38.0, "mm")$])
-
- // Dimension: Total Height (177.8 mm / 4U)
- line(
- (x-front-start, y-bot),
- (x-front-start - 0.6, y-bot),
- stroke: 0.4pt + luma(140),
- )
- line(
- (x-front-start, y-top),
- (x-front-start - 0.6, y-top),
- stroke: 0.4pt + luma(140),
- )
- line(
- (x-front-start - 0.55, y-bot),
- (x-front-start - 0.55, y-top),
- mark: (start: "stealth", end: "stealth"),
- mark-size: 0.10,
- stroke: 0.6pt + black,
- )
- content(
- (x-front-start - 0.85, (y-bot + y-top) / 2),
- text(size: 7pt)[$qty(177.8, "mm")$ ($qty(4, "U")$)],
- angle: 90deg,
- )
-
- // Dimension: Lip Height (6.35 mm)
- line(
- (x-front-end, y-top),
- (x-front-end + 0.6, y-top),
- stroke: 0.4pt + luma(140),
- )
- line(
- (x-front-end, y-lip-top),
- (x-front-end + 0.6, y-lip-top),
- stroke: 0.4pt + luma(140),
- )
- line(
- (x-front-end + 0.55, y-lip-top),
- (x-front-end + 0.55, y-top),
- mark: (start: "stealth", end: "stealth"),
- mark-size: 0.08,
- stroke: 0.6pt + black,
- )
- content(
- (x-front-end + 1.2, (y-lip-top + y-top) / 2),
- text(size: 6.5pt)[$qty(6.35, "mm")$],
- )
-
- // Dimension: Body Height (165.1 mm)
- line(
- (x-front-end, y-lip-bot),
- (x-front-end + 0.6, y-lip-bot),
- stroke: 0.4pt + luma(140),
- )
- line(
- (x-front-end + 0.55, y-lip-bot),
- (x-front-end + 0.55, y-lip-top),
- mark: (start: "stealth", end: "stealth"),
- mark-size: 0.10,
- stroke: 0.6pt + black,
- )
- content(
- (x-front-end + 0.85, (y-lip-bot + y-lip-top) / 2),
- text(size: 7pt)[$qty(165.1, "mm")$],
- angle: -90deg,
- )
-
- // ==========================================
- // 2. REAR ELEVATION (INNER FACE: 38.0 x 177.8 mm)
- // ==========================================
- let x-rear-start = 4.5
- let x-rear-end = x-rear-start + w
- let x-rear-mid = (x-rear-start + x-rear-end) / 2
-
- // View Title
- content((x-rear-mid, y-top + 0.8), text(
- size: 8.5pt,
- weight: "bold",
- )[REAR ELEVATION (INNER FACE)])
-
- // Painted Central Surface Area
- rect(
- (x-rear-start, y-bot),
- (x-rear-end, y-top),
- fill: luma(225),
- stroke: 1.2pt + black,
- )
-
- // Masked Unpainted Area 1: Top Lip (6.35 mm full width)
- rect(
- (x-rear-start, y-lip-top),
- (x-rear-end, y-top),
- fill: luma(250),
- stroke: (paint: luma(120), thickness: 0.6pt, dash: "dashed"),
- )
-
- // Masked Unpainted Area 2: Bottom Lip (6.35 mm full width)
- rect(
- (x-rear-start, y-bot),
- (x-rear-end, y-lip-bot),
- fill: luma(250),
- stroke: (paint: luma(120), thickness: 0.6pt, dash: "dashed"),
- )
-
- // Masked Unpainted Area 3: L-Channel Front Flange Contact Strip (8 mm along right side in rear view)
- rect(
- (x-rear-end - f, y-lip-bot),
- (x-rear-end, y-lip-top),
- fill: luma(250),
- stroke: (paint: luma(120), thickness: 0.6pt, dash: "dashed"),
- )
-
- // Center Painted Label
- content(
- (x-rear-start + (w - f) / 2, (y-lip-bot + y-lip-top) / 2),
- text(size: 7.5pt, fill: luma(100))[Painted Surface],
- )
-
- // M3 Lip Holes in Rear View
- draw-m3-hole(x-rear-mid, h-lip / 2)
- draw-m3-hole(x-rear-mid, h-total - h-lip / 2)
-
- // L-Channel Attachment Holes in Rear View (X = 38.0 - 4.0 = 34.0 mm in rear view)
- let x-hole-rear = x-rear-end - 4.0 * s
- draw-m3-hole(x-hole-rear, y-hole-lower)
- draw-m3-hole(x-hole-rear, y-hole-upper)
-
- // Masked Contact Area Callout Annotations
- line(
- (x-rear-mid, y-top - h-lip / 2),
- (x-rear-end + 0.5, y-top + 0.3),
- stroke: 0.5pt + black,
- )
- content(
- (x-rear-end + 0.55, y-top + 0.3),
- text(size: 6.5pt)[Masked unpainted lip (chassis grounding)],
- anchor: "south-west",
- )
-
- line(
- (x-rear-end - f / 2, y-hole-upper + 10.0 * s),
-