- 06 Oct, 2026 14 commits
-
-
Matthias Betz authored
A small mouse icon with the used part filled (left button, right button, wheel) and "Rotate", "Pan", "Zoom" replace the sentence-like hints; each entry keeps the full description as aria-label for screen readers. Co-Authored-By:Claude Opus 5.5 (1M context) <noreply@anthropic.com>
-
Matthias Betz authored
- while nothing is shown, the whole view is a button that opens the file dialog ("Open a CityGML file / or drop it here") - files can be dropped on the view at any time; an overlay shows the drop target, a drop replaces the shown file like choosing one - drops elsewhere on the page are ignored instead of making the browser leave the viewer Co-Authored-By:Claude Opus 5.5 (1M context) <noreply@anthropic.com>
-
Matthias Betz authored
- style.css with colour, type and spacing tokens; light grey chrome around the 3D view, one petrol accent for the file button, checkboxes, focus and a progress line along the header (replaces the native progress bar) - header with title; the file input is a button (native input visually hidden, keyboard focus ring only for keyboard use) - sidebar panel "Level of detail" with hover rows; panel message tells missing file, loading and files without geometry apart - viewer: invitation to open a file while nothing is shown, mouse controls hint once there is geometry; viewer background #EDF3F4 matches the palette - narrow screens: panels above the view Co-Authored-By:Claude Opus 5.5 (1M context) <noreply@anthropic.com>
-
Matthias Betz authored
- coordinates.js: scans posList/pos text directly; plain decimals up to 15 digits are converted exactly (integer / power of ten, bit-identical to parseFloat), everything else goes through parseFloat - triangulate.js (moved out of citygml.js): triangles and quadrilaterals without holes are split directly, concave ones at the reflex corner; self-intersecting, degenerate or holed polygons and corners that coincide in libtess's 2D projection stay with libtess On 156 test files vertex counts and colours are identical to before; total area differs by at most 1.7e-6 (other diagonal of non-planar quads). 274 MB LoD2 file: 7.2 s -> 5.8 s in Node. Co-Authored-By:Claude Opus 5.5 (1M context) <noreply@anthropic.com>
-
Matthias Betz authored
Zip archives are rejected again by the format check with a hint to unpack them. Removes the zip reader, its tests and helper, the zip path in loadFile and the zip-only layer renaming (finishLayer name, sourceName). The archive message no longer suggests packing files as .zip. The readStream test for always-ready streams moved to the parser tests. Co-Authored-By:Claude Opus 5.5 (1M context) <noreply@anthropic.com>
-
Matthias Betz authored
The parser only needs element names and coordinate text. The new tokenizer finds markup with native indexOf instead of sax's per-character state machine and slices text only while a LinearRing is read. - 274 MB LoD2 file: 20.1 s -> 6.9 s in Node, 23.3 s -> 8.3 s in the browser - identical output (hash over all vertex positions and colours) on 156 test files incl. CityGML 3.0 - element names are matched case-sensitively as local names - unterminated markup over 64 KB still fails; a truncated file still shows what was read - vendor/sax.js removed Co-Authored-By:Claude Opus 5.5 (1M context) <noreply@anthropic.com>
-
Matthias Betz authored
Co-Authored-By:Claude Opus 5.5 (1M context) <noreply@anthropic.com>
-
Matthias Betz authored
Co-Authored-By:Claude Opus 5.5 (1M context) <noreply@anthropic.com>
-
Matthias Betz authored
Co-Authored-By:Claude Opus 5.5 (1M context) <noreply@anthropic.com>
-
Matthias Betz authored
Co-Authored-By:Claude Opus 5.5 (1M context) <noreply@anthropic.com>
-
Matthias Betz authored
Co-Authored-By:Claude Opus 5.5 (1M context) <noreply@anthropic.com>
-
Matthias Betz authored
Co-Authored-By:Claude Opus 5.5 (1M context) <noreply@anthropic.com>
-
Matthias Betz authored
Co-Authored-By:Claude Opus 5.5 (1M context) <noreply@anthropic.com>
-
Matthias Betz authored
- pointer events with pointer capture: a drag only starts on the canvas, continues outside it and ends on release; deltas from clientX/Y instead of the non-standard layerX (a drag entering from outside made the camera NaN) - without WebGL 2 show a message in the page instead of an alert with raw HTML, and refuse to load files - normal fallback for zero-area polygons used vec3.create(args), which ignores its arguments and returned a zero normal - canvas resolution in device pixels (CSS size * devicePixelRatio), mouse movement stays in CSS pixels - index.html: charset, viewport and lang Co-Authored-By:Claude Opus 5.5 (1M context) <noreply@anthropic.com>
-
- 05 Oct, 2026 1 commit
-
-
Matthias Betz authored
Loading - parse into fixed-size per-LOD blocks and upload them to the GPU while reading, so memory stays flat for multi-GB files (3.4 GB 3D-DLM loads with a JS heap below 90 MB) and the model is shown during loading - load the single .gml (or .xml) inside a zip archive, decompressed as a stream, including ZIP64 - reject 7z/RAR/gzip and other non-XML input at once with a clear message, and enable the sax buffer limit that unterminated "<!" in binary data used to bypass until the tab ran out of memory - decode UTF-8 across chunk borders, cancel a running load when a new file is chosen, report load errors Geometry - split coordinates on any whitespace (indented posList, one pos per line) - subtract the origin in double precision before float32 conversion - handle PolygonPatch, Rectangle and Triangle - tag geometry with its LOD; setLodVisible() prepares LOD switches - light brown for land use and relief, nested colours restore the parent View - bind shader attribute locations, check compile/link errors, free GPU buffers of the previous file - infinite far plane with a near plane following the camera distance, starting distance fitted to the model without a 10 km cap - minimum zoom step and distance, pan speed proportional to the distance Tests: npm test (Node 22+), 73 tests Co-Authored-By:Claude Opus 5.5 (1M context) <noreply@anthropic.com>
-
- 27 Feb, 2026 2 commits
-
-
Matthias Betz authored
-
Matthias Betz authored
-
- 18 Feb, 2025 2 commits
-
-
Matthias Betz authored
-
Matthias Betz authored
-
- 20 Jun, 2024 4 commits
-
-
Matthias Betz authored
-
Matthias Betz authored
-
Matthias Betz authored
-
Matthias Betz authored
-
- 11 Jun, 2024 1 commit
-
-
Matthias Betz authored
-
- 29 May, 2024 5 commits
-
-
Matthias Betz authored
-
Matthias Betz authored
-
Matthias Betz authored
-
Matthias Betz authored
-
Matthias Betz authored
-
- 12 Mar, 2021 2 commits
-
-
Wolfgang Knopki authored
-
Wolfgang Knopki authored
-
- 09 Mar, 2021 1 commit
-
-
Wolfgang Knopki authored
-
- 08 Mar, 2021 3 commits
-
-
Wolfgang Knopki authored
-
Wolfgang Knopki authored
-
Wolfgang Knopki authored
-
- 14 Sep, 2020 1 commit
-
-
Wolfgang Knopki authored
-
- 11 Aug, 2020 1 commit
-
-
Wolfgang Knopki authored
-
- 16 Jul, 2020 3 commits
-
-
Wolfgang Knopki authored
-
Wolfgang Knopki authored
-
Wolfgang Knopki authored
-