@ifc-lite/renderer 1.30.0 → 1.30.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -50,6 +50,12 @@ export interface PickFitPolicyOptions {
|
|
|
50
50
|
* at the default; exposed for tests that pin the threshold behaviour.
|
|
51
51
|
*/
|
|
52
52
|
linearAspectThreshold?: number;
|
|
53
|
+
/**
|
|
54
|
+
* Override the minimum longest-axis extent (world units) at/above which the
|
|
55
|
+
* linear policy is allowed to apply. Production should leave this at the
|
|
56
|
+
* default; exposed for tests that pin the size-floor behaviour.
|
|
57
|
+
*/
|
|
58
|
+
linearMinLongest?: number;
|
|
53
59
|
}
|
|
54
60
|
/**
|
|
55
61
|
* Compute the fit pose for a scene's bounding box. Pure function — no
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera-fit-policy.d.ts","sourceRoot":"","sources":["../src/camera-fit-policy.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"camera-fit-policy.d.ts","sourceRoot":"","sources":["../src/camera-fit-policy.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAoC3C,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,IAAI,CAAC;IACV,GAAG,EAAE,IAAI,CAAC;CACX;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEjD,MAAM,WAAW,SAAS;IACxB,qEAAqE;IACrE,IAAI,EAAE,aAAa,CAAC;IACpB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,MAAM,EAAE,IAAI,CAAC;IACb,mCAAmC;IACnC,QAAQ,EAAE,IAAI,CAAC;IACf,kEAAkE;IAClE,EAAE,EAAE,IAAI,CAAC;IACT,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,oBAAoB,GAC5B,SAAS,CA8FX"}
|
|
@@ -3,6 +3,20 @@
|
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
4
|
/** Aspect ratio above which a model is treated as linear infrastructure. */
|
|
5
5
|
const LINEAR_ASPECT_THRESHOLD = 50;
|
|
6
|
+
/**
|
|
7
|
+
* Minimum longest-axis extent (world units, i.e. metres) for the linear
|
|
8
|
+
* policy to apply. The linear "look down the longest axis from inside the
|
|
9
|
+
* bbox" pose only makes sense for genuine infrastructure (railway / road
|
|
10
|
+
* alignments are hundreds of metres). A small but high-aspect element — a
|
|
11
|
+
* single 4.86 m reinforcing bar is aspect ~130:1 — would otherwise get the
|
|
12
|
+
* linear pose, which places the camera *inside* its bounding box looking
|
|
13
|
+
* end-on, so the bar projects to a sub-pixel smear and reads as "nothing
|
|
14
|
+
* rendered" (issue #1350). Below this floor the compact SE-isometric pose
|
|
15
|
+
* frames the whole element and keeps it visible. Picked so the longest
|
|
16
|
+
* building elements (rebar, steel members, long beams ≲ tens of metres)
|
|
17
|
+
* stay compact while alignments (≥ hundreds of metres) stay linear.
|
|
18
|
+
*/
|
|
19
|
+
const LINEAR_MIN_LONGEST = 100;
|
|
6
20
|
/**
|
|
7
21
|
* Target on-screen projection for the smallest non-degenerate dim, in
|
|
8
22
|
* pixels. The linear-policy distance is chosen so the shortest meaningful
|
|
@@ -39,7 +53,13 @@ export function pickFitPolicy(bounds, options) {
|
|
|
39
53
|
const shortest = Math.min(sizeX, sizeY, sizeZ);
|
|
40
54
|
const aspect = longest / Math.max(shortest, longest * 1e-6);
|
|
41
55
|
const threshold = options.linearAspectThreshold ?? LINEAR_ASPECT_THRESHOLD;
|
|
42
|
-
|
|
56
|
+
const minLongest = options.linearMinLongest ?? LINEAR_MIN_LONGEST;
|
|
57
|
+
// Compact unless the bbox is BOTH high-aspect AND large enough to be real
|
|
58
|
+
// infrastructure. The size floor stops a small high-aspect element (a
|
|
59
|
+
// single rebar / steel member) from getting the "look down the axis from
|
|
60
|
+
// inside the bbox" linear pose, which renders it end-on and invisible
|
|
61
|
+
// (issue #1350).
|
|
62
|
+
if (aspect <= threshold || longest < minLongest) {
|
|
43
63
|
// Compact: reproduce the legacy SE isometric pose 1:1 so building
|
|
44
64
|
// models frame exactly as before.
|
|
45
65
|
const distance = longest * 2.0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera-fit-policy.js","sourceRoot":"","sources":["../src/camera-fit-policy.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AA2B/D,4EAA4E;AAC5E,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC;;;;;;;GAOG;AACH,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAEjC,uEAAuE;AACvE,MAAM,mBAAmB,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAEjD,6EAA6E;AAC7E,MAAM,yBAAyB,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"camera-fit-policy.js","sourceRoot":"","sources":["../src/camera-fit-policy.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ifc-lite/renderer",
|
|
3
|
-
"version": "1.30.
|
|
3
|
+
"version": "1.30.1",
|
|
4
4
|
"description": "WebGPU renderer for IFC-Lite",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@ifc-lite/geometry": "^2.10.
|
|
16
|
+
"@ifc-lite/geometry": "^2.10.1",
|
|
17
17
|
"@ifc-lite/spatial": "^1.14.9"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|