diff --git a/CHANGELOG.md b/CHANGELOG.md index 659019ad..776efc68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,117 @@ * `split` now throws a `RangeError` unless `numGroups` is a positive integer. The previous 32-group ceiling is gone: group membership is no longer stored as a `1 << g` bitmask, so any number of splits is supported (bounded in practice by the process' open file descriptor limit, one per group). * `@thatopen/fragments` now requires node `>=20.11.0` (`fs.openAsBlob`, global web streams) +## [3.5.0](https://github.com/ThatOpen/engine_fragment/compare/v3.4.0...v3.5.0) (2026-09-11) + + +### Features + +* add contributing guide ([908eea0](https://github.com/ThatOpen/engine_fragment/commit/908eea0a59a2eabe0cd00df86d44aa98e594eb00)) +* add edit API to SingleThreadedFragmentsModel ([864dc23](https://github.com/ThatOpen/engine_fragment/commit/864dc237a140ebb5fd1f9d12d17f408275049e60)) +* add frag load progress callback ([ac639f9](https://github.com/ThatOpen/engine_fragment/commit/ac639f9715e85d87dc5c17e42d5352d38b661bed)) +* add VirtualMultithreadingConfig ([#194](https://github.com/ThatOpen/engine_fragment/issues/194)) ([ebd7750](https://github.com/ThatOpen/engine_fragment/commit/ebd7750032cad5fde842087292f3828e8b17612a)) +* allow to get items chunks ([d65be31](https://github.com/ThatOpen/engine_fragment/commit/d65be31ab52d5c7963726b398c039bf4c5fc09fa)) +* **edit:** add CREATE/UPDATE/DELETE_INDEX edit requests ([f8aa07f](https://github.com/ThatOpen/engine_fragment/commit/f8aa07f61805b93b19f6912eb36f3b079d777198)), closes [#164](https://github.com/ThatOpen/engine_fragment/issues/164) +* **editor:** add createIndex/updateIndex/deleteIndex convenience methods ([a17707e](https://github.com/ThatOpen/engine_fragment/commit/a17707e323789219bedf78b2649b268a70a15eda)), closes [#164](https://github.com/ThatOpen/engine_fragment/issues/164) +* expose getLocalIdsFromItemIds on the public model API ([18742ff](https://github.com/ThatOpen/engine_fragment/commit/18742ff96dafc307d25bea3abe0cca13ef2c7e5f)) +* **FragmentsModels:** auto-detect raw vs deflated buffers ([041531f](https://github.com/ThatOpen/engine_fragment/commit/041531fb4bf999b5b959f90da51dad569b6706ef)), closes [#213](https://github.com/ThatOpen/engine_fragment/issues/213) +* **FragmentsModels:** shared IFragmentsModel interface across model types ([#227](https://github.com/ThatOpen/engine_fragment/issues/227)) ([3ccce85](https://github.com/ThatOpen/engine_fragment/commit/3ccce850303ddb72843133d3e04a86b4e19c2098)) +* full uint32 localId range in tile id attribute ([fe11440](https://github.com/ThatOpen/engine_fragment/commit/fe11440b702850769bf94f18e983ec51345a9bef)) +* **grids:** stamp userData kinds and expose grid material ([e383064](https://github.com/ThatOpen/engine_fragment/commit/e38306467edafa18000142676d4ceb692ffca42f)), closes [#192](https://github.com/ThatOpen/engine_fragment/issues/192) +* **ifc-importer:** include IFC4x3 alignment layouts in the spatial structure ([#743](https://github.com/ThatOpen/engine_fragment/issues/743)) ([c094e73](https://github.com/ThatOpen/engine_fragment/commit/c094e73aa0ef6c1eb67a9f63a7a7bd223f9d8ccd)) +* **IfcImporter:** add doubleSidedMaterials option ([7f679ba](https://github.com/ThatOpen/engine_fragment/commit/7f679ba5fc5dd55ab3afaf8b101f054e13635fb3)), closes [#233](https://github.com/ThatOpen/engine_fragment/issues/233) +* implement model load abort ([bddbcfc](https://github.com/ThatOpen/engine_fragment/commit/bddbcfc7cfc5266cc5c311c19ae51caa0d22522a)) +* implement worker control ([c5fac67](https://github.com/ThatOpen/engine_fragment/commit/c5fac678c41a586b02b0c527227887bd7f65e208)) +* improve worker fetch logic ([d03b6a0](https://github.com/ThatOpen/engine_fragment/commit/d03b6a063a7e7536c687c6b12e8c08aadbce1ba4)) +* itemId-keyed snap fetch + picker encoding ([0f48bb6](https://github.com/ThatOpen/engine_fragment/commit/0f48bb62da6463f2988aeb3c1bedb2e99a479e15)) +* **model:** add VirtualIndexesController ([049a057](https://github.com/ThatOpen/engine_fragment/commit/049a057d52921bc8d1cd859d3097c94cedcd602b)), closes [#164](https://github.com/ThatOpen/engine_fragment/issues/164) +* **model:** expose user-defined index reads on FragmentsModel ([4a33282](https://github.com/ThatOpen/engine_fragment/commit/4a33282195f19bbc3dc81994175a2ed7a60edfe6)), closes [#164](https://github.com/ThatOpen/engine_fragment/issues/164) +* **model:** make index reads see pending edits ([5a08811](https://github.com/ThatOpen/engine_fragment/commit/5a08811c5534940bc48e01ff6a31e1b0b91a9029)), closes [#164](https://github.com/ThatOpen/engine_fragment/issues/164) +* **schema:** add ModelIndex table for user-defined lookups ([fd52cbc](https://github.com/ThatOpen/engine_fragment/commit/fd52cbce2e6e6bddbd740f788f1d39f1fb44d39b)), closes [#164](https://github.com/ThatOpen/engine_fragment/issues/164) +* **split:** return map of file paths to localIds ([#195](https://github.com/ThatOpen/engine_fragment/issues/195)) ([cf6345b](https://github.com/ThatOpen/engine_fragment/commit/cf6345ba9ce67c6fef9b56e29ab653042a6b84f2)) +* store localId in tile geometry id attribute ([7c69110](https://github.com/ThatOpen/engine_fragment/commit/7c69110bef484f648c679be73399ac34b197396e)) + + +### Bug Fixes + +* **`getShellData`:** bbox + raw shell not respecting `settings.precision` ([#212](https://github.com/ThatOpen/engine_fragment/issues/212)) ([6c67266](https://github.com/ThatOpen/engine_fragment/commit/6c672661e2727d4b5bea783e9bafe42d2289bf9d)) +* add getItemCategory wrapper to the virtual model ([#267](https://github.com/ThatOpen/engine_fragment/issues/267)) ([a95c679](https://github.com/ThatOpen/engine_fragment/commit/a95c679ac26e8529db98dddedde6515e39521b33)) +* **alignments:** dispose all alignment geometries and materials instead of throwing ([#235](https://github.com/ThatOpen/engine_fragment/issues/235)) ([22b0bde](https://github.com/ThatOpen/engine_fragment/commit/22b0bdea5c07d1f91d827dabc48c9755979d955a)) +* awaitable setup and clean disposal for SingleThreadedFragmentsModel ([#261](https://github.com/ThatOpen/engine_fragment/issues/261), [#262](https://github.com/ThatOpen/engine_fragment/issues/262)) ([2dd1748](https://github.com/ThatOpen/engine_fragment/commit/2dd17489e124d6fe0ee8af2835adba7d3424cc28)) +* build GeometryProcessSettings jsdoc into types ([#226](https://github.com/ThatOpen/engine_fragment/issues/226)) ([d4839d2](https://github.com/ThatOpen/engine_fragment/commit/d4839d23babb2a0fc5a94681a8f93e80b9f32a83)) +* cap the tile cache per worker ([217b9b0](https://github.com/ThatOpen/engine_fragment/commit/217b9b05da7d7e7fb54f01532715a0f441a9f6a8)) +* collectDeps no longer reports nonexistent ids ([ae6b024](https://github.com/ThatOpen/engine_fragment/commit/ae6b024d5b64dd2417445204d09af4a31ee8ba43)) +* compact tile indices into one draw range per tile ([9db04dd](https://github.com/ThatOpen/engine_fragment/commit/9db04dd66faa0ae42e166e9dc566ba7ef7e12cc5)) +* correct docs that break docusaurus ([7ff557c](https://github.com/ThatOpen/engine_fragment/commit/7ff557c620e7df59db807fcbc8908b8f5cd57e91)) +* correct worker url ([162f083](https://github.com/ThatOpen/engine_fragment/commit/162f083a225195c06ea1201162a5115172f8df10)) +* deliver both minified and non-minified code ([2ebcbe5](https://github.com/ThatOpen/engine_fragment/commit/2ebcbe5fa1f673add5b5ab2f1f39ff4bddb68bd5)) +* depth bias fields on MaterialDefinition to resolve coplanar z-fighting ([#266](https://github.com/ThatOpen/engine_fragment/issues/266)) ([caba371](https://github.com/ThatOpen/engine_fragment/commit/caba371731874e95b00514b4d180a2952072c7b1)) +* don't cull geometry before a camera is set ([43b1f9c](https://github.com/ThatOpen/engine_fragment/commit/43b1f9ccbd0fbd2500b00b51a5c0419d6888bc5b)), closes [#255](https://github.com/ThatOpen/engine_fragment/issues/255) +* **editor:** swap models in save() without blank-frame flicker ([#208](https://github.com/ThatOpen/engine_fragment/issues/208)) ([6a4391b](https://github.com/ThatOpen/engine_fragment/commit/6a4391b6279d3443de606505cf5aecc3deddc0f4)) +* fill tiles sorted by size ([e190daf](https://github.com/ThatOpen/engine_fragment/commit/e190dafc5a62c4d8accebeaaf016937ed0739249)) +* **FragmentsModels:** geometry-accurate rectangleRaycast selection ([705ea90](https://github.com/ThatOpen/engine_fragment/commit/705ea905b5a093faa71e181777b1e313d7b00b9b)), closes [#229](https://github.com/ThatOpen/engine_fragment/issues/229) +* **FragmentsModels:** keep per-item highlight colors in LOD/WIRES view ([29d6179](https://github.com/ThatOpen/engine_fragment/commit/29d61794367417be215891f485c184fbf5621f7f)), closes [#230](https://github.com/ThatOpen/engine_fragment/issues/230) +* **FragmentsModels:** stop ThreadUpdater idle timer leaking on import ([9985277](https://github.com/ThatOpen/engine_fragment/commit/99852770795c58657347f8d961d7d285cc97d578)), closes [#234](https://github.com/ThatOpen/engine_fragment/issues/234) +* **FragmentsModels:** transfer Uint8Array model data to the worker instead of cloning it ([#241](https://github.com/ThatOpen/engine_fragment/issues/241)) ([948b385](https://github.com/ThatOpen/engine_fragment/commit/948b385ce8795ae715bc1a8876dfc7ac1e6cc2dc)) +* get rid of debug logs ([03cd103](https://github.com/ThatOpen/engine_fragment/commit/03cd10361670d0285040f16b83210967f94b5cba)) +* **Grids:** add opt-in grid labels ([#199](https://github.com/ThatOpen/engine_fragment/issues/199)) ([fd11e67](https://github.com/ThatOpen/engine_fragment/commit/fd11e67fc9c75ba47bc708b9e9d787ad9fa46c85)) +* hierarchical frustum culling via the box structure ([2a6d31c](https://github.com/ThatOpen/engine_fragment/commit/2a6d31c38234d8517e2a08594c20aa3e031f7eec)) +* **highlight:** clear all items on no-args resetHighlight ([00e7fe0](https://github.com/ThatOpen/engine_fragment/commit/00e7fe0335f0b13e6349363dbfe7dc36221c8761)) +* **ifc-importer:** render IFCBEARING and IFCREFERENT ([#744](https://github.com/ThatOpen/engine_fragment/issues/744)) ([2b171e3](https://github.com/ThatOpen/engine_fragment/commit/2b171e3d94d956d69eb86ff5cbee58d3b51a19f8)) +* **ifc-splitter:** add `IFCMECHANICALFASTENER` to elements types ([#179](https://github.com/ThatOpen/engine_fragment/issues/179)) ([e33a9b0](https://github.com/ThatOpen/engine_fragment/commit/e33a9b0f918e38e2d3947d76218b95fabe70bdf6)) +* **IfcImporter:** add IFCBRIDGE to default elements ([6f10d85](https://github.com/ThatOpen/engine_fragment/commit/6f10d85edaac55236244868630354fd84f381328)), closes [#203](https://github.com/ThatOpen/engine_fragment/issues/203) +* **IfcImporter:** convert grids when a grid axis tag is omitted ([#244](https://github.com/ThatOpen/engine_fragment/issues/244)) ([2131605](https://github.com/ThatOpen/engine_fragment/commit/21316056caf518e977ee6eefe4a75934e38a50fd)) +* **IfcImporter:** import material property sets behind includeMaterialProperties ([#249](https://github.com/ThatOpen/engine_fragment/issues/249)) ([e53276f](https://github.com/ThatOpen/engine_fragment/commit/e53276f3d1c1594c785750b1744650c87d42e07d)) +* **IfcImporter:** order-sensitive vertex hashing in the geometry dedup key ([dfdd873](https://github.com/ThatOpen/engine_fragment/commit/dfdd8733e69455efccf58ac2ff369c137f7fc1a1)) +* improve the getItemsByVisibility ([e68c376](https://github.com/ThatOpen/engine_fragment/commit/e68c376d7f679e51d7bfa09aedde118ba616ea00)) +* include property names in rendered material identity ([6242c2b](https://github.com/ThatOpen/engine_fragment/commit/6242c2b6d8c2c204b08dcb3fd5643c5ca6c46f15)) +* include type entities and solve DefinesOccurrence typo ([79b134a](https://github.com/ThatOpen/engine_fragment/commit/79b134adbc0d2e6a9704fedb28d9da9feb7b129e)) +* index edit requests for faster property reads ([0ced7f1](https://github.com/ThatOpen/engine_fragment/commit/0ced7f14829e0c0ea02d69d16b1228200fb34d4c)) +* index items by category for getItemsOfCategories ([5b8d4f5](https://github.com/ThatOpen/engine_fragment/commit/5b8d4f57724b0276785bf9f6660447d188b65fbb)) +* **Indexes:** add getIndexKey and getIndexValues ([#215](https://github.com/ThatOpen/engine_fragment/issues/215)) ([a2d945f](https://github.com/ThatOpen/engine_fragment/commit/a2d945f96d289cb5b0262038785b9cb5083f1d03)) +* **Indexes:** generic types for index read methods ([#224](https://github.com/ThatOpen/engine_fragment/issues/224)) ([1d1db70](https://github.com/ThatOpen/engine_fragment/commit/1d1db707e327115144937a3c738b623c213b5c92)) +* **Indexes:** validate index edit requests ([#223](https://github.com/ThatOpen/engine_fragment/issues/223)) ([5ae2527](https://github.com/ThatOpen/engine_fragment/commit/5ae2527500eb29fe9f4e30b8ecf95184a52d9ac9)) +* **Indexes:** validate index number keys/values are non-negative 32-bit integers ([9e57acf](https://github.com/ThatOpen/engine_fragment/commit/9e57acff6814dc13eb58a088d6d951fa5755935f)), closes [#214](https://github.com/ThatOpen/engine_fragment/issues/214) +* keep example.html filename in generated index links ([36b1357](https://github.com/ThatOpen/engine_fragment/commit/36b13574b5ad0b0b9d11de964afdaa2ba4571215)) +* keep web-ifc out of the worker bundle ([#289](https://github.com/ThatOpen/engine_fragment/issues/289)) ([2e7b7bd](https://github.com/ThatOpen/engine_fragment/commit/2e7b7bd5d49b08f4adf9c12f92e51dd1e6b6876d)) +* **parser:** streaming STEP tokenizer with web-ifc tape parity ([dceedc8](https://github.com/ThatOpen/engine_fragment/commit/dceedc86d3e39cb91faf2da675f2025b143e5833)) +* **raycaster:** full precision result.facePoints ([#205](https://github.com/ThatOpen/engine_fragment/issues/205)) ([ccbc174](https://github.com/ThatOpen/engine_fragment/commit/ccbc174eb523e694834e6d4cfbf3af10b08756ac)) +* **raycaster:** type facePoints as Float64Array ([0208f9a](https://github.com/ThatOpen/engine_fragment/commit/0208f9a22b3a5b12071c210fbcfe1035b51d90a4)) +* read alignments when vertical data is missing ([5f67ad4](https://github.com/ThatOpen/engine_fragment/commit/5f67ad4ce6b1d530a0b0abc2065f5be8d5c29c9a)) +* render faces whose normal has two equal components ([#218](https://github.com/ThatOpen/engine_fragment/issues/218)) ([24cfb48](https://github.com/ThatOpen/engine_fragment/commit/24cfb48cb7dc233e4b4998cc37023b57884691d6)), closes [#206](https://github.com/ThatOpen/engine_fragment/issues/206) +* restore raw output as default for edit() and save() ([ff9f387](https://github.com/ThatOpen/engine_fragment/commit/ff9f38766cf224224a9f33d6ade95a87cc6512ff)) +* reuse identical preserved material definitions ([63bc3e9](https://github.com/ThatOpen/engine_fragment/commit/63bc3e970397efa2832ce7a19535ebe2c72f6f23)) +* rotate thread updater across workers ([4ed4d47](https://github.com/ThatOpen/engine_fragment/commit/4ed4d47a8b98b2f7e0e62d7e35a03f503ce4a033)) +* setSample passes real visibility to updateTile ([c6a0d2f](https://github.com/ThatOpen/engine_fragment/commit/c6a0d2f0fe49386bfea4549eb3b2ec31f9ceef8e)) +* settle update fences when no models remain ([9746997](https://github.com/ThatOpen/engine_fragment/commit/9746997b208fe31e7abe7aa6f54add9627a513d2)) +* **SingleThreadedFragmentsModel:** `getItemsChildren` return value ([#220](https://github.com/ThatOpen/engine_fragment/issues/220)) ([c30e553](https://github.com/ThatOpen/engine_fragment/commit/c30e553bb7d7e09a81070010ecf49f5df6119ec8)) +* **SingleThreadedFragmentsModel:** expose `raw` arg ([#209](https://github.com/ThatOpen/engine_fragment/issues/209)) ([3f58f6e](https://github.com/ThatOpen/engine_fragment/commit/3f58f6e3a39605c82294c80fff50a2285b098df1)) +* skip delta rebuild on data-only edits ([700b1b1](https://github.com/ThatOpen/engine_fragment/commit/700b1b1f4816e0de1cffb2c1acc6bfa020bc411b)) +* skip IFC relations with unset relating/related attributes ([#217](https://github.com/ThatOpen/engine_fragment/issues/217)) ([ea4104d](https://github.com/ThatOpen/engine_fragment/commit/ea4104d14823ee9bb7e400a89efc582888c216d1)) +* solve bug due to rebar circle curve edge case ([fab19d6](https://github.com/ThatOpen/engine_fragment/commit/fab19d6700f0b6ee14a0072d45b8b455674ab14a)) +* solve grid bug in some bim models ([161b5b6](https://github.com/ThatOpen/engine_fragment/commit/161b5b6c6a92bb3fcb23b317bef61a564e24c880)) +* solve ifc splitter missing lines ([bbf890c](https://github.com/ThatOpen/engine_fragment/commit/bbf890ca2213007a1f91de6fbb0c3a4f1f5f9c6c)) +* **split:** configurable IfcSplitter type lists and options ([a16437b](https://github.com/ThatOpen/engine_fragment/commit/a16437bc2249772c1936012852216a6d7b03ad7e)) +* **splitter:** environment-agnostic streaming IO for split and extract ([#197](https://github.com/ThatOpen/engine_fragment/issues/197)) ([40db05b](https://github.com/ThatOpen/engine_fragment/commit/40db05bcf3dda9c31e242307e57f3493899d4c0d)), closes [#180](https://github.com/ThatOpen/engine_fragment/issues/180) +* **splitter:** inline fixture conversion and test timeouts ([ec7a7c7](https://github.com/ThatOpen/engine_fragment/commit/ec7a7c79337bda79d6fdf20442ab4eb3f1553b10)) +* stamp generator and version into model metadata ([#273](https://github.com/ThatOpen/engine_fragment/issues/273)) ([7da302d](https://github.com/ThatOpen/engine_fragment/commit/7da302df8dc1c7e1a6bdea4ba07f63af1be2495c)) +* surface unsupported grid axis curves instead of dropping them ([#264](https://github.com/ThatOpen/engine_fragment/issues/264)) ([d02a8a3](https://github.com/ThatOpen/engine_fragment/commit/d02a8a380dade48663f13cbaae91f31adf5372a7)) +* survive grids without ObjectPlacement and report per-grid failures ([#263](https://github.com/ThatOpen/engine_fragment/issues/263)) ([74d0b3e](https://github.com/ThatOpen/engine_fragment/commit/74d0b3ed37784a17994cc4c26ef6613d18466808)) +* **TS:** `ProcessData#readCallback` type/jsdocs ([#178](https://github.com/ThatOpen/engine_fragment/issues/178)) ([0f89ec0](https://github.com/ThatOpen/engine_fragment/commit/0f89ec0a1a00b437b37cdd3f801fe14b588f36da)) +* upgrade examples to latest three.js version ([a73bf32](https://github.com/ThatOpen/engine_fragment/commit/a73bf32d9cc628daf75f6d270bef65d160426f92)) +* **visibility:** query item visibility in the itemId space ([#750](https://github.com/ThatOpen/engine_fragment/issues/750)) ([ea620e3](https://github.com/ThatOpen/engine_fragment/commit/ea620e3ee3a30fb0fc1ce4d764801e42049a7f04)) +* write 0 sentinel instead of raw itemIndex when localId lookup misses ([7c560a5](https://github.com/ThatOpen/engine_fragment/commit/7c560a59b10f490e78e8d30017d0a243fa55e3ec)) + + +### Performance Improvements + +* **FragmentsModels:** coalesce forced updates inside the rate window instead of bypassing it ([756e3f1](https://github.com/ThatOpen/engine_fragment/commit/756e3f1960560df25be2f7597baa8e9fa64c2212)) +* **FragmentsModels:** memoize localId index lookups in properties controller ([#245](https://github.com/ThatOpen/engine_fragment/issues/245)) ([dc8d5b2](https://github.com/ThatOpen/engine_fragment/commit/dc8d5b2e2a6f0f459b6a1ec298610d51285a111a)) +* **FragmentsModels:** skip view refresh and re-cull when the view is unchanged ([d5627de](https://github.com/ThatOpen/engine_fragment/commit/d5627dee59e4585682a592d0927a9ad9786f6b38)) +* **FragmentsModels:** use Set lookup for itemIds filter in getItemsByAttribute ([#246](https://github.com/ThatOpen/engine_fragment/issues/246)) ([ce1f686](https://github.com/ThatOpen/engine_fragment/commit/ce1f686899002b971513fe33a51da0042e6e25a3)) +* lower default worker timing knobs ([6c5b7db](https://github.com/ThatOpen/engine_fragment/commit/6c5b7db61282f00f1b5a2b7df068c41134542c72)) +* sequence-fenced update(true), drain on every FINISH ([aaf44ba](https://github.com/ThatOpen/engine_fragment/commit/aaf44ba0014e81cdfa213c0d212b3ce1e49a011d)) + ## [3.4.0](https://github.com/ThatOpen/engine_fragment/compare/v3.3.2...v3.4.0) (2026-04-09) diff --git a/package.json b/package.json index aee8bfe3..32b36c87 100644 --- a/package.json +++ b/package.json @@ -39,5 +39,5 @@ "vite": "5.1.6", "vite-plugin-dts": "3.7.3" }, - "version": "3.4.0" + "version": "3.5.0" }