await eda.dmt_EditorControl.openDocument('9a6096762e036e23'); await new Promise(r => setTimeout(r, 1500)); const out = {}; const comps = await eda.sch_PrimitiveComponent.getAll(); for (const c of comps) { const d = c.getState_Designator(); let nn = null; try { nn = c.getState_Net ? c.getState_Net() : null; } catch (e) {} const t = c.getState_ComponentType(); if (d !== 'U13' && !(nn === 'SCL' || nn === 'SDA')) continue; const pins = await c.getAllPins(); out[(d || (t + ':' + nn)) + '|' + (nn || '')] = { t, net: nn, pins: (pins || []).map(q => [q.getState_PinNumber(), Math.round(q.getState_X()), Math.round(q.getState_Y())]), }; } // U13 附近的导线 const u13 = out['U13|'] || Object.values(out).find(v => v.pins && v.pins.length === 10); const px = u13 ? u13.pins.map(p => p[1]) : []; const py = u13 ? u13.pins.map(p => p[2]) : []; const cx = px.length ? (Math.min(...px) + Math.max(...px)) / 2 : 0; const cy = py.length ? (Math.min(...py) + Math.max(...py)) / 2 : 0; out._wires = (await eda.sch_PrimitiveWire.getAll()) .map(w => w.getState_Line()) .filter(l => l && l.some((v, i) => i % 2 === 0 && Math.abs(v - cx) < 160 && Math.abs(l[i+1] - cy) < 160)) .map(l => l.map(v => Math.round(v))); out._center = [cx, cy]; return out;