by adom
0402 Thick Film Resistor · 4.7 kΩ ±1% · 1/16 W
← Commit history
WS2812B standard: metal terminals, datasheet PDF, distributors, verification log, 3D models record, solder balls, outline symbol default
25 files changed
+6203−1228
CR0402-FX-4701GLF-plain.kicad_sym+110CR0402-FX-4701GLF-symview.html+2404−1121CR0402-FX-4701GLF-unetched.glbCR0402-FX-4701GLF.adom-lbr.json+1586−5CR0402-FX-4701GLF.glbCR0402-FX-4701GLF.insertion.glbCR0402-FX-4701GLF.kicad_sym+1394−88CR0402-FX-4701GLF.lbr+192−8README.md+14−4cr0402-fx-4701glf-hero.glbdocs/cr0402-fx-4701glf-datasheet.pdfdocs/models/CR0402-FX-4701GLF-unetched.glb.pngdocs/models/CR0402-FX-4701GLF-unetched.step.bottom.pngdocs/models/CR0402-FX-4701GLF-unetched.step.top.pngdocs/models/CR0402-FX-4701GLF.glb.pngdocs/models/CR0402-FX-4701GLF.insertion.glb.pngdocs/models/CR0402-FX-4701GLF.step.bottom.pngdocs/models/CR0402-FX-4701GLF.step.top.pngdocs/models/cr0402-fx-4701glf-hero.glb.pngmodels.json+157page.json+7−2provenance/tools/glb_post_metal.py+26provenance/tools/hero_post_solderballs.py+105provenance/tools/scene_solderballs.py+93verification.json+115CR0402-FX-4701GLF-plain.kicad_symadded+110@@ -0,0 +1,110 @@+(kicad_symbol_lib+ (version 20231120)+ (generator "adom")+ (symbol "CR0402-FX-4701GLF-plain"+ (pin_numbers+ (hide yes)+ )+ (pin_names+ (offset 0)+ (hide yes)+ )+ (exclude_from_sim no)+ (in_bom yes)+ (on_board yes)+ (property "Reference" "R"+ (at 0 5.08 0)+ (effects+ (font+ (size 1.27 1.27)+ )+ )+ )+ (property "Value" "CR0402-FX-4701GLF"+ (at 0 -5.08 0)+ (effects+ (font+ (size 1.27 1.27)+ )+ )+ )+ (property "Footprint" ""+ (at 0 0 0)+ (effects+ (font+ (size 1.27 1.27)+ )+ (hide yes)+ )+ )+ (property "Datasheet" "~"+ (at 0 0 0)+ (effects+ (font+ (size 1.27 1.27)+ )+ (hide yes)+ )+ )+ (property "Description" "Resistor"+ (at 0 0 0)+ (effects+ (font+ (size 1.27 1.27)+ )+ (hide yes)+ )+ )+ (symbol "CR0402-FX-4701GLF-plain_0_1"+ (rectangle+ (start -1.016 -2.54)+ (end 1.016 2.54)+ (stroke+ (width 0.254)+ (type default)+ )+ (fill+ (type none)+ )+ )+ )+ (symbol "CR0402-FX-4701GLF-plain_1_1"+ (pin passive line+ (at 0 3.81 270)+ (length 1.27)+ (name "~"+ (effects+ (font+ (size 1.27 1.27)+ )+ )+ )+ (number "1"+ (effects+ (font+ (size 1.27 1.27)+ )+ )+ )+ )+ (pin passive line+ (at 0 -3.81 90)+ (length 1.27)+ (name "~"+ (effects+ (font+ (size 1.27 1.27)+ )+ )+ )+ (number "2"+ (effects+ (font+ (size 1.27 1.27)+ )+ )+ )+ )+ )+ )+)
CR0402-FX-4701GLF-symview.html+2404−1121@@ -1,373 +1,141 @@-<!DOCTYPE html>-<html lang="en">-<head>-<meta charset="UTF-8">-<meta name="viewport" content="width=device-width, initial-scale=1.0">-<title>CR0402-FX-4701GLF</title>+<!doctype html><html><head><meta charset="utf-8">+<title>CR0402-FX-4701GLF - adom-symbol</title>+<meta name="viewport" content="width=device-width,initial-scale=1"> <style>- * { margin: 0; padding: 0; box-sizing: border-box; }- body {- background: #0d1117;- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;- overflow: hidden;- height: 100vh;- display: flex;- flex-direction: column;- color: #e6edf3;- }-- /* ── Top toolbar ── */- .toolbar {- display: flex;- align-items: center;- gap: 6px;- padding: 8px 14px;- background: #161b22;- border-bottom: 1px solid #21262d;- flex-shrink: 0;- font-size: 13px;- }- .toolbar .title {- font-weight: 600;- color: #00b8b0;- font-size: 15px;- letter-spacing: 0.02em;- }- .toolbar .spacer { flex: 1; }- .toolbar .sep {- width: 1px;- height: 22px;- background: #21262d;- margin: 0 4px;- flex-shrink: 0;- }- .toolbar .btn-group {- display: flex;- align-items: center;- gap: 2px;- flex-shrink: 0;- }- .toolbar button {- background: rgba(0, 184, 176, 0.12);- border: 1px solid rgba(0, 184, 176, 0.25);- border-radius: 4px;- padding: 4px 10px;- cursor: pointer;- font-size: 12px;- color: #8b949e;- transition: all 0.15s;- }- .toolbar button:hover { background: rgba(0,184,176,0.18); color: #e6edf3; border-color: rgba(0,184,176,0.4); }- .toolbar button:active { background: rgba(0,184,176,0.28); }- .toolbar button.active { background: rgba(0,184,176,0.2); color: #00b8b0; border-color: rgba(0,184,176,0.4); }- .toolbar .zoom-level {- font-size: 11px;- color: #8b949e;- min-width: 44px;- text-align: center;- font-variant-numeric: tabular-nums;- }-- /* ── Canvas (dark background) ── */- .canvas-wrap {- flex: 1;- overflow: hidden;- position: relative;- cursor: grab;- background-color: #0d1117;- background-image:- radial-gradient(ellipse at 50% 50%, rgba(0,184,176,0.03) 0%, transparent 70%),- linear-gradient(rgba(255,255,255,0.015) 1px, transparent 1px),- linear-gradient(90deg, rgba(255,255,255,0.015) 1px, transparent 1px);- background-size: 100% 100%, 20px 20px, 20px 20px;- }- .canvas-wrap.dragging { cursor: grabbing; }- .canvas-wrap.no-grid {- background-image: radial-gradient(ellipse at 50% 50%, rgba(0,184,176,0.03) 0%, transparent 70%);- background-size: 100% 100%;- }-- .canvas {- position: absolute;- transform-origin: 0 0;- }- .canvas svg { display: block; }-- /* ── Tooltip ── */- .tooltip {- display: none;- position: fixed;- background: #21262d;- backdrop-filter: blur(16px);- -webkit-backdrop-filter: blur(16px);- color: #e6edf3;- padding: 10px 14px;- border-radius: 10px;- border: 1px solid rgba(0, 184, 176, 0.25);- font-size: 12px;- line-height: 1.6;- pointer-events: none;- user-select: none;- z-index: 100;- max-width: 300px;- box-shadow: 0 8px 24px rgba(0,0,0,0.4);- transition: border-color 0.15s;- }- .tooltip.visible { display: block; }- .tooltip.sticky {- pointer-events: auto;- user-select: text;- border-color: #00e6dc;- box-shadow: 0 8px 32px rgba(0,184,176,0.15), 0 8px 24px rgba(0,0,0,0.4);- }- .tooltip .tt-name { font-weight: 700; font-size: 15px; color: #00e6dc; }- .tooltip .tt-pin { color: #8b949e; font-size: 11px; margin-left: 4px; }- .tooltip .tt-type {- display: inline-block;- margin-top: 4px;- padding: 2px 8px;- border-radius: 4px;- font-size: 11px;- font-weight: 500;- }- .tooltip .tt-desc {- margin-top: 6px;- padding-top: 6px;- border-top: 1px solid #21262d;- color: #8b949e;- font-size: 11px;- line-height: 1.5;- }- .tooltip .tt-source {- margin-top: 6px;- padding-top: 6px;- border-top: 1px solid #21262d;- font-size: 10px;- color: #484f58;- }- .tooltip .tt-source a { color: #00b8b0; text-decoration: none; }- .tooltip .tt-source a:hover { text-decoration: underline; }- .tooltip .tt-source-label { color: #E6B450; font-weight: 600; }- .tooltip .tt-hint {- margin-top: 6px;- font-size: 9px;- color: #484f58;- font-style: italic;- }- .tooltip .tt-group-name { font-weight: 700; font-size: 14px; color: #E6B450; }- .tooltip .tt-group-badge {- display: inline-block;- margin-top: 4px;- padding: 2px 8px;- border-radius: 4px;- font-size: 11px;- font-weight: 500;- background: rgba(230,180,80,0.15);- color: #FFD180;- border: 1px solid rgba(230,180,80,0.3);- }-- /* ── Wiki edit button ── */- .edit-btn {- position: absolute; top: 10px; right: 10px; z-index: 100;- display: flex; align-items: center; gap: 6px;- padding: 5px 10px;- background: rgba(22,27,34,0.75);- backdrop-filter: blur(8px);- border: 1px solid rgba(230,180,80,0.2);- border-radius: 6px;- color: #8b949e; font-size: 11px;- cursor: pointer; text-decoration: none;- transition: all 0.2s; opacity: 0.7;- }- .edit-btn:hover {- opacity: 1;- background: rgba(230,180,80,0.12);- border-color: rgba(230,180,80,0.4);- color: #FFD180;- }- .edit-btn svg { width: 12px; height: 12px; }-- /* Regen prompt modal */- .regen-overlay {- display: none;- position: fixed; inset: 0;- background: rgba(0,0,0,0.6);- z-index: 2000;- align-items: center; justify-content: center;- }- .regen-overlay.visible { display: flex; }- .regen-modal {- background: undefined;- border: 1px solid undefined;- border-radius: 10px;- padding: 20px 24px;- max-width: 520px;- width: 90%;- box-shadow: 0 12px 40px rgba(0,0,0,0.5);- }- .regen-modal h3 {- margin: 0 0 12px;- font-size: 14px;- font-weight: 600;- color: undefined;- }- .regen-modal .prompt-text {- background: undefined;- border: 1px solid undefined;- border-radius: 6px;- padding: 12px 14px;- font-size: 13px;- line-height: 1.5;- color: undefined;- white-space: pre-wrap;- word-break: break-word;- user-select: all;- }- .regen-modal .modal-footer {- display: flex;- align-items: center;- justify-content: space-between;- margin-top: 14px;- }- .regen-modal .copy-status {- font-size: 11px;- color: undefined;- }- .regen-modal .copy-status.copied { color: undefined; }- .regen-modal .modal-btns { display: flex; gap: 8px; }- .regen-modal .modal-btns button {- padding: 6px 14px;- border-radius: 6px;- border: 1px solid undefined;- background: undefined;- color: undefined;- font-size: 12px;- cursor: pointer;- }- .regen-modal .modal-btns button:hover { background: rgba(255,255,255,0.06); }- .regen-modal .modal-btns .copy-btn {- background: rgba(0,230,220,0.12);- border-color: rgba(0,230,220,0.3);- color: undefined;- }- .regen-modal .modal-btns .copy-btn:hover { background: rgba(0,230,220,0.22); }-- /* Pin highlight on hover */- .canvas svg .pin-highlight path, .canvas svg path.pin-highlight { stroke: #00e6dc !important; }- .canvas svg .group-highlight path { stroke: #FFD180 !important; }-- /* Discrete pin label highlight (injected <text> elements) */- .canvas svg text.pin-label-highlight { fill: #00e6dc !important; }- .canvas svg text.pin-num-highlight { fill: #00e6dc !important; }-- /* Discrete pin hit zone outline (visible on hover) */- .canvas svg rect.pin-hit-zone { fill: rgba(0,230,220,0.06); stroke: #00e6dc; stroke-width: 0.12; stroke-dasharray: 0.3,0.2; stroke-opacity: 0.5; pointer-events: all; cursor: pointer; rx: 0.3; }- .canvas svg rect.pin-hit-zone:hover { fill: rgba(0,230,220,0.12); stroke-opacity: 0.8; stroke-width: 0.15; }-- /* ── Bottom panel ── */- .bottom-panel {- background: #161b22;- border-top: 1px solid #21262d;- flex-shrink: 0;- }- .info-row {- display: flex;- align-items: baseline;- flex-wrap: wrap;- gap: 1px 0;- padding: 5px 8px;- font-size: 10px;- }- .info-item {- display: inline-flex;- align-items: baseline;- gap: 5px;- padding: 1px 0;- margin-right: 8px;- }- .info-item::after {- content: '';- display: inline-block;- width: 1px;- height: 10px;- background: #21262d;- margin-left: 8px;- vertical-align: middle;- }- .info-item:last-child::after { display: none; }- .info-item:last-child { margin-right: 0; }- .info-label {- color: #484f58;- text-transform: uppercase;- letter-spacing: 0.04em;- font-size: 9px;- }- .info-value { color: #8b949e; }- .info-value a { color: #00b8b0; text-decoration: none; }- .info-value a:hover { text-decoration: underline; }- .info-divider { height: 1px; background: #21262d; margin: 0 8px; }- .coord-row {- display: flex;- align-items: center;- justify-content: space-between;- padding: 4px 8px;- font-size: 10px;- color: #8b949e;- font-variant-numeric: tabular-nums;- }-</style>-</head>+@font-face{font-family:'Satoshi';font-weight:400;font-display:swap;src:url(data:font/woff2;base64,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) format('woff2')}@font-face{font-family:'Satoshi';font-weight:500;font-display:swap;src:url(data:font/woff2;base64,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) format('woff2')}@font-face{font-family:'Familjen Grotesk';font-weight:700;font-display:swap;src:url(data:font/woff2;base64,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) format('woff2')}+ /* Canonical Adom dark-theme tokens (adom/guides/brand.md) */+ :root{+ --bg:#0d1117;--surface:#161b22;--elevated:#1c2128;--overlay:#21262d;+ --border:#30363d;--border-muted:#21262d;+ --text:#e6edf3;--text2:#8b949e;--text3:#484f58;+ --accent:#00b8b0;--accent-bright:#00e6dc;--purple:#8c6bf7;+ /* aliases used by the viewport + pin-list rules further down */+ --panel:#161b22;--panel2:#1c2128;--muted:#8b949e;+ }+ *{box-sizing:border-box;margin:0;padding:0}+ html,body{height:100%}+ body{background:var(--bg);color:var(--text);font:13px/1.4 'Satoshi','Segoe UI',system-ui,sans-serif;display:flex;flex-direction:column;overflow:hidden}+ /* ── Canonical Adom app header (adom/guides/adom-app-header.md) ── */+ header{display:flex;align-items:center;gap:12px;padding:0 16px;height:44px;flex:0 0 44px;border-bottom:1px solid var(--border-muted);background:var(--surface);position:relative;font-family:'Familjen Grotesk',sans-serif}+ header .brand{display:flex;align-items:center;gap:8px;color:var(--accent);font-size:13px;font-weight:600;letter-spacing:.01em;cursor:default;flex-shrink:0;outline:none}+ header .brand svg.logo{width:16px;height:16px;flex-shrink:0}+ header .brand:hover .app-name{text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:3px}+ header .brand .app-name{color:var(--accent)}+ header .brand .app-subtitle{color:var(--text2);font-weight:500}+ header .brand .sep{color:var(--text3);font-weight:400}+ header .vsep{width:1px;height:18px;background:var(--border);flex-shrink:0}+ header .subject{display:flex;align-items:center;gap:8px;min-width:0;flex:1;cursor:default}+ header .subject-name{color:var(--text);font-family:'Familjen Grotesk',sans-serif;font-size:14px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}+ header .subject-meta{display:flex;align-items:center;gap:6px;color:var(--text2);font-family:'JetBrains Mono',ui-monospace,monospace;font-size:11px;white-space:nowrap}+ header .subject-meta .sep{color:var(--text3)}+ @media(max-width:720px){header .subject-meta{display:none}}+ /* Floating in-canvas viewer toolbar (frosted, matches the app's glass cards) */+ .tools{position:absolute;left:12px;top:12px;z-index:5;display:flex;gap:3px;padding:3px;background:rgba(22,27,34,.82);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid var(--border);border-radius:9px}+ .tools button{width:30px;height:30px;display:grid;place-items:center;background:transparent;border:none;border-radius:6px;color:var(--text2);cursor:pointer;transition:background .15s ease,color .15s ease}+ .tools button:hover{background:var(--elevated);color:var(--accent-bright)}+ .tools button svg{width:16px;height:16px;display:block}+ header .hover-popover{position:absolute;top:calc(100% + 6px);left:16px;background:var(--elevated);border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.5);padding:12px 14px;min-width:300px;max-width:420px;font-family:'Satoshi',sans-serif;font-size:12px;color:var(--text);z-index:99999;opacity:0;transform:translateY(-2px);pointer-events:none;transition:opacity .12s ease,transform .12s ease}+ header .hover-popover.show{opacity:1;transform:none;pointer-events:auto}+ header .hover-popover .popover-title{font-family:'Familjen Grotesk',sans-serif;font-size:14px;font-weight:700;color:var(--text);margin-bottom:8px}+ header .hover-popover .popover-row{display:flex;gap:12px;padding:3px 0;align-items:baseline}+ header .hover-popover .popover-row .k{color:var(--text3);font-family:'JetBrains Mono',ui-monospace,monospace;font-size:10px;text-transform:lowercase;width:64px;flex-shrink:0}+ header .hover-popover .popover-row .v{color:var(--text);font-family:'Satoshi',sans-serif;font-size:12px;flex:1}+ header .hover-popover .popover-actions{margin-top:10px;padding-top:10px;border-top:1px solid var(--border-muted);display:flex;gap:12px}+ header .hover-popover .popover-link{color:var(--accent);text-decoration:none;font-family:'Familjen Grotesk',sans-serif;font-size:12px;font-weight:600}+ header .hover-popover .popover-link:hover{text-decoration:underline}+ main{flex:1;display:flex;min-height:0}+ .vpwrap{flex:1;position:relative;min-width:0}+ /* Schematic-workbench grid, identical to the main app's #stage. */+ .vp{position:absolute;inset:0;overflow:hidden;cursor:grab;background:+ radial-gradient(120% 120% at 50% 30%,rgba(0,184,177,.05),transparent 60%),+ linear-gradient(rgba(255,255,255,.025) 1px,transparent 1px) 0 0/22px 22px,+ linear-gradient(90deg,rgba(255,255,255,.025) 1px,transparent 1px) 0 0/22px 22px}+ .vp.grab{cursor:grabbing}+ /* Only the DIRECT-CHILD symbol svg gets the pan/zoom transform — scoping to+ `.vp > svg` (not `.vp svg`) keeps it off any nested icon svgs. */+ .vp > svg{position:absolute;left:0;top:0;width:100%;height:100%;transform-origin:0 0;display:block}+ .hint{position:absolute;right:10px;bottom:9px;color:var(--muted);font-size:11px;z-index:5;pointer-events:none;user-select:none;-webkit-user-select:none}+ aside{flex:0 0 268px;border-left:1px solid var(--border);background:var(--panel);display:flex;flex-direction:column;min-height:0}+ aside .ah{padding:9px 12px;border-bottom:1px solid var(--border);font-size:12px;color:var(--muted);display:flex;align-items:center;gap:8px}+ aside input{flex:1;background:var(--panel2);border:1px solid var(--border);border-radius:8px;color:var(--text);font-size:12px;padding:5px 8px;outline:none}+ aside input:focus{border-color:var(--accent)}+ .pins{flex:1;overflow:auto}+ .pin{padding:7px 12px;border-bottom:1px solid #1a212c;cursor:pointer}+ .pin:hover{background:var(--panel2)}+ .pin.on{background:#15202e}+ .pin .row{display:flex;align-items:center;gap:8px}+ .pin .num{font-family:'JetBrains Mono',ui-monospace,monospace;font-size:11px;color:#8fa0b4;min-width:22px;text-align:right}+ .pin .nme{font-weight:600;font-size:13px}+ .pin .ty{margin-left:auto;font-size:10px;padding:1px 6px;border-radius:5px;border:1px solid;white-space:nowrap}+ .pin .d{font-size:11.5px;color:#aeb6c2;line-height:1.45;margin:5px 0 1px 30px;display:none}+ .pin.on .d{display:block}+ .empty{color:var(--muted);font-size:12px;padding:14px}+ @media(max-width:620px){aside{flex-basis:200px}}+ /* pin panel header — reads like a studio section */+ aside .ah .atitle{font-family:'Familjen Grotesk',sans-serif;font-weight:600;font-size:12px;color:var(--text);white-space:nowrap}+ aside .ah .acount{margin-left:5px;font-family:'JetBrains Mono',ui-monospace,monospace;font-size:11px;color:var(--text3)}+ /* bottom info bar — mirrors the main app footer */+ footer{flex:0 0 auto;display:flex;align-items:center;height:26px;border-top:1px solid var(--border);background:var(--surface);font-size:11px;color:var(--text2);padding:0 14px;overflow:hidden}+ footer .it{display:flex;align-items:center;gap:6px;white-space:nowrap;min-width:0}+ footer .it+.it::before{content:"";width:1px;height:13px;background:var(--border);margin:0 12px;flex:0 0 1px}+ footer .k{color:var(--text3);text-transform:uppercase;font-size:9px;letter-spacing:.4px;flex:0 0 auto}+ footer .v{color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}+ footer .descit{min-width:0;overflow:hidden}+ /* pin hover — highlight + tooltip, parity with the live SymView */+ .vp > svg text,.vp > svg g.stroked-text{pointer-events:none}+ .hit{fill:rgba(0,230,220,0);stroke:none;cursor:pointer}+ .vp > svg g.stroked-text.hl path{stroke:var(--accent-bright)!important;fill:var(--accent-bright)!important}+ .vp > svg path.hl{stroke:var(--accent-bright)!important;stroke-width:.22!important}+ #pinmark{pointer-events:none;fill:rgba(0,230,220,.18);stroke:var(--accent-bright);stroke-width:.12;opacity:0;transition:opacity .1s}+ #tip{position:fixed;z-index:9999;max-width:300px;background:rgba(22,27,34,.97);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border:1px solid rgba(0,184,177,.34);border-radius:10px;padding:9px 12px;color:var(--text);font-size:12px;line-height:1.5;pointer-events:none;opacity:0;transition:opacity .12s;box-shadow:0 12px 40px rgba(0,0,0,.55)}+ #tip.show{opacity:1}+ #tip .r1{display:flex;align-items:baseline;gap:8px;justify-content:space-between}+ #tip .nm{font-weight:700;font-size:13px}+ #tip .pn{font-family:'JetBrains Mono',ui-monospace,monospace;font-size:11px;color:var(--muted);white-space:nowrap}+ #tip .badge{display:inline-block;margin-top:5px;font-size:10px;font-weight:700;padding:2px 7px;border-radius:5px;letter-spacing:.2px}+ #tip .desc{margin-top:6px;color:#aeb6c2;font-size:11.5px}+</style></head> <body>--<div class="toolbar">- <span class="title">CR0402-FX-4701GLF</span>- <div class="spacer"></div>- <div class="btn-group">- <button onclick="zoomOut()">−</button>- <span class="zoom-level" id="zoom-level">100%</span>- <button onclick="zoomIn()">+</button>- </div>- <div class="sep"></div>- <button onclick="zoomFit()">Fit</button>- <button onclick="zoomReset()">1:1</button>- <button onclick="toggleGrid()" id="grid-btn" class="active">Grid</button>- <button onclick="toggleBBox()" id="bbox-btn" class="active">BBox</button>- <button onclick="toggleHits()" id="hits-btn">Hits</button>- <div class="sep"></div>- <button onclick="showRegenPrompt()" title="Show regeneration prompt to paste into Claude Code">Regen</button>-</div>--<div class="regen-overlay" id="regen-overlay" onclick="if(event.target===this)closeRegenPrompt()">- <div class="regen-modal">- <h3>Regeneration Prompt</h3>- <div class="prompt-text" id="regen-prompt-text"></div>- <div class="modal-footer">- <span class="copy-status" id="regen-copy-status">Copied to clipboard</span>- <div class="modal-btns">- <button onclick="closeRegenPrompt()">Close</button>- <button class="copy-btn" onclick="copyRegenText()">Copy</button>+ <header>+ <div class="brand" data-tooltip-target="app-info" tabindex="0">+ <svg class="logo" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="7" y="4" width="10" height="16" rx="1.5"/><path d="M7 8H3M7 12H3M7 16H3M21 8h-4M21 12h-4M21 16h-4"/></svg>+ <span class="app-name">adom-symbol</span>+ <span class="sep">·</span>+ <span class="app-subtitle">symbol viewer</span>+ </div>+ <div class="vsep" aria-hidden="true"></div>+ <div class="subject">+ <span class="subject-name">CR0402-FX-4701GLF</span>+ <span class="subject-meta"><span class="sep">·</span><span>2 pins</span></span>+ </div>+ <div class="hover-popover" id="app-info" role="dialog" aria-label="About adom-symbol">+ <div class="popover-title">adom-symbol</div>+ <div class="popover-row"><span class="k">about</span><span class="v">Interactive KiCad schematic-symbol viewer: pan/zoom, per-pin hover, and a filterable pin list.</span></div>+ <div class="popover-row"><span class="k">version</span><span class="v">v1.2.6</span></div>+ <div class="popover-row"><span class="k">engine</span><span class="v">service-kicad</span></div>+ <div class="popover-row"><span class="k">mfr</span><span class="v">Bourns</span></div>+ <div class="popover-row"><span class="k">author</span><span class="v">Adom Inc · adom.inc</span></div>+ <div class="popover-actions">+ <a class="popover-link" href="https://wiki.adom.inc/adom/adom-symbol" target="_blank" rel="noopener">Open wiki ↗</a> </div> </div>- </div>-</div>--<div class="canvas-wrap" id="canvas-wrap">- <a class="edit-btn" href="https://coder.john-service-wiki-a054078430ce38e4.containers.adom.inc/proxy/8785/wiki/components/cr0402-fx-4701glf/edit?field=content" target="_blank" title="Suggest corrections to this symbol on the Adom Wiki">- <svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">- <path d="M11.5 1.5l3 3L5 14H2v-3L11.5 1.5z"/>- <path d="M9.5 3.5l3 3"/>- </svg>- Suggest edit- </a>- <div class="canvas" id="canvas">- <svg+ </header>+ <main>+ <div class="vpwrap">+ <div class="vp" id="vp">+ <div class="tools">+ <button id="zout" title="Zoom out" aria-label="Zoom out"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="10.5" cy="10.5" r="6.5"/><path d="M20 20l-4.5-4.5M8 10.5h5"/></svg></button>+ <button id="zin" title="Zoom in" aria-label="Zoom in"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="10.5" cy="10.5" r="6.5"/><path d="M20 20l-4.5-4.5M10.5 8v5M8 10.5h5"/></svg></button>+ <button id="fit" title="Fit to window" aria-label="Fit to window"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="5" width="18" height="14" rx="2"/><rect x="8" y="9" width="8" height="6" rx="1"/></svg></button>+ </div>+ <div class="hint">drag to pan · scroll to zoom</div>+ <svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1"- width="5.0292mm" height="10.0584mm" viewBox="-4.7567 -4.0808 12.6320 18.2200">+ width="21.502mm" height="21.160mm" viewBox="85.4981 89.4200 21.5019 21.1600"> <defs> <linearGradient id="adom-body-grad" x1="0" y1="0" x2="0" y2="1">@@ -375,834 +143,2349 @@ <stop offset="100%" stop-color="#141c27"/> </linearGradient> </defs>--<style>+<style><![CDATA[ /* Stroked text groups (KiCad renders text as paths in <g class="stroked-text">) */ g.stroked-text path { stroke: #ffffff !important; fill: #ffffff !important; }-- /* Hidden text elements (used for hit detection) */ text[opacity="0"] { fill: #ffffff !important; }-- /* Pin highlight state (toggled by JS) */ .pin-highlight path { stroke: #00e6dc !important; } .pin-highlight g.stroked-text path { stroke: #00e6dc !important; }-- /* Group label highlight */ .group-highlight g.stroked-text path { stroke: #FFD180 !important; }-</style>+]]></style>+<defs>+ <radialGradient id="adom-canvas-glow" cx="96.24905" cy="100" r="15.051329999999998" gradientUnits="userSpaceOnUse">+ <stop offset="0%" stop-color="#00b8b0" stop-opacity="0.06"/>+ <stop offset="70%" stop-color="#00b8b0" stop-opacity="0"/>+ </radialGradient>+ <pattern id="adom-canvas-grid" x="0" y="0" width="2.54" height="2.54" patternUnits="userSpaceOnUse">+ <line x1="0" y1="0" x2="2.54" y2="0" stroke="rgba(255,255,255,0.025)" stroke-width="0.06"/>+ <line x1="0" y1="0" x2="0" y2="2.54" stroke="rgba(255,255,255,0.025)" stroke-width="0.06"/>+ </pattern>+</defs>+<rect x="85.4981" y="89.42" width="21.5019" height="21.16" fill="#0d1117"/>+<rect x="85.4981" y="89.42" width="21.5019" height="21.16" fill="url(#adom-canvas-grid)"/>+<rect x="85.4981" y="89.42" width="21.5019" height="21.16" fill="url(#adom-canvas-glow)"/> - <desc>Image generated by Eeschema-SVG </desc>+ <g style="fill:none; fill-opacity:1.0000;stroke:#000000; stroke-opacity:1.0000; stroke-linecap:round; stroke-linejoin:round;" transform="translate(0 0) scale(1 1)"> </g>-<g style="fill:none; -stroke:#4a5568; stroke-width:0.2540; stroke-opacity:1; +<g style="fill:none; fill-opacity:1.0000; +stroke:none; stroke-width:0.0001; stroke-opacity:1; stroke-linecap:round; stroke-linejoin:round;">-<rect x="0.543300" y="2.489200" width="2.032000" height="5.080000" rx="0.000000" />+<rect x="0.000000" y="0.000000" width="297.002200" height="210.007200" rx="0.000000" /> </g> <g style="fill:none; stroke:#4a5568; stroke-width:0.1524; stroke-opacity:1; stroke-linecap:round; stroke-linejoin:round;">-<path d="M1.5593 2.4892-L1.5593 1.2192-" />-<path d="M1.5593 7.5692-L1.5593 8.8392-" />++++++++++<g class="stroked-text">+++++ </g>-<g style="fill:none; -stroke:#484f58; stroke-width:0.1524; stroke-opacity:1; -stroke-linecap:round; stroke-linejoin:round;">-<g transform="rotate(-90.000000 3.5913 5.0292)">+<g class="stroked-text">+++++++++ </g>-<g transform="rotate(-90.000000 1.5593 5.0292)">+<g class="stroked-text">++++++++++++ </g>-</g> -<text x="1.559" y="0.219" font-size="1.1" font-family="sans-serif" fill="#ffffff" text-anchor="middle" class="pin-num-label">1</text>-<text x="1.559" y="10.939" font-size="1.1" font-family="sans-serif" fill="#ffffff" text-anchor="middle" class="pin-num-label">2</text>-<rect x="-4.4567" y="-3.7807999999999997" width="12.032" height="17.619999999999997" fill="none" stroke="#00e6dc" stroke-width="0.1" stroke-dasharray="0.3,0.3" opacity="0.4" class="debug-bbox"/></svg>- </div>-</div>--<div class="tooltip" id="tooltip"></div>--<div class="bottom-panel">- <div class="info-row">- <div class="info-item"><span class="info-label">Pins</span><span class="info-value">2</span></div><div class="info-item"><span class="info-label">Datasheet</span><span class="info-value"><a href="~" target="_blank">PDF</a></span></div><div class="info-item"><span class="info-label">Desc</span><span class="info-value">Resistor</span></div>- </div>- <div class="info-divider"></div>- <div class="coord-row">- <span id="cursor-pos">X: 0.00 Y: 0.00 mm</span>- <span style="margin-left:auto;color:#00b8b0;font-weight:600;font-size:12px">SymView</span>- </div>-</div>+<g class="stroked-text"> -<script>- const pins = [{"name":"1","number":"1","type":"Passive","electricalType":"passive","color":"#78909c","desc":"","x":0,"y":3.81,"angle":270,"length":1.27},{"name":"2","number":"2","type":"Passive","electricalType":"passive","color":"#78909c","desc":"","x":0,"y":-3.81,"angle":90,"length":1.27}];- const groups = [];- const svgW = 12.632;- const svgH = 18.22;- const contentBounds = {"x":-4.4567,"y":-3.7807999999999997,"w":12.032,"h":17.619999999999997};- const svgOffset = {"x":1.5593,"y":5.0292};- const hidePinNames = true;- const hidePinNumbers = true;- const datasheetUrl = "~";- const mfrName = "";- const _symbolName = "CR0402-FX-4701GLF";- const _symPath = "/home/adom/project/project-content/schematics/symbols/CR0402-FX-4701GLF/CR0402-FX-4701GLF.kicad_sym";-- const wrap = document.getElementById('canvas-wrap');- const canvas = document.getElementById('canvas');- const tooltip = document.getElementById('tooltip');- const zoomLabel = document.getElementById('zoom-level');- const cursorPos = document.getElementById('cursor-pos');-- let scale = 1, panX = 0, panY = 0;- let isDragging = false;- let dragStartX, dragStartY, panStartX, panStartY;- let gridVisible = true;- let stickyPin = null; // currently pinned tooltip-- const MM_TO_PX = 3.78;- const svgPxW = svgW * MM_TO_PX;- const svgPxH = svgH * MM_TO_PX;-- const svgEl = canvas.querySelector('svg');- if (svgEl) {- svgEl.setAttribute('width', svgPxW + 'px');- svgEl.setAttribute('height', svgPxH + 'px');- } - function updateTransform() {- canvas.style.transform = 'translate(' + panX + 'px,' + panY + 'px) scale(' + scale + ')';- zoomLabel.textContent = Math.round(scale * 100) + '%';- } - function zoomFit() {- const ww = wrap.clientWidth, wh = wrap.clientHeight;- const pad = 40;- // Read the bbox rect directly from the SVG DOM — it's already positioned correctly- const bboxRect = svgEl ? svgEl.querySelector('.debug-bbox') : null;- if (bboxRect) {- const bb = bboxRect.getBBox();- const vb = svgEl.viewBox.baseVal;- // Convert SVG user-space coords to pixel coords within the SVG element- const pxPerUnitX = svgPxW / vb.width;- const pxPerUnitY = svgPxH / vb.height;- const pxX = (bb.x - vb.x) * pxPerUnitX;- const pxY = (bb.y - vb.y) * pxPerUnitY;- const pxW = bb.width * pxPerUnitX;- const pxH = bb.height * pxPerUnitY;- scale = Math.min((ww - pad * 2) / pxW, (wh - pad * 2) / pxH, 10);- if (!isFinite(scale) || scale <= 0) scale = 1;- panX = (ww - pxW * scale) / 2 - pxX * scale;- panY = (wh - pxH * scale) / 2 - pxY * scale;- } else {- scale = Math.min((ww - pad * 2) / svgPxW, (wh - pad * 2) / svgPxH, 10);- if (!isFinite(scale) || scale <= 0) scale = 1;- panX = (ww - svgPxW * scale) / 2;- panY = (wh - svgPxH * scale) / 2;- }- updateTransform();- }+</g>+<g class="stroked-text"> - function zoomReset() {- scale = 1;- panX = (wrap.clientWidth - svgPxW) / 2;- panY = (wrap.clientHeight - svgPxH) / 2;- updateTransform();- } - function zoomIn() { zoomAt(wrap.clientWidth / 2, wrap.clientHeight / 2, 1.25); }- function zoomOut() { zoomAt(wrap.clientWidth / 2, wrap.clientHeight / 2, 0.8); } - function zoomAt(cx, cy, factor) {- const ns = Math.max(0.1, Math.min(scale * factor, 20));- const r = ns / scale;- panX = cx - (cx - panX) * r;- panY = cy - (cy - panY) * r;- scale = ns;- updateTransform();- } - function toggleGrid() {- gridVisible = !gridVisible;- wrap.classList.toggle('no-grid', !gridVisible);- document.getElementById('grid-btn').classList.toggle('active', gridVisible);- } - let bboxVisible = true;- function toggleBBox() {- bboxVisible = !bboxVisible;- const el = svgEl && svgEl.querySelector('.debug-bbox');- if (el) el.setAttribute('opacity', bboxVisible ? '0.4' : '0');- document.getElementById('bbox-btn').classList.toggle('active', bboxVisible);- } - let hitsVisible = false;- function toggleHits() {- hitsVisible = !hitsVisible;- if (svgEl) {- svgEl.querySelectorAll('.pin-hit-zone').forEach(r => {- r.style.visibility = hitsVisible ? '' : 'hidden';- });- }- document.getElementById('hits-btn').classList.toggle('active', hitsVisible);- } - // ── Regen prompt modal ──- let _regenPrompt = '';- function buildRegenPrompt() {- const folder = _symPath.substring(0, _symPath.lastIndexOf('/'));- return 'Regenerate the SymView for ' + _symbolName + '.\n\n'- + 'Symbol: ' + _symPath + '\n'- + 'Metadata: ' + folder + '/' + _symbolName + '-metadata.json\n\n'- + 'Re-export the SVG via the KiCad service, regenerate the SymView HTML at the same path, '- + 'and re-display it in the Adom app.';- }- function showRegenPrompt() {- _regenPrompt = buildRegenPrompt();- document.getElementById('regen-prompt-text').textContent = _regenPrompt;- document.getElementById('regen-overlay').classList.add('visible');- const status = document.getElementById('regen-copy-status');- navigator.clipboard.writeText(_regenPrompt).then(() => {- status.textContent = 'Copied to clipboard';- status.classList.add('copied');- }).catch(() => {- status.textContent = 'Click Copy to copy';- status.classList.remove('copied');- });- }- function closeRegenPrompt() {- document.getElementById('regen-overlay').classList.remove('visible');- }- function copyRegenText() {- navigator.clipboard.writeText(_regenPrompt).then(() => {- const status = document.getElementById('regen-copy-status');- status.textContent = 'Copied to clipboard';- status.classList.add('copied');- });- } - // Mouse wheel zoom- wrap.addEventListener('wheel', (e) => {- e.preventDefault();- const r = wrap.getBoundingClientRect();- zoomAt(e.clientX - r.left, e.clientY - r.top, e.deltaY < 0 ? 1.12 : 0.89);- }, { passive: false });-- // Pan- wrap.addEventListener('mousedown', (e) => {- if (e.button !== 0) return;- isDragging = true;- dragStartX = e.clientX; dragStartY = e.clientY;- panStartX = panX; panStartY = panY;- wrap.classList.add('dragging');- });- window.addEventListener('mousemove', (e) => {- const r = wrap.getBoundingClientRect();- const mx = (e.clientX - r.left - panX) / scale / MM_TO_PX;- const my = (e.clientY - r.top - panY) / scale / MM_TO_PX;- cursorPos.innerHTML = 'X: ' + mx.toFixed(2) + ' Y: ' + my.toFixed(2) + ' mm';- if (!isDragging) return;- panX = panStartX + (e.clientX - dragStartX);- panY = panStartY + (e.clientY - dragStartY);- updateTransform();- });- window.addEventListener('mouseup', () => { isDragging = false; wrap.classList.remove('dragging'); });-- // ── Pin highlighting ──- const pinTextGroups = new Map();- const pinWireGroups = new Map();- if (svgEl) {- // Build text group lookup- svgEl.querySelectorAll('g.stroked-text').forEach(g => {- const desc = g.querySelector('desc');- if (desc) pinTextGroups.set(desc.textContent.trim(), g);- }); - // Build wire group lookup using coordinate matching (not sibling navigation)- if (svgOffset) {- const ox = svgOffset.x, oy = svgOffset.y;- // Collect all simple 2-point line paths in the SVG- const allPaths = svgEl.querySelectorAll('path');- const wirePaths = [];- allPaths.forEach(p => {- const d = p.getAttribute('d');- if (!d) return;- const m = d.match(/^M([\d.]+)\s+([\d.]+)\s+L([\d.]+)\s+([\d.]+)\s*$/);- if (m) wirePaths.push({ el: p, x1: parseFloat(m[1]), y1: parseFloat(m[2]), x2: parseFloat(m[3]), y2: parseFloat(m[4]) });- });-- for (const pin of pins) {- const tipX = ox + pin.x;- const tipY = oy - pin.y;- const wireLen = pin.length || 2.54;- const isHoriz = (pin.angle === 0 || pin.angle === 180);-- for (const w of wirePaths) {- const dx = Math.abs(w.x2 - w.x1), dy = Math.abs(w.y2 - w.y1);- const len = Math.sqrt(dx * dx + dy * dy);- if (Math.abs(len - wireLen) > 0.05) continue;- if (isHoriz && dy > 0.01) continue;- if (!isHoriz && dx > 0.01) continue;- // Check if one endpoint is near the pin tip- const d1 = Math.hypot(w.x1 - tipX, w.y1 - tipY);- const d2 = Math.hypot(w.x2 - tipX, w.y2 - tipY);- if (Math.min(d1, d2) < 0.1) {- // Found the wire path element directly- pinWireGroups.set(pin.name, w.el);- break;- }- }- }- }- } - /* lbr-hover-bus v1 */ window.addEventListener('message',function(e){var d=e.data||{};if(d.type!=='lbr-hover')return;window.__lbrBus=true;try{if(d.pin==null)clearHighlight();else{var p=(typeof pins!=='undefined'?pins:[]).find(function(x){return String(x.number)===String(d.pin)});if(p)highlightPin(p);else clearHighlight();}}finally{window.__lbrBus=false;}});- function highlightPin(pin) {- if(!window.__lbrBus)try{parent.postMessage({type:'lbr-hover',pin:String(pin.number)},'*')}catch(_){}- - clearHighlight();- // IC symbols: stroked-text groups- [pin.name, pin.number].forEach(label => {- const g = pinTextGroups.get(label);- if (g) g.classList.add('pin-highlight');- });- const wireG = pinWireGroups.get(pin.name);- if (wireG) wireG.classList.add('pin-highlight');- // Discrete symbols: injected <text> labels- if (svgEl && hidePinNames) {- svgEl.querySelectorAll('text.pin-label').forEach(t => {- if (t.textContent.trim() === pin.name) t.classList.add('pin-label-highlight');- });- svgEl.querySelectorAll('text.pin-num-label').forEach(t => {- if (t.textContent.trim() === pin.number) t.classList.add('pin-num-highlight');- });- }- }- function clearHighlight() {- if (svgEl) {- svgEl.querySelectorAll('.pin-highlight').forEach(g => g.classList.remove('pin-highlight'));- svgEl.querySelectorAll('.group-highlight').forEach(g => g.classList.remove('group-highlight'));- svgEl.querySelectorAll('.pin-label-highlight').forEach(t => t.classList.remove('pin-label-highlight'));- svgEl.querySelectorAll('.pin-num-highlight').forEach(t => t.classList.remove('pin-num-highlight'));- }- } - // ── Tooltip positioning ──- function positionTooltip(x, y) {- const tw = tooltip.offsetWidth || 280;- const th = tooltip.offsetHeight || 120;- let tx = x + 14;- let ty = y + 14;- if (tx + tw > window.innerWidth - 14) tx = x - tw - 14;- if (ty + th > window.innerHeight - 14) ty = y - th - 14;- tx = Math.max(14, tx);- ty = Math.max(14, ty);- tooltip.style.left = tx + 'px';- tooltip.style.top = ty + 'px';- } - // ── Source attribution HTML ──- function sourceHtml() {- if (!datasheetUrl || !mfrName) return '';- return '<div class="tt-source"><span class="tt-source-label">Source:</span> <a href="' + datasheetUrl + '" target="_blank">' + mfrName + ' Datasheet</a></div>';- } - function hintHtml() {- return '<div class="tt-hint">click to pin · select text</div>';- } - function showTooltip(x, y, pin) {- if (stickyPin) return; // don't override sticky- highlightPin(pin);- let html = '<div><span class="tt-name">' + pin.name + '</span><span class="tt-pin">Pin ' + pin.number + '</span></div>' +- '<div><span class="tt-type" style="background:' + pin.color + '22; color:' + pin.color + '; border:1px solid ' + pin.color + '44">' + pin.type + '</span></div>';- if (pin.desc) html += '<div class="tt-desc">' + pin.desc + '</div>';- html += sourceHtml();- html += hintHtml();- tooltip.innerHTML = html;- tooltip.classList.add('visible');- tooltip.classList.remove('sticky');- positionTooltip(x, y);- } - function showGroupTooltip(x, y, group) {- if (stickyPin) return;- clearHighlight();- const g = pinTextGroups.get(group.name);- if (g) g.classList.add('group-highlight');- let html = '<div><span class="tt-group-name">' + group.name + '</span></div>' +- '<div><span class="tt-group-badge">Function Group</span></div>';- if (group.desc) html += '<div class="tt-desc">' + group.desc + '</div>';- tooltip.innerHTML = html;- tooltip.classList.add('visible');- tooltip.classList.remove('sticky');- positionTooltip(x, y);- }+</g>+<g class="stroked-text"> - function hideTooltip() { if(!window.__lbrBus)try{parent.postMessage({type:'lbr-hover',pin:null},'*')}catch(_){}- if (stickyPin) return;- tooltip.classList.remove('visible');- clearHighlight();- } - // ── Sticky tooltip (click-to-pin) ──- function toggleSticky(pin, x, y) {- if (stickyPin === pin) {- // Unpin- stickyPin = null;- tooltip.classList.remove('sticky');- hideTooltip();- } else {- // Pin- stickyPin = pin;- highlightPin(pin);- let html = '<div><span class="tt-name">' + pin.name + '</span><span class="tt-pin">Pin ' + pin.number + '</span></div>' +- '<div><span class="tt-type" style="background:' + pin.color + '22; color:' + pin.color + '; border:1px solid ' + pin.color + '44">' + pin.type + '</span></div>';- if (pin.desc) html += '<div class="tt-desc">' + pin.desc + '</div>';- html += sourceHtml();- tooltip.innerHTML = html;- tooltip.classList.add('visible', 'sticky');- positionTooltip(x, y);- }- } - // Dismiss sticky on click outside- document.addEventListener('click', (e) => {- if (!stickyPin) return;- if (tooltip.contains(e.target)) return; // click inside tooltip- if (e.target.closest('[data-pin]') || e.target.closest('[data-pin-num]') || e.target.closest('[data-pin-wire]')) return;- stickyPin = null;- tooltip.classList.remove('sticky', 'visible');- clearHighlight();- }); - wrap.addEventListener('mouseleave', hideTooltip); - // ── Pin hit zones ──- function setupPinHitZones() {- if (!svgEl) return; - if (hidePinNames) {- // Discrete components (hidden pin names): compute hit zones from injected labels- // Covers MOSFETs, resistors, etc. — standard KiCad discrete symbols hide pin names- // but may leave pin numbers visible, so we check hidePinNames only- setupDiscreteHitZones();- } else {- // Standard IC: use hidden text elements for hit detection- setupTextHitZones();- }- } - function setupTextHitZones() {- // IC symbols: two hit zones per pin, derived from actual rendered text bounds (getBBox):- // 1. INSIDE body — covers pin name text (bbox from stroked-text group)- // 2. OUTSIDE body — covers pin wire + number area (bbox or coordinate-based)- if (!svgOffset) return;- const ox = svgOffset.x, oy = svgOffset.y;- const pitch = 2.54;- const zoneH = pitch * 0.95;- const wireExt = 1.5;- const pad = 0.3; // padding around text bbox-- // Build lookup: text content → stroked-text group bbox- const textBBoxMap = {};- svgEl.querySelectorAll('g.stroked-text').forEach(g => {- const desc = g.querySelector('desc');- if (desc) {- try {- const bbox = g.getBBox();- if (bbox.width > 0 && bbox.height > 0) {- const key = desc.textContent.trim();- if (!textBBoxMap[key]) textBBoxMap[key] = [];- textBBoxMap[key].push(bbox);- }- } catch (e) {}- }- }); - function addHitZone(hx, hy, hw, hh, pin) {- const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');- rect.setAttribute('x', hx);- rect.setAttribute('y', hy);- rect.setAttribute('width', hw);- rect.setAttribute('height', hh);- rect.setAttribute('class', 'pin-hit-zone');- rect.setAttribute('data-pin', pin.name);- rect.setAttribute('rx', '0.3');- svgEl.appendChild(rect);- rect.addEventListener('mouseenter', (ev) => showTooltip(ev.clientX, ev.clientY, pin));- rect.addEventListener('mousemove', (ev) => { if (!stickyPin) positionTooltip(ev.clientX, ev.clientY); });- rect.addEventListener('mouseleave', hideTooltip);- rect.addEventListener('click', (ev) => { ev.stopPropagation(); toggleSticky(pin, ev.clientX, ev.clientY); });- } - for (const pin of pins) {- const tipSvgX = ox + pin.x;- const tipSvgY = oy - pin.y;- const wireLen = pin.length || 2.54;- const isHoriz = (pin.angle === 0 || pin.angle === 180);-- // Pin name hitbox: use actual text bbox if available- const nameBBoxes = textBBoxMap[pin.name];- if (nameBBoxes && nameBBoxes.length > 0) {- // Pick the bbox closest to this pin's body-edge position- const bodyEdgeX = isHoriz- ? (pin.angle === 0 ? tipSvgX + wireLen : tipSvgX - wireLen)- : tipSvgX;- const bodyEdgeY = isHoriz- ? tipSvgY- : (pin.angle === 90 ? tipSvgY - wireLen : tipSvgY + wireLen);- let best = nameBBoxes[0];- let bestDist = Infinity;- for (const bb of nameBBoxes) {- const cx = bb.x + bb.width / 2, cy = bb.y + bb.height / 2;- const d = Math.hypot(cx - bodyEdgeX, cy - bodyEdgeY);- if (d < bestDist) { bestDist = d; best = bb; }- }- addHitZone(best.x - pad, best.y - pad, best.width + pad * 2, best.height + pad * 2, pin);- } else {- // Fallback: fixed-width zone inside body- const bodyDepth = 8;- if (isHoriz) {- const cy = tipSvgY - zoneH / 2;- if (pin.angle === 0) addHitZone(tipSvgX + wireLen, cy, bodyDepth, zoneH, pin);- else addHitZone(tipSvgX - wireLen - bodyDepth, cy, bodyDepth, zoneH, pin);- } else {- const cx = tipSvgX - zoneH / 2;- if (pin.angle === 90) addHitZone(cx, tipSvgY - wireLen - bodyDepth, zoneH, bodyDepth, pin);- else addHitZone(cx, tipSvgY + wireLen, zoneH, bodyDepth, pin);- }- } - // Pin number hitbox: use actual text bbox if available- const numBBoxes = textBBoxMap[pin.number];- if (numBBoxes && numBBoxes.length > 0) {- const tipDist = (bb) => Math.hypot(bb.x + bb.width / 2 - tipSvgX, bb.y + bb.height / 2 - tipSvgY);- let best = numBBoxes[0], bestD = tipDist(best);- for (const bb of numBBoxes) { const d = tipDist(bb); if (d < bestD) { bestD = d; best = bb; } }- addHitZone(best.x - pad, best.y - pad, best.width + pad * 2, best.height + pad * 2, pin);- } else {- // Fallback: wire area- if (isHoriz) {- const cy = tipSvgY - zoneH / 2;- if (pin.angle === 0) addHitZone(tipSvgX - wireExt, cy, wireLen + wireExt, zoneH, pin);- else addHitZone(tipSvgX, cy, wireLen + wireExt, zoneH, pin);- } else {- const cx = tipSvgX - zoneH / 2;- if (pin.angle === 90) addHitZone(cx, tipSvgY, zoneH, wireLen + wireExt, pin);- else addHitZone(cx, tipSvgY - wireExt, zoneH, wireLen + wireExt, pin);- }- }- }- } - function setupDiscreteHitZones() {- // For discrete components (hidden pin names/numbers), create hit zones- // using getBBox() on injected text labels for precise alignment.- // Falls back to coordinate-based zones if text elements aren't found.- if (!svgOffset) return;- const ox = svgOffset.x, oy = svgOffset.y;- const pad = 0.5; // generous padding for easy hover on small labels-- // Build lookup: text content → getBBox for injected labels- const labelBBoxMap = {};- const allTextEls = svgEl.querySelectorAll('text.pin-label, text.pin-num-label');- allTextEls.forEach(t => {- try {- const bbox = t.getBBox();- if (bbox.width > 0 && bbox.height > 0) {- const key = t.textContent.trim();- if (!labelBBoxMap[key]) labelBBoxMap[key] = [];- labelBBoxMap[key].push(bbox);- }- } catch (e) {}- }); - for (const pin of pins) {- const tipSvgX = ox + pin.x;- const tipSvgY = oy - pin.y;- const wireLen = pin.length || 2.54;-- // Collect bounding boxes of this pin's name and number labels- const bboxes = [];-- // Find name label bbox (closest to pin tip)- const nameBBs = labelBBoxMap[pin.name];- if (nameBBs) {- let best = nameBBs[0], bestD = Infinity;- for (const bb of nameBBs) {- const d = Math.hypot(bb.x + bb.width / 2 - tipSvgX, bb.y + bb.height / 2 - tipSvgY);- if (d < bestD) { bestD = d; best = bb; }- }- bboxes.push(best);- } - // Find number label bbox (closest to pin tip)- const numBBs = labelBBoxMap[pin.number];- if (numBBs) {- let best = numBBs[0], bestD = Infinity;- for (const bb of numBBs) {- const d = Math.hypot(bb.x + bb.width / 2 - tipSvgX, bb.y + bb.height / 2 - tipSvgY);- if (d < bestD) { bestD = d; best = bb; }- }- bboxes.push(best);- } - if (bboxes.length > 0) {- // Union text bboxes into a single hit zone (just covers labels near the tip)- let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;- for (const bb of bboxes) {- minX = Math.min(minX, bb.x);- minY = Math.min(minY, bb.y);- maxX = Math.max(maxX, bb.x + bb.width);- maxY = Math.max(maxY, bb.y + bb.height);- }-- const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');- rect.setAttribute('x', minX - pad);- rect.setAttribute('y', minY - pad);- rect.setAttribute('width', maxX - minX + pad * 2);- rect.setAttribute('height', maxY - minY + pad * 2);- rect.setAttribute('class', 'pin-hit-zone');- rect.setAttribute('data-pin-wire', pin.name);- rect.setAttribute('rx', '0.3');- svgEl.appendChild(rect);-- rect.addEventListener('mouseenter', (ev) => showTooltip(ev.clientX, ev.clientY, pin));- rect.addEventListener('mousemove', (ev) => { if (!stickyPin) positionTooltip(ev.clientX, ev.clientY); });- rect.addEventListener('mouseleave', hideTooltip);- rect.addEventListener('click', (ev) => { ev.stopPropagation(); toggleSticky(pin, ev.clientX, ev.clientY); });- } else {- // Fallback: coordinate-based zone around wire area- const perpHalf = 1.5;- let hitX, hitY, hitW, hitH;- switch (pin.angle) {- case 0: hitX = tipSvgX - 1; hitY = tipSvgY - perpHalf; hitW = wireLen + 1; hitH = perpHalf * 2; break;- case 180: hitX = tipSvgX - wireLen; hitY = tipSvgY - perpHalf; hitW = wireLen + 1; hitH = perpHalf * 2; break;- case 270: hitX = tipSvgX - perpHalf; hitY = tipSvgY; hitW = perpHalf * 2; hitH = wireLen + 1; break;- case 90: hitX = tipSvgX - perpHalf; hitY = tipSvgY - wireLen; hitW = perpHalf * 2; hitH = wireLen + 1; break;- default: hitX = tipSvgX - 2; hitY = tipSvgY - 2; hitW = 4; hitH = 4;- }- const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');- rect.setAttribute('x', hitX);- rect.setAttribute('y', hitY);- rect.setAttribute('width', hitW);- rect.setAttribute('height', hitH);- rect.setAttribute('class', 'pin-hit-zone');- rect.setAttribute('data-pin-wire', pin.name);- rect.setAttribute('rx', '0.3');- svgEl.appendChild(rect);- rect.addEventListener('mouseenter', (ev) => showTooltip(ev.clientX, ev.clientY, pin));- rect.addEventListener('mousemove', (ev) => { if (!stickyPin) positionTooltip(ev.clientX, ev.clientY); });- rect.addEventListener('mouseleave', hideTooltip);- rect.addEventListener('click', (ev) => { ev.stopPropagation(); toggleSticky(pin, ev.clientX, ev.clientY); });- }- }- } - // ── Group label hit zones ──- function setupGroupHitZones() {- if (!svgEl) return;- const texts = svgEl.querySelectorAll('text');- texts.forEach(textEl => {- const label = textEl.textContent.trim();- const group = groups.find(g => g.name === label);- if (!group) return;- const fSize = parseFloat(textEl.getAttribute('font-size')) || 1;- if (Math.abs(fSize - 1.016) > 0.1) return;-- const x = parseFloat(textEl.getAttribute('x')) || 0;- const y = parseFloat(textEl.getAttribute('y')) || 0;- const tLen = parseFloat(textEl.getAttribute('textLength')) || 6;- const anchor = textEl.getAttribute('text-anchor') || 'start';-- const padX = fSize * 0.4;- const padY = fSize * 0.15; // tight vertical padding to avoid spilling into pin zones- let rx, rw = tLen + padX * 2, rh = fSize + padY * 2;- if (anchor === 'end') rx = x - tLen - padX;- else if (anchor === 'middle') rx = x - tLen / 2 - padX;- else rx = x - padX;- const ry = y - fSize - padY;-- const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');- rect.setAttribute('x', rx);- rect.setAttribute('y', ry);- rect.setAttribute('width', rw);- rect.setAttribute('height', rh);- rect.setAttribute('class', 'pin-hit-zone');- rect.setAttribute('data-group', group.name);- rect.setAttribute('rx', '0.3');- svgEl.appendChild(rect);-- rect.addEventListener('mouseenter', (ev) => showGroupTooltip(ev.clientX, ev.clientY, group));- rect.addEventListener('mousemove', (ev) => { if (!stickyPin) positionTooltip(ev.clientX, ev.clientY); });- rect.addEventListener('mouseleave', hideTooltip);- });- } - // Keyboard shortcuts- window.addEventListener('keydown', (e) => {- if (e.key === 'f' || e.key === 'F') zoomFit();- else if (e.key === '1') zoomReset();- else if (e.key === '+' || e.key === '=') zoomIn();- else if (e.key === '-') zoomOut();- else if (e.key === 'g' || e.key === 'G') toggleGrid();- else if (e.key === 'Escape') {- closeRegenPrompt();- stickyPin = null;- tooltip.classList.remove('sticky', 'visible');- clearHighlight();- }- }); - // Auto-fit on window/container resize (e.g. iframe becoming visible)- new ResizeObserver(() => zoomFit()).observe(wrap);-- // Init- requestAnimationFrame(() => {- zoomFit();- setupPinHitZones();- setupGroupHitZones();- // Hide hit zones by default (user can toggle with Hits button)- if (!hitsVisible && svgEl) {- svgEl.querySelectorAll('.pin-hit-zone').forEach(r => { r.style.visibility = 'hidden'; });- }- }); - // Zoom to a named region of the symbol (for AI screenshot verification)- // Regions: 'top', 'bottom', 'left', 'right', 'fit' (full symbol)- function zoomToRegion(region) {- if (!contentBounds) { zoomFit(); return; }- const ww = wrap.clientWidth, wh = wrap.clientHeight;- const svgEl = document.querySelector('#canvas svg');- if (!svgEl) return;- const vb = svgEl.viewBox.baseVal;- const svgPxW = svgEl.clientWidth || svgEl.getBoundingClientRect().width;- const svgPxH = svgEl.clientHeight || svgEl.getBoundingClientRect().height;- const pxPerUnitX = svgPxW / vb.width;- const pxPerUnitY = svgPxH / vb.height;-- // Content bounds in SVG user-space- const cb = contentBounds;- const cx = cb.x, cy = cb.y, cw = cb.w || cb.width, ch = cb.h || cb.height;- // Region crop (SVG user-space coordinates)- let rx, ry, rw, rh;- const margin = 2; // mm padding- if (region === 'top') {- rx = cx - margin; ry = cy - margin; rw = cw + margin * 2; rh = Math.min(ch * 0.12, 50) + margin;- } else if (region === 'bottom') {- const cropH = Math.min(ch * 0.12, 50);- ry = cy + ch - cropH - margin; rx = cx - margin; rw = cw + margin * 2; rh = cropH + margin * 2;- } else if (region === 'top-left') {- rx = cx - margin; ry = cy - margin; rw = cw * 0.4 + margin; rh = Math.min(ch * 0.12, 50) + margin;- } else if (region === 'top-right') {- rx = cx + cw * 0.6 - margin; ry = cy - margin; rw = cw * 0.4 + margin * 2; rh = Math.min(ch * 0.12, 50) + margin;- } else if (region === 'bottom-left') {- const cropH = Math.min(ch * 0.12, 50);- ry = cy + ch - cropH - margin; rx = cx - margin; rw = cw * 0.4 + margin; rh = cropH + margin * 2;- } else if (region === 'bottom-right') {- const cropH = Math.min(ch * 0.12, 50);- ry = cy + ch - cropH - margin; rx = cx + cw * 0.6 - margin; rw = cw * 0.4 + margin * 2; rh = cropH + margin * 2;- } else if (region === 'left') {- rx = cx - margin; ry = cy - margin; rw = cw * 0.35 + margin; rh = ch + margin * 2;- } else if (region === 'right') {- rx = cx + cw * 0.65 - margin; ry = cy - margin; rw = cw * 0.35 + margin * 2; rh = ch + margin * 2;- } else {- zoomFit(); return;- }- // Convert to pixel coords- const pxX = (rx - vb.x) * pxPerUnitX;- const pxY = (ry - vb.y) * pxPerUnitY;- const pxW = rw * pxPerUnitX;- const pxH = rh * pxPerUnitY;- // Compute scale to fit region in viewport- const ns = Math.min(ww / pxW, wh / pxH) * 0.92;- scale = Math.max(0.1, Math.min(ns, 20));- panX = ww / 2 - (pxX + pxW / 2) * scale;- panY = wh / 2 - (pxY + pxH / 2) * scale;- updateTransform();- } - // Screenshot capture handler for Adom Viewer mgmt relay- // Send SVG data back to parent for rendering (avoids sandbox restrictions on Image loading)- window.addEventListener('message', (e) => {- // Zoom-to-region command (from AI via mgmt relay)- if (e.data?.type === 'sym_zoom_region') {- zoomToRegion(e.data.region || 'fit');- return;- }- if (e.data?.type === 'mgmt_capture_request') {- const reqId = e.data._reqId;- try {- const svg = document.querySelector('#canvas svg');- if (!svg) { window.parent.postMessage({ type: 'mgmt_canvas_capture', _reqId: reqId, data: null }, '*'); return; }- const clone = svg.cloneNode(true);- // Inline pin-hit-zone styles so they're visible in standalone SVG- clone.querySelectorAll('.pin-hit-zone').forEach(el => {- el.setAttribute('fill', 'rgba(0,230,220,0.06)');- el.setAttribute('stroke', '#00e6dc');- el.setAttribute('stroke-width', '0.12');- el.setAttribute('stroke-dasharray', '0.3,0.2');- el.setAttribute('stroke-opacity', '0.5');- el.setAttribute('rx', '0.3');- });- const vb = svg.getAttribute('viewBox');- const parts = vb ? vb.split(/\s+/).map(Number) : [0, 0, 100, 100];- let vbX = parts[0], vbY = parts[1], vbW = parts[2] || 100, vbH = parts[3] || 100;-- // Crop to visible viewport when zoomed/panned- const svgPxW = svg.clientWidth || svg.getBoundingClientRect().width;- const svgPxH = svg.clientHeight || svg.getBoundingClientRect().height;- const ww = wrap.clientWidth, wh = wrap.clientHeight;- if (scale !== 1 || panX !== (ww - svgPxW) / 2 || panY !== (wh - svgPxH) / 2) {- const pxPerUnitX = svgPxW / vbW;- const pxPerUnitY = svgPxH / vbH;- // Visible viewport in pixel space of the SVG element- const visLeft = -panX / scale;- const visTop = -panY / scale;- const visW = ww / scale;- const visH = wh / scale;- // Convert to SVG user-space- vbX = vbX + visLeft / pxPerUnitX;- vbY = vbY + visTop / pxPerUnitY;- vbW = visW / pxPerUnitX;- vbH = visH / pxPerUnitY;- }-- clone.setAttribute('viewBox', vbX + ' ' + vbY + ' ' + vbW + ' ' + vbH);- clone.setAttribute('xmlns', 'http://www.w3.org/2000/svg');- const xml = new XMLSerializer().serializeToString(clone);- // Send SVG XML + dimensions to parent for canvas rendering- window.parent.postMessage({- type: 'mgmt_canvas_capture',- _reqId: reqId,- svgXml: xml,- svgWidth: vbW,- svgHeight: vbH,- bgColor: '#0d1117'- }, '*');- } catch (err) {- window.parent.postMessage({ type: 'mgmt_canvas_capture', _reqId: reqId, data: null }, '*');- }- }+++</g>++++++<g class="stroked-text">++++++</g>+<g class="stroked-text">+++++++++++</g>+<g class="stroked-text">++++++++++++++</g>+<g class="stroked-text">++++</g>+<g class="stroked-text">++++++++++++++++</g>+<g class="stroked-text">++++++++++++++++++++++</g>++++<g class="stroked-text">++++</g>+<g class="stroked-text">+++++++++++++++++++</g>+<g class="stroked-text">++++++++++++++++</g>+<g class="stroked-text">+++++++++++++</g>++++<g class="stroked-text">++++</g>+<g class="stroked-text">+++++++++++++++++++</g>+<g class="stroked-text">++++++++++++++++</g>+<g class="stroked-text">+++++++++++++</g>+<g class="stroked-text">++++++++++++++++++++++++++++++++++++++++++++++++++++++</g>++<g class="stroked-text">++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</g>+</g>+<g style="fill:none; +stroke:#4a5568; stroke-width:0.3000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">++<g class="stroked-text">++++++++++++++++++++++++++++++++++++</g></g>+<g style="fill:none; +stroke:#4a5568; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">++<g class="stroked-text">+++++++++++++++++++++++++++++++++++++++++++++++++++++++++</g>+<g class="stroked-text">+++++++++++++++++++++++++++++++++++</g>+</g>+<g style="fill:none; +stroke:#4a5568; stroke-width:0.4000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">++<g class="stroked-text">+++++++++++++++++++++++++++++++++++++++</g></g>+<g style="fill:none; +stroke:#4a5568; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">++<g class="stroked-text">++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</g>++<g class="stroked-text">+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</g></g>+<g style="fill:none; +stroke:#4a5568; stroke-width:0.3000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">++<g class="stroked-text">+</g></g>+<g style="fill:none; +stroke:#4a5568; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">++<g class="stroked-text">+</g>+<g class="stroked-text">+</g>+<g class="stroked-text">+</g>+<g class="stroked-text">+</g>++<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 89.4981,99.8423+89.5612,99.8056+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 89.4981,99.9150+89.4981,99.8423+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 89.4981,101.6026+89.4981,99.9150+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 89.4981,101.6753+89.4981,101.6026+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 89.5612,99.8056+90.5493,99.2352+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 90.6125,99.2716+90.6547,99.2472+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 90.6547,99.1865+93.8087,97.3656+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 90.6547,99.2959+90.6547,99.1865+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.1264,101.3596+89.4981,99.8423+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.1264,101.3596+92.1895,101.3232+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.1264,101.4326+92.1264,101.3596+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.1264,103.1199+92.1264,101.4326+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.1264,103.1928+89.4981,101.6753+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.1264,103.1928+92.1264,103.1199+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.1264,103.1928+92.1895,103.1565+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.1895,101.3232+93.1779,100.7528+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.1895,101.3962+93.1779,100.8255+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.1895,101.3962+97.3201,98.4341+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.1895,103.0835+92.1895,101.3962+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.1895,103.0835+92.1895,101.3962+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.1895,103.0835+93.4407,102.3612+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.1895,103.0835+97.3201,100.1214+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.1895,103.1565+93.4407,102.4339+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.4331,99.6353+92.5776,99.5518+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.4331,99.6353+92.6663,99.7699+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.5440,99.6994+92.6330,99.6479+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.5831,99.2090+92.5499,99.2026+92.5052,99.2026+92.4720,99.2090+92.4276,99.2346+92.4165,99.2537+92.4165,99.2796+92.4276,99.2987+92.4498,99.3245+92.5052,99.3566+92.5499,99.3692+92.5831,99.3757+92.6275,99.3757+92.6608,99.3692+92.7051,99.3436+92.7162,99.3245+92.7162,99.2987+92.7051,99.2796+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.6053,99.1320+92.8385,99.2666+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.6053,99.1320+92.7051,99.0744+92.7498,99.0615+92.7716,99.0615+92.8052,99.0680+92.8271,99.0809+92.8385,99.1000+92.8385,99.1129+92.8163,99.1385+92.7162,99.1964+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.6220,99.5263+93.0104,99.5712+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.7775,99.4366+92.8551,99.6609+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.7941,99.1514+92.9937,99.1770+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.8939,98.9654+92.8718,98.9913+92.8828,99.0230+92.9272,99.0615+92.9605,99.0809+93.0270,99.1065+93.0827,99.1129+93.1271,99.1000+93.1493,99.0871+93.1714,99.0615+93.1604,99.0295+93.1160,98.9913+93.0827,98.9719+93.0162,98.9463+92.9605,98.9398+92.9161,98.9528+Z" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 92.9885,99.4687+93.1881,99.3532+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 93.0726,100.5828+90.6547,99.1865+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 93.0726,100.5828+96.2266,98.7618+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 93.0726,100.6921+93.0726,100.5828+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 93.1357,100.7284+96.2266,98.9438+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 93.1604,98.8117+93.3935,98.9463+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 93.1604,98.8117+93.2047,98.9654+93.3713,98.8693+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 93.1779,100.7528+90.5493,99.2352+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 93.1779,100.8255+93.1779,100.7528+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 93.2438,99.1674+93.4767,99.3020+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 93.2438,99.1674+93.2882,99.3211+93.4545,99.2250+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 93.3381,98.7091+93.3159,98.7347+93.3270,98.7667+93.3713,98.8052+93.4046,98.8243+93.4711,98.8499+93.5269,98.8564+93.5712,98.8437+93.5934,98.8308+93.6156,98.8052+93.6045,98.7732+93.5599,98.7347+93.5269,98.7156+93.4601,98.6897+93.4046,98.6832+93.3603,98.6962+Z" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 93.3547,99.1034+93.5103,99.0137+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 93.4407,102.4339+93.4407,102.3612+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 93.5103,99.0137+93.6322,99.2124+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 93.5599,98.6447+93.5491,98.6386+93.5380,98.6195+93.5380,98.6066+93.5491,98.5875+93.5934,98.5616+93.6267,98.5551+93.6489,98.5551+93.6821,98.5616+93.7043,98.5745+93.7154,98.5936+93.7265,98.6260+93.7265,98.7541+93.8820,98.6642+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 93.6433,98.9367+93.6211,98.9623+93.6322,98.9943+93.6766,99.0325+93.7099,99.0519+93.7767,99.0775+93.8321,99.0840+93.8765,99.0710+93.8987,99.0584+93.9208,99.0325+93.9098,99.0008+93.8654,98.9623+93.8321,98.9429+93.7656,98.9173+93.7099,98.9109+93.6655,98.9238+Z" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 93.7034,97.4142+94.6918,96.8435+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 93.7034,97.4263+93.7034,97.4142+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 93.7139,97.4204+93.7034,97.4142+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 93.8599,98.5616+94.0598,98.4461+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 93.8765,98.8533+93.8876,98.8339+93.8876,98.7957+94.1207,98.9303+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 94.2430,98.6546+94.2094,98.6481+94.1651,98.6481+94.1318,98.6546+94.0875,98.6802+94.0764,98.6993+94.0764,98.7251+94.0875,98.7442+94.1097,98.7701+94.1651,98.8021+94.2094,98.8148+94.2430,98.8212+94.2874,98.8212+94.3203,98.8148+94.3650,98.7892+94.3761,98.7701+94.3761,98.7442+94.3650,98.7251+94.3317,98.7057+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 94.2649,98.5776+94.4984,98.7122+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 94.2760,98.7378+94.3317,98.7057+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 94.4537,98.4686+94.5982,98.3854+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 94.4537,98.4686+94.6869,98.6035+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 94.4984,98.7122+94.6314,98.6352+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 94.5649,98.5326+94.6536,98.4815+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 94.6918,96.8435+94.7549,96.8072+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 96.0689,100.8436+97.3201,100.1214+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 96.0689,100.9166+96.0061,100.8800+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 96.0689,100.9166+96.0689,100.8436+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 96.0689,100.9166+97.3201,100.1944+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 96.2266,98.7618+93.8087,97.3656+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 96.2266,98.9438+96.2266,98.7618+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 96.3320,98.9318+96.2266,98.8711+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 96.3320,98.9318+97.3201,98.3611+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 96.3320,99.0045+96.2266,98.9438+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 96.3320,99.0045+96.3320,98.9318+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 96.3320,99.0045+97.3201,98.4341+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 97.3201,98.3611+97.3832,98.3247+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 97.3201,100.1214+97.3201,98.4341+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 97.3201,100.1214+97.3201,98.4341+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 97.3201,100.1944+97.3832,100.1577+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 97.3832,98.3247+94.7549,96.8072+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 97.3832,98.3974+97.3832,98.3247+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 97.3832,100.0850+97.3832,98.3974+" /> +<path style="fill:none; +stroke:#6E6E6E; stroke-width:0.1000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 97.3832,100.1577+97.3832,100.0850+" /> +</g>+<g style="fill:none; +stroke:#4a5568; stroke-width:0.2540; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<rect x="98.984000" y="97.460000" width="2.032000" height="5.080000" rx="0.000000" />+</g>+<g style="fill:none; +stroke:#4a5568; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M100.0000 97.4600+L100.0000 96.1900+" />+<path d="M100.0000 102.5400+L100.0000 103.8100+" />+</g>+<g style="fill:none; +stroke:#484f58; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="100.0000" y="95.5550"+textLength="2.5618" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">R?</text>+<g class="stroked-text">+<path d="M99.8487 95.4995+L99.4254 94.8948+" />+<path d="M99.1230 95.4995+L99.1230 94.2295+" />+<path d="M99.1230 94.2295+L99.6068 94.2295+" />+<path d="M99.6068 94.2295+L99.7278 94.2900+" />+<path d="M99.7278 94.2900+L99.7883 94.3505+" />+<path d="M99.7883 94.3505+L99.8487 94.4714+" />+<path d="M99.8487 94.4714+L99.8487 94.6529+" />+<path d="M99.8487 94.6529+L99.7883 94.7738+" />+<path d="M99.7883 94.7738+L99.7278 94.8343+" />+<path d="M99.7278 94.8343+L99.6068 94.8948+" />+<path d="M99.6068 94.8948+L99.1230 94.8948+" />+<path d="M100.5745 95.3786+L100.6349 95.4391+" />+<path d="M100.6349 95.4391+L100.5745 95.4995+" />+<path d="M100.5745 95.4995+L100.5140 95.4391+" />+<path d="M100.5140 95.4391+L100.5745 95.3786+" />+<path d="M100.5745 95.3786+L100.5745 95.4995+" />+<path d="M100.3326 94.2900+L100.4535 94.2295+" />+<path d="M100.4535 94.2295+L100.7559 94.2295+" />+<path d="M100.7559 94.2295+L100.8768 94.2900+" />+<path d="M100.8768 94.2900+L100.9373 94.4110+" />+<path d="M100.9373 94.4110+L100.9373 94.5319+" />+<path d="M100.9373 94.5319+L100.8768 94.6529+" />+<path d="M100.8768 94.6529+L100.8164 94.7133+" />+<path d="M100.8164 94.7133+L100.6954 94.7738+" />+<path d="M100.6954 94.7738+L100.6349 94.8343+" />+<path d="M100.6349 94.8343+L100.5745 94.9552+" />+<path d="M100.5745 94.9552+L100.5745 95.0157+" />+</g><text x="100.0000" y="105.7150"+textLength="21.2488" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">CR0402-FX-4701GLF</text>+<g class="stroked-text">+<path d="M90.5052 105.5386+L90.4448 105.5991+" />+<path d="M90.4448 105.5991+L90.2633 105.6595+" />+<path d="M90.2633 105.6595+L90.1424 105.6595+" />+<path d="M90.1424 105.6595+L89.9610 105.5991+" />+<path d="M89.9610 105.5991+L89.8400 105.4781+" />+<path d="M89.8400 105.4781+L89.7795 105.3571+" />+<path d="M89.7795 105.3571+L89.7191 105.1152+" />+<path d="M89.7191 105.1152+L89.7191 104.9338+" />+<path d="M89.7191 104.9338+L89.7795 104.6919+" />+<path d="M89.7795 104.6919+L89.8400 104.5710+" />+<path d="M89.8400 104.5710+L89.9610 104.4500+" />+<path d="M89.9610 104.4500+L90.1424 104.3895+" />+<path d="M90.1424 104.3895+L90.2633 104.3895+" />+<path d="M90.2633 104.3895+L90.4448 104.4500+" />+<path d="M90.4448 104.4500+L90.5052 104.5105+" />+<path d="M91.7752 105.6595+L91.3519 105.0548+" />+<path d="M91.0495 105.6595+L91.0495 104.3895+" />+<path d="M91.0495 104.3895+L91.5333 104.3895+" />+<path d="M91.5333 104.3895+L91.6543 104.4500+" />+<path d="M91.6543 104.4500+L91.7148 104.5105+" />+<path d="M91.7148 104.5105+L91.7752 104.6314+" />+<path d="M91.7752 104.6314+L91.7752 104.8129+" />+<path d="M91.7752 104.8129+L91.7148 104.9338+" />+<path d="M91.7148 104.9338+L91.6543 104.9943+" />+<path d="M91.6543 104.9943+L91.5333 105.0548+" />+<path d="M91.5333 105.0548+L91.0495 105.0548+" />+<path d="M92.5614 104.3895+L92.6824 104.3895+" />+<path d="M92.6824 104.3895+L92.8033 104.4500+" />+<path d="M92.8033 104.4500+L92.8638 104.5105+" />+<path d="M92.8638 104.5105+L92.9243 104.6314+" />+<path d="M92.9243 104.6314+L92.9848 104.8733+" />+<path d="M92.9848 104.8733+L92.9848 105.1757+" />+<path d="M92.9848 105.1757+L92.9243 105.4176+" />+<path d="M92.9243 105.4176+L92.8638 105.5386+" />+<path d="M92.8638 105.5386+L92.8033 105.5991+" />+<path d="M92.8033 105.5991+L92.6824 105.6595+" />+<path d="M92.6824 105.6595+L92.5614 105.6595+" />+<path d="M92.5614 105.6595+L92.4405 105.5991+" />+<path d="M92.4405 105.5991+L92.3800 105.5386+" />+<path d="M92.3800 105.5386+L92.3195 105.4176+" />+<path d="M92.3195 105.4176+L92.2591 105.1757+" />+<path d="M92.2591 105.1757+L92.2591 104.8733+" />+<path d="M92.2591 104.8733+L92.3195 104.6314+" />+<path d="M92.3195 104.6314+L92.3800 104.5105+" />+<path d="M92.3800 104.5105+L92.4405 104.4500+" />+<path d="M92.4405 104.4500+L92.5614 104.3895+" />+<path d="M94.0733 104.8129+L94.0733 105.6595+" />+<path d="M93.7709 104.3291+L93.4686 105.2362+" />+<path d="M93.4686 105.2362+L94.2547 105.2362+" />+<path d="M94.9804 104.3895+L95.1014 104.3895+" />+<path d="M95.1014 104.3895+L95.2223 104.4500+" />+<path d="M95.2223 104.4500+L95.2828 104.5105+" />+<path d="M95.2828 104.5105+L95.3433 104.6314+" />+<path d="M95.3433 104.6314+L95.4038 104.8733+" />+<path d="M95.4038 104.8733+L95.4038 105.1757+" />+<path d="M95.4038 105.1757+L95.3433 105.4176+" />+<path d="M95.3433 105.4176+L95.2828 105.5386+" />+<path d="M95.2828 105.5386+L95.2223 105.5991+" />+<path d="M95.2223 105.5991+L95.1014 105.6595+" />+<path d="M95.1014 105.6595+L94.9804 105.6595+" />+<path d="M94.9804 105.6595+L94.8595 105.5991+" />+<path d="M94.8595 105.5991+L94.7990 105.5386+" />+<path d="M94.7990 105.5386+L94.7385 105.4176+" />+<path d="M94.7385 105.4176+L94.6781 105.1757+" />+<path d="M94.6781 105.1757+L94.6781 104.8733+" />+<path d="M94.6781 104.8733+L94.7385 104.6314+" />+<path d="M94.7385 104.6314+L94.7990 104.5105+" />+<path d="M94.7990 104.5105+L94.8595 104.4500+" />+<path d="M94.8595 104.4500+L94.9804 104.3895+" />+<path d="M95.8876 104.5105+L95.9480 104.4500+" />+<path d="M95.9480 104.4500+L96.0690 104.3895+" />+<path d="M96.0690 104.3895+L96.3714 104.3895+" />+<path d="M96.3714 104.3895+L96.4923 104.4500+" />+<path d="M96.4923 104.4500+L96.5528 104.5105+" />+<path d="M96.5528 104.5105+L96.6133 104.6314+" />+<path d="M96.6133 104.6314+L96.6133 104.7524+" />+<path d="M96.6133 104.7524+L96.5528 104.9338+" />+<path d="M96.5528 104.9338+L95.8271 105.6595+" />+<path d="M95.8271 105.6595+L96.6133 105.6595+" />+<path d="M97.1575 105.1757+L98.1252 105.1757+" />+<path d="M99.1533 104.9943+L98.7299 104.9943+" />+<path d="M98.7299 105.6595+L98.7299 104.3895+" />+<path d="M98.7299 104.3895+L99.3347 104.3895+" />+<path d="M99.6976 104.3895+L100.5442 105.6595+" />+<path d="M100.5442 104.3895+L99.6976 105.6595+" />+<path d="M101.0280 105.1757+L101.9957 105.1757+" />+<path d="M103.1447 104.8129+L103.1447 105.6595+" />+<path d="M102.8423 104.3291+L102.5400 105.2362+" />+<path d="M102.5400 105.2362+L103.3261 105.2362+" />+<path d="M103.6890 104.3895+L104.5356 104.3895+" />+<path d="M104.5356 104.3895+L103.9914 105.6595+" />+<path d="M105.2613 104.3895+L105.3823 104.3895+" />+<path d="M105.3823 104.3895+L105.5032 104.4500+" />+<path d="M105.5032 104.4500+L105.5637 104.5105+" />+<path d="M105.5637 104.5105+L105.6242 104.6314+" />+<path d="M105.6242 104.6314+L105.6847 104.8733+" />+<path d="M105.6847 104.8733+L105.6847 105.1757+" />+<path d="M105.6847 105.1757+L105.6242 105.4176+" />+<path d="M105.6242 105.4176+L105.5637 105.5386+" />+<path d="M105.5637 105.5386+L105.5032 105.5991+" />+<path d="M105.5032 105.5991+L105.3823 105.6595+" />+<path d="M105.3823 105.6595+L105.2613 105.6595+" />+<path d="M105.2613 105.6595+L105.1404 105.5991+" />+<path d="M105.1404 105.5991+L105.0799 105.5386+" />+<path d="M105.0799 105.5386+L105.0194 105.4176+" />+<path d="M105.0194 105.4176+L104.9590 105.1757+" />+<path d="M104.9590 105.1757+L104.9590 104.8733+" />+<path d="M104.9590 104.8733+L105.0194 104.6314+" />+<path d="M105.0194 104.6314+L105.0799 104.5105+" />+<path d="M105.0799 104.5105+L105.1404 104.4500+" />+<path d="M105.1404 104.4500+L105.2613 104.3895+" />+<path d="M106.8942 105.6595+L106.1685 105.6595+" />+<path d="M106.5313 105.6595+L106.5313 104.3895+" />+<path d="M106.5313 104.3895+L106.4104 104.5710+" />+<path d="M106.4104 104.5710+L106.2894 104.6919+" />+<path d="M106.2894 104.6919+L106.1685 104.7524+" />+<path d="M108.1037 104.4500+L107.9827 104.3895+" />+<path d="M107.9827 104.3895+L107.8013 104.3895+" />+<path d="M107.8013 104.3895+L107.6199 104.4500+" />+<path d="M107.6199 104.4500+L107.4989 104.5710+" />+<path d="M107.4989 104.5710+L107.4384 104.6919+" />+<path d="M107.4384 104.6919+L107.3780 104.9338+" />+<path d="M107.3780 104.9338+L107.3780 105.1152+" />+<path d="M107.3780 105.1152+L107.4384 105.3571+" />+<path d="M107.4384 105.3571+L107.4989 105.4781+" />+<path d="M107.4989 105.4781+L107.6199 105.5991+" />+<path d="M107.6199 105.5991+L107.8013 105.6595+" />+<path d="M107.8013 105.6595+L107.9222 105.6595+" />+<path d="M107.9222 105.6595+L108.1037 105.5991+" />+++<path d="M108.1641 105.1152+L107.9222 105.1152+" />++++++</g></g> +</svg>+ </div>+ </div>+ <aside>+ <div class="ah"><span class="atitle">Pins <span class="acount">2</span></span><input id="q" placeholder="Filter…"></div>+ <div class="pins" id="pins"></div>+ </aside>+ </main>+ <footer><span class="it"><span class="k">MFR</span><span class="v">Bourns</span></span><span class="it"><span class="k">PINS</span><span class="v">2</span></span><span class="it descit"><span class="k">DESC</span><span class="v">Resistor</span></span></footer>+ <div id="tip"></div>+<script>// viewer_core.js — the ONE symbol-viewer engine, compiled into BOTH the live+// adom-symbol app (SymView) AND the standalone embed export. Neither file should+// reimplement pan/zoom or pin-hover; they call into here so they can never drift.+window.AdomSymViewer = (function(){+ var ZOOM_K = 0.0022; // wheel sensitivity (lower = gentler). The feel.+ var MIN_SCALE = 0.05, MAX_SCALE = 60;++ function clampScale(s){ return Math.max(MIN_SCALE, Math.min(s, MAX_SCALE)); }++ // Device-independent wheel zoom: normalize deltaMode + cap one notch, then hand+ // the pointer-anchored factor to the host's zoomAt(cx, cy, factor). This is the+ // exact math the app has always used — the embed now shares it verbatim.+ function attachWheelZoom(el, zoomAt){+ el.addEventListener('wheel', function(e){+ e.preventDefault();+ var d = e.deltaY;+ if(e.deltaMode === 1) d *= 16; // lines -> px+ else if(e.deltaMode === 2) d *= el.clientHeight; // pages -> px+ d = Math.max(-50, Math.min(50, d)); // cap one event's contribution+ var r = el.getBoundingClientRect();+ zoomAt(e.clientX - r.left, e.clientY - r.top, Math.exp(-d * ZOOM_K));+ }, { passive: false });+ }++ // ---- shared pin-hover engine (glyph pairing + hit-box geometry) ----+ function norm(s){ return String(s || '').replace(/[~{}]/g, '').trim(); }++ // Pair each invisible <text opacity="0"> with the visible <g class="stroked-text">+ // glyph that follows it in document order (handles rotated top/bottom pins).+ function glyphLabels(svg){+ var out = [], pending = null;+ if(!svg) return out;+ svg.querySelectorAll('text, g.stroked-text').forEach(function(n){+ if(n.classList && n.classList.contains('stroked-text')){+ if(pending){ var k = norm(pending.textContent); if(k) out.push({ k: k, group: n }); pending = null; }+ } else if(n.getAttribute && n.getAttribute('opacity') === '0'){ pending = n; }+ });+ return out;+ }++ // Build one transparent hit-rect per pin label (number + name), matched to each+ // pin's glyph by proximity to the pin tip (so duplicate names resolve to the+ // right pin). Rects are appended to `svg` in user space so they pan/zoom with it.+ // pins: [{number,name,x,y,angle,length,...}]+ // offset: {x,y} symbol->svg-unit origin (state.offset)+ // NS: the svg namespace+ // cb: { enter(pin,ev), move(ev), leave(), click(pin,ev)? }+ // Returns { textMap } so the host can highlight a pin's glyphs on demand.+ function buildPinHits(svg, pins, offset, NS, cb){+ var textMap = new Map();+ if(!svg || !offset || !pins || !pins.length) return { textMap: textMap };+ cb = cb || {};+ var gl = glyphLabels(svg);+ gl.forEach(function(o){ if(!textMap.has(o.k)) textMap.set(o.k, []); textMap.get(o.k).push(o.group); });+ var labels = [];+ gl.forEach(function(o){ var b; try { b = o.group.getBBox(); } catch(e){ return; }+ if(!b || !b.width) return;+ labels.push({ k: o.k, box: b, cx: b.x + b.width/2, cy: b.y + b.height/2, used: false }); });+ function pick(k, ax, ay){ k = norm(k); var best = null, bd = 1e9;+ labels.forEach(function(l){ if(l.used || l.k !== k) return; var d = Math.hypot(l.cx - ax, l.cy - ay); if(d < bd){ bd = d; best = l; } });+ if(best) best.used = true; return best; }+ function addBox(b, p){+ var pad = 0.45, r = document.createElementNS(NS, 'rect');+ r.setAttribute('class', 'hit');+ r.setAttribute('x', b.x - pad); r.setAttribute('y', b.y - pad);+ r.setAttribute('width', b.width + pad*2); r.setAttribute('height', b.height + pad*2); r.setAttribute('rx', .3);+ r.addEventListener('mouseenter', function(ev){ if(cb.enter) cb.enter(p, ev); });+ r.addEventListener('mousemove', function(ev){ if(cb.move) cb.move(ev); });+ r.addEventListener('mouseleave', function(){ if(cb.leave) cb.leave(); });+ if(cb.click) r.addEventListener('click', function(ev){ cb.click(p, ev); });+ svg.appendChild(r);+ }+ pins.forEach(function(p){+ var tipX = offset.x + p.x, tipY = offset.y - p.y, L = p.length || 2.54, dx = 0, dy = 0;+ if(p.angle === 0) dx = 1; else if(p.angle === 180) dx = -1; else if(p.angle === 90) dy = -1; else if(p.angle === 270) dy = 1;+ var nl = pick(p.number, tipX + dx*L*0.5, tipY + dy*L*0.5 - (dx !== 0 ? 0.9 : 0)); // number: over the wire+ var ml = pick(p.name, tipX + dx*(L+2), tipY + dy*(L+2)); // name: inside the body+ if(nl) addBox(nl.box, p);+ if(ml) addBox(ml.box, p);+ if(!nl && !ml){ // discrete parts: no glyphs+ var ex = tipX + dx*L, ey = tipY + dy*L, HT = 1.0;+ addBox({ x: Math.min(tipX, ex) - (dx === 0 ? HT : 0.3), y: Math.min(tipY, ey) - (dy === 0 ? HT : 0.3),+ width: Math.abs(ex - tipX) + (dx === 0 ? HT*2 : 0.6), height: Math.abs(ey - tipY) + (dy === 0 ? HT*2 : 0.6) }, p);+ }+ });+ return { textMap: textMap };+ }++ return {+ ZOOM_K: ZOOM_K, clampScale: clampScale, attachWheelZoom: attachWheelZoom,+ norm: norm, glyphLabels: glyphLabels, buildPinHits: buildPinHits+ };+})();+</script>+<script>+var PINS=[{"angle":270,"color":"#78909c","desc":"","length":1.27,"name":"1","number":"1","type":"Passive","x":0.0,"y":3.81},{"angle":90,"color":"#78909c","desc":"","length":1.27,"name":"2","number":"2","type":"Passive","x":0.0,"y":-3.81}], OFF={"x":100,"y":100};+(function(){+ // The symbol svg is the DIRECT child of #vp; querySelector('svg') alone would+ // grab a toolbar button's zoom icon (also broke pan/zoom before this fix).+ var vp=document.getElementById('vp'), svg=vp.querySelector(':scope > svg')||vp.querySelector('svg');+ if(svg){ svg.removeAttribute('width'); svg.removeAttribute('height'); }+ var scale=1,tx=0,ty=0;+ function apply(){ if(svg) svg.style.transform='translate('+tx+'px,'+ty+'px) scale('+scale+')'; }+ // pointer-anchored zoom with the SHARED scale clamp (same limits as the app).+ function zoomAt(cx,cy,f){ var ns=AdomSymViewer.clampScale(scale*f); var r=ns/scale; tx=cx-(cx-tx)*r; ty=cy-(cy-ty)*r; scale=ns; apply(); }+ function fit(){ scale=1;tx=0;ty=0;apply(); }+ // Wheel/trackpad zoom feel comes from the SHARED engine — identical to SymView.+ AdomSymViewer.attachWheelZoom(vp, zoomAt);+ var drag=false,lx=0,ly=0;+ vp.addEventListener('pointerdown',function(e){ if(e.target.closest('.tools'))return; /* let toolbar buttons receive their click */ drag=true;lx=e.clientX;ly=e.clientY;vp.classList.add('grab');vp.setPointerCapture(e.pointerId); });+ vp.addEventListener('pointermove',function(e){ if(!drag)return; tx+=e.clientX-lx;ty+=e.clientY-ly;lx=e.clientX;ly=e.clientY;apply(); });+ vp.addEventListener('pointerup',function(e){ drag=false;vp.classList.remove('grab'); });+ document.getElementById('zin').onclick=function(){ var r=vp.getBoundingClientRect();zoomAt(r.width/2,r.height/2,1.2); };+ document.getElementById('zout').onclick=function(){ var r=vp.getBoundingClientRect();zoomAt(r.width/2,r.height/2,1/1.2); };+ document.getElementById('fit').onclick=fit;+ // pin panel+ var box=document.getElementById('pins');+ function render(filter){+ box.innerHTML='';+ var f=(filter||'').toLowerCase();+ var shown=PINS.filter(function(p){ return !f || (p.name+' '+p.number+' '+p.type).toLowerCase().indexOf(f)>=0; });+ if(!shown.length){ box.innerHTML='<div class="empty">No pins match.</div>'; return; }+ shown.forEach(function(p){+ var el=document.createElement('div'); el.className='pin';+ var col=p.color||'#8b949e';+ el.innerHTML='<div class="row"><span class="num">'+esc(p.number)+'</span>'+ +'<span class="nme">'+esc(p.name)+'</span>'+ +'<span class="ty" style="color:'+col+';border-color:'+col+'66">'+esc(p.type||'')+'</span></div>'+ +(p.desc?'<div class="d">'+esc(p.desc)+'</div>':'');+ el.onclick=function(){ el.classList.toggle('on'); };+ el.addEventListener('mouseenter',function(){ highlightPin(p); });+ el.addEventListener('mouseleave',function(){ clearHL(); });+ box.appendChild(el);+ });+ }+ function esc(s){ return String(s==null?'':s).replace(/[&<>"]/g,function(c){return{'&':'&','<':'<','>':'>','"':'"'}[c];}); }+ document.getElementById('q').addEventListener('input',function(e){ render(e.target.value); });+ render('');++ // ── pin hover: highlight + tooltip on the SVG, parity with the live SymView ──+ var NS='http://www.w3.org/2000/svg';+ var tip=document.getElementById('tip');+ var textMap=new Map();+ /* lbr-hover-bus v1 */ function lbrPost(n){ try{ parent.postMessage({type:'lbr-hover', pin:n==null?null:String(n)}, '*'); }catch(_){} }+ window.addEventListener('message', function(e){ var d=e.data||{}; if(d.type!=='lbr-hover') return; var q=d.pin==null?null:PINS.filter(function(x){ return String(x.number)===String(d.pin); })[0]; if(q) highlightPin(q); else if(typeof clearHL==='function') clearHL(); });+ function highlightPin(p){+ clearHL();+ [p.name,p.number].forEach(function(k){ var a=textMap.get(AdomSymViewer.norm(k)); if(a) a.forEach(function(g){ g.classList.add('hl'); }); });+ var m=document.getElementById('pinmark');+ if(m && OFF){ m.setAttribute('cx',OFF.x+p.x); m.setAttribute('cy',OFF.y-p.y); m.setAttribute('r',0.7); m.style.opacity='1'; }+ }+ function clearHL(){+ if(svg) svg.querySelectorAll('.hl').forEach(function(e){ e.classList.remove('hl'); });+ var m=document.getElementById('pinmark'); if(m) m.style.opacity='0';+ }+ function showTip(p,x,y){+ var col=p.color||'#8b949e';+ var h='<div class="r1"><span class="nm">'+esc(p.name||'(unnamed)')+'</span><span class="pn">Pin '+esc(p.number)+'</span></div>';+ if(p.type) h+='<span class="badge" style="background:'+col+'22;color:'+col+';border:1px solid '+col+'44">'+esc(p.type)+'</span>';+ if(p.desc) h+='<div class="desc">'+esc(p.desc)+'</div>';+ tip.innerHTML=h; tip.classList.add('show'); posTip(x,y);+ }+ function posTip(x,y){+ var w=tip.offsetWidth||260, hh=tip.offsetHeight||110, tx=x+14, ty=y+14;+ if(tx+w>innerWidth-14) tx=x-w-14;+ if(ty+hh>innerHeight-14) ty=y-hh-14;+ tip.style.left=Math.max(8,tx)+'px'; tip.style.top=Math.max(8,ty)+'px';+ }+ function hideTip(){ tip.classList.remove('show'); clearHL(); }+ // Build the pin hit-zones with the SHARED engine — the exact glyph-pairing ++ // hit-box code the app's SymView uses. The embed only supplies the tooltip.+ if(svg && OFF){+ if(!document.getElementById('pinmark')){ var pm=document.createElementNS(NS,'circle'); pm.id='pinmark'; svg.appendChild(pm); }+ var hideT=null;+ var hits=AdomSymViewer.buildPinHits(svg, PINS, OFF, NS, {+ enter:function(p,ev){ clearTimeout(hideT); showTip(p,ev.clientX,ev.clientY); highlightPin(p); lbrPost(p.number); },+ move:function(ev){ if(tip.classList.contains('show')) posTip(ev.clientX,ev.clientY); },+ leave:function(){ clearTimeout(hideT); hideT=setTimeout(hideTip,45); lbrPost(null); }+ });+ textMap=hits.textMap;+ }++ apply();+})();++// ── app-info header popover: interactive hover you can move into (600ms show,+// 220ms hide-grace) so the wiki link stays reachable. Per adom-app-header.md. ──+(function(){+ var SHOW_DELAY=600, HIDE_GRACE=220;+ document.querySelectorAll('header [data-tooltip-target]').forEach(function(trigger){+ var target=document.getElementById(trigger.dataset.tooltipTarget);+ if(!target) return;+ var showTimer=null, hideTimer=null;+ function show(){ clearTimeout(hideTimer); if(target.classList.contains('show')) return; clearTimeout(showTimer); showTimer=setTimeout(function(){ target.classList.add('show'); }, SHOW_DELAY); }+ function queueHide(){ clearTimeout(showTimer); clearTimeout(hideTimer); hideTimer=setTimeout(function(){ target.classList.remove('show'); }, HIDE_GRACE); }+ trigger.addEventListener('mouseenter',show); trigger.addEventListener('mouseleave',queueHide);+ trigger.addEventListener('focus',show); trigger.addEventListener('blur',queueHide);+ target.addEventListener('mouseenter',show); target.addEventListener('mouseleave',queueHide);+ trigger.addEventListener('click',function(e){ clearTimeout(showTimer); target.classList.toggle('show'); e.stopPropagation(); });+ document.addEventListener('click',function(e){ if(!target.contains(e.target) && !trigger.contains(e.target)) target.classList.remove('show'); }); });+})(); </script>-</body>-</html>+</body></html>
CR0402-FX-4701GLF-unetched.glb⋯ 1 unchanged line ⋯
CR0402-FX-4701GLF.adom-lbr.json+1586−5@@ -1,7 +1,7 @@ { "schema_version": 2, "mpn": "CR0402-FX-4701GLF",- "manufacturer": "",+ "manufacturer": "Bourns", "package": "", "value": "", "category": "",@@ -11,7 +11,7 @@ { "number": "1", "name": "",- "x": 0,+ "x": 200, "y": 150, "length": 50, "rotation": 270,@@ -20,7 +20,7 @@ { "number": "2", "name": "",- "x": 0,+ "x": 200, "y": -150, "length": 50, "rotation": 90,@@ -31,13 +31,1569 @@ "graphics": [ { "kind": "rect",- "x1": -40.0,+ "x1": 160.0, "y1": -100.0,- "x2": 40.0,+ "x2": 240.0, "y2": 100.0, "width": 10.0, "filled": false, "fill_style": "none"+ },+ {+ "kind": "polyline",+ "points": [+ [+ -107.5,+ -121.39763779527559+ ],+ [+ -107.5,+ -54.96850393700788+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ 94.49212598425197,+ -4.7795275590551185+ ],+ [+ 94.49212598425197,+ 61.64960629921261+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -107.5,+ -121.39763779527559+ ],+ [+ 94.49212598425197,+ -4.7795275590551185+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -107.5,+ -54.96850393700788+ ],+ [+ 94.49212598425197,+ 61.64960629921261+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -169.58661417322833,+ 28.67716535433071+ ],+ [+ -167.92519685039372,+ 29.637795275590552+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -72.73228346456693,+ -27.248031496062996+ ],+ [+ -72.73228346456693,+ -22.94488188976378+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -167.92519685039372,+ 27.72047244094488+ ],+ [+ -167.92519685039372,+ 32.02755905511811+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -72.73228346456693,+ -22.94488188976378+ ],+ [+ -167.92519685039372,+ 32.02755905511811+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ 51.44094488188975,+ 41.58267716535433+ ],+ [+ 51.44094488188975,+ 48.74803149606299+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ 51.44094488188975,+ 48.74803149606299+ ],+ [+ -43.75196850393701,+ 103.71653543307086+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -70.24803149606299,+ -28.67716535433071+ ],+ [+ 51.44094488188975,+ 41.58267716535433+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -72.73228346456693,+ -22.94488188976378+ ],+ [+ 51.44094488188975,+ 48.74803149606299+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -167.92519685039372,+ 32.02755905511811+ ],+ [+ -43.75196850393701,+ 103.71653543307086+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -109.98425196850394,+ -125.70078740157481+ ],+ [+ -109.98425196850394,+ -122.83070866141732+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -109.98425196850394,+ -125.70078740157481+ ],+ [+ -213.46062992125985,+ -65.95669291338584+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -213.46062992125985,+ -65.95669291338584+ ],+ [+ -213.46062992125985,+ -63.094488188976385+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -109.98425196850394,+ -125.70078740157481+ ],+ [+ -107.5,+ -124.27165354330708+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -109.98425196850394,+ -122.83070866141732+ ],+ [+ -109.98425196850394,+ -56.401574803149614+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -213.46062992125985,+ -63.094488188976385+ ],+ [+ -213.46062992125985,+ 3.346456692913386+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -107.5,+ -124.27165354330708+ ],+ [+ -58.24015748031496,+ -95.82283464566929+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -107.5,+ -121.39763779527559+ ],+ [+ -58.24015748031496,+ -92.96062992125985+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -58.24015748031496,+ -95.82283464566929+ ],+ [+ -58.24015748031496,+ -92.96062992125985+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -107.5,+ -121.39763779527559+ ],+ [+ -107.5,+ -54.96850393700788+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -109.98425196850394,+ -56.401574803149614+ ],+ [+ -109.98425196850394,+ -53.52755905511811+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -213.46062992125985,+ 3.346456692913386+ ],+ [+ -213.46062992125985,+ 6.208661417322835+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -109.98425196850394,+ -53.52755905511811+ ],+ [+ -213.46062992125985,+ 6.208661417322835+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -109.98425196850394,+ -53.52755905511811+ ],+ [+ -107.5,+ -52.09448818897638+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -213.46062992125985,+ 6.208661417322835+ ],+ [+ -210.97637795275597,+ 7.653543307086614+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -107.5,+ -54.96850393700788+ ],+ [+ -68.58661417322833,+ -32.5+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -107.5,+ -52.09448818897638+ ],+ [+ -68.58661417322833,+ -29.637795275590552+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -68.58661417322833,+ -32.5+ ],+ [+ -68.58661417322833,+ -29.637795275590552+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -68.58661417322833,+ -29.637795275590552+ ],+ [+ -172.07480314960628,+ 30.110236220472444+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -210.97637795275597,+ 7.653543307086614+ ],+ [+ -172.07480314960628,+ 30.110236220472444+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ 45.23228346456693,+ -36.08661417322835+ ],+ [+ 45.23228346456693,+ -33.21259842519685+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ 45.23228346456693,+ -36.08661417322835+ ],+ [+ 42.75984251968504,+ -34.645669291338585+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ 45.23228346456693,+ -36.08661417322835+ ],+ [+ 94.49212598425197,+ -7.653543307086614+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ 45.23228346456693,+ -33.21259842519685+ ],+ [+ 94.49212598425197,+ -4.7795275590551185+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ 96.9763779527559,+ -6.208661417322835+ ],+ [+ 96.9763779527559,+ -3.346456692913386+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ 94.49212598425197,+ -7.653543307086614+ ],+ [+ 96.9763779527559,+ -6.208661417322835+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ 94.49212598425197,+ -4.7795275590551185+ ],+ [+ 94.49212598425197,+ 61.64960629921261+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ 96.9763779527559,+ -3.346456692913386+ ],+ [+ 96.9763779527559,+ 63.094488188976385+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ 55.59055118110234,+ 39.19291338582678+ ],+ [+ 51.44094488188975,+ 41.58267716535433+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ 55.59055118110234,+ 39.19291338582678+ ],+ [+ 94.49212598425197,+ 61.64960629921261+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ 96.9763779527559,+ 63.094488188976385+ ],+ [+ 96.9763779527559,+ 65.95669291338584+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ 94.49212598425197,+ 64.5236220472441+ ],+ [+ 96.9763779527559,+ 65.95669291338584+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -47.897637795275585,+ 101.32677165354332+ ],+ [+ -47.897637795275585,+ 101.80314960629921+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -47.897637795275585,+ 101.80314960629921+ ],+ [+ -8.984251968503969,+ 124.27165354330708+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ 55.59055118110234,+ 39.19291338582678+ ],+ [+ 55.59055118110234,+ 42.05511811023622+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ 55.59055118110234,+ 42.05511811023622+ ],+ [+ 94.49212598425197,+ 64.5236220472441+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ 55.59055118110234,+ 42.05511811023622+ ],+ [+ 51.44094488188975,+ 44.444881889763785+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -47.48425196850397,+ 101.55905511811025+ ],+ [+ -47.897637795275585,+ 101.80314960629921+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -8.984251968503969,+ 124.27165354330708+ ],+ [+ -6.5,+ 125.70078740157481+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ 96.9763779527559,+ 65.95669291338584+ ],+ [+ -6.5,+ 125.70078740157481+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -92.00393700787401,+ 31.14173228346457+ ],+ [+ -93.31102362204723,+ 31.393700787401578+ ],+ [+ -95.07086614173227,+ 31.393700787401578+ ],+ [+ -96.37795275590548,+ 31.14173228346457+ ],+ [+ -98.12598425196853,+ 30.133858267716537+ ],+ [+ -98.56299212598424,+ 29.381889763779526+ ],+ [+ -98.56299212598424,+ 28.36220472440945+ ],+ [+ -98.12598425196853,+ 27.610236220472444+ ],+ [+ -97.25196850393701,+ 26.594488188976378+ ],+ [+ -95.07086614173227,+ 25.330708661417322+ ],+ [+ -93.31102362204723,+ 24.83464566929134+ ],+ [+ -92.00393700787401,+ 24.578740157480315+ ],+ [+ -90.25590551181102,+ 24.578740157480315+ ],+ [+ -88.94488188976379,+ 24.83464566929134+ ],+ [+ -87.20078740157481,+ 25.84251968503937+ ],+ [+ -86.76377952755905,+ 26.594488188976378+ ],+ [+ -86.76377952755905,+ 27.610236220472444+ ],+ [+ -87.20078740157481,+ 28.36220472440945+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -91.12992125984255,+ 34.173228346456696+ ],+ [+ -81.9488188976378,+ 28.8740157480315+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -91.12992125984255,+ 34.173228346456696+ ],+ [+ -87.20078740157481,+ 36.44094488188976+ ],+ [+ -85.44094488188978,+ 36.9488188976378+ ],+ [+ -84.58267716535431,+ 36.9488188976378+ ],+ [+ -83.25984251968504,+ 36.69291338582678+ ],+ [+ -82.39763779527561,+ 36.18503937007874+ ],+ [+ -81.9488188976378,+ 35.43307086614173+ ],+ [+ -81.9488188976378,+ 34.925196850393704+ ],+ [+ -82.82283464566927,+ 33.917322834645674+ ],+ [+ -86.76377952755905,+ 31.637795275590552+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -83.6968503937008,+ 33.40944881889764+ ],+ [+ -75.83858267716539,+ 32.40157480314961+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -79.76771653543307,+ 40.732283464566926+ ],+ [+ -80.63779527559058,+ 39.71259842519685+ ],+ [+ -80.20472440944883,+ 38.46456692913386+ ],+ [+ -78.45669291338584,+ 36.9488188976378+ ],+ [+ -77.1456692913386,+ 36.18503937007874+ ],+ [+ -74.5275590551181,+ 35.17716535433071+ ],+ [+ -72.33464566929138,+ 34.925196850393704+ ],+ [+ -70.58661417322833,+ 35.43307086614173+ ],+ [+ -69.71259842519686,+ 35.94094488188977+ ],+ [+ -68.84251968503935,+ 36.9488188976378+ ],+ [+ -69.2755905511811,+ 38.20866141732284+ ],+ [+ -71.02362204724415,+ 39.71259842519685+ ],+ [+ -72.33464566929138,+ 40.47637795275591+ ],+ [+ -74.95275590551182,+ 41.48425196850394+ ],+ [+ -77.1456692913386,+ 41.74015748031496+ ],+ [+ -78.8937007874016,+ 41.22834645669291+ ],+ [+ -79.76771653543307,+ 40.732283464566926+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -69.2755905511811,+ 46.78346456692913+ ],+ [+ -67.53149606299212,+ 40.732283464566926+ ],+ [+ -60.972440944881896,+ 44.51574803149607+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -69.2755905511811,+ 46.78346456692913+ ],+ [+ -60.09842519685037,+ 41.48425196850394+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -62.27952755905511,+ 50.82283464566929+ ],+ [+ -63.153543307086636,+ 49.814960629921266+ ],+ [+ -62.716535433070874,+ 48.55511811023622+ ],+ [+ -60.972440944881896,+ 47.03937007874016+ ],+ [+ -59.661417322834666,+ 46.28740157480315+ ],+ [+ -57.04330708661416,+ 45.27952755905512+ ],+ [+ -54.84645669291339,+ 45.023622047244096+ ],+ [+ -53.102362204724415,+ 45.5236220472441+ ],+ [+ -52.22834645669292,+ 46.031496062992126+ ],+ [+ -51.35433070866145,+ 47.03937007874016+ ],+ [+ -51.791338582677184,+ 48.29921259842519+ ],+ [+ -53.54724409448821,+ 49.814960629921266+ ],+ [+ -54.84645669291339,+ 50.56692913385827+ ],+ [+ -57.47637795275591,+ 51.58661417322835+ ],+ [+ -59.661417322834666,+ 51.84251968503937+ ],+ [+ -61.40551181102364,+ 51.330708661417326+ ],+ [+ -62.27952755905511,+ 50.82283464566929+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -53.54724409448821,+ 53.35826771653543+ ],+ [+ -53.972440944881896,+ 53.59842519685039+ ],+ [+ -54.40944881889763,+ 54.35039370078741+ ],+ [+ -54.40944881889763,+ 54.85826771653544+ ],+ [+ -53.972440944881896,+ 55.610236220472444+ ],+ [+ -52.22834645669292,+ 56.62992125984252+ ],+ [+ -50.91732283464569,+ 56.88582677165355+ ],+ [+ -50.04330708661416,+ 56.88582677165355+ ],+ [+ -48.73622047244095,+ 56.62992125984252+ ],+ [+ -47.86220472440945,+ 56.12204724409449+ ],+ [+ -47.42519685039372,+ 55.37007874015749+ ],+ [+ -46.988188976377984,+ 54.094488188976385+ ],+ [+ -46.988188976377984,+ 49.05118110236221+ ],+ [+ -40.866141732283495,+ 52.59055118110237+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -41.736220472440976,+ 56.62992125984252+ ],+ [+ -33.86614173228347,+ 61.17716535433071+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -97.90944881889766,+ 14.358267716535435+ ],+ [+ -88.72834645669292,+ 9.059055118110237+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -97.90944881889766,+ 14.358267716535435+ ],+ [+ -92.22047244094489,+ 17.64566929133858+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -93.54330708661422,+ 11.834645669291339+ ],+ [+ -90.03937007874015,+ 13.86220472440945+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -90.4724409448819,+ 18.6496062992126+ ],+ [+ -75.18110236220474,+ 16.88188976377953+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -84.35039370078744,+ 22.181102362204726+ ],+ [+ -81.29527559055117,+ 13.350393700787402+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -76.04330708661416,+ 20.91732283464567+ ],+ [+ -68.18503937007875,+ 25.46456692913386+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -65.99212598425197,+ 32.77952755905512+ ],+ [+ -64.24409448818898,+ 26.72834645669291+ ],+ [+ -57.6968503937008,+ 30.511811023622048+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -65.99212598425197,+ 32.77952755905512+ ],+ [+ -56.822834645669275,+ 27.480314960629922+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -55.5,+ 38.830708661417326+ ],+ [+ -50.700787401574814,+ 31.00787401574803+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -61.62598425196853,+ 35.2992125984252+ ],+ [+ -55.5,+ 38.830708661417326+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -50.26377952755905,+ 41.862204724409445+ ],+ [+ -51.13779527559055,+ 40.85433070866142+ ],+ [+ -50.700787401574814,+ 39.59448818897638+ ],+ [+ -48.95275590551182,+ 38.09055118110236+ ],+ [+ -47.64173228346456,+ 37.32677165354331+ ],+ [+ -45.01181102362207,+ 36.318897637795274+ ],+ [+ -42.83070866141736,+ 36.06299212598425+ ],+ [+ -41.08267716535434,+ 36.5748031496063+ ],+ [+ -40.208661417322844,+ 37.07086614173228+ ],+ [+ -39.33858267716536,+ 38.09055118110236+ ],+ [+ -39.77165354330711,+ 39.338582677165356+ ],+ [+ -41.519685039370074,+ 40.85433070866142+ ],+ [+ -42.83070866141736,+ 41.618110236220474+ ],+ [+ -45.44881889763781,+ 42.625984251968504+ ],+ [+ -47.64173228346456,+ 42.87795275590551+ ],+ [+ -49.389763779527584,+ 42.37007874015748+ ],+ [+ -50.26377952755905,+ 41.862204724409445+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -41.08267716535434,+ 45.145669291338585+ ],+ [+ -40.645669291338606,+ 45.90944881889764+ ],+ [+ -40.645669291338606,+ 47.41338582677165+ ],+ [+ -31.46850393700788,+ 42.11417322834646+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -26.653543307086608,+ 52.968503937007874+ ],+ [+ -27.97637795275594,+ 53.2244094488189+ ],+ [+ -29.72047244094489,+ 53.2244094488189+ ],+ [+ -31.03149606299212,+ 52.968503937007874+ ],+ [+ -32.7755905511811,+ 51.96062992125985+ ],+ [+ -33.21259842519689,+ 51.20866141732284+ ],+ [+ -33.21259842519689,+ 50.19291338582677+ ],+ [+ -32.7755905511811,+ 49.44094488188977+ ],+ [+ -31.9015748031496,+ 48.42125984251969+ ],+ [+ -29.72047244094489,+ 47.161417322834644+ ],+ [+ -27.97637795275594,+ 46.66141732283465+ ],+ [+ -26.653543307086608,+ 46.409448818897644+ ],+ [+ -24.905511811023644,+ 46.409448818897644+ ],+ [+ -23.610236220472473,+ 46.66141732283465+ ],+ [+ -21.850393700787407,+ 47.66929133858268+ ],+ [+ -21.413385826771645,+ 48.42125984251969+ ],+ [+ -21.413385826771645,+ 49.44094488188977+ ],+ [+ -21.850393700787407,+ 50.19291338582677+ ],+ [+ -23.161417322834666,+ 50.95669291338583+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -25.354330708661422,+ 49.69291338582677+ ],+ [+ -23.161417322834666,+ 50.95669291338583+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -25.791338582677184,+ 56.00000000000001+ ],+ [+ -16.5984251968504,+ 50.70078740157481+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -16.5984251968504,+ 50.70078740157481+ ],+ [+ -11.362204724409452,+ 53.73228346456693+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -18.358267716535437,+ 60.29133858267717+ ],+ [+ -9.177165354330725,+ 54.980314960629926+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -18.358267716535437,+ 60.29133858267717+ ],+ [+ -12.669291338582667,+ 63.566929133858274+ ]+ ],+ "width": 3.9370078740157486+ },+ {+ "kind": "polyline",+ "points": [+ [+ -13.980314960629954,+ 57.77165354330709+ ],+ [+ -10.488188976377955,+ 59.78346456692913+ ]+ ],+ "width": 3.9370078740157486 } ], "designator_prefix": "R",@@ -57,6 +1613,31 @@ "name": "Description", "value": "Resistor", "visible": false+ },+ {+ "name": "MPN",+ "value": "CR0402-FX-4701GLF",+ "visible": false+ },+ {+ "name": "Manufacturer",+ "value": "Bourns",+ "visible": false+ },+ {+ "name": "Adom Wiki",+ "value": "https://wiki.adom.inc/adom/cr0402-fx-4701glf",+ "visible": false+ },+ {+ "name": "Adom_Chip_Outline",+ "value": "asset:CR0402-FX-4701GLF-3d-outline-ink-heavy-named.svg@large",+ "visible": false+ },+ {+ "name": "Manufacturer Part Number",+ "value": "CR0402-FX-4701GLF",+ "visible": false } ], "pin_numbers_hidden": true,
CR0402-FX-4701GLF.glb⋯ 1 unchanged line ⋯
CR0402-FX-4701GLF.insertion.glb⋯ 1 unchanged line ⋯
CR0402-FX-4701GLF.kicad_sym+1394−88@@ -1,90 +1,1396 @@ (kicad_symbol_lib- (version 20231120)- (generator "adom")- (symbol "CR0402-FX-4701GLF"- (pin_numbers (hide yes))- (pin_names (offset 0) (hide yes))- (exclude_from_sim no)- (in_bom yes)- (on_board yes)- (property "Reference" "R"- (at 2.032 0 90)- (effects- (font- (size 1.27 1.27)- )- )- )- (property "Value" "CR0402-FX-4701GLF"- (at 0 0 90)- (effects- (font- (size 1.27 1.27)- )- )- )- (property "Footprint" ""- (at 0 0 0)- (effects (font (size 1.27 1.27)) (hide yes))- )- (property "Datasheet" "~"- (at 0 0 0)- (effects (font (size 1.27 1.27)) (hide yes))- )- (property "Description" "Resistor"- (at 0 0 0)- (effects (font (size 1.27 1.27)) (hide yes))- )- (symbol "CR0402-FX-4701GLF_0_1"- (rectangle- (start -1.016 -2.54)- (end 1.016 2.54)- (stroke- (width 0.254)- (type default)- )- (fill- (type none)- )- )- )- (symbol "CR0402-FX-4701GLF_1_1"- (pin passive line- (at 0 3.81 270)- (length 1.27)- (name "~"- (effects- (font- (size 1.27 1.27)- )- )- )- (number "1"- (effects- (font- (size 1.27 1.27)- )- )- )- )- (pin passive line- (at 0 -3.81 90)- (length 1.27)- (name "~"- (effects- (font- (size 1.27 1.27)- )- )- )- (number "2"- (effects- (font- (size 1.27 1.27)- )- )- )- )- )- )+ (version 20231120)+ (generator "adom")+ (symbol "CR0402-FX-4701GLF"+ (pin_numbers+ (hide yes)+ )+ (pin_names+ (offset 0)+ (hide yes)+ )+ (exclude_from_sim no)+ (in_bom yes)+ (on_board yes)+ (property "Reference" "R"+ (at 0 5.08 0)+ (effects+ (font+ (size 1.27 1.27)+ )+ )+ )+ (property "Value" "CR0402-FX-4701GLF"+ (at 0 -5.08 0)+ (effects+ (font+ (size 1.27 1.27)+ )+ )+ )+ (property "Footprint" ""+ (at 0 0 0)+ (effects+ (font+ (size 1.27 1.27)+ )+ (hide yes)+ )+ )+ (property "Datasheet" "~"+ (at 0 0 0)+ (effects+ (font+ (size 1.27 1.27)+ )+ (hide yes)+ )+ )+ (property "Description" "Resistor"+ (at 0 0 0)+ (effects+ (font+ (size 1.27 1.27)+ )+ (hide yes)+ )+ )+ (property "MPN" "CR0402-FX-4701GLF"+ (at 0 0 0)+ (effects+ (font+ (size 1.27 1.27)+ )+ (hide yes)+ )+ )+ (property "Manufacturer" "Bourns"+ (at 0 0 0)+ (effects+ (font+ (size 1.27 1.27)+ )+ (hide yes)+ )+ )+ (property "Adom Wiki" "https://wiki.adom.inc/adom/cr0402-fx-4701glf"+ (at 0 0 0)+ (effects+ (font+ (size 1.27 1.27)+ )+ (hide yes)+ )+ )+ (property "Adom_Chip_Outline" "asset:CR0402-FX-4701GLF-3d-outline-ink-heavy-named.svg@large"+ (at 0 0 0)+ (effects+ (font+ (size 1.27 1.27)+ )+ (hide yes)+ )+ )+ (symbol "CR0402-FX-4701GLF_0_1"+ (rectangle+ (start -1.016 -2.54)+ (end 1.016 2.54)+ (stroke+ (width 0.254)+ (type default)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.8105 -3.0835)+ (xy -7.8105 -1.3962)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -2.6799 -0.1214)+ (xy -2.6799 1.5659)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.8105 -3.0835)+ (xy -2.6799 -0.1214)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.8105 -1.3962)+ (xy -2.6799 1.5659)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -9.3875 0.7284)+ (xy -9.3453 0.7528)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -6.9274 -0.6921)+ (xy -6.9274 -0.5828)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -9.3453 0.7041)+ (xy -9.3453 0.8135)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -6.9274 -0.5828)+ (xy -9.3453 0.8135)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -3.7734 1.0562)+ (xy -3.7734 1.2382)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -3.7734 1.2382)+ (xy -6.1913 2.6344)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -6.8643 -0.7284)+ (xy -3.7734 1.0562)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -6.9274 -0.5828)+ (xy -3.7734 1.2382)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -9.3453 0.8135)+ (xy -6.1913 2.6344)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.8736 -3.1928)+ (xy -7.8736 -3.1199)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.8736 -3.1928)+ (xy -10.5019 -1.6753)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -10.5019 -1.6753)+ (xy -10.5019 -1.6026)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.8736 -3.1928)+ (xy -7.8105 -3.1565)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.8736 -3.1199)+ (xy -7.8736 -1.4326)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -10.5019 -1.6026)+ (xy -10.5019 0.085)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.8105 -3.1565)+ (xy -6.5593 -2.4339)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.8105 -3.0835)+ (xy -6.5593 -2.3612)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -6.5593 -2.4339)+ (xy -6.5593 -2.3612)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.8105 -3.0835)+ (xy -7.8105 -1.3962)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.8736 -1.4326)+ (xy -7.8736 -1.3596)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -10.5019 0.085)+ (xy -10.5019 0.1577)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.8736 -1.3596)+ (xy -10.5019 0.1577)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.8736 -1.3596)+ (xy -7.8105 -1.3232)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -10.5019 0.1577)+ (xy -10.4388 0.1944)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.8105 -1.3962)+ (xy -6.8221 -0.8255)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.8105 -1.3232)+ (xy -6.8221 -0.7528)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -6.8221 -0.8255)+ (xy -6.8221 -0.7528)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -6.8221 -0.7528)+ (xy -9.4507 0.7648)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -10.4388 0.1944)+ (xy -9.4507 0.7648)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -3.9311 -0.9166)+ (xy -3.9311 -0.8436)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -3.9311 -0.9166)+ (xy -3.9939 -0.88)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -3.9311 -0.9166)+ (xy -2.6799 -0.1944)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -3.9311 -0.8436)+ (xy -2.6799 -0.1214)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -2.6168 -0.1577)+ (xy -2.6168 -0.085)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -2.6799 -0.1944)+ (xy -2.6168 -0.1577)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -2.6799 -0.1214)+ (xy -2.6799 1.5659)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -2.6168 -0.085)+ (xy -2.6168 1.6026)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -3.668 0.9955)+ (xy -3.7734 1.0562)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -3.668 0.9955)+ (xy -2.6799 1.5659)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -2.6168 1.6026)+ (xy -2.6168 1.6753)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -2.6799 1.6389)+ (xy -2.6168 1.6753)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -6.2966 2.5737)+ (xy -6.2966 2.5858)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -6.2966 2.5858)+ (xy -5.3082 3.1565)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -3.668 0.9955)+ (xy -3.668 1.0682)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -3.668 1.0682)+ (xy -2.6799 1.6389)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -3.668 1.0682)+ (xy -3.7734 1.1289)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -6.2861 2.5796)+ (xy -6.2966 2.5858)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -5.3082 3.1565)+ (xy -5.2451 3.1928)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -2.6168 1.6753)+ (xy -5.2451 3.1928)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.4169 0.791)+ (xy -7.4501 0.7974)+ (xy -7.4948 0.7974)+ (xy -7.528 0.791)+ (xy -7.5724 0.7654)+ (xy -7.5835 0.7463)+ (xy -7.5835 0.7204)+ (xy -7.5724 0.7013)+ (xy -7.5502 0.6755)+ (xy -7.4948 0.6434)+ (xy -7.4501 0.6308)+ (xy -7.4169 0.6243)+ (xy -7.3725 0.6243)+ (xy -7.3392 0.6308)+ (xy -7.2949 0.6564)+ (xy -7.2838 0.6755)+ (xy -7.2838 0.7013)+ (xy -7.2949 0.7204)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.3947 0.868)+ (xy -7.1615 0.7334)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.3947 0.868)+ (xy -7.2949 0.9256)+ (xy -7.2502 0.9385)+ (xy -7.2284 0.9385)+ (xy -7.1948 0.932)+ (xy -7.1729 0.9191)+ (xy -7.1615 0.9)+ (xy -7.1615 0.8871)+ (xy -7.1837 0.8615)+ (xy -7.2838 0.8036)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.2059 0.8486)+ (xy -7.0063 0.823)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.1061 1.0346)+ (xy -7.1282 1.0087)+ (xy -7.1172 0.977)+ (xy -7.0728 0.9385)+ (xy -7.0395 0.9191)+ (xy -6.973 0.8935)+ (xy -6.9173 0.8871)+ (xy -6.8729 0.9)+ (xy -6.8507 0.9129)+ (xy -6.8286 0.9385)+ (xy -6.8396 0.9705)+ (xy -6.884 1.0087)+ (xy -6.9173 1.0281)+ (xy -6.9838 1.0537)+ (xy -7.0395 1.0602)+ (xy -7.0839 1.0472)+ (xy -7.1061 1.0346)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -6.8396 1.1883)+ (xy -6.7953 1.0346)+ (xy -6.6287 1.1307)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -6.8396 1.1883)+ (xy -6.6065 1.0537)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -6.6619 1.2909)+ (xy -6.6841 1.2653)+ (xy -6.673 1.2333)+ (xy -6.6287 1.1948)+ (xy -6.5954 1.1757)+ (xy -6.5289 1.1501)+ (xy -6.4731 1.1436)+ (xy -6.4288 1.1563)+ (xy -6.4066 1.1692)+ (xy -6.3844 1.1948)+ (xy -6.3955 1.2268)+ (xy -6.4401 1.2653)+ (xy -6.4731 1.2844)+ (xy -6.5399 1.3103)+ (xy -6.5954 1.3168)+ (xy -6.6397 1.3038)+ (xy -6.6619 1.2909)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -6.4401 1.3553)+ (xy -6.4509 1.3614)+ (xy -6.462 1.3805)+ (xy -6.462 1.3934)+ (xy -6.4509 1.4125)+ (xy -6.4066 1.4384)+ (xy -6.3733 1.4449)+ (xy -6.3511 1.4449)+ (xy -6.3179 1.4384)+ (xy -6.2957 1.4255)+ (xy -6.2846 1.4064)+ (xy -6.2735 1.374)+ (xy -6.2735 1.2459)+ (xy -6.118 1.3358)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -6.1401 1.4384)+ (xy -5.9402 1.5539)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.5669 0.3647)+ (xy -7.3337 0.2301)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.5669 0.3647)+ (xy -7.4224 0.4482)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.456 0.3006)+ (xy -7.367 0.3521)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.378 0.4737)+ (xy -6.9896 0.4288)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.2225 0.5634)+ (xy -7.1449 0.3391)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -7.0115 0.5313)+ (xy -6.8119 0.6468)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -6.7562 0.8326)+ (xy -6.7118 0.6789)+ (xy -6.5455 0.775)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -6.7562 0.8326)+ (xy -6.5233 0.698)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -6.4897 0.9863)+ (xy -6.3678 0.7876)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -6.6453 0.8966)+ (xy -6.4897 0.9863)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -6.3567 1.0633)+ (xy -6.3789 1.0377)+ (xy -6.3678 1.0057)+ (xy -6.3234 0.9675)+ (xy -6.2901 0.9481)+ (xy -6.2233 0.9225)+ (xy -6.1679 0.916)+ (xy -6.1235 0.929)+ (xy -6.1013 0.9416)+ (xy -6.0792 0.9675)+ (xy -6.0902 0.9992)+ (xy -6.1346 1.0377)+ (xy -6.1679 1.0571)+ (xy -6.2344 1.0827)+ (xy -6.2901 1.0891)+ (xy -6.3345 1.0762)+ (xy -6.3567 1.0633)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -6.1235 1.1467)+ (xy -6.1124 1.1661)+ (xy -6.1124 1.2043)+ (xy -5.8793 1.0697)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -5.757 1.3454)+ (xy -5.7906 1.3519)+ (xy -5.8349 1.3519)+ (xy -5.8682 1.3454)+ (xy -5.9125 1.3198)+ (xy -5.9236 1.3007)+ (xy -5.9236 1.2749)+ (xy -5.9125 1.2558)+ (xy -5.8903 1.2299)+ (xy -5.8349 1.1979)+ (xy -5.7906 1.1852)+ (xy -5.757 1.1788)+ (xy -5.7126 1.1788)+ (xy -5.6797 1.1852)+ (xy -5.635 1.2108)+ (xy -5.6239 1.2299)+ (xy -5.6239 1.2558)+ (xy -5.635 1.2749)+ (xy -5.6683 1.2943)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -5.724 1.2622)+ (xy -5.6683 1.2943)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -5.7351 1.4224)+ (xy -5.5016 1.2878)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -5.5016 1.2878)+ (xy -5.3686 1.3648)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -5.5463 1.5314)+ (xy -5.3131 1.3965)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -5.5463 1.5314)+ (xy -5.4018 1.6146)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -5.4351 1.4674)+ (xy -5.3464 1.5185)+ )+ (stroke+ (width 0.1)+ (type default)+ (color 110 110 110 1)+ )+ (fill+ (type none)+ )+ )+ )+ (symbol "CR0402-FX-4701GLF_1_1"+ (pin passive line+ (at 0 3.81 270)+ (length 1.27)+ (name "~"+ (effects+ (font+ (size 1.27 1.27)+ )+ )+ )+ (number "1"+ (effects+ (font+ (size 1.27 1.27)+ )+ )+ )+ )+ (pin passive line+ (at 0 -3.81 90)+ (length 1.27)+ (name "~"+ (effects+ (font+ (size 1.27 1.27)+ )+ )+ )+ (number "2"+ (effects+ (font+ (size 1.27 1.27)+ )+ )+ )+ )+ )+ ) )
CR0402-FX-4701GLF.lbr+192−8@@ -69,14 +69,198 @@ <symbols> <symbol name="CR0402-FX-4701GLF"> <description>0402 Thick Film Resistor · 4.7 kΩ ±1% · 1/16 W</description>- <wire x1="-7.62" y1="5.08" x2="7.62" y2="5.08" width="0.254" layer="94"/>- <wire x1="7.62" y1="5.08" x2="7.62" y2="-2.54" width="0.254" layer="94"/>- <wire x1="7.62" y1="-2.54" x2="-7.62" y2="-2.54" width="0.254" layer="94"/>- <wire x1="-7.62" y1="-2.54" x2="-7.62" y2="5.08" width="0.254" layer="94"/>- <text x="2.0320" y="0.0000" size="1.27" layer="95" align="center">>NAME</text>- <text x="0.0000" y="0.0000" size="1.27" layer="96" align="center">>VALUE</text>- <pin name="1" x="-12.7" y="2.54" length="middle" direction="pas"/>- <pin name="2" x="-12.7" y="0" length="middle" direction="pas"/>+ <wire x1="-1.016" y1="-2.54" x2="1.016" y2="-2.54" width="0.254" layer="94"/>+ <wire x1="1.016" y1="-2.54" x2="1.016" y2="2.54" width="0.254" layer="94"/>+ <wire x1="1.016" y1="2.54" x2="-1.016" y2="2.54" width="0.254" layer="94"/>+ <wire x1="-1.016" y1="2.54" x2="-1.016" y2="-2.54" width="0.254" layer="94"/>+ <wire x1="-7.8105" y1="-3.0835" x2="-7.8105" y2="-1.3962" width="0.0254" layer="94"/>+ <wire x1="-2.6799" y1="-0.1214" x2="-2.6799" y2="1.5659" width="0.0254" layer="94"/>+ <wire x1="-7.8105" y1="-3.0835" x2="-2.6799" y2="-0.1214" width="0.0254" layer="94"/>+ <wire x1="-7.8105" y1="-1.3962" x2="-2.6799" y2="1.5659" width="0.0254" layer="94"/>+ <wire x1="-9.3875" y1="0.7284" x2="-9.3453" y2="0.7528" width="0.0254" layer="94"/>+ <wire x1="-6.9274" y1="-0.6921" x2="-6.9274" y2="-0.5828" width="0.0254" layer="94"/>+ <wire x1="-9.3453" y1="0.7041" x2="-9.3453" y2="0.8135" width="0.0254" layer="94"/>+ <wire x1="-6.9274" y1="-0.5828" x2="-9.3453" y2="0.8135" width="0.0254" layer="94"/>+ <wire x1="-3.7734" y1="1.0562" x2="-3.7734" y2="1.2382" width="0.0254" layer="94"/>+ <wire x1="-3.7734" y1="1.2382" x2="-6.1913" y2="2.6344" width="0.0254" layer="94"/>+ <wire x1="-6.8643" y1="-0.7284" x2="-3.7734" y2="1.0562" width="0.0254" layer="94"/>+ <wire x1="-6.9274" y1="-0.5828" x2="-3.7734" y2="1.2382" width="0.0254" layer="94"/>+ <wire x1="-9.3453" y1="0.8135" x2="-6.1913" y2="2.6344" width="0.0254" layer="94"/>+ <wire x1="-7.8736" y1="-3.1928" x2="-7.8736" y2="-3.1199" width="0.0254" layer="94"/>+ <wire x1="-7.8736" y1="-3.1928" x2="-10.5019" y2="-1.6753" width="0.0254" layer="94"/>+ <wire x1="-10.5019" y1="-1.6753" x2="-10.5019" y2="-1.6026" width="0.0254" layer="94"/>+ <wire x1="-7.8736" y1="-3.1928" x2="-7.8105" y2="-3.1565" width="0.0254" layer="94"/>+ <wire x1="-7.8736" y1="-3.1199" x2="-7.8736" y2="-1.4326" width="0.0254" layer="94"/>+ <wire x1="-10.5019" y1="-1.6026" x2="-10.5019" y2="0.0850" width="0.0254" layer="94"/>+ <wire x1="-7.8105" y1="-3.1565" x2="-6.5593" y2="-2.4339" width="0.0254" layer="94"/>+ <wire x1="-7.8105" y1="-3.0835" x2="-6.5593" y2="-2.3612" width="0.0254" layer="94"/>+ <wire x1="-6.5593" y1="-2.4339" x2="-6.5593" y2="-2.3612" width="0.0254" layer="94"/>+ <wire x1="-7.8105" y1="-3.0835" x2="-7.8105" y2="-1.3962" width="0.0254" layer="94"/>+ <wire x1="-7.8736" y1="-1.4326" x2="-7.8736" y2="-1.3596" width="0.0254" layer="94"/>+ <wire x1="-10.5019" y1="0.0850" x2="-10.5019" y2="0.1577" width="0.0254" layer="94"/>+ <wire x1="-7.8736" y1="-1.3596" x2="-10.5019" y2="0.1577" width="0.0254" layer="94"/>+ <wire x1="-7.8736" y1="-1.3596" x2="-7.8105" y2="-1.3232" width="0.0254" layer="94"/>+ <wire x1="-10.5019" y1="0.1577" x2="-10.4388" y2="0.1944" width="0.0254" layer="94"/>+ <wire x1="-7.8105" y1="-1.3962" x2="-6.8221" y2="-0.8255" width="0.0254" layer="94"/>+ <wire x1="-7.8105" y1="-1.3232" x2="-6.8221" y2="-0.7528" width="0.0254" layer="94"/>+ <wire x1="-6.8221" y1="-0.8255" x2="-6.8221" y2="-0.7528" width="0.0254" layer="94"/>+ <wire x1="-6.8221" y1="-0.7528" x2="-9.4507" y2="0.7648" width="0.0254" layer="94"/>+ <wire x1="-10.4388" y1="0.1944" x2="-9.4507" y2="0.7648" width="0.0254" layer="94"/>+ <wire x1="-3.9311" y1="-0.9166" x2="-3.9311" y2="-0.8436" width="0.0254" layer="94"/>+ <wire x1="-3.9311" y1="-0.9166" x2="-3.9939" y2="-0.8800" width="0.0254" layer="94"/>+ <wire x1="-3.9311" y1="-0.9166" x2="-2.6799" y2="-0.1944" width="0.0254" layer="94"/>+ <wire x1="-3.9311" y1="-0.8436" x2="-2.6799" y2="-0.1214" width="0.0254" layer="94"/>+ <wire x1="-2.6168" y1="-0.1577" x2="-2.6168" y2="-0.0850" width="0.0254" layer="94"/>+ <wire x1="-2.6799" y1="-0.1944" x2="-2.6168" y2="-0.1577" width="0.0254" layer="94"/>+ <wire x1="-2.6799" y1="-0.1214" x2="-2.6799" y2="1.5659" width="0.0254" layer="94"/>+ <wire x1="-2.6168" y1="-0.0850" x2="-2.6168" y2="1.6026" width="0.0254" layer="94"/>+ <wire x1="-3.6680" y1="0.9955" x2="-3.7734" y2="1.0562" width="0.0254" layer="94"/>+ <wire x1="-3.6680" y1="0.9955" x2="-2.6799" y2="1.5659" width="0.0254" layer="94"/>+ <wire x1="-2.6168" y1="1.6026" x2="-2.6168" y2="1.6753" width="0.0254" layer="94"/>+ <wire x1="-2.6799" y1="1.6389" x2="-2.6168" y2="1.6753" width="0.0254" layer="94"/>+ <wire x1="-6.2966" y1="2.5737" x2="-6.2966" y2="2.5858" width="0.0254" layer="94"/>+ <wire x1="-6.2966" y1="2.5858" x2="-5.3082" y2="3.1565" width="0.0254" layer="94"/>+ <wire x1="-3.6680" y1="0.9955" x2="-3.6680" y2="1.0682" width="0.0254" layer="94"/>+ <wire x1="-3.6680" y1="1.0682" x2="-2.6799" y2="1.6389" width="0.0254" layer="94"/>+ <wire x1="-3.6680" y1="1.0682" x2="-3.7734" y2="1.1289" width="0.0254" layer="94"/>+ <wire x1="-6.2861" y1="2.5796" x2="-6.2966" y2="2.5858" width="0.0254" layer="94"/>+ <wire x1="-5.3082" y1="3.1565" x2="-5.2451" y2="3.1928" width="0.0254" layer="94"/>+ <wire x1="-2.6168" y1="1.6753" x2="-5.2451" y2="3.1928" width="0.0254" layer="94"/>+ <wire x1="-7.4169" y1="0.7910" x2="-7.4501" y2="0.7974" width="0.0254" layer="94"/>+ <wire x1="-7.4501" y1="0.7974" x2="-7.4948" y2="0.7974" width="0.0254" layer="94"/>+ <wire x1="-7.4948" y1="0.7974" x2="-7.5280" y2="0.7910" width="0.0254" layer="94"/>+ <wire x1="-7.5280" y1="0.7910" x2="-7.5724" y2="0.7654" width="0.0254" layer="94"/>+ <wire x1="-7.5724" y1="0.7654" x2="-7.5835" y2="0.7463" width="0.0254" layer="94"/>+ <wire x1="-7.5835" y1="0.7463" x2="-7.5835" y2="0.7204" width="0.0254" layer="94"/>+ <wire x1="-7.5835" y1="0.7204" x2="-7.5724" y2="0.7013" width="0.0254" layer="94"/>+ <wire x1="-7.5724" y1="0.7013" x2="-7.5502" y2="0.6755" width="0.0254" layer="94"/>+ <wire x1="-7.5502" y1="0.6755" x2="-7.4948" y2="0.6434" width="0.0254" layer="94"/>+ <wire x1="-7.4948" y1="0.6434" x2="-7.4501" y2="0.6308" width="0.0254" layer="94"/>+ <wire x1="-7.4501" y1="0.6308" x2="-7.4169" y2="0.6243" width="0.0254" layer="94"/>+ <wire x1="-7.4169" y1="0.6243" x2="-7.3725" y2="0.6243" width="0.0254" layer="94"/>+ <wire x1="-7.3725" y1="0.6243" x2="-7.3392" y2="0.6308" width="0.0254" layer="94"/>+ <wire x1="-7.3392" y1="0.6308" x2="-7.2949" y2="0.6564" width="0.0254" layer="94"/>+ <wire x1="-7.2949" y1="0.6564" x2="-7.2838" y2="0.6755" width="0.0254" layer="94"/>+ <wire x1="-7.2838" y1="0.6755" x2="-7.2838" y2="0.7013" width="0.0254" layer="94"/>+ <wire x1="-7.2838" y1="0.7013" x2="-7.2949" y2="0.7204" width="0.0254" layer="94"/>+ <wire x1="-7.3947" y1="0.8680" x2="-7.1615" y2="0.7334" width="0.0254" layer="94"/>+ <wire x1="-7.3947" y1="0.8680" x2="-7.2949" y2="0.9256" width="0.0254" layer="94"/>+ <wire x1="-7.2949" y1="0.9256" x2="-7.2502" y2="0.9385" width="0.0254" layer="94"/>+ <wire x1="-7.2502" y1="0.9385" x2="-7.2284" y2="0.9385" width="0.0254" layer="94"/>+ <wire x1="-7.2284" y1="0.9385" x2="-7.1948" y2="0.9320" width="0.0254" layer="94"/>+ <wire x1="-7.1948" y1="0.9320" x2="-7.1729" y2="0.9191" width="0.0254" layer="94"/>+ <wire x1="-7.1729" y1="0.9191" x2="-7.1615" y2="0.9000" width="0.0254" layer="94"/>+ <wire x1="-7.1615" y1="0.9000" x2="-7.1615" y2="0.8871" width="0.0254" layer="94"/>+ <wire x1="-7.1615" y1="0.8871" x2="-7.1837" y2="0.8615" width="0.0254" layer="94"/>+ <wire x1="-7.1837" y1="0.8615" x2="-7.2838" y2="0.8036" width="0.0254" layer="94"/>+ <wire x1="-7.2059" y1="0.8486" x2="-7.0063" y2="0.8230" width="0.0254" layer="94"/>+ <wire x1="-7.1061" y1="1.0346" x2="-7.1282" y2="1.0087" width="0.0254" layer="94"/>+ <wire x1="-7.1282" y1="1.0087" x2="-7.1172" y2="0.9770" width="0.0254" layer="94"/>+ <wire x1="-7.1172" y1="0.9770" x2="-7.0728" y2="0.9385" width="0.0254" layer="94"/>+ <wire x1="-7.0728" y1="0.9385" x2="-7.0395" y2="0.9191" width="0.0254" layer="94"/>+ <wire x1="-7.0395" y1="0.9191" x2="-6.9730" y2="0.8935" width="0.0254" layer="94"/>+ <wire x1="-6.9730" y1="0.8935" x2="-6.9173" y2="0.8871" width="0.0254" layer="94"/>+ <wire x1="-6.9173" y1="0.8871" x2="-6.8729" y2="0.9000" width="0.0254" layer="94"/>+ <wire x1="-6.8729" y1="0.9000" x2="-6.8507" y2="0.9129" width="0.0254" layer="94"/>+ <wire x1="-6.8507" y1="0.9129" x2="-6.8286" y2="0.9385" width="0.0254" layer="94"/>+ <wire x1="-6.8286" y1="0.9385" x2="-6.8396" y2="0.9705" width="0.0254" layer="94"/>+ <wire x1="-6.8396" y1="0.9705" x2="-6.8840" y2="1.0087" width="0.0254" layer="94"/>+ <wire x1="-6.8840" y1="1.0087" x2="-6.9173" y2="1.0281" width="0.0254" layer="94"/>+ <wire x1="-6.9173" y1="1.0281" x2="-6.9838" y2="1.0537" width="0.0254" layer="94"/>+ <wire x1="-6.9838" y1="1.0537" x2="-7.0395" y2="1.0602" width="0.0254" layer="94"/>+ <wire x1="-7.0395" y1="1.0602" x2="-7.0839" y2="1.0472" width="0.0254" layer="94"/>+ <wire x1="-7.0839" y1="1.0472" x2="-7.1061" y2="1.0346" width="0.0254" layer="94"/>+ <wire x1="-6.8396" y1="1.1883" x2="-6.7953" y2="1.0346" width="0.0254" layer="94"/>+ <wire x1="-6.7953" y1="1.0346" x2="-6.6287" y2="1.1307" width="0.0254" layer="94"/>+ <wire x1="-6.8396" y1="1.1883" x2="-6.6065" y2="1.0537" width="0.0254" layer="94"/>+ <wire x1="-6.6619" y1="1.2909" x2="-6.6841" y2="1.2653" width="0.0254" layer="94"/>+ <wire x1="-6.6841" y1="1.2653" x2="-6.6730" y2="1.2333" width="0.0254" layer="94"/>+ <wire x1="-6.6730" y1="1.2333" x2="-6.6287" y2="1.1948" width="0.0254" layer="94"/>+ <wire x1="-6.6287" y1="1.1948" x2="-6.5954" y2="1.1757" width="0.0254" layer="94"/>+ <wire x1="-6.5954" y1="1.1757" x2="-6.5289" y2="1.1501" width="0.0254" layer="94"/>+ <wire x1="-6.5289" y1="1.1501" x2="-6.4731" y2="1.1436" width="0.0254" layer="94"/>+ <wire x1="-6.4731" y1="1.1436" x2="-6.4288" y2="1.1563" width="0.0254" layer="94"/>+ <wire x1="-6.4288" y1="1.1563" x2="-6.4066" y2="1.1692" width="0.0254" layer="94"/>+ <wire x1="-6.4066" y1="1.1692" x2="-6.3844" y2="1.1948" width="0.0254" layer="94"/>+ <wire x1="-6.3844" y1="1.1948" x2="-6.3955" y2="1.2268" width="0.0254" layer="94"/>+ <wire x1="-6.3955" y1="1.2268" x2="-6.4401" y2="1.2653" width="0.0254" layer="94"/>+ <wire x1="-6.4401" y1="1.2653" x2="-6.4731" y2="1.2844" width="0.0254" layer="94"/>+ <wire x1="-6.4731" y1="1.2844" x2="-6.5399" y2="1.3103" width="0.0254" layer="94"/>+ <wire x1="-6.5399" y1="1.3103" x2="-6.5954" y2="1.3168" width="0.0254" layer="94"/>+ <wire x1="-6.5954" y1="1.3168" x2="-6.6397" y2="1.3038" width="0.0254" layer="94"/>+ <wire x1="-6.6397" y1="1.3038" x2="-6.6619" y2="1.2909" width="0.0254" layer="94"/>+ <wire x1="-6.4401" y1="1.3553" x2="-6.4509" y2="1.3614" width="0.0254" layer="94"/>+ <wire x1="-6.4509" y1="1.3614" x2="-6.4620" y2="1.3805" width="0.0254" layer="94"/>+ <wire x1="-6.4620" y1="1.3805" x2="-6.4620" y2="1.3934" width="0.0254" layer="94"/>+ <wire x1="-6.4620" y1="1.3934" x2="-6.4509" y2="1.4125" width="0.0254" layer="94"/>+ <wire x1="-6.4509" y1="1.4125" x2="-6.4066" y2="1.4384" width="0.0254" layer="94"/>+ <wire x1="-6.4066" y1="1.4384" x2="-6.3733" y2="1.4449" width="0.0254" layer="94"/>+ <wire x1="-6.3733" y1="1.4449" x2="-6.3511" y2="1.4449" width="0.0254" layer="94"/>+ <wire x1="-6.3511" y1="1.4449" x2="-6.3179" y2="1.4384" width="0.0254" layer="94"/>+ <wire x1="-6.3179" y1="1.4384" x2="-6.2957" y2="1.4255" width="0.0254" layer="94"/>+ <wire x1="-6.2957" y1="1.4255" x2="-6.2846" y2="1.4064" width="0.0254" layer="94"/>+ <wire x1="-6.2846" y1="1.4064" x2="-6.2735" y2="1.3740" width="0.0254" layer="94"/>+ <wire x1="-6.2735" y1="1.3740" x2="-6.2735" y2="1.2459" width="0.0254" layer="94"/>+ <wire x1="-6.2735" y1="1.2459" x2="-6.1180" y2="1.3358" width="0.0254" layer="94"/>+ <wire x1="-6.1401" y1="1.4384" x2="-5.9402" y2="1.5539" width="0.0254" layer="94"/>+ <wire x1="-7.5669" y1="0.3647" x2="-7.3337" y2="0.2301" width="0.0254" layer="94"/>+ <wire x1="-7.5669" y1="0.3647" x2="-7.4224" y2="0.4482" width="0.0254" layer="94"/>+ <wire x1="-7.4560" y1="0.3006" x2="-7.3670" y2="0.3521" width="0.0254" layer="94"/>+ <wire x1="-7.3780" y1="0.4737" x2="-6.9896" y2="0.4288" width="0.0254" layer="94"/>+ <wire x1="-7.2225" y1="0.5634" x2="-7.1449" y2="0.3391" width="0.0254" layer="94"/>+ <wire x1="-7.0115" y1="0.5313" x2="-6.8119" y2="0.6468" width="0.0254" layer="94"/>+ <wire x1="-6.7562" y1="0.8326" x2="-6.7118" y2="0.6789" width="0.0254" layer="94"/>+ <wire x1="-6.7118" y1="0.6789" x2="-6.5455" y2="0.7750" width="0.0254" layer="94"/>+ <wire x1="-6.7562" y1="0.8326" x2="-6.5233" y2="0.6980" width="0.0254" layer="94"/>+ <wire x1="-6.4897" y1="0.9863" x2="-6.3678" y2="0.7876" width="0.0254" layer="94"/>+ <wire x1="-6.6453" y1="0.8966" x2="-6.4897" y2="0.9863" width="0.0254" layer="94"/>+ <wire x1="-6.3567" y1="1.0633" x2="-6.3789" y2="1.0377" width="0.0254" layer="94"/>+ <wire x1="-6.3789" y1="1.0377" x2="-6.3678" y2="1.0057" width="0.0254" layer="94"/>+ <wire x1="-6.3678" y1="1.0057" x2="-6.3234" y2="0.9675" width="0.0254" layer="94"/>+ <wire x1="-6.3234" y1="0.9675" x2="-6.2901" y2="0.9481" width="0.0254" layer="94"/>+ <wire x1="-6.2901" y1="0.9481" x2="-6.2233" y2="0.9225" width="0.0254" layer="94"/>+ <wire x1="-6.2233" y1="0.9225" x2="-6.1679" y2="0.9160" width="0.0254" layer="94"/>+ <wire x1="-6.1679" y1="0.9160" x2="-6.1235" y2="0.9290" width="0.0254" layer="94"/>+ <wire x1="-6.1235" y1="0.9290" x2="-6.1013" y2="0.9416" width="0.0254" layer="94"/>+ <wire x1="-6.1013" y1="0.9416" x2="-6.0792" y2="0.9675" width="0.0254" layer="94"/>+ <wire x1="-6.0792" y1="0.9675" x2="-6.0902" y2="0.9992" width="0.0254" layer="94"/>+ <wire x1="-6.0902" y1="0.9992" x2="-6.1346" y2="1.0377" width="0.0254" layer="94"/>+ <wire x1="-6.1346" y1="1.0377" x2="-6.1679" y2="1.0571" width="0.0254" layer="94"/>+ <wire x1="-6.1679" y1="1.0571" x2="-6.2344" y2="1.0827" width="0.0254" layer="94"/>+ <wire x1="-6.2344" y1="1.0827" x2="-6.2901" y2="1.0891" width="0.0254" layer="94"/>+ <wire x1="-6.2901" y1="1.0891" x2="-6.3345" y2="1.0762" width="0.0254" layer="94"/>+ <wire x1="-6.3345" y1="1.0762" x2="-6.3567" y2="1.0633" width="0.0254" layer="94"/>+ <wire x1="-6.1235" y1="1.1467" x2="-6.1124" y2="1.1661" width="0.0254" layer="94"/>+ <wire x1="-6.1124" y1="1.1661" x2="-6.1124" y2="1.2043" width="0.0254" layer="94"/>+ <wire x1="-6.1124" y1="1.2043" x2="-5.8793" y2="1.0697" width="0.0254" layer="94"/>+ <wire x1="-5.7570" y1="1.3454" x2="-5.7906" y2="1.3519" width="0.0254" layer="94"/>+ <wire x1="-5.7906" y1="1.3519" x2="-5.8349" y2="1.3519" width="0.0254" layer="94"/>+ <wire x1="-5.8349" y1="1.3519" x2="-5.8682" y2="1.3454" width="0.0254" layer="94"/>+ <wire x1="-5.8682" y1="1.3454" x2="-5.9125" y2="1.3198" width="0.0254" layer="94"/>+ <wire x1="-5.9125" y1="1.3198" x2="-5.9236" y2="1.3007" width="0.0254" layer="94"/>+ <wire x1="-5.9236" y1="1.3007" x2="-5.9236" y2="1.2749" width="0.0254" layer="94"/>+ <wire x1="-5.9236" y1="1.2749" x2="-5.9125" y2="1.2558" width="0.0254" layer="94"/>+ <wire x1="-5.9125" y1="1.2558" x2="-5.8903" y2="1.2299" width="0.0254" layer="94"/>+ <wire x1="-5.8903" y1="1.2299" x2="-5.8349" y2="1.1979" width="0.0254" layer="94"/>+ <wire x1="-5.8349" y1="1.1979" x2="-5.7906" y2="1.1852" width="0.0254" layer="94"/>+ <wire x1="-5.7906" y1="1.1852" x2="-5.7570" y2="1.1788" width="0.0254" layer="94"/>+ <wire x1="-5.7570" y1="1.1788" x2="-5.7126" y2="1.1788" width="0.0254" layer="94"/>+ <wire x1="-5.7126" y1="1.1788" x2="-5.6797" y2="1.1852" width="0.0254" layer="94"/>+ <wire x1="-5.6797" y1="1.1852" x2="-5.6350" y2="1.2108" width="0.0254" layer="94"/>+ <wire x1="-5.6350" y1="1.2108" x2="-5.6239" y2="1.2299" width="0.0254" layer="94"/>+ <wire x1="-5.6239" y1="1.2299" x2="-5.6239" y2="1.2558" width="0.0254" layer="94"/>+ <wire x1="-5.6239" y1="1.2558" x2="-5.6350" y2="1.2749" width="0.0254" layer="94"/>+ <wire x1="-5.6350" y1="1.2749" x2="-5.6683" y2="1.2943" width="0.0254" layer="94"/>+ <wire x1="-5.7240" y1="1.2622" x2="-5.6683" y2="1.2943" width="0.0254" layer="94"/>+ <wire x1="-5.7351" y1="1.4224" x2="-5.5016" y2="1.2878" width="0.0254" layer="94"/>+ <wire x1="-5.5016" y1="1.2878" x2="-5.3686" y2="1.3648" width="0.0254" layer="94"/>+ <wire x1="-5.5463" y1="1.5314" x2="-5.3131" y2="1.3965" width="0.0254" layer="94"/>+ <wire x1="-5.5463" y1="1.5314" x2="-5.4018" y2="1.6146" width="0.0254" layer="94"/>+ <wire x1="-5.4351" y1="1.4674" x2="-5.3464" y2="1.5185" width="0.0254" layer="94"/>+ <text x="2.5400" y="-2.5400" size="1.27" layer="95" align="bottom-left">>NAME</text>+ <text x="2.5400" y="2.5400" size="1.27" layer="96" align="top-left">>VALUE</text>+ <pin name="1" x="0" y="3.81" length="short" direction="pas" rot="R270" visible="pad"/>+ <pin name="2" x="0" y="-3.81" length="short" direction="pas" rot="R90" visible="pad"/> </symbol> </symbols> <devicesets>
README.md+14−4@@ -8,6 +8,8 @@ *Bourns CR series chip resistor, product image from [bourns.com](https://www.bourns.com/products/resistors/thick-film-chip-resistors?product=CR0402).* <!-- /product-photo --> +::adom-verified{src="/adom/cr0402-fx-4701glf/render/verification.json"}+ ## Key specs | Spec | Datasheet |@@ -29,6 +31,14 @@ CR0402-FX-4701GLF is the 4.7 kΩ member of Bourns’ CR series of general-pu Design against 1/16 W at 70 °C ambient, the rating derates linearly above that and reaches zero at +155 °C (p.1, p.3), and keep continuous voltage at or below 50 V; the 100 V figure is an overload limit, not a working one. (p.1) TCR is ±100 ppm/°C across the 10 Ω-1 MΩ ±1 % band this value sits in. (p.1) A 2.5× rated-voltage, 5-second overload is allowed to shift the value by up to ±(2 % + 0.1 Ω), worth knowing if a transient can land across it. (p.4) +## 3D models++Every 3D file on this page and what makes each one different: the STEP tab holds the CAD models for board tools+(with top and underside previews), the GLB tab the meshes for viewers and renders. AIs: read `models.json` (schema+adom/models@1) rather than guessing from file names.++::adom-models{src="/adom/cr0402-fx-4701glf/render/models.json"}+ ## 3D model provenance Bourns publishes no 3D model for the CR series, so the STEP is **AI-generated** from the Bourns CR Series datasheet@@ -91,7 +101,7 @@ The part's 3D outline in the standard pose (pad 1 toward the viewer), drawn from ## Symbol options -The default symbol, `CR0402-FX-4701GLF.kicad_sym` (the one in the Symbol & Footprint panel), is the plain standard symbol. `CR0402-FX-4701GLF-outline.kicad_sym` is the same symbol with the part's 3D chip outline drawn beside it, its part number placed and reading as on the 3D model.+The default symbol, `CR0402-FX-4701GLF.kicad_sym` (the one in the Symbol & Footprint panel, and in the Fusion and Altium libraries), keeps the standard resistor glyph and draws the part's 3D chip outline beside it, its part number reading as on the 3D model. `CR0402-FX-4701GLF-plain.kicad_sym` is the same symbol without the outline. ## Ordering @@ -106,8 +116,8 @@ The default symbol, `CR0402-FX-4701GLF.kicad_sym` (the one in the Symbol & Footp | File | What it is | |---|---|-| [CR0402-FX-4701GLF.kicad_sym](/blob/component/cr0402-fx-4701glf/CR0402-FX-4701GLF.kicad_sym) | KiCad symbol (standard symbol, the page default) |-| [CR0402-FX-4701GLF-outline.kicad_sym](/blob/component/cr0402-fx-4701glf/CR0402-FX-4701GLF-outline.kicad_sym) | KiCad symbol with the 3D chip outline |+| [CR0402-FX-4701GLF.kicad_sym](/blob/component/cr0402-fx-4701glf/CR0402-FX-4701GLF.kicad_sym) | KiCad symbol with the 3D chip outline beside the glyph (the page default) |+| [CR0402-FX-4701GLF-plain.kicad_sym](/blob/component/cr0402-fx-4701glf/CR0402-FX-4701GLF-plain.kicad_sym) | KiCad symbol without the chip outline | | [CR0402-FX-4701GLF.kicad_mod](/blob/component/cr0402-fx-4701glf/CR0402-FX-4701GLF.kicad_mod) | KiCad footprint (datasheet land pattern) | | [CR0402-FX-4701GLF.step](/blob/component/cr0402-fx-4701glf/CR0402-FX-4701GLF.step) | 3D STEP with the part number laser-etched (default) | | [CR0402-FX-4701GLF-unetched.step](/blob/component/cr0402-fx-4701glf/CR0402-FX-4701GLF-unetched.step) | 3D STEP, bare (no mark) |@@ -115,7 +125,7 @@ The default symbol, `CR0402-FX-4701GLF.kicad_sym` (the one in the Symbol & Footp | [CR0402-FX-4701GLF-unetched.glb](/blob/component/cr0402-fx-4701glf/CR0402-FX-4701GLF-unetched.glb) | 3D GLB, bare | | [CR0402-FX-4701GLF.lbr](/blob/component/cr0402-fx-4701glf/CR0402-FX-4701GLF.lbr) | Fusion 360 / EAGLE library | | [CR0402-FX-4701GLF.adom-lbr.json](/blob/component/cr0402-fx-4701glf/CR0402-FX-4701GLF.adom-lbr.json) | adom-lbr part (converts to Altium, KiCad, EAGLE) |-| [CR0402-FX-4701GLF-datasheet.pdf](https://wiki.adom.inc/download/aravk/cr0402-fx-4701glf/1.0.0/CR0402-FX-4701GLF-datasheet.pdf) | Datasheet (release asset) |+| [cr0402-fx-4701glf-datasheet.pdf](/blob/component/cr0402-fx-4701glf/docs/cr0402-fx-4701glf-datasheet.pdf) | Bourns CR Series datasheet REV. 03/21 (the revision this page cites) | ## Provenance
cr0402-fx-4701glf-hero.glb⋯ 1 unchanged line ⋯
docs/cr0402-fx-4701glf-datasheet.pdfadded⋯ 1 unchanged line ⋯
docs/models/CR0402-FX-4701GLF-unetched.glb.pngadded⋯ 1 unchanged line ⋯
docs/models/CR0402-FX-4701GLF-unetched.step.bottom.pngadded⋯ 1 unchanged line ⋯
docs/models/CR0402-FX-4701GLF-unetched.step.top.pngadded⋯ 1 unchanged line ⋯
docs/models/CR0402-FX-4701GLF.glb.pngadded⋯ 1 unchanged line ⋯
docs/models/CR0402-FX-4701GLF.insertion.glb.pngadded⋯ 1 unchanged line ⋯
docs/models/CR0402-FX-4701GLF.step.bottom.pngadded⋯ 1 unchanged line ⋯
docs/models/CR0402-FX-4701GLF.step.top.pngadded⋯ 1 unchanged line ⋯
docs/models/cr0402-fx-4701glf-hero.glb.pngadded⋯ 1 unchanged line ⋯
models.jsonadded+157@@ -0,0 +1,157 @@+{+ "schema": "adom/models@1",+ "part": "CR0402-FX-4701GLF",+ "models": [+ {+ "path": "CR0402-FX-4701GLF-unetched.glb",+ "format": "glb",+ "title": "Unmarked resistor GLB",+ "status": "current",+ "slot": null,+ "variant": "plain",+ "use": [+ "render"+ ],+ "unique": "The unmarked resistor as a GLB.",+ "marking": null,+ "sha256": "66b0b567849871da8999f8d637b0c72a1957d6ab922706960232a7b944a66c1c",+ "git_blob": "987806c350ae4e6921826609edd684c013305cf2",+ "bytes": 21076,+ "role": "derived",+ "source": "AI-built from Bourns' CR Series datasheet REV. 03/21 dimensions; builder in provenance/tools",+ "colours": true,+ "derived_from": "CR0402-FX-4701GLF-unetched.step",+ "thumb": "docs/models/CR0402-FX-4701GLF-unetched.glb.png"+ },+ {+ "path": "CR0402-FX-4701GLF-unetched.step",+ "format": "step",+ "title": "Bourns-dimension model, unmarked",+ "status": "current",+ "slot": "model_3d_step_plain",+ "variant": "plain",+ "use": [+ "board-cad"+ ],+ "unique": "Same model without the part number, for CAD that adds its own marking.",+ "marking": null,+ "sha256": "4715b00a26bc4e81d4cdb2c8d51467ae1fb054f9cbe8d7d3d61ab69bcef298f5",+ "git_blob": "2288367029f5474a4baf72248520c53c5d50a323",+ "bytes": 146135,+ "role": "datasheet-built",+ "source": "AI-built from Bourns' CR Series datasheet REV. 03/21 dimensions; builder in provenance/tools",+ "colours": true,+ "derived_from": "CR0402-FX-4701GLF.step",+ "thumb": "docs/models/CR0402-FX-4701GLF-unetched.step.top.png",+ "thumb_bottom": "docs/models/CR0402-FX-4701GLF-unetched.step.bottom.png"+ },+ {+ "path": "CR0402-FX-4701GLF.glb",+ "format": "glb",+ "title": "Etched resistor GLB",+ "status": "current",+ "slot": "model_3d_plain",+ "variant": "etched",+ "use": [+ "render"+ ],+ "unique": "The etched resistor on its own as a GLB, no annotations.",+ "marking": {+ "text": "CR0402-FX-4701GLF",+ "surface": "top",+ "colour": "white"+ },+ "sha256": "71b99ad81fb7542ba51cdf2ab18db9651e1b0bff4834da09f883d6badd4d2f10",+ "git_blob": "21a7a8f0c5a5ffe62c796938630b6d04e5a2bc81",+ "bytes": 34484,+ "role": "derived",+ "source": "AI-built from Bourns' CR Series datasheet REV. 03/21 dimensions; builder in provenance/tools",+ "colours": true,+ "derived_from": "CR0402-FX-4701GLF.step",+ "thumb": "docs/models/CR0402-FX-4701GLF.glb.png"+ },+ {+ "path": "CR0402-FX-4701GLF.insertion.glb",+ "format": "glb",+ "title": "Assembly scene: resistor dropping onto its pads",+ "status": "current",+ "slot": null,+ "variant": "insertion",+ "use": [+ "board-insertion",+ "render"+ ],+ "unique": "The resistor seated on a small board with the land pattern's pads, 300 um solder balls and silkscreen, with an insertion animation.",+ "marking": {+ "text": "CR0402-FX-4701GLF",+ "surface": "top",+ "colour": "white"+ },+ "sha256": "8676d56950239a98dc0d52e3c736b3fa0f0215926f2a50a062321b2a286a3efb",+ "git_blob": "d5a012190261e6c9283b405b02bed5e59d8e9199",+ "bytes": 171620,+ "role": "derived",+ "source": "AI-built from Bourns' CR Series datasheet REV. 03/21 dimensions; builder in provenance/tools",+ "colours": true,+ "derived_from": "CR0402-FX-4701GLF.glb",+ "thumb": "docs/models/CR0402-FX-4701GLF.insertion.glb.png"+ },+ {+ "path": "CR0402-FX-4701GLF.step",+ "format": "step",+ "title": "Bourns-dimension model, part number etched",+ "status": "current",+ "slot": "step",+ "variant": "etched",+ "use": [+ "board-cad",+ "render"+ ],+ "unique": "L 1.00, W 0.50, T 0.32 mm with the tinned wrap-around terminals (top 0.20, bottom 0.25 mm), the black overcoat, and the part number on top.",+ "marking": {+ "text": "CR0402-FX-4701GLF",+ "surface": "black overcoat (top)",+ "colour": "white"+ },+ "sha256": "9c5e52b229df34577f3b79d8b4b999255d04f0dc3901804db5df9ce603c12805",+ "git_blob": "fb007a3c23500b60762393fa2501a609b820d97c",+ "bytes": 422903,+ "role": "datasheet-built",+ "source": "AI-built from Bourns' CR Series datasheet REV. 03/21 dimensions; builder in provenance/tools",+ "colours": true,+ "thumb": "docs/models/CR0402-FX-4701GLF.step.top.png",+ "thumb_bottom": "docs/models/CR0402-FX-4701GLF.step.bottom.png"+ },+ {+ "path": "cr0402-fx-4701glf-hero.glb",+ "format": "glb",+ "title": "Wiki hero (annotated)",+ "status": "current",+ "slot": "model_3d",+ "variant": "hero",+ "use": [+ "wiki-hero"+ ],+ "unique": "The page's 3D viewer model: the etched resistor with the Copper pads layer and the hidden 300 um Solder balls layer. Not for board CAD.",+ "marking": {+ "text": "CR0402-FX-4701GLF",+ "surface": "top",+ "colour": "white"+ },+ "sha256": "56e82dc31bf78550747fb96683e8ff64ec84e7964a7504b448ad10f286dab6a3",+ "git_blob": "b3fa3a85d7942765104e42a4455d8b454145bae0",+ "bytes": 51744,+ "role": "derived",+ "source": "AI-built from Bourns' CR Series datasheet REV. 03/21 dimensions; builder in provenance/tools",+ "colours": true,+ "derived_from": "CR0402-FX-4701GLF.step",+ "thumb": "docs/models/cr0402-fx-4701glf-hero.glb.png"+ }+ ],+ "updated": "2026-10-04",+ "front": [+ 0,+ -1,+ 0+ ]+}
page.json+7−2@@ -21,9 +21,14 @@ "model_3d_step": "CR0402-FX-4701GLF.step", "model_3d_plain": "CR0402-FX-4701GLF.glb", "model_3d_step_plain": "CR0402-FX-4701GLF-unetched.step",- "model_3d": "cr0402-fx-4701glf-hero.glb"+ "model_3d": "cr0402-fx-4701glf-hero.glb",+ "datasheet": "docs/cr0402-fx-4701glf-datasheet.pdf"+ },+ "distributor_links": {+ "mouser": "652-CR0402FX-4701GLF",+ "digikey": "CR0402-FX-4701GLFTR-ND",+ "lcsc": false },- "distributor_links": {}, "value": "4.7kΩ", "viewer_3d": { "tooltips": "authored"
provenance/tools/glb_post_metal.pyadded+26@@ -0,0 +1,26 @@+#!/usr/bin/env python3+"""Make the terminal metal read as metal in every GLB of a component page (hero, chip GLBs, scenes).++STEP colours carry no metalness, so step2glb writes the tinned terminals (sRGB 0.80, 0.81, 0.83; linear+0.604, 0.621, 0.656) as a plain grey. This sets every material of that colour (the castellations, bottom pads,+top-side terminals, lead-frame stubs) to metallicFactor 0.9, roughnessFactor 0.25: bright tinned metal against+the white insulation. Idempotent. usage: glb_post_metal.py FILE.glb [...]"""+import json, struct, sys+METAL = (0.6038, 0.6209, 0.6559)+++def read_glb(p):+ b = open(p, "rb").read(); n = struct.unpack("<I", b[12:16])[0]; js = json.loads(b[20:20 + n]); o = 20 + n+ return js, b[o:]+++for p in sys.argv[1:]:+ js, rest = read_glb(p); n = 0+ for m in js.get("materials", []):+ pbr = m.setdefault("pbrMetallicRoughness", {}); c = (pbr.get("baseColorFactor") or [1, 1, 1, 1])[:3]+ if max(abs(a - b) for a, b in zip(c, METAL)) < 2e-3 or m.get("name") == "terminal_tinned":+ pbr.update(metallicFactor=0.9, roughnessFactor=0.25); n += 1+ j = json.dumps(js, separators=(",", ":")).encode(); j += b" " * (-len(j) % 4)+ body = struct.pack("<II", len(j), 0x4E4F534A) + j + rest+ open(p, "wb").write(struct.pack("<III", 0x46546C67, 2, 12 + len(body)) + body)+ print(json.dumps(dict(glb=p, metal_materials=n)))
provenance/tools/hero_post_solderballs.pyadded+105@@ -0,0 +1,105 @@+#!/usr/bin/env python3+"""Hero GLB: a hidden 'Solder balls' layer showing where the 300 um jet-paste balls land on the footprint's pads.++Follows the Adom footprint standard (john/adom-solder-ball-layer-standard): balls 0.30 mm across at 0.25 mm pitch+(adjacent balls overlap slightly, by design), each drawn as a hemisphere with its flat face on the pad, dull leaded+solder grey (63Sn/37Pb), the layer hidden by default. Ball positions use the same rule as adom-footprint's paste-dot+overlay (1.0.26): per SMD pad, a grid at 0.25 mm pitch centred on the pad, kept 0.06 mm inside the pad edge.+The count per pad follows from the pad size (2 x 2 on a 0.7 mm pad, 1 on a 0.5 mm pad), identical to `adom-footprint embed`.++usage: hero_post_solderballs.py HERO.glb [FOOTPRINT.kicad_mod] (in place; refuses to run twice)+The footprint defaults to the single .kicad_mod beside the GLB."""+import glob, json, math, os, re, struct, sys++D, PITCH, MARGIN = 0.30, 0.25, 0.06 # mm+MM = 0.001+Z0 = -0.016 # flat face just above the copper fill (-0.018 mm), under the chip seat+SEG, RINGS = 16, 6+NODE = "Solder balls - 300 um jet paste"+TIP = "Jet-paste solder ball, 0.30 mm across, 0.25 mm pitch (Adom 300 um solder-ball layer standard).\n63Sn/37Pb leaded paste; %s per pad on this footprint, %d in all."+++def read_glb(p):+ b = open(p, "rb").read(); n = struct.unpack("<I", b[12:16])[0]; js = json.loads(b[20:20 + n]); o = 20 + n+ return js, bytearray(b[o + 8:o + 8 + struct.unpack("<I", b[o:o + 4])[0]] if o < len(b) else b"")+++def write_glb(p, js, bin_):+ j = json.dumps(js, separators=(",", ":")).encode(); j += b" " * (-len(j) % 4); bin_ += b"\0" * (-len(bin_) % 4)+ open(p, "wb").write(struct.pack("<III", 0x46546C67, 2, 12 + 8 + len(j) + 8 + len(bin_)) + struct.pack("<II", len(j), 0x4E4F534A) + j+ + struct.pack("<II", len(bin_), 0x004E4942) + bytes(bin_))+++def pads(mod):+ t = open(mod).read(); out = []+ for m in re.finditer(r'\(pad\s+"?([^"\s]*)"?\s+smd\s+\w+\s+\(at\s+([-\d.]+)\s+([-\d.]+)(?:\s+[-\d.]+)?\)\s+\(size\s+([-\d.]+)\s+([-\d.]+)\)', t):+ out.append(dict(num=m.group(1), x=float(m.group(2)), y=-float(m.group(3)), w=float(m.group(4)), h=float(m.group(5)))) # KiCad y down -> y up+ return out+++def grid(c, span):+ n = max(1, int(math.floor((span - 2 * MARGIN - D) / PITCH + 1e-9)) + 1)+ return [c + (i - (n - 1) / 2) * PITCH for i in range(n)]+++glb = sys.argv[1]+mod = sys.argv[2] if len(sys.argv) > 2 else (glob.glob(os.path.join(os.path.dirname(os.path.abspath(glb)), "*.kicad_mod")) or [None])[0]+if not mod: sys.exit("no .kicad_mod beside the GLB; pass one")+js, bin_ = read_glb(glb)+if any(n.get("name") == NODE for n in js["nodes"]): sys.exit(json.dumps(dict(glb=glb, skip="solder balls already present")))+balls = [(x, y, p["num"]) for p in pads(mod) for y in grid(p["y"], p["h"]) for x in grid(p["x"], p["w"])]+_pp = pads(mod); _per = [len(grid(p["x"], p["w"])) * len(grid(p["y"], p["h"])) for p in _pp]+_per_txt = ("%d x %d" % (len(grid(_pp[0]["x"], _pp[0]["w"])), len(grid(_pp[0]["y"], _pp[0]["h"])))) if len(set(_per)) == 1 and _per[0] > 1 else ("1" if set(_per) == {1} else "varies")+TIP = TIP % (_per_txt, len(balls))+++def buf(data, target=None):+ global bin_+ bin_ += b"\0" * (-len(bin_) % 4)+ bv = dict(buffer=0, byteOffset=len(bin_), byteLength=len(data)); bv.update({"target": target} if target else {})+ js.setdefault("bufferViews", []).append(bv); bin_ += data+ return len(js["bufferViews"]) - 1+++# one hemisphere mesh at the origin (mm), dome up (+Z), flat disc down; every ball is a node translated onto its pad+r = D / 2; P, N, I = [], [], []+for k in range(RINGS + 1): # dome: rings from the equator (k=0) to the pole+ th = (math.pi / 2) * k / RINGS+ for s in range(SEG + 1):+ ph = 2 * math.pi * s / SEG; nx, ny, nz = math.cos(th) * math.cos(ph), math.cos(th) * math.sin(ph), math.sin(th)+ P.append((r * nx, r * ny, r * nz)); N.append((nx, ny, nz))+for k in range(RINGS):+ for s in range(SEG):+ a = k * (SEG + 1) + s; b = a + SEG + 1+ I += [a, a + 1, b, a + 1, b + 1, b]+c0 = len(P); P.append((0, 0, 0)); N.append((0, 0, -1))+for s in range(SEG + 1): # flat face on the pad+ ph = 2 * math.pi * s / SEG; P.append((r * math.cos(ph), r * math.sin(ph), 0)); N.append((0, 0, -1))+for s in range(SEG):+ I += [c0, c0 + 2 + s, c0 + 1 + s]+pos = b"".join(struct.pack("<3f", x * MM, y * MM, z * MM) for x, y, z in P)+nrm = b"".join(struct.pack("<3f", *n) for n in N)+idx = b"".join(struct.pack("<H", i) for i in I)+acc = js.setdefault("accessors", [])+acc.append(dict(bufferView=buf(pos, 34962), componentType=5126, count=len(P), type="VEC3",+ min=[-r * MM, -r * MM, 0], max=[r * MM, r * MM, r * MM]))+acc.append(dict(bufferView=buf(nrm, 34962), componentType=5126, count=len(N), type="VEC3"))+acc.append(dict(bufferView=buf(idx, 34963), componentType=5123, count=len(I), type="SCALAR"))+js.setdefault("materials", []).append(dict(name="Solder ball - 63Sn/37Pb, dull", doubleSided=True,+ pbrMetallicRoughness=dict(baseColorFactor=[0.60, 0.61, 0.63, 1.0], metallicFactor=0.55, roughnessFactor=0.6)))+js.setdefault("meshes", []).append(dict(name="solder_ball_300um", primitives=[dict(+ attributes=dict(POSITION=len(acc) - 3, NORMAL=len(acc) - 2), indices=len(acc) - 1, material=len(js["materials"]) - 1)]))+mesh_i = len(js["meshes"]) - 1+kids = []+for x, y, num in balls:+ js["nodes"].append(dict(name="solder_ball_pad%s_%+.3f_%+.3f" % (num, x, y), mesh=mesh_i, translation=[x * MM, y * MM, Z0 * MM],+ extras=dict(tooltip="Pad %s solder ball\n%s" % (num, TIP))))+ kids.append(len(js["nodes"]) - 1)+js["nodes"].append(dict(name=NODE, children=kids, extras=dict(+ adomLayer=dict(key="solder_balls", label="Solder balls (300 um jet paste)", group="Footprint", hidden=True), tooltip=TIP)))+js["scenes"][js.get("scene", 0)]["nodes"].append(len(js["nodes"]) - 1)+js["buffers"][0]["byteLength"] = len(bin_) + (-len(bin_) % 4)+js["asset"].setdefault("extras", {}).setdefault("adomHero", {}).setdefault("layers", {})["solder_balls"] = dict(+ what="300 um jet-paste solder balls on the footprint pads, hidden by default", source="john/adom-solder-ball-layer-standard; " + os.path.basename(mod))+write_glb(glb, js, bin_)+print(json.dumps(dict(glb=glb, balls=len(balls), per_pad=len(balls) // max(1, len(pads(mod))), footprint=os.path.basename(mod))))
provenance/tools/scene_solderballs.pyadded+93@@ -0,0 +1,93 @@+#!/usr/bin/env python3+"""Replace the solder wedges in a component scene GLB (<MPN>.glb showcase, <MPN>.insertion.glb) with the+300 um jet-paste solder balls, the same ones the hero's 'Solder balls' layer shows.++Adom footprint standard (john/adom-solder-ball-layer-standard): balls 0.30 mm across at 0.25 mm pitch (adjacent balls+overlap slightly, by design), each a hemisphere with its flat face on the pad, dull leaded solder grey (63Sn/37Pb).+Positions follow adom-footprint's paste-dot rule (1.0.26): per SMD pad a grid at 0.25 mm pitch centred on the pad,+kept 0.06 mm inside the pad edge (2 x 2 on a 0.7 mm pad, 1 on a 0.5 mm pad). The scene keeps its node 'solder_top' (same name,+same place in the tree), only its geometry and material change. Scene frame: metres, Z up, the balls sit on the pad+copper's top face, read from the scene's pad_top mesh; KiCad Y-down flipped to Y up.+usage: scene_solderballs.py SCENE.glb FOOTPRINT.kicad_mod (in place; idempotent)"""+import json, math, re, struct, sys++D, PITCH, MARGIN, CU = 0.30, 0.25, 0.06, 0.04+MM = 0.001+SEG, RINGS = 16, 6+++def read_glb(p):+ b = open(p, "rb").read(); n = struct.unpack("<I", b[12:16])[0]; js = json.loads(b[20:20 + n]); o = 20 + n+ return js, bytearray(b[o + 8:o + 8 + struct.unpack("<I", b[o:o + 4])[0]] if o < len(b) else b"")+++def write_glb(p, js, bin_):+ j = json.dumps(js, separators=(",", ":")).encode(); j += b" " * (-len(j) % 4); bin_ += b"\0" * (-len(bin_) % 4)+ open(p, "wb").write(struct.pack("<III", 0x46546C67, 2, 12 + 8 + len(j) + 8 + len(bin_)) + struct.pack("<II", len(j), 0x4E4F534A) + j+ + struct.pack("<II", len(bin_), 0x004E4942) + bytes(bin_))+++def pads(mod):+ t = open(mod).read()+ return [(float(m.group(1)), -float(m.group(2)), float(m.group(3)), float(m.group(4))) for m in re.finditer(+ r'\(pad\s+"?[^"\s]*"?\s+smd\s+\w+\s+\(at\s+([-\d.]+)\s+([-\d.]+)(?:\s+[-\d.]+)?\)\s+\(size\s+([-\d.]+)\s+([-\d.]+)\)', t)]+++def grid(c, span):+ n = max(1, int(math.floor((span - 2 * MARGIN - D) / PITCH + 1e-9)) + 1)+ return [c + (i - (n - 1) / 2) * PITCH for i in range(n)]+++def balls(mod):+ return [(x, y) for px, py, w, h in pads(mod) for y in grid(py, h) for x in grid(px, w)]+++def hemispheres(centres, z0):+ r = D / 2; P, N, I = [], [], []+ for cx, cy in centres:+ b0 = len(P)+ for k in range(RINGS + 1):+ th = (math.pi / 2) * k / RINGS+ for s in range(SEG + 1):+ ph = 2 * math.pi * s / SEG; nx, ny, nz = math.cos(th) * math.cos(ph), math.cos(th) * math.sin(ph), math.sin(th)+ P.append((cx + r * nx, cy + r * ny, z0 + r * nz)); N.append((nx, ny, nz))+ for k in range(RINGS):+ for s in range(SEG):+ a = b0 + k * (SEG + 1) + s; b = a + SEG + 1+ I += [a, a + 1, b, a + 1, b + 1, b]+ c0 = len(P); P.append((cx, cy, z0)); N.append((0, 0, -1))+ for s in range(SEG + 1):+ ph = 2 * math.pi * s / SEG; P.append((cx + r * math.cos(ph), cy + r * math.sin(ph), z0)); N.append((0, 0, -1))+ for s in range(SEG):+ I += [c0, c0 + 2 + s, c0 + 1 + s]+ return P, N, I+++if __name__ == "__main__":+ glb, mod = sys.argv[1:3]+ js, bin_ = read_glb(glb)+ names = [n.get("name") for n in js["nodes"]]+ node = js["nodes"][names.index("solder_top")]+ pa = js["accessors"][js["meshes"][js["nodes"][names.index("pad_top")]["mesh"]]["primitives"][0]["attributes"]["POSITION"]]+ cu = pa["max"][2] / MM if "max" in pa else CU # pad copper top in this scene (mm)+ C = balls(mod); P, N, I = hemispheres(C, cu)++ def buf(data, target):+ global bin_+ bin_ += b"\0" * (-len(bin_) % 4)+ js["bufferViews"].append(dict(buffer=0, byteOffset=len(bin_), byteLength=len(data), target=target)); bin_ += data+ return len(js["bufferViews"]) - 1+ acc = js["accessors"]+ xs = [p[0] * MM for p in P]; ys = [p[1] * MM for p in P]; zs = [p[2] * MM for p in P]+ acc.append(dict(bufferView=buf(b"".join(struct.pack("<3f", x * MM, y * MM, z * MM) for x, y, z in P), 34962), componentType=5126,+ count=len(P), type="VEC3", min=[min(xs), min(ys), min(zs)], max=[max(xs), max(ys), max(zs)]))+ acc.append(dict(bufferView=buf(b"".join(struct.pack("<3f", *n) for n in N), 34962), componentType=5126, count=len(N), type="VEC3"))+ acc.append(dict(bufferView=buf(b"".join(struct.pack("<I", i) for i in I), 34963), componentType=5125, count=len(I), type="SCALAR"))+ prim = js["meshes"][node["mesh"]]["primitives"][0]+ prim.update(attributes=dict(POSITION=len(acc) - 3, NORMAL=len(acc) - 2), indices=len(acc) - 1, mode=4)+ js["materials"][prim["material"]].update(name="solder_63Sn37Pb_jet_paste", doubleSided=True,+ pbrMetallicRoughness=dict(baseColorFactor=[0.60, 0.61, 0.63, 1.0], metallicFactor=0.55, roughnessFactor=0.6))+ node["extras"] = dict(node.get("extras") or {}, tooltip="Jet-paste solder ball, 0.30 mm across, 0.25 mm pitch\n(Adom 300 um solder-ball standard), %d on this footprint" % len(C))+ js["buffers"][0]["byteLength"] = len(bin_) + (-len(bin_) % 4)+ write_glb(glb, js, bin_)+ print(json.dumps(dict(glb=glb, balls=len(C), per_pad=len(C) // max(1, len(pads(mod))))))
verification.jsonadded+115@@ -0,0 +1,115 @@+{+ "schema": "adom/verification@1",+ "part": "CR0402-FX-4701GLF",+ "variants": [+ {+ "mpn": "CR0402-FX-4701GLF",+ "note": "this page's value",+ "stocked": false+ }+ ],+ "entries": [+ {+ "date": "2026-10-04",+ "by": {+ "name": "John Lauer",+ "handle": "john"+ },+ "status": "verified",+ "title": "Footprint matches Bourns' Recommended Pad Layout",+ "scope": [+ "footprint"+ ],+ "variants": [+ "*"+ ],+ "checks": [+ {+ "text": "Pads 0.50 x 0.50 mm on 1.00 mm centres, square corners, as Bourns REV. 03/21 p.2 draws them",+ "result": "pass"+ },+ {+ "text": "IPC-7351B heel and side fillets 0.00 mm nominal against the 0.25 mm bottom terminal: the intended fit",+ "result": "pass"+ },+ {+ "text": "Not polarised: pad 1 and pad 2 are interchangeable",+ "result": "note"+ }+ ],+ "evidence": [+ {+ "label": "Bourns datasheet",+ "href": "docs/cr0402-fx-4701glf-datasheet.pdf"+ }+ ],+ "files": {+ "CR0402-FX-4701GLF.kicad_mod": "3261a93d1c7cf8831584c04b07554c36ee216ecc255634bf2a9cb4116f461694"+ }+ },+ {+ "date": "2026-10-04",+ "by": {+ "name": "John Lauer",+ "handle": "john"+ },+ "status": "verified",+ "title": "3D model built from Bourns' CR0402 dimensions",+ "scope": [+ "3d model"+ ],+ "variants": [+ "*"+ ],+ "checks": [+ {+ "text": "L 1.00, W 0.50, T 0.32 mm; top terminal 0.20, bottom terminal 0.25 mm; black overcoat between the top terminals",+ "result": "pass"+ },+ {+ "text": "Terminals and substrate share no surface (no z-fighting); tinned terminals render as metal in every GLB",+ "result": "pass"+ },+ {+ "text": "Part number on the black overcoat; the unmarked STEP beside it",+ "result": "pass"+ }+ ],+ "evidence": [+ {+ "label": "top and underside previews",+ "href": "docs/models/CR0402-FX-4701GLF.step.top.png"+ }+ ],+ "files": {+ "CR0402-FX-4701GLF.step": "9c5e52b229df34577f3b79d8b4b999255d04f0dc3901804db5df9ce603c12805",+ "CR0402-FX-4701GLF-unetched.step": "4715b00a26bc4e81d4cdb2c8d51467ae1fb054f9cbe8d7d3d61ab69bcef298f5"+ }+ },+ {+ "date": "2026-10-04",+ "by": {+ "name": "John Lauer",+ "handle": "john"+ },+ "status": "verified",+ "title": "Hero: copper fill, outlines outside the copper, hidden solder-ball layer",+ "scope": [+ "hero"+ ],+ "variants": [+ "*"+ ],+ "checks": [+ {+ "text": "Copper pads layer; 300 um solder balls layer hidden by default, positions identical to adom-footprint's paste dots",+ "result": "pass"+ }+ ],+ "evidence": [],+ "files": {+ "cr0402-fx-4701glf-hero.glb": "56e82dc31bf78550747fb96683e8ff64ec84e7964a7504b448ad10f286dab6a3"+ }+ }+ ]+}