@@ -1,5 +1,15 @@
|
||||
# Changelog
|
||||
|
||||
## 0.2.0 - 2026-09-02
|
||||
|
||||
- Moved model parsing into cancellable worker jobs and made glTF scene selection,
|
||||
hierarchy matrices and mesh instancing drive preview, bounds, statistics and
|
||||
export.
|
||||
- Added explicit per-axis transforms, glTF metallic-roughness material
|
||||
inspection, safe degenerate-triangle repair and bounded ASCII PLY export.
|
||||
- Declared accurate supported model input/export and worker/WebGL capability
|
||||
profiles for Toolbox handoff.
|
||||
|
||||
## 0.1.0 - 2026-09-01
|
||||
|
||||
- Added bounded OBJ, STL, PLY and glTF/GLB triangle parsers.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
==============================================================================
|
||||
@add-ideas/toolbox-contract@0.2.3
|
||||
@add-ideas/toolbox-contract@0.3.0
|
||||
Declared licence: Apache-2.0
|
||||
==============================================================================
|
||||
--- LICENSE ---
|
||||
@@ -198,7 +198,7 @@ Declared licence: Apache-2.0
|
||||
|
||||
|
||||
==============================================================================
|
||||
@add-ideas/toolbox-helpers@0.1.0
|
||||
@add-ideas/toolbox-helpers@0.2.0
|
||||
Declared licence: GPL-3.0-or-later
|
||||
==============================================================================
|
||||
--- LICENSE ---
|
||||
@@ -879,7 +879,7 @@ Public License instead of this License. But first, please read
|
||||
|
||||
|
||||
==============================================================================
|
||||
@add-ideas/toolbox-shell-react@0.2.3
|
||||
@add-ideas/toolbox-shell-react@0.3.0
|
||||
Declared licence: Apache-2.0
|
||||
==============================================================================
|
||||
--- LICENSE ---
|
||||
|
||||
+14
-5
@@ -6,21 +6,30 @@ Inspect, preview, repair and export triangle meshes locally in the browser. File
|
||||
|
||||
- Real bounded parsers for Wavefront OBJ, binary/ASCII STL, ASCII/binary little-endian PLY and glTF 2/GLB 2.
|
||||
- Inert embedded glTF buffers only; external buffers, textures, scripts and OBJ material libraries are never fetched.
|
||||
- Correct selected-scene hierarchy, matrix/TRS transform and mesh-instancing
|
||||
flattening, including normal matrices and mirrored winding.
|
||||
- Metallic/roughness material inspection covers base colour, emissive factor,
|
||||
alpha, sidedness and declared texture slots without decoding texture content.
|
||||
- Worker-based parsing with progress, cancellation and stale-result suppression.
|
||||
- Mesh, material, scene-node, bound, surface-area and degenerate-triangle statistics.
|
||||
- Responsive drag-to-rotate WebGL preview capped independently from full-file analysis.
|
||||
- Area-weighted normal repair and finite translation, rotation and uniform-scale baking.
|
||||
- Deterministic normalized OBJ and binary STL exports with explicit format-loss notes.
|
||||
- Area-weighted normal repair, degenerate-triangle removal and finite translation,
|
||||
rotation, uniform and per-axis scale baking.
|
||||
- Deterministic normalized OBJ, binary STL and bounded ASCII PLY exports with
|
||||
explicit format-loss notes.
|
||||
- Offline PWA and shared Toolbox system/light/dark shell.
|
||||
|
||||
## Supported subset and limits
|
||||
|
||||
Input is capped at 32 MiB, one million vertices, one million triangles, 10,000 glTF scene nodes, JSON depth 64 and 100,000 JSON nodes. OBJ polygons and PLY faces are fan-triangulated. PLY supports version-1.0 ASCII and binary little-endian scalar/list properties. glTF supports embedded buffers, FLOAT POSITION/NORMAL accessors, unsigned indices and TRIANGLES primitives. Sparse accessors, animations, skins, textures, Draco/Meshopt and external resources are not decoded in v0.1.0.
|
||||
Input is capped at 32 MiB, one million vertices, one million triangles, 10,000 glTF scene nodes, JSON depth 64 and 100,000 JSON nodes. OBJ polygons and PLY faces are fan-triangulated. PLY supports version-1.0 ASCII and binary little-endian scalar/list properties. glTF supports embedded buffers, FLOAT POSITION/NORMAL accessors, unsigned indices and TRIANGLES primitives. Sparse accessors, animations, skins, textures, Draco/Meshopt and external resources are not decoded in v0.2.0.
|
||||
|
||||
The normalized preview/export mesh does not bake glTF node transforms or recreate source material graphs. These limitations are reported rather than silently represented as equivalent output.
|
||||
The normalized preview/export mesh bakes the selected glTF scene hierarchy and
|
||||
instances, but does not recreate source material graphs. These limitations are
|
||||
reported rather than silently represented as equivalent output.
|
||||
|
||||
## Development
|
||||
|
||||
Run npm ci, npm run check, npm run test:browser and npm run package:release -- --force with Node.js 22+ and npm 11. The deterministic artifact is release/3d-tools-0.1.0.zip with a SHA-256 sidecar.
|
||||
Run npm ci, npm run check, npm run test:browser and npm run package:release -- --force with Node.js 22+ and npm 11. The deterministic artifact is release/3d-tools-0.2.0.zip with a SHA-256 sidecar.
|
||||
|
||||
## Licence
|
||||
|
||||
|
||||
+12
-2
@@ -1,5 +1,15 @@
|
||||
# Security policy
|
||||
|
||||
Report vulnerabilities privately to the repository owner. Supported version: 0.1.x.
|
||||
Report vulnerabilities privately to the repository owner. Supported version: 0.2.x.
|
||||
|
||||
3D Tools makes no uploads, telemetry or third-party requests. JSON is parsed as inert data under text, depth, node and token-count bounds. Exporters escape Android XML and quote Swift strings. Generated source remains an input to another toolchain and must be reviewed before production use.
|
||||
3D Tools makes no uploads, telemetry or third-party requests. OBJ, STL, PLY and
|
||||
glTF/GLB files are treated as untrusted data under documented byte, JSON,
|
||||
geometry and scene-graph bounds. Parsing runs in a disposable worker, and
|
||||
revision-scoped results prevent cancelled or superseded jobs from replacing
|
||||
newer state.
|
||||
|
||||
External glTF resources are rejected, data URIs are decoded locally, and OBJ
|
||||
material-library references are never fetched. Imported text cannot become
|
||||
HTML, JavaScript or shader source. WebGL receives finite numeric arrays and
|
||||
fixed application-owned shaders; a preview failure does not block inspection,
|
||||
repair or export.
|
||||
|
||||
+2
-2
@@ -1,10 +1,10 @@
|
||||
# Source identity
|
||||
|
||||
- Project: 3D Tools
|
||||
- Version: 0.1.0
|
||||
- Version: 0.2.0
|
||||
- Repository: https://git.add-ideas.de/lotobo/3d-tools
|
||||
- Licence: GPL-3.0-or-later
|
||||
- Build: Node.js 22+, npm 11, `npm ci && npm run release:artifact`
|
||||
- Artifact: `3d-tools-0.1.0.zip`
|
||||
- Artifact: `3d-tools-0.2.0.zip`
|
||||
|
||||
The lockfile pins dependencies exactly. Generated release manifests repeat this source identity and releases include detected runtime licence texts under `LICENSES/`.
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
# Third-party notices
|
||||
|
||||
3D Tools is GPL-3.0-or-later. Runtime dependencies are React, React DOM and the add·ideas Toolbox Contract, Shell and Helpers packages. Exact versions and declared licences are recorded in `package-lock.json`; detected runtime licence texts are generated into release archives at `LICENSES/npm-runtime-licenses.txt`.
|
||||
3D Tools is GPL-3.0-or-later. Runtime dependencies are React and React DOM
|
||||
(MIT), add·ideas Toolbox Contract and Shell React 0.3.0 (Apache-2.0), and
|
||||
Toolbox Helpers 0.2.0 (GPL-3.0-or-later). Exact versions and declared licences
|
||||
are recorded in `package-lock.json`; detected runtime licence texts are
|
||||
generated into release archives at `LICENSES/npm-runtime-licenses.txt`.
|
||||
|
||||
@@ -1,6 +1,21 @@
|
||||
# Architecture
|
||||
|
||||
The core/model.ts module converts every supported source into one inert model containing finite position/normal arrays, triangle indices and descriptive scene metadata. Parser-specific bounds are enforced before allocation and again on normalized geometry. Normal repair, transforms, statistics and exporters consume only that model.
|
||||
The core/model.ts module converts every supported source into one inert model
|
||||
containing finite position/normal arrays, triangle indices and descriptive scene
|
||||
metadata. Imports run in a disposable module worker with progress, cancellation
|
||||
and revision-scoped results. Parser-specific bounds are enforced before
|
||||
allocation and again on normalized geometry. Normal repair, transforms,
|
||||
statistics and exporters consume only that model.
|
||||
|
||||
For glTF/GLB, the selected/default scene is traversed as a validated acyclic
|
||||
hierarchy. Column-major matrices and TRS/quaternion transforms are composed,
|
||||
inverse-transpose normal transforms and mirrored winding are applied, and every
|
||||
mesh instance is flattened into the bounded model. Consequently preview,
|
||||
bounds, surface statistics, OBJ, STL and PLY all describe the same selected scene.
|
||||
Selected metallic/roughness material factors and declared texture slots remain
|
||||
inert inspection metadata; texture payloads are not decoded. Per-axis transforms
|
||||
use inverse-transpose normal handling, while bounded repair can discard only
|
||||
geometrically degenerate faces before recalculating normals.
|
||||
|
||||
The preview expands at most 200,000 triangles into a dedicated WebGL buffer. It uses fixed application-owned shaders and never compiles source-file content. Full statistics and exports still use the complete bounded model. glTF data URIs are decoded locally; non-data URIs are rejected.
|
||||
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
const CACHE_PREFIX = "3d-tools-shell-";
|
||||
const CACHE_NAME = CACHE_PREFIX + "0.1.0";
|
||||
const CACHE_NAME = CACHE_PREFIX + "0.2.0";
|
||||
const CORE = ["./", "./manifest.webmanifest", "./favicon.svg"];
|
||||
self.addEventListener("install", (event) => {
|
||||
event.waitUntil(
|
||||
|
||||
+18
-3
@@ -3,12 +3,12 @@
|
||||
"schemaVersion": 1,
|
||||
"id": "de.add-ideas.3d-tools",
|
||||
"name": "3D Tools",
|
||||
"version": "0.1.0",
|
||||
"description": "Inspect and repair 3D meshes locally.",
|
||||
"version": "0.2.0",
|
||||
"description": "Inspect, transform, repair and export 3D meshes locally.",
|
||||
"entry": "./",
|
||||
"icon": "./favicon.svg",
|
||||
"categories": ["media", "developer", "design"],
|
||||
"tags": ["3d", "obj", "stl", "ply", "gltf", "webgl"],
|
||||
"tags": ["3d", "obj", "stl", "ply", "gltf", "pbr", "webgl"],
|
||||
"integration": {
|
||||
"contextVersion": 1,
|
||||
"launchModes": ["navigate", "new-tab"],
|
||||
@@ -21,6 +21,21 @@
|
||||
"crossOriginIsolated": false,
|
||||
"topLevelContext": false
|
||||
},
|
||||
"io": {
|
||||
"accepts": [
|
||||
{ "mediaType": "model/obj", "extensions": [".obj"] },
|
||||
{ "mediaType": "model/stl", "extensions": [".stl"] },
|
||||
{ "mediaType": "model/ply", "extensions": [".ply"] },
|
||||
{ "mediaType": "model/gltf+json", "extensions": [".gltf"] },
|
||||
{ "mediaType": "model/gltf-binary", "extensions": [".glb"] }
|
||||
],
|
||||
"produces": [
|
||||
{ "mediaType": "model/obj", "extensions": [".obj"] },
|
||||
{ "mediaType": "model/stl", "extensions": [".stl"] },
|
||||
{ "mediaType": "model/ply", "extensions": [".ply"] }
|
||||
]
|
||||
},
|
||||
"capabilities": { "required": [], "optional": ["workers", "webgl"] },
|
||||
"privacy": {
|
||||
"processing": "local",
|
||||
"fileUploads": true,
|
||||
|
||||
Reference in New Issue
Block a user