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:
@@ -21,16 +21,63 @@ const wasmPath = fileURLToPath(
|
||||
),
|
||||
);
|
||||
|
||||
// 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/, ""),
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user