One coordinate unit becomes one inch

A coordinate value of one does not say whether a part measures one inch or one millimetre. The source STL here spans exactly one coordinate unit along each axis. The experiment assigns inches, then exports a 3MF that explicitly records millimetres.

How this was measured

The interpretation step leaves the coordinates unchanged. The exact relationship of one inch to 25.4 millimetres gives an independent expected extent of 25.4 mm. The preparation exporter scales the interpreted geometry, writes the millimetre unit in 3MF, and rereads the output to check its dimensions and topology. The source file stays unchanged.

Recorded output from this experiment
MeasurementValue
before / triangles4
before / dimensions1 × 1 × 1
before / unitsNot recorded
before / open Edges0
before / inconsistent Edges0
before / non Manifold Edges0
before / degenerate Triangles0
before / components1
interpreted / triangles4
interpreted / dimensions1 × 1 × 1
interpreted / unitsin
interpreted / open Edges0
interpreted / inconsistent Edges0
interpreted / non Manifold Edges0
interpreted / degenerate Triangles0
interpreted / components1
after / min0 × 0 × 0
after / max25.4 × 25.4 × 25.4
after / size25.4 × 25.4 × 25.4
output Unitmm

What the result does not establish

Nothing in the STL proves that inches were intended. That is an explicit choice for this example. Assigning a different interpretation would describe a different physical size, whereas converting units preserves the chosen physical size. A receiving application still needs to respect the unit recorded in 3MF.

Try these files

These samples were created by this project and released under CC0. They contain no visitor files. Sizes and SHA-256 hashes identify the exact bytes measured in this experiment.

Use this result

Versions and reproduction

Evidence generated 2026-09-05T21:13:29.140Z. The checked-in generator rebuilds the sample collection and measurements with one command:

node --experimental-strip-types scripts/build-workbench-evidence.ts

CAD source generation: scripts/build-workbench-cad.py with cadquery-ocp 7.9.3.1.1; checked-in analytic cylinder outputs. The STEP and IGES outputs are checked in so ordinary evidence rebuilds do not require Python.

@astrojs/cloudflare
14.3.0
@cloudflare/containers
0.3.7
astro
7.3.1
fflate
0.8.3
jose
6.2.12
occt-import-js
0.0.23
rhino3dm
8.32.2
three
0.185.1

Geometry source and generator SHA-256 hashes:

