3d2d4d6321
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).
84 lines
3.1 KiB
TypeScript
84 lines
3.1 KiB
TypeScript
import { defineConfig } from "vite";
|
|
import react from "@vitejs/plugin-react";
|
|
import { fileURLToPath } from "node:url";
|
|
|
|
// @mlightcad/libredwg-web gibt seine WASM-Glue + .wasm im `wasm/`-Ordner aus,
|
|
// stellt diese Tiefenpfade aber NICHT über das `exports`-Feld bereit. Daher
|
|
// mappen wir zwei virtuelle Module direkt auf die echten Dateien im Paket:
|
|
// • virtual:libredwg-glue → Emscripten-Glue (createModule)
|
|
// • virtual:libredwg-wasm-url → die .wasm als URL-Asset (?url)
|
|
// So bündelt Vite die WASM korrekt (Dev mit richtigem MIME, Build als Asset).
|
|
const gluePath = fileURLToPath(
|
|
new URL(
|
|
"./node_modules/@mlightcad/libredwg-web/wasm/libredwg-web.js",
|
|
import.meta.url,
|
|
),
|
|
);
|
|
const wasmPath = fileURLToPath(
|
|
new URL(
|
|
"./node_modules/@mlightcad/libredwg-web/wasm/libredwg-web.wasm",
|
|
import.meta.url,
|
|
),
|
|
);
|
|
|
|
// opencascade.js (Welle-C-HLR-Spike) verpackt Emscripten-Glue + `.wasm` in
|
|
// `dist/`, ohne sinnvolle `exports`. Analog zu LibreDWG mappen wir zwei
|
|
// virtuelle Module auf die echten Dateien, damit Vite die (große) WASM als
|
|
// gehashtes Asset ausgibt (Dev mit korrektem MIME, Build als Asset). Der Import
|
|
// im Code ist dynamisch → die WASM bleibt aus dem Haupt-Bundle heraus.
|
|
const occtGluePath = fileURLToPath(
|
|
new URL(
|
|
"./node_modules/opencascade.js/dist/opencascade.wasm.js",
|
|
import.meta.url,
|
|
),
|
|
);
|
|
const occtWasmPath = fileURLToPath(
|
|
new URL(
|
|
"./node_modules/opencascade.js/dist/opencascade.wasm.wasm",
|
|
import.meta.url,
|
|
),
|
|
);
|
|
|
|
// https://vitejs.dev/config/
|
|
export default defineConfig({
|
|
plugins: [react()],
|
|
// Tauri lädt die App über den Vite-Dev-Server; dessen Logs (cargo/tauri)
|
|
// sollen nicht vom Bildschirm gewischt werden, und Tauri-eigene Env-Vars
|
|
// müssen im Client sichtbar sein.
|
|
clearScreen: false,
|
|
envPrefix: ["VITE_", "TAURI_ENV_"],
|
|
resolve: {
|
|
alias: {
|
|
"virtual:libredwg-glue": gluePath,
|
|
"virtual:libredwg-wasm-url": wasmPath + "?url",
|
|
"virtual:occt-glue": occtGluePath,
|
|
"virtual:occt-wasm-url": occtWasmPath + "?url",
|
|
},
|
|
},
|
|
// Emscripten-Glue nicht vor-bündeln (esbuild kommt mit dem UMD-Wrapper +
|
|
// Node-Shims nicht klar); der dynamische Import lädt sie zur Laufzeit.
|
|
optimizeDeps: {
|
|
exclude: ["opencascade.js"],
|
|
},
|
|
server: {
|
|
host: true,
|
|
// Fester Port für die Tauri-Integration (tauri.conf.json zeigt hierauf).
|
|
port: 5187,
|
|
strictPort: true,
|
|
// ambientCG-Proxy: Die Such-JSON (`/api/...`) und der Download-Starter
|
|
// (`/get`, ein 302-Redirect) senden KEINE CORS-Header und sind daher aus
|
|
// dem Browser nicht direkt abrufbar. Der Dev-Proxy reicht `/ambientcg/*`
|
|
// an `https://ambientcg.com` durch (Redirects werden gefolgt), sodass der
|
|
// Live-Browse ohne separaten Server funktioniert. Für Prod eine analoge
|
|
// Proxy-Route bereitstellen und via `VITE_AMBIENTCG_PROXY` konfigurieren.
|
|
proxy: {
|
|
"/ambientcg": {
|
|
target: "https://ambientcg.com",
|
|
changeOrigin: true,
|
|
followRedirects: true,
|
|
rewrite: (path: string) => path.replace(/^\/ambientcg/, ""),
|
|
},
|
|
},
|
|
},
|
|
});
|