From b28f97f3526859633fde603764b827389279d10f Mon Sep 17 00:00:00 2001 From: Denis Chevalier Date: Mon, 10 Aug 2026 22:32:38 +0200 Subject: extract figures in separate files --- diagrams/backplane-connector-diagram.typ | 127 +++++++ diagrams/cassette-external-dimensions.typ | 221 ++++++++++++ diagrams/cassette-ventilation.typ | 364 ++++++++++++++++++++ diagrams/chassis-dimensional-requirements.typ | 477 ++++++++++++++++++++++++++ diagrams/db-25-connector-cutout.typ | 297 ++++++++++++++++ diagrams/front-panel.typ | 252 ++++++++++++++ diagrams/l-channel-chassis.typ | 422 +++++++++++++++++++++++ diagrams/panels-grid.typ | 342 ++++++++++++++++++ diagrams/u-channel-cover.typ | 197 +++++++++++ 9 files changed, 2699 insertions(+) create mode 100644 diagrams/backplane-connector-diagram.typ create mode 100644 diagrams/cassette-external-dimensions.typ create mode 100644 diagrams/cassette-ventilation.typ create mode 100644 diagrams/chassis-dimensional-requirements.typ create mode 100644 diagrams/db-25-connector-cutout.typ create mode 100644 diagrams/front-panel.typ create mode 100644 diagrams/l-channel-chassis.typ create mode 100644 diagrams/panels-grid.typ create mode 100644 diagrams/u-channel-cover.typ (limited to 'diagrams') diff --git a/diagrams/backplane-connector-diagram.typ b/diagrams/backplane-connector-diagram.typ new file mode 100644 index 0000000..0b2d254 --- /dev/null +++ b/diagrams/backplane-connector-diagram.typ @@ -0,0 +1,127 @@ +#import "../lib/unify.typ": qty +#import "@preview/cetz:0.5.2" + +#figure( + cetz.canvas({ + import cetz.draw: * + + let dx = 1.0 + let top-y = 0.55 + let bot-y = -0.55 + + // Outer mounting flange / metal ears + rect( + (-2.0, -1.4), + (14.0, 1.4), + rx: 0.2, + fill: luma(245), + stroke: 1pt + luma(100), + ) + + // Left and right chassis mounting screw holes + circle((-1.3, 0), radius: 0.35, fill: luma(220), stroke: 1pt + luma(120)) + circle((-1.3, 0), radius: 0.20, fill: white, stroke: 0.8pt + luma(100)) + circle((13.3, 0), radius: 0.35, fill: luma(220), stroke: 1pt + luma(120)) + circle((13.3, 0), radius: 0.20, fill: white, stroke: 0.8pt + luma(100)) + + // D-Sub trapezoidal shroud outline + line( + (-0.7, 1.15), + (12.7, 1.15), + (12.2, -1.15), + (-0.2, -1.15), + close: true, + fill: luma(230), + stroke: 1.5pt + black, + ) + + // Shell Earth ground connection reference + line((-0.45, -1.15), (-0.45, -2.0), stroke: ( + paint: luma(120), + thickness: 0.7pt, + dash: "dashed", + )) + content( + (-0.45, -2.05), + text(size: 7.5pt, weight: "bold")[Shell: Chassis Earth], + angle: -50deg, + anchor: "north-west", + ) + + // Top row pins (Pins 1 to 13) + let top-pins = ( + ("1", [$plus qty(15.00, "V")$]), + ("2", [$plus qty(15.00, "V")$]), + ("3", [$qty(-15.00, "V")$]), + ("4", [$qty(-15.00, "V")$]), + ("5", [AGND]), + ("6", [AGND]), + ("7", [AGND]), + ("8", [$plus qty(10.0000, "V")$ Force]), + ("9", [$plus qty(10.0000, "V")$ Sense]), + ("10", [$qty(-10.0000, "V")$ Force]), + ("11", [$qty(-10.0000, "V")$ Sense]), + ("12", [AGND]), + ("13", [AGND]), + ) + + // Bottom row pins (Pins 14 to 25) + let bot-pins = ( + ("14", [AGND]), + ("15", [AGND]), + ("16", [AGND]), + ("17", [DGND]), + ("18", [DGND]), + ("19", [$plus qty(5.0, "VD")$]), + ("20", [$qty(-5.0, "VD")$]), + ("21", [Stagger]), + ("22", [_Reserved_]), + ("23", [_Reserved_]), + ("24", [_Reserved_]), + ("25", [Chassis Earth]), + ) + + // Draw Top Pins (1-13) + for (i, p) in top-pins.enumerate() { + let x = i * dx + let p-num = p.at(0) + let p-sig = p.at(1) + + circle((x, top-y), radius: 0.26, fill: white, stroke: 1pt + black) + content((x, top-y), text(size: 7pt, weight: "bold")[#p-num]) + + line((x, top-y + 0.26), (x, 1.8), stroke: ( + paint: luma(120), + thickness: 0.6pt, + )) + content( + (x, 1.85), + text(size: 7.5pt)[#p-sig], + angle: 50deg, + anchor: "south-west", + ) + } + + // Draw Bottom Pins (14-25) + for (j, p) in bot-pins.enumerate() { + let x = (j + 0.5) * dx + let p-num = p.at(0) + let p-sig = p.at(1) + + circle((x, bot-y), radius: 0.26, fill: white, stroke: 1pt + black) + content((x, bot-y), text(size: 7pt, weight: "bold")[#p-num]) + + line((x, bot-y - 0.26), (x, -1.8), stroke: ( + paint: luma(120), + thickness: 0.6pt, + )) + content( + (x, -1.85), + text(size: 7.5pt)[#p-sig], + angle: -50deg, + anchor: "north-west", + ) + } + }), + caption: [DB-25 backplane connector physical pinout and signal allocation diagram.], +) diff --git a/diagrams/cassette-external-dimensions.typ b/diagrams/cassette-external-dimensions.typ new file mode 100644 index 0000000..61b0877 --- /dev/null +++ b/diagrams/cassette-external-dimensions.typ @@ -0,0 +1,221 @@ +#import "../lib/unify.typ": qty +#import "@preview/cetz:0.5.2" + +#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], +) diff --git a/diagrams/cassette-ventilation.typ b/diagrams/cassette-ventilation.typ new file mode 100644 index 0000000..c353d4c --- /dev/null +++ b/diagrams/cassette-ventilation.typ @@ -0,0 +1,364 @@ +#import "../lib/unify.typ": qty +#import "@preview/cetz:0.5.2" + +#figure( + cetz.canvas({ + import cetz.draw: * + + // Scale factor: 1 mm = 0.045 drawing units + let s = 0.045 + + let face-d = 152.4 * s // Depth = 152.4 mm + let face-w = 35.7 * s // Width = 35.7 mm + + // Slot parameters + let slot-w = 2.5 * s // Slot width = 2.5 mm + let slot-l = 10.0 * s // Slot length = 10.0 mm + let slot-r = slot-w / 2 // Full corner radius = 1.25 mm + let row-pitch = 5.0 * s // 5 rows across width + let col-pitch = 12.0 * s // 12 columns across depth + + // Calculate array offsets to center slots on face + let row-start = (face-w - (4 * row-pitch)) / 2 + let col-start = (face-d - (11 * col-pitch + slot-l)) / 2 + + // ========================================== + // 1. TOP / BOTTOM FACE VENTILATION PATTERN (152.4 mm x 35.7 mm) + // ========================================== + let x-top-start = -0.5 + let y-top-start = 5.2 + let x-top-end = x-top-start + face-d + let y-top-end = y-top-start + face-w + let x-top-mid = (x-top-start + x-top-end) / 2 + let y-top-mid = (y-top-start + y-top-end) / 2 + + // View Title + content((x-top-mid, y-top-end + 0.7), text( + size: 9pt, + weight: "bold", + )[TOP / BOTTOM FACE VENTILATION PATTERN]) + content((x-top-mid, y-top-end + 0.35), text( + size: 7pt, + fill: luma(90), + )[(60 Slots per face: $5$ rows $times 12$ columns)]) + + // Main Plate Outline + rect( + (x-top-start, y-top-start), + (x-top-end, y-top-end), + fill: luma(250), + stroke: 1.2pt + black, + ) + + // 5 Rows x 12 Columns Slot Array with Full Corner Radius + for r in range(0, 5) { + let sy = y-top-start + row-start + r * row-pitch + for c in range(0, 12) { + let sx = x-top-start + col-start + c * col-pitch + rect( + (sx, sy - slot-w / 2), + (sx + slot-l, sy + slot-w / 2), + radius: slot-r, + fill: white, + stroke: 0.5pt + black, + ) + } + } + + // Depth Dimension (152.4 mm) + line( + (x-top-start, y-top-start), + (x-top-start, y-top-start - 0.5), + stroke: 0.4pt + luma(140), + ) + line( + (x-top-end, y-top-start), + (x-top-end, y-top-start - 0.5), + stroke: 0.4pt + luma(140), + ) + line( + (x-top-start, y-top-start - 0.45), + (x-top-end, y-top-start - 0.45), + mark: (start: "stealth", end: "stealth"), + mark-size: 0.10, + stroke: 0.6pt + black, + ) + content((x-top-mid, y-top-start - 0.75), text( + size: 7.5pt, + )[$qty(152.4, "mm")$]) + + // Width Dimension (35.7 mm) + line( + (x-top-end, y-top-start), + (x-top-end + 0.5, y-top-start), + stroke: 0.4pt + luma(140), + ) + line( + (x-top-end, y-top-end), + (x-top-end + 0.5, y-top-end), + stroke: 0.4pt + luma(140), + ) + line( + (x-top-end + 0.45, y-top-start), + (x-top-end + 0.45, y-top-end), + mark: (start: "stealth", end: "stealth"), + mark-size: 0.10, + stroke: 0.6pt + black, + ) + content( + (x-top-end + 0.75, y-top-mid), + text(size: 7.5pt)[$qty(35.7, "mm")$], + angle: -90deg, + ) + + // Column Pitch Indicator (12.0 mm) + let c0-x = x-top-start + col-start + slot-l / 2 + let c1-x = c0-x + col-pitch + line((c0-x, y-top-start), (c0-x, y-top-start - 1.2), stroke: ( + paint: luma(140), + thickness: 0.4pt, + dash: "dashed", + )) + line((c1-x, y-top-start), (c1-x, y-top-start - 1.2), stroke: ( + paint: luma(140), + thickness: 0.4pt, + dash: "dashed", + )) + line( + (c0-x, y-top-start - 1.15), + (c1-x, y-top-start - 1.15), + mark: (start: "stealth", end: "stealth"), + mark-size: 0.08, + stroke: 0.5pt + black, + ) + content(((c0-x + c1-x) / 2, y-top-start - 1.35), text( + size: 6.5pt, + )[Column pitch: $qty(12.0, "mm")$ ($12$ cols)]) + + // Row Pitch Indicator (5.0 mm) + let r0-y = y-top-start + row-start + let r1-y = r0-y + row-pitch + line((x-top-start, r0-y), (x-top-start - 0.8, r0-y), stroke: ( + paint: luma(140), + thickness: 0.4pt, + dash: "dashed", + )) + line((x-top-start, r1-y), (x-top-start - 0.8, r1-y), stroke: ( + paint: luma(140), + thickness: 0.4pt, + dash: "dashed", + )) + line( + (x-top-start - 0.75, r0-y), + (x-top-start - 0.75, r1-y), + mark: (start: "stealth", end: "stealth"), + mark-size: 0.08, + stroke: 0.5pt + black, + ) + content( + (x-top-start - 0.85, (r0-y + r1-y) / 2), + text(size: 6.5pt)[Row pitch: $qty(5.0, "mm")$ ($5$ rows)], + anchor: "east", + ) + + // ========================================== + // 2. SINGLE SLOT GEOMETRY DETAIL (Enlarged View) + // ========================================== + let x-detail-center = -1.0 + let y-detail-center = 1.8 + let detail-l = 2.8 // Magnified length (10.0 mm) + let detail-w = 0.7 // Magnified width (2.5 mm) + let detail-r = detail-w / 2 // Full radius (1.25 mm) + + let sx1 = x-detail-center - detail-l / 2 + let sx2 = x-detail-center + detail-l / 2 + let sy1 = y-detail-center - detail-w / 2 + let sy2 = y-detail-center + detail-w / 2 + + // View Title + content((x-detail-center, y-detail-center + 1.2), text( + size: 8.5pt, + weight: "bold", + )[SINGLE SLOT GEOMETRY DETAIL]) + content((x-detail-center, y-detail-center + 0.85), text( + size: 7pt, + fill: luma(90), + )[(Enlarged view: $qty(2.5, "mm") times qty(10.0, "mm")$ slot)]) + + // Centerlines + line( + (sx1 - 0.4, y-detail-center), + (sx2 + 0.4, y-detail-center), + stroke: (paint: luma(120), thickness: 0.4pt, dash: "dash-dotted"), + ) + line( + (x-detail-center, sy1 - 0.4), + (x-detail-center, sy2 + 0.4), + stroke: (paint: luma(120), thickness: 0.4pt, dash: "dash-dotted"), + ) + + // Magnified Rounded Stadium Slot Contour + rect( + (sx1, sy1), + (sx2, sy2), + radius: detail-r, + fill: white, + stroke: 1.2pt + black, + ) + + // Slot Length Dimension (10.0 mm) + line((sx1, sy1), (sx1, sy1 - 0.5), stroke: 0.4pt + luma(140)) + line((sx2, sy1), (sx2, sy1 - 0.5), stroke: 0.4pt + luma(140)) + line( + (sx1, sy1 - 0.45), + (sx2, sy1 - 0.45), + mark: (start: "stealth", end: "stealth"), + mark-size: 0.08, + stroke: 0.6pt + black, + ) + content((x-detail-center, sy1 - 0.7), text( + size: 7pt, + )[$qty(10.0, "mm")$ (parallel to depth)]) + + // Slot Width Dimension (2.5 mm) + line((sx2, sy1), (sx2 + 0.5, sy1), stroke: 0.4pt + luma(140)) + line((sx2, sy2), (sx2 + 0.5, sy2), stroke: 0.4pt + luma(140)) + line( + (sx2 + 0.45, sy1), + (sx2 + 0.45, sy2), + mark: (start: "stealth", end: "stealth"), + mark-size: 0.08, + stroke: 0.6pt + black, + ) + content( + (sx2 + 0.55, y-detail-center), + text(size: 7pt)[$qty(2.5, "mm")$], + anchor: "west", + ) + + // Full Corner Radius Callout (R = 1.25 mm) + let arc-px = sx1 + detail-r * 0.29 + let arc-py = y-detail-center + detail-r * 0.71 + line( + (arc-px - 0.8, arc-py + 0.3), + (arc-px, arc-py), + mark: (end: "stealth"), + mark-size: 0.08, + stroke: 0.6pt + black, + ) + content( + (arc-px - 0.85, arc-py + 0.35), + text(size: 6.5pt)[$R = qty(1.25, "mm")$], + anchor: "east", + ) + + // ========================================== + // 3. CONVECTIVE COOLING & EMI SHIELDING CONCEPT + // ========================================== + let x-phys-center = 6.5 + let y-phys-center = 1.8 + let phys-w = 3.6 + let phys-t = 0.12 + + // View Title + content((x-phys-center, y-phys-center + 1.2), text( + size: 8.5pt, + weight: "bold", + )[CONVECTIVE COOLING & EMI SHIELDING]) + content((x-phys-center, y-phys-center + 0.85), text( + size: 7pt, + fill: luma(90), + )[(Cross-sectional thermal & RF attenuation concept)]) + + // Top Face Metal Plate with 4 Slot Openings + let top-y = y-phys-center + 0 + rect( + (x-phys-center - phys-w / 2, top-y), + (x-phys-center + phys-w / 2, top-y + phys-t), + fill: luma(220), + stroke: 0.8pt + black, + ) + + // Bottom Face Metal Plate with 4 Slot Openings + let bot-y = y-phys-center - 1.2 + rect( + (x-phys-center - phys-w / 2, bot-y - phys-t), + (x-phys-center + phys-w / 2, bot-y), + fill: luma(220), + stroke: 0.8pt + black, + ) + + // Slot Apertures Cut into Plates + let ap-offsets = (-1.2, -0.4, 0.4, 1.2) + for dx in ap-offsets { + rect( + (x-phys-center + dx - 0.15, top-y - 0.02), + (x-phys-center + dx + 0.15, top-y + phys-t + 0.02), + fill: white, + stroke: none, + ) + rect( + (x-phys-center + dx - 0.15, bot-y - phys-t - 0.02), + (x-phys-center + dx + 0.15, bot-y + 0.02), + fill: white, + stroke: none, + ) + + // Convective Natural Airflow Lines (Dashed Vertical Lines) + line( + (x-phys-center + dx, bot-y - 0.4), + (x-phys-center + dx, top-y + 0.4), + stroke: (paint: black, thickness: 0.8pt, dash: "dashed"), + mark: (end: "stealth"), + mark-size: 0.08, + ) + } + + // Plate Labels + content( + (x-phys-center + phys-w / 2 + 0.15, top-y + phys-t / 2), + text(size: 6.5pt, weight: "bold")[Top face], + anchor: "west", + ) + content( + (x-phys-center + phys-w / 2 + 0.15, bot-y - phys-t / 2), + text(size: 6.5pt, weight: "bold")[Bottom face], + anchor: "west", + ) + + // Convective Airflow Center Annotation + content((x-phys-center, y-phys-center - 0.6), text( + size: 7pt, + weight: "bold", + )[Natural convection airflow]) + + // Incident RF Wave Attenuation Annotation (Wave Bouncing off Metal Face) + let wave-x0 = x-phys-center - 1.5 + line( + (wave-x0, top-y - 0.2), + (wave-x0 + 0.15, top-y - 0.4), + (wave-x0 + 0.3, top-y - 0.2), + (wave-x0 + 0.45, top-y - 0.4), + (wave-x0 + 0.6, top-y - 0.25), + stroke: 0.8pt + black, + ) + line( + (wave-x0 + 0.6, top-y - 0.25), + (wave-x0 + 0.3, top-y - 0.05), + stroke: 0.8pt + black, + mark: (end: "stealth"), + mark-size: 0.07, + ) + content( + (wave-x0 - 0.1, top-y - 0.1), + text(size: 6pt, weight: "bold")[Incident RF wave], + anchor: "east", + ) + content( + (wave-x0 - 0.1, top-y - 0.35), + text(size: 5.5pt, fill: luma(100))[(Attenuated $> qty(20, "dB")$)], + anchor: "east", + ) + }), + caption: [Cassette ventilation system details detailing full $5 times 12$ slot top elevation array, magnified single slot geometry with $R = qty(1.25, "mm")$ corner radius, and cross-sectional natural convective cooling / RF electromagnetic shielding concept], +) diff --git a/diagrams/chassis-dimensional-requirements.typ b/diagrams/chassis-dimensional-requirements.typ new file mode 100644 index 0000000..9168a7d --- /dev/null +++ b/diagrams/chassis-dimensional-requirements.typ @@ -0,0 +1,477 @@ +#import "../lib/unify.typ": qty +#import "@preview/cetz:0.5.2" + +#figure( + cetz.canvas({ + import cetz.draw: * + + // Scale factor: 1 mm = 0.04 drawing units + let s = 0.04 + + // ========================================================================= + // VIEW A: SIDE ELEVATION CUTAWAY (Chassis & Module Clearance) + // ========================================================================= + let x-side-start = -3.8 + let y-side-bot = 0 + let h-panel = 177.8 * s // 4.2672 + let h-body = 165.1 * s // 3.9624 + let h-lip = 6.35 * s // 0.1524 + let d-body = 152.4 * s // 3.6576 + let d-cable = 28.0 * s // 0.672 (>= 25 mm cable bend zone) + + let y-side-top = y-side-bot + h-panel + let y-body-bot = y-side-bot + h-lip + let y-body-top = y-side-top - h-lip + let x-panel-front = x-side-start + let x-body-start = x-panel-front + 3.0 * s + let x-body-rear = x-body-start + d-body + let x-chassis-rear = x-body-rear + d-cable + + // View Title + content((x-body-start + (d-body + d-cable) / 2, y-side-top + 1.5), text( + size: 8.5pt, + weight: "bold", + )[VIEW A: SIDE ELEVATION CUTAWAY]) + content((x-body-start + (d-body + d-cable) / 2, y-side-top + 1.15), text( + size: 7pt, + fill: luma(90), + )[(Chassis enclosure & module interface clearance)]) + + // Chassis Steel Structure Outline (1.5 mm / 2.0 mm outer shell) + rect( + (x-body-start - 2.0 * s, y-side-bot - 2.0 * s), + (x-chassis-rear + 2.0 * s, y-side-top + 2.0 * s), + fill: luma(250), + stroke: 1.2pt + black, + ) + + // Cassette Guide Rails (Top and Bottom Channels) + rect( + (x-body-start, y-side-top - 8.0 * s), + (x-body-rear, y-side-top), + fill: luma(210), + stroke: 0.8pt + black, + ) + rect( + (x-body-start, y-side-bot), + (x-body-rear, y-side-bot + 8.0 * s), + fill: luma(210), + stroke: 0.8pt + black, + ) + + // Installed Cassette Outer Body (White fill inside chassis) + rect( + (x-body-start, y-body-bot), + (x-body-rear, y-body-top), + fill: white, + stroke: 1pt + black, + ) + + // Front Panel Attached to Cassette Lip + rect( + (x-panel-front, y-side-bot), + (x-body-start, y-side-top), + fill: luma(225), + stroke: 1.2pt + black, + ) + + // DB-25 Backplane Connector (Mating Pair at Rear of Cassette) + let db-h = 50.0 * s + rect( + (x-body-rear - 2.0 * s, y-side-bot + (h-panel - db-h) / 2), + (x-body-rear + 8.0 * s, y-side-bot + (h-panel + db-h) / 2), + fill: luma(180), + stroke: 0.9pt + black, + ) + + // Cable Bend & Wiring Harness Zone (Dashed hatched path behind backplane) + line( + (x-body-rear + 8.0 * s, y-side-bot + h-panel / 2), + (x-chassis-rear - 4.0 * s, y-side-bot + h-panel / 2), + (x-chassis-rear - 4.0 * s, y-side-bot + 15.0 * s), + stroke: (paint: luma(120), thickness: 0.8pt, dash: "dashed"), + ) + + // Dimensions for View A + // Total Panel Height (177.8 mm / 4U) + line( + (x-panel-front, y-side-bot), + (x-panel-front - 0.5, y-side-bot), + stroke: 0.4pt + luma(140), + ) + line( + (x-panel-front, y-side-top), + (x-panel-front - 0.5, y-side-top), + stroke: 0.4pt + luma(140), + ) + line( + (x-panel-front - 0.45, y-side-bot), + (x-panel-front - 0.45, y-side-top), + mark: (start: "stealth", end: "stealth"), + mark-size: 0.08, + stroke: 0.6pt + black, + ) + content( + (x-panel-front - 0.75, (y-side-bot + y-side-top) / 2), + text(size: 6.5pt, weight: "bold")[$qty(177.8, "mm")$ ($qty(4, "U")$)], + angle: 90deg, + ) + + // Lip Height (6.35 mm) + line( + (x-body-start, y-side-top), + (x-body-start + 0.4, y-side-top), + stroke: 0.4pt + luma(140), + ) + line( + (x-body-start, y-body-top), + (x-body-start + 0.4, y-body-top), + stroke: 0.4pt + luma(140), + ) + line( + (x-body-start + 0.35, y-body-top), + (x-body-start + 0.35, y-side-top), + mark: (start: "stealth", end: "stealth"), + mark-size: 0.06, + stroke: 0.6pt + black, + ) + content((x-body-start + 0.65, (y-body-top + y-side-top) / 2), text( + size: 5.5pt, + )[$qty(6.35, "mm")$]) + + // Body Height (165.1 mm) + line( + (x-body-start + 0.8, y-body-bot), + (x-body-start + 0.8, y-body-top), + stroke: (paint: luma(140), thickness: 0.4pt, dash: "dashed"), + ) + line( + (x-body-start + 0.8, y-body-bot), + (x-body-start + 0.8, y-body-top), + mark: (start: "stealth", end: "stealth"), + mark-size: 0.08, + stroke: 0.6pt + black, + ) + content( + (x-body-start + 1.1, (y-body-bot + y-body-top) / 2), + text(size: 6.5pt)[$qty(165.1, "mm")$ body], + angle: -90deg, + ) + + // Cassette Depth (152.4 mm) + line( + (x-body-start, y-side-top + 2.0 * s), + (x-body-start, y-side-top + 0.5), + stroke: 0.4pt + luma(140), + ) + line( + (x-body-rear, y-side-top + 2.0 * s), + (x-body-rear, y-side-top + 0.5), + stroke: 0.4pt + luma(140), + ) + line( + (x-body-start, y-side-top + 0.45), + (x-body-rear, y-side-top + 0.45), + mark: (start: "stealth", end: "stealth"), + mark-size: 0.08, + stroke: 0.6pt + black, + ) + content(((x-body-start + x-body-rear) / 2, y-side-top + 0.65), text( + size: 6.5pt, + )[$qty(152.4, "mm")$]) + + // Cable Zone Depth (>= 25.0 mm) + line( + (x-chassis-rear, y-side-top + 2.0 * s), + (x-chassis-rear, y-side-top + 0.5), + stroke: 0.4pt + luma(140), + ) + line( + (x-body-rear, y-side-top + 0.45), + (x-chassis-rear, y-side-top + 0.45), + mark: (start: "stealth", end: "stealth"), + mark-size: 0.08, + stroke: 0.6pt + black, + ) + content(((x-body-rear + x-chassis-rear) / 2, y-side-top + 0.65), text( + size: 6pt, + )[$gt.eq qty(25.0, "mm")$]) + + // Callout Annotations for View A + line( + (x-body-rear + 3.0 * s, y-side-bot + h-panel / 2), + (x-body-rear + 1.2, y-side-bot + h-panel / 2 + 0.6), + stroke: 0.5pt + black, + ) + content( + (x-body-rear + 1.25, y-side-bot + h-panel / 2 + 0.6), + text(size: 6pt)[DB-25 backplane \ + (grounded via shell & pin 25)], + anchor: "south-west", + ) + + line( + (x-chassis-rear - 2.0 * s, y-side-bot + 20.0 * s), + (x-chassis-rear + 0.5, y-side-bot - 0.3), + stroke: 0.5pt + black, + ) + content( + (x-chassis-rear + 0.55, y-side-bot - 0.3), + text(size: 6pt)[Cable bend & wiring zone], + anchor: "west", + ) + + // ========================================================================= + // VIEW B: FRONT ELEVATION (Module Pitch Alignment) + // ========================================================================= + let x-front-view = 7.2 + let w-module = 38.0 * s // 0.912 + let pitch-module = 38.1 * s // 0.9144 + + // View Title + content((x-front-view + 1.5 * pitch-module, y-side-top + 1.5), text( + size: 8.5pt, + weight: "bold", + )[VIEW B: FRONT ELEVATION]) + content((x-front-view + 1.5 * pitch-module, y-side-top + 1.15), text( + size: 7pt, + fill: luma(90), + )[(Module pitch & slot interface alignment)]) + + // Chassis Front Frame + rect( + (x-front-view - 0.2, y-side-bot - 2.0 * s), + (x-front-view + 3 * pitch-module + 0.2, y-side-top + 2.0 * s), + fill: luma(240), + stroke: 1.2pt + black, + ) + + // Module Slot 1 (Module 1 Installed) + let m1-x = x-front-view + rect( + (m1-x, y-side-bot), + (m1-x + w-module, y-side-top), + fill: luma(250), + stroke: 1pt + black, + ) + circle( + (m1-x + w-module / 2, y-side-bot + h-lip / 2), + radius: 1.2 * s, + fill: white, + stroke: 0.6pt + black, + ) + circle( + (m1-x + w-module / 2, y-side-top - h-lip / 2), + radius: 1.2 * s, + fill: white, + stroke: 0.6pt + black, + ) + content((m1-x + w-module / 2, y-side-bot + h-panel / 2), text( + size: 6.5pt, + weight: "bold", + )[Module 1]) + + // Module Slot 2 (Module 2 Installed) + let m2-x = x-front-view + pitch-module + rect( + (m2-x, y-side-bot), + (m2-x + w-module, y-side-top), + fill: luma(250), + stroke: 1pt + black, + ) + circle( + (m2-x + w-module / 2, y-side-bot + h-lip / 2), + radius: 1.2 * s, + fill: white, + stroke: 0.6pt + black, + ) + circle( + (m2-x + w-module / 2, y-side-top - h-lip / 2), + radius: 1.2 * s, + fill: white, + stroke: 0.6pt + black, + ) + content((m2-x + w-module / 2, y-side-bot + h-panel / 2), text( + size: 6.5pt, + weight: "bold", + )[Module 2]) + + // Module Slot 3 (Empty Slot showing chassis guide rails) + let m3-x = x-front-view + 2 * pitch-module + rect( + (m3-x, y-side-bot), + (m3-x + w-module, y-side-top), + fill: white, + stroke: 0.8pt + black, + ) + rect( + (m3-x, y-side-top - h-lip), + (m3-x + w-module, y-side-top), + fill: luma(210), + stroke: 0.5pt + black, + ) + rect( + (m3-x, y-side-bot), + (m3-x + w-module, y-side-bot + h-lip), + fill: luma(210), + stroke: 0.5pt + black, + ) + content((m3-x + w-module / 2, y-side-bot + h-panel / 2), text( + size: 6pt, + fill: luma(100), + )[Empty slot \ (rails visible)]) + + // Centerlines for Module Center Pitch + line( + (m1-x + w-module / 2, y-side-bot - 0.4), + (m1-x + w-module / 2, y-side-top + 0.4), + stroke: (paint: luma(120), thickness: 0.4pt, dash: "dash-dotted"), + ) + line( + (m2-x + w-module / 2, y-side-bot - 0.4), + (m2-x + w-module / 2, y-side-top + 0.4), + stroke: (paint: luma(120), thickness: 0.4pt, dash: "dash-dotted"), + ) + line( + (m3-x + w-module / 2, y-side-bot - 0.4), + (m3-x + w-module / 2, y-side-top + 0.4), + stroke: (paint: luma(120), thickness: 0.4pt, dash: "dash-dotted"), + ) + + // Dimension: Module Pitch (38.1 mm / 1.5") + line( + (m1-x + w-module / 2, y-side-top + 0.35), + (m2-x + w-module / 2, y-side-top + 0.35), + mark: (start: "stealth", end: "stealth"), + mark-size: 0.08, + stroke: 0.6pt + black, + ) + content(((m1-x + m2-x + w-module) / 2, y-side-top + 0.55), text( + size: 6.5pt, + )[$qty(38.1, "mm")$ ($qty(1.5, "inch")$) pitch]) + + // ========================================================================= + // VIEW C: CASSETTE RAIL GEOMETRY & RETENTION (ENLARGED DETAIL) + // ========================================================================= + let x-rail-center = 4.8 + let y-rail-center = -3.6 + let rail-w = 38.1 * 0.08 // Magnified channel width (38.1 mm) + let rail-h = 6.35 * 0.08 // Magnified rail height (6.35 mm) + let lip-t = 1.2 * 0.08 // Sheet metal thickness (1.2 mm) + + let rx1 = x-rail-center - rail-w / 2 + let rx2 = x-rail-center + rail-w / 2 + let ry1 = y-rail-center - rail-h / 2 + let ry2 = y-rail-center + rail-h / 2 + + // View Title + content((x-rail-center, y-rail-center + 2.2), text( + size: 8.5pt, + weight: "bold", + )[VIEW C: CASSETTE RAIL GEOMETRY & RETENTION]) + content((x-rail-center, y-rail-center + 1.85), text( + size: 7pt, + fill: luma(90), + )[(Cross-section of guide rail channel - scale enlarged)]) + + // Main Chassis Guide Channel (U-shaped metal guide track) + line( + (rx1 - 0.4, ry2 + 0.4), + (rx1 - 0.4, ry1 - lip-t), + (rx2 + 0.4, ry1 - lip-t), + (rx2 + 0.4, ry2 + 0.4), + stroke: 1.2pt + black, + ) + line( + (rx1, ry2 + 0.4), + (rx1, ry1), + (rx2, ry1), + (rx2, ry2 + 0.4), + stroke: 1.2pt + black, + ) + + // Inserted Cassette Front Panel Lip (Mating into Channel) + rect( + (rx1 + 0.05, ry1 + 0.05), + (rx2 - 0.05, ry2), + fill: luma(230), + stroke: 0.8pt + black, + ) + + // Optional Spring Clip / Retention Latch (Contact spring on left side) + line( + (rx1 - 0.3, ry1 + 0.2), + (rx1 - 0.05, ry1 + 0.25), + (rx1 + 0.2, ry1 + 0.2), + stroke: 0.8pt + black, + ) + circle((rx1 - 0.3, ry1 + 0.2), radius: 0.04, fill: black) + + // Centerline + line( + (x-rail-center, ry1 - 0.6), + (x-rail-center, ry2 + 0.6), + stroke: (paint: luma(120), thickness: 0.4pt, dash: "dash-dotted"), + ) + + // Dimension: Channel Width (38.1 mm +0.2/-0.0 mm) + line((rx1, ry2 + 0.1), (rx1, ry2 + 0.7), stroke: 0.4pt + luma(140)) + line((rx2, ry2 + 0.1), (rx2, ry2 + 0.7), stroke: 0.4pt + luma(140)) + line( + (rx1, ry2 + 0.6), + (rx2, ry2 + 0.6), + mark: (start: "stealth", end: "stealth"), + mark-size: 0.08, + stroke: 0.6pt + black, + ) + content((x-rail-center, ry2 + 0.85), text( + size: 7pt, + )[Channel width: $qty(38.1, "mm") +0.2/(-0.0)$]) + + // Dimension: Rail Height (6.35 mm / 0.25") + line((rx2 + 0.1, ry1), (rx2 + 0.7, ry1), stroke: 0.4pt + luma(140)) + line((rx2 + 0.1, ry2), (rx2 + 0.7, ry2), stroke: 0.4pt + luma(140)) + line( + (rx2 + 0.6, ry1), + (rx2 + 0.6, ry2), + mark: (start: "stealth", end: "stealth"), + mark-size: 0.08, + stroke: 0.6pt + black, + ) + content( + (rx2 + 0.8, (ry1 + ry2) / 2), + text( + size: 6.5pt, + )[$qty(6.35, "mm")$ ($qty(0.25, "inch")$) rail height], + anchor: "west", + ) + + // Callout Annotations for View C + line( + (rx1 - 0.15, ry1 + 0.2), + (rx1 - 1.2, ry1 - 0.4), + stroke: 0.5pt + black, + ) + content( + (rx1 - 1.25, ry1 - 0.4), + text( + size: 6pt, + )[Optional positive retention \ (spring clip / latch mechanism)], + anchor: "east", + ) + + line( + (rx2 - 0.3, ry1 + 0.1), + (rx2 + 1.2, ry1 - 0.4), + stroke: 0.5pt + black, + ) + content( + (rx2 + 1.25, ry1 - 0.4), + text( + size: 6pt, + )[Metal-to-metal grounding contact \ (cassette lip insertion clearance)], + anchor: "west", + ) + }), + caption: [Chassis dimensional requirements and module loading interface specifications detailing Side Elevation Cutaway (View A), Front Elevation Module Pitch Alignment (View B), and enlarged Cassette Rail Geometry & Retention Cross-Section (View C).], +) diff --git a/diagrams/db-25-connector-cutout.typ b/diagrams/db-25-connector-cutout.typ new file mode 100644 index 0000000..d8d2bc3 --- /dev/null +++ b/diagrams/db-25-connector-cutout.typ @@ -0,0 +1,297 @@ +#import "../lib/unify.typ": qty +#import "@preview/cetz:0.5.2" + +#figure( + cetz.canvas({ + import cetz.draw: * + + // Scale factor: 1 mm = 0.06 drawing units + let s = 0.06 + + let panel-w = 35.7 * s // 1.6065 units + let panel-h = 165.1 * s // 7.4295 units + let cx-panel = panel-w / 2 + let cy-panel = panel-h / 2 // 82.5 mm from top/bottom + + // DB-25 Cutout Dimensions (Scale for Detail View) + let ds = 0.12 // Magnified detail scale + + let d-width = 33.3 * ds // Overall cutout width (33.3 mm) + let d-height = 12.5 * ds // Cutout height (12.5 mm) + let hole-spacing = 24.99 * ds // Mounting hole spacing from center / pitch + let hole-r = (3.2 / 2) * ds // 3.2 mm diameter (1.6 mm radius) + + // ========================================== + // 1. REAR PANEL CUTOUT PLACEMENT VIEW (35.7 mm x 165.1 mm) + // ========================================== + let x-panel-start = 0 + let y-panel-start = 0 + + // View Title + content((cx-panel, panel-h + 0.8), text( + size: 8.5pt, + weight: "bold", + )[REAR PANEL PLACEMENT]) + content((cx-panel, panel-h + 0.45), text( + size: 7pt, + fill: luma(90), + )[(Centered Position)]) + + // Rear Closure Plate Outline + rect( + (x-panel-start, y-panel-start), + (x-panel-start + panel-w, y-panel-start + panel-h), + fill: luma(245), + stroke: 1.2pt + black, + ) + + // Centerlines on Rear Panel + line( + (x-panel-start - 0.4, cy-panel), + (x-panel-start + panel-w + 0.4, cy-panel), + stroke: (paint: luma(120), thickness: 0.4pt, dash: "dash-dotted"), + ) + line( + (cx-panel, y-panel-start - 0.4), + (cx-panel, y-panel-start + panel-h + 0.4), + stroke: (paint: luma(120), thickness: 0.4pt, dash: "dash-dotted"), + ) + + // Small DB-25 D-Sub Cutout Representation in Center + let sm-w = 26.0 * s + let sm-h = 11.0 * s + rect( + (cx-panel - sm-w / 2, cy-panel - sm-h / 2), + (cx-panel + sm-w / 2, cy-panel + sm-h / 2), + fill: white, + stroke: 0.8pt + black, + ) + circle( + (cx-panel - 12.5 * s, cy-panel), + radius: 1.6 * s, + fill: white, + stroke: 0.6pt + black, + ) + circle( + (cx-panel + 12.5 * s, cy-panel), + radius: 1.6 * s, + fill: white, + stroke: 0.6pt + black, + ) + + // Center X Dimension Callout (17.85 mm) + line( + (x-panel-start, y-panel-start), + (x-panel-start, y-panel-start - 0.5), + stroke: 0.4pt + luma(140), + ) + line( + (cx-panel, y-panel-start), + (cx-panel, y-panel-start - 0.5), + stroke: 0.4pt + luma(140), + ) + line( + (x-panel-start, y-panel-start - 0.45), + (cx-panel, y-panel-start - 0.45), + mark: (start: "stealth", end: "stealth"), + mark-size: 0.08, + stroke: 0.6pt + black, + ) + content((cx-panel / 2, y-panel-start - 0.7), text( + size: 6.5pt, + weight: "bold", + )[$qty(17.85, "mm")$]) + + // Center Y Dimension Callout (82.5 mm) + line( + (x-panel-start, y-panel-start), + (x-panel-start - 0.5, y-panel-start), + stroke: 0.4pt + luma(140), + ) + line( + (x-panel-start, cy-panel), + (x-panel-start - 0.5, cy-panel), + stroke: 0.4pt + luma(140), + ) + line( + (x-panel-start - 0.45, y-panel-start), + (x-panel-start - 0.45, cy-panel), + mark: (start: "stealth", end: "stealth"), + mark-size: 0.08, + stroke: 0.6pt + black, + ) + content( + (x-panel-start - 0.75, cy-panel / 2), + text(size: 6.5pt, weight: "bold")[$qty(82.5, "mm")$], + angle: 90deg, + ) + + // ========================================== + // 2. MAGNIFIED DB-25 CUTOUT GEOMETRY DETAIL + // ========================================== + let x-det-center = 6.2 + let y-det-center = cy-panel + + // View Title + content((x-det-center, y-det-center + 2.2), text( + size: 8.5pt, + weight: "bold", + )[CUTOUT GEOMETRY DETAIL]) + content((x-det-center, y-det-center + 1.85), text( + size: 7pt, + fill: luma(90), + )[(Standard D-Shaped DB-25 Profile)]) + + // Centerlines + line( + (x-det-center - 2.5, y-det-center), + (x-det-center + 2.5, y-det-center), + stroke: (paint: luma(120), thickness: 0.4pt, dash: "dash-dotted"), + ) + line( + (x-det-center, y-det-center - 1.5), + (x-det-center, y-det-center + 1.5), + stroke: (paint: luma(120), thickness: 0.4pt, dash: "dash-dotted"), + ) + + // D-Sub Trapezoidal Shroud Profile (Closed Path) + let tw = 25.0 * ds // Top wider width + let bw = 22.5 * ds // Bottom narrower width + let hh = d-height / 2 + + line( + (x-det-center - tw / 2, y-det-center + hh), + (x-det-center + tw / 2, y-det-center + hh), + (x-det-center + bw / 2, y-det-center - hh), + (x-det-center - bw / 2, y-det-center - hh), + close: true, + fill: white, + stroke: 1.2pt + black, + ) + + // Mounting Holes (Left & Right, Diameter 3.2 mm) + let hole-left-x = x-det-center - hole-spacing / 2 + let hole-right-x = x-det-center + hole-spacing / 2 + + circle( + (hole-left-x, y-det-center), + radius: hole-r, + fill: white, + stroke: 0.8pt + black, + ) + circle( + (hole-right-x, y-det-center), + radius: hole-r, + fill: white, + stroke: 0.8pt + black, + ) + + // Hole Center Crosshairs + line( + (hole-left-x - 0.2, y-det-center), + (hole-left-x + 0.2, y-det-center), + stroke: 0.3pt + luma(120), + ) + line( + (hole-left-x, y-det-center - 0.2), + (hole-left-x, y-det-center + 0.2), + stroke: 0.3pt + luma(120), + ) + line( + (hole-right-x - 0.2, y-det-center), + (hole-right-x + 0.2, y-det-center), + stroke: 0.3pt + luma(120), + ) + line( + (hole-right-x, y-det-center - 0.2), + (hole-right-x, y-det-center + 0.2), + stroke: 0.3pt + luma(120), + ) + + // Overall D-Opening Width Dimension (33.3 mm) + let x-left-edge = x-det-center - d-width / 2 + let x-right-edge = x-det-center + d-width / 2 + + line( + (x-left-edge, y-det-center + hh), + (x-left-edge, y-det-center + hh + 0.6), + stroke: 0.4pt + luma(140), + ) + line( + (x-right-edge, y-det-center + hh), + (x-right-edge, y-det-center + hh + 0.6), + stroke: 0.4pt + luma(140), + ) + line( + (x-left-edge, y-det-center + hh + 0.6), + (x-right-edge, y-det-center + hh + 0.6), + mark: (start: "stealth", end: "stealth"), + mark-size: 0.08, + stroke: 0.6pt + black, + ) + content((x-det-center, y-det-center + hh + 0.3), text( + size: 7pt, + )[Opening width: $qty(33.3, "mm")$]) + + // D-Opening Height Dimension (12.5 mm) + line( + (x-left-edge, y-det-center - hh), + (x-left-edge - 0.5, y-det-center - hh), + stroke: 0.4pt + luma(140), + ) + line( + (x-left-edge, y-det-center + hh), + (x-left-edge - 0.5, y-det-center + hh), + stroke: 0.4pt + luma(140), + ) + line( + (x-left-edge - 0.5, y-det-center - hh), + (x-left-edge - 0.5, y-det-center + hh), + mark: (start: "stealth", end: "stealth"), + mark-size: 0.08, + stroke: 0.6pt + black, + ) + content( + (x-left-edge - 0.75, y-det-center), + text(size: 7pt)[$qty(12.5, "mm")$], + angle: 90deg, + ) + + // Mounting Hole Spacing Dimension (24.99 mm) + line( + (hole-left-x, y-det-center - hh), + (hole-left-x, y-det-center - hh - 0.6), + stroke: 0.4pt + luma(140), + ) + line( + (hole-right-x, y-det-center - hh), + (hole-right-x, y-det-center - hh - 0.6), + stroke: 0.4pt + luma(140), + ) + line( + (hole-left-x, y-det-center - hh - 0.6), + (hole-right-x, y-det-center - hh - 0.6), + mark: (start: "stealth", end: "stealth"), + mark-size: 0.08, + stroke: 0.6pt + black, + ) + content((x-det-center, y-det-center - hh - 0.9), text( + size: 7pt, + )[Hole pitch: $qty(24.99, "mm")$]) + + // Hole Diameter Callout (diameter 3.2 mm) + line( + (hole-right-x, y-det-center + hole-r), + (hole-right-x + 0.6, y-det-center + 1.1), + mark: (start: "stealth"), + mark-size: 0.08, + stroke: 0.6pt + black, + ) + content( + (hole-right-x + 0.65, y-det-center + 1.15), + text(size: 6.5pt)[$2 times diameter qty(3.2, "mm")$ holes], + anchor: "west", + ) + }), + caption: [Cassette DB-25 connector cutout technical drawing showing rear panel placement coordinates and magnified CAD geometry dimensions], +) diff --git a/diagrams/front-panel.typ b/diagrams/front-panel.typ new file mode 100644 index 0000000..fbd5a34 --- /dev/null +++ b/diagrams/front-panel.typ @@ -0,0 +1,252 @@ +#import "../lib/unify.typ": qty +#import "@preview/cetz:0.5.2" + +#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), + (x-rear-end + 0.5, y-hole-upper + 10.0 * s), + stroke: 0.5pt + black, + ) + content( + (x-rear-end + 0.55, y-hole-upper + 10.0 * s), + text(size: 6.5pt)[Masked 8 mm flange contact strip], + anchor: "west", + ) + }), + caption: [Cassette Front Panel technical drawings showing Front Elevation (with countersunk L-channel attachment holes and lip mounting holes) and Rear Elevation (inner face detailing masked unpainted EMI contact areas)], +) diff --git a/diagrams/l-channel-chassis.typ b/diagrams/l-channel-chassis.typ new file mode 100644 index 0000000..5adca4c --- /dev/null +++ b/diagrams/l-channel-chassis.typ @@ -0,0 +1,422 @@ +#import "../lib/unify.typ": qty +#import "@preview/cetz:0.5.2" + +#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.