From 276abe3f06dbbca7d61c18dd4a9b6afa17cfd6f6 Mon Sep 17 00:00:00 2001 From: data Date: Wed, 4 Mar 2026 12:07:40 +0100 Subject: [PATCH] fix(schematic): Junction-Pfad korrekt berechnen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bei Terminal→Leitung Verbindungen wird jetzt der Pfad aus den bereits gezeichneten Punkten + Ziel-Terminal erstellt, statt das Auto-Routing zu verwenden das wilde Umwege macht. Co-Authored-By: Claude Opus 4.5 --- js/kundenkarte.js | 58 ++++++++++++++++++++++++++++++++++++++++++++--- sw.js | 4 ++-- 2 files changed, 57 insertions(+), 5 deletions(-) diff --git a/js/kundenkarte.js b/js/kundenkarte.js index 668cc30..7ff1720 100755 --- a/js/kundenkarte.js +++ b/js/kundenkarte.js @@ -7784,10 +7784,30 @@ var sourceEqId = self.wireDrawSourceEq; var sourceTermId = self.wireDrawSourceTerm; var targetEqId = conn.fk_target; - var targetTermId = conn.target_terminal || 'input'; + var targetTermId = conn.target_terminal_id || 'input'; + + // Build path: source terminal → existing points → target terminal + var pathPoints = self.wireDrawPoints.slice(); // Copy existing points + + // Add target terminal position + var targetEq = self.equipment.find(function(eq) { return eq.id == targetEqId; }); + if (targetEq) { + var terminals = self.getTerminals(targetEq); + var targetPos = self.getTerminalPosition(targetEq, targetTermId, terminals); + if (targetPos) { + pathPoints.push({x: targetPos.x, y: targetPos.y}); + } + } + + // Build path string + var pathData = ''; + for (var i = 0; i < pathPoints.length; i++) { + pathData += (i === 0 ? 'M' : 'L') + ' ' + pathPoints[i].x + ' ' + pathPoints[i].y + ' '; + } // Store connection values to inherit self._inheritFromConnection = conn; + self._pendingPathData = pathData.trim() || null; // Clear source terminal but keep draw mode active self.cleanupWireDrawState(true); @@ -7829,9 +7849,25 @@ var sourceEqId = self.wireDrawSourceEq; var sourceTermId = self.wireDrawSourceTerm; var targetEqId = conn.fk_source; - var targetTermId = conn.source_terminal || 'output'; + var targetTermId = conn.source_terminal_id || 'output'; + + // Build path with existing points + var pathPoints = self.wireDrawPoints.slice(); + var targetEq = self.equipment.find(function(eq) { return eq.id == targetEqId; }); + if (targetEq) { + var terminals = self.getTerminals(targetEq); + var targetPos = self.getTerminalPosition(targetEq, targetTermId, terminals); + if (targetPos) { + pathPoints.push({x: targetPos.x, y: targetPos.y}); + } + } + var pathData = ''; + for (var i = 0; i < pathPoints.length; i++) { + pathData += (i === 0 ? 'M' : 'L') + ' ' + pathPoints[i].x + ' ' + pathPoints[i].y + ' '; + } self._inheritFromConnection = conn; + self._pendingPathData = pathData.trim() || null; self.cleanupWireDrawState(true); self.showConnectionLabelDialog(sourceEqId, sourceTermId, targetEqId, targetTermId); return; @@ -7868,9 +7904,25 @@ var sourceEqId = self.wireDrawSourceEq; var sourceTermId = self.wireDrawSourceTerm; var targetEqId = conn.fk_target; - var targetTermId = conn.target_terminal || 'input'; + var targetTermId = conn.target_terminal_id || 'input'; + + // Build path with existing points + var pathPoints = self.wireDrawPoints.slice(); + var targetEq = self.equipment.find(function(eq) { return eq.id == targetEqId; }); + if (targetEq) { + var terminals = self.getTerminals(targetEq); + var targetPos = self.getTerminalPosition(targetEq, targetTermId, terminals); + if (targetPos) { + pathPoints.push({x: targetPos.x, y: targetPos.y}); + } + } + var pathData = ''; + for (var i = 0; i < pathPoints.length; i++) { + pathData += (i === 0 ? 'M' : 'L') + ' ' + pathPoints[i].x + ' ' + pathPoints[i].y + ' '; + } self._inheritFromConnection = conn; + self._pendingPathData = pathData.trim() || null; self.cleanupWireDrawState(true); self.showConnectionLabelDialog(sourceEqId, sourceTermId, targetEqId, targetTermId); return; diff --git a/sw.js b/sw.js index 7e9c489..ff9d7f9 100755 --- a/sw.js +++ b/sw.js @@ -3,8 +3,8 @@ * Offline-First für Schaltschrank-Dokumentation */ -const CACHE_NAME = 'kundenkarte-pwa-v9.1'; -const OFFLINE_CACHE = 'kundenkarte-offline-v9.1'; +const CACHE_NAME = 'kundenkarte-pwa-v9.2'; +const OFFLINE_CACHE = 'kundenkarte-offline-v9.2'; // Statische Assets die immer gecached werden (ohne Query-String) const STATIC_ASSETS = [