fix(CAD-13): double rendering - legacy canvas skips element rendering when pixi renderer is active (grid/background stay), defensive fallback if pixi fails

This commit is contained in:
Agent Zero
2026-09-16 09:55:59 +02:00
parent f3a8b9e346
commit af9f53c61f
3 changed files with 86 additions and 0 deletions
+11
View File
@@ -55,6 +55,8 @@ export class RenderEngine {
/** src des zuletzt erfolgreich geladenen Hintergrundbilds. */
private bgSrcLoaded = '';
private dpr = 1;
/** CAD-13-fix: true = Legacy-Canvas zeichnet KEINE Elemente (Pixi-Overlay zeichnet sie). Grid/Hintergrund bleiben. */
skipElementRendering = false;
constructor(
canvas: HTMLCanvasElement,
@@ -161,6 +163,15 @@ export class RenderEngine {
if (this.options.showGrid) this.drawGrid(w, h);
if (this.options.backgroundSrc) this.drawBackground();
this.drawRuler(w, h);
// CAD-13-fix: Wenn Pixi-Renderer aktiv ist (skipElementRendering=true),
// zeichnet das Legacy-Canvas KEINE Elemente mehr (sonst doppelt) —
// nur Grid/Hintergrund/Lineal bleiben hier.
if (this.skipElementRendering) {
this.ctx.restore();
return;
}
const viewport = this.zoomPan.getViewport();
const visibleElements = this.spatialIndex.search({
minX: viewport.minX, minY: viewport.minY,
+3
View File
@@ -82,6 +82,9 @@ const CanvasArea: React.FC<CanvasAreaProps> = ({
pixi = new PixiRenderer();
pixiRendererRef.current = pixi;
pixi.init(pixiCanvas);
// CAD-13-fix: Pixi rendert jetzt die Elemente — Legacy-Canvas
// stellt nur noch Grid/Hintergrund/Lineal dar (sonst doppelt).
renderEngine.skipElementRendering = true;
pixi.waitForReady().then(() => {
// Task C4: Debug-Hook für Playwright-E2E-Assertions
(window as unknown as { __v2Debug: unknown }).__v2Debug = {