by adom
0402 SMD Amber LED · 2.1 V drop · 25 mA max
← Commit history
Publish IN-S42ATA characterization with datasheet-verified specs
9 files changed
+5828
IN-S42ATA-fpview.htmladded+790@@ -0,0 +1,790 @@+<!DOCTYPE html>+<html lang="en">+<head>+<meta charset="UTF-8">+<meta name="viewport" content="width=device-width, initial-scale=1.0">+<title>IN-S42ATA</title>+<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;+ }++ .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;+ overflow: hidden;+ text-overflow: ellipsis;+ white-space: nowrap;+ min-width: 0;+ }+ .toolbar .badge {+ font-size: 10px;+ padding: 2px 6px;+ border-radius: 4px;+ background: rgba(0, 184, 176, 0.12);+ color: #00b8b0;+ border: 1px solid rgba(0, 184, 176, 0.25);+ margin-left: 6px;+ }+ .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-wrap {+ flex: 1;+ overflow: hidden;+ position: relative;+ cursor: grab;+ background-color: #0d1117;+ background-image:+ linear-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px),+ linear-gradient(90deg, rgba(255, 255, 255, 0.03) 1px, transparent 1px);+ background-size: 20px 20px;+ }+ .canvas-wrap.dragging { cursor: grabbing; }+ .canvas-wrap.no-grid { background-image: none; }++ .canvas {+ position: absolute;+ transform-origin: 0 0;+ }+ .canvas svg { display: block; }++ .tooltip {+ display: none;+ position: fixed;+ background: #21262d;+ backdrop-filter: blur(12px);+ color: #e6edf3;+ padding: 10px 14px;+ border-radius: 8px;+ border: 1px solid rgba(0, 184, 176, 0.25);+ font-size: 12px;+ line-height: 1.6;+ pointer-events: none;+ z-index: 100;+ max-width: 280px;+ box-shadow: 0 8px 24px rgba(0,0,0,0.4);+ }+ .tooltip.visible { display: block; }+ .tooltip .tt-pad { font-weight: 700; font-size: 15px; color: #00e6dc; }+ .tooltip .tt-signal { color: #f0c040; font-size: 13px; margin-left: 6px; font-weight: 600; }+ .tooltip .tt-dims {+ display: inline-block;+ margin-top: 4px;+ padding: 2px 8px;+ border-radius: 4px;+ font-size: 11px;+ font-weight: 500;+ background: rgba(200,52,52,0.15);+ color: #C83434;+ border: 1px solid rgba(200,52,52,0.3);+ }+ .tooltip .tt-desc {+ margin-top: 6px;+ padding-top: 6px;+ border-top: 1px solid #21262d;+ color: #8b949e;+ font-size: 11px;+ line-height: 1.5;+ }+ .tooltip.sticky {+ pointer-events: auto;+ user-select: text;+ border-color: #00e6dc;+ }+ .tooltip .tt-hint {+ margin-top: 6px;+ font-size: 9px;+ color: #484f58;+ text-align: center;+ }+ .tooltip .tt-source {+ margin-top: 6px;+ padding-top: 4px;+ border-top: 1px solid #21262d;+ font-size: 9px;+ }+ .tooltip .tt-source-label { color: #8C6BF7; }+ .tooltip .tt-source a { color: #58a6ff; text-decoration: none; }+ .tooltip .tt-source a:hover { text-decoration: underline; }++ .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(140,107,247,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(140,107,247,0.12);+ border-color: rgba(140,107,247,0.4);+ color: #C5B3FF;+ }+ .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: #161b22;+ border: 1px solid #21262d;+ 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: #00b8b0;+ }+ .regen-modal .prompt-text {+ background: undefined;+ border: 1px solid #21262d;+ 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: #484f58;+ }+ .regen-modal .copy-status.copied { color: #00b8b0; }+ .regen-modal .modal-btns { display: flex; gap: 8px; }+ .regen-modal .modal-btns button {+ padding: 6px 14px;+ border-radius: 6px;+ border: 1px solid #21262d;+ background: #161b22;+ color: #8b949e;+ 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,184,176,0.12);+ border-color: rgba(0,184,176,0.3);+ color: #00b8b0;+ }+ .regen-modal .modal-btns .copy-btn:hover { background: rgba(0,184,176,0.22); }++ /* Pad highlight */+ .pad-highlight {+ stroke: #00b8b0 !important;+ stroke-width: 0.15 !important;+ fill-opacity: 0.6 !important;+ }++ .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>+<body>++<div class="toolbar">+ <span class="title">IN-S42ATA</span>+ <span class="badge">Footprint</span>+ <span class="badge" style="background:rgba(248,81,73,0.15);color:#f85149;border-color:rgba(248,81,73,0.3);">Local Render</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="toggleSolder()" id="solder-btn" class="active" title="250µm solder jet blobs for Adom InstaPCB paste jetting. Adom uses this placement data for its jetting sequence. Blob count, position, and size (250–600µm) are adjustable. Placement accuracy: ±50µm.">Solder</button>+ <button onclick="toggleLabels()" id="labels-btn">Labels</button>+ <div class="sep"></div>+ <button onclick="showRegenPrompt()" id="regen-btn" 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>+ </div>+ </div>+ </div>+</div>++<div class="canvas-wrap" id="canvas-wrap">+ <div class="canvas" id="canvas">+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10"><text x="5" y="5" text-anchor="middle" font-size="1" fill="#888">No geometry</text></svg>+ </div>+ <a class="edit-btn" href="https://coder.john-service-wiki-a054078430ce38e4.containers.adom.inc/proxy/8785/wiki/components/in-s42ata/edit?field=content" target="_blank" title="Suggest corrections on 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>++<div class="tooltip" id="tooltip"></div>++<div class="bottom-panel">+ <div class="info-row">+ <div class="info-item"><span class="info-label">Pads</span><span class="info-value">0</span></div>+ </div>+ <div class="info-divider"></div>+ <div class="coord-row">+ <span id="cursor-pos">X: 0.00 Y: 0.00 mm</span>+ </div>+</div>++<script>+ const pads = [];+ const svgW = 10;+ const svgH = 10;+ const svgVbX = 0;+ const svgVbY = 0;+ const offsetX = 0;+ const offsetY = 0;+ const datasheetUrl = "";+ const _partName = "";+ const _fpName = "IN-S42ATA";+ const _kicadModPath = "/home/adom/project/project-content/schematics/footprints/IN-S42ATA/IN-S42ATA.kicad_mod";++ 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;++ 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;+ if (ww === 0 || wh === 0) return; // iframe not laid out yet — ResizeObserver will retry+ const margin = 24;+ // Use getBBox() to fit to visible content only (excludes hidden labels)+ let fitW = svgPxW, fitH = svgPxH, fitX = 0, fitY = 0;+ if (svgEl) {+ try {+ const bb = svgEl.getBBox();+ if (bb.width > 0 && bb.height > 0) {+ fitW = bb.width * MM_TO_PX;+ fitH = bb.height * MM_TO_PX;+ fitX = (bb.x - svgVbX) * MM_TO_PX;+ fitY = (bb.y - svgVbY) * MM_TO_PX;+ }+ } catch {}+ }+ scale = Math.min((ww - margin * 2) / fitW, (wh - margin * 2) / fitH, 100);+ panX = (ww - fitW * scale) / 2 - fitX * scale;+ panY = (wh - fitH * scale) / 2 - fitY * scale;+ updateTransform();+ }++ 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, 40));+ 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);+ }++ // ── Solder blob jetting layer ──+ let solderVisible = true;+ let solderGroup = null;++ function setupSolderBlobs() {+ if (!svgEl) return;++ solderGroup = document.createElementNS('http://www.w3.org/2000/svg', 'g');+ solderGroup.setAttribute('id', 'solder-layer');+ solderGroup.style.display = '';+ solderGroup.style.pointerEvents = 'none';++ const BLOB_RADIUS = 0.125; // 250µm diameter / 2+ const BLOB_SPACING = 0.25; // center-to-center (blobs touching — fills the pad)++ pads.forEach(pad => {+ if (pad.mountType !== 'smd') return;++ const cx = pad.x + offsetX;+ const cy = pad.y + offsetY;+ const rot = (pad.rotation || 0) * Math.PI / 180;++ // Each axis computed independently: if pad is wide enough, grid; otherwise single centered blob+ const inset = BLOB_RADIUS; // blob edges align with pad edges — no overhang+ const availW = pad.width - 2 * inset;+ const availH = pad.height - 2 * inset;++ // At minimum 1 blob per axis — even narrow pads get a centered row/column+ const nCols = availW > 0 ? Math.max(1, Math.floor(availW / BLOB_SPACING) + 1) : 1;+ const nRows = availH > 0 ? Math.max(1, Math.floor(availH / BLOB_SPACING) + 1) : 1;+ const spanW = availW > 0 ? availW : 0;+ const spanH = availH > 0 ? availH : 0;+ const stepX = nCols > 1 ? spanW / (nCols - 1) : 0;+ const stepY = nRows > 1 ? spanH / (nRows - 1) : 0;+ const startX = -spanW / 2;+ const startY = -spanH / 2;+ const cosR = Math.cos(rot);+ const sinR = Math.sin(rot);++ for (let row = 0; row < nRows; row++) {+ for (let col = 0; col < nCols; col++) {+ const lx = startX + col * stepX;+ const ly = startY + row * stepY;+ const rx = lx * cosR - ly * sinR;+ const ry = lx * sinR + ly * cosR;++ const circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');+ circle.setAttribute('cx', (cx + rx).toFixed(4));+ circle.setAttribute('cy', (cy + ry).toFixed(4));+ circle.setAttribute('r', BLOB_RADIUS.toFixed(4));+ circle.setAttribute('fill', '#D4AA70');+ circle.setAttribute('fill-opacity', '0.75');+ circle.setAttribute('stroke', '#B8860B');+ circle.setAttribute('stroke-width', '0.015');+ solderGroup.appendChild(circle);+ }+ }+ });++ svgEl.appendChild(solderGroup);+ }++ function toggleSolder() {+ solderVisible = !solderVisible;+ if (solderGroup) solderGroup.style.display = solderVisible ? '' : 'none';+ document.getElementById('solder-btn').classList.toggle('active', solderVisible);+ }++ // ── Label visibility toggle ──+ let labelsVisible = false;+ let labelGroups = [];++ function setupLabelToggle() {+ if (!svgEl) return;+ // KiCad SVGs render labels as <g> containing <text> + <g class="stroked-text">+ // Find all <text> elements and collect their parent <g> groups+ svgEl.querySelectorAll('text').forEach(txt => {+ const parent = txt.parentElement;+ if (parent && parent.tagName === 'g' && !labelGroups.includes(parent)) {+ labelGroups.push(parent);+ parent.style.display = 'none'; // hidden by default+ }+ });+ }++ function toggleLabels() {+ labelsVisible = !labelsVisible;+ labelGroups.forEach(g => g.style.display = labelsVisible ? '' : 'none');+ document.getElementById('labels-btn').classList.toggle('active', labelsVisible);+ }++ // ── Regen prompt modal ──+ let _regenPrompt = '';+ function buildRegenPrompt() {+ const name = _partName || _fpName;+ const folder = _kicadModPath.replace(/\/[^/]+$/, '');+ return 'Regenerate the FpView for ' + name + '.\n\n'+ + 'Footprint: ' + _kicadModPath + '\n'+ + 'Metadata: ' + folder + '/\n\n'+ + 'Re-export the SVG via the KiCad service, regenerate the FpView HTML at the same path, '+ + 'and re-display it.';+ }+ 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');+ });+ }++ 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 });++ 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();+ // Convert screen coords to kicad_mod coords+ const svgX = (e.clientX - r.left - panX) / scale / MM_TO_PX;+ const svgY = (e.clientY - r.top - panY) / scale / MM_TO_PX;+ const kicadX = svgX - offsetX;+ const kicadY = svgY - offsetY;+ cursorPos.innerHTML = 'X: ' + kicadX.toFixed(2) + ' Y: ' + kicadY.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'); });++ // ── Pad hit zones ──+ let highlightedRects = [];+ let stickyPad = null;++ function setupPadHitZones() {+ if (!svgEl) return;+ pads.forEach(pad => {+ const cx = pad.x + offsetX;+ const cy = pad.y + offsetY;+ const rx = cx - pad.width / 2;+ const ry = cy - pad.height / 2;++ const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');+ rect.setAttribute('x', rx);+ rect.setAttribute('y', ry);+ rect.setAttribute('width', pad.width);+ rect.setAttribute('height', pad.height);+ rect.setAttribute('fill', 'transparent');+ rect.setAttribute('stroke', 'none');+ rect.setAttribute('data-pad', pad.number);+ rect.style.cursor = 'pointer';+ rect.style.pointerEvents = 'all';+ svgEl.appendChild(rect);++ rect.addEventListener('mouseenter', (ev) => showPadTooltip(ev.clientX, ev.clientY, pad, rect));+ rect.addEventListener('mousemove', (ev) => showPadTooltip(ev.clientX, ev.clientY, pad, rect));+ rect.addEventListener('mouseleave', () => hidePadTooltip(rect));+ rect.addEventListener('click', (ev) => { ev.stopPropagation(); handlePadClick(pad, rect); });+ });+ }++ function buildTooltipHtml(pad) {+ let html = '<div><span class="tt-pad">Pad ' + pad.number + '</span>';+ if (pad.signal) html += '<span class="tt-signal">' + pad.signal + '</span>';+ html += '</div>';+ html += '<div><span class="tt-dims">' + pad.width.toFixed(3) + ' × ' + pad.height.toFixed(3) + ' mm · ' + pad.shape + ' · ' + pad.mountType + '</span></div>';+ if (pad.desc) {+ html += '<div class="tt-desc">' + pad.desc + '</div>';+ }+ if (datasheetUrl) {+ html += '<div class="tt-source"><span class="tt-source-label">Source:</span> <a href="' + datasheetUrl + '" target="_blank">Datasheet</a></div>';+ }+ html += '<div class="tt-hint">click to pin · select text</div>';+ return html;+ }++ function positionTooltip(x, y) {+ // Render first to measure+ tooltip.style.left = '0px';+ tooltip.style.top = '0px';+ const ttRect = tooltip.getBoundingClientRect();+ const ttW = ttRect.width, ttH = ttRect.height;+ const pad = 14;+ let tx = x + 14, ty = y + 14;+ if (tx + ttW > window.innerWidth - pad) tx = x - ttW - 14;+ if (ty + ttH > window.innerHeight - pad) ty = y - ttH - 14;+ tx = Math.max(pad, Math.min(tx, window.innerWidth - ttW - pad));+ ty = Math.max(pad, Math.min(ty, window.innerHeight - ttH - pad));+ tooltip.style.left = tx + 'px';+ tooltip.style.top = ty + 'px';+ }++ function showPadTooltip(x, y, pad, rect) {+ if (stickyPad !== null) return; // suppress hover while sticky++ clearHighlight();+ rect.setAttribute('stroke', '#00b8b1');+ rect.setAttribute('stroke-width', '0.12');+ rect.setAttribute('fill', 'rgba(0,184,177,0.2)');+ highlightedRects.push(rect);++ tooltip.innerHTML = buildTooltipHtml(pad);+ tooltip.classList.add('visible');+ tooltip.classList.remove('sticky');+ positionTooltip(x, y);+ }++ function hidePadTooltip(rect) {+ if (stickyPad !== null) return; // don't hide while sticky+ tooltip.classList.remove('visible');+ clearHighlight();+ }++ function handlePadClick(pad, rect) {+ if (stickyPad === pad.number) {+ // Unpin+ stickyPad = null;+ tooltip.classList.remove('sticky', 'visible');+ clearHighlight();+ } else {+ // Pin this pad+ stickyPad = pad.number;+ clearHighlight();+ rect.setAttribute('stroke', '#00b8b1');+ rect.setAttribute('stroke-width', '0.12');+ rect.setAttribute('fill', 'rgba(0,184,177,0.2)');+ highlightedRects.push(rect);+ tooltip.innerHTML = buildTooltipHtml(pad);+ tooltip.classList.add('visible', 'sticky');+ // Remove hint when sticky+ const hint = tooltip.querySelector('.tt-hint');+ if (hint) hint.style.display = 'none';+ }+ }++ // Dismiss sticky tooltip on click outside+ document.addEventListener('click', (e) => {+ if (stickyPad !== null && !tooltip.contains(e.target)) {+ stickyPad = null;+ tooltip.classList.remove('sticky', 'visible');+ clearHighlight();+ }+ });++ function clearHighlight() {+ highlightedRects.forEach(r => {+ r.setAttribute('fill', 'transparent');+ r.setAttribute('stroke', 'none');+ });+ highlightedRects = [];+ }++ wrap.addEventListener('mouseleave', () => {+ if (stickyPad !== null) return;+ tooltip.classList.remove('visible');+ clearHighlight();+ });++ // Keyboard+ window.addEventListener('keydown', (e) => {+ if (e.key === 'Escape') closeRegenPrompt();+ else 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 === 's' || e.key === 'S') toggleSolder();+ else if (e.key === 'l' || e.key === 'L') toggleLabels();+ });++ // Screenshot capture via postMessage (parent viewer sends mgmt_capture_request)+ window.addEventListener('message', (e) => {+ if (e.data?.type === 'mgmt_capture_request' && svgEl) {+ const xml = new XMLSerializer().serializeToString(svgEl);+ parent.postMessage({+ type: 'mgmt_canvas_capture',+ _reqId: e.data._reqId,+ svgXml: xml,+ svgWidth: svgW,+ svgHeight: svgH,+ bgColor: 'undefined',+ }, '*');+ }+ });++ // Auto-fit on window/container resize+ new ResizeObserver(() => zoomFit()).observe(wrap);+ window.addEventListener('resize', () => requestAnimationFrame(zoomFit));++ // Init — set up layers then fit. Use multiple retries because srcdoc iframes+ // may not have layout dimensions during the first requestAnimationFrame.+ let inited = false;+ function init() {+ if (inited) return;+ setupLabelToggle();+ setupSolderBlobs();+ setupPadHitZones();+ inited = true;+ }+ function initAndFit() {+ init();+ zoomFit();+ }+ requestAnimationFrame(initAndFit);+ setTimeout(initAndFit, 100);+ setTimeout(initAndFit, 500);+</script>+</body>+</html>
IN-S42ATA-symview.htmladded+1292@@ -0,0 +1,1292 @@+<!DOCTYPE html>+<html lang="en">+<head>+<meta charset="UTF-8">+<meta name="viewport" content="width=device-width, initial-scale=1.0">+<title>IN-S42ATA</title>+<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>+<body>++<div class="toolbar">+ <span class="title">IN-S42ATA</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>+ </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/in-s42ata/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+ 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="10.5156mm" height="8.5598mm" viewBox="-3.6617 -1.0201 18.2200 10.6000">++<defs>+ <linearGradient id="adom-body-grad" x1="0" y1="0" x2="0" y2="1">+ <stop offset="0%" stop-color="#1a2332"/>+ <stop offset="100%" stop-color="#141c27"/>+ </linearGradient>+</defs>++<style>+ /* 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>++ <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)">+<path style="fill:none; +stroke:#4a5568; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 2.4003,5.0419+0.8763,6.5659+1.6383,6.5659+0.8763,6.5659+0.8763,5.8039+" /> +<path style="fill:none; +stroke:#4a5568; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 3.6703,5.0419+2.1463,6.5659+2.9083,6.5659+2.1463,6.5659+2.1463,5.8039+" /> +<path style="fill:none; +stroke:#4a5568; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 4.1783,4.2799+6.7183,4.2799+" /> +<path style="fill:none; +stroke:#4a5568; stroke-width:0.2540; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 4.1783,5.5499+4.1783,3.0099+" /> +<path style="fill:none; +stroke:#4a5568; stroke-width:0.2540; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 6.7183,5.5499+6.7183,3.0099+4.1783,4.2799+Z" /> +</g>+<g style="fill:none; +stroke:#4a5568; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M4.1783 4.2799+L1.6383 4.2799+" />+<path d="M6.7183 4.2799+L9.2583 4.2799+" />+</g>+<g style="fill:none; +stroke:#484f58; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">++<text x="5.4483" y="7.4549"+textLength="3.6503" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">LED</text>+<g class="stroked-text"><desc>LED</desc>+<path d="M4.6319 7.3994+L4.0271 7.3994+" />+<path d="M4.0271 7.3994+L4.0271 6.1294+" />+<path d="M5.0552 6.7342+L5.4786 6.7342+" />+<path d="M5.6600 7.3994+L5.0552 7.3994+" />+<path d="M5.0552 7.3994+L5.0552 6.1294+" />+<path d="M5.0552 6.1294+L5.6600 6.1294+" />+<path d="M6.2042 7.3994+L6.2042 6.1294+" />+<path d="M6.2042 6.1294+L6.5066 6.1294+" />+<path d="M6.5066 6.1294+L6.6880 6.1899+" />+<path d="M6.6880 6.1899+L6.8090 6.3109+" />+<path d="M6.8090 6.3109+L6.8695 6.4318+" />+<path d="M6.8695 6.4318+L6.9299 6.6737+" />+<path d="M6.9299 6.6737+L6.9299 6.8551+" />+<path d="M6.9299 6.8551+L6.8695 7.0970+" />+<path d="M6.8695 7.0970+L6.8090 7.2180+" />+<path d="M6.8090 7.2180+L6.6880 7.3390+" />+<path d="M6.6880 7.3390+L6.5066 7.3994+" />+<path d="M6.5066 7.3994+L6.2042 7.3994+" />+</g></g> +<text x="0.638" y="4.665" font-size="1.1" font-family="sans-serif" fill="#ffffff" text-anchor="end" class="pin-label">K</text>+<text x="1.638" y="5.530" font-size="0.75" font-family="sans-serif" fill="#8b949e" text-anchor="middle" class="pin-num-label">1</text>+<text x="10.258" y="4.665" font-size="1.1" font-family="sans-serif" fill="#ffffff" text-anchor="start" class="pin-label">A</text>+<text x="9.258" y="5.530" font-size="0.75" font-family="sans-serif" fill="#8b949e" text-anchor="middle" class="pin-num-label">2</text>+<rect x="-3.3617000000000004" y="-0.7201000000000004" width="17.62" height="10" 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">Light emitting diode</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>++<script>+ const pins = [{"name":"K","number":"1","type":"Passive","electricalType":"passive","color":"#78909c","desc":"","x":-3.81,"y":0,"angle":0,"length":2.54},{"name":"A","number":"2","type":"Passive","electricalType":"passive","color":"#78909c","desc":"","x":3.81,"y":0,"angle":180,"length":2.54}];+ const groups = [];+ const svgW = 18.22;+ const svgH = 10.6;+ const contentBounds = {"x":-3.3617000000000004,"y":-0.7201000000000004,"w":17.62,"h":10};+ const svgOffset = {"x":5.4483,"y":4.2799};+ const hidePinNames = true;+ const hidePinNumbers = true;+ const datasheetUrl = "~";+ const mfrName = "";+ const _symbolName = "IN-S42ATA";+ const _symPath = "/home/adom/project/project-content/schematics/symbols/IN-S42ATA/IN-S42ATA.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();+ }++ 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;+ }+ }+ }+ }+ }++ function highlightPin(pin) {+ 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);+ }++ function hideTooltip() {+ 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 }, '*');+ }+ }+ });+</script>+</body>+</html>
IN-S42ATA.htmladded+1323@@ -0,0 +1,1323 @@+<!DOCTYPE html>+<html lang="en">+<head>+<meta charset="UTF-8">+<meta name="viewport" content="width=device-width, initial-scale=1.0">+<title>IN-S42ATA — Component Characterization</title>+<style>+ @font-face { font-family: 'Familjen Grotesk'; src: url('https://adom.inc/fonts/familjen-grotesk/familjen-grotesk-latin-700-normal.woff2') format('woff2'); font-weight: 700; }+ @font-face { font-family: 'Familjen Grotesk'; src: url('https://adom.inc/fonts/familjen-grotesk/familjen-grotesk-latin-500-normal.woff2') format('woff2'); font-weight: 500; }+ @font-face { font-family: 'Satoshi'; src: url('https://adom.inc/fonts/satoshi/satoshi-400-normal.woff2') format('woff2'); font-weight: 400; }+ @font-face { font-family: 'Satoshi'; src: url('https://adom.inc/fonts/satoshi/satoshi-500-normal.woff2') format('woff2'); font-weight: 500; }+ @font-face { font-family: 'JetBrains Mono'; src: url('https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwhsk.woff2') format('woff2'); font-weight: 400; }++ :root {+ --bg: #0d1117; --surface: #161b22; --elevated: #1c2128; --border: #30363d; --border-muted: #21262d;+ --text: #e6edf3; --text-muted: #8b949e; --text-dim: #484f58;+ --accent: #00b8b0; --accent-bright: #00e6dc; --accent-dim: rgba(0,184,176,0.12); --accent-border: rgba(0,184,176,0.25);+ --green: #3fb950; --orange: #d29922; --red: #f85149; --purple: #8C6BF7; --blue: #58a6ff;+ --amber: #FF8C00; --amber-dim: rgba(255,140,0,0.12); --amber-border: rgba(255,140,0,0.35);+ }+ * { margin: 0; padding: 0; box-sizing: border-box; }+ body { font-family: 'Satoshi', sans-serif; background: var(--bg); color: var(--text); font-size: 13px; line-height: 1.6; overflow-y: auto; }+ h1,h2,h3 { font-family: 'Familjen Grotesk', sans-serif; font-weight: 700; }+ code { font-family: 'JetBrains Mono', monospace; font-size: 12px; }+ a { color: var(--accent); text-decoration: none; }+ a:hover { color: var(--accent-bright); text-decoration: underline; }++ .header { background: var(--surface); border-bottom: 1px solid var(--border-muted); padding: 20px 24px; }+ .header-top { display: flex; align-items: center; gap: 12px; margin-bottom: 4px; }+ .header .brand { color: var(--accent); font-family: 'Familjen Grotesk', sans-serif; font-size: 12px; font-weight: 600; }+ .header .vsep { width: 1px; height: 16px; background: var(--border); }+ .header .crumb { color: var(--text-dim); font-size: 12px; }+ .header h1 { font-size: 22px; margin-bottom: 2px; }+ .header h1 .val { color: var(--amber); }+ .header .subtitle { color: var(--text-muted); font-size: 13px; }+ .header .tags { display: flex; gap: 6px; margin-top: 10px; flex-wrap: wrap; }+ .tag { display: inline-flex; align-items: center; gap: 4px; padding: 3px 10px; border-radius: 12px; font-size: 11px; font-weight: 500; }+ .tag.pkg { background: rgba(0,184,176,0.12); color: var(--accent); }+ .tag.mfr { background: rgba(88,166,255,0.12); color: var(--blue); }+ .tag.series { background: rgba(140,107,247,0.12); color: var(--purple); }+ .tag.rohs { background: rgba(63,185,80,0.12); color: var(--green); }+ .tag.app { background: var(--amber-dim); color: var(--amber); }++ .container { max-width: 1100px; margin: 0 auto; padding: 24px; }+ .grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }+ .grid-3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px; }+ @media (max-width: 800px) { .grid-2, .grid-3 { grid-template-columns: 1fr; } }++ .section { margin-bottom: 28px; }+ .section-title { font-size: 14px; color: var(--text); margin-bottom: 12px; padding-bottom: 6px; border-bottom: 1px solid var(--border-muted); display: flex; align-items: center; gap: 8px; }+ .section-title .icon { color: var(--accent); font-size: 16px; }++ .card { background: var(--surface); border: 1px solid var(--border-muted); border-radius: 8px; padding: 16px; }+ .card:hover { border-color: var(--accent-border); }++ /* Key spec cards */+ .spec-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 10px; }+ .spec-card { background: var(--surface); border: 1px solid var(--border-muted); border-radius: 8px; padding: 12px 14px; text-align: center; }+ .spec-card .sc-label { font-size: 10px; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-dim); margin-bottom: 4px; }+ .spec-card .sc-value { font-size: 22px; font-weight: 700; font-family: 'Familjen Grotesk', sans-serif; }+ .spec-card .sc-detail { font-size: 11px; color: var(--text-muted); margin-top: 2px; }+ .spec-card.highlight { border-color: var(--amber-border); background: linear-gradient(180deg, rgba(255,140,0,0.06), var(--surface)); }+ .spec-card.highlight .sc-value { color: var(--amber); }++ /* Detail table */+ .detail-table { width: 100%; border-collapse: collapse; }+ .detail-table tr { border-bottom: 1px solid var(--border-muted); }+ .detail-table tr:last-child { border-bottom: none; }+ .detail-table td { padding: 8px 0; }+ .detail-table td:first-child { color: var(--text-muted); font-size: 12px; width: 45%; }+ .detail-table td:last-child { font-family: 'JetBrains Mono', monospace; font-size: 13px; text-align: right; }++ /* SVG charts */+ .chart-wrap { background: var(--surface); border: 1px solid var(--border-muted); border-radius: 8px; padding: 16px; }+ .chart-wrap h3 { font-size: 13px; color: var(--text); margin-bottom: 12px; }+ .chart-wrap .chart-note { font-size: 11px; color: var(--text-dim); margin-top: 8px; }+ svg text { font-family: 'JetBrains Mono', monospace; }++ /* Package drawing */+ .pkg-drawing { display: flex; align-items: center; justify-content: center; padding: 20px; }++ /* Environmental specs */+ .env-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }+ @media (max-width: 700px) { .env-grid { grid-template-columns: 1fr; } }+ .env-card { background: var(--surface); border: 1px solid var(--border-muted); border-radius: 8px; padding: 12px 14px; }+ .env-card .env-name { font-size: 12px; font-weight: 600; margin-bottom: 4px; }+ .env-card .env-spec { font-size: 11px; color: var(--text-muted); }+ .env-card .env-detail { font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--text); margin-top: 4px; }++ /* Vendor cards */+ .vendor-cards { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }+ @media (max-width: 700px) { .vendor-cards { grid-template-columns: 1fr; } }+ .vendor-card { background: var(--surface); border: 1px solid var(--border-muted); border-radius: 8px; padding: 14px; }+ .vendor-card .vc-name { font-size: 12px; font-weight: 600; margin-bottom: 6px; }+ .vendor-card .vc-name.mouser { color: var(--blue); }+ .vendor-card .vc-name.digikey { color: var(--red); }+ .vendor-card .vc-name.jlcpcb { color: var(--green); }+ .vendor-card .vc-price { font-size: 20px; font-weight: 700; font-family: 'Familjen Grotesk', sans-serif; }+ .vendor-card .vc-detail { font-size: 11px; color: var(--text-muted); margin-top: 4px; }+ .vendor-card .vc-link { display: inline-block; margin-top: 8px; font-size: 11px; color: var(--accent); }+ .vendor-card.recommended { border-color: var(--accent-border); }+ .vendor-card.recommended::before { content: 'RECOMMENDED'; display: block; font-size: 9px; letter-spacing: 1px; color: var(--accent); margin-bottom: 6px; font-weight: 600; }++ .copy-btn { background: none; border: 1px solid var(--border); color: var(--text-muted); border-radius: 4px; padding: 2px 6px; font-size: 13px; cursor: pointer; font-family: 'JetBrains Mono', monospace; vertical-align: middle; transition: border-color 0.15s, color 0.15s; }+ .copy-btn:hover { border-color: var(--accent); color: var(--accent); }++ .dl-btn { display: inline-block; margin-top: 10px; padding: 6px 14px; background: var(--accent-dim); border: 1px solid var(--accent-border); border-radius: 6px; color: var(--accent); font-size: 11px; font-weight: 500; font-family: 'Satoshi', sans-serif; text-decoration: none; transition: background 0.15s, border-color 0.15s; }+ .dl-btn:hover { background: rgba(0,184,176,0.2); border-color: var(--accent); text-decoration: none; color: var(--accent-bright); }++ .open-full-banner { display: flex; align-items: center; justify-content: center; padding: 12px 24px; background: linear-gradient(90deg, rgba(0,184,176,0.12), rgba(0,184,176,0.06)); border-bottom: 1px solid var(--accent-border); }+ .open-full-btn { display: inline-flex; align-items: center; gap: 8px; padding: 8px 20px; background: var(--accent); color: var(--bg); font-family: 'Familjen Grotesk', sans-serif; font-size: 13px; font-weight: 600; border-radius: 6px; text-decoration: none; transition: background 0.15s; cursor: pointer; border: none; }+ .open-full-btn:hover { background: var(--accent-bright); text-decoration: none; color: var(--bg); }++ .source { text-align: center; color: var(--text-dim); font-size: 11px; padding: 24px 0 12px; border-top: 1px solid var(--border-muted); margin-top: 20px; }++ /* Color swatch */+ .color-swatch { border-radius: 8px; padding: 20px; text-align: center; position: relative; overflow: hidden; }+ .color-swatch .swatch-block { width: 100%; height: 80px; border-radius: 6px; margin-bottom: 12px; position: relative; }+ .color-swatch .swatch-label { font-size: 14px; font-weight: 600; font-family: 'Familjen Grotesk', sans-serif; }+ .color-swatch .swatch-detail { font-size: 11px; color: var(--text-muted); margin-top: 4px; }++ /* Resistor calculator */+ .calc-card { background: var(--surface); border: 1px solid var(--amber-border); border-radius: 8px; padding: 20px; }+ .calc-card h3 { font-size: 14px; color: var(--amber); margin-bottom: 16px; font-family: 'Familjen Grotesk', sans-serif; }+ .calc-inputs { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 16px; }+ .calc-field label { display: block; font-size: 11px; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 4px; }+ .calc-field input { width: 100%; background: var(--bg); border: 1px solid var(--border); color: var(--text); border-radius: 6px; padding: 8px 12px; font-family: 'JetBrains Mono', monospace; font-size: 14px; outline: none; transition: border-color 0.15s; }+ .calc-field input:focus { border-color: var(--amber); }+ .calc-field .unit { font-size: 11px; color: var(--text-dim); margin-top: 2px; }+ .calc-results { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }+ .calc-result { background: var(--bg); border: 1px solid var(--border-muted); border-radius: 6px; padding: 10px 12px; }+ .calc-result .cr-label { font-size: 10px; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-dim); margin-bottom: 2px; }+ .calc-result .cr-value { font-size: 18px; font-weight: 700; font-family: 'Familjen Grotesk', sans-serif; color: var(--amber); }+ .calc-result .cr-detail { font-size: 11px; color: var(--text-muted); margin-top: 2px; }+ .calc-schematic { margin-top: 16px; text-align: center; }+</style>+</head>+<body>++<div class="open-full-banner" id="fullPageBanner" style="display:none">+ <span style="color:var(--text-muted);font-size:12px;margin-right:8px">Full page:</span>+ <code style="color:var(--accent);font-size:11px;background:var(--elevated);padding:4px 8px;border-radius:4px;user-select:all">https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/in-s42ata/IN-S42ATA.html</code>+ <button class="open-full-btn" id="copyFullUrl" style="margin-left:8px">Copy Link</button>+</div>+<script>+if(window.self!==window.top){document.getElementById('fullPageBanner').style.display='flex'}+document.getElementById('copyFullUrl').addEventListener('click',function(){var t=document.createElement('textarea');t.value='https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/in-s42ata/IN-S42ATA.html';document.body.appendChild(t);t.select();document.execCommand('copy');document.body.removeChild(t);this.textContent='Copied!';var b=this;setTimeout(function(){b.textContent='Copy Link'},1500)});+</script>++<div class="header">+ <div class="header-top">+ <div class="brand">Adom</div>+ <div class="vsep"></div>+ <div class="crumb">Components › LEDs › 0402</div>+ </div>+ <h1>IN-S42ATA — <span class="val">Amber</span></h1>+ <div class="subtitle">Inolux Corporation · Top View SMD LED · 0402 (1.0 × 0.5mm) · AlInGaP</div>+ <div class="tags">+ <span class="tag pkg">0402</span>+ <span class="tag mfr">Inolux</span>+ <span class="tag series">IN-S42AT</span>+ <span class="tag rohs">RoHS</span>+ <span class="tag app">Amber LED</span>+ </div>+</div>++<div class="container">++ <!-- Key Specs -->+ <div class="section">+ <div class="spec-cards">+ <div class="spec-card highlight">+ <div class="sc-label">Wavelength</div>+ <div class="sc-value">605nm</div>+ <div class="sc-detail">610nm peak</div>+ </div>+ <div class="spec-card">+ <div class="sc-label">Luminous Intensity</div>+ <div class="sc-value">145mcd</div>+ <div class="sc-detail">@ 20mA</div>+ </div>+ <div class="spec-card">+ <div class="sc-label">Forward Voltage</div>+ <div class="sc-value">2.1V</div>+ <div class="sc-detail">max 2.6V</div>+ </div>+ <div class="spec-card">+ <div class="sc-label">Forward Current</div>+ <div class="sc-value">25mA</div>+ <div class="sc-detail">20mA typical</div>+ </div>+ <div class="spec-card">+ <div class="sc-label">Viewing Angle</div>+ <div class="sc-value">130°</div>+ <div class="sc-detail">2θ½</div>+ </div>+ <div class="spec-card">+ <div class="sc-label">Mouser</div>+ <div class="sc-value">$0.26</div>+ <div class="sc-detail">7,587 in stock</div>+ </div>+ </div>+ </div>++ <div class="grid-2">+ <!-- Left column -->+ <div>+ <!-- Electrical Characteristics -->+ <div class="section">+ <h2 class="section-title">Electrical Characteristics</h2>+ <div class="card">+ <table class="detail-table">+ <tr><td>Forward Voltage (typ)</td><td>2.1V @ 20mA</td></tr>+ <tr><td>Forward Voltage (max)</td><td>2.6V @ 20mA</td></tr>+ <tr><td>Reverse Voltage (max)</td><td>5V</td></tr>+ <tr><td>Forward Current (max)</td><td>25mA</td></tr>+ <tr><td>Peak Forward Current</td><td>100mA (1/10, 0.1ms)</td></tr>+ <tr><td>Power Dissipation</td><td>78mW</td></tr>+ <tr><td>Dominant Wavelength</td><td>605nm</td></tr>+ <tr><td>Peak Wavelength</td><td>610nm</td></tr>+ <tr><td>Luminous Intensity</td><td>145 mcd @ 20mA</td></tr>+ <tr><td>Viewing Angle (2θ½)</td><td>130°</td></tr>+ <tr><td>Material</td><td>AlInGaP</td></tr>+ <tr><td>Lens Type</td><td>Clear</td></tr>+ </table>+ </div>+ </div>++ <!-- Operating Conditions -->+ <div class="section">+ <h2 class="section-title">Operating Conditions</h2>+ <div class="card">+ <table class="detail-table">+ <tr><td>Operating Temp</td><td>−30°C to +80°C</td></tr>+ <tr><td>Storage Temp</td><td>−40°C to +85°C</td></tr>+ <tr><td>ESD Sensitivity</td><td>AlInGaP — handle with care</td></tr>+ <tr><td>Polarity</td><td>Cathode marked on package</td></tr>+ </table>+ <div style="margin-top:10px;padding:8px 12px;background:rgba(248,81,73,0.08);border:1px solid rgba(248,81,73,0.2);border-radius:6px;font-size:11px;color:var(--red)">+ ⚠ ESD Sensitive Device — AlInGaP LEDs require proper ESD precautions during handling and assembly. Use grounded wrist straps and ESD-safe workstations.+ </div>+ </div>+ </div>+ </div>++ <!-- Right column -->+ <div>+ <!-- Package Drawing -->+ <div class="section">+ <h2 class="section-title">Package & Dimensions</h2>+ <div class="card">+ <div class="pkg-drawing">+ <svg width="100%" height="200" viewBox="0 0 500 200">+ <!-- Top view -->+ <text x="120" y="14" fill="#8b949e" font-size="10" text-anchor="middle">Top View</text>+ <!-- LED body -->+ <rect x="55" y="24" width="130" height="65" rx="2" fill="#1c2128" stroke="#30363d" stroke-width="1.5"/>+ <!-- Anode pad (left) -->+ <rect x="55" y="24" width="25" height="65" rx="1" fill="rgba(255,140,0,0.15)" stroke="#FF8C00" stroke-width="1"/>+ <!-- Cathode pad (right) with mark -->+ <rect x="160" y="24" width="25" height="65" rx="1" fill="rgba(255,140,0,0.15)" stroke="#FF8C00" stroke-width="1"/>+ <!-- Cathode mark (T-bar) -->+ <line x1="155" y1="28" x2="155" y2="85" stroke="#FF8C00" stroke-width="1.5" stroke-dasharray="3,2"/>+ <!-- Die representation -->+ <rect x="92" y="38" width="36" height="37" rx="1" fill="rgba(255,140,0,0.25)" stroke="rgba(255,140,0,0.5)" stroke-width="0.8"/>+ <!-- Bond wire -->+ <path d="M110,47 Q125,35 135,47" stroke="rgba(255,200,100,0.6)" stroke-width="0.6" fill="none"/>+ <!-- Cathode indicator -->+ <text x="168" y="18" fill="#FF8C00" font-size="9" text-anchor="middle">K (cathode)</text>+ <!-- Anode label -->+ <text x="68" y="18" fill="#8b949e" font-size="9" text-anchor="middle">A</text>++ <!-- Width dimension -->+ <line x1="55" y1="102" x2="185" y2="102" stroke="#484f58" stroke-width="0.5"/>+ <line x1="55" y1="98" x2="55" y2="106" stroke="#484f58" stroke-width="0.5"/>+ <line x1="185" y1="98" x2="185" y2="106" stroke="#484f58" stroke-width="0.5"/>+ <text x="120" y="118" fill="#e6edf3" font-size="10" text-anchor="middle">1.0 ± 0.1</text>++ <!-- Depth dimension -->+ <line x1="195" y1="24" x2="195" y2="89" stroke="#484f58" stroke-width="0.5"/>+ <line x1="191" y1="24" x2="199" y2="24" stroke="#484f58" stroke-width="0.5"/>+ <line x1="191" y1="89" x2="199" y2="89" stroke="#484f58" stroke-width="0.5"/>+ <text x="215" y="60" fill="#e6edf3" font-size="10">0.5 ± 0.1</text>++ <!-- Side view -->+ <text x="380" y="14" fill="#8b949e" font-size="10" text-anchor="middle">Side View</text>+ <!-- LED body side -->+ <rect x="315" y="40" width="130" height="38" rx="2" fill="#1c2128" stroke="#30363d" stroke-width="1.5"/>+ <!-- Lens (clear dome on top) -->+ <path d="M320,40 Q380,30 445,40" stroke="rgba(255,140,0,0.5)" stroke-width="1.5" fill="rgba(255,140,0,0.08)"/>+ <!-- Terminals -->+ <rect x="315" y="40" width="20" height="38" rx="1" fill="rgba(255,140,0,0.15)" stroke="#FF8C00" stroke-width="1"/>+ <rect x="425" y="40" width="20" height="38" rx="1" fill="rgba(255,140,0,0.15)" stroke="#FF8C00" stroke-width="1"/>+ <!-- Height dimension -->+ <line x1="455" y1="30" x2="455" y2="78" stroke="#484f58" stroke-width="0.5"/>+ <line x1="451" y1="30" x2="459" y2="30" stroke="#484f58" stroke-width="0.5"/>+ <line x1="451" y1="78" x2="459" y2="78" stroke="#484f58" stroke-width="0.5"/>+ <text x="465" y="58" fill="#e6edf3" font-size="10">0.45 ± 0.1</text>++ <!-- Physical specs -->+ <text x="120" y="145" fill="#8b949e" font-size="10" text-anchor="middle">0402 (1005 metric)</text>+ <text x="380" y="100" fill="#8b949e" font-size="10" text-anchor="middle">Clear lens · AlInGaP</text>++ <!-- Polarity note -->+ <rect x="55" y="158" width="390" height="28" rx="4" fill="rgba(255,140,0,0.06)" stroke="rgba(255,140,0,0.2)" stroke-width="0.5"/>+ <text x="250" y="176" fill="#FF8C00" font-size="10" text-anchor="middle">⚠ Polarized — cathode mark on package indicates negative terminal</text>+ </svg>+ </div>+ </div>+ </div>++ <!-- Land Pattern -->+ <div class="section">+ <h2 class="section-title">Recommended Land Pattern</h2>+ <div class="card">+ <table class="detail-table">+ <tr><td>Pad Width</td><td>0.4 ± 0.1mm</td></tr>+ <tr><td>Pad Height</td><td>0.6 ± 0.1mm</td></tr>+ <tr><td>Pad Spacing (center-to-center)</td><td>0.6 ± 0.1mm</td></tr>+ <tr><td>Polarity</td><td>Cathode marked on PCB</td></tr>+ </table>+ </div>+ </div>+ </div>+ </div>++ <!-- Color Swatch -->+ <div class="section">+ <h2 class="section-title">Emission Color</h2>+ <div class="card color-swatch">+ <div class="swatch-block" style="background: linear-gradient(135deg, #FF8C00, #FF6600); box-shadow: 0 4px 24px rgba(255,140,0,0.3); display:flex; align-items:center; justify-content:center;">+ <span style="font-size:28px;font-weight:700;font-family:'Familjen Grotesk',sans-serif;color:#fff;text-shadow:0 2px 8px rgba(0,0,0,0.5)">Amber</span>+ </div>+ <div class="swatch-label" style="color:var(--amber)">605nm Dominant Wavelength</div>+ <div class="swatch-detail">Peak wavelength 610nm · AlInGaP semiconductor · CSS approximation: #FF8C00</div>+ </div>+ </div>++ <!-- Chart 1: Spectral Distribution -->+ <div class="section">+ <h2 class="section-title">Spectral Distribution</h2>+ <div class="chart-wrap">+ <h3>Emission Spectrum — Relative Intensity vs. Wavelength</h3>+ <svg id="spectral-chart" width="100%" height="280" viewBox="0 0 700 280">+ <rect x="60" y="20" width="600" height="200" fill="#0d1117" rx="4"/>+ <!-- Grid -->+ <line x1="60" y1="220" x2="660" y2="220" stroke="#21262d" stroke-width="1"/>+ <line x1="60" y1="20" x2="60" y2="220" stroke="#21262d" stroke-width="1"/>+ <line x1="60" y1="170" x2="660" y2="170" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="60" y1="120" x2="660" y2="120" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="60" y1="70" x2="660" y2="70" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="60" y1="20" x2="660" y2="20" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <!-- Vertical grid -->+ <line x1="180" y1="20" x2="180" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="300" y1="20" x2="300" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="420" y1="20" x2="420" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="540" y1="20" x2="540" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>++ <!-- Spectral curve (Gaussian-like, peak at 605nm) -->+ <!-- x scale: 500nm=60, 700nm=660, so 1nm = 3px -->+ <!-- y scale: 0%=220, 100%=20, so 1% = 2px -->+ <!-- Fill area under curve -->+ <path d="M60,220 L60,220 Q120,220 180,219 Q240,218 285,210 Q300,205 315,190 Q330,160 345,120 Q352,90 358,50 Q363,28 369,22 Q375,28 381,50 Q387,90 394,120 Q408,160 423,190 Q438,205 453,210 Q498,218 540,219 Q600,220 660,220 Z"+ fill="url(#amberGrad)" opacity="0.3"/>+ <defs>+ <linearGradient id="amberGrad" x1="0" y1="0" x2="0" y2="1">+ <stop offset="0%" stop-color="#FF8C00" stop-opacity="0.6"/>+ <stop offset="100%" stop-color="#FF8C00" stop-opacity="0.05"/>+ </linearGradient>+ </defs>+ <!-- Spectral curve line -->+ <path d="M60,220 Q120,220 180,219 Q240,218 285,210 Q300,205 315,190 Q330,160 345,120 Q352,90 358,50 Q363,28 369,22 Q375,28 381,50 Q387,90 394,120 Q408,160 423,190 Q438,205 453,210 Q498,218 540,219 Q600,220 660,220"+ stroke="#FF8C00" stroke-width="2.5" fill="none"/>++ <!-- Peak annotation -->+ <circle cx="369" cy="22" r="4" fill="#FF8C00" opacity="0.9"/>+ <line x1="369" y1="22" x2="369" y2="220" stroke="#FF8C00" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.4"/>+ <text x="369" y="238" fill="#FF8C00" font-size="10" text-anchor="middle">605nm</text>++ <!-- FWHM indicator -->+ <line x1="345" y1="120" x2="394" y2="120" stroke="#FF8C00" stroke-width="1" stroke-dasharray="4,2" opacity="0.6"/>+ <text x="420" y="116" fill="#8b949e" font-size="9">FWHM ~20nm</text>++ <!-- Y axis labels -->+ <text x="55" y="224" fill="#484f58" font-size="9" text-anchor="end">0%</text>+ <text x="55" y="174" fill="#484f58" font-size="9" text-anchor="end">25%</text>+ <text x="55" y="124" fill="#484f58" font-size="9" text-anchor="end">50%</text>+ <text x="55" y="74" fill="#484f58" font-size="9" text-anchor="end">75%</text>+ <text x="55" y="24" fill="#484f58" font-size="9" text-anchor="end">100%</text>+ <text x="12" y="124" fill="#484f58" font-size="9" text-anchor="middle" transform="rotate(-90,12,124)">Relative Intensity</text>++ <!-- X axis labels -->+ <text x="60" y="255" fill="#484f58" font-size="9" text-anchor="middle">500</text>+ <text x="180" y="255" fill="#484f58" font-size="9" text-anchor="middle">540</text>+ <text x="300" y="255" fill="#484f58" font-size="9" text-anchor="middle">580</text>+ <text x="420" y="255" fill="#484f58" font-size="9" text-anchor="middle">620</text>+ <text x="540" y="255" fill="#484f58" font-size="9" text-anchor="middle">660</text>+ <text x="660" y="255" fill="#484f58" font-size="9" text-anchor="middle">700</text>+ <text x="360" y="272" fill="#484f58" font-size="9" text-anchor="middle">Wavelength (nm)</text>+ </svg>+ <div class="chart-note">Amber emission centered at 605nm dominant wavelength (610nm peak). The narrow spectral width (~20nm FWHM) indicates a well-defined color output typical of AlInGaP LEDs.</div>+ </div>+ </div>++ <!-- Chart 2: IV Curve -->+ <div class="section">+ <h2 class="section-title">Forward Current vs. Forward Voltage</h2>+ <div class="chart-wrap">+ <h3>IV Characteristic — the essential curve for circuit design</h3>+ <svg id="iv-chart" width="100%" height="280" viewBox="0 0 700 280">+ <rect x="60" y="20" width="600" height="200" fill="#0d1117" rx="4"/>+ <!-- Grid -->+ <line x1="60" y1="220" x2="660" y2="220" stroke="#21262d" stroke-width="1"/>+ <line x1="60" y1="20" x2="60" y2="220" stroke="#21262d" stroke-width="1"/>+ <line x1="60" y1="170" x2="660" y2="170" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="60" y1="120" x2="660" y2="120" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="60" y1="70" x2="660" y2="70" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="60" y1="20" x2="660" y2="20" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <!-- Vertical grid -->+ <line x1="231" y1="20" x2="231" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="403" y1="20" x2="403" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="574" y1="20" x2="574" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>++ <!-- IV curve (exponential characteristic) -->+ <path d="M60,220 L231,220 Q300,219 345,218 Q380,216 403,210 Q425,198 440,180 Q455,155 470,120 Q485,85 500,55 Q515,30 530,20"+ stroke="#FF8C00" stroke-width="2.5" fill="none"/>++ <!-- Fill under curve -->+ <path d="M60,220 L231,220 Q300,219 345,218 Q380,216 403,210 Q425,198 440,180 Q455,155 470,120 Q485,85 500,55 Q515,30 530,20 L530,220 Z"+ fill="url(#amberGrad)" opacity="0.15"/>++ <!-- Operating point marker: 2.1V, 20mA -->+ <circle cx="440" cy="140" r="5" fill="#FF8C00" opacity="0.9"/>+ <line x1="440" y1="140" x2="440" y2="220" stroke="#FF8C00" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.5"/>+ <line x1="60" y1="140" x2="440" y2="140" stroke="#FF8C00" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.5"/>+ <rect x="445" y="126" width="100" height="28" rx="4" fill="rgba(255,140,0,0.12)"/>+ <text x="495" y="140" fill="#FF8C00" font-size="10" text-anchor="middle">Typ: 2.1V, 20mA</text>+ <text x="495" y="150" fill="#8b949e" font-size="8" text-anchor="middle">Operating point</text>++ <!-- Max Vf line -->+ <line x1="489" y1="20" x2="489" y2="220" stroke="#f85149" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.5"/>+ <text x="489" y="248" fill="#f85149" font-size="9" text-anchor="middle">2.6V max</text>++ <!-- Max If line -->+ <line x1="60" y1="120" x2="660" y2="120" stroke="#f85149" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.3"/>+ <text x="100" y="114" fill="#f85149" font-size="9">25mA max</text>++ <!-- Y axis labels -->+ <text x="55" y="224" fill="#484f58" font-size="9" text-anchor="end">0</text>+ <text x="55" y="174" fill="#484f58" font-size="9" text-anchor="end">12.5</text>+ <text x="55" y="124" fill="#484f58" font-size="9" text-anchor="end">25</text>+ <text x="55" y="74" fill="#484f58" font-size="9" text-anchor="end">37.5</text>+ <text x="55" y="24" fill="#484f58" font-size="9" text-anchor="end">50</text>+ <text x="12" y="124" fill="#484f58" font-size="9" text-anchor="middle" transform="rotate(-90,12,124)">Forward Current (mA)</text>++ <!-- X axis labels -->+ <text x="60" y="255" fill="#484f58" font-size="9" text-anchor="middle">0</text>+ <text x="231" y="255" fill="#484f58" font-size="9" text-anchor="middle">1.0</text>+ <text x="403" y="255" fill="#484f58" font-size="9" text-anchor="middle">2.0</text>+ <text x="574" y="255" fill="#484f58" font-size="9" text-anchor="middle">3.0</text>+ <text x="360" y="272" fill="#484f58" font-size="9" text-anchor="middle">Forward Voltage (V)</text>+ </svg>+ <div class="chart-note">Characteristic exponential IV curve for an AlInGaP amber LED. Near-zero current until threshold (~1.8V), then steep rise. Design point: 2.1V typical at 20mA. Never exceed 2.6V forward or 25mA continuous.</div>+ </div>+ </div>++ <!-- Chart 3: Current Derating -->+ <div class="section">+ <h2 class="section-title">Forward Current Derating</h2>+ <div class="chart-wrap">+ <h3>Maximum Forward Current vs. Ambient Temperature</h3>+ <svg id="derating-chart" width="100%" height="280" viewBox="0 0 700 280">+ <rect x="60" y="20" width="600" height="200" fill="#0d1117" rx="4"/>+ <!-- Grid -->+ <line x1="60" y1="220" x2="660" y2="220" stroke="#21262d" stroke-width="1"/>+ <line x1="60" y1="20" x2="60" y2="220" stroke="#21262d" stroke-width="1"/>+ <line x1="60" y1="170" x2="660" y2="170" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="60" y1="120" x2="660" y2="120" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="60" y1="70" x2="660" y2="70" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <!-- Vertical grid -->+ <line x1="180" y1="20" x2="180" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="300" y1="20" x2="300" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="420" y1="20" x2="420" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="540" y1="20" x2="540" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>++ <!-- Derating curve: linear from ~30mA at 25C to ~5mA at 80C -->+ <!-- x scale: 0C=60, 100C=660, so 1C = 6px -->+ <!-- y scale: 0mA=220, 30mA=20, so 1mA ~= 6.67px -->+ <!-- 25C -> x=210, 30mA -> y=20 -->+ <!-- 80C -> x=540, 5mA -> y=187 -->+ <path d="M210,20 L540,187" stroke="#FF8C00" stroke-width="2.5" fill="none"/>+ <!-- Extend flat at left -->+ <path d="M60,20 L210,20" stroke="#FF8C00" stroke-width="2.5" fill="none"/>+ <!-- Extend to zero at right (extrapolate to ~84C) -->+ <path d="M540,187 L565,220" stroke="#FF8C00" stroke-width="2.5" fill="none" stroke-dasharray="4,3"/>++ <!-- Fill under curve -->+ <path d="M60,20 L210,20 L540,187 L565,220 L60,220 Z" fill="url(#amberGrad)" opacity="0.12"/>++ <!-- 25C marker -->+ <circle cx="210" cy="20" r="4" fill="#FF8C00" opacity="0.9"/>+ <text x="210" y="40" fill="#FF8C00" font-size="10" text-anchor="middle">30mA @ 25°C</text>++ <!-- 80C marker -->+ <circle cx="540" cy="187" r="4" fill="#FF8C00" opacity="0.9"/>+ <text x="540" y="178" fill="#FF8C00" font-size="10" text-anchor="middle">5mA @ 80°C</text>++ <!-- Safe region label -->+ <rect x="200" y="100" width="110" height="20" rx="4" fill="rgba(63,185,80,0.12)"/>+ <text x="255" y="114" fill="#3fb950" font-size="10" text-anchor="middle">Safe operating</text>++ <!-- Y axis labels -->+ <text x="55" y="224" fill="#484f58" font-size="9" text-anchor="end">0</text>+ <text x="55" y="174" fill="#484f58" font-size="9" text-anchor="end">7.5</text>+ <text x="55" y="124" fill="#484f58" font-size="9" text-anchor="end">15</text>+ <text x="55" y="74" fill="#484f58" font-size="9" text-anchor="end">22.5</text>+ <text x="55" y="24" fill="#484f58" font-size="9" text-anchor="end">30</text>+ <text x="12" y="124" fill="#484f58" font-size="9" text-anchor="middle" transform="rotate(-90,12,124)">Max If (mA)</text>++ <!-- X axis labels -->+ <text x="60" y="255" fill="#484f58" font-size="9" text-anchor="middle">0</text>+ <text x="210" y="255" fill="#484f58" font-size="9" text-anchor="middle">25</text>+ <text x="360" y="255" fill="#484f58" font-size="9" text-anchor="middle">50</text>+ <text x="540" y="255" fill="#484f58" font-size="9" text-anchor="middle">80</text>+ <text x="660" y="255" fill="#484f58" font-size="9" text-anchor="middle">100</text>+ <text x="360" y="272" fill="#484f58" font-size="9" text-anchor="middle">Ambient Temperature (°C)</text>+ </svg>+ <div class="chart-note">Maximum allowable forward current decreases linearly with temperature. At 80°C ambient, derate to only 5mA. Design margin is critical in enclosed or high-temperature applications.</div>+ </div>+ </div>++ <!-- Chart 4: Relative Luminous Intensity vs Current -->+ <div class="section">+ <h2 class="section-title">Luminous Intensity vs. Forward Current</h2>+ <div class="chart-wrap">+ <h3>Relative Brightness (normalized at 20mA)</h3>+ <svg id="brightness-current-chart" width="100%" height="280" viewBox="0 0 700 280">+ <rect x="60" y="20" width="600" height="200" fill="#0d1117" rx="4"/>+ <!-- Grid -->+ <line x1="60" y1="220" x2="660" y2="220" stroke="#21262d" stroke-width="1"/>+ <line x1="60" y1="20" x2="60" y2="220" stroke="#21262d" stroke-width="1"/>+ <line x1="60" y1="170" x2="660" y2="170" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="60" y1="120" x2="660" y2="120" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="60" y1="70" x2="660" y2="70" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <!-- Vertical grid -->+ <line x1="180" y1="20" x2="180" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="300" y1="20" x2="300" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="420" y1="20" x2="420" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="540" y1="20" x2="540" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>++ <!-- Brightness vs current curve (sublinear / sqrt-like) -->+ <!-- x: 0mA=60, 50mA=660 => 12px/mA -->+ <!-- y: 0=220, 2.0=20 => 100px per 1.0 -->+ <!-- Points: 0mA=0, 5mA=0.4, 10mA=0.65, 15mA=0.85, 20mA=1.0, 25mA=1.12, 30mA=1.25, 40mA=1.55, 50mA=1.8 -->+ <path d="M60,220 Q120,168 180,155 Q240,135 300,120 Q360,106 420,95 Q480,78 540,64 Q600,52 660,40"+ stroke="#FF8C00" stroke-width="2.5" fill="none"/>++ <!-- Linear reference line (dashed) -->+ <path d="M60,220 L660,20" stroke="#484f58" stroke-width="1" stroke-dasharray="5,4" opacity="0.4"/>+ <text x="600" y="50" fill="#484f58" font-size="9">Linear</text>++ <!-- 1.0 reference at 20mA -->+ <circle cx="300" cy="120" r="5" fill="#FF8C00" opacity="0.9"/>+ <line x1="60" y1="120" x2="300" y2="120" stroke="#FF8C00" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.4"/>+ <line x1="300" y1="120" x2="300" y2="220" stroke="#FF8C00" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.4"/>+ <text x="310" y="114" fill="#FF8C00" font-size="10">1.0 @ 20mA</text>++ <!-- Y axis labels -->+ <text x="55" y="224" fill="#484f58" font-size="9" text-anchor="end">0</text>+ <text x="55" y="174" fill="#484f58" font-size="9" text-anchor="end">0.5</text>+ <text x="55" y="124" fill="#484f58" font-size="9" text-anchor="end">1.0</text>+ <text x="55" y="74" fill="#484f58" font-size="9" text-anchor="end">1.5</text>+ <text x="55" y="24" fill="#484f58" font-size="9" text-anchor="end">2.0</text>+ <text x="12" y="124" fill="#484f58" font-size="9" text-anchor="middle" transform="rotate(-90,12,124)">Relative Brightness</text>++ <!-- X axis labels -->+ <text x="60" y="255" fill="#484f58" font-size="9" text-anchor="middle">0</text>+ <text x="180" y="255" fill="#484f58" font-size="9" text-anchor="middle">10</text>+ <text x="300" y="255" fill="#484f58" font-size="9" text-anchor="middle">20</text>+ <text x="420" y="255" fill="#484f58" font-size="9" text-anchor="middle">30</text>+ <text x="540" y="255" fill="#484f58" font-size="9" text-anchor="middle">40</text>+ <text x="660" y="255" fill="#484f58" font-size="9" text-anchor="middle">50</text>+ <text x="360" y="272" fill="#484f58" font-size="9" text-anchor="middle">Forward Current (mA)</text>+ </svg>+ <div class="chart-note">Brightness increases sublinearly with current. Doubling the current from 20mA to 40mA yields only ~55% more light, not 100%. This means diminishing returns at higher drive currents — optimize for efficiency at or below 20mA.</div>+ </div>+ </div>++ <!-- Chart 5: Brightness vs Temperature -->+ <div class="section">+ <h2 class="section-title">Luminous Intensity vs. Temperature</h2>+ <div class="chart-wrap">+ <h3>Relative Brightness vs. Ambient Temperature (normalized at 25°C)</h3>+ <svg id="brightness-temp-chart" width="100%" height="280" viewBox="0 0 700 280">+ <rect x="60" y="20" width="600" height="200" fill="#0d1117" rx="4"/>+ <!-- Grid -->+ <line x1="60" y1="220" x2="660" y2="220" stroke="#21262d" stroke-width="1"/>+ <line x1="60" y1="20" x2="60" y2="220" stroke="#21262d" stroke-width="1"/>+ <line x1="60" y1="170" x2="660" y2="170" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="60" y1="120" x2="660" y2="120" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="60" y1="70" x2="660" y2="70" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <!-- Vertical grid -->+ <line x1="180" y1="20" x2="180" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="300" y1="20" x2="300" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="420" y1="20" x2="420" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+ <line x1="540" y1="20" x2="540" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>++ <!-- Temperature range: -30C to +70C mapped to x: 60..660 => 6px/C -->+ <!-- Brightness range: 0..2.0 mapped to y: 220..20 => 100px per 1.0 -->+ <!-- Points: -30C=1.5, -10C=1.3, 0C=1.2, 10C=1.1, 25C=1.0, 40C=0.88, 50C=0.8, 60C=0.75, 70C=0.7 -->+ <!-- -30C: x=60, y=70 | 25C: x=390, y=120 | 70C: x=660, y=150 -->+ <path d="M60,70 L180,95 L240,105 L300,112 L390,120 L480,134 L540,142 L600,148 L660,150"+ stroke="#FF8C00" stroke-width="2.5" fill="none"/>++ <!-- 1.0 reference at 25C -->+ <circle cx="390" cy="120" r="5" fill="#FF8C00" opacity="0.9"/>+ <line x1="60" y1="120" x2="390" y2="120" stroke="#FF8C00" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.4"/>+ <line x1="390" y1="120" x2="390" y2="220" stroke="#FF8C00" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.4"/>+ <text x="400" y="114" fill="#FF8C00" font-size="10">1.0 @ 25°C</text>++ <!-- Cold note -->+ <text x="100" y="62" fill="#58a6ff" font-size="9">Brighter when cold</text>+ <!-- Hot note -->+ <text x="570" y="165" fill="#f85149" font-size="9">Dimmer when hot</text>++ <!-- Y axis labels -->+ <text x="55" y="224" fill="#484f58" font-size="9" text-anchor="end">0</text>+ <text x="55" y="174" fill="#484f58" font-size="9" text-anchor="end">0.5</text>+ <text x="55" y="124" fill="#484f58" font-size="9" text-anchor="end">1.0</text>+ <text x="55" y="74" fill="#484f58" font-size="9" text-anchor="end">1.5</text>+ <text x="55" y="24" fill="#484f58" font-size="9" text-anchor="end">2.0</text>+ <text x="12" y="124" fill="#484f58" font-size="9" text-anchor="middle" transform="rotate(-90,12,124)">Relative Brightness</text>++ <!-- X axis labels -->+ <text x="60" y="255" fill="#484f58" font-size="9" text-anchor="middle">-30</text>+ <text x="180" y="255" fill="#484f58" font-size="9" text-anchor="middle">-10</text>+ <text x="300" y="255" fill="#484f58" font-size="9" text-anchor="middle">10</text>+ <text x="390" y="255" fill="#484f58" font-size="9" text-anchor="middle">25</text>+ <text x="540" y="255" fill="#484f58" font-size="9" text-anchor="middle">50</text>+ <text x="660" y="255" fill="#484f58" font-size="9" text-anchor="middle">70</text>+ <text x="360" y="272" fill="#484f58" font-size="9" text-anchor="middle">Ambient Temperature (°C)</text>+ </svg>+ <div class="chart-note">AlInGaP LEDs lose brightness at elevated temperatures. At 70°C, expect ~30% reduction in luminous intensity. Conversely, the LED is ~50% brighter at -30°C. Account for this in designs with wide temperature swings.</div>+ </div>+ </div>++ <!-- Resistor Calculator -->+ <div class="section">+ <h2 class="section-title">LED Resistor Calculator</h2>+ <div class="calc-card">+ <h3>⚡ Series Resistor Selection</h3>+ <div class="calc-inputs">+ <div class="calc-field">+ <label>Supply Voltage</label>+ <input type="number" id="calc-vsupply" value="3.3" step="0.1" min="0">+ <div class="unit">Volts</div>+ </div>+ <div class="calc-field">+ <label>Desired Current</label>+ <input type="number" id="calc-iled" value="20" step="1" min="0">+ <div class="unit">Milliamps</div>+ </div>+ </div>+ <div class="calc-results">+ <div class="calc-result">+ <div class="cr-label">Calculated Resistor</div>+ <div class="cr-value" id="calc-r-exact">60.0 Ω</div>+ <div class="cr-detail" id="calc-r-formula">R = (3.3V - 2.1V) / 20mA</div>+ </div>+ <div class="calc-result">+ <div class="cr-label">Nearest E24 Value</div>+ <div class="cr-value" id="calc-r-e24">62 Ω</div>+ <div class="cr-detail" id="calc-r-actual">Actual If = 19.4mA</div>+ </div>+ <div class="calc-result">+ <div class="cr-label">Resistor Power</div>+ <div class="cr-value" id="calc-p-resistor">24.0 mW</div>+ <div class="cr-detail" id="calc-p-r-detail">P = (V<sub>supply</sub> - V<sub>f</sub>) × I<sub>f</sub></div>+ </div>+ <div class="calc-result">+ <div class="cr-label">LED Power</div>+ <div class="cr-value" id="calc-p-led">42.0 mW</div>+ <div class="cr-detail" id="calc-p-led-detail">P = V<sub>f</sub> × I<sub>f</sub> (max 78mW)</div>+ </div>+ </div>+ <div class="calc-schematic">+ <svg width="400" height="80" viewBox="0 0 400 80" style="max-width:100%">+ <!-- Supply -->+ <text x="20" y="38" fill="#e6edf3" font-size="11" font-family="JetBrains Mono,monospace" id="calc-svg-vsupply">3.3V</text>+ <!-- Line from supply -->+ <line x1="50" y1="35" x2="90" y2="35" stroke="#e6edf3" stroke-width="1.5"/>+ <!-- Resistor symbol -->+ <path d="M90,35 L100,25 L110,45 L120,25 L130,45 L140,25 L150,45 L160,35" stroke="#00b8b0" stroke-width="2" fill="none"/>+ <text x="125" y="60" fill="#00b8b0" font-size="10" text-anchor="middle" font-family="JetBrains Mono,monospace" id="calc-svg-r">62Ω</text>+ <!-- Line to LED -->+ <line x1="160" y1="35" x2="210" y2="35" stroke="#e6edf3" stroke-width="1.5"/>+ <!-- LED symbol (triangle + bar) -->+ <polygon points="210,22 210,48 240,35" fill="none" stroke="#FF8C00" stroke-width="2"/>+ <line x1="240" y1="22" x2="240" y2="48" stroke="#FF8C00" stroke-width="2"/>+ <!-- Light arrows -->+ <line x1="230" y1="18" x2="238" y2="10" stroke="#FF8C00" stroke-width="1"/>+ <line x1="235" y1="22" x2="243" y2="14" stroke="#FF8C00" stroke-width="1"/>+ <polygon points="238,10 234,13 237,14" fill="#FF8C00"/>+ <polygon points="243,14 239,17 242,18" fill="#FF8C00"/>+ <text x="225" y="65" fill="#FF8C00" font-size="10" text-anchor="middle" font-family="JetBrains Mono,monospace">LED</text>+ <!-- Line to ground -->+ <line x1="240" y1="35" x2="300" y2="35" stroke="#e6edf3" stroke-width="1.5"/>+ <!-- Ground symbol -->+ <line x1="300" y1="28" x2="300" y2="42" stroke="#e6edf3" stroke-width="1.5"/>+ <line x1="290" y1="42" x2="310" y2="42" stroke="#e6edf3" stroke-width="1.5"/>+ <line x1="294" y1="47" x2="306" y2="47" stroke="#e6edf3" stroke-width="1.2"/>+ <line x1="297" y1="52" x2="303" y2="52" stroke="#e6edf3" stroke-width="0.8"/>+ <text x="320" y="42" fill="#8b949e" font-size="10" font-family="JetBrains Mono,monospace">GND</text>+ <!-- Current arrow -->+ <text x="180" y="26" fill="#8b949e" font-size="9" text-anchor="middle" font-family="JetBrains Mono,monospace" id="calc-svg-if">20mA</text>+ <line x1="168" y1="30" x2="192" y2="30" stroke="#8b949e" stroke-width="0.5"/>+ <polygon points="192,30 187,27 187,33" fill="#8b949e"/>+ </svg>+ </div>+ </div>+ </div>++ <!-- Environmental -->+ <div class="section">+ <h2 class="section-title">Environmental & Handling</h2>+ <div class="env-grid">+ <div class="env-card">+ <div class="env-name">ESD Sensitivity</div>+ <div class="env-spec">AlInGaP — ESD precautions required</div>+ <div class="env-detail">Use grounded wrist straps & ESD-safe tools</div>+ </div>+ <div class="env-card">+ <div class="env-name">Operating Temperature</div>+ <div class="env-spec">Continuous operation range</div>+ <div class="env-detail">−30°C to +80°C</div>+ </div>+ <div class="env-card">+ <div class="env-name">Storage Temperature</div>+ <div class="env-spec">Unbiased storage</div>+ <div class="env-detail">−40°C to +85°C</div>+ </div>+ <div class="env-card">+ <div class="env-name">Moisture Sensitivity</div>+ <div class="env-spec">MSL noted in packaging</div>+ <div class="env-detail">Follow J-STD-020 bake requirements</div>+ </div>+ </div>+ </div>++ <!-- Symbol, Footprint & 3D View -->+ <div class="section">+ <h2 class="section-title">Symbol, Footprint & 3D Model</h2>+ <div class="grid-2" style="margin-bottom:12px">+ <!-- Interactive SymView -->+ <div class="card" style="padding:0;overflow:hidden">+ <div style="font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:0.5px;color:var(--text-dim);padding:12px 16px 0">Schematic Symbol</div>+ <iframe src="IN-S42ATA-symview.html" style="width:100%;height:340px;border:none;display:block" allow="fullscreen"></iframe>+ </div>+ <!-- Interactive FpView -->+ <div class="card" style="padding:0;overflow:hidden">+ <div style="font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:0.5px;color:var(--text-dim);padding:12px 16px 0">Footprint (0402)</div>+ <iframe src="IN-S42ATA-fpview.html" style="width:100%;height:340px;border:none;display:block" allow="fullscreen"></iframe>+ </div>+ </div>+ <!-- 3D Model -->+ <div class="card" style="text-align:center;margin-bottom:12px">+ <div style="font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:0.5px;color:var(--text-dim);margin-bottom:12px">3D Model (interactive)</div>+ <canvas id="viewer3d" width="600" height="300" style="width:100%;height:300px;border-radius:4px;cursor:grab"></canvas>+ <div style="font-size:10px;color:var(--text-dim);margin-top:6px">Click & drag to rotate · Scroll to zoom</div>+ </div>+ <!-- Download / Export Bar -->+ <div class="card" style="display:flex;align-items:center;gap:10px;flex-wrap:wrap">+ <span style="font-size:11px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.5px">Export:</span>+ <a class="dl-btn" href="https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/in-s42ata/IN-S42ATA.kicad_sym" download>KiCad Symbol (.kicad_sym)</a>+ <a class="dl-btn" href="https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/in-s42ata/IN-S42ATA.kicad_mod" download>KiCad Footprint (.kicad_mod)</a>+ <a class="dl-btn" href="https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/in-s42ata/IN-S42ATA.lbr" download>Fusion 360 (.lbr)</a>+ <a class="dl-btn" href="https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/in-s42ata/IN-S42ATA.step" download>3D Model (.step)</a>+ </div>+ </div>++ <!-- Pricing & Availability -->+ <div class="section">+ <h2 class="section-title">Pricing & Availability</h2>+ <div class="vendor-cards">+ <div class="vendor-card recommended">+ <div class="vc-name mouser">Mouser Electronics</div>+ <div class="vc-price">$0.26</div>+ <div class="vc-detail">7,587 in stock</div>+ <a class="vc-link" href="https://www.mouser.com/ProductDetail/Inolux/IN-S42ATA?qs=qSfuJ%252Bfl%2Fd4ijVfKKelGRg%3D%3D" target="_blank">View on Mouser →</a>+ </div>+ <div class="vendor-card">+ <div class="vc-name digikey">DigiKey</div>+ <div class="vc-price">$0.26</div>+ <div class="vc-detail">20,960 in stock</div>+ <a class="vc-link" href="https://www.digikey.com/en/products/detail/inolux/IN-S42ATA/7604959" target="_blank">View on DigiKey →</a>+ </div>+ <div class="vendor-card">+ <div class="vc-name jlcpcb">JLCPCB / LCSC</div>+ <div class="vc-price">—</div>+ <div class="vc-detail">Not listed</div>+ </div>+ </div>+ </div>++ <!-- Documents -->+ <div class="section">+ <h2 class="section-title">Documents</h2>+ <div class="card">+ <table class="detail-table">+ <tr><td>Datasheet</td><td><button class="copy-btn" title="Copy link to clipboard" id="ds-copy-btn">⎘</button>+<script>document.getElementById('ds-copy-btn').addEventListener('click',function(){var t=document.createElement('textarea');t.value='http://www.inolux-corp.com/datasheet/SMDLED/Mono%20Color%20Top%20View/IN-S42AT%20Series_V1.1.pdf';document.body.appendChild(t);t.select();document.execCommand('copy');document.body.removeChild(t);this.textContent='Copied!';var b=this;setTimeout(function(){b.innerHTML='⎘'},1500)})</script> <a href="http://www.inolux-corp.com/datasheet/SMDLED/Mono%20Color%20Top%20View/IN-S42AT%20Series_V1.1.pdf" target="_blank">IN-S42AT Series V1.1 (PDF) →</a></td></tr>+ <tr><td>Series</td><td>IN-S42AT</td></tr>+ <tr><td>Manufacturer</td><td>Inolux Corporation</td></tr>+ </table>+ </div>+ </div>++ <!-- Molecule -->+ <div class="section">+ <h2 class="section-title">Molecule — Single-Passive Board</h2>+ <div class="card" style="padding:0;overflow:hidden;border-radius:8px">+ <div style="font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:0.5px;color:var(--text-dim);padding:12px 16px 0">Interactive 3D Board Viewer</div>+ <iframe src="https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/in-s42ata/tsci-viewer/molecule-viewer/index.html"+ style="width:100%;height:500px;border:none;border-radius:0 0 8px 8px;display:block"+ allow="fullscreen"></iframe>+ </div>+ <div style="font-size:11px;color:var(--text-dim);margin-top:8px;text-align:center">+ Orbit: click & drag · Zoom: scroll · Inspect: click a component · X-ray: toggle in toolbar+ </div>+ </div>++ <div class="source">+ IN-S42ATA characterization · Data from Inolux IN-S42AT Series V1.1 datasheet + adom-parts-search · 2026-06-03+ </div>++</div>++<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>+<script src="https://cdn.jsdelivr.net/npm/[email protected]/examples/js/pmrem/PMREMGenerator.js"></script>+<script>+(function() {+ // ==================== 3D Viewer — IN-S42ATA (0402 LED, amber) ====================+ const canvas = document.getElementById('viewer3d');+ if (canvas && window.THREE) {+ const scene = new THREE.Scene();++ const renderer = new THREE.WebGLRenderer({ canvas, antialias: true, alpha: true, logarithmicDepthBuffer: true });+ renderer.setSize(canvas.width, canvas.height);+ renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));+ renderer.outputEncoding = THREE.sRGBEncoding;+ renderer.toneMapping = THREE.ACESFilmicToneMapping;+ renderer.toneMappingExposure = 1.2;+ renderer.physicallyCorrectLights = true;++ canvas.style.background = 'linear-gradient(180deg, #5a6b7e 0%, #2a3340 100%)';++ const camera = new THREE.PerspectiveCamera(35, canvas.width / canvas.height, 0.01, 1000);++ // Procedural environment map+ const pmremGen = new THREE.PMREMGenerator(renderer);+ pmremGen.compileEquirectangularShader();+ const envScene = new THREE.Scene();+ envScene.background = new THREE.Color(0x3a4550);+ const envLight1 = new THREE.DirectionalLight(0xffffff, 2);+ envLight1.position.set(1, 3, 2);+ envScene.add(envLight1);+ const envLight2 = new THREE.DirectionalLight(0x8899bb, 1);+ envLight2.position.set(-2, 1, -1);+ envScene.add(envLight2);+ const envRT = pmremGen.fromScene(envScene, 0.04);+ scene.environment = envRT.texture;++ // Studio lighting+ const hemi = new THREE.HemisphereLight(0xe6edf3, 0xb3a699, 0.5);+ scene.add(hemi);+ const keyLight = new THREE.DirectionalLight(0xffffff, 1.5);+ keyLight.position.set(2, 5, 3);+ scene.add(keyLight);+ const fillLight = new THREE.DirectionalLight(0x8899aa, 0.5);+ fillLight.position.set(-3, 2, -2);+ scene.add(fillLight);+ const rimLight = new THREE.DirectionalLight(0xff8c00, 0.4);+ rimLight.position.set(0, -1, 3);+ scene.add(rimLight);++ const S = 2.5; // Scale for tiny 0402++ // PBR Materials for LED+ const bodyMat = new THREE.MeshStandardMaterial({+ color: 0x2a2018, metalness: 0.0, roughness: 0.4+ });+ const lensMat = new THREE.MeshStandardMaterial({+ color: 0xFF8C00, metalness: 0.0, roughness: 0.15,+ transparent: true, opacity: 0.55,+ emissive: 0xFF6600, emissiveIntensity: 0.3+ });+ const termMat = new THREE.MeshStandardMaterial({+ color: 0xc8ccd1, metalness: 1.0, roughness: 0.25,+ polygonOffset: true, polygonOffsetFactor: -1, polygonOffsetUnits: -1+ });+ const padMat = new THREE.MeshStandardMaterial({ color: 0xc9a04c, metalness: 1.0, roughness: 0.22 });+ const pcbMat = new THREE.MeshStandardMaterial({ color: 0x0a2a0a, metalness: 0.0, roughness: 0.6 });+ const cathodeMat = new THREE.MeshStandardMaterial({ color: 0xFF8C00, emissive: 0xFF6600, emissiveIntensity: 0.5, metalness: 0.0, roughness: 0.5 });++ // LED body: 1.0 x 0.5 x 0.45mm+ const bodyW = 1.0, bodyD = 0.5, bodyH = 0.30; // base part+ const lensH = 0.15; // lens on top+ const termW = 0.20;++ // Body base (dark substrate)+ const innerW = bodyW - termW * 2 + 0.02;+ const body = new THREE.Mesh(new THREE.BoxGeometry(innerW*S, bodyH*S, bodyD*S), bodyMat);+ body.position.y = bodyH*S/2;+ scene.add(body);++ // Amber lens on top+ const lens = new THREE.Mesh(new THREE.BoxGeometry(bodyW*0.85*S, lensH*S, bodyD*0.85*S), lensMat);+ lens.position.y = (bodyH + lensH/2)*S;+ scene.add(lens);++ // Terminals+ function makeTerminal(xSign) {+ const group = new THREE.Group();+ const front = new THREE.Mesh(new THREE.BoxGeometry(termW*S, bodyH*S, bodyD*S*0.99), termMat);+ front.position.set(xSign*(bodyW/2 - termW/2)*S, bodyH*S/2, 0);+ group.add(front);+ const bot = new THREE.Mesh(new THREE.BoxGeometry((termW+0.03)*S, 0.04*S, bodyD*S*0.99), termMat);+ bot.position.set(xSign*(bodyW/2 - termW/2)*S, 0.02*S, 0);+ group.add(bot);+ return group;+ }+ scene.add(makeTerminal(-1)); // anode+ scene.add(makeTerminal(1)); // cathode++ // Cathode mark (small line on top of body, cathode side)+ const cathMark = new THREE.Mesh(new THREE.BoxGeometry(0.02*S, 0.02*S, bodyD*0.7*S), cathodeMat);+ cathMark.position.set(0.25*S, (bodyH + lensH + 0.02)*S, 0);+ scene.add(cathMark);++ // PCB+ const pcb = new THREE.Mesh(new THREE.BoxGeometry(10*S, 0.08*S, 8*S), pcbMat);+ pcb.position.y = -0.04*S;+ scene.add(pcb);++ // Gold pads+ const pad1 = new THREE.Mesh(new THREE.BoxGeometry(0.4*S, 0.025*S, 0.6*S), padMat);+ pad1.position.set(-0.3*S, 0.005*S, 0);+ scene.add(pad1);+ const pad2 = new THREE.Mesh(new THREE.BoxGeometry(0.4*S, 0.025*S, 0.6*S), padMat);+ pad2.position.set(0.3*S, 0.005*S, 0);+ scene.add(pad2);++ // Grid+ const gridMat2 = new THREE.LineBasicMaterial({ color: 0x0d3d0d, transparent: true, opacity: 0.3 });+ for (let i = -8; i <= 8; i++) {+ const pts1 = [new THREE.Vector3(i*0.4*S, 0.045*S, -4*S), new THREE.Vector3(i*0.4*S, 0.045*S, 4*S)];+ scene.add(new THREE.Line(new THREE.BufferGeometry().setFromPoints(pts1), gridMat2));+ const pts2 = [new THREE.Vector3(-4*S, 0.045*S, i*0.4*S), new THREE.Vector3(4*S, 0.045*S, i*0.4*S)];+ scene.add(new THREE.Line(new THREE.BufferGeometry().setFromPoints(pts2), gridMat2));+ }++ // Camera orbit+ let isDragging = false, prevX = 0, prevY = 0;+ let theta = Math.PI/4, phi = Math.PI/5.5, radius = 5.0;+ const target = new THREE.Vector3(0, 0.4, 0);++ function updateCamera() {+ camera.position.x = radius * Math.sin(theta) * Math.cos(phi);+ camera.position.y = radius * Math.sin(phi) + target.y;+ camera.position.z = radius * Math.cos(theta) * Math.cos(phi);+ camera.lookAt(target);+ }+ updateCamera();++ canvas.addEventListener('mousedown', function(e) { isDragging = true; prevX = e.clientX; prevY = e.clientY; canvas.style.cursor = 'grabbing'; });+ window.addEventListener('mouseup', function() { isDragging = false; canvas.style.cursor = 'grab'; });+ canvas.addEventListener('mousemove', function(e) {+ if (!isDragging) return;+ theta -= (e.clientX - prevX) * 0.008;+ phi = Math.max(0.05, Math.min(Math.PI/2.2, phi + (e.clientY - prevY) * 0.008));+ prevX = e.clientX; prevY = e.clientY;+ updateCamera();+ });+ canvas.addEventListener('wheel', function(e) {+ e.preventDefault();+ radius = Math.max(2, Math.min(12, radius + e.deltaY * 0.004));+ updateCamera();+ }, { passive: false });++ function animate() { requestAnimationFrame(animate); renderer.render(scene, camera); }+ animate();+ }++ // ==================== Chart Tooltip System ====================+ function setupChartTooltip(svgId, dataPoints, color, formatX, formatY) {+ var svg = document.getElementById(svgId);+ if (!svg) return;++ var ns = 'http://www.w3.org/2000/svg';++ var dot = document.createElementNS(ns, 'circle');+ dot.setAttribute('r', '5');+ dot.setAttribute('fill', color);+ dot.setAttribute('stroke', '#0d1117');+ dot.setAttribute('stroke-width', '2');+ dot.style.display = 'none';+ dot.style.pointerEvents = 'none';+ svg.appendChild(dot);++ var tipGroup = document.createElementNS(ns, 'g');+ tipGroup.style.display = 'none';+ tipGroup.style.pointerEvents = 'none';++ var tipBg = document.createElementNS(ns, 'rect');+ tipBg.setAttribute('rx', '4');+ tipBg.setAttribute('fill', '#161b22');+ tipBg.setAttribute('stroke', '#30363d');+ tipBg.setAttribute('stroke-width', '1');++ var tipLine1 = document.createElementNS(ns, 'text');+ tipLine1.setAttribute('font-family', 'JetBrains Mono, monospace');+ tipLine1.setAttribute('font-size', '10');+ tipLine1.setAttribute('fill', '#e6edf3');++ var tipLine2 = document.createElementNS(ns, 'text');+ tipLine2.setAttribute('font-family', 'JetBrains Mono, monospace');+ tipLine2.setAttribute('font-size', '10');+ tipLine2.setAttribute('fill', color);++ tipGroup.appendChild(tipBg);+ tipGroup.appendChild(tipLine1);+ tipGroup.appendChild(tipLine2);+ svg.appendChild(tipGroup);++ var vLine = document.createElementNS(ns, 'line');+ vLine.setAttribute('stroke', color);+ vLine.setAttribute('stroke-width', '0.5');+ vLine.setAttribute('stroke-dasharray', '3,3');+ vLine.setAttribute('opacity', '0.5');+ vLine.style.display = 'none';+ vLine.style.pointerEvents = 'none';+ svg.appendChild(vLine);++ function lerp(pts, svgX) {+ if (svgX <= pts[0].sx) return pts[0];+ if (svgX >= pts[pts.length-1].sx) return pts[pts.length-1];+ for (var i = 0; i < pts.length - 1; i++) {+ if (svgX >= pts[i].sx && svgX <= pts[i+1].sx) {+ var t = (svgX - pts[i].sx) / (pts[i+1].sx - pts[i].sx);+ return {+ sx: svgX,+ sy: pts[i].sy + t * (pts[i+1].sy - pts[i].sy),+ vx: pts[i].vx + t * (pts[i+1].vx - pts[i].vx),+ vy: pts[i].vy + t * (pts[i+1].vy - pts[i].vy),+ };+ }+ }+ return pts[0];+ }++ svg.addEventListener('mousemove', function(e) {+ var pt = svg.createSVGPoint();+ pt.x = e.clientX;+ pt.y = e.clientY;+ var svgPt = pt.matrixTransform(svg.getScreenCTM().inverse());++ var minX = dataPoints[0].sx;+ var maxX = dataPoints[dataPoints.length-1].sx;+ if (svgPt.x < minX - 10 || svgPt.x > maxX + 10) {+ dot.style.display = 'none';+ tipGroup.style.display = 'none';+ vLine.style.display = 'none';+ return;+ }++ var p = lerp(dataPoints, svgPt.x);++ dot.setAttribute('cx', p.sx);+ dot.setAttribute('cy', p.sy);+ dot.style.display = '';++ vLine.setAttribute('x1', p.sx);+ vLine.setAttribute('y1', p.sy);+ vLine.setAttribute('x2', p.sx);+ vLine.setAttribute('y2', 220);+ vLine.style.display = '';++ var xLabel = formatX(p.vx);+ var yLabel = formatY(p.vy);+ tipLine1.textContent = xLabel;+ tipLine2.textContent = yLabel;++ var tipX = p.sx + 12;+ var tipY = p.sy - 28;+ var boxW = Math.max(xLabel.length, yLabel.length) * 7 + 16;+ var boxH = 32;++ var adjustedX = tipX + boxW > 660 ? p.sx - boxW - 12 : tipX;+ var adjustedY = tipY < 10 ? p.sy + 12 : tipY;++ tipBg.setAttribute('x', adjustedX);+ tipBg.setAttribute('y', adjustedY);+ tipBg.setAttribute('width', boxW);+ tipBg.setAttribute('height', boxH);++ tipLine1.setAttribute('x', adjustedX + 8);+ tipLine1.setAttribute('y', adjustedY + 13);+ tipLine2.setAttribute('x', adjustedX + 8);+ tipLine2.setAttribute('y', adjustedY + 26);++ tipGroup.style.display = '';+ });++ svg.addEventListener('mouseleave', function() {+ dot.style.display = 'none';+ tipGroup.style.display = 'none';+ vLine.style.display = 'none';+ });+ }++ // ==================== Chart 1: Spectral Distribution ====================+ // x: wavelength 500-700nm mapped to SVG 60-660 (3px/nm)+ // y: relative intensity 0-100% mapped to SVG 220-20+ var spectralData = [+ {sx:60, sy:220, vx:500, vy:0},+ {sx:180, sy:219, vx:540, vy:0.5},+ {sx:240, sy:218, vx:560, vy:1},+ {sx:285, sy:210, vx:575, vy:5},+ {sx:300, sy:205, vx:580, vy:7.5},+ {sx:315, sy:190, vx:585, vy:15},+ {sx:330, sy:160, vx:590, vy:30},+ {sx:345, sy:120, vx:595, vy:50},+ {sx:352, sy:90, vx:597, vy:65},+ {sx:358, sy:50, vx:599, vy:85},+ {sx:363, sy:28, vx:601, vy:96},+ {sx:369, sy:22, vx:605, vy:100},+ {sx:375, sy:28, vx:607, vy:96},+ {sx:381, sy:50, vx:609, vy:85},+ {sx:387, sy:90, vx:611, vy:65},+ {sx:394, sy:120, vx:613, vy:50},+ {sx:408, sy:160, vx:618, vy:30},+ {sx:423, sy:190, vx:623, vy:15},+ {sx:438, sy:205, vx:628, vy:7.5},+ {sx:453, sy:210, vx:633, vy:5},+ {sx:498, sy:218, vx:648, vy:1},+ {sx:540, sy:219, vx:660, vy:0.5},+ {sx:660, sy:220, vx:700, vy:0},+ ];++ setupChartTooltip('spectral-chart', spectralData, '#FF8C00',+ function(x) { return x.toFixed(0) + ' nm'; },+ function(y) { return 'Intensity: ' + y.toFixed(1) + '%'; }+ );++ // ==================== Chart 2: IV Curve ====================+ // x: Vf 0-3.5V mapped to SVG 60-660 (171.4px/V)+ // y: If 0-50mA mapped to SVG 220-20 (4px/mA)+ var ivData = [+ {sx:60, sy:220, vx:0, vy:0},+ {sx:231, sy:220, vx:1.0, vy:0},+ {sx:300, sy:219, vx:1.4, vy:0.25},+ {sx:345, sy:218, vx:1.65, vy:0.5},+ {sx:370, sy:216, vx:1.8, vy:1},+ {sx:380, sy:214, vx:1.85, vy:1.5},+ {sx:390, sy:212, vx:1.9, vy:2},+ {sx:403, sy:210, vx:2.0, vy:2.5},+ {sx:410, sy:205, vx:2.04, vy:3.75},+ {sx:420, sy:198, vx:2.06, vy:5.5},+ {sx:430, sy:180, vx:2.08, vy:10},+ {sx:440, sy:140, vx:2.1, vy:20},+ {sx:460, sy:120, vx:2.2, vy:25},+ {sx:470, sy:100, vx:2.3, vy:30},+ {sx:485, sy:80, vx:2.4, vy:35},+ {sx:500, sy:40, vx:2.55, vy:45},+ {sx:510, sy:20, vx:2.6, vy:50},+ ];++ setupChartTooltip('iv-chart', ivData, '#FF8C00',+ function(x) { return 'Vf = ' + x.toFixed(2) + ' V'; },+ function(y) { return 'If = ' + y.toFixed(1) + ' mA'; }+ );++ // ==================== Chart 3: Current Derating ====================+ // x: temp 0-100C mapped to SVG 60-660 (6px/C)+ // y: max If 0-30mA mapped to SVG 220-20 (6.67px/mA)+ var deratingData = [+ {sx:60, sy:20, vx:0, vy:30},+ {sx:210, sy:20, vx:25, vy:30},+ {sx:270, sy:53, vx:35, vy:25.5},+ {sx:330, sy:87, vx:45, vy:20},+ {sx:390, sy:120, vx:55, vy:15},+ {sx:450, sy:153, vx:65, vy:10},+ {sx:540, sy:187, vx:80, vy:5},+ {sx:565, sy:220, vx:84, vy:0},+ ];++ setupChartTooltip('derating-chart', deratingData, '#FF8C00',+ function(x) { return x.toFixed(0) + '°C'; },+ function(y) { return 'Max If = ' + y.toFixed(1) + ' mA'; }+ );++ // ==================== Chart 4: Brightness vs Current ====================+ // x: If 0-50mA mapped to SVG 60-660 (12px/mA)+ // y: relative 0-2.0 mapped to SVG 220-20 (100px per 1.0)+ var brightCurrentData = [+ {sx:60, sy:220, vx:0, vy:0},+ {sx:120, sy:168, vx:5, vy:0.52},+ {sx:180, sy:148, vx:10, vy:0.72},+ {sx:240, sy:135, vx:15, vy:0.85},+ {sx:300, sy:120, vx:20, vy:1.0},+ {sx:360, sy:108, vx:25, vy:1.12},+ {sx:420, sy:95, vx:30, vy:1.25},+ {sx:540, sy:69, vx:40, vy:1.51},+ {sx:660, sy:40, vx:50, vy:1.80},+ ];++ setupChartTooltip('brightness-current-chart', brightCurrentData, '#FF8C00',+ function(x) { return 'If = ' + x.toFixed(0) + ' mA'; },+ function(y) { return 'Brightness: ' + y.toFixed(2) + 'x'; }+ );++ // ==================== Chart 5: Brightness vs Temperature ====================+ // x: temp -30 to +70C mapped to SVG 60-660 (6px/C)+ // y: relative 0-2.0 mapped to SVG 220-20 (100px per 1.0)+ var brightTempData = [+ {sx:60, sy:70, vx:-30, vy:1.50},+ {sx:180, sy:95, vx:-10, vy:1.25},+ {sx:240, sy:105, vx:0, vy:1.15},+ {sx:300, sy:112, vx:10, vy:1.08},+ {sx:390, sy:120, vx:25, vy:1.00},+ {sx:480, sy:134, vx:40, vy:0.86},+ {sx:540, sy:142, vx:50, vy:0.78},+ {sx:600, sy:148, vx:60, vy:0.72},+ {sx:660, sy:150, vx:70, vy:0.70},+ ];++ setupChartTooltip('brightness-temp-chart', brightTempData, '#FF8C00',+ function(x) { return x.toFixed(0) + '°C'; },+ function(y) { return 'Brightness: ' + y.toFixed(2) + 'x'; }+ );++ // ==================== Resistor Calculator ====================+ var VF_TYP = 2.1;++ // E24 standard values (decade 10-100)+ var E24 = [10,11,12,13,15,16,18,20,22,24,27,30,33,36,39,43,47,51,56,62,68,75,82,91];++ function nearestE24(val) {+ if (val <= 0) return 0;+ // Find the decade+ var decade = 1;+ while (val >= 100) { val /= 10; decade *= 10; }+ while (val < 10) { val *= 10; decade /= 10; }+ // Find closest E24 value+ var best = E24[0], bestDist = Math.abs(val - E24[0]);+ for (var i = 1; i < E24.length; i++) {+ var d = Math.abs(val - E24[i]);+ if (d < bestDist) { bestDist = d; best = E24[i]; }+ }+ return best * decade;+ }++ function formatResistance(r) {+ if (r >= 1e6) return (r/1e6).toFixed(1) + ' MΩ';+ if (r >= 1e3) return (r/1e3).toFixed(0) + ' kΩ';+ if (r >= 100) return r.toFixed(0) + ' Ω';+ if (r >= 10) return r.toFixed(1) + ' Ω';+ return r.toFixed(2) + ' Ω';+ }++ function updateCalculator() {+ var vSupply = parseFloat(document.getElementById('calc-vsupply').value) || 0;+ var iLed = parseFloat(document.getElementById('calc-iled').value) || 0;+ var iLedA = iLed / 1000; // convert to amps++ var vDrop = vSupply - VF_TYP;+ var rExact = vDrop > 0 && iLedA > 0 ? vDrop / iLedA : 0;+ var rE24 = nearestE24(rExact);+ var iActual = rE24 > 0 ? vDrop / rE24 : 0;+ var pResistor = vDrop * iActual;+ var pLed = VF_TYP * iActual;++ // Update display+ document.getElementById('calc-r-exact').innerHTML = rExact > 0 ? formatResistance(rExact) : '—';+ document.getElementById('calc-r-formula').textContent = 'R = (' + vSupply.toFixed(1) + 'V - ' + VF_TYP + 'V) / ' + iLed.toFixed(0) + 'mA';+ document.getElementById('calc-r-e24').innerHTML = rE24 > 0 ? formatResistance(rE24) : '—';+ document.getElementById('calc-r-actual').textContent = iActual > 0 ? 'Actual If = ' + (iActual * 1000).toFixed(1) + 'mA' : '';+ document.getElementById('calc-p-resistor').textContent = pResistor > 0 ? (pResistor * 1000).toFixed(1) + ' mW' : '—';+ document.getElementById('calc-p-led').textContent = pLed > 0 ? (pLed * 1000).toFixed(1) + ' mW' : '—';++ // Update schematic SVG labels+ var svgVs = document.getElementById('calc-svg-vsupply');+ if (svgVs) svgVs.textContent = vSupply.toFixed(1) + 'V';+ var svgR = document.getElementById('calc-svg-r');+ if (svgR) svgR.textContent = rE24 > 0 ? formatResistance(rE24) : '—';+ var svgIf = document.getElementById('calc-svg-if');+ if (svgIf) svgIf.textContent = iActual > 0 ? (iActual * 1000).toFixed(1) + 'mA' : '';++ // Warning if LED power exceeds max+ var pLedEl = document.getElementById('calc-p-led');+ if (pLed * 1000 > 78) {+ pLedEl.style.color = '#f85149';+ } else {+ pLedEl.style.color = '';+ }++ // Warning if insufficient voltage+ var rExactEl = document.getElementById('calc-r-exact');+ if (vDrop <= 0) {+ rExactEl.innerHTML = '<span style="color:#f85149">V<sub>supply</sub> too low</span>';+ }+ }++ document.getElementById('calc-vsupply').addEventListener('input', updateCalculator);+ document.getElementById('calc-iled').addEventListener('input', updateCalculator);++ // Initial calculation+ updateCalculator();+})();+</script>+</div>+</body>+</html>
IN-S42ATA.kicad_modadded+15@@ -0,0 +1,15 @@+(footprint "IN-S42ATA"+ (version 20240108)+ (generator "adom-footprint")+ (layer "F.Cu")+ (descr "Inolux Corporation · Top View SMD LED · 0402 (1.0 × 0.5mm) · AlInGaP")+ (attr smd)+ (fp_text reference "REF**" (at 0 -2.8)+ (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))))+ (fp_text value "IN-S42ATA" (at 0 2.8)+ (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))))+ (pad "1" smd roundrect (at -0.5 0) (size 0.6 0.5)+ (layers F.Cu,F.Paste,F.Mask) (roundrect_rratio 0.25))+ (pad "2" smd roundrect (at 0.5 0) (size 0.6 0.5)+ (layers F.Cu,F.Paste,F.Mask) (roundrect_rratio 0.25))+)
IN-S42ATA.kicad_symadded+139@@ -0,0 +1,139 @@+(kicad_symbol_lib+ (version 20231120)+ (generator "adom")+ (symbol "IN-S42ATA"+ (pin_numbers (hide yes))+ (pin_names (offset 1.016) (hide yes))+ (exclude_from_sim no)+ (in_bom yes)+ (on_board yes)+ (property "Reference" "D"+ (at 0 2.54 0)+ (effects+ (font+ (size 1.27 1.27)+ )+ )+ )+ (property "Value" "IN-S42ATA"+ (at 0 -2.54 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" "Light emitting diode"+ (at 0 0 0)+ (effects (font (size 1.27 1.27)) (hide yes))+ )+ (symbol "IN-S42ATA_0_1"+ (polyline+ (pts+ (xy -3.048 -0.762) (xy -4.572 -2.286) (xy -3.81 -2.286) (xy -4.572 -2.286) (xy -4.572 -1.524)+ )+ (stroke+ (width 0)+ (type default)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -1.778 -0.762) (xy -3.302 -2.286) (xy -2.54 -2.286) (xy -3.302 -2.286) (xy -3.302 -1.524)+ )+ (stroke+ (width 0)+ (type default)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -1.27 0) (xy 1.27 0)+ )+ (stroke+ (width 0)+ (type default)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy -1.27 -1.27) (xy -1.27 1.27)+ )+ (stroke+ (width 0.254)+ (type default)+ )+ (fill+ (type none)+ )+ )+ (polyline+ (pts+ (xy 1.27 -1.27) (xy 1.27 1.27) (xy -1.27 0) (xy 1.27 -1.27)+ )+ (stroke+ (width 0.254)+ (type default)+ )+ (fill+ (type none)+ )+ )+ )+ (symbol "IN-S42ATA_1_1"+ (pin passive line+ (at -3.81 0 0)+ (length 2.54)+ (name "K"+ (effects+ (font+ (size 1.27 1.27)+ )+ )+ )+ (number "1"+ (effects+ (font+ (size 1.27 1.27)+ )+ )+ )+ )+ (pin passive line+ (at 3.81 0 180)+ (length 2.54)+ (name "A"+ (effects+ (font+ (size 1.27 1.27)+ )+ )+ )+ (number "2"+ (effects+ (font+ (size 1.27 1.27)+ )+ )+ )+ )+ )+ )+)
IN-S42ATA.lbradded+83@@ -0,0 +1,83 @@+<?xml version="1.0" encoding="utf-8"?>+<!DOCTYPE eagle SYSTEM "eagle.dtd">+<eagle version="9.6.2">+<drawing>+<settings><setting alwaysvectorfont="no"/></settings>+<grid distance="0.1" unitdist="inch" unit="inch" style="lines" multiple="1" display="no" altdistance="0.01" altunitdist="inch" altunit="inch"/>+<layers>+<layer number="1" name="Top" color="4" fill="1" visible="yes" active="yes"/>+<layer number="16" name="Bottom" color="1" fill="1" visible="yes" active="yes"/>+<layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes"/>+<layer number="18" name="Vias" color="2" fill="1" visible="yes" active="yes"/>+<layer number="19" name="Unrouted" color="6" fill="1" visible="yes" active="yes"/>+<layer number="20" name="Dimension" color="15" fill="1" visible="yes" active="yes"/>+<layer number="21" name="tPlace" color="7" fill="1" visible="yes" active="yes"/>+<layer number="22" name="bPlace" color="7" fill="1" visible="yes" active="yes"/>+<layer number="23" name="tOrigins" color="15" fill="1" visible="yes" active="yes"/>+<layer number="24" name="bOrigins" color="15" fill="1" visible="yes" active="yes"/>+<layer number="25" name="tNames" color="7" fill="1" visible="yes" active="yes"/>+<layer number="26" name="bNames" color="7" fill="1" visible="yes" active="yes"/>+<layer number="27" name="tValues" color="7" fill="1" visible="yes" active="yes"/>+<layer number="28" name="bValues" color="7" fill="1" visible="yes" active="yes"/>+<layer number="29" name="tStop" color="7" fill="3" visible="no" active="yes"/>+<layer number="30" name="bStop" color="7" fill="6" visible="no" active="yes"/>+<layer number="31" name="tCream" color="7" fill="4" visible="no" active="yes"/>+<layer number="32" name="bCream" color="7" fill="5" visible="no" active="yes"/>+<layer number="33" name="tFinish" color="6" fill="3" visible="no" active="yes"/>+<layer number="34" name="bFinish" color="6" fill="6" visible="no" active="yes"/>+<layer number="35" name="tGlue" color="7" fill="4" visible="no" active="yes"/>+<layer number="36" name="bGlue" color="7" fill="5" visible="no" active="yes"/>+<layer number="37" name="tTest" color="7" fill="1" visible="no" active="yes"/>+<layer number="38" name="bTest" color="7" fill="1" visible="no" active="yes"/>+<layer number="39" name="tKeepout" color="4" fill="11" visible="no" active="yes"/>+<layer number="40" name="bKeepout" color="1" fill="11" visible="no" active="yes"/>+<layer number="41" name="tRestrict" color="4" fill="10" visible="no" active="yes"/>+<layer number="42" name="bRestrict" color="1" fill="10" visible="no" active="yes"/>+<layer number="43" name="vRestrict" color="2" fill="10" visible="no" active="yes"/>+<layer number="44" name="Drills" color="7" fill="1" visible="no" active="yes"/>+<layer number="45" name="Holes" color="7" fill="1" visible="no" active="yes"/>+<layer number="46" name="Milling" color="3" fill="1" visible="no" active="yes"/>+<layer number="47" name="Measures" color="7" fill="1" visible="no" active="yes"/>+<layer number="48" name="Document" color="7" fill="1" visible="yes" active="yes"/>+<layer number="49" name="Reference" color="7" fill="1" visible="yes" active="yes"/>+<layer number="91" name="Nets" color="2" fill="1" visible="yes" active="yes"/>+<layer number="92" name="Busses" color="1" fill="1" visible="yes" active="yes"/>+<layer number="93" name="Pins" color="2" fill="1" visible="no" active="yes"/>+<layer number="94" name="Symbols" color="4" fill="1" visible="yes" active="yes"/>+<layer number="95" name="Names" color="7" fill="1" visible="yes" active="yes"/>+<layer number="96" name="Values" color="7" fill="1" visible="yes" active="yes"/>+<layer number="97" name="Info" color="7" fill="1" visible="yes" active="yes"/>+<layer number="98" name="Guide" color="6" fill="1" visible="yes" active="yes"/>+</layers>+<library>+<description>IN-S42ATA — Amber 0402 — Inolux Corporation</description>+<packages></packages>+<symbols>+<symbol name="IN-S42ATA">+ <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"/>+ <text x="0" y="5.08" size="1.27" layer="95" align="bottom-center">>NAME</text>+ <text x="0" y="-5.08" size="1.27" layer="96" align="top-center">>VALUE</text>+ <pin name="1" x="0" y="3.81" length="middle" direction="pas" rot="R270"/>+ <pin name="2" x="0" y="-3.81" length="middle" direction="pas" rot="R90"/>+</symbol>+</symbols>+<devicesets>+<deviceset name="IN-S42ATA" prefix="D">+ <description>Amber 0402 — Inolux Corporation</description>+ <gates>+ <gate name="G$1" symbol="IN-S42ATA" x="0" y="0"/>+ </gates>+ <devices>+ <device name="">+ <connects/>+ <technologies><technology name=""/></technologies>+ </device>+ </devices>+</deviceset>+</devicesets>+</library>+</drawing>+</eagle>
IN-S42ATA.stepadded+1958@@ -0,0 +1,1958 @@+ISO-10303-21;+HEADER;+/* LED_0402_1005Metric.step 3D STEP model for use in ECAD systems+ * Copyright (C) 2018, kicad StepUp+ * + * This work is licensed under the [Creative Commons CC-BY-SA 4.0 License](https://creativecommons.org/licenses/by-sa/4.0/legalcode), + * with the following exception:+ * To the extent that the creation of electronic designs that use 'Licensed Material' can be considered to be 'Adapted Material', + * then the copyright holder waives article 3 of the license with respect to these designs and any generated files which use data provided + * as part of the 'Licensed Material'.+ * You are free to use the library data in your own projects without the obligation to share your project files under this or any other license agreement.+ * However, if you wish to redistribute these libraries, or parts thereof (including in modified form) as a collection then the exception above does not apply. + * Please refer to https://github.com/KiCad/kicad-packages3D/blob/master/LICENSE.md for further clarification of the exception.+ * Disclaimer of Warranties and Limitation of Liability.+ * These libraries are provided in the hope that they will be useful, but are provided without warranty of any kind, express or implied.+ * *USE 3D CAD DATA AT YOUR OWN RISK*+ * *DO NOT RELY UPON ANY INFORMATION FOUND HERE WITHOUT INDEPENDENT VERIFICATION.*+ * + */++FILE_DESCRIPTION(+/* description */ ('model of LED_0402_1005Metric'),+/* implementation_level */ '2;1');++FILE_NAME(+/* name */ 'LED_0402_1005Metric.step',+/* time_stamp */ '2018-03-14T23:51:39',+/* author */ ('kicad StepUp','ksu'),+/* organization */ ('FreeCAD'),+/* preprocessor_version */ 'OCC',+/* originating_system */ 'kicad StepUp',+/* authorisation */ '');++FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));+ENDSEC;++DATA;+#1 = APPLICATION_PROTOCOL_DEFINITION('international standard',+'automotive_design',2000,#2);+#2 = APPLICATION_CONTEXT(+'core data for automotive mechanical design processes');+#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10);+#4 = PRODUCT_DEFINITION_SHAPE('','',#5);+#5 = PRODUCT_DEFINITION('design','',#6,#9);+#6 = PRODUCT_DEFINITION_FORMATION('','',#7);+#7 = PRODUCT('LED_0402_1005Metric','LED_0402_1005Metric','',(#8));+#8 = PRODUCT_CONTEXT('',#2,'mechanical');+#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');+#10 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#15),#1538);+#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14);+#12 = CARTESIAN_POINT('',(0.,0.,0.));+#13 = DIRECTION('',(0.,0.,1.));+#14 = DIRECTION('',(1.,0.,-0.));+#15 = MANIFOLD_SOLID_BREP('',#16);+#16 = CLOSED_SHELL('',(#17,#57,#104,#183,#207,#247,#278,#295,#328,#352,+#419,#540,#607,#631,#662,#695,#751,#775,#799,#823,#856,#868,#931,+#956,#973,#997,#1015,#1033,#1051,#1068,#1085,#1116,#1141,#1166,#1190+,#1207,#1238,#1262,#1279,#1307,#1332,#1356,#1381,#1428,#1445,#1457,+#1479,#1491,#1509,#1527));+#17 = ADVANCED_FACE('',(#18),#52,.F.);+#18 = FACE_BOUND('',#19,.F.);+#19 = EDGE_LOOP('',(#20,#30,#38,#46));+#20 = ORIENTED_EDGE('',*,*,#21,.T.);+#21 = EDGE_CURVE('',#22,#24,#26,.T.);+#22 = VERTEX_POINT('',#23);+#23 = CARTESIAN_POINT('',(-0.35,-0.25,0.185));+#24 = VERTEX_POINT('',#25);+#25 = CARTESIAN_POINT('',(-0.315,-0.25,0.5));+#26 = LINE('',#27,#28);+#27 = CARTESIAN_POINT('',(-0.35,-0.25,0.185));+#28 = VECTOR('',#29,1.);+#29 = DIRECTION('',(0.110431526075,0.,0.993883734674));+#30 = ORIENTED_EDGE('',*,*,#31,.T.);+#31 = EDGE_CURVE('',#24,#32,#34,.T.);+#32 = VERTEX_POINT('',#33);+#33 = CARTESIAN_POINT('',(0.315,-0.25,0.5));+#34 = LINE('',#35,#36);+#35 = CARTESIAN_POINT('',(-0.315,-0.25,0.5));+#36 = VECTOR('',#37,1.);+#37 = DIRECTION('',(1.,0.,0.));+#38 = ORIENTED_EDGE('',*,*,#39,.T.);+#39 = EDGE_CURVE('',#32,#40,#42,.T.);+#40 = VERTEX_POINT('',#41);+#41 = CARTESIAN_POINT('',(0.35,-0.25,0.185));+#42 = LINE('',#43,#44);+#43 = CARTESIAN_POINT('',(0.315,-0.25,0.5));+#44 = VECTOR('',#45,1.);+#45 = DIRECTION('',(0.110431526075,0.,-0.993883734674));+#46 = ORIENTED_EDGE('',*,*,#47,.T.);+#47 = EDGE_CURVE('',#40,#22,#48,.T.);+#48 = LINE('',#49,#50);+#49 = CARTESIAN_POINT('',(0.35,-0.25,0.185));+#50 = VECTOR('',#51,1.);+#51 = DIRECTION('',(-1.,0.,0.));+#52 = PLANE('',#53);+#53 = AXIS2_PLACEMENT_3D('',#54,#55,#56);+#54 = CARTESIAN_POINT('',(0.,-0.25,0.336886104513));+#55 = DIRECTION('',(0.,1.,0.));+#56 = DIRECTION('',(0.,0.,1.));+#57 = ADVANCED_FACE('',(#58),#99,.T.);+#58 = FACE_BOUND('',#59,.T.);+#59 = EDGE_LOOP('',(#60,#70,#78,#84,#85,#93));+#60 = ORIENTED_EDGE('',*,*,#61,.T.);+#61 = EDGE_CURVE('',#62,#64,#66,.T.);+#62 = VERTEX_POINT('',#63);+#63 = CARTESIAN_POINT('',(-0.35,0.25,0.185));+#64 = VERTEX_POINT('',#65);+#65 = CARTESIAN_POINT('',(-0.35,0.1875,0.185));+#66 = LINE('',#67,#68);+#67 = CARTESIAN_POINT('',(-0.35,0.25,0.185));+#68 = VECTOR('',#69,1.);+#69 = DIRECTION('',(0.,-1.,0.));+#70 = ORIENTED_EDGE('',*,*,#71,.F.);+#71 = EDGE_CURVE('',#72,#64,#74,.T.);+#72 = VERTEX_POINT('',#73);+#73 = CARTESIAN_POINT('',(-0.35,-0.1875,0.185));+#74 = LINE('',#75,#76);+#75 = CARTESIAN_POINT('',(-0.35,-0.25,0.185));+#76 = VECTOR('',#77,1.);+#77 = DIRECTION('',(0.,1.,0.));+#78 = ORIENTED_EDGE('',*,*,#79,.T.);+#79 = EDGE_CURVE('',#72,#22,#80,.T.);+#80 = LINE('',#81,#82);+#81 = CARTESIAN_POINT('',(-0.35,0.25,0.185));+#82 = VECTOR('',#83,1.);+#83 = DIRECTION('',(0.,-1.,0.));+#84 = ORIENTED_EDGE('',*,*,#21,.T.);+#85 = ORIENTED_EDGE('',*,*,#86,.F.);+#86 = EDGE_CURVE('',#87,#24,#89,.T.);+#87 = VERTEX_POINT('',#88);+#88 = CARTESIAN_POINT('',(-0.315,0.25,0.5));+#89 = LINE('',#90,#91);+#90 = CARTESIAN_POINT('',(-0.315,0.25,0.5));+#91 = VECTOR('',#92,1.);+#92 = DIRECTION('',(0.,-1.,0.));+#93 = ORIENTED_EDGE('',*,*,#94,.F.);+#94 = EDGE_CURVE('',#62,#87,#95,.T.);+#95 = LINE('',#96,#97);+#96 = CARTESIAN_POINT('',(-0.35,0.25,0.185));+#97 = VECTOR('',#98,1.);+#98 = DIRECTION('',(0.110431526075,0.,0.993883734674));+#99 = PLANE('',#100);+#100 = AXIS2_PLACEMENT_3D('',#101,#102,#103);+#101 = CARTESIAN_POINT('',(-0.35,0.25,0.185));+#102 = DIRECTION('',(-0.993883734674,0.,0.110431526075));+#103 = DIRECTION('',(0.110431526075,0.,0.993883734674));+#104 = ADVANCED_FACE('',(#105),#178,.F.);+#105 = FACE_BOUND('',#106,.F.);+#106 = EDGE_LOOP('',(#107,#117,#125,#133,#139,#140,#148,#156,#164,#172)+);+#107 = ORIENTED_EDGE('',*,*,#108,.F.);+#108 = EDGE_CURVE('',#109,#111,#113,.T.);+#109 = VERTEX_POINT('',#110);+#110 = CARTESIAN_POINT('',(-0.485,-0.25,1.5E-02));+#111 = VERTEX_POINT('',#112);+#112 = CARTESIAN_POINT('',(-0.4625,-0.25,1.5E-02));+#113 = LINE('',#114,#115);+#114 = CARTESIAN_POINT('',(-0.485,-0.25,1.5E-02));+#115 = VECTOR('',#116,1.);+#116 = DIRECTION('',(1.,0.,0.));+#117 = ORIENTED_EDGE('',*,*,#118,.T.);+#118 = EDGE_CURVE('',#109,#119,#121,.T.);+#119 = VERTEX_POINT('',#120);+#120 = CARTESIAN_POINT('',(-0.485,-0.25,0.185));+#121 = LINE('',#122,#123);+#122 = CARTESIAN_POINT('',(-0.485,-0.25,1.5E-02));+#123 = VECTOR('',#124,1.);+#124 = DIRECTION('',(0.,0.,1.));+#125 = ORIENTED_EDGE('',*,*,#126,.T.);+#126 = EDGE_CURVE('',#119,#127,#129,.T.);+#127 = VERTEX_POINT('',#128);+#128 = CARTESIAN_POINT('',(-0.4625,-0.25,0.185));+#129 = LINE('',#130,#131);+#130 = CARTESIAN_POINT('',(-0.485,-0.25,0.185));+#131 = VECTOR('',#132,1.);+#132 = DIRECTION('',(1.,0.,0.));+#133 = ORIENTED_EDGE('',*,*,#134,.T.);+#134 = EDGE_CURVE('',#127,#22,#135,.T.);+#135 = LINE('',#136,#137);+#136 = CARTESIAN_POINT('',(-0.485,-0.25,0.185));+#137 = VECTOR('',#138,1.);+#138 = DIRECTION('',(1.,0.,0.));+#139 = ORIENTED_EDGE('',*,*,#47,.F.);+#140 = ORIENTED_EDGE('',*,*,#141,.T.);+#141 = EDGE_CURVE('',#40,#142,#144,.T.);+#142 = VERTEX_POINT('',#143);+#143 = CARTESIAN_POINT('',(0.4625,-0.25,0.185));+#144 = LINE('',#145,#146);+#145 = CARTESIAN_POINT('',(-0.485,-0.25,0.185));+#146 = VECTOR('',#147,1.);+#147 = DIRECTION('',(1.,0.,0.));+#148 = ORIENTED_EDGE('',*,*,#149,.T.);+#149 = EDGE_CURVE('',#142,#150,#152,.T.);+#150 = VERTEX_POINT('',#151);+#151 = CARTESIAN_POINT('',(0.485,-0.25,0.185));+#152 = LINE('',#153,#154);+#153 = CARTESIAN_POINT('',(-0.485,-0.25,0.185));+#154 = VECTOR('',#155,1.);+#155 = DIRECTION('',(1.,0.,0.));+#156 = ORIENTED_EDGE('',*,*,#157,.F.);+#157 = EDGE_CURVE('',#158,#150,#160,.T.);+#158 = VERTEX_POINT('',#159);+#159 = CARTESIAN_POINT('',(0.485,-0.25,1.5E-02));+#160 = LINE('',#161,#162);+#161 = CARTESIAN_POINT('',(0.485,-0.25,1.5E-02));+#162 = VECTOR('',#163,1.);+#163 = DIRECTION('',(0.,0.,1.));+#164 = ORIENTED_EDGE('',*,*,#165,.F.);+#165 = EDGE_CURVE('',#166,#158,#168,.T.);+#166 = VERTEX_POINT('',#167);+#167 = CARTESIAN_POINT('',(0.4625,-0.25,1.5E-02));+#168 = LINE('',#169,#170);+#169 = CARTESIAN_POINT('',(-0.485,-0.25,1.5E-02));+#170 = VECTOR('',#171,1.);+#171 = DIRECTION('',(1.,0.,0.));+#172 = ORIENTED_EDGE('',*,*,#173,.F.);+#173 = EDGE_CURVE('',#111,#166,#174,.T.);+#174 = LINE('',#175,#176);+#175 = CARTESIAN_POINT('',(-0.485,-0.25,1.5E-02));+#176 = VECTOR('',#177,1.);+#177 = DIRECTION('',(1.,0.,0.));+#178 = PLANE('',#179);+#179 = AXIS2_PLACEMENT_3D('',#180,#181,#182);+#180 = CARTESIAN_POINT('',(-0.485,-0.25,1.5E-02));+#181 = DIRECTION('',(0.,1.,0.));+#182 = DIRECTION('',(0.,0.,1.));+#183 = ADVANCED_FACE('',(#184),#202,.T.);+#184 = FACE_BOUND('',#185,.T.);+#185 = EDGE_LOOP('',(#186,#187,#188,#196));+#186 = ORIENTED_EDGE('',*,*,#86,.T.);+#187 = ORIENTED_EDGE('',*,*,#31,.T.);+#188 = ORIENTED_EDGE('',*,*,#189,.F.);+#189 = EDGE_CURVE('',#190,#32,#192,.T.);+#190 = VERTEX_POINT('',#191);+#191 = CARTESIAN_POINT('',(0.315,0.25,0.5));+#192 = LINE('',#193,#194);+#193 = CARTESIAN_POINT('',(0.315,0.25,0.5));+#194 = VECTOR('',#195,1.);+#195 = DIRECTION('',(0.,-1.,0.));+#196 = ORIENTED_EDGE('',*,*,#197,.F.);+#197 = EDGE_CURVE('',#87,#190,#198,.T.);+#198 = LINE('',#199,#200);+#199 = CARTESIAN_POINT('',(-0.315,0.25,0.5));+#200 = VECTOR('',#201,1.);+#201 = DIRECTION('',(1.,0.,0.));+#202 = PLANE('',#203);+#203 = AXIS2_PLACEMENT_3D('',#204,#205,#206);+#204 = CARTESIAN_POINT('',(-0.315,0.25,0.5));+#205 = DIRECTION('',(0.,0.,1.));+#206 = DIRECTION('',(1.,0.,0.));+#207 = ADVANCED_FACE('',(#208),#242,.T.);+#208 = FACE_BOUND('',#209,.T.);+#209 = EDGE_LOOP('',(#210,#211,#212,#220,#228,#236));+#210 = ORIENTED_EDGE('',*,*,#189,.T.);+#211 = ORIENTED_EDGE('',*,*,#39,.T.);+#212 = ORIENTED_EDGE('',*,*,#213,.F.);+#213 = EDGE_CURVE('',#214,#40,#216,.T.);+#214 = VERTEX_POINT('',#215);+#215 = CARTESIAN_POINT('',(0.35,-0.1875,0.185));+#216 = LINE('',#217,#218);+#217 = CARTESIAN_POINT('',(0.35,0.25,0.185));+#218 = VECTOR('',#219,1.);+#219 = DIRECTION('',(0.,-1.,0.));+#220 = ORIENTED_EDGE('',*,*,#221,.T.);+#221 = EDGE_CURVE('',#214,#222,#224,.T.);+#222 = VERTEX_POINT('',#223);+#223 = CARTESIAN_POINT('',(0.35,0.1875,0.185));+#224 = LINE('',#225,#226);+#225 = CARTESIAN_POINT('',(0.35,-0.25,0.185));+#226 = VECTOR('',#227,1.);+#227 = DIRECTION('',(0.,1.,0.));+#228 = ORIENTED_EDGE('',*,*,#229,.F.);+#229 = EDGE_CURVE('',#230,#222,#232,.T.);+#230 = VERTEX_POINT('',#231);+#231 = CARTESIAN_POINT('',(0.35,0.25,0.185));+#232 = LINE('',#233,#234);+#233 = CARTESIAN_POINT('',(0.35,0.25,0.185));+#234 = VECTOR('',#235,1.);+#235 = DIRECTION('',(0.,-1.,0.));+#236 = ORIENTED_EDGE('',*,*,#237,.F.);+#237 = EDGE_CURVE('',#190,#230,#238,.T.);+#238 = LINE('',#239,#240);+#239 = CARTESIAN_POINT('',(0.315,0.25,0.5));+#240 = VECTOR('',#241,1.);+#241 = DIRECTION('',(0.110431526075,0.,-0.993883734674));+#242 = PLANE('',#243);+#243 = AXIS2_PLACEMENT_3D('',#244,#245,#246);+#244 = CARTESIAN_POINT('',(0.315,0.25,0.5));+#245 = DIRECTION('',(0.993883734674,0.,0.110431526075));+#246 = DIRECTION('',(0.110431526075,0.,-0.993883734674));+#247 = ADVANCED_FACE('',(#248),#273,.T.);+#248 = FACE_BOUND('',#249,.T.);+#249 = EDGE_LOOP('',(#250,#258,#266,#272));+#250 = ORIENTED_EDGE('',*,*,#251,.F.);+#251 = EDGE_CURVE('',#252,#62,#254,.T.);+#252 = VERTEX_POINT('',#253);+#253 = CARTESIAN_POINT('',(-0.4625,0.25,0.185));+#254 = LINE('',#255,#256);+#255 = CARTESIAN_POINT('',(-0.485,0.25,0.185));+#256 = VECTOR('',#257,1.);+#257 = DIRECTION('',(1.,0.,0.));+#258 = ORIENTED_EDGE('',*,*,#259,.F.);+#259 = EDGE_CURVE('',#260,#252,#262,.T.);+#260 = VERTEX_POINT('',#261);+#261 = CARTESIAN_POINT('',(-0.4625,0.1875,0.185));+#262 = LINE('',#263,#264);+#263 = CARTESIAN_POINT('',(-0.4625,3.125E-02,0.185));+#264 = VECTOR('',#265,1.);+#265 = DIRECTION('',(0.,1.,0.));+#266 = ORIENTED_EDGE('',*,*,#267,.F.);+#267 = EDGE_CURVE('',#64,#260,#268,.T.);+#268 = LINE('',#269,#270);+#269 = CARTESIAN_POINT('',(-0.47375,0.1875,0.185));+#270 = VECTOR('',#271,1.);+#271 = DIRECTION('',(-1.,0.,0.));+#272 = ORIENTED_EDGE('',*,*,#61,.F.);+#273 = PLANE('',#274);+#274 = AXIS2_PLACEMENT_3D('',#275,#276,#277);+#275 = CARTESIAN_POINT('',(-0.485,-0.25,0.185));+#276 = DIRECTION('',(0.,0.,1.));+#277 = DIRECTION('',(1.,0.,0.));+#278 = ADVANCED_FACE('',(#279),#290,.T.);+#279 = FACE_BOUND('',#280,.T.);+#280 = EDGE_LOOP('',(#281,#282,#283,#284));+#281 = ORIENTED_EDGE('',*,*,#94,.T.);+#282 = ORIENTED_EDGE('',*,*,#197,.T.);+#283 = ORIENTED_EDGE('',*,*,#237,.T.);+#284 = ORIENTED_EDGE('',*,*,#285,.T.);+#285 = EDGE_CURVE('',#230,#62,#286,.T.);+#286 = LINE('',#287,#288);+#287 = CARTESIAN_POINT('',(0.35,0.25,0.185));+#288 = VECTOR('',#289,1.);+#289 = DIRECTION('',(-1.,0.,0.));+#290 = PLANE('',#291);+#291 = AXIS2_PLACEMENT_3D('',#292,#293,#294);+#292 = CARTESIAN_POINT('',(0.,0.25,0.336886104513));+#293 = DIRECTION('',(0.,1.,0.));+#294 = DIRECTION('',(0.,0.,1.));+#295 = ADVANCED_FACE('',(#296),#323,.T.);+#296 = FACE_BOUND('',#297,.F.);+#297 = EDGE_LOOP('',(#298,#299,#308,#316));+#298 = ORIENTED_EDGE('',*,*,#71,.F.);+#299 = ORIENTED_EDGE('',*,*,#300,.F.);+#300 = EDGE_CURVE('',#301,#72,#303,.T.);+#301 = VERTEX_POINT('',#302);+#302 = CARTESIAN_POINT('',(-0.365,-0.1875,0.2));+#303 = CIRCLE('',#304,1.5E-02);+#304 = AXIS2_PLACEMENT_3D('',#305,#306,#307);+#305 = CARTESIAN_POINT('',(-0.365,-0.1875,0.185));+#306 = DIRECTION('',(-0.,1.,0.));+#307 = DIRECTION('',(1.,0.,0.));+#308 = ORIENTED_EDGE('',*,*,#309,.T.);+#309 = EDGE_CURVE('',#301,#310,#312,.T.);+#310 = VERTEX_POINT('',#311);+#311 = CARTESIAN_POINT('',(-0.365,0.1875,0.2));+#312 = LINE('',#313,#314);+#313 = CARTESIAN_POINT('',(-0.365,-0.25,0.2));+#314 = VECTOR('',#315,1.);+#315 = DIRECTION('',(0.,1.,0.));+#316 = ORIENTED_EDGE('',*,*,#317,.T.);+#317 = EDGE_CURVE('',#310,#64,#318,.T.);+#318 = CIRCLE('',#319,1.5E-02);+#319 = AXIS2_PLACEMENT_3D('',#320,#321,#322);+#320 = CARTESIAN_POINT('',(-0.365,0.1875,0.185));+#321 = DIRECTION('',(-0.,1.,0.));+#322 = DIRECTION('',(1.,0.,0.));+#323 = CYLINDRICAL_SURFACE('',#324,1.5E-02);+#324 = AXIS2_PLACEMENT_3D('',#325,#326,#327);+#325 = CARTESIAN_POINT('',(-0.365,-0.25,0.185));+#326 = DIRECTION('',(0.,1.,0.));+#327 = DIRECTION('',(1.,0.,0.));+#328 = ADVANCED_FACE('',(#329),#347,.T.);+#329 = FACE_BOUND('',#330,.T.);+#330 = EDGE_LOOP('',(#331,#339,#340,#341));+#331 = ORIENTED_EDGE('',*,*,#332,.F.);+#332 = EDGE_CURVE('',#127,#333,#335,.T.);+#333 = VERTEX_POINT('',#334);+#334 = CARTESIAN_POINT('',(-0.4625,-0.1875,0.185));+#335 = LINE('',#336,#337);+#336 = CARTESIAN_POINT('',(-0.4625,-0.21875,0.185));+#337 = VECTOR('',#338,1.);+#338 = DIRECTION('',(0.,1.,0.));+#339 = ORIENTED_EDGE('',*,*,#134,.T.);+#340 = ORIENTED_EDGE('',*,*,#79,.F.);+#341 = ORIENTED_EDGE('',*,*,#342,.F.);+#342 = EDGE_CURVE('',#333,#72,#343,.T.);+#343 = LINE('',#344,#345);+#344 = CARTESIAN_POINT('',(-1.125E-02,-0.1875,0.185));+#345 = VECTOR('',#346,1.);+#346 = DIRECTION('',(1.,0.,0.));+#347 = PLANE('',#348);+#348 = AXIS2_PLACEMENT_3D('',#349,#350,#351);+#349 = CARTESIAN_POINT('',(-0.485,-0.25,0.185));+#350 = DIRECTION('',(0.,0.,1.));+#351 = DIRECTION('',(1.,0.,0.));+#352 = ADVANCED_FACE('',(#353),#414,.F.);+#353 = FACE_BOUND('',#354,.F.);+#354 = EDGE_LOOP('',(#355,#365,#374,#382,#391,#399,#405,#406,#407,#408)+);+#355 = ORIENTED_EDGE('',*,*,#356,.F.);+#356 = EDGE_CURVE('',#357,#359,#361,.T.);+#357 = VERTEX_POINT('',#358);+#358 = CARTESIAN_POINT('',(-0.485,-0.25,-1.734723475977E-18));+#359 = VERTEX_POINT('',#360);+#360 = CARTESIAN_POINT('',(-0.4625,-0.25,0.));+#361 = LINE('',#362,#363);+#362 = CARTESIAN_POINT('',(-0.5,-0.25,0.));+#363 = VECTOR('',#364,1.);+#364 = DIRECTION('',(1.,0.,0.));+#365 = ORIENTED_EDGE('',*,*,#366,.F.);+#366 = EDGE_CURVE('',#367,#357,#369,.T.);+#367 = VERTEX_POINT('',#368);+#368 = CARTESIAN_POINT('',(-0.5,-0.25,1.5E-02));+#369 = CIRCLE('',#370,1.5E-02);+#370 = AXIS2_PLACEMENT_3D('',#371,#372,#373);+#371 = CARTESIAN_POINT('',(-0.485,-0.25,1.5E-02));+#372 = DIRECTION('',(0.,-1.,0.));+#373 = DIRECTION('',(0.,0.,1.));+#374 = ORIENTED_EDGE('',*,*,#375,.T.);+#375 = EDGE_CURVE('',#367,#376,#378,.T.);+#376 = VERTEX_POINT('',#377);+#377 = CARTESIAN_POINT('',(-0.5,-0.25,0.185));+#378 = LINE('',#379,#380);+#379 = CARTESIAN_POINT('',(-0.5,-0.25,0.));+#380 = VECTOR('',#381,1.);+#381 = DIRECTION('',(0.,0.,1.));+#382 = ORIENTED_EDGE('',*,*,#383,.T.);+#383 = EDGE_CURVE('',#376,#384,#386,.T.);+#384 = VERTEX_POINT('',#385);+#385 = CARTESIAN_POINT('',(-0.485,-0.25,0.2));+#386 = CIRCLE('',#387,1.5E-02);+#387 = AXIS2_PLACEMENT_3D('',#388,#389,#390);+#388 = CARTESIAN_POINT('',(-0.485,-0.25,0.185));+#389 = DIRECTION('',(0.,1.,0.));+#390 = DIRECTION('',(0.,0.,1.));+#391 = ORIENTED_EDGE('',*,*,#392,.T.);+#392 = EDGE_CURVE('',#384,#393,#395,.T.);+#393 = VERTEX_POINT('',#394);+#394 = CARTESIAN_POINT('',(-0.4625,-0.25,0.2));+#395 = LINE('',#396,#397);+#396 = CARTESIAN_POINT('',(-0.5,-0.25,0.2));+#397 = VECTOR('',#398,1.);+#398 = DIRECTION('',(1.,0.,0.));+#399 = ORIENTED_EDGE('',*,*,#400,.F.);+#400 = EDGE_CURVE('',#127,#393,#401,.T.);+#401 = LINE('',#402,#403);+#402 = CARTESIAN_POINT('',(-0.4625,-0.25,0.15));+#403 = VECTOR('',#404,1.);+#404 = DIRECTION('',(0.,0.,1.));+#405 = ORIENTED_EDGE('',*,*,#126,.F.);+#406 = ORIENTED_EDGE('',*,*,#118,.F.);+#407 = ORIENTED_EDGE('',*,*,#108,.T.);+#408 = ORIENTED_EDGE('',*,*,#409,.F.);+#409 = EDGE_CURVE('',#359,#111,#410,.T.);+#410 = LINE('',#411,#412);+#411 = CARTESIAN_POINT('',(-0.4625,-0.25,0.15));+#412 = VECTOR('',#413,1.);+#413 = DIRECTION('',(0.,0.,1.));+#414 = PLANE('',#415);+#415 = AXIS2_PLACEMENT_3D('',#416,#417,#418);+#416 = CARTESIAN_POINT('',(-0.5,-0.25,0.));+#417 = DIRECTION('',(0.,1.,0.));+#418 = DIRECTION('',(0.,0.,1.));+#419 = ADVANCED_FACE('',(#420,#509),#535,.F.);+#420 = FACE_BOUND('',#421,.F.);+#421 = EDGE_LOOP('',(#422,#430,#431,#439,#447,#455,#463,#471,#479,#487,+#495,#503));+#422 = ORIENTED_EDGE('',*,*,#423,.F.);+#423 = EDGE_CURVE('',#111,#424,#426,.T.);+#424 = VERTEX_POINT('',#425);+#425 = CARTESIAN_POINT('',(-0.4625,-0.1875,1.5E-02));+#426 = LINE('',#427,#428);+#427 = CARTESIAN_POINT('',(-0.4625,-0.21875,1.5E-02));+#428 = VECTOR('',#429,1.);+#429 = DIRECTION('',(0.,1.,0.));+#430 = ORIENTED_EDGE('',*,*,#173,.T.);+#431 = ORIENTED_EDGE('',*,*,#432,.F.);+#432 = EDGE_CURVE('',#433,#166,#435,.T.);+#433 = VERTEX_POINT('',#434);+#434 = CARTESIAN_POINT('',(0.4625,-0.1875,1.5E-02));+#435 = LINE('',#436,#437);+#436 = CARTESIAN_POINT('',(0.4625,-0.28125,1.5E-02));+#437 = VECTOR('',#438,1.);+#438 = DIRECTION('',(0.,-1.,0.));+#439 = ORIENTED_EDGE('',*,*,#440,.F.);+#440 = EDGE_CURVE('',#441,#433,#443,.T.);+#441 = VERTEX_POINT('',#442);+#442 = CARTESIAN_POINT('',(0.35,-0.1875,1.5E-02));+#443 = LINE('',#444,#445);+#444 = CARTESIAN_POINT('',(-1.125E-02,-0.1875,1.5E-02));+#445 = VECTOR('',#446,1.);+#446 = DIRECTION('',(1.,0.,0.));+#447 = ORIENTED_EDGE('',*,*,#448,.T.);+#448 = EDGE_CURVE('',#441,#449,#451,.T.);+#449 = VERTEX_POINT('',#450);+#450 = CARTESIAN_POINT('',(0.35,0.1875,1.5E-02));+#451 = LINE('',#452,#453);+#452 = CARTESIAN_POINT('',(0.35,-0.25,1.5E-02));+#453 = VECTOR('',#454,1.);+#454 = DIRECTION('',(0.,1.,0.));+#455 = ORIENTED_EDGE('',*,*,#456,.F.);+#456 = EDGE_CURVE('',#457,#449,#459,.T.);+#457 = VERTEX_POINT('',#458);+#458 = CARTESIAN_POINT('',(0.4625,0.1875,1.5E-02));+#459 = LINE('',#460,#461);+#460 = CARTESIAN_POINT('',(-0.47375,0.1875,1.5E-02));+#461 = VECTOR('',#462,1.);+#462 = DIRECTION('',(-1.,0.,0.));+#463 = ORIENTED_EDGE('',*,*,#464,.F.);+#464 = EDGE_CURVE('',#465,#457,#467,.T.);+#465 = VERTEX_POINT('',#466);+#466 = CARTESIAN_POINT('',(0.4625,0.25,1.5E-02));+#467 = LINE('',#468,#469);+#468 = CARTESIAN_POINT('',(0.4625,-3.125E-02,1.5E-02));+#469 = VECTOR('',#470,1.);+#470 = DIRECTION('',(0.,-1.,0.));+#471 = ORIENTED_EDGE('',*,*,#472,.F.);+#472 = EDGE_CURVE('',#473,#465,#475,.T.);+#473 = VERTEX_POINT('',#474);+#474 = CARTESIAN_POINT('',(-0.4625,0.25,1.5E-02));+#475 = LINE('',#476,#477);+#476 = CARTESIAN_POINT('',(-0.485,0.25,1.5E-02));+#477 = VECTOR('',#478,1.);+#478 = DIRECTION('',(1.,0.,0.));+#479 = ORIENTED_EDGE('',*,*,#480,.F.);+#480 = EDGE_CURVE('',#481,#473,#483,.T.);+#481 = VERTEX_POINT('',#482);+#482 = CARTESIAN_POINT('',(-0.4625,0.1875,1.5E-02));+#483 = LINE('',#484,#485);+#484 = CARTESIAN_POINT('',(-0.4625,3.125E-02,1.5E-02));+#485 = VECTOR('',#486,1.);+#486 = DIRECTION('',(0.,1.,0.));+#487 = ORIENTED_EDGE('',*,*,#488,.F.);+#488 = EDGE_CURVE('',#489,#481,#491,.T.);+#489 = VERTEX_POINT('',#490);+#490 = CARTESIAN_POINT('',(-0.35,0.1875,1.5E-02));+#491 = LINE('',#492,#493);+#492 = CARTESIAN_POINT('',(-0.47375,0.1875,1.5E-02));+#493 = VECTOR('',#494,1.);+#494 = DIRECTION('',(-1.,0.,0.));+#495 = ORIENTED_EDGE('',*,*,#496,.F.);+#496 = EDGE_CURVE('',#497,#489,#499,.T.);+#497 = VERTEX_POINT('',#498);+#498 = CARTESIAN_POINT('',(-0.35,-0.1875,1.5E-02));+#499 = LINE('',#500,#501);+#500 = CARTESIAN_POINT('',(-0.35,-0.25,1.5E-02));+#501 = VECTOR('',#502,1.);+#502 = DIRECTION('',(0.,1.,0.));+#503 = ORIENTED_EDGE('',*,*,#504,.F.);+#504 = EDGE_CURVE('',#424,#497,#505,.T.);+#505 = LINE('',#506,#507);+#506 = CARTESIAN_POINT('',(-1.125E-02,-0.1875,1.5E-02));+#507 = VECTOR('',#508,1.);+#508 = DIRECTION('',(1.,0.,0.));+#509 = FACE_BOUND('',#510,.F.);+#510 = EDGE_LOOP('',(#511,#521,#529));+#511 = ORIENTED_EDGE('',*,*,#512,.T.);+#512 = EDGE_CURVE('',#513,#515,#517,.T.);+#513 = VERTEX_POINT('',#514);+#514 = CARTESIAN_POINT('',(0.173205080757,0.2,1.5E-02));+#515 = VERTEX_POINT('',#516);+#516 = CARTESIAN_POINT('',(0.173205080757,-0.2,1.5E-02));+#517 = LINE('',#518,#519);+#518 = CARTESIAN_POINT('',(0.173205080757,0.2,1.5E-02));+#519 = VECTOR('',#520,1.);+#520 = DIRECTION('',(0.,-1.,0.));+#521 = ORIENTED_EDGE('',*,*,#522,.T.);+#522 = EDGE_CURVE('',#515,#523,#525,.T.);+#523 = VERTEX_POINT('',#524);+#524 = CARTESIAN_POINT('',(-0.173205080757,0.,1.5E-02));+#525 = LINE('',#526,#527);+#526 = CARTESIAN_POINT('',(0.173205080757,-0.2,1.5E-02));+#527 = VECTOR('',#528,1.);+#528 = DIRECTION('',(-0.866025403784,0.5,0.));+#529 = ORIENTED_EDGE('',*,*,#530,.T.);+#530 = EDGE_CURVE('',#523,#513,#531,.T.);+#531 = LINE('',#532,#533);+#532 = CARTESIAN_POINT('',(-0.173205080757,0.,1.5E-02));+#533 = VECTOR('',#534,1.);+#534 = DIRECTION('',(0.866025403784,0.5,0.));+#535 = PLANE('',#536);+#536 = AXIS2_PLACEMENT_3D('',#537,#538,#539);+#537 = CARTESIAN_POINT('',(-0.485,-0.25,1.5E-02));+#538 = DIRECTION('',(0.,0.,1.));+#539 = DIRECTION('',(1.,0.,0.));+#540 = ADVANCED_FACE('',(#541),#602,.F.);+#541 = FACE_BOUND('',#542,.F.);+#542 = EDGE_LOOP('',(#543,#553,#559,#560,#561,#562,#570,#578,#587,#595)+);+#543 = ORIENTED_EDGE('',*,*,#544,.F.);+#544 = EDGE_CURVE('',#545,#547,#549,.T.);+#545 = VERTEX_POINT('',#546);+#546 = CARTESIAN_POINT('',(0.4625,-0.25,0.));+#547 = VERTEX_POINT('',#548);+#548 = CARTESIAN_POINT('',(0.485,-0.25,-1.734723475977E-18));+#549 = LINE('',#550,#551);+#550 = CARTESIAN_POINT('',(0.35,-0.25,0.));+#551 = VECTOR('',#552,1.);+#552 = DIRECTION('',(1.,0.,0.));+#553 = ORIENTED_EDGE('',*,*,#554,.F.);+#554 = EDGE_CURVE('',#166,#545,#555,.T.);+#555 = LINE('',#556,#557);+#556 = CARTESIAN_POINT('',(0.4625,-0.25,0.15));+#557 = VECTOR('',#558,1.);+#558 = DIRECTION('',(0.,0.,-1.));+#559 = ORIENTED_EDGE('',*,*,#165,.T.);+#560 = ORIENTED_EDGE('',*,*,#157,.T.);+#561 = ORIENTED_EDGE('',*,*,#149,.F.);+#562 = ORIENTED_EDGE('',*,*,#563,.F.);+#563 = EDGE_CURVE('',#564,#142,#566,.T.);+#564 = VERTEX_POINT('',#565);+#565 = CARTESIAN_POINT('',(0.4625,-0.25,0.2));+#566 = LINE('',#567,#568);+#567 = CARTESIAN_POINT('',(0.4625,-0.25,0.15));+#568 = VECTOR('',#569,1.);+#569 = DIRECTION('',(0.,0.,-1.));+#570 = ORIENTED_EDGE('',*,*,#571,.T.);+#571 = EDGE_CURVE('',#564,#572,#574,.T.);+#572 = VERTEX_POINT('',#573);+#573 = CARTESIAN_POINT('',(0.485,-0.25,0.2));+#574 = LINE('',#575,#576);+#575 = CARTESIAN_POINT('',(0.35,-0.25,0.2));+#576 = VECTOR('',#577,1.);+#577 = DIRECTION('',(1.,0.,0.));+#578 = ORIENTED_EDGE('',*,*,#579,.F.);+#579 = EDGE_CURVE('',#580,#572,#582,.T.);+#580 = VERTEX_POINT('',#581);+#581 = CARTESIAN_POINT('',(0.5,-0.25,0.185));+#582 = CIRCLE('',#583,1.5E-02);+#583 = AXIS2_PLACEMENT_3D('',#584,#585,#586);+#584 = CARTESIAN_POINT('',(0.485,-0.25,0.185));+#585 = DIRECTION('',(0.,-1.,0.));+#586 = DIRECTION('',(0.,0.,1.));+#587 = ORIENTED_EDGE('',*,*,#588,.F.);+#588 = EDGE_CURVE('',#589,#580,#591,.T.);+#589 = VERTEX_POINT('',#590);+#590 = CARTESIAN_POINT('',(0.5,-0.25,1.5E-02));+#591 = LINE('',#592,#593);+#592 = CARTESIAN_POINT('',(0.5,-0.25,0.));+#593 = VECTOR('',#594,1.);+#594 = DIRECTION('',(0.,0.,1.));+#595 = ORIENTED_EDGE('',*,*,#596,.T.);+#596 = EDGE_CURVE('',#589,#547,#597,.T.);+#597 = CIRCLE('',#598,1.5E-02);+#598 = AXIS2_PLACEMENT_3D('',#599,#600,#601);+#599 = CARTESIAN_POINT('',(0.485,-0.25,1.5E-02));+#600 = DIRECTION('',(0.,1.,0.));+#601 = DIRECTION('',(0.,0.,1.));+#602 = PLANE('',#603);+#603 = AXIS2_PLACEMENT_3D('',#604,#605,#606);+#604 = CARTESIAN_POINT('',(0.35,-0.25,0.));+#605 = DIRECTION('',(0.,1.,0.));+#606 = DIRECTION('',(0.,0.,1.));+#607 = ADVANCED_FACE('',(#608),#626,.T.);+#608 = FACE_BOUND('',#609,.T.);+#609 = EDGE_LOOP('',(#610,#618,#619,#620));+#610 = ORIENTED_EDGE('',*,*,#611,.F.);+#611 = EDGE_CURVE('',#214,#612,#614,.T.);+#612 = VERTEX_POINT('',#613);+#613 = CARTESIAN_POINT('',(0.4625,-0.1875,0.185));+#614 = LINE('',#615,#616);+#615 = CARTESIAN_POINT('',(-1.125E-02,-0.1875,0.185));+#616 = VECTOR('',#617,1.);+#617 = DIRECTION('',(1.,0.,0.));+#618 = ORIENTED_EDGE('',*,*,#213,.T.);+#619 = ORIENTED_EDGE('',*,*,#141,.T.);+#620 = ORIENTED_EDGE('',*,*,#621,.F.);+#621 = EDGE_CURVE('',#612,#142,#622,.T.);+#622 = LINE('',#623,#624);+#623 = CARTESIAN_POINT('',(0.4625,-0.28125,0.185));+#624 = VECTOR('',#625,1.);+#625 = DIRECTION('',(0.,-1.,0.));+#626 = PLANE('',#627);+#627 = AXIS2_PLACEMENT_3D('',#628,#629,#630);+#628 = CARTESIAN_POINT('',(-0.485,-0.25,0.185));+#629 = DIRECTION('',(0.,0.,1.));+#630 = DIRECTION('',(1.,0.,0.));+#631 = ADVANCED_FACE('',(#632),#657,.T.);+#632 = FACE_BOUND('',#633,.T.);+#633 = EDGE_LOOP('',(#634,#642,#643,#651));+#634 = ORIENTED_EDGE('',*,*,#635,.F.);+#635 = EDGE_CURVE('',#230,#636,#638,.T.);+#636 = VERTEX_POINT('',#637);+#637 = CARTESIAN_POINT('',(0.4625,0.25,0.185));+#638 = LINE('',#639,#640);+#639 = CARTESIAN_POINT('',(-0.485,0.25,0.185));+#640 = VECTOR('',#641,1.);+#641 = DIRECTION('',(1.,0.,0.));+#642 = ORIENTED_EDGE('',*,*,#229,.T.);+#643 = ORIENTED_EDGE('',*,*,#644,.F.);+#644 = EDGE_CURVE('',#645,#222,#647,.T.);+#645 = VERTEX_POINT('',#646);+#646 = CARTESIAN_POINT('',(0.4625,0.1875,0.185));+#647 = LINE('',#648,#649);+#648 = CARTESIAN_POINT('',(-0.47375,0.1875,0.185));+#649 = VECTOR('',#650,1.);+#650 = DIRECTION('',(-1.,0.,0.));+#651 = ORIENTED_EDGE('',*,*,#652,.F.);+#652 = EDGE_CURVE('',#636,#645,#653,.T.);+#653 = LINE('',#654,#655);+#654 = CARTESIAN_POINT('',(0.4625,-3.125E-02,0.185));+#655 = VECTOR('',#656,1.);+#656 = DIRECTION('',(0.,-1.,0.));+#657 = PLANE('',#658);+#658 = AXIS2_PLACEMENT_3D('',#659,#660,#661);+#659 = CARTESIAN_POINT('',(-0.485,-0.25,0.185));+#660 = DIRECTION('',(0.,0.,1.));+#661 = DIRECTION('',(1.,0.,0.));+#662 = ADVANCED_FACE('',(#663),#690,.T.);+#663 = FACE_BOUND('',#664,.T.);+#664 = EDGE_LOOP('',(#665,#666,#675,#683));+#665 = ORIENTED_EDGE('',*,*,#221,.F.);+#666 = ORIENTED_EDGE('',*,*,#667,.T.);+#667 = EDGE_CURVE('',#214,#668,#670,.T.);+#668 = VERTEX_POINT('',#669);+#669 = CARTESIAN_POINT('',(0.365,-0.1875,0.2));+#670 = CIRCLE('',#671,1.5E-02);+#671 = AXIS2_PLACEMENT_3D('',#672,#673,#674);+#672 = CARTESIAN_POINT('',(0.365,-0.1875,0.185));+#673 = DIRECTION('',(0.,1.,-0.));+#674 = DIRECTION('',(-1.,0.,0.));+#675 = ORIENTED_EDGE('',*,*,#676,.T.);+#676 = EDGE_CURVE('',#668,#677,#679,.T.);+#677 = VERTEX_POINT('',#678);+#678 = CARTESIAN_POINT('',(0.365,0.1875,0.2));+#679 = LINE('',#680,#681);+#680 = CARTESIAN_POINT('',(0.365,-0.25,0.2));+#681 = VECTOR('',#682,1.);+#682 = DIRECTION('',(0.,1.,0.));+#683 = ORIENTED_EDGE('',*,*,#684,.F.);+#684 = EDGE_CURVE('',#222,#677,#685,.T.);+#685 = CIRCLE('',#686,1.5E-02);+#686 = AXIS2_PLACEMENT_3D('',#687,#688,#689);+#687 = CARTESIAN_POINT('',(0.365,0.1875,0.185));+#688 = DIRECTION('',(0.,1.,-0.));+#689 = DIRECTION('',(-1.,0.,0.));+#690 = CYLINDRICAL_SURFACE('',#691,1.5E-02);+#691 = AXIS2_PLACEMENT_3D('',#692,#693,#694);+#692 = CARTESIAN_POINT('',(0.365,-0.25,0.185));+#693 = DIRECTION('',(0.,1.,0.));+#694 = DIRECTION('',(-1.,0.,0.));+#695 = ADVANCED_FACE('',(#696),#746,.T.);+#696 = FACE_BOUND('',#697,.T.);+#697 = EDGE_LOOP('',(#698,#706,#714,#720,#721,#722,#723,#731,#739,#745)+);+#698 = ORIENTED_EDGE('',*,*,#699,.F.);+#699 = EDGE_CURVE('',#700,#473,#702,.T.);+#700 = VERTEX_POINT('',#701);+#701 = CARTESIAN_POINT('',(-0.485,0.25,1.5E-02));+#702 = LINE('',#703,#704);+#703 = CARTESIAN_POINT('',(-0.485,0.25,1.5E-02));+#704 = VECTOR('',#705,1.);+#705 = DIRECTION('',(1.,0.,0.));+#706 = ORIENTED_EDGE('',*,*,#707,.T.);+#707 = EDGE_CURVE('',#700,#708,#710,.T.);+#708 = VERTEX_POINT('',#709);+#709 = CARTESIAN_POINT('',(-0.485,0.25,0.185));+#710 = LINE('',#711,#712);+#711 = CARTESIAN_POINT('',(-0.485,0.25,1.5E-02));+#712 = VECTOR('',#713,1.);+#713 = DIRECTION('',(0.,0.,1.));+#714 = ORIENTED_EDGE('',*,*,#715,.T.);+#715 = EDGE_CURVE('',#708,#252,#716,.T.);+#716 = LINE('',#717,#718);+#717 = CARTESIAN_POINT('',(-0.485,0.25,0.185));+#718 = VECTOR('',#719,1.);+#719 = DIRECTION('',(1.,0.,0.));+#720 = ORIENTED_EDGE('',*,*,#251,.T.);+#721 = ORIENTED_EDGE('',*,*,#285,.F.);+#722 = ORIENTED_EDGE('',*,*,#635,.T.);+#723 = ORIENTED_EDGE('',*,*,#724,.T.);+#724 = EDGE_CURVE('',#636,#725,#727,.T.);+#725 = VERTEX_POINT('',#726);+#726 = CARTESIAN_POINT('',(0.485,0.25,0.185));+#727 = LINE('',#728,#729);+#728 = CARTESIAN_POINT('',(-0.485,0.25,0.185));+#729 = VECTOR('',#730,1.);+#730 = DIRECTION('',(1.,0.,0.));+#731 = ORIENTED_EDGE('',*,*,#732,.F.);+#732 = EDGE_CURVE('',#733,#725,#735,.T.);+#733 = VERTEX_POINT('',#734);+#734 = CARTESIAN_POINT('',(0.485,0.25,1.5E-02));+#735 = LINE('',#736,#737);+#736 = CARTESIAN_POINT('',(0.485,0.25,1.5E-02));+#737 = VECTOR('',#738,1.);+#738 = DIRECTION('',(0.,0.,1.));+#739 = ORIENTED_EDGE('',*,*,#740,.F.);+#740 = EDGE_CURVE('',#465,#733,#741,.T.);+#741 = LINE('',#742,#743);+#742 = CARTESIAN_POINT('',(-0.485,0.25,1.5E-02));+#743 = VECTOR('',#744,1.);+#744 = DIRECTION('',(1.,0.,0.));+#745 = ORIENTED_EDGE('',*,*,#472,.F.);+#746 = PLANE('',#747);+#747 = AXIS2_PLACEMENT_3D('',#748,#749,#750);+#748 = CARTESIAN_POINT('',(-0.485,0.25,1.5E-02));+#749 = DIRECTION('',(0.,1.,0.));+#750 = DIRECTION('',(0.,0.,1.));+#751 = ADVANCED_FACE('',(#752),#770,.F.);+#752 = FACE_BOUND('',#753,.F.);+#753 = EDGE_LOOP('',(#754,#762,#768,#769));+#754 = ORIENTED_EDGE('',*,*,#755,.F.);+#755 = EDGE_CURVE('',#756,#310,#758,.T.);+#756 = VERTEX_POINT('',#757);+#757 = CARTESIAN_POINT('',(-0.4625,0.1875,0.2));+#758 = LINE('',#759,#760);+#759 = CARTESIAN_POINT('',(-0.48125,0.1875,0.2));+#760 = VECTOR('',#761,1.);+#761 = DIRECTION('',(1.,0.,0.));+#762 = ORIENTED_EDGE('',*,*,#763,.T.);+#763 = EDGE_CURVE('',#756,#260,#764,.T.);+#764 = LINE('',#765,#766);+#765 = CARTESIAN_POINT('',(-0.4625,0.1875,0.3));+#766 = VECTOR('',#767,1.);+#767 = DIRECTION('',(-0.,-0.,-1.));+#768 = ORIENTED_EDGE('',*,*,#267,.F.);+#769 = ORIENTED_EDGE('',*,*,#317,.F.);+#770 = PLANE('',#771);+#771 = AXIS2_PLACEMENT_3D('',#772,#773,#774);+#772 = CARTESIAN_POINT('',(-0.4625,0.1875,0.3));+#773 = DIRECTION('',(0.,-1.,0.));+#774 = DIRECTION('',(1.,0.,0.));+#775 = ADVANCED_FACE('',(#776),#794,.F.);+#776 = FACE_BOUND('',#777,.F.);+#777 = EDGE_LOOP('',(#778,#779,#787,#793));+#778 = ORIENTED_EDGE('',*,*,#763,.F.);+#779 = ORIENTED_EDGE('',*,*,#780,.F.);+#780 = EDGE_CURVE('',#781,#756,#783,.T.);+#781 = VERTEX_POINT('',#782);+#782 = CARTESIAN_POINT('',(-0.4625,0.25,0.2));+#783 = LINE('',#784,#785);+#784 = CARTESIAN_POINT('',(-0.4625,3.125E-02,0.2));+#785 = VECTOR('',#786,1.);+#786 = DIRECTION('',(0.,-1.,0.));+#787 = ORIENTED_EDGE('',*,*,#788,.F.);+#788 = EDGE_CURVE('',#252,#781,#789,.T.);+#789 = LINE('',#790,#791);+#790 = CARTESIAN_POINT('',(-0.4625,0.25,0.15));+#791 = VECTOR('',#792,1.);+#792 = DIRECTION('',(0.,0.,1.));+#793 = ORIENTED_EDGE('',*,*,#259,.F.);+#794 = PLANE('',#795);+#795 = AXIS2_PLACEMENT_3D('',#796,#797,#798);+#796 = CARTESIAN_POINT('',(-0.4625,0.3125,0.3));+#797 = DIRECTION('',(-1.,0.,0.));+#798 = DIRECTION('',(0.,-1.,0.));+#799 = ADVANCED_FACE('',(#800),#818,.F.);+#800 = FACE_BOUND('',#801,.F.);+#801 = EDGE_LOOP('',(#802,#810,#816,#817));+#802 = ORIENTED_EDGE('',*,*,#803,.F.);+#803 = EDGE_CURVE('',#804,#333,#806,.T.);+#804 = VERTEX_POINT('',#805);+#805 = CARTESIAN_POINT('',(-0.4625,-0.1875,0.2));+#806 = LINE('',#807,#808);+#807 = CARTESIAN_POINT('',(-0.4625,-0.1875,0.3));+#808 = VECTOR('',#809,1.);+#809 = DIRECTION('',(-0.,-0.,-1.));+#810 = ORIENTED_EDGE('',*,*,#811,.F.);+#811 = EDGE_CURVE('',#301,#804,#812,.T.);+#812 = LINE('',#813,#814);+#813 = CARTESIAN_POINT('',(-1.875E-02,-0.1875,0.2));+#814 = VECTOR('',#815,1.);+#815 = DIRECTION('',(-1.,0.,0.));+#816 = ORIENTED_EDGE('',*,*,#300,.T.);+#817 = ORIENTED_EDGE('',*,*,#342,.F.);+#818 = PLANE('',#819);+#819 = AXIS2_PLACEMENT_3D('',#820,#821,#822);+#820 = CARTESIAN_POINT('',(0.4625,-0.1875,0.3));+#821 = DIRECTION('',(0.,1.,0.));+#822 = DIRECTION('',(-1.,0.,0.));+#823 = ADVANCED_FACE('',(#824),#851,.T.);+#824 = FACE_BOUND('',#825,.T.);+#825 = EDGE_LOOP('',(#826,#834,#840,#841,#847,#848,#849,#850));+#826 = ORIENTED_EDGE('',*,*,#827,.F.);+#827 = EDGE_CURVE('',#828,#781,#830,.T.);+#828 = VERTEX_POINT('',#829);+#829 = CARTESIAN_POINT('',(-0.485,0.25,0.2));+#830 = LINE('',#831,#832);+#831 = CARTESIAN_POINT('',(-0.5,0.25,0.2));+#832 = VECTOR('',#833,1.);+#833 = DIRECTION('',(1.,0.,0.));+#834 = ORIENTED_EDGE('',*,*,#835,.F.);+#835 = EDGE_CURVE('',#384,#828,#836,.T.);+#836 = LINE('',#837,#838);+#837 = CARTESIAN_POINT('',(-0.485,-0.25,0.2));+#838 = VECTOR('',#839,1.);+#839 = DIRECTION('',(0.,1.,0.));+#840 = ORIENTED_EDGE('',*,*,#392,.T.);+#841 = ORIENTED_EDGE('',*,*,#842,.F.);+#842 = EDGE_CURVE('',#804,#393,#843,.T.);+#843 = LINE('',#844,#845);+#844 = CARTESIAN_POINT('',(-0.4625,-0.21875,0.2));+#845 = VECTOR('',#846,1.);+#846 = DIRECTION('',(0.,-1.,0.));+#847 = ORIENTED_EDGE('',*,*,#811,.F.);+#848 = ORIENTED_EDGE('',*,*,#309,.T.);+#849 = ORIENTED_EDGE('',*,*,#755,.F.);+#850 = ORIENTED_EDGE('',*,*,#780,.F.);+#851 = PLANE('',#852);+#852 = AXIS2_PLACEMENT_3D('',#853,#854,#855);+#853 = CARTESIAN_POINT('',(-0.5,-0.25,0.2));+#854 = DIRECTION('',(0.,0.,1.));+#855 = DIRECTION('',(1.,0.,0.));+#856 = ADVANCED_FACE('',(#857),#863,.F.);+#857 = FACE_BOUND('',#858,.F.);+#858 = EDGE_LOOP('',(#859,#860,#861,#862));+#859 = ORIENTED_EDGE('',*,*,#842,.F.);+#860 = ORIENTED_EDGE('',*,*,#803,.T.);+#861 = ORIENTED_EDGE('',*,*,#332,.F.);+#862 = ORIENTED_EDGE('',*,*,#400,.T.);+#863 = PLANE('',#864);+#864 = AXIS2_PLACEMENT_3D('',#865,#866,#867);+#865 = CARTESIAN_POINT('',(-0.4625,-0.1875,0.3));+#866 = DIRECTION('',(-1.,0.,0.));+#867 = DIRECTION('',(0.,-1.,0.));+#868 = ADVANCED_FACE('',(#869),#926,.F.);+#869 = FACE_BOUND('',#870,.F.);+#870 = EDGE_LOOP('',(#871,#881,#887,#888,#896,#904,#912,#920));+#871 = ORIENTED_EDGE('',*,*,#872,.F.);+#872 = EDGE_CURVE('',#873,#875,#877,.T.);+#873 = VERTEX_POINT('',#874);+#874 = CARTESIAN_POINT('',(-0.485,0.25,-1.734723475977E-18));+#875 = VERTEX_POINT('',#876);+#876 = CARTESIAN_POINT('',(-0.4625,0.25,0.));+#877 = LINE('',#878,#879);+#878 = CARTESIAN_POINT('',(-0.5,0.25,0.));+#879 = VECTOR('',#880,1.);+#880 = DIRECTION('',(1.,0.,0.));+#881 = ORIENTED_EDGE('',*,*,#882,.F.);+#882 = EDGE_CURVE('',#357,#873,#883,.T.);+#883 = LINE('',#884,#885);+#884 = CARTESIAN_POINT('',(-0.485,-0.25,-1.734723475977E-18));+#885 = VECTOR('',#886,1.);+#886 = DIRECTION('',(0.,1.,0.));+#887 = ORIENTED_EDGE('',*,*,#356,.T.);+#888 = ORIENTED_EDGE('',*,*,#889,.F.);+#889 = EDGE_CURVE('',#890,#359,#892,.T.);+#890 = VERTEX_POINT('',#891);+#891 = CARTESIAN_POINT('',(-0.4625,-0.1875,0.));+#892 = LINE('',#893,#894);+#893 = CARTESIAN_POINT('',(-0.4625,-0.21875,0.));+#894 = VECTOR('',#895,1.);+#895 = DIRECTION('',(0.,-1.,0.));+#896 = ORIENTED_EDGE('',*,*,#897,.F.);+#897 = EDGE_CURVE('',#898,#890,#900,.T.);+#898 = VERTEX_POINT('',#899);+#899 = CARTESIAN_POINT('',(-0.365,-0.1875,-1.734723475977E-18));+#900 = LINE('',#901,#902);+#901 = CARTESIAN_POINT('',(-1.875E-02,-0.1875,0.));+#902 = VECTOR('',#903,1.);+#903 = DIRECTION('',(-1.,0.,0.));+#904 = ORIENTED_EDGE('',*,*,#905,.T.);+#905 = EDGE_CURVE('',#898,#906,#908,.T.);+#906 = VERTEX_POINT('',#907);+#907 = CARTESIAN_POINT('',(-0.365,0.1875,-1.734723475977E-18));+#908 = LINE('',#909,#910);+#909 = CARTESIAN_POINT('',(-0.365,-0.25,-1.734723475977E-18));+#910 = VECTOR('',#911,1.);+#911 = DIRECTION('',(0.,1.,0.));+#912 = ORIENTED_EDGE('',*,*,#913,.F.);+#913 = EDGE_CURVE('',#914,#906,#916,.T.);+#914 = VERTEX_POINT('',#915);+#915 = CARTESIAN_POINT('',(-0.4625,0.1875,0.));+#916 = LINE('',#917,#918);+#917 = CARTESIAN_POINT('',(-0.48125,0.1875,0.));+#918 = VECTOR('',#919,1.);+#919 = DIRECTION('',(1.,0.,0.));+#920 = ORIENTED_EDGE('',*,*,#921,.F.);+#921 = EDGE_CURVE('',#875,#914,#922,.T.);+#922 = LINE('',#923,#924);+#923 = CARTESIAN_POINT('',(-0.4625,3.125E-02,0.));+#924 = VECTOR('',#925,1.);+#925 = DIRECTION('',(0.,-1.,0.));+#926 = PLANE('',#927);+#927 = AXIS2_PLACEMENT_3D('',#928,#929,#930);+#928 = CARTESIAN_POINT('',(-0.5,-0.25,0.));+#929 = DIRECTION('',(0.,0.,1.));+#930 = DIRECTION('',(1.,0.,0.));+#931 = ADVANCED_FACE('',(#932),#951,.T.);+#932 = FACE_BOUND('',#933,.F.);+#933 = EDGE_LOOP('',(#934,#935,#936,#945));+#934 = ORIENTED_EDGE('',*,*,#366,.T.);+#935 = ORIENTED_EDGE('',*,*,#882,.T.);+#936 = ORIENTED_EDGE('',*,*,#937,.F.);+#937 = EDGE_CURVE('',#938,#873,#940,.T.);+#938 = VERTEX_POINT('',#939);+#939 = CARTESIAN_POINT('',(-0.5,0.25,1.5E-02));+#940 = CIRCLE('',#941,1.5E-02);+#941 = AXIS2_PLACEMENT_3D('',#942,#943,#944);+#942 = CARTESIAN_POINT('',(-0.485,0.25,1.5E-02));+#943 = DIRECTION('',(0.,-1.,0.));+#944 = DIRECTION('',(0.,0.,1.));+#945 = ORIENTED_EDGE('',*,*,#946,.F.);+#946 = EDGE_CURVE('',#367,#938,#947,.T.);+#947 = LINE('',#948,#949);+#948 = CARTESIAN_POINT('',(-0.5,-0.25,1.5E-02));+#949 = VECTOR('',#950,1.);+#950 = DIRECTION('',(0.,1.,0.));+#951 = CYLINDRICAL_SURFACE('',#952,1.5E-02);+#952 = AXIS2_PLACEMENT_3D('',#953,#954,#955);+#953 = CARTESIAN_POINT('',(-0.485,-0.25,1.5E-02));+#954 = DIRECTION('',(0.,1.,0.));+#955 = DIRECTION('',(-1.,0.,0.));+#956 = ADVANCED_FACE('',(#957),#968,.F.);+#957 = FACE_BOUND('',#958,.F.);+#958 = EDGE_LOOP('',(#959,#960,#966,#967));+#959 = ORIENTED_EDGE('',*,*,#423,.T.);+#960 = ORIENTED_EDGE('',*,*,#961,.T.);+#961 = EDGE_CURVE('',#424,#890,#962,.T.);+#962 = LINE('',#963,#964);+#963 = CARTESIAN_POINT('',(-0.4625,-0.1875,0.3));+#964 = VECTOR('',#965,1.);+#965 = DIRECTION('',(-0.,-0.,-1.));+#966 = ORIENTED_EDGE('',*,*,#889,.T.);+#967 = ORIENTED_EDGE('',*,*,#409,.T.);+#968 = PLANE('',#969);+#969 = AXIS2_PLACEMENT_3D('',#970,#971,#972);+#970 = CARTESIAN_POINT('',(-0.4625,-0.1875,0.3));+#971 = DIRECTION('',(-1.,0.,0.));+#972 = DIRECTION('',(0.,-1.,0.));+#973 = ADVANCED_FACE('',(#974),#992,.F.);+#974 = FACE_BOUND('',#975,.F.);+#975 = EDGE_LOOP('',(#976,#977,#978,#986));+#976 = ORIENTED_EDGE('',*,*,#375,.F.);+#977 = ORIENTED_EDGE('',*,*,#946,.T.);+#978 = ORIENTED_EDGE('',*,*,#979,.T.);+#979 = EDGE_CURVE('',#938,#980,#982,.T.);+#980 = VERTEX_POINT('',#981);+#981 = CARTESIAN_POINT('',(-0.5,0.25,0.185));+#982 = LINE('',#983,#984);+#983 = CARTESIAN_POINT('',(-0.5,0.25,0.));+#984 = VECTOR('',#985,1.);+#985 = DIRECTION('',(0.,0.,1.));+#986 = ORIENTED_EDGE('',*,*,#987,.F.);+#987 = EDGE_CURVE('',#376,#980,#988,.T.);+#988 = LINE('',#989,#990);+#989 = CARTESIAN_POINT('',(-0.5,-0.25,0.185));+#990 = VECTOR('',#991,1.);+#991 = DIRECTION('',(0.,1.,0.));+#992 = PLANE('',#993);+#993 = AXIS2_PLACEMENT_3D('',#994,#995,#996);+#994 = CARTESIAN_POINT('',(-0.5,-0.25,0.));+#995 = DIRECTION('',(1.,0.,0.));+#996 = DIRECTION('',(0.,0.,1.));+#997 = ADVANCED_FACE('',(#998),#1010,.T.);+#998 = FACE_BOUND('',#999,.T.);+#999 = EDGE_LOOP('',(#1000,#1001,#1002,#1009));+#1000 = ORIENTED_EDGE('',*,*,#383,.T.);+#1001 = ORIENTED_EDGE('',*,*,#835,.T.);+#1002 = ORIENTED_EDGE('',*,*,#1003,.F.);+#1003 = EDGE_CURVE('',#980,#828,#1004,.T.);+#1004 = CIRCLE('',#1005,1.5E-02);+#1005 = AXIS2_PLACEMENT_3D('',#1006,#1007,#1008);+#1006 = CARTESIAN_POINT('',(-0.485,0.25,0.185));+#1007 = DIRECTION('',(0.,1.,0.));+#1008 = DIRECTION('',(0.,0.,1.));+#1009 = ORIENTED_EDGE('',*,*,#987,.F.);+#1010 = CYLINDRICAL_SURFACE('',#1011,1.5E-02);+#1011 = AXIS2_PLACEMENT_3D('',#1012,#1013,#1014);+#1012 = CARTESIAN_POINT('',(-0.485,-0.25,0.185));+#1013 = DIRECTION('',(0.,1.,0.));+#1014 = DIRECTION('',(-1.,0.,0.));+#1015 = ADVANCED_FACE('',(#1016),#1028,.F.);+#1016 = FACE_BOUND('',#1017,.F.);+#1017 = EDGE_LOOP('',(#1018,#1019,#1020,#1027));+#1018 = ORIENTED_EDGE('',*,*,#961,.F.);+#1019 = ORIENTED_EDGE('',*,*,#504,.T.);+#1020 = ORIENTED_EDGE('',*,*,#1021,.T.);+#1021 = EDGE_CURVE('',#497,#898,#1022,.T.);+#1022 = CIRCLE('',#1023,1.5E-02);+#1023 = AXIS2_PLACEMENT_3D('',#1024,#1025,#1026);+#1024 = CARTESIAN_POINT('',(-0.365,-0.1875,1.5E-02));+#1025 = DIRECTION('',(-0.,1.,0.));+#1026 = DIRECTION('',(1.,0.,0.));+#1027 = ORIENTED_EDGE('',*,*,#897,.T.);+#1028 = PLANE('',#1029);+#1029 = AXIS2_PLACEMENT_3D('',#1030,#1031,#1032);+#1030 = CARTESIAN_POINT('',(0.4625,-0.1875,0.3));+#1031 = DIRECTION('',(0.,1.,0.));+#1032 = DIRECTION('',(-1.,0.,0.));+#1033 = ADVANCED_FACE('',(#1034),#1046,.T.);+#1034 = FACE_BOUND('',#1035,.T.);+#1035 = EDGE_LOOP('',(#1036,#1037,#1038,#1039));+#1036 = ORIENTED_EDGE('',*,*,#496,.F.);+#1037 = ORIENTED_EDGE('',*,*,#1021,.T.);+#1038 = ORIENTED_EDGE('',*,*,#905,.T.);+#1039 = ORIENTED_EDGE('',*,*,#1040,.F.);+#1040 = EDGE_CURVE('',#489,#906,#1041,.T.);+#1041 = CIRCLE('',#1042,1.5E-02);+#1042 = AXIS2_PLACEMENT_3D('',#1043,#1044,#1045);+#1043 = CARTESIAN_POINT('',(-0.365,0.1875,1.5E-02));+#1044 = DIRECTION('',(-0.,1.,0.));+#1045 = DIRECTION('',(1.,0.,0.));+#1046 = CYLINDRICAL_SURFACE('',#1047,1.5E-02);+#1047 = AXIS2_PLACEMENT_3D('',#1048,#1049,#1050);+#1048 = CARTESIAN_POINT('',(-0.365,-0.25,1.5E-02));+#1049 = DIRECTION('',(0.,1.,0.));+#1050 = DIRECTION('',(1.,0.,0.));+#1051 = ADVANCED_FACE('',(#1052),#1063,.F.);+#1052 = FACE_BOUND('',#1053,.F.);+#1053 = EDGE_LOOP('',(#1054,#1055,#1061,#1062));+#1054 = ORIENTED_EDGE('',*,*,#488,.T.);+#1055 = ORIENTED_EDGE('',*,*,#1056,.T.);+#1056 = EDGE_CURVE('',#481,#914,#1057,.T.);+#1057 = LINE('',#1058,#1059);+#1058 = CARTESIAN_POINT('',(-0.4625,0.1875,0.3));+#1059 = VECTOR('',#1060,1.);+#1060 = DIRECTION('',(-0.,-0.,-1.));+#1061 = ORIENTED_EDGE('',*,*,#913,.T.);+#1062 = ORIENTED_EDGE('',*,*,#1040,.F.);+#1063 = PLANE('',#1064);+#1064 = AXIS2_PLACEMENT_3D('',#1065,#1066,#1067);+#1065 = CARTESIAN_POINT('',(-0.4625,0.1875,0.3));+#1066 = DIRECTION('',(0.,-1.,0.));+#1067 = DIRECTION('',(1.,0.,0.));+#1068 = ADVANCED_FACE('',(#1069),#1080,.F.);+#1069 = FACE_BOUND('',#1070,.F.);+#1070 = EDGE_LOOP('',(#1071,#1072,#1073,#1079));+#1071 = ORIENTED_EDGE('',*,*,#1056,.F.);+#1072 = ORIENTED_EDGE('',*,*,#480,.T.);+#1073 = ORIENTED_EDGE('',*,*,#1074,.F.);+#1074 = EDGE_CURVE('',#875,#473,#1075,.T.);+#1075 = LINE('',#1076,#1077);+#1076 = CARTESIAN_POINT('',(-0.4625,0.25,0.15));+#1077 = VECTOR('',#1078,1.);+#1078 = DIRECTION('',(0.,0.,1.));+#1079 = ORIENTED_EDGE('',*,*,#921,.T.);+#1080 = PLANE('',#1081);+#1081 = AXIS2_PLACEMENT_3D('',#1082,#1083,#1084);+#1082 = CARTESIAN_POINT('',(-0.4625,0.3125,0.3));+#1083 = DIRECTION('',(-1.,0.,0.));+#1084 = DIRECTION('',(0.,-1.,0.));+#1085 = ADVANCED_FACE('',(#1086),#1111,.F.);+#1086 = FACE_BOUND('',#1087,.F.);+#1087 = EDGE_LOOP('',(#1088,#1089,#1097,#1105));+#1088 = ORIENTED_EDGE('',*,*,#464,.T.);+#1089 = ORIENTED_EDGE('',*,*,#1090,.T.);+#1090 = EDGE_CURVE('',#457,#1091,#1093,.T.);+#1091 = VERTEX_POINT('',#1092);+#1092 = CARTESIAN_POINT('',(0.4625,0.1875,0.));+#1093 = LINE('',#1094,#1095);+#1094 = CARTESIAN_POINT('',(0.4625,0.1875,0.3));+#1095 = VECTOR('',#1096,1.);+#1096 = DIRECTION('',(-0.,-0.,-1.));+#1097 = ORIENTED_EDGE('',*,*,#1098,.T.);+#1098 = EDGE_CURVE('',#1091,#1099,#1101,.T.);+#1099 = VERTEX_POINT('',#1100);+#1100 = CARTESIAN_POINT('',(0.4625,0.25,0.));+#1101 = LINE('',#1102,#1103);+#1102 = CARTESIAN_POINT('',(0.4625,-3.125E-02,0.));+#1103 = VECTOR('',#1104,1.);+#1104 = DIRECTION('',(0.,1.,0.));+#1105 = ORIENTED_EDGE('',*,*,#1106,.F.);+#1106 = EDGE_CURVE('',#465,#1099,#1107,.T.);+#1107 = LINE('',#1108,#1109);+#1108 = CARTESIAN_POINT('',(0.4625,0.25,0.15));+#1109 = VECTOR('',#1110,1.);+#1110 = DIRECTION('',(0.,0.,-1.));+#1111 = PLANE('',#1112);+#1112 = AXIS2_PLACEMENT_3D('',#1113,#1114,#1115);+#1113 = CARTESIAN_POINT('',(0.4625,0.1875,0.3));+#1114 = DIRECTION('',(1.,0.,0.));+#1115 = DIRECTION('',(0.,1.,0.));+#1116 = ADVANCED_FACE('',(#1117),#1136,.F.);+#1117 = FACE_BOUND('',#1118,.F.);+#1118 = EDGE_LOOP('',(#1119,#1120,#1121,#1130));+#1119 = ORIENTED_EDGE('',*,*,#1090,.F.);+#1120 = ORIENTED_EDGE('',*,*,#456,.T.);+#1121 = ORIENTED_EDGE('',*,*,#1122,.F.);+#1122 = EDGE_CURVE('',#1123,#449,#1125,.T.);+#1123 = VERTEX_POINT('',#1124);+#1124 = CARTESIAN_POINT('',(0.365,0.1875,-1.734723475977E-18));+#1125 = CIRCLE('',#1126,1.5E-02);+#1126 = AXIS2_PLACEMENT_3D('',#1127,#1128,#1129);+#1127 = CARTESIAN_POINT('',(0.365,0.1875,1.5E-02));+#1128 = DIRECTION('',(0.,1.,-0.));+#1129 = DIRECTION('',(-1.,0.,0.));+#1130 = ORIENTED_EDGE('',*,*,#1131,.T.);+#1131 = EDGE_CURVE('',#1123,#1091,#1132,.T.);+#1132 = LINE('',#1133,#1134);+#1133 = CARTESIAN_POINT('',(-5.625E-02,0.1875,0.));+#1134 = VECTOR('',#1135,1.);+#1135 = DIRECTION('',(1.,0.,0.));+#1136 = PLANE('',#1137);+#1137 = AXIS2_PLACEMENT_3D('',#1138,#1139,#1140);+#1138 = CARTESIAN_POINT('',(-0.4625,0.1875,0.3));+#1139 = DIRECTION('',(0.,-1.,0.));+#1140 = DIRECTION('',(1.,0.,0.));+#1141 = ADVANCED_FACE('',(#1142),#1161,.T.);+#1142 = FACE_BOUND('',#1143,.F.);+#1143 = EDGE_LOOP('',(#1144,#1145,#1154,#1160));+#1144 = ORIENTED_EDGE('',*,*,#448,.F.);+#1145 = ORIENTED_EDGE('',*,*,#1146,.F.);+#1146 = EDGE_CURVE('',#1147,#441,#1149,.T.);+#1147 = VERTEX_POINT('',#1148);+#1148 = CARTESIAN_POINT('',(0.365,-0.1875,-1.734723475977E-18));+#1149 = CIRCLE('',#1150,1.5E-02);+#1150 = AXIS2_PLACEMENT_3D('',#1151,#1152,#1153);+#1151 = CARTESIAN_POINT('',(0.365,-0.1875,1.5E-02));+#1152 = DIRECTION('',(0.,1.,-0.));+#1153 = DIRECTION('',(-1.,0.,0.));+#1154 = ORIENTED_EDGE('',*,*,#1155,.T.);+#1155 = EDGE_CURVE('',#1147,#1123,#1156,.T.);+#1156 = LINE('',#1157,#1158);+#1157 = CARTESIAN_POINT('',(0.365,-0.25,-1.734723475977E-18));+#1158 = VECTOR('',#1159,1.);+#1159 = DIRECTION('',(0.,1.,0.));+#1160 = ORIENTED_EDGE('',*,*,#1122,.T.);+#1161 = CYLINDRICAL_SURFACE('',#1162,1.5E-02);+#1162 = AXIS2_PLACEMENT_3D('',#1163,#1164,#1165);+#1163 = CARTESIAN_POINT('',(0.365,-0.25,1.5E-02));+#1164 = DIRECTION('',(0.,1.,0.));+#1165 = DIRECTION('',(-1.,0.,0.));+#1166 = ADVANCED_FACE('',(#1167),#1185,.F.);+#1167 = FACE_BOUND('',#1168,.F.);+#1168 = EDGE_LOOP('',(#1169,#1170,#1178,#1184));+#1169 = ORIENTED_EDGE('',*,*,#440,.T.);+#1170 = ORIENTED_EDGE('',*,*,#1171,.T.);+#1171 = EDGE_CURVE('',#433,#1172,#1174,.T.);+#1172 = VERTEX_POINT('',#1173);+#1173 = CARTESIAN_POINT('',(0.4625,-0.1875,0.));+#1174 = LINE('',#1175,#1176);+#1175 = CARTESIAN_POINT('',(0.4625,-0.1875,0.3));+#1176 = VECTOR('',#1177,1.);+#1177 = DIRECTION('',(-0.,-0.,-1.));+#1178 = ORIENTED_EDGE('',*,*,#1179,.T.);+#1179 = EDGE_CURVE('',#1172,#1147,#1180,.T.);+#1180 = LINE('',#1181,#1182);+#1181 = CARTESIAN_POINT('',(0.40625,-0.1875,0.));+#1182 = VECTOR('',#1183,1.);+#1183 = DIRECTION('',(-1.,0.,0.));+#1184 = ORIENTED_EDGE('',*,*,#1146,.T.);+#1185 = PLANE('',#1186);+#1186 = AXIS2_PLACEMENT_3D('',#1187,#1188,#1189);+#1187 = CARTESIAN_POINT('',(0.4625,-0.1875,0.3));+#1188 = DIRECTION('',(0.,1.,0.));+#1189 = DIRECTION('',(-1.,0.,0.));+#1190 = ADVANCED_FACE('',(#1191),#1202,.F.);+#1191 = FACE_BOUND('',#1192,.F.);+#1192 = EDGE_LOOP('',(#1193,#1194,#1195,#1196));+#1193 = ORIENTED_EDGE('',*,*,#1171,.F.);+#1194 = ORIENTED_EDGE('',*,*,#432,.T.);+#1195 = ORIENTED_EDGE('',*,*,#554,.T.);+#1196 = ORIENTED_EDGE('',*,*,#1197,.T.);+#1197 = EDGE_CURVE('',#545,#1172,#1198,.T.);+#1198 = LINE('',#1199,#1200);+#1199 = CARTESIAN_POINT('',(0.4625,-0.28125,0.));+#1200 = VECTOR('',#1201,1.);+#1201 = DIRECTION('',(0.,1.,0.));+#1202 = PLANE('',#1203);+#1203 = AXIS2_PLACEMENT_3D('',#1204,#1205,#1206);+#1204 = CARTESIAN_POINT('',(0.4625,-0.3125,0.3));+#1205 = DIRECTION('',(1.,0.,0.));+#1206 = DIRECTION('',(0.,1.,0.));+#1207 = ADVANCED_FACE('',(#1208),#1233,.T.);+#1208 = FACE_BOUND('',#1209,.T.);+#1209 = EDGE_LOOP('',(#1210,#1218,#1219,#1227));+#1210 = ORIENTED_EDGE('',*,*,#1211,.T.);+#1211 = EDGE_CURVE('',#1212,#513,#1214,.T.);+#1212 = VERTEX_POINT('',#1213);+#1213 = CARTESIAN_POINT('',(0.173205080757,0.2,7.5E-03));+#1214 = LINE('',#1215,#1216);+#1215 = CARTESIAN_POINT('',(0.173205080757,0.2,7.5E-03));+#1216 = VECTOR('',#1217,1.);+#1217 = DIRECTION('',(0.,0.,1.));+#1218 = ORIENTED_EDGE('',*,*,#512,.T.);+#1219 = ORIENTED_EDGE('',*,*,#1220,.F.);+#1220 = EDGE_CURVE('',#1221,#515,#1223,.T.);+#1221 = VERTEX_POINT('',#1222);+#1222 = CARTESIAN_POINT('',(0.173205080757,-0.2,7.5E-03));+#1223 = LINE('',#1224,#1225);+#1224 = CARTESIAN_POINT('',(0.173205080757,-0.2,7.5E-03));+#1225 = VECTOR('',#1226,1.);+#1226 = DIRECTION('',(0.,0.,1.));+#1227 = ORIENTED_EDGE('',*,*,#1228,.F.);+#1228 = EDGE_CURVE('',#1212,#1221,#1229,.T.);+#1229 = LINE('',#1230,#1231);+#1230 = CARTESIAN_POINT('',(0.173205080757,0.2,7.5E-03));+#1231 = VECTOR('',#1232,1.);+#1232 = DIRECTION('',(0.,-1.,0.));+#1233 = PLANE('',#1234);+#1234 = AXIS2_PLACEMENT_3D('',#1235,#1236,#1237);+#1235 = CARTESIAN_POINT('',(0.173205080757,0.2,7.5E-03));+#1236 = DIRECTION('',(1.,0.,0.));+#1237 = DIRECTION('',(0.,-1.,0.));+#1238 = ADVANCED_FACE('',(#1239),#1257,.T.);+#1239 = FACE_BOUND('',#1240,.T.);+#1240 = EDGE_LOOP('',(#1241,#1249,#1250,#1251));+#1241 = ORIENTED_EDGE('',*,*,#1242,.T.);+#1242 = EDGE_CURVE('',#1243,#523,#1245,.T.);+#1243 = VERTEX_POINT('',#1244);+#1244 = CARTESIAN_POINT('',(-0.173205080757,0.,7.5E-03));+#1245 = LINE('',#1246,#1247);+#1246 = CARTESIAN_POINT('',(-0.173205080757,0.,7.5E-03));+#1247 = VECTOR('',#1248,1.);+#1248 = DIRECTION('',(0.,0.,1.));+#1249 = ORIENTED_EDGE('',*,*,#530,.T.);+#1250 = ORIENTED_EDGE('',*,*,#1211,.F.);+#1251 = ORIENTED_EDGE('',*,*,#1252,.F.);+#1252 = EDGE_CURVE('',#1243,#1212,#1253,.T.);+#1253 = LINE('',#1254,#1255);+#1254 = CARTESIAN_POINT('',(-0.173205080757,0.,7.5E-03));+#1255 = VECTOR('',#1256,1.);+#1256 = DIRECTION('',(0.866025403784,0.5,0.));+#1257 = PLANE('',#1258);+#1258 = AXIS2_PLACEMENT_3D('',#1259,#1260,#1261);+#1259 = CARTESIAN_POINT('',(-0.173205080757,0.,7.5E-03));+#1260 = DIRECTION('',(-0.5,0.866025403784,0.));+#1261 = DIRECTION('',(0.866025403784,0.5,0.));+#1262 = ADVANCED_FACE('',(#1263),#1274,.T.);+#1263 = FACE_BOUND('',#1264,.T.);+#1264 = EDGE_LOOP('',(#1265,#1266,#1267,#1268));+#1265 = ORIENTED_EDGE('',*,*,#1220,.T.);+#1266 = ORIENTED_EDGE('',*,*,#522,.T.);+#1267 = ORIENTED_EDGE('',*,*,#1242,.F.);+#1268 = ORIENTED_EDGE('',*,*,#1269,.F.);+#1269 = EDGE_CURVE('',#1221,#1243,#1270,.T.);+#1270 = LINE('',#1271,#1272);+#1271 = CARTESIAN_POINT('',(0.173205080757,-0.2,7.5E-03));+#1272 = VECTOR('',#1273,1.);+#1273 = DIRECTION('',(-0.866025403784,0.5,0.));+#1274 = PLANE('',#1275);+#1275 = AXIS2_PLACEMENT_3D('',#1276,#1277,#1278);+#1276 = CARTESIAN_POINT('',(0.173205080757,-0.2,7.5E-03));+#1277 = DIRECTION('',(-0.5,-0.866025403784,0.));+#1278 = DIRECTION('',(-0.866025403784,0.5,0.));+#1279 = ADVANCED_FACE('',(#1280),#1302,.F.);+#1280 = FACE_BOUND('',#1281,.F.);+#1281 = EDGE_LOOP('',(#1282,#1290,#1291,#1292,#1293,#1294,#1295,#1296));+#1282 = ORIENTED_EDGE('',*,*,#1283,.F.);+#1283 = EDGE_CURVE('',#1099,#1284,#1286,.T.);+#1284 = VERTEX_POINT('',#1285);+#1285 = CARTESIAN_POINT('',(0.485,0.25,-1.734723475977E-18));+#1286 = LINE('',#1287,#1288);+#1287 = CARTESIAN_POINT('',(0.35,0.25,0.));+#1288 = VECTOR('',#1289,1.);+#1289 = DIRECTION('',(1.,0.,0.));+#1290 = ORIENTED_EDGE('',*,*,#1098,.F.);+#1291 = ORIENTED_EDGE('',*,*,#1131,.F.);+#1292 = ORIENTED_EDGE('',*,*,#1155,.F.);+#1293 = ORIENTED_EDGE('',*,*,#1179,.F.);+#1294 = ORIENTED_EDGE('',*,*,#1197,.F.);+#1295 = ORIENTED_EDGE('',*,*,#544,.T.);+#1296 = ORIENTED_EDGE('',*,*,#1297,.T.);+#1297 = EDGE_CURVE('',#547,#1284,#1298,.T.);+#1298 = LINE('',#1299,#1300);+#1299 = CARTESIAN_POINT('',(0.485,-0.25,-1.734723475977E-18));+#1300 = VECTOR('',#1301,1.);+#1301 = DIRECTION('',(0.,1.,0.));+#1302 = PLANE('',#1303);+#1303 = AXIS2_PLACEMENT_3D('',#1304,#1305,#1306);+#1304 = CARTESIAN_POINT('',(0.35,-0.25,0.));+#1305 = DIRECTION('',(0.,0.,1.));+#1306 = DIRECTION('',(1.,0.,0.));+#1307 = ADVANCED_FACE('',(#1308),#1327,.T.);+#1308 = FACE_BOUND('',#1309,.T.);+#1309 = EDGE_LOOP('',(#1310,#1311,#1312,#1321));+#1310 = ORIENTED_EDGE('',*,*,#596,.T.);+#1311 = ORIENTED_EDGE('',*,*,#1297,.T.);+#1312 = ORIENTED_EDGE('',*,*,#1313,.F.);+#1313 = EDGE_CURVE('',#1314,#1284,#1316,.T.);+#1314 = VERTEX_POINT('',#1315);+#1315 = CARTESIAN_POINT('',(0.5,0.25,1.5E-02));+#1316 = CIRCLE('',#1317,1.5E-02);+#1317 = AXIS2_PLACEMENT_3D('',#1318,#1319,#1320);+#1318 = CARTESIAN_POINT('',(0.485,0.25,1.5E-02));+#1319 = DIRECTION('',(0.,1.,0.));+#1320 = DIRECTION('',(0.,0.,1.));+#1321 = ORIENTED_EDGE('',*,*,#1322,.F.);+#1322 = EDGE_CURVE('',#589,#1314,#1323,.T.);+#1323 = LINE('',#1324,#1325);+#1324 = CARTESIAN_POINT('',(0.5,-0.25,1.5E-02));+#1325 = VECTOR('',#1326,1.);+#1326 = DIRECTION('',(0.,1.,0.));+#1327 = CYLINDRICAL_SURFACE('',#1328,1.5E-02);+#1328 = AXIS2_PLACEMENT_3D('',#1329,#1330,#1331);+#1329 = CARTESIAN_POINT('',(0.485,-0.25,1.5E-02));+#1330 = DIRECTION('',(0.,1.,0.));+#1331 = DIRECTION('',(1.,0.,0.));+#1332 = ADVANCED_FACE('',(#1333),#1351,.T.);+#1333 = FACE_BOUND('',#1334,.T.);+#1334 = EDGE_LOOP('',(#1335,#1336,#1337,#1345));+#1335 = ORIENTED_EDGE('',*,*,#588,.F.);+#1336 = ORIENTED_EDGE('',*,*,#1322,.T.);+#1337 = ORIENTED_EDGE('',*,*,#1338,.T.);+#1338 = EDGE_CURVE('',#1314,#1339,#1341,.T.);+#1339 = VERTEX_POINT('',#1340);+#1340 = CARTESIAN_POINT('',(0.5,0.25,0.185));+#1341 = LINE('',#1342,#1343);+#1342 = CARTESIAN_POINT('',(0.5,0.25,0.));+#1343 = VECTOR('',#1344,1.);+#1344 = DIRECTION('',(0.,0.,1.));+#1345 = ORIENTED_EDGE('',*,*,#1346,.F.);+#1346 = EDGE_CURVE('',#580,#1339,#1347,.T.);+#1347 = LINE('',#1348,#1349);+#1348 = CARTESIAN_POINT('',(0.5,-0.25,0.185));+#1349 = VECTOR('',#1350,1.);+#1350 = DIRECTION('',(0.,1.,0.));+#1351 = PLANE('',#1352);+#1352 = AXIS2_PLACEMENT_3D('',#1353,#1354,#1355);+#1353 = CARTESIAN_POINT('',(0.5,-0.25,0.));+#1354 = DIRECTION('',(1.,0.,0.));+#1355 = DIRECTION('',(0.,0.,1.));+#1356 = ADVANCED_FACE('',(#1357),#1376,.T.);+#1357 = FACE_BOUND('',#1358,.F.);+#1358 = EDGE_LOOP('',(#1359,#1360,#1368,#1375));+#1359 = ORIENTED_EDGE('',*,*,#579,.T.);+#1360 = ORIENTED_EDGE('',*,*,#1361,.T.);+#1361 = EDGE_CURVE('',#572,#1362,#1364,.T.);+#1362 = VERTEX_POINT('',#1363);+#1363 = CARTESIAN_POINT('',(0.485,0.25,0.2));+#1364 = LINE('',#1365,#1366);+#1365 = CARTESIAN_POINT('',(0.485,-0.25,0.2));+#1366 = VECTOR('',#1367,1.);+#1367 = DIRECTION('',(0.,1.,0.));+#1368 = ORIENTED_EDGE('',*,*,#1369,.F.);+#1369 = EDGE_CURVE('',#1339,#1362,#1370,.T.);+#1370 = CIRCLE('',#1371,1.5E-02);+#1371 = AXIS2_PLACEMENT_3D('',#1372,#1373,#1374);+#1372 = CARTESIAN_POINT('',(0.485,0.25,0.185));+#1373 = DIRECTION('',(0.,-1.,0.));+#1374 = DIRECTION('',(0.,0.,1.));+#1375 = ORIENTED_EDGE('',*,*,#1346,.F.);+#1376 = CYLINDRICAL_SURFACE('',#1377,1.5E-02);+#1377 = AXIS2_PLACEMENT_3D('',#1378,#1379,#1380);+#1378 = CARTESIAN_POINT('',(0.485,-0.25,0.185));+#1379 = DIRECTION('',(0.,1.,0.));+#1380 = DIRECTION('',(1.,0.,0.));+#1381 = ADVANCED_FACE('',(#1382),#1423,.T.);+#1382 = FACE_BOUND('',#1383,.T.);+#1383 = EDGE_LOOP('',(#1384,#1392,#1400,#1406,#1407,#1415,#1421,#1422));+#1384 = ORIENTED_EDGE('',*,*,#1385,.F.);+#1385 = EDGE_CURVE('',#1386,#1362,#1388,.T.);+#1386 = VERTEX_POINT('',#1387);+#1387 = CARTESIAN_POINT('',(0.4625,0.25,0.2));+#1388 = LINE('',#1389,#1390);+#1389 = CARTESIAN_POINT('',(0.35,0.25,0.2));+#1390 = VECTOR('',#1391,1.);+#1391 = DIRECTION('',(1.,0.,0.));+#1392 = ORIENTED_EDGE('',*,*,#1393,.F.);+#1393 = EDGE_CURVE('',#1394,#1386,#1396,.T.);+#1394 = VERTEX_POINT('',#1395);+#1395 = CARTESIAN_POINT('',(0.4625,0.1875,0.2));+#1396 = LINE('',#1397,#1398);+#1397 = CARTESIAN_POINT('',(0.4625,-3.125E-02,0.2));+#1398 = VECTOR('',#1399,1.);+#1399 = DIRECTION('',(0.,1.,0.));+#1400 = ORIENTED_EDGE('',*,*,#1401,.F.);+#1401 = EDGE_CURVE('',#677,#1394,#1402,.T.);+#1402 = LINE('',#1403,#1404);+#1403 = CARTESIAN_POINT('',(-5.625E-02,0.1875,0.2));+#1404 = VECTOR('',#1405,1.);+#1405 = DIRECTION('',(1.,0.,0.));+#1406 = ORIENTED_EDGE('',*,*,#676,.F.);+#1407 = ORIENTED_EDGE('',*,*,#1408,.F.);+#1408 = EDGE_CURVE('',#1409,#668,#1411,.T.);+#1409 = VERTEX_POINT('',#1410);+#1410 = CARTESIAN_POINT('',(0.4625,-0.1875,0.2));+#1411 = LINE('',#1412,#1413);+#1412 = CARTESIAN_POINT('',(0.40625,-0.1875,0.2));+#1413 = VECTOR('',#1414,1.);+#1414 = DIRECTION('',(-1.,0.,0.));+#1415 = ORIENTED_EDGE('',*,*,#1416,.F.);+#1416 = EDGE_CURVE('',#564,#1409,#1417,.T.);+#1417 = LINE('',#1418,#1419);+#1418 = CARTESIAN_POINT('',(0.4625,-0.28125,0.2));+#1419 = VECTOR('',#1420,1.);+#1420 = DIRECTION('',(0.,1.,0.));+#1421 = ORIENTED_EDGE('',*,*,#571,.T.);+#1422 = ORIENTED_EDGE('',*,*,#1361,.T.);+#1423 = PLANE('',#1424);+#1424 = AXIS2_PLACEMENT_3D('',#1425,#1426,#1427);+#1425 = CARTESIAN_POINT('',(0.35,-0.25,0.2));+#1426 = DIRECTION('',(0.,0.,1.));+#1427 = DIRECTION('',(1.,0.,0.));+#1428 = ADVANCED_FACE('',(#1429),#1440,.F.);+#1429 = FACE_BOUND('',#1430,.F.);+#1430 = EDGE_LOOP('',(#1431,#1437,#1438,#1439));+#1431 = ORIENTED_EDGE('',*,*,#1432,.F.);+#1432 = EDGE_CURVE('',#1409,#612,#1433,.T.);+#1433 = LINE('',#1434,#1435);+#1434 = CARTESIAN_POINT('',(0.4625,-0.1875,0.3));+#1435 = VECTOR('',#1436,1.);+#1436 = DIRECTION('',(-0.,-0.,-1.));+#1437 = ORIENTED_EDGE('',*,*,#1416,.F.);+#1438 = ORIENTED_EDGE('',*,*,#563,.T.);+#1439 = ORIENTED_EDGE('',*,*,#621,.F.);+#1440 = PLANE('',#1441);+#1441 = AXIS2_PLACEMENT_3D('',#1442,#1443,#1444);+#1442 = CARTESIAN_POINT('',(0.4625,-0.3125,0.3));+#1443 = DIRECTION('',(1.,0.,0.));+#1444 = DIRECTION('',(0.,1.,0.));+#1445 = ADVANCED_FACE('',(#1446),#1452,.F.);+#1446 = FACE_BOUND('',#1447,.F.);+#1447 = EDGE_LOOP('',(#1448,#1449,#1450,#1451));+#1448 = ORIENTED_EDGE('',*,*,#1408,.F.);+#1449 = ORIENTED_EDGE('',*,*,#1432,.T.);+#1450 = ORIENTED_EDGE('',*,*,#611,.F.);+#1451 = ORIENTED_EDGE('',*,*,#667,.T.);+#1452 = PLANE('',#1453);+#1453 = AXIS2_PLACEMENT_3D('',#1454,#1455,#1456);+#1454 = CARTESIAN_POINT('',(0.4625,-0.1875,0.3));+#1455 = DIRECTION('',(0.,1.,0.));+#1456 = DIRECTION('',(-1.,0.,0.));+#1457 = ADVANCED_FACE('',(#1458),#1474,.F.);+#1458 = FACE_BOUND('',#1459,.F.);+#1459 = EDGE_LOOP('',(#1460,#1461,#1467,#1468));+#1460 = ORIENTED_EDGE('',*,*,#1393,.F.);+#1461 = ORIENTED_EDGE('',*,*,#1462,.T.);+#1462 = EDGE_CURVE('',#1394,#645,#1463,.T.);+#1463 = LINE('',#1464,#1465);+#1464 = CARTESIAN_POINT('',(0.4625,0.1875,0.3));+#1465 = VECTOR('',#1466,1.);+#1466 = DIRECTION('',(-0.,-0.,-1.));+#1467 = ORIENTED_EDGE('',*,*,#652,.F.);+#1468 = ORIENTED_EDGE('',*,*,#1469,.F.);+#1469 = EDGE_CURVE('',#1386,#636,#1470,.T.);+#1470 = LINE('',#1471,#1472);+#1471 = CARTESIAN_POINT('',(0.4625,0.25,0.15));+#1472 = VECTOR('',#1473,1.);+#1473 = DIRECTION('',(0.,0.,-1.));+#1474 = PLANE('',#1475);+#1475 = AXIS2_PLACEMENT_3D('',#1476,#1477,#1478);+#1476 = CARTESIAN_POINT('',(0.4625,0.1875,0.3));+#1477 = DIRECTION('',(1.,0.,0.));+#1478 = DIRECTION('',(0.,1.,0.));+#1479 = ADVANCED_FACE('',(#1480),#1486,.F.);+#1480 = FACE_BOUND('',#1481,.F.);+#1481 = EDGE_LOOP('',(#1482,#1483,#1484,#1485));+#1482 = ORIENTED_EDGE('',*,*,#1462,.F.);+#1483 = ORIENTED_EDGE('',*,*,#1401,.F.);+#1484 = ORIENTED_EDGE('',*,*,#684,.F.);+#1485 = ORIENTED_EDGE('',*,*,#644,.F.);+#1486 = PLANE('',#1487);+#1487 = AXIS2_PLACEMENT_3D('',#1488,#1489,#1490);+#1488 = CARTESIAN_POINT('',(-0.4625,0.1875,0.3));+#1489 = DIRECTION('',(0.,-1.,0.));+#1490 = DIRECTION('',(1.,0.,0.));+#1491 = ADVANCED_FACE('',(#1492),#1504,.T.);+#1492 = FACE_BOUND('',#1493,.T.);+#1493 = EDGE_LOOP('',(#1494,#1495,#1496,#1497,#1498,#1499,#1500,#1501,+#1502,#1503));+#1494 = ORIENTED_EDGE('',*,*,#872,.F.);+#1495 = ORIENTED_EDGE('',*,*,#937,.F.);+#1496 = ORIENTED_EDGE('',*,*,#979,.T.);+#1497 = ORIENTED_EDGE('',*,*,#1003,.T.);+#1498 = ORIENTED_EDGE('',*,*,#827,.T.);+#1499 = ORIENTED_EDGE('',*,*,#788,.F.);+#1500 = ORIENTED_EDGE('',*,*,#715,.F.);+#1501 = ORIENTED_EDGE('',*,*,#707,.F.);+#1502 = ORIENTED_EDGE('',*,*,#699,.T.);+#1503 = ORIENTED_EDGE('',*,*,#1074,.F.);+#1504 = PLANE('',#1505);+#1505 = AXIS2_PLACEMENT_3D('',#1506,#1507,#1508);+#1506 = CARTESIAN_POINT('',(-0.5,0.25,0.));+#1507 = DIRECTION('',(0.,1.,0.));+#1508 = DIRECTION('',(0.,0.,1.));+#1509 = ADVANCED_FACE('',(#1510),#1522,.T.);+#1510 = FACE_BOUND('',#1511,.T.);+#1511 = EDGE_LOOP('',(#1512,#1513,#1514,#1515,#1516,#1517,#1518,#1519,+#1520,#1521));+#1512 = ORIENTED_EDGE('',*,*,#1283,.F.);+#1513 = ORIENTED_EDGE('',*,*,#1106,.F.);+#1514 = ORIENTED_EDGE('',*,*,#740,.T.);+#1515 = ORIENTED_EDGE('',*,*,#732,.T.);+#1516 = ORIENTED_EDGE('',*,*,#724,.F.);+#1517 = ORIENTED_EDGE('',*,*,#1469,.F.);+#1518 = ORIENTED_EDGE('',*,*,#1385,.T.);+#1519 = ORIENTED_EDGE('',*,*,#1369,.F.);+#1520 = ORIENTED_EDGE('',*,*,#1338,.F.);+#1521 = ORIENTED_EDGE('',*,*,#1313,.T.);+#1522 = PLANE('',#1523);+#1523 = AXIS2_PLACEMENT_3D('',#1524,#1525,#1526);+#1524 = CARTESIAN_POINT('',(0.35,0.25,0.));+#1525 = DIRECTION('',(0.,1.,0.));+#1526 = DIRECTION('',(0.,0.,1.));+#1527 = ADVANCED_FACE('',(#1528),#1533,.T.);+#1528 = FACE_BOUND('',#1529,.T.);+#1529 = EDGE_LOOP('',(#1530,#1531,#1532));+#1530 = ORIENTED_EDGE('',*,*,#1252,.T.);+#1531 = ORIENTED_EDGE('',*,*,#1228,.T.);+#1532 = ORIENTED_EDGE('',*,*,#1269,.T.);+#1533 = PLANE('',#1534);+#1534 = AXIS2_PLACEMENT_3D('',#1535,#1536,#1537);+#1535 = CARTESIAN_POINT('',(5.773502691896E-02,0.,7.5E-03));+#1536 = DIRECTION('',(-0.,-0.,-1.));+#1537 = DIRECTION('',(-1.,0.,0.));+#1538 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)+GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1542))+GLOBAL_UNIT_ASSIGNED_CONTEXT((#1539,#1540,#1541)) REPRESENTATION_CONTEXT+('Context #1','3D Context with UNIT and UNCERTAINTY') );+#1539 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );+#1540 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );+#1541 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );+#1542 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(2.E-07),#1539,+'distance_accuracy_value','confusion accuracy');+#1543 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7));+#1544 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(+#1545,#1553,#1560,#1567,#1574,#1581,#1588,#1595,#1603,#1610,#1617,+#1624,#1631,#1638,#1645,#1652,#1659,#1666,#1673,#1680,#1687,#1694,+#1701,#1708,#1715,#1722,#1729,#1736,#1743,#1750,#1757,#1764,#1771,+#1778,#1785,#1792,#1800,#1807,#1814,#1821,#1828,#1835,#1842,#1849,+#1856,#1863,#1870,#1877,#1884,#1891),#1538);+#1545 = STYLED_ITEM('color',(#1546),#17);+#1546 = PRESENTATION_STYLE_ASSIGNMENT((#1547));+#1547 = SURFACE_STYLE_USAGE(.BOTH.,#1548);+#1548 = SURFACE_SIDE_STYLE('',(#1549));+#1549 = SURFACE_STYLE_FILL_AREA(#1550);+#1550 = FILL_AREA_STYLE('',(#1551));+#1551 = FILL_AREA_STYLE_COLOUR('',#1552);+#1552 = COLOUR_RGB('',0.894999980927,0.89099997282,0.813000023365);+#1553 = STYLED_ITEM('color',(#1554),#57);+#1554 = PRESENTATION_STYLE_ASSIGNMENT((#1555));+#1555 = SURFACE_STYLE_USAGE(.BOTH.,#1556);+#1556 = SURFACE_SIDE_STYLE('',(#1557));+#1557 = SURFACE_STYLE_FILL_AREA(#1558);+#1558 = FILL_AREA_STYLE('',(#1559));+#1559 = FILL_AREA_STYLE_COLOUR('',#1552);+#1560 = STYLED_ITEM('color',(#1561),#104);+#1561 = PRESENTATION_STYLE_ASSIGNMENT((#1562));+#1562 = SURFACE_STYLE_USAGE(.BOTH.,#1563);+#1563 = SURFACE_SIDE_STYLE('',(#1564));+#1564 = SURFACE_STYLE_FILL_AREA(#1565);+#1565 = FILL_AREA_STYLE('',(#1566));+#1566 = FILL_AREA_STYLE_COLOUR('',#1552);+#1567 = STYLED_ITEM('color',(#1568),#183);+#1568 = PRESENTATION_STYLE_ASSIGNMENT((#1569));+#1569 = SURFACE_STYLE_USAGE(.BOTH.,#1570);+#1570 = SURFACE_SIDE_STYLE('',(#1571));+#1571 = SURFACE_STYLE_FILL_AREA(#1572);+#1572 = FILL_AREA_STYLE('',(#1573));+#1573 = FILL_AREA_STYLE_COLOUR('',#1552);+#1574 = STYLED_ITEM('color',(#1575),#207);+#1575 = PRESENTATION_STYLE_ASSIGNMENT((#1576));+#1576 = SURFACE_STYLE_USAGE(.BOTH.,#1577);+#1577 = SURFACE_SIDE_STYLE('',(#1578));+#1578 = SURFACE_STYLE_FILL_AREA(#1579);+#1579 = FILL_AREA_STYLE('',(#1580));+#1580 = FILL_AREA_STYLE_COLOUR('',#1552);+#1581 = STYLED_ITEM('color',(#1582),#247);+#1582 = PRESENTATION_STYLE_ASSIGNMENT((#1583));+#1583 = SURFACE_STYLE_USAGE(.BOTH.,#1584);+#1584 = SURFACE_SIDE_STYLE('',(#1585));+#1585 = SURFACE_STYLE_FILL_AREA(#1586);+#1586 = FILL_AREA_STYLE('',(#1587));+#1587 = FILL_AREA_STYLE_COLOUR('',#1552);+#1588 = STYLED_ITEM('color',(#1589),#278);+#1589 = PRESENTATION_STYLE_ASSIGNMENT((#1590));+#1590 = SURFACE_STYLE_USAGE(.BOTH.,#1591);+#1591 = SURFACE_SIDE_STYLE('',(#1592));+#1592 = SURFACE_STYLE_FILL_AREA(#1593);+#1593 = FILL_AREA_STYLE('',(#1594));+#1594 = FILL_AREA_STYLE_COLOUR('',#1552);+#1595 = STYLED_ITEM('color',(#1596),#295);+#1596 = PRESENTATION_STYLE_ASSIGNMENT((#1597));+#1597 = SURFACE_STYLE_USAGE(.BOTH.,#1598);+#1598 = SURFACE_SIDE_STYLE('',(#1599));+#1599 = SURFACE_STYLE_FILL_AREA(#1600);+#1600 = FILL_AREA_STYLE('',(#1601));+#1601 = FILL_AREA_STYLE_COLOUR('',#1602);+#1602 = COLOUR_RGB('',0.85900002718,0.737999975681,0.495999991894);+#1603 = STYLED_ITEM('color',(#1604),#328);+#1604 = PRESENTATION_STYLE_ASSIGNMENT((#1605));+#1605 = SURFACE_STYLE_USAGE(.BOTH.,#1606);+#1606 = SURFACE_SIDE_STYLE('',(#1607));+#1607 = SURFACE_STYLE_FILL_AREA(#1608);+#1608 = FILL_AREA_STYLE('',(#1609));+#1609 = FILL_AREA_STYLE_COLOUR('',#1552);+#1610 = STYLED_ITEM('color',(#1611),#352);+#1611 = PRESENTATION_STYLE_ASSIGNMENT((#1612));+#1612 = SURFACE_STYLE_USAGE(.BOTH.,#1613);+#1613 = SURFACE_SIDE_STYLE('',(#1614));+#1614 = SURFACE_STYLE_FILL_AREA(#1615);+#1615 = FILL_AREA_STYLE('',(#1616));+#1616 = FILL_AREA_STYLE_COLOUR('',#1602);+#1617 = STYLED_ITEM('color',(#1618),#419);+#1618 = PRESENTATION_STYLE_ASSIGNMENT((#1619));+#1619 = SURFACE_STYLE_USAGE(.BOTH.,#1620);+#1620 = SURFACE_SIDE_STYLE('',(#1621));+#1621 = SURFACE_STYLE_FILL_AREA(#1622);+#1622 = FILL_AREA_STYLE('',(#1623));+#1623 = FILL_AREA_STYLE_COLOUR('',#1552);+#1624 = STYLED_ITEM('color',(#1625),#540);+#1625 = PRESENTATION_STYLE_ASSIGNMENT((#1626));+#1626 = SURFACE_STYLE_USAGE(.BOTH.,#1627);+#1627 = SURFACE_SIDE_STYLE('',(#1628));+#1628 = SURFACE_STYLE_FILL_AREA(#1629);+#1629 = FILL_AREA_STYLE('',(#1630));+#1630 = FILL_AREA_STYLE_COLOUR('',#1602);+#1631 = STYLED_ITEM('color',(#1632),#607);+#1632 = PRESENTATION_STYLE_ASSIGNMENT((#1633));+#1633 = SURFACE_STYLE_USAGE(.BOTH.,#1634);+#1634 = SURFACE_SIDE_STYLE('',(#1635));+#1635 = SURFACE_STYLE_FILL_AREA(#1636);+#1636 = FILL_AREA_STYLE('',(#1637));+#1637 = FILL_AREA_STYLE_COLOUR('',#1552);+#1638 = STYLED_ITEM('color',(#1639),#631);+#1639 = PRESENTATION_STYLE_ASSIGNMENT((#1640));+#1640 = SURFACE_STYLE_USAGE(.BOTH.,#1641);+#1641 = SURFACE_SIDE_STYLE('',(#1642));+#1642 = SURFACE_STYLE_FILL_AREA(#1643);+#1643 = FILL_AREA_STYLE('',(#1644));+#1644 = FILL_AREA_STYLE_COLOUR('',#1552);+#1645 = STYLED_ITEM('color',(#1646),#662);+#1646 = PRESENTATION_STYLE_ASSIGNMENT((#1647));+#1647 = SURFACE_STYLE_USAGE(.BOTH.,#1648);+#1648 = SURFACE_SIDE_STYLE('',(#1649));+#1649 = SURFACE_STYLE_FILL_AREA(#1650);+#1650 = FILL_AREA_STYLE('',(#1651));+#1651 = FILL_AREA_STYLE_COLOUR('',#1602);+#1652 = STYLED_ITEM('color',(#1653),#695);+#1653 = PRESENTATION_STYLE_ASSIGNMENT((#1654));+#1654 = SURFACE_STYLE_USAGE(.BOTH.,#1655);+#1655 = SURFACE_SIDE_STYLE('',(#1656));+#1656 = SURFACE_STYLE_FILL_AREA(#1657);+#1657 = FILL_AREA_STYLE('',(#1658));+#1658 = FILL_AREA_STYLE_COLOUR('',#1552);+#1659 = STYLED_ITEM('color',(#1660),#751);+#1660 = PRESENTATION_STYLE_ASSIGNMENT((#1661));+#1661 = SURFACE_STYLE_USAGE(.BOTH.,#1662);+#1662 = SURFACE_SIDE_STYLE('',(#1663));+#1663 = SURFACE_STYLE_FILL_AREA(#1664);+#1664 = FILL_AREA_STYLE('',(#1665));+#1665 = FILL_AREA_STYLE_COLOUR('',#1602);+#1666 = STYLED_ITEM('color',(#1667),#775);+#1667 = PRESENTATION_STYLE_ASSIGNMENT((#1668));+#1668 = SURFACE_STYLE_USAGE(.BOTH.,#1669);+#1669 = SURFACE_SIDE_STYLE('',(#1670));+#1670 = SURFACE_STYLE_FILL_AREA(#1671);+#1671 = FILL_AREA_STYLE('',(#1672));+#1672 = FILL_AREA_STYLE_COLOUR('',#1602);+#1673 = STYLED_ITEM('color',(#1674),#799);+#1674 = PRESENTATION_STYLE_ASSIGNMENT((#1675));+#1675 = SURFACE_STYLE_USAGE(.BOTH.,#1676);+#1676 = SURFACE_SIDE_STYLE('',(#1677));+#1677 = SURFACE_STYLE_FILL_AREA(#1678);+#1678 = FILL_AREA_STYLE('',(#1679));+#1679 = FILL_AREA_STYLE_COLOUR('',#1602);+#1680 = STYLED_ITEM('color',(#1681),#823);+#1681 = PRESENTATION_STYLE_ASSIGNMENT((#1682));+#1682 = SURFACE_STYLE_USAGE(.BOTH.,#1683);+#1683 = SURFACE_SIDE_STYLE('',(#1684));+#1684 = SURFACE_STYLE_FILL_AREA(#1685);+#1685 = FILL_AREA_STYLE('',(#1686));+#1686 = FILL_AREA_STYLE_COLOUR('',#1602);+#1687 = STYLED_ITEM('color',(#1688),#856);+#1688 = PRESENTATION_STYLE_ASSIGNMENT((#1689));+#1689 = SURFACE_STYLE_USAGE(.BOTH.,#1690);+#1690 = SURFACE_SIDE_STYLE('',(#1691));+#1691 = SURFACE_STYLE_FILL_AREA(#1692);+#1692 = FILL_AREA_STYLE('',(#1693));+#1693 = FILL_AREA_STYLE_COLOUR('',#1602);+#1694 = STYLED_ITEM('color',(#1695),#868);+#1695 = PRESENTATION_STYLE_ASSIGNMENT((#1696));+#1696 = SURFACE_STYLE_USAGE(.BOTH.,#1697);+#1697 = SURFACE_SIDE_STYLE('',(#1698));+#1698 = SURFACE_STYLE_FILL_AREA(#1699);+#1699 = FILL_AREA_STYLE('',(#1700));+#1700 = FILL_AREA_STYLE_COLOUR('',#1602);+#1701 = STYLED_ITEM('color',(#1702),#931);+#1702 = PRESENTATION_STYLE_ASSIGNMENT((#1703));+#1703 = SURFACE_STYLE_USAGE(.BOTH.,#1704);+#1704 = SURFACE_SIDE_STYLE('',(#1705));+#1705 = SURFACE_STYLE_FILL_AREA(#1706);+#1706 = FILL_AREA_STYLE('',(#1707));+#1707 = FILL_AREA_STYLE_COLOUR('',#1602);+#1708 = STYLED_ITEM('color',(#1709),#956);+#1709 = PRESENTATION_STYLE_ASSIGNMENT((#1710));+#1710 = SURFACE_STYLE_USAGE(.BOTH.,#1711);+#1711 = SURFACE_SIDE_STYLE('',(#1712));+#1712 = SURFACE_STYLE_FILL_AREA(#1713);+#1713 = FILL_AREA_STYLE('',(#1714));+#1714 = FILL_AREA_STYLE_COLOUR('',#1602);+#1715 = STYLED_ITEM('color',(#1716),#973);+#1716 = PRESENTATION_STYLE_ASSIGNMENT((#1717));+#1717 = SURFACE_STYLE_USAGE(.BOTH.,#1718);+#1718 = SURFACE_SIDE_STYLE('',(#1719));+#1719 = SURFACE_STYLE_FILL_AREA(#1720);+#1720 = FILL_AREA_STYLE('',(#1721));+#1721 = FILL_AREA_STYLE_COLOUR('',#1602);+#1722 = STYLED_ITEM('color',(#1723),#997);+#1723 = PRESENTATION_STYLE_ASSIGNMENT((#1724));+#1724 = SURFACE_STYLE_USAGE(.BOTH.,#1725);+#1725 = SURFACE_SIDE_STYLE('',(#1726));+#1726 = SURFACE_STYLE_FILL_AREA(#1727);+#1727 = FILL_AREA_STYLE('',(#1728));+#1728 = FILL_AREA_STYLE_COLOUR('',#1602);+#1729 = STYLED_ITEM('color',(#1730),#1015);+#1730 = PRESENTATION_STYLE_ASSIGNMENT((#1731));+#1731 = SURFACE_STYLE_USAGE(.BOTH.,#1732);+#1732 = SURFACE_SIDE_STYLE('',(#1733));+#1733 = SURFACE_STYLE_FILL_AREA(#1734);+#1734 = FILL_AREA_STYLE('',(#1735));+#1735 = FILL_AREA_STYLE_COLOUR('',#1602);+#1736 = STYLED_ITEM('color',(#1737),#1033);+#1737 = PRESENTATION_STYLE_ASSIGNMENT((#1738));+#1738 = SURFACE_STYLE_USAGE(.BOTH.,#1739);+#1739 = SURFACE_SIDE_STYLE('',(#1740));+#1740 = SURFACE_STYLE_FILL_AREA(#1741);+#1741 = FILL_AREA_STYLE('',(#1742));+#1742 = FILL_AREA_STYLE_COLOUR('',#1602);+#1743 = STYLED_ITEM('color',(#1744),#1051);+#1744 = PRESENTATION_STYLE_ASSIGNMENT((#1745));+#1745 = SURFACE_STYLE_USAGE(.BOTH.,#1746);+#1746 = SURFACE_SIDE_STYLE('',(#1747));+#1747 = SURFACE_STYLE_FILL_AREA(#1748);+#1748 = FILL_AREA_STYLE('',(#1749));+#1749 = FILL_AREA_STYLE_COLOUR('',#1602);+#1750 = STYLED_ITEM('color',(#1751),#1068);+#1751 = PRESENTATION_STYLE_ASSIGNMENT((#1752));+#1752 = SURFACE_STYLE_USAGE(.BOTH.,#1753);+#1753 = SURFACE_SIDE_STYLE('',(#1754));+#1754 = SURFACE_STYLE_FILL_AREA(#1755);+#1755 = FILL_AREA_STYLE('',(#1756));+#1756 = FILL_AREA_STYLE_COLOUR('',#1602);+#1757 = STYLED_ITEM('color',(#1758),#1085);+#1758 = PRESENTATION_STYLE_ASSIGNMENT((#1759));+#1759 = SURFACE_STYLE_USAGE(.BOTH.,#1760);+#1760 = SURFACE_SIDE_STYLE('',(#1761));+#1761 = SURFACE_STYLE_FILL_AREA(#1762);+#1762 = FILL_AREA_STYLE('',(#1763));+#1763 = FILL_AREA_STYLE_COLOUR('',#1602);+#1764 = STYLED_ITEM('color',(#1765),#1116);+#1765 = PRESENTATION_STYLE_ASSIGNMENT((#1766));+#1766 = SURFACE_STYLE_USAGE(.BOTH.,#1767);+#1767 = SURFACE_SIDE_STYLE('',(#1768));+#1768 = SURFACE_STYLE_FILL_AREA(#1769);+#1769 = FILL_AREA_STYLE('',(#1770));+#1770 = FILL_AREA_STYLE_COLOUR('',#1602);+#1771 = STYLED_ITEM('color',(#1772),#1141);+#1772 = PRESENTATION_STYLE_ASSIGNMENT((#1773));+#1773 = SURFACE_STYLE_USAGE(.BOTH.,#1774);+#1774 = SURFACE_SIDE_STYLE('',(#1775));+#1775 = SURFACE_STYLE_FILL_AREA(#1776);+#1776 = FILL_AREA_STYLE('',(#1777));+#1777 = FILL_AREA_STYLE_COLOUR('',#1602);+#1778 = STYLED_ITEM('color',(#1779),#1166);+#1779 = PRESENTATION_STYLE_ASSIGNMENT((#1780));+#1780 = SURFACE_STYLE_USAGE(.BOTH.,#1781);+#1781 = SURFACE_SIDE_STYLE('',(#1782));+#1782 = SURFACE_STYLE_FILL_AREA(#1783);+#1783 = FILL_AREA_STYLE('',(#1784));+#1784 = FILL_AREA_STYLE_COLOUR('',#1602);+#1785 = STYLED_ITEM('color',(#1786),#1190);+#1786 = PRESENTATION_STYLE_ASSIGNMENT((#1787));+#1787 = SURFACE_STYLE_USAGE(.BOTH.,#1788);+#1788 = SURFACE_SIDE_STYLE('',(#1789));+#1789 = SURFACE_STYLE_FILL_AREA(#1790);+#1790 = FILL_AREA_STYLE('',(#1791));+#1791 = FILL_AREA_STYLE_COLOUR('',#1602);+#1792 = STYLED_ITEM('color',(#1793),#1207);+#1793 = PRESENTATION_STYLE_ASSIGNMENT((#1794));+#1794 = SURFACE_STYLE_USAGE(.BOTH.,#1795);+#1795 = SURFACE_SIDE_STYLE('',(#1796));+#1796 = SURFACE_STYLE_FILL_AREA(#1797);+#1797 = FILL_AREA_STYLE('',(#1798));+#1798 = FILL_AREA_STYLE_COLOUR('',#1799);+#1799 = COLOUR_RGB('',0.340000003576,0.680000007153,0.444999992847);+#1800 = STYLED_ITEM('color',(#1801),#1238);+#1801 = PRESENTATION_STYLE_ASSIGNMENT((#1802));+#1802 = SURFACE_STYLE_USAGE(.BOTH.,#1803);+#1803 = SURFACE_SIDE_STYLE('',(#1804));+#1804 = SURFACE_STYLE_FILL_AREA(#1805);+#1805 = FILL_AREA_STYLE('',(#1806));+#1806 = FILL_AREA_STYLE_COLOUR('',#1799);+#1807 = STYLED_ITEM('color',(#1808),#1262);+#1808 = PRESENTATION_STYLE_ASSIGNMENT((#1809));+#1809 = SURFACE_STYLE_USAGE(.BOTH.,#1810);+#1810 = SURFACE_SIDE_STYLE('',(#1811));+#1811 = SURFACE_STYLE_FILL_AREA(#1812);+#1812 = FILL_AREA_STYLE('',(#1813));+#1813 = FILL_AREA_STYLE_COLOUR('',#1799);+#1814 = STYLED_ITEM('color',(#1815),#1279);+#1815 = PRESENTATION_STYLE_ASSIGNMENT((#1816));+#1816 = SURFACE_STYLE_USAGE(.BOTH.,#1817);+#1817 = SURFACE_SIDE_STYLE('',(#1818));+#1818 = SURFACE_STYLE_FILL_AREA(#1819);+#1819 = FILL_AREA_STYLE('',(#1820));+#1820 = FILL_AREA_STYLE_COLOUR('',#1602);+#1821 = STYLED_ITEM('color',(#1822),#1307);+#1822 = PRESENTATION_STYLE_ASSIGNMENT((#1823));+#1823 = SURFACE_STYLE_USAGE(.BOTH.,#1824);+#1824 = SURFACE_SIDE_STYLE('',(#1825));+#1825 = SURFACE_STYLE_FILL_AREA(#1826);+#1826 = FILL_AREA_STYLE('',(#1827));+#1827 = FILL_AREA_STYLE_COLOUR('',#1602);+#1828 = STYLED_ITEM('color',(#1829),#1332);+#1829 = PRESENTATION_STYLE_ASSIGNMENT((#1830));+#1830 = SURFACE_STYLE_USAGE(.BOTH.,#1831);+#1831 = SURFACE_SIDE_STYLE('',(#1832));+#1832 = SURFACE_STYLE_FILL_AREA(#1833);+#1833 = FILL_AREA_STYLE('',(#1834));+#1834 = FILL_AREA_STYLE_COLOUR('',#1602);+#1835 = STYLED_ITEM('color',(#1836),#1356);+#1836 = PRESENTATION_STYLE_ASSIGNMENT((#1837));+#1837 = SURFACE_STYLE_USAGE(.BOTH.,#1838);+#1838 = SURFACE_SIDE_STYLE('',(#1839));+#1839 = SURFACE_STYLE_FILL_AREA(#1840);+#1840 = FILL_AREA_STYLE('',(#1841));+#1841 = FILL_AREA_STYLE_COLOUR('',#1602);+#1842 = STYLED_ITEM('color',(#1843),#1381);+#1843 = PRESENTATION_STYLE_ASSIGNMENT((#1844));+#1844 = SURFACE_STYLE_USAGE(.BOTH.,#1845);+#1845 = SURFACE_SIDE_STYLE('',(#1846));+#1846 = SURFACE_STYLE_FILL_AREA(#1847);+#1847 = FILL_AREA_STYLE('',(#1848));+#1848 = FILL_AREA_STYLE_COLOUR('',#1602);+#1849 = STYLED_ITEM('color',(#1850),#1428);+#1850 = PRESENTATION_STYLE_ASSIGNMENT((#1851));+#1851 = SURFACE_STYLE_USAGE(.BOTH.,#1852);+#1852 = SURFACE_SIDE_STYLE('',(#1853));+#1853 = SURFACE_STYLE_FILL_AREA(#1854);+#1854 = FILL_AREA_STYLE('',(#1855));+#1855 = FILL_AREA_STYLE_COLOUR('',#1602);+#1856 = STYLED_ITEM('color',(#1857),#1445);+#1857 = PRESENTATION_STYLE_ASSIGNMENT((#1858));+#1858 = SURFACE_STYLE_USAGE(.BOTH.,#1859);+#1859 = SURFACE_SIDE_STYLE('',(#1860));+#1860 = SURFACE_STYLE_FILL_AREA(#1861);+#1861 = FILL_AREA_STYLE('',(#1862));+#1862 = FILL_AREA_STYLE_COLOUR('',#1602);+#1863 = STYLED_ITEM('color',(#1864),#1457);+#1864 = PRESENTATION_STYLE_ASSIGNMENT((#1865));+#1865 = SURFACE_STYLE_USAGE(.BOTH.,#1866);+#1866 = SURFACE_SIDE_STYLE('',(#1867));+#1867 = SURFACE_STYLE_FILL_AREA(#1868);+#1868 = FILL_AREA_STYLE('',(#1869));+#1869 = FILL_AREA_STYLE_COLOUR('',#1602);+#1870 = STYLED_ITEM('color',(#1871),#1479);+#1871 = PRESENTATION_STYLE_ASSIGNMENT((#1872));+#1872 = SURFACE_STYLE_USAGE(.BOTH.,#1873);+#1873 = SURFACE_SIDE_STYLE('',(#1874));+#1874 = SURFACE_STYLE_FILL_AREA(#1875);+#1875 = FILL_AREA_STYLE('',(#1876));+#1876 = FILL_AREA_STYLE_COLOUR('',#1602);+#1877 = STYLED_ITEM('color',(#1878),#1491);+#1878 = PRESENTATION_STYLE_ASSIGNMENT((#1879));+#1879 = SURFACE_STYLE_USAGE(.BOTH.,#1880);+#1880 = SURFACE_SIDE_STYLE('',(#1881));+#1881 = SURFACE_STYLE_FILL_AREA(#1882);+#1882 = FILL_AREA_STYLE('',(#1883));+#1883 = FILL_AREA_STYLE_COLOUR('',#1602);+#1884 = STYLED_ITEM('color',(#1885),#1509);+#1885 = PRESENTATION_STYLE_ASSIGNMENT((#1886));+#1886 = SURFACE_STYLE_USAGE(.BOTH.,#1887);+#1887 = SURFACE_SIDE_STYLE('',(#1888));+#1888 = SURFACE_STYLE_FILL_AREA(#1889);+#1889 = FILL_AREA_STYLE('',(#1890));+#1890 = FILL_AREA_STYLE_COLOUR('',#1602);+#1891 = STYLED_ITEM('color',(#1892),#1527);+#1892 = PRESENTATION_STYLE_ASSIGNMENT((#1893));+#1893 = SURFACE_STYLE_USAGE(.BOTH.,#1894);+#1894 = SURFACE_SIDE_STYLE('',(#1895));+#1895 = SURFACE_STYLE_FILL_AREA(#1896);+#1896 = FILL_AREA_STYLE('',(#1897));+#1897 = FILL_AREA_STYLE_COLOUR('',#1799);+ENDSEC;+END-ISO-10303-21;
IN-S42ATA.svgadded+214@@ -0,0 +1,214 @@+<?xml version="1.0" standalone="no"?>+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<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="10.5156mm" height="8.5598mm" viewBox="0.0000 0.0000 10.5156 8.5598">+<title>SVG Image created as LED_unit1.svg date 2026-06-08T19:59:30 </title>+ <desc>Image generated by Eeschema-SVG </desc>+<g style="fill:#000000; fill-opacity:1.0000;stroke:#000000; stroke-opacity:1.0000;+stroke-linecap:round; stroke-linejoin:round;"+ transform="translate(0 0) scale(1 1)">+<path style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 2.4003,5.0419+0.8763,6.5659+1.6383,6.5659+0.8763,6.5659+0.8763,5.8039+" /> +<path style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 3.6703,5.0419+2.1463,6.5659+2.9083,6.5659+2.1463,6.5659+2.1463,5.8039+" /> +<path style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 4.1783,4.2799+6.7183,4.2799+" /> +<path style="fill:none; +stroke:#840000; stroke-width:0.2540; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 4.1783,5.5499+4.1783,3.0099+" /> +<path style="fill:none; +stroke:#840000; stroke-width:0.2540; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 6.7183,5.5499+6.7183,3.0099+4.1783,4.2799+Z" /> +</g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M4.1783 4.2799+L1.6383 4.2799+" />+<path d="M6.7183 4.2799+L9.2583 4.2799+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="5.4483" y="2.3749"+textLength="2.5618" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">D?</text>+<g class="stroked-text"><desc>D?</desc>+<path d="M4.5713 2.3194+L4.5713 1.0494+" />+<path d="M4.5713 1.0494+L4.8737 1.0494+" />+<path d="M4.8737 1.0494+L5.0551 1.1099+" />+<path d="M5.0551 1.1099+L5.1761 1.2309+" />+<path d="M5.1761 1.2309+L5.2366 1.3518+" />+<path d="M5.2366 1.3518+L5.2970 1.5937+" />+<path d="M5.2970 1.5937+L5.2970 1.7751+" />+<path d="M5.2970 1.7751+L5.2366 2.0170+" />+<path d="M5.2366 2.0170+L5.1761 2.1380+" />+<path d="M5.1761 2.1380+L5.0551 2.2590+" />+<path d="M5.0551 2.2590+L4.8737 2.3194+" />+<path d="M4.8737 2.3194+L4.5713 2.3194+" />+<path d="M6.0228 2.1985+L6.0832 2.2590+" />+<path d="M6.0832 2.2590+L6.0228 2.3194+" />+<path d="M6.0228 2.3194+L5.9623 2.2590+" />+<path d="M5.9623 2.2590+L6.0228 2.1985+" />+<path d="M6.0228 2.1985+L6.0228 2.3194+" />+<path d="M5.7809 1.1099+L5.9018 1.0494+" />+<path d="M5.9018 1.0494+L6.2042 1.0494+" />+<path d="M6.2042 1.0494+L6.3251 1.1099+" />+<path d="M6.3251 1.1099+L6.3856 1.2309+" />+<path d="M6.3856 1.2309+L6.3856 1.3518+" />+<path d="M6.3856 1.3518+L6.3251 1.4728+" />+<path d="M6.3251 1.4728+L6.2647 1.5332+" />+<path d="M6.2647 1.5332+L6.1437 1.5937+" />+<path d="M6.1437 1.5937+L6.0832 1.6542+" />+<path d="M6.0832 1.6542+L6.0228 1.7751+" />+<path d="M6.0228 1.7751+L6.0228 1.8356+" />+</g><text x="5.4483" y="7.4549"+textLength="3.6503" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">LED</text>+<g class="stroked-text"><desc>LED</desc>+<path d="M4.6319 7.3994+L4.0271 7.3994+" />+<path d="M4.0271 7.3994+L4.0271 6.1294+" />+<path d="M5.0552 6.7342+L5.4786 6.7342+" />+<path d="M5.6600 7.3994+L5.0552 7.3994+" />+<path d="M5.0552 7.3994+L5.0552 6.1294+" />+<path d="M5.0552 6.1294+L5.6600 6.1294+" />+<path d="M6.2042 7.3994+L6.2042 6.1294+" />+<path d="M6.2042 6.1294+L6.5066 6.1294+" />+<path d="M6.5066 6.1294+L6.6880 6.1899+" />+<path d="M6.6880 6.1899+L6.8090 6.3109+" />+<path d="M6.8090 6.3109+L6.8695 6.4318+" />+<path d="M6.8695 6.4318+L6.9299 6.6737+" />+<path d="M6.9299 6.6737+L6.9299 6.8551+" />+<path d="M6.9299 6.8551+L6.8695 7.0970+" />+<path d="M6.8695 7.0970+L6.8090 7.2180+" />+<path d="M6.8090 7.2180+L6.6880 7.3390+" />+<path d="M6.6880 7.3390+L6.5066 7.3994+" />+<path d="M6.5066 7.3994+L6.2042 7.3994+" />+</g></g> +</svg>
README.md+14@@ -1,3 +1,17 @@ # IN-S42ATA +**Inolux Corporation** · Amber · 0402 · LED+ Inolux Corporation · Top View SMD LED · 0402 (1.0 × 0.5mm) · AlInGaP++## Characterization++<iframe src="/blob/component/in-s42ata/IN-S42ATA.html" width="100%" height="2400" frameborder="0" style="border: none; border-radius: 8px;" allowfullscreen></iframe>++## Downloads++| File | Description |+|------|-------------|+| [IN-S42ATA.kicad_sym](/blob/component/in-s42ata/IN-S42ATA.kicad_sym) | KiCad Symbol |+| [IN-S42ATA.kicad_mod](/blob/component/in-s42ata/IN-S42ATA.kicad_mod) | KiCad Footprint |+| [IN-S42ATA.step](/blob/component/in-s42ata/IN-S42ATA.step) | 3D STEP Model |