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:
2026-07-02 00:12:39 +02:00
parent 7b3b597abc
commit 8fd8987b70
184 changed files with 29421 additions and 669 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 620 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 679 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 644 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 481 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 686 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 958 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 816 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 832 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 836 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 686 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 772 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 883 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 468 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 834 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 772 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 523 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 752 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 720 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 336 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 714 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 720 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 972 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 809 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 588 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 687 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 565 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 512 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 679 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1023 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 501 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 766 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 445 KiB

+147
View File
@@ -0,0 +1,147 @@
{
"source": "ambientCG (ambientcg.com)",
"license": "CC0 1.0 Universal (Public Domain)",
"resolution": "1K",
"materials": [
{
"id": "Concrete048",
"name": "Beton",
"category": "Concrete",
"maps": {
"color": "/assets/materials/Concrete048/color.jpg",
"normal": "/assets/materials/Concrete048/normal.jpg",
"roughness": "/assets/materials/Concrete048/roughness.jpg",
"displacement": "/assets/materials/Concrete048/displacement.jpg",
"ao": "/assets/materials/Concrete048/ao.jpg"
}
},
{
"id": "Plaster001",
"name": "Putz/Stuck",
"category": "Plaster",
"maps": {
"color": "/assets/materials/Plaster001/color.jpg",
"normal": "/assets/materials/Plaster001/normal.jpg",
"roughness": "/assets/materials/Plaster001/roughness.jpg",
"displacement": "/assets/materials/Plaster001/displacement.jpg"
}
},
{
"id": "Wood095",
"name": "Holz-Diele",
"category": "Wood",
"maps": {
"color": "/assets/materials/Wood095/color.jpg",
"normal": "/assets/materials/Wood095/normal.jpg",
"roughness": "/assets/materials/Wood095/roughness.jpg",
"displacement": "/assets/materials/Wood095/displacement.jpg"
}
},
{
"id": "WoodFloor051",
"name": "Holz-Parkett",
"category": "WoodFloor",
"maps": {
"color": "/assets/materials/WoodFloor051/color.jpg",
"normal": "/assets/materials/WoodFloor051/normal.jpg",
"roughness": "/assets/materials/WoodFloor051/roughness.jpg",
"displacement": "/assets/materials/WoodFloor051/displacement.jpg",
"ao": "/assets/materials/WoodFloor051/ao.jpg"
}
},
{
"id": "Bricks104",
"name": "Backstein",
"category": "Bricks",
"maps": {
"color": "/assets/materials/Bricks104/color.jpg",
"normal": "/assets/materials/Bricks104/normal.jpg",
"roughness": "/assets/materials/Bricks104/roughness.jpg",
"displacement": "/assets/materials/Bricks104/displacement.jpg",
"ao": "/assets/materials/Bricks104/ao.jpg"
}
},
{
"id": "Tiles141",
"name": "Bodenfliesen",
"category": "Tiles",
"maps": {
"color": "/assets/materials/Tiles141/color.jpg",
"normal": "/assets/materials/Tiles141/normal.jpg",
"roughness": "/assets/materials/Tiles141/roughness.jpg",
"displacement": "/assets/materials/Tiles141/displacement.jpg"
}
},
{
"id": "Marble012",
"name": "Naturstein/Marmor",
"category": "Marble",
"maps": {
"color": "/assets/materials/Marble012/color.jpg",
"normal": "/assets/materials/Marble012/normal.jpg",
"roughness": "/assets/materials/Marble012/roughness.jpg",
"displacement": "/assets/materials/Marble012/displacement.jpg"
}
},
{
"id": "PavingStones150",
"name": "Pflasterstein",
"category": "PavingStones",
"maps": {
"color": "/assets/materials/PavingStones150/color.jpg",
"normal": "/assets/materials/PavingStones150/normal.jpg",
"roughness": "/assets/materials/PavingStones150/roughness.jpg",
"displacement": "/assets/materials/PavingStones150/displacement.jpg",
"ao": "/assets/materials/PavingStones150/ao.jpg"
}
},
{
"id": "Metal063",
"name": "Metall",
"category": "Metal",
"maps": {
"color": "/assets/materials/Metal063/color.jpg",
"normal": "/assets/materials/Metal063/normal.jpg",
"roughness": "/assets/materials/Metal063/roughness.jpg",
"metalness": "/assets/materials/Metal063/metalness.jpg",
"displacement": "/assets/materials/Metal063/displacement.jpg"
}
},
{
"id": "Gravel043",
"name": "Kies/Schotter",
"category": "Gravel",
"maps": {
"color": "/assets/materials/Gravel043/color.jpg",
"normal": "/assets/materials/Gravel043/normal.jpg",
"roughness": "/assets/materials/Gravel043/roughness.jpg",
"displacement": "/assets/materials/Gravel043/displacement.jpg",
"ao": "/assets/materials/Gravel043/ao.jpg"
}
},
{
"id": "Grass005",
"name": "Gras",
"category": "Grass",
"maps": {
"color": "/assets/materials/Grass005/color.jpg",
"normal": "/assets/materials/Grass005/normal.jpg",
"roughness": "/assets/materials/Grass005/roughness.jpg",
"displacement": "/assets/materials/Grass005/displacement.jpg",
"ao": "/assets/materials/Grass005/ao.jpg"
}
},
{
"id": "Ground103",
"name": "Boden",
"category": "Ground",
"maps": {
"color": "/assets/materials/Ground103/color.jpg",
"normal": "/assets/materials/Ground103/normal.jpg",
"roughness": "/assets/materials/Ground103/roughness.jpg",
"displacement": "/assets/materials/Ground103/displacement.jpg",
"ao": "/assets/materials/Ground103/ao.jpg"
}
}
]
}