From b16a293272406e7f762334732fcbfbe926c63142 Mon Sep 17 00:00:00 2001 From: chk <79915315+ChKendel@users.noreply.github.com> Date: Wed, 10 Jun 2026 16:07:04 +0200 Subject: [PATCH] unbekannte Positionen --- public/boardViewer.html | 36 +++++++++++++++++++++++++----------- public/calibration.css | 3 ++- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/public/boardViewer.html b/public/boardViewer.html index 844d1a5..c8c9fd4 100644 --- a/public/boardViewer.html +++ b/public/boardViewer.html @@ -73,6 +73,7 @@
Erkannt Nicht erkannt + Erkannt, nur 2D Gemessen (3b) Kamera
@@ -258,24 +259,23 @@ function buildScene(data) { for (const m of a0markers) { nTriangulated++; + // Kein künstlicher Offset – Kugelmittelpunkt exakt an triangulierter Position const mpos = r2vArr(m.position_mm); - mpos.y += 0.004; // leicht über der Papier-Ebene - measuredById[m.marker_id] = mpos; + measuredById[m.marker_id] = mpos.clone(); - // Gelber Punkt an gemessener Position + // Amber-Kugel an exakter gemessener Position const dot = makeSphere(mpos, 0.0055, 0xfbbf24); gMeasured.add(dot); - // Verbindungslinie zum Modell-Mittelpunkt + // Verbindungslinie: exakte Modellposition → exakte Messposition const modelMarker = boardMarkers.find(bm => bm.id === m.marker_id); if (modelMarker) { const modelPos = r2vArr(modelMarker.position); - modelPos.y += 0.002; - gMeasured.add(makeLine(modelPos, mpos, 0x78716c, 0.5)); + gMeasured.add(makeLine(modelPos, mpos.clone(), 0x78716c, 0.5)); } } - // Kamera-Frusta aus 3b (falls vorhanden, aktualisiert) + // Kamera-Frusta aus 3b if (measuredMarkers.cameras?.length > 0) { for (const c of measuredMarkers.cameras) { const cpos = r2vArr(c.position_mm); @@ -288,6 +288,17 @@ function buildScene(data) { } } + // ── Blaue Kugeln: Board-Marker erkannt, aber nicht trianguliert ── + // (nur 1 Kamera sah den Marker, oder 3b lief nicht) + let nDetectedNotTriangulated = 0; + for (const m of boardMarkers) { + if (detectedIds.has(m.id) && !Object.hasOwn(measuredById, m.id)) { + nDetectedNotTriangulated++; + const pos = r2vArr(m.position); + gMeasured.add(makeSphere(pos, 0.0055, 0x3b82f6)); + } + } + // Falls keine 3b-Daten: Kamera-Frusta aus camera_pose-Dateien if (!measuredMarkers?.cameras?.length) { const boardCenter = r2v(490, 0, -27.3); @@ -309,12 +320,15 @@ function buildScene(data) { return `${cp.cameraId}: ${rms}`; }).join(' │ '); - const triInfo = nTriangulated > 0 - ? ` │ 3b: ${nTriangulated} trianguliert` - : (measuredMarkers === null ? ' │ 3b: –' : ' │ 3b: <2 Kameras'); + const triInfo = measuredMarkers === null + ? ' │ 3b: –' + : ` │ 3b: ${nTriangulated}`; + const only2dInfo = nDetectedNotTriangulated > 0 + ? ` │ nur 2D: ${nDetectedNotTriangulated}` + : ''; document.getElementById('stats').textContent = - `Erkannt ${nDetected}/${boardMarkers.length}${triInfo}` + + `Erkannt ${nDetected}/${boardMarkers.length}${triInfo}${only2dInfo}` + (camInfo ? ` │ RMS: ${camInfo}` : ''); } diff --git a/public/calibration.css b/public/calibration.css index af28daa..aa3f005 100644 --- a/public/calibration.css +++ b/public/calibration.css @@ -101,7 +101,8 @@ body { flex: 1; background: var(--panel); border: 1px solid #334155; - border-radius: 0 8px 8px 8px; + border-left: none; /* kein Rahmen zur Tab-Seite → kein optischer Unterbruch */ + border-radius: 8px; /* alle vier Ecken rund */ overflow-y: auto; padding: 20px 24px; }