core/affine.ts
cff986695025f835e54c530ef654a3b7b19862d5f5feba08a361f2db708fbe65
core/bytes.ts
850a1863a411549bbaf73e85d339dd3109fb57aca4e89e1cbeb0a06cdb3cc924
core/convert.ts
e9e96ecbb498338b85bc122a7e328ae9d96666b2dadce581e4f86e8b7b59689d
core/deflate-validation.ts
7427464082422b2a484cb4b845e21a41dbb015ffddb83a4d1f938b6c32cb40f1
core/detect.ts
4c64ca45732c4339749fed372b20e6996f17e1f4d307046ad71e047723ccf3e9
core/formats.ts
f037f0543d19f5ffebe97ea40450c5b646d6d5164ae4e816bf3dce6cf3685479
core/index.ts
6dcf467a7b1952cf270fd834927404b19eb58bc6d1f2542d8c420bda90d4e3f7
core/inspect.ts
44100ac51622e986e3ab63e49d6704dde539141454e273b76d5be70b5115a1ec
core/model.ts
bef860184a185c098d72d30a12cfaa7fe3199b96dbde0e65428b8f3bfe6c79a5
core/read/3dm.ts
f26a7d22c86dc6780ce218822eafa4cc5dbf76f35289a6266f6f2161bd84127e
core/read/3ds.ts
0142d9f82937566220d6616c52800ffa856fff500bab3e26e90c0cdc0c6f7e32
core/read/3mf-package.ts
11ad7a82d1dc5698412479d0c6351c5b88cfbc308ebee4a5d91fdc71d969af51
core/read/3mf.ts
9378aa3156d5b908d4ce2ac551b76500247762de75a21b29ae0b2feb341a950e
core/read/amf.ts
b68b2de1c27d3c374ce4e2ce4215c8a6edcfbccac3e9a7ed0f623956cfe4afde
core/read/dae.ts
acf671ba4ea931ca4e958a67886978e61da9c7cb936cb835265f86d3b271b2c5
core/read/fbx-scene.ts
89bb4fa1718fafa1e8dd8ec27197e83752fe8af7bf0c04b5d49586f611d9812d
core/read/fbx.ts
33c87b835bf7ba11a2dd937fd78ff21a094076e9b9d95e7d24e40ea859c16bf3
core/read/gltf.ts
23296adfe9591efb9a7179413bf5a1ffe9a47acffa3daf997055c20ebd249c6c
core/read/obj.ts
86fe1097ed8c07d052753255a17adcd746d3ccd847351a5632f78ecb7b8f8605
core/read/occt.ts
1c129dc8ffb4f03bc992dd8940681acb92a4ed03271ce47485f3ac1533182117
core/read/ply.ts
3cac9da6d62be20ae016cef751b01c14c0ebccd67d921107c56e8297835d2933
core/read/scene-validation.ts
62e1f08faf9a9253e3b5d6c15395cbc97bc093e3867ce1aab87a3af8db704ebc
core/read/stl.ts
ac53b792bd9cb8bff4366331fa0bb49844c7d6fcf9df47819cc75544e812dec9
core/read/usdz.ts
caded369def6d998931378c616c271c565840ad280e5d797d4674f2ab1222fcb
core/read/workbench-3mf-reader.ts
5f5ec69531981e06ef5246debe02b89323b065c928988bdc85c5d4f7675660da
core/read/wrl-preflight.ts
2a4ef48b020ef98b381ab33aa34266bb5c43de716e2e38256598d69996d235ac
core/read/wrl.ts
ad3d6869874f7a3ac51ca09d885af0dec0376249f395bc083f5d8961d8c228af
core/report.ts
3758e6ea6f7453b23bb21682caa8828464add92d839c0cc8ae30fe46c4ca54fa
core/three-bridge.ts
84d16dd2834354c360a85453499abfbc462cc616714fe7a04992ab18ab5037ff
core/units.ts
f5367c6aa2932463c90769fd0ac080e8a42aec71facf63ae32b0b08337020963
core/wasm.ts
5022bce9c3bfcf438525245373c798ff153c5ba716203ce1224318f1093da739
core/workbench/export.ts
cd663d1787eb8b97268bf12c9967e598223b98a9701fcd5bc948913b39725f62
core/workbench/geometry.ts
7228ab0996857e68d69ccb5575be641f07159bc340bbc9b660d31d39f7deea31
core/workbench/tessellation.ts
f0b644e54709887e5651cdd6264e8678ed56fb9c3aebf1bd4f20124ca8cc4aea
core/workbench/workbench-capability-report.ts
4f06ec57789c96892f7691c8c691867364ce80822f5cfc97bdcbe896f47e45d4
core/write/3mf.ts
bf9afa50480b3cb71a2a768897b7dfd5347cafa6f4d3d59550c19edf4c80446a
core/write/gltf.ts
f650b65a62d81b2c617448053726e89b4a6e0beb27955dea8e1d413d4156c0a0
core/write/obj.ts
cb0b5571284c4fe9b217a82057fd0758d406bba0fd50815313fe4ca4d4f0248c
core/write/ply.ts
cd71a26936091a3619cd67f9dc609101aea8a1ee84bc7b5c7fafcc551a328797
core/write/step.ts
05b888318d999a952aa5d9b2bddc47a79ef9d361b6828058df4b834c6ca886fd
core/write/stl.ts
bed130d62ee6a645d79ea8fdd70441e9abb0962354963798387601f458167323
core/write/usdz.ts
4cd8d9bf0d1aa1755c374980e5fb863b3045979e8201f8d79fc8e0857c09e962
core/xml-namespaces.ts
10820125e1331ee730f577319faea4f279f1dd5a7b29a4bb7ec56475b7a9b0d8
core/xml.ts
b1b9e09cda3013013956dd0c0ad915dc17d6ee499d9d0ec7cd6298aa5c625184
core/zip-strict.ts
76bdd9135e717129fa130c5597134b96056e77dbe2f3b4ed493dacd98a1ba972
core/zip-write.ts
4db10ba581fe543ff7b3330276c8843a6ca709884b570444ab523d49aa642771
core/zip.ts
71749962d39fec82ede645be7d9193edaaec800b3de71527c2e32a80ad54f529
corpus/workbench/cylinder.iges
81274edc6d86ea10fe439b7077d4a0451159d16bc9802d4c778556425631a507
corpus/workbench/cylinder.step
0004159d7b2a121deb50aeba379c153ed27b412a8a38782a65513b3a58583a1e
package-lock.json
af6a2e949a477492e6adfcc9042705c4a785cff25715acf2ed4e85578a304627
package.json
f506303de4ba20f6ad49a2e862be535b1374ac2d6485f1875b01c04fc1426b8f
scripts/build-workbench-cad.py
6498bdf6347ba27e6d12d3818b5793113c2e74d0d227c68ba9fab7d22dba97b1
scripts/build-workbench-evidence.ts
68716afd03c0d6e79a051eac57cc7a37a26218b9b119857f35dfb1663ac8770a
test/core/workbench-3mf-baseline.test.ts
486b840aae41494b9a501d1403cb98f8c991725327e40132d96d2e53788ae4de
test/core/workbench-3mf-integration.test.ts
7486085c9367e2a543f321d63a49dc621670141812a90b46e7651a718a0e165c
test/core/workbench-3mf-package.test.ts
6a44fe9c9c5e79b026155a3d25bcfd31e41a588fcd5b0cfddb9de9f370fe444d
test/core/workbench-3mf-reader.test.ts
41b8112430e7a77b34e15e7bbe081f8548d4d686c5a98ac42dc72b7d651ddb40
test/core/workbench-collada-transforms.test.ts
a3a0191626f4f1603d8d393437312609cdd7b32e620a77e30965bb739eb03c70
test/core/workbench-fbx-transforms.test.ts
3601ac964baaae9eecda62c2301babd740a850f7e6c0d6a7569545a412105cdb
test/core/workbench-writer-transforms.test.ts
03e8b9524d2b952f94c2ffef015d3e9b6d3a2f1882f16cb2138e96eeb5b85af0
test/core/workbench-wrl.test.ts
eb2f2188c418080e14a4695f3b3025aaeb507a7ab5ea11be55cd7e17c4af76e4
test/core/workbench-xml-namespaces.test.ts
de2661f4bd9414972a916eb9616c3b4f2baf4ff2a71de8268ee3a77fe8e271f5
test/core/workbench-zip-strict.test.ts
36b56e2b3b46c3e0fbeba5ee022057a33b3dd91a68af83e58c388af028fe4a6c
test/fixtures/3mf-reader-baseline.json
91ebcb16f07e8154612d02724e55282727fec77f831535400b294ec9b61655ff
test/fixtures/collada-transforms-baseline.json
aaaeeb63ed51414e8a8e44e7d8fb0b5341cc3d9f96a6107c4fe4d3ef9a407150
test/fixtures/workbench-3mf.ts
1b81c046312396e774bbf4c5ee7199c2eabc02ec4253d4fa2501ba8635b1a026
test/fixtures/workbench-challenges.ts
1d452755c74fed6b00b607f3b794a7213dc3c82011471b33721dafefe69715ba
test/fixtures/workbench-rhino.ts
2dc0df1e0ae5bdd1142d3ffadcedc767c613fe59fb66cf59e8a9067e253461f3
test/fixtures/workbench-scene-readers.ts
e2c424f846248286392ff58a6d7c01a4ecf251e4dc69a32c31e4bd59dc0cd950
test/fixtures/workbench-wrl.ts
808710bd63fa0d1b2cec322184cf916ffaaa21152190e62b4f723d419fa6e5fa
test/fixtures/workbench.ts
06a23ec65d5e9aaf663aca6ec65a5f2005f52d4e76d7cb8f77f088cdd1b992a5
test/fixtures/writer-transforms-baseline.json
f421c74d527e73d00cd191611ccc0beebc0f8c37899969418446724f84fb8172
test/fixtures/writer-transforms.ts
42848e9870398b7858285e1b3450147d71a2c2dc91d4c614f950cd4ac6327555