2D-Plan-Renderer auf WebGL2 (GPU) + akkumulierter Funktionsstand
Neuer GPU-Renderer fuer den Grundriss (src/plan/glPlan/): Earcut-Tessellierung (konkav-faehig), gehrte Linienzuege (Miter), echte Papier-mm-Strichbreiten im Massstab (repliziert den SVG-printStrokeVb-Pfad), Hybrid mit scharfem SVG-Text- Overlay. GPU ist der Standardpfad; der SVG-Renderer bleibt automatischer Fallback, falls WebGL2/Shader nicht verfuegbar sind. Imperativer Pan (rAF + CSS-transform) fuer fluessige Interaktion ohne React-Re-Render je Frame. Enthaelt zudem den bisher nicht committeten Arbeitsstand des Browser-BIM (Oeffnungen, Treppen, Raeume, Decken, DXF-Export, Materialbibliothek, Kontext- Import, Tauri-Compute-Boundary-PoC).
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
// Screenshot des Plans in LIGHT- vs DARK-Theme (prefers-color-scheme emuliert),
|
||||
// um theme-abhängige Linien-/Textfarben aufzudecken. Default-App (SVG-Renderer).
|
||||
|
||||
import puppeteer from "puppeteer";
|
||||
const BASE = process.env.PROBE_URL || "http://localhost:5187/";
|
||||
const browser = await puppeteer.launch({
|
||||
headless: "new",
|
||||
args: ["--no-sandbox", "--use-gl=swiftshader", "--enable-unsafe-swiftshader"],
|
||||
});
|
||||
|
||||
async function shoot(scheme, path) {
|
||||
const page = await browser.newPage();
|
||||
await page.setViewport({ width: 1400, height: 900, deviceScaleFactor: 2 });
|
||||
await page.emulateMediaFeatures([{ name: "prefers-color-scheme", value: scheme }]);
|
||||
try {
|
||||
await page.goto(BASE, { waitUntil: "networkidle0", timeout: 25000 });
|
||||
} catch (e) {
|
||||
console.log(`[goto ${scheme}]`, e.message);
|
||||
}
|
||||
await new Promise((r) => setTimeout(r, 1200));
|
||||
const colors = await page.evaluate(() => {
|
||||
const cs = getComputedStyle(document.documentElement);
|
||||
return {
|
||||
sheet: cs.getPropertyValue("--sheet").trim(),
|
||||
ink: cs.getPropertyValue("--ink").trim(),
|
||||
};
|
||||
});
|
||||
await page.screenshot({ path });
|
||||
console.log(`${scheme}: --sheet=${colors.sheet} --ink=${colors.ink} → ${path}`);
|
||||
await page.close();
|
||||
}
|
||||
|
||||
await shoot("light", "scripts/probe-theme-light.png");
|
||||
await shoot("dark", "scripts/probe-theme-dark.png");
|
||||
await browser.close();
|
||||
Reference in New Issue
Block a user