Files
DOSSIER-STANDALONE/scripts/dumpNativeScene.ts
T
karim bda256d3a4 Native wgpu-Viewports (2D+3D) im Tauri-Prozess: echtes Modell + gehrte Ecken
- native.rs: EINE winit-EventLoop hostet 2D- und 3D-Fenster (winit erlaubt nur
  eine Loop pro Prozess) — loest den RecreationAttempt-Panic zweier Loops; ersetzt
  native2d.rs/native3d.rs. Feature-gegated (native2d/native3d, einzeln oder zusammen).
- render2d/render3d laden das ECHTE Modell aus assets/native2d_scene.json bzw.
  native3d_walls.json (Demo-Szene als Fallback); initialer Ausschnitt/Kamera aus
  den Modell-Grenzen gerahmt, initialer Redraw + gesetzte Fenstergroesse.
- TS-Konverter toRenderScene/toWalls3d + scripts/dump-native-scene erzeugen die
  JSON aus sampleProject/generatePlan (npm run dump:native).
- render2d: Scene.polylines fuer zusammenhaengende Umriss-/Zeichnungslaeufe →
  Gehrung statt Stumpfkappen an Wandecken/2D-Geometrien; MITER_LIMIT 4→8
  (deckungsgleich mit SVG stroke-miterlimit:8 und WebGL2).
- native3d-Feature + render3d-Pfad-Dep in der Tauri-Crate.
2026-07-02 08:54:26 +02:00

37 lines
1.6 KiB
TypeScript

// Erzeugt aus dem echten Modell (sampleProject → generatePlan) die JSON-Dateien,
// die die nativen wgpu-Fenster (render2d/render3d) beim Start laden:
// src-tauri/assets/native2d_scene.json (RScene: fills/outlines/lines)
// src-tauri/assets/native3d_walls.json (RWall[])
// Wird via scripts/dump-native-scene.mjs (esbuild-Bundle) unter Node ausgeführt.
import { writeFileSync, mkdirSync } from "node:fs";
import { resolve } from "node:path";
import { sampleProject } from "../src/model/sampleProject";
import { generatePlan } from "../src/plan/generatePlan";
import { planToRenderScene } from "../src/plan/toRenderScene";
import { projectToWalls3d } from "../src/plan/toWalls3d";
const root = process.cwd();
const outDir = resolve(root, "src-tauri", "assets");
mkdirSync(outDir, { recursive: true });
// 2D: Erdgeschoss-Grundriss, alle sichtbaren Kategorien, Detailgrad „mittel".
const floorId = "eg";
const visibleCodes = new Set(sampleProject.layers.map((l) => l.code));
const plan = generatePlan(sampleProject, floorId, visibleCodes);
const scene = planToRenderScene(plan);
// 3D: alle Wände aller Geschosse, korrekt gestapelt.
const walls = projectToWalls3d(sampleProject);
const scenePath = resolve(outDir, "native2d_scene.json");
const wallsPath = resolve(outDir, "native3d_walls.json");
writeFileSync(scenePath, JSON.stringify(scene));
writeFileSync(wallsPath, JSON.stringify(walls));
console.log(
`native2d_scene.json: ${scene.fills.length} fills, ${scene.outlines.length} outlines, ${scene.lines.length} lines`,
);
console.log(`native3d_walls.json: ${walls.length} walls`);
console.log(`${outDir}`);