board rotation - fix 0

This commit is contained in:
chk
2026-06-10 18:08:18 +02:00
parent 9105dc5eac
commit b1950ffa5a
5 changed files with 104 additions and 25 deletions

View File

@@ -354,6 +354,27 @@ async function loadBoardTable() {
// ── Board ─────────────────────────────────────────────────────────────────────
/** Befüllt alle Set-Dropdowns aus /api/robot/board-sets */
async function populateBoardSetDropdowns() {
let sets = [];
try {
const r = await fetch('/api/robot/board-sets');
if (r.ok) sets = (await r.json()).sets ?? [];
} catch { /* kein Server / noch keine Sets → leere Dropdowns */ }
// Hilfsfunktion: <select> mit Optionen füllen
function fill(selId, placeholder, selected = '') {
const sel = document.getElementById(selId);
if (!sel) return;
sel.innerHTML = `<option value="">${placeholder}</option>` +
sets.map(s => `<option value="${s}"${s === selected ? ' selected' : ''}>${s}</option>`).join('');
}
fill('board-ref-set', 'alle');
fill('act-align-fixed', ' bleibt ');
fill('act-align-move', ' verschoben ');
}
function initBoard() {
const logBoard = document.getElementById('log-board');
@@ -363,15 +384,23 @@ function initBoard() {
logBoard.scrollTop = logBoard.scrollHeight;
}
// Dropdowns mit Sets aus robot.json befüllen
populateBoardSetDropdowns();
// Tabelle beim ersten Öffnen des Tabs befüllen
loadBoardTable();
document.getElementById('btn-board-run').addEventListener('click', async () => {
logB('Board-Erkennung wird gestartet …');
const refSet = document.getElementById('board-ref-set')?.value ?? '';
logB(`Board-Erkennung wird gestartet … Referenz: ${refSet || 'alle'}`);
const btn = document.getElementById('btn-board-run');
btn.disabled = true;
try {
const response = await fetch('/api/board/run', { method: 'POST' });
const response = await fetch('/api/board/run', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ refSet: refSet || undefined }),
});
if (!response.ok) {
const raw = await response.text().catch(() => '');
let msg;
@@ -390,8 +419,9 @@ function initBoard() {
if (frame?.contentWindow) {
frame.contentWindow.postMessage({ type: 'reload' }, '*');
}
// Marker-Tabelle aktualisieren
// Marker-Tabelle + Set-Dropdowns aktualisieren
loadBoardTable();
populateBoardSetDropdowns();
}
} else {
logB(`❌ Beendet mit Exit-Code ${evt.exitCode}`);
@@ -484,11 +514,15 @@ function initBoard() {
// ── Aktion 3: Sets justieren (Kabsch 2D+Z) ─────────────────────────────────
document.getElementById('btn-act-align').addEventListener('click', async () => {
const setToMove = document.getElementById('act-align-set').value.trim();
const setFixed = document.getElementById('act-align-fixed').value;
const setToMove = document.getElementById('act-align-move').value;
const result = document.getElementById('act-result');
if (!setToMove) {
result.innerHTML = '<span style="color:#f87171">⚠ Bitte Set-Name eingeben (z.B. "rail").</span>'; return;
result.innerHTML = '<span style="color:#f87171">⚠ Bitte Set auswählen, das verschoben werden soll.</span>'; return;
}
if (setFixed && setFixed === setToMove) {
result.innerHTML = '<span style="color:#f87171">⚠ "Bleibt" und "verschoben" dürfen nicht dasselbe Set sein.</span>'; return;
}
result.innerHTML = '<span style="color:#555b6e">Justierung läuft …</span>';
@@ -496,7 +530,7 @@ function initBoard() {
const r = await fetch('/api/robot/align-sets', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ setToMove }),
body: JSON.stringify({ setFixed: setFixed || undefined, setToMove }),
});
const data = await r.json();
if (!r.ok || data.error) {
@@ -505,7 +539,7 @@ function initBoard() {
const t = data.transform;
result.innerHTML =
`<span style="color:#22c55e">✅ Set "${setToMove}": ${data.numChanged} Marker verschoben` +
` (${data.numMatchingPts} Messpunkte)</span>` +
` (${data.numMatchingPts} Messpunkte)${setFixed ? ` "${setFixed}" bleibt` : ''}</span>` +
` &ensp;Δx=${t.tx}&thinsp;mm&ensp;Δy=${t.ty}&thinsp;mm&ensp;Δz=${t.tz}&thinsp;mm` +
`&ensp;θ=${t.thetaDeg}°`;
loadBoardTable();