beckhoff-xts-viewer-3d 5.2.2 → 5.2.3
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.
- package/dist/index.cjs +3 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +410 -331
- package/dist/index.d.ts +410 -331
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ import { GLTF } from 'three-stdlib';
|
|
|
12
12
|
* Run `npm run sync-version` (or any script that depends on it) to refresh
|
|
13
13
|
* after bumping the package version.
|
|
14
14
|
*/
|
|
15
|
-
declare const VERSION: "5.2.
|
|
15
|
+
declare const VERSION: "5.2.3";
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Default CDN URL for the GLB asset bundle (`beckhoff-xts-viewer-3d-assets`).
|
|
@@ -1420,6 +1420,201 @@ interface XtsRuntimeState {
|
|
|
1420
1420
|
display?: Partial<DisplayOptions>;
|
|
1421
1421
|
}
|
|
1422
1422
|
|
|
1423
|
+
/**
|
|
1424
|
+
* SidecarLoader — fetches per-asset JSON sidecars.
|
|
1425
|
+
*
|
|
1426
|
+
* Sidecars carry origin-correction (translateMm + rotationDegEuler) plus
|
|
1427
|
+
* path metadata. They live next to the GLB at <baseUrl>/<id>.meta.json (or
|
|
1428
|
+
* <id>.tool.meta.json for mover tools).
|
|
1429
|
+
*
|
|
1430
|
+
* On 404 the loader falls back to default origin-correction `(0,0,0)` /
|
|
1431
|
+
* `(0,0,0)`. The renderer can still place the GLB; the calibration tool is
|
|
1432
|
+
* the authoritative source for sidecar values.
|
|
1433
|
+
*/
|
|
1434
|
+
|
|
1435
|
+
interface OriginCorrection {
|
|
1436
|
+
translateMm: Vec3;
|
|
1437
|
+
rotationDegEuler: Vec3;
|
|
1438
|
+
}
|
|
1439
|
+
interface ModuleSidecar {
|
|
1440
|
+
moduleType: ModuleType3D;
|
|
1441
|
+
glbByRailSystem: {
|
|
1442
|
+
Beckhoff: string | null;
|
|
1443
|
+
HepcoGfx?: string | null;
|
|
1444
|
+
};
|
|
1445
|
+
originCorrection: OriginCorrection;
|
|
1446
|
+
pathType: 'Straight' | 'Curve' | 'Free';
|
|
1447
|
+
moduleLengthMm: number;
|
|
1448
|
+
endAngleDeg: number;
|
|
1449
|
+
freePathFile?: string;
|
|
1450
|
+
approximateBoundsMm?: {
|
|
1451
|
+
min: Vec3;
|
|
1452
|
+
max: Vec3;
|
|
1453
|
+
};
|
|
1454
|
+
}
|
|
1455
|
+
interface MoverSidecar {
|
|
1456
|
+
moverType: MoverType3D;
|
|
1457
|
+
glb: string;
|
|
1458
|
+
originCorrection: OriginCorrection;
|
|
1459
|
+
magnetPlateCenterMm: Vec3;
|
|
1460
|
+
pathLengthMm: number;
|
|
1461
|
+
}
|
|
1462
|
+
interface MoverToolSidecar {
|
|
1463
|
+
toolType: MoverToolType3D;
|
|
1464
|
+
glbUrl: string;
|
|
1465
|
+
originCorrection: OriginCorrection;
|
|
1466
|
+
defaultOffsetMm: Vec3;
|
|
1467
|
+
approximateBoundsMm?: {
|
|
1468
|
+
min: Vec3;
|
|
1469
|
+
max: Vec3;
|
|
1470
|
+
};
|
|
1471
|
+
label: string;
|
|
1472
|
+
}
|
|
1473
|
+
/**
|
|
1474
|
+
* Calibration sidecar for a guiding-rail GLB. The rail is rendered in the
|
|
1475
|
+
* same module-local frame as the module (i.e. under the module's
|
|
1476
|
+
* `startWorldPose`) with this correction applied to the GLB scene.
|
|
1477
|
+
*/
|
|
1478
|
+
interface RailSidecar {
|
|
1479
|
+
railType: RailType3D;
|
|
1480
|
+
glb: string;
|
|
1481
|
+
originCorrection: OriginCorrection;
|
|
1482
|
+
approximateBoundsMm?: {
|
|
1483
|
+
min: Vec3;
|
|
1484
|
+
max: Vec3;
|
|
1485
|
+
};
|
|
1486
|
+
}
|
|
1487
|
+
declare const DEFAULT_ORIGIN_CORRECTION: OriginCorrection;
|
|
1488
|
+
/**
|
|
1489
|
+
* Generic sidecar fetch with promise caching + graceful fallback. Returns
|
|
1490
|
+
* `undefined` on 404 (caller substitutes a default), and surfaces network or
|
|
1491
|
+
* parse errors as `Error` (caller is expected to forward to onError).
|
|
1492
|
+
*/
|
|
1493
|
+
declare class SidecarLoader {
|
|
1494
|
+
private readonly timeoutMs;
|
|
1495
|
+
private readonly cache;
|
|
1496
|
+
constructor(timeoutMs?: number);
|
|
1497
|
+
clear(): void;
|
|
1498
|
+
/**
|
|
1499
|
+
* Fetch and cache the sidecar at `url`. The loader validates the one field
|
|
1500
|
+
* every sidecar shape shares (`originCorrection`) and hands the rest to the
|
|
1501
|
+
* caller as `T` — the kind is a property of the URL, not of the loader.
|
|
1502
|
+
*/
|
|
1503
|
+
fetch<T>(url: string): Promise<T | undefined>;
|
|
1504
|
+
}
|
|
1505
|
+
/**
|
|
1506
|
+
* Resolve the effective origin correction for a module sidecar — falls back
|
|
1507
|
+
* to identity when the sidecar is absent.
|
|
1508
|
+
*/
|
|
1509
|
+
declare function resolveOriginCorrection(sidecar: {
|
|
1510
|
+
originCorrection?: OriginCorrection;
|
|
1511
|
+
} | undefined): OriginCorrection;
|
|
1512
|
+
/** Standard sidecar filename from a base id. */
|
|
1513
|
+
declare function moduleSidecarFilename(moduleType: ModuleType3D): string;
|
|
1514
|
+
declare function moverSidecarFilename(moverType: MoverType3D): string;
|
|
1515
|
+
declare function toolSidecarFilename(toolType: MoverToolType3D): string;
|
|
1516
|
+
declare function railSidecarFilename(railType: RailType3D): string;
|
|
1517
|
+
/** Anything that names a GLB per rail system — a sidecar or a manifest entry. */
|
|
1518
|
+
interface GlbByRailSystem {
|
|
1519
|
+
glbByRailSystem: {
|
|
1520
|
+
Beckhoff: string | null;
|
|
1521
|
+
HepcoGfx?: string | null;
|
|
1522
|
+
};
|
|
1523
|
+
}
|
|
1524
|
+
/**
|
|
1525
|
+
* Pure helper: pick the GLB filename with rail-system fallback. Returns null
|
|
1526
|
+
* when the entry marks the module 'prepared but not delivered'.
|
|
1527
|
+
*
|
|
1528
|
+
* Takes the structural shape rather than `ModuleSidecar` so
|
|
1529
|
+
* `resolveModuleGlbUrl`, which used to carry a line-for-line identical copy
|
|
1530
|
+
* of this body over manifest entries, can delegate here. Both are public
|
|
1531
|
+
* API, so both stay — but there is one implementation of the fallback rule.
|
|
1532
|
+
*/
|
|
1533
|
+
declare function pickGlbForRail(entry: GlbByRailSystem | undefined, rail: RailSystem): string | null;
|
|
1534
|
+
|
|
1535
|
+
/**
|
|
1536
|
+
* Option shapes shared between the public `<XtsViewer3D>` props and the
|
|
1537
|
+
* internal `<XtsScene>` / `<ProcessingUnitRoot>` props.
|
|
1538
|
+
*
|
|
1539
|
+
* Each of these used to be declared twice — once on each side of that
|
|
1540
|
+
* boundary, character for character — so the two could drift silently, and
|
|
1541
|
+
* `SidecarOverrides` was even exported under two public names. Declared once
|
|
1542
|
+
* here and imported by both.
|
|
1543
|
+
*/
|
|
1544
|
+
|
|
1545
|
+
/** Where the view cube sits in the canvas. */
|
|
1546
|
+
type ViewCubeAlignment = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'top-center' | 'bottom-center' | 'center-left' | 'center-right' | 'center-center';
|
|
1547
|
+
interface ViewCubeOptions {
|
|
1548
|
+
enabled?: boolean;
|
|
1549
|
+
/** Default `'bottom-right'`. */
|
|
1550
|
+
alignment?: ViewCubeAlignment;
|
|
1551
|
+
/** Distance from the aligned corner, in CSS px. Default `[80, 80]`. */
|
|
1552
|
+
marginPx?: [number, number];
|
|
1553
|
+
}
|
|
1554
|
+
/** Interaction locks. Each `true` disables that interaction. */
|
|
1555
|
+
interface InteractionLocks {
|
|
1556
|
+
rotate?: boolean;
|
|
1557
|
+
pan?: boolean;
|
|
1558
|
+
zoom?: boolean;
|
|
1559
|
+
selection?: boolean;
|
|
1560
|
+
}
|
|
1561
|
+
interface PerformanceOptions {
|
|
1562
|
+
/** Cap the frameloop rate. Unset = uncapped. */
|
|
1563
|
+
maxFps?: number;
|
|
1564
|
+
/**
|
|
1565
|
+
* Draw a processing unit's movers as one `InstancedMesh` instead of one
|
|
1566
|
+
* scene node each, cutting mover draw calls from N to 1. Default: false.
|
|
1567
|
+
*
|
|
1568
|
+
* Applies from four movers up, and only to movers with nothing bound to
|
|
1569
|
+
* them: a mover carrying tools, a mover-bound custom asset, or a visible
|
|
1570
|
+
* drive status still gets its own node. Turning on the anchor marker or
|
|
1571
|
+
* mover-id labels gives every mover a child object, so the batch is
|
|
1572
|
+
* skipped for that unit entirely. Selection and clicks work either way.
|
|
1573
|
+
*/
|
|
1574
|
+
instancing?: boolean;
|
|
1575
|
+
/** Stop the frameloop while the tab is hidden. Default: true. */
|
|
1576
|
+
autoPauseOnHidden?: boolean;
|
|
1577
|
+
/**
|
|
1578
|
+
* Enable demand rendering: frames only render when something changes
|
|
1579
|
+
* (camera move, mover position update, selection). Saves >90% GPU time
|
|
1580
|
+
* when the scene is idle. Default: true.
|
|
1581
|
+
*/
|
|
1582
|
+
demandRendering?: boolean;
|
|
1583
|
+
/**
|
|
1584
|
+
* Cap the device pixel ratio. Values above 2 rarely improve perceptible
|
|
1585
|
+
* quality but double fill-rate cost on Retina/4K displays. Default: 2.
|
|
1586
|
+
*/
|
|
1587
|
+
maxDpr?: number;
|
|
1588
|
+
/**
|
|
1589
|
+
* Disable automatic per-frame shadow map updates. Shadows only re-render
|
|
1590
|
+
* on camera change. Default: true (when shadows enabled).
|
|
1591
|
+
*/
|
|
1592
|
+
shadowOnDemand?: boolean;
|
|
1593
|
+
/**
|
|
1594
|
+
* Opt into the WebGPU renderer when the browser supports it. Falls back to
|
|
1595
|
+
* WebGL automatically. Default: false (experimental).
|
|
1596
|
+
*/
|
|
1597
|
+
webgpu?: boolean;
|
|
1598
|
+
/**
|
|
1599
|
+
* Override the KTX2 (Basis) transcoder path used to decode compressed
|
|
1600
|
+
* textures in the GLB assets. Defaults to a CDN copy pinned to the bundled
|
|
1601
|
+
* three.js revision. Point this at a self-hosted
|
|
1602
|
+
* `basis_transcoder.{js,wasm}` directory for offline / air-gapped use.
|
|
1603
|
+
*/
|
|
1604
|
+
ktx2TranscoderUrl?: string;
|
|
1605
|
+
}
|
|
1606
|
+
/**
|
|
1607
|
+
* Live override of the per-asset origin-correction sidecars, keyed by asset
|
|
1608
|
+
* type. Useful for calibration tooling that adjusts a model's origin without
|
|
1609
|
+
* re-publishing its `.meta.json`.
|
|
1610
|
+
*/
|
|
1611
|
+
interface SidecarOverrides {
|
|
1612
|
+
modules?: Partial<Record<ModuleType3D, OriginCorrection>>;
|
|
1613
|
+
movers?: Partial<Record<MoverType3D, OriginCorrection>>;
|
|
1614
|
+
tools?: Partial<Record<MoverToolType3D, OriginCorrection>>;
|
|
1615
|
+
rails?: Partial<Record<RailType3D, OriginCorrection>>;
|
|
1616
|
+
}
|
|
1617
|
+
|
|
1423
1618
|
/**
|
|
1424
1619
|
* Module catalog (3D-canonical).
|
|
1425
1620
|
*
|
|
@@ -1556,6 +1751,67 @@ declare function moverWorldAt(chain: BuiltChain, partPositionMm: number): Planar
|
|
|
1556
1751
|
/** Convenience: chain from full ModuleEntry[] returning trackLength alone. */
|
|
1557
1752
|
declare function trackLengthOf(modules: ReadonlyArray<ModuleEntry>): number;
|
|
1558
1753
|
|
|
1754
|
+
/**
|
|
1755
|
+
* normalizeXtsConfig — pre-render pass.
|
|
1756
|
+
*
|
|
1757
|
+
* Fail-fast validation + AT2050 half-clothoid merging:
|
|
1758
|
+
* AT2050_0500 + AT2050_0501 (gap=0) → AT2050_0500_180
|
|
1759
|
+
* ATH2050_0500 + ATH2050_0501 (gap=0) → ATH2050_0500_180
|
|
1760
|
+
*
|
|
1761
|
+
* Errors thrown via XtsViewerErrorException:
|
|
1762
|
+
* - 'unknown-module-type'
|
|
1763
|
+
* - 'unknown-mover-type'
|
|
1764
|
+
* - 'unmatched-clothoid-half' (0500 without 0501 or vice versa)
|
|
1765
|
+
*
|
|
1766
|
+
* Warnings (collected, non-fatal) returned alongside the normalized config:
|
|
1767
|
+
* - mover.partOid not in part-list
|
|
1768
|
+
* - duplicate mover.id within an XPU
|
|
1769
|
+
* - mover.partPositionMm out of range (clamped)
|
|
1770
|
+
*/
|
|
1771
|
+
|
|
1772
|
+
interface NormalizedXtsConfig extends XtsConfig {
|
|
1773
|
+
/**
|
|
1774
|
+
* Same shape as the input, with all parts' modules pre-merged + validated.
|
|
1775
|
+
* Mover positions are clamped, but the original values are preserved in
|
|
1776
|
+
* `__warnings` for diagnostics.
|
|
1777
|
+
*/
|
|
1778
|
+
readonly __warnings: NormalizationWarning[];
|
|
1779
|
+
}
|
|
1780
|
+
interface NormalizationWarning {
|
|
1781
|
+
code: 'mover-out-of-range' | 'mover-orphan' | 'mover-duplicate-id' | 'mover-missing-id' | 'mover-invalid-id' | 'empty-part' | 'prepared-module' | 'duplicate-xpu-object-id' | 'missing-xpu-object-id' | 'invalid-xpu-object-id' | 'duplicate-part-object-id' | 'missing-part-object-id' | 'invalid-part-object-id' | 'duplicate-part-global-number' | 'missing-part-global-number' | 'invalid-part-global-number' | 'duplicate-module-global-number' | 'missing-module-global-number' | 'invalid-module-global-number';
|
|
1782
|
+
message: string;
|
|
1783
|
+
details?: unknown;
|
|
1784
|
+
}
|
|
1785
|
+
/**
|
|
1786
|
+
* Normalizer handle.
|
|
1787
|
+
*
|
|
1788
|
+
* This used to carry a single-slot structural cache keyed on a
|
|
1789
|
+
* `JSON.stringify` of the config with the frame-paced fields stripped out.
|
|
1790
|
+
* It was removed: the only production caller is `useNormalizedConfig`, whose
|
|
1791
|
+
* `useMemo` already collapses repeat calls on an unchanged config, so the
|
|
1792
|
+
* cache could fire only when the config identity changed but its structure
|
|
1793
|
+
* did not — and in exactly that case the "fast path" cost a full stringify
|
|
1794
|
+
* of the config plus a full rebuild of every XPU, which is strictly more
|
|
1795
|
+
* work than the single O(n) pass it was avoiding.
|
|
1796
|
+
*
|
|
1797
|
+
* It also cost correctness twice over. The key stripped `status` by name at
|
|
1798
|
+
* every depth, so it removed `ModuleEntry.status` along with the mover field
|
|
1799
|
+
* it was aimed at, while the clone path rebuilt only movers — freezing
|
|
1800
|
+
* declarative module warnings after the first normalize. And it forced a
|
|
1801
|
+
* second copy of the mover clamp that had already drifted from `clampMover`
|
|
1802
|
+
* (different `details` key, different `original` value), so hosts parsing
|
|
1803
|
+
* warning details saw two shapes for one warning code.
|
|
1804
|
+
*
|
|
1805
|
+
* The class stays because it is part of the published API. It is now a thin
|
|
1806
|
+
* handle over the pure function.
|
|
1807
|
+
*/
|
|
1808
|
+
declare class XtsConfigNormalizer {
|
|
1809
|
+
normalize(config: XtsConfig): NormalizedXtsConfig;
|
|
1810
|
+
/** No-op. Kept so existing callers keep compiling; there is no cache. */
|
|
1811
|
+
clearCache(): void;
|
|
1812
|
+
}
|
|
1813
|
+
declare function normalizeXtsConfig(config: XtsConfig): NormalizedXtsConfig;
|
|
1814
|
+
|
|
1559
1815
|
/**
|
|
1560
1816
|
* Mover collision detection.
|
|
1561
1817
|
*
|
|
@@ -1665,6 +1921,20 @@ interface MoverProbe {
|
|
|
1665
1921
|
* appear first.
|
|
1666
1922
|
*/
|
|
1667
1923
|
declare function checkSamePathCollisions(chain: BuiltChain, partOid: number, probes: ReadonlyArray<MoverProbe>, opts?: CheckMoverCollisionsOptions): MoverCollision[];
|
|
1924
|
+
/**
|
|
1925
|
+
* Collision check across a whole config: build a probe per mover, group by
|
|
1926
|
+
* part, and run `checkSamePathCollisions` on each group with two or more.
|
|
1927
|
+
*
|
|
1928
|
+
* `livePositionOf` supplies the current position of a mover when one is
|
|
1929
|
+
* being driven imperatively — the `MoverPositionStore` at 60 Hz — falling
|
|
1930
|
+
* back to the config value. Passing it as a function rather than the store
|
|
1931
|
+
* itself is what keeps this a pure geometry function: it was previously
|
|
1932
|
+
* trapped inside the `useImperativeHandle` closure of `useXtsViewerHandle`,
|
|
1933
|
+
* where it could only be exercised through a mounted canvas.
|
|
1934
|
+
*
|
|
1935
|
+
* Results are sorted so the deepest collision in the scene comes first.
|
|
1936
|
+
*/
|
|
1937
|
+
declare function checkAllMoverCollisions(config: NormalizedXtsConfig, livePositionOf: (moverId: number) => number | undefined, opts?: CheckMoverCollisionsOptions): MoverCollision[];
|
|
1668
1938
|
|
|
1669
1939
|
/**
|
|
1670
1940
|
* Module collision / overlap detection.
|
|
@@ -1819,58 +2089,25 @@ declare function checkModuleCollisions(probes: ReadonlyArray<ModuleProbe>, adjac
|
|
|
1819
2089
|
count: number;
|
|
1820
2090
|
closed: boolean;
|
|
1821
2091
|
}>, opts?: CheckModuleCollisionsOptions): ModuleCollision[];
|
|
1822
|
-
|
|
1823
2092
|
/**
|
|
1824
|
-
*
|
|
1825
|
-
*
|
|
1826
|
-
*
|
|
1827
|
-
* AT2050_0500 + AT2050_0501 (gap=0) → AT2050_0500_180
|
|
1828
|
-
* ATH2050_0500 + ATH2050_0501 (gap=0) → ATH2050_0500_180
|
|
2093
|
+
* Resolve a normalized config into the per-XPU inputs `buildModuleProbes`
|
|
2094
|
+
* takes, applying the same override precedence the scene uses: an imperative
|
|
2095
|
+
* `trackTransformOverrides` entry beats the config value.
|
|
1829
2096
|
*
|
|
1830
|
-
*
|
|
1831
|
-
*
|
|
1832
|
-
*
|
|
1833
|
-
*
|
|
2097
|
+
* This adapter was written out twice, character for character — once in
|
|
2098
|
+
* `<ModuleCollisionMonitor>` and once inside the `checkModuleCollisions`
|
|
2099
|
+
* closure of `useXtsViewerHandle` — with the only difference being where the
|
|
2100
|
+
* orientation came from.
|
|
1834
2101
|
*
|
|
1835
|
-
*
|
|
1836
|
-
*
|
|
1837
|
-
*
|
|
1838
|
-
*
|
|
2102
|
+
* A part whose chain cannot be built is skipped, as before, but no longer in
|
|
2103
|
+
* silence: `normalizeXtsConfig` has already made that impossible, so if it
|
|
2104
|
+
* ever happens it means a part has silently dropped out of collision
|
|
2105
|
+
* detection, which is a safety feature. Reported rather than thrown, because
|
|
2106
|
+
* both callers run inside React and a throw would take the scene down.
|
|
1839
2107
|
*/
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
* Same shape as the input, with all parts' modules pre-merged + validated.
|
|
1844
|
-
* Mover positions are clamped, but the original values are preserved in
|
|
1845
|
-
* `__warnings` for diagnostics.
|
|
1846
|
-
*/
|
|
1847
|
-
readonly __warnings: NormalizationWarning[];
|
|
1848
|
-
}
|
|
1849
|
-
interface NormalizationWarning {
|
|
1850
|
-
code: 'mover-out-of-range' | 'mover-orphan' | 'mover-duplicate-id' | 'mover-missing-id' | 'mover-invalid-id' | 'empty-part' | 'prepared-module' | 'duplicate-xpu-object-id' | 'missing-xpu-object-id' | 'invalid-xpu-object-id' | 'duplicate-part-object-id' | 'missing-part-object-id' | 'invalid-part-object-id' | 'duplicate-module-global-number' | 'missing-module-global-number' | 'invalid-module-global-number';
|
|
1851
|
-
message: string;
|
|
1852
|
-
details?: unknown;
|
|
1853
|
-
}
|
|
1854
|
-
/**
|
|
1855
|
-
* Stateful normalizer with a single-slot structural cache. The key
|
|
1856
|
-
* intentionally excludes `mover.partPositionMm` so that frame-paced
|
|
1857
|
-
* position updates fall into the fast path: when the structure (modules,
|
|
1858
|
-
* parts, transforms, mover ids/partOids) hasn't changed between calls,
|
|
1859
|
-
* we return a clone of the cached result with only the mover positions
|
|
1860
|
-
* re-clamped against the current input.
|
|
1861
|
-
*
|
|
1862
|
-
* Construct your own instance when you need an isolated cache (e.g. in
|
|
1863
|
-
* tests, or when multiple viewers in the same JS realm would otherwise
|
|
1864
|
-
* thrash a shared single-slot cache). The standalone `normalizeXtsConfig`
|
|
1865
|
-
* function delegates to a process-wide singleton for backwards
|
|
1866
|
-
* compatibility.
|
|
1867
|
-
*/
|
|
1868
|
-
declare class XtsConfigNormalizer {
|
|
1869
|
-
private _cache;
|
|
1870
|
-
normalize(config: XtsConfig): NormalizedXtsConfig;
|
|
1871
|
-
clearCache(): void;
|
|
1872
|
-
}
|
|
1873
|
-
declare function normalizeXtsConfig(config: XtsConfig): NormalizedXtsConfig;
|
|
2108
|
+
declare function toModuleCollisionInputs(config: NormalizedXtsConfig, trackTransformOverrides?: Record<number, TrackTransform>): ModuleCollisionXpuInput[];
|
|
2109
|
+
/** `toModuleCollisionInputs` → `buildModuleProbes` → `checkModuleCollisions`. */
|
|
2110
|
+
declare function checkAllModuleCollisions(config: NormalizedXtsConfig, orientation: Orientation | undefined, trackTransformOverrides?: Record<number, TrackTransform>, opts?: CheckModuleCollisionsOptions): ModuleCollision[];
|
|
1874
2111
|
|
|
1875
2112
|
/**
|
|
1876
2113
|
* Shared, mostly-pure plumbing behind `exportScreenshot` and
|
|
@@ -1891,6 +2128,89 @@ declare function normalizeXtsConfig(config: XtsConfig): NormalizedXtsConfig;
|
|
|
1891
2128
|
*/
|
|
1892
2129
|
|
|
1893
2130
|
type CaptureMode = 'current' | 'top-down' | 'custom';
|
|
2131
|
+
/**
|
|
2132
|
+
* The options `exportScreenshot` and `beginFrameCapture` share.
|
|
2133
|
+
*
|
|
2134
|
+
* They used to be written out twice — `ScreenshotOptions` and
|
|
2135
|
+
* `FrameCaptureOptions` each hand-documented the same nine fields, and the
|
|
2136
|
+
* two `updateShadows` comments already described the same behaviour in
|
|
2137
|
+
* different words. Documented once here; each path intersects this with the
|
|
2138
|
+
* handful of options that are genuinely its own.
|
|
2139
|
+
*/
|
|
2140
|
+
interface CaptureRequest {
|
|
2141
|
+
/** Camera mode. Default `'current'`. */
|
|
2142
|
+
mode?: CaptureMode;
|
|
2143
|
+
/** Required when `mode === 'custom'`. Ignored otherwise. */
|
|
2144
|
+
camera?: CameraState;
|
|
2145
|
+
/**
|
|
2146
|
+
* Dimensions in pixels. Supply at least one; the other follows the scene
|
|
2147
|
+
* aspect (`top-down`) or the live canvas aspect (`current` / `custom`).
|
|
2148
|
+
* Omit both to use the live canvas dimensions x pixel ratio.
|
|
2149
|
+
*
|
|
2150
|
+
* Both are clamped to what the GPU can actually allocate — read
|
|
2151
|
+
* `widthPx` / `heightPx` / `clamped` back for what was really rendered.
|
|
2152
|
+
*/
|
|
2153
|
+
width?: number;
|
|
2154
|
+
height?: number;
|
|
2155
|
+
/**
|
|
2156
|
+
* Background colour:
|
|
2157
|
+
* - `null` (default) → transparent frames, matching the live canvas
|
|
2158
|
+
* contract. JPEG falls back to white because it has no alpha.
|
|
2159
|
+
* - `'#RRGGBB'` / any three.js ColorRepresentation → solid fill.
|
|
2160
|
+
*/
|
|
2161
|
+
backgroundColor?: ColorRepresentation | null;
|
|
2162
|
+
/** Margin around the scene AABB in `top-down` mode. Default 1.1 (10 %). */
|
|
2163
|
+
paddingFactor?: number;
|
|
2164
|
+
/**
|
|
2165
|
+
* Multiplier applied to every Light in the scene for the render, restored
|
|
2166
|
+
* afterwards. The default differs per path: 1.35 for a still, which
|
|
2167
|
+
* otherwise reads dim next to the live canvas, and 1 for a clip, where
|
|
2168
|
+
* that boost would make the whole video brighter than the run the user
|
|
2169
|
+
* watched. Pass 1 to disable.
|
|
2170
|
+
*/
|
|
2171
|
+
exposureBoost?: number;
|
|
2172
|
+
/**
|
|
2173
|
+
* MSAA sample count for the offscreen target. Default 4 where the context
|
|
2174
|
+
* supports it, 0 otherwise; 0 disables. The live canvas is created with
|
|
2175
|
+
* `antialias: true`, so without this every geometry edge in an export is
|
|
2176
|
+
* hard-aliased while the live view stays smooth. The effective count,
|
|
2177
|
+
* clamped to the hardware maximum, is reported back.
|
|
2178
|
+
*/
|
|
2179
|
+
samples?: number;
|
|
2180
|
+
/**
|
|
2181
|
+
* Refresh the shadow map before rendering. Default `true`.
|
|
2182
|
+
*
|
|
2183
|
+
* `performance.shadowOnDemand` leaves `shadowMap.autoUpdate` off and only
|
|
2184
|
+
* dirties the map on camera change, so movers driven through
|
|
2185
|
+
* `setMoverPositions` would otherwise cast shadows from a stale position.
|
|
2186
|
+
* Costs one shadow pass; pass `false` to skip it.
|
|
2187
|
+
*/
|
|
2188
|
+
updateShadows?: boolean;
|
|
2189
|
+
/**
|
|
2190
|
+
* Pin wall-clock animations (the drive-status blink) for the render.
|
|
2191
|
+
* Default `true`.
|
|
2192
|
+
*
|
|
2193
|
+
* Unpinned, a capture catches whatever phase the last live frame left
|
|
2194
|
+
* behind: two stills of the same scene differ, and a clip flickers at an
|
|
2195
|
+
* irregular rate because its frames are not produced at wall-clock speed.
|
|
2196
|
+
*/
|
|
2197
|
+
freezeAnimations?: boolean;
|
|
2198
|
+
}
|
|
2199
|
+
/** What a capture reports back about the frame it actually produced. */
|
|
2200
|
+
interface CaptureDimensions {
|
|
2201
|
+
/** Dimensions actually rendered — after hardware / budget clamping. */
|
|
2202
|
+
widthPx: number;
|
|
2203
|
+
heightPx: number;
|
|
2204
|
+
/** Dimensions requested, before clamping. */
|
|
2205
|
+
requestedWidthPx: number;
|
|
2206
|
+
requestedHeightPx: number;
|
|
2207
|
+
/** True when the request exceeded what the GPU could allocate. */
|
|
2208
|
+
clamped: boolean;
|
|
2209
|
+
/** MSAA samples actually used (0 = off). */
|
|
2210
|
+
samples: number;
|
|
2211
|
+
/** Camera the frame was rendered with. */
|
|
2212
|
+
camera: CameraState;
|
|
2213
|
+
}
|
|
1894
2214
|
|
|
1895
2215
|
/**
|
|
1896
2216
|
* captureScreenshot — render the live r3f scene into an offscreen
|
|
@@ -1931,79 +2251,26 @@ type CaptureMode = 'current' | 'top-down' | 'custom';
|
|
|
1931
2251
|
* background and boosted lights.
|
|
1932
2252
|
*/
|
|
1933
2253
|
|
|
1934
|
-
|
|
2254
|
+
/**
|
|
2255
|
+
* @deprecated Use `CaptureMode`. This was a byte-for-byte re-declaration of
|
|
2256
|
+
* it, so the package shipped two public names for one union.
|
|
2257
|
+
*/
|
|
2258
|
+
type ScreenshotMode = CaptureMode;
|
|
1935
2259
|
type ScreenshotFormat = 'png' | 'jpeg' | 'webp';
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
/**
|
|
1942
|
-
* Image dimensions in pixels.
|
|
1943
|
-
* - Both supplied: the rendered frustum (top-down) is adjusted to
|
|
1944
|
-
* match the resulting aspect; the camera (current / custom) is
|
|
1945
|
-
* fitted to `width / height`.
|
|
1946
|
-
* - One supplied: the other is derived to keep the scene's aspect
|
|
1947
|
-
* ratio (top-down) or the live canvas aspect (current / custom).
|
|
1948
|
-
* - Neither: canvas CSS dimensions × `pixelRatio`.
|
|
1949
|
-
*
|
|
1950
|
-
* Both are clamped to what the GPU can actually allocate — check
|
|
1951
|
-
* `widthPx` / `heightPx` / `clamped` on the result for what was
|
|
1952
|
-
* really rendered.
|
|
1953
|
-
*/
|
|
1954
|
-
width?: number;
|
|
1955
|
-
height?: number;
|
|
2260
|
+
/**
|
|
2261
|
+
* `CaptureRequest` carries the nine options shared with `beginFrameCapture`;
|
|
2262
|
+
* these three are the still-image path's own.
|
|
2263
|
+
*/
|
|
2264
|
+
interface ScreenshotOptions extends CaptureRequest {
|
|
1956
2265
|
format?: ScreenshotFormat;
|
|
1957
2266
|
/** 0..1 — JPEG / WebP quality. Default 0.92. Ignored for PNG. */
|
|
1958
2267
|
quality?: number;
|
|
1959
2268
|
/**
|
|
1960
|
-
*
|
|
1961
|
-
*
|
|
1962
|
-
|
|
1963
|
-
paddingFactor?: number;
|
|
1964
|
-
/**
|
|
1965
|
-
* Background colour:
|
|
1966
|
-
* - `null` (default) → transparent PNG, matches the live canvas
|
|
1967
|
-
* contract. JPEG falls back to white because the format has no
|
|
1968
|
-
* alpha channel.
|
|
1969
|
-
* - `'#RRGGBB'` / any three.js ColorRepresentation → solid fill.
|
|
1970
|
-
*/
|
|
1971
|
-
backgroundColor?: ColorRepresentation | null;
|
|
1972
|
-
/**
|
|
1973
|
-
* Pixel ratio for offscreen renders. Default = renderer's current
|
|
1974
|
-
* pixel ratio (matches the live canvas sharpness on high-DPI
|
|
1975
|
-
* displays). Set explicitly for fixed-resolution exports.
|
|
2269
|
+
* Pixel ratio for the offscreen render. Default = the renderer's current
|
|
2270
|
+
* pixel ratio, which matches live-canvas sharpness on high-DPI displays.
|
|
2271
|
+
* Set explicitly for fixed-resolution exports.
|
|
1976
2272
|
*/
|
|
1977
2273
|
pixelRatio?: number;
|
|
1978
|
-
/**
|
|
1979
|
-
* Multiplier applied to every Light in the scene during the offscreen
|
|
1980
|
-
* render. Default 1.35 — screenshots tend to feel dim compared to
|
|
1981
|
-
* the live canvas because the live tone-mapping pipeline picks up
|
|
1982
|
-
* the surrounding monitor luminance, which the offscreen render
|
|
1983
|
-
* doesn't. Pass 1 to disable, > 1 for a brighter result. Restored
|
|
1984
|
-
* after capture.
|
|
1985
|
-
*/
|
|
1986
|
-
exposureBoost?: number;
|
|
1987
|
-
/**
|
|
1988
|
-
* MSAA sample count for the offscreen target. Default 4 where the
|
|
1989
|
-
* context supports it, 0 otherwise. 0 disables.
|
|
1990
|
-
*
|
|
1991
|
-
* The live canvas is created with `antialias: true`; without this the
|
|
1992
|
-
* offscreen pass had no MSAA at all, so every geometry edge in an
|
|
1993
|
-
* export was hard-aliased while the live view stayed smooth. The
|
|
1994
|
-
* effective count (clamped to the hardware maximum) comes back on the
|
|
1995
|
-
* result.
|
|
1996
|
-
*/
|
|
1997
|
-
samples?: number;
|
|
1998
|
-
/**
|
|
1999
|
-
* Refresh the shadow map before rendering. Default `true`.
|
|
2000
|
-
*
|
|
2001
|
-
* `performance.shadowOnDemand` leaves `shadowMap.autoUpdate` off and
|
|
2002
|
-
* only dirties the map when the camera moves, so movers driven purely
|
|
2003
|
-
* through `setMoverPositions` would otherwise cast shadows from a
|
|
2004
|
-
* stale position. Costs one shadow pass; pass `false` to skip it.
|
|
2005
|
-
*/
|
|
2006
|
-
updateShadows?: boolean;
|
|
2007
2274
|
}
|
|
2008
2275
|
interface ScreenshotResult {
|
|
2009
2276
|
blob: Blob;
|
|
@@ -2079,69 +2346,13 @@ interface ScreenshotResult {
|
|
|
2079
2346
|
* `exportScreenshot` does.
|
|
2080
2347
|
*/
|
|
2081
2348
|
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
* for the encoder is the expected usage. Both values are clamped to what the
|
|
2090
|
-
* GPU can allocate; check `widthPx` / `heightPx` / `clamped` for what you
|
|
2091
|
-
* actually get.
|
|
2092
|
-
*/
|
|
2093
|
-
width?: number;
|
|
2094
|
-
height?: number;
|
|
2095
|
-
/** Camera mode. Default `'current'`. */
|
|
2096
|
-
mode?: CaptureMode;
|
|
2097
|
-
/** Required when `mode === 'custom'`. */
|
|
2098
|
-
camera?: CameraState;
|
|
2099
|
-
/** `null` (default) → transparent frames. */
|
|
2100
|
-
backgroundColor?: ColorRepresentation | null;
|
|
2101
|
-
/** Top-down margin. Fixed for the session. Default 1.1. */
|
|
2102
|
-
paddingFactor?: number;
|
|
2103
|
-
/**
|
|
2104
|
-
* Light multiplier. Default **1** — unlike `exportScreenshot`, which uses
|
|
2105
|
-
* 1.35 because a single still reads dim next to the live canvas. Applying
|
|
2106
|
-
* that to every frame of a clip would make the whole video uniformly
|
|
2107
|
-
* brighter than the run the user watched.
|
|
2108
|
-
*/
|
|
2109
|
-
exposureBoost?: number;
|
|
2110
|
-
/** MSAA samples. Default 4, clamped to the hardware maximum. 0 disables. */
|
|
2111
|
-
samples?: number;
|
|
2112
|
-
/**
|
|
2113
|
-
* Pin wall-clock-driven effects (the drive-status blink) to a fixed value
|
|
2114
|
-
* for every frame. Default `true`.
|
|
2115
|
-
*
|
|
2116
|
-
* Export frames are not produced at wall-clock speed, so an unpinned blink
|
|
2117
|
-
* flickers at an irregular rate in the clip and two exports of the same run
|
|
2118
|
-
* differ pixel-wise.
|
|
2119
|
-
*/
|
|
2120
|
-
freezeAnimations?: boolean;
|
|
2121
|
-
/**
|
|
2122
|
-
* Refresh the shadow map on every frame. Default `true` when shadows are
|
|
2123
|
-
* enabled.
|
|
2124
|
-
*
|
|
2125
|
-
* `performance.shadowOnDemand` leaves `shadowMap.autoUpdate` off and only
|
|
2126
|
-
* dirties on camera change, so movers driven through `setMoverPositions`
|
|
2127
|
-
* would drag their first-frame shadows through the whole clip. Costs one
|
|
2128
|
-
* shadow pass per frame; set `false` to trade correctness for speed.
|
|
2129
|
-
*/
|
|
2130
|
-
updateShadows?: boolean;
|
|
2131
|
-
}
|
|
2132
|
-
interface FrameCaptureSession {
|
|
2133
|
-
/** Dimensions actually rendered — after hardware / budget clamping. */
|
|
2134
|
-
readonly widthPx: number;
|
|
2135
|
-
readonly heightPx: number;
|
|
2136
|
-
/** Dimensions requested, before clamping. */
|
|
2137
|
-
readonly requestedWidthPx: number;
|
|
2138
|
-
readonly requestedHeightPx: number;
|
|
2139
|
-
/** True when the request exceeded what the GPU could allocate. */
|
|
2140
|
-
readonly clamped: boolean;
|
|
2141
|
-
/** MSAA samples actually used (0 = off). */
|
|
2142
|
-
readonly samples: number;
|
|
2143
|
-
/** Camera pinned for the whole session. */
|
|
2144
|
-
readonly camera: CameraState;
|
|
2349
|
+
/**
|
|
2350
|
+
* `CaptureRequest` carries the nine options shared with `exportScreenshot`.
|
|
2351
|
+
* The clip path adds nothing of its own; it only differs in the default for
|
|
2352
|
+
* `exposureBoost` (1 rather than 1.35 — see the field's doc).
|
|
2353
|
+
*/
|
|
2354
|
+
type FrameCaptureOptions = CaptureRequest;
|
|
2355
|
+
interface FrameCaptureSession extends Readonly<CaptureDimensions> {
|
|
2145
2356
|
/** True until `dispose()`. */
|
|
2146
2357
|
readonly disposed: boolean;
|
|
2147
2358
|
/**
|
|
@@ -2408,6 +2619,14 @@ interface XtsViewer3DRef {
|
|
|
2408
2619
|
focusOn(target: FocusTarget, opts?: FocusOptions): void;
|
|
2409
2620
|
setCamera(cam: CameraState): void;
|
|
2410
2621
|
getCamera(): CameraState | null;
|
|
2622
|
+
/**
|
|
2623
|
+
* @deprecated Not implemented — this is a no-op that warns in development.
|
|
2624
|
+
*
|
|
2625
|
+
* `orientation` is a static prop in this build; there is no state behind
|
|
2626
|
+
* it to update. Set it through `<XtsViewer3D orientation={…}>` instead.
|
|
2627
|
+
* The method is kept only so the published interface does not change
|
|
2628
|
+
* shape mid-major, and will be removed in the next major.
|
|
2629
|
+
*/
|
|
2411
2630
|
setOrientation(orientation: XtsConfig['orientation']): void;
|
|
2412
2631
|
getMoverWorldTransform(ref: MoverRef): {
|
|
2413
2632
|
positionMm: [number, number, number];
|
|
@@ -2472,6 +2691,15 @@ interface XtsViewer3DRef {
|
|
|
2472
2691
|
* frameloop tick.
|
|
2473
2692
|
*/
|
|
2474
2693
|
renderFrameNow(): void;
|
|
2694
|
+
/**
|
|
2695
|
+
* @deprecated Not implemented — this is a no-op that warns in development.
|
|
2696
|
+
*
|
|
2697
|
+
* GLB caching lives in `useGLTF`'s global cache, which r3f exposes no
|
|
2698
|
+
* per-instance handle to clear. Use `useGLTF.clear()` from
|
|
2699
|
+
* `@react-three/drei` directly if you need to drop cached assets. Kept
|
|
2700
|
+
* only so the published interface does not change shape mid-major, and
|
|
2701
|
+
* will be removed in the next major.
|
|
2702
|
+
*/
|
|
2475
2703
|
reloadAssets(): Promise<void>;
|
|
2476
2704
|
setMoverPosition(moverId: number, partPositionMm: number): void;
|
|
2477
2705
|
/**
|
|
@@ -2528,107 +2756,6 @@ interface XtsViewer3DRef {
|
|
|
2528
2756
|
measurements: MeasurementApi;
|
|
2529
2757
|
}
|
|
2530
2758
|
|
|
2531
|
-
/**
|
|
2532
|
-
* SidecarLoader — fetches per-asset JSON sidecars.
|
|
2533
|
-
*
|
|
2534
|
-
* Sidecars carry origin-correction (translateMm + rotationDegEuler) plus
|
|
2535
|
-
* path metadata. They live next to the GLB at <baseUrl>/<id>.meta.json (or
|
|
2536
|
-
* <id>.tool.meta.json for mover tools).
|
|
2537
|
-
*
|
|
2538
|
-
* On 404 the loader falls back to default origin-correction `(0,0,0)` /
|
|
2539
|
-
* `(0,0,0)`. The renderer can still place the GLB; the calibration tool is
|
|
2540
|
-
* the authoritative source for sidecar values.
|
|
2541
|
-
*/
|
|
2542
|
-
|
|
2543
|
-
interface OriginCorrection {
|
|
2544
|
-
translateMm: Vec3;
|
|
2545
|
-
rotationDegEuler: Vec3;
|
|
2546
|
-
}
|
|
2547
|
-
interface ModuleSidecar {
|
|
2548
|
-
moduleType: ModuleType3D;
|
|
2549
|
-
glbByRailSystem: {
|
|
2550
|
-
Beckhoff: string | null;
|
|
2551
|
-
HepcoGfx?: string | null;
|
|
2552
|
-
};
|
|
2553
|
-
originCorrection: OriginCorrection;
|
|
2554
|
-
pathType: 'Straight' | 'Curve' | 'Free';
|
|
2555
|
-
moduleLengthMm: number;
|
|
2556
|
-
endAngleDeg: number;
|
|
2557
|
-
freePathFile?: string;
|
|
2558
|
-
approximateBoundsMm?: {
|
|
2559
|
-
min: Vec3;
|
|
2560
|
-
max: Vec3;
|
|
2561
|
-
};
|
|
2562
|
-
}
|
|
2563
|
-
interface MoverSidecar {
|
|
2564
|
-
moverType: MoverType3D;
|
|
2565
|
-
glb: string;
|
|
2566
|
-
originCorrection: OriginCorrection;
|
|
2567
|
-
magnetPlateCenterMm: Vec3;
|
|
2568
|
-
pathLengthMm: number;
|
|
2569
|
-
}
|
|
2570
|
-
interface MoverToolSidecar {
|
|
2571
|
-
toolType: MoverToolType3D;
|
|
2572
|
-
glbUrl: string;
|
|
2573
|
-
originCorrection: OriginCorrection;
|
|
2574
|
-
defaultOffsetMm: Vec3;
|
|
2575
|
-
approximateBoundsMm?: {
|
|
2576
|
-
min: Vec3;
|
|
2577
|
-
max: Vec3;
|
|
2578
|
-
};
|
|
2579
|
-
label: string;
|
|
2580
|
-
}
|
|
2581
|
-
/**
|
|
2582
|
-
* Calibration sidecar for a guiding-rail GLB. The rail is rendered in the
|
|
2583
|
-
* same module-local frame as the module (i.e. under the module's
|
|
2584
|
-
* `startWorldPose`) with this correction applied to the GLB scene.
|
|
2585
|
-
*/
|
|
2586
|
-
interface RailSidecar {
|
|
2587
|
-
railType: RailType3D;
|
|
2588
|
-
glb: string;
|
|
2589
|
-
originCorrection: OriginCorrection;
|
|
2590
|
-
approximateBoundsMm?: {
|
|
2591
|
-
min: Vec3;
|
|
2592
|
-
max: Vec3;
|
|
2593
|
-
};
|
|
2594
|
-
}
|
|
2595
|
-
declare const DEFAULT_ORIGIN_CORRECTION: OriginCorrection;
|
|
2596
|
-
/**
|
|
2597
|
-
* Generic sidecar fetch with promise caching + graceful fallback. Returns
|
|
2598
|
-
* `undefined` on 404 (caller substitutes a default), and surfaces network or
|
|
2599
|
-
* parse errors as `Error` (caller is expected to forward to onError).
|
|
2600
|
-
*/
|
|
2601
|
-
declare class SidecarLoader {
|
|
2602
|
-
private readonly timeoutMs;
|
|
2603
|
-
private readonly cache;
|
|
2604
|
-
constructor(timeoutMs?: number);
|
|
2605
|
-
clear(): void;
|
|
2606
|
-
/**
|
|
2607
|
-
* Fetch and cache the sidecar at `url`. The loader validates the one field
|
|
2608
|
-
* every sidecar shape shares (`originCorrection`) and hands the rest to the
|
|
2609
|
-
* caller as `T` — the kind is a property of the URL, not of the loader.
|
|
2610
|
-
*/
|
|
2611
|
-
fetch<T>(url: string): Promise<T | undefined>;
|
|
2612
|
-
}
|
|
2613
|
-
/**
|
|
2614
|
-
* Resolve the effective origin correction for a module sidecar — falls back
|
|
2615
|
-
* to identity when the sidecar is absent.
|
|
2616
|
-
*/
|
|
2617
|
-
declare function resolveOriginCorrection(sidecar: {
|
|
2618
|
-
originCorrection?: OriginCorrection;
|
|
2619
|
-
} | undefined): OriginCorrection;
|
|
2620
|
-
/** Standard sidecar filename from a base id. */
|
|
2621
|
-
declare function moduleSidecarFilename(moduleType: ModuleType3D): string;
|
|
2622
|
-
declare function moverSidecarFilename(moverType: MoverType3D): string;
|
|
2623
|
-
declare function toolSidecarFilename(toolType: MoverToolType3D): string;
|
|
2624
|
-
declare function railSidecarFilename(railType: RailType3D): string;
|
|
2625
|
-
/**
|
|
2626
|
-
* Pure helper: pick the GLB filename for a moduleSidecar with rail-system
|
|
2627
|
-
* fallback. Returns null when the sidecar marks the module 'prepared but
|
|
2628
|
-
* not delivered'.
|
|
2629
|
-
*/
|
|
2630
|
-
declare function pickGlbForRail(sidecar: ModuleSidecar | undefined, rail: RailSystem): string | null;
|
|
2631
|
-
|
|
2632
2759
|
/**
|
|
2633
2760
|
* HepcoGfxRailProfile — cross-section of the Hepco GFX guiding rail used by
|
|
2634
2761
|
* the procedural extrusion in <HepcoGfxRail>.
|
|
@@ -2756,12 +2883,6 @@ declare function createHepcoGfxRailShape(dims?: HepcoGfxRailProfileDims): Shape;
|
|
|
2756
2883
|
* Live overrides for module/mover/tool origin-correction sidecars. Used by
|
|
2757
2884
|
* the calibration tool to preview adjustments without writing files.
|
|
2758
2885
|
*/
|
|
2759
|
-
interface SidecarOverrides {
|
|
2760
|
-
modules?: Partial<Record<ModuleType3D, OriginCorrection>>;
|
|
2761
|
-
movers?: Partial<Record<MoverType3D, OriginCorrection>>;
|
|
2762
|
-
tools?: Partial<Record<MoverToolType3D, OriginCorrection>>;
|
|
2763
|
-
rails?: Partial<Record<RailType3D, OriginCorrection>>;
|
|
2764
|
-
}
|
|
2765
2886
|
interface XtsViewer3DProps {
|
|
2766
2887
|
/** Complete XTS configuration. */
|
|
2767
2888
|
config: XtsConfig;
|
|
@@ -2806,12 +2927,7 @@ interface XtsViewer3DProps {
|
|
|
2806
2927
|
*/
|
|
2807
2928
|
topDown?: boolean;
|
|
2808
2929
|
/** Lock interactions. */
|
|
2809
|
-
lock?:
|
|
2810
|
-
rotate?: boolean;
|
|
2811
|
-
pan?: boolean;
|
|
2812
|
-
zoom?: boolean;
|
|
2813
|
-
selection?: boolean;
|
|
2814
|
-
};
|
|
2930
|
+
lock?: InteractionLocks;
|
|
2815
2931
|
/** Selection-Mode. Default: 'Off'. */
|
|
2816
2932
|
selectionMode?: SelectionMode;
|
|
2817
2933
|
/** Controlled selection. */
|
|
@@ -2896,40 +3012,7 @@ interface XtsViewer3DProps {
|
|
|
2896
3012
|
onError?: (err: XtsViewerError) => void;
|
|
2897
3013
|
onAssetsLoaded?: () => void;
|
|
2898
3014
|
/** Performance-Tuning. */
|
|
2899
|
-
performance?:
|
|
2900
|
-
maxFps?: number;
|
|
2901
|
-
instancing?: boolean;
|
|
2902
|
-
autoPauseOnHidden?: boolean;
|
|
2903
|
-
/**
|
|
2904
|
-
* Enable demand rendering: frames only render when something changes
|
|
2905
|
-
* (camera move, mover position update, selection). Saves >90% GPU
|
|
2906
|
-
* time when the scene is idle. Default: true.
|
|
2907
|
-
*/
|
|
2908
|
-
demandRendering?: boolean;
|
|
2909
|
-
/**
|
|
2910
|
-
* Cap the device pixel ratio. Values above 2 rarely improve
|
|
2911
|
-
* perceptible quality but double fill-rate cost on Retina/4K
|
|
2912
|
-
* displays. Default: 2.
|
|
2913
|
-
*/
|
|
2914
|
-
maxDpr?: number;
|
|
2915
|
-
/**
|
|
2916
|
-
* Disable automatic per-frame shadow map updates. Shadows only
|
|
2917
|
-
* re-render on camera change. Default: true (when shadows enabled).
|
|
2918
|
-
*/
|
|
2919
|
-
shadowOnDemand?: boolean;
|
|
2920
|
-
/**
|
|
2921
|
-
* Opt into the WebGPU renderer when the browser supports it.
|
|
2922
|
-
* Falls back to WebGL automatically. Default: false (experimental).
|
|
2923
|
-
*/
|
|
2924
|
-
webgpu?: boolean;
|
|
2925
|
-
/**
|
|
2926
|
-
* Override the KTX2 (Basis) transcoder path used to decode compressed
|
|
2927
|
-
* textures in the GLB assets. Defaults to a CDN copy pinned to the
|
|
2928
|
-
* bundled three.js revision. Point this at a self-hosted
|
|
2929
|
-
* `basis_transcoder.{js,wasm}` directory for offline / air-gapped use.
|
|
2930
|
-
*/
|
|
2931
|
-
ktx2TranscoderUrl?: string;
|
|
2932
|
-
};
|
|
3015
|
+
performance?: PerformanceOptions;
|
|
2933
3016
|
/**
|
|
2934
3017
|
* Live override of the per-asset origin-correction sidecars. Useful for
|
|
2935
3018
|
* the calibration tool.
|
|
@@ -2946,11 +3029,7 @@ interface XtsViewer3DProps {
|
|
|
2946
3029
|
*/
|
|
2947
3030
|
hepcoGfxProfile?: Partial<HepcoGfxRailProfileDims>;
|
|
2948
3031
|
/** CAD-style ViewCube overlay. */
|
|
2949
|
-
viewCube?:
|
|
2950
|
-
enabled?: boolean;
|
|
2951
|
-
alignment?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'top-center' | 'bottom-center' | 'center-left' | 'center-right' | 'center-center';
|
|
2952
|
-
marginPx?: [number, number];
|
|
2953
|
-
};
|
|
3032
|
+
viewCube?: ViewCubeOptions;
|
|
2954
3033
|
/** Stator heatmap data — coloured tube along each part's centerline. */
|
|
2955
3034
|
statorHeatmap?: StatorHeatmap;
|
|
2956
3035
|
/** Continuous mover collision monitoring. */
|
|
@@ -3843,4 +3922,4 @@ declare function snapToGrid(positionMm: Vec3, gridMm: number): Vec3;
|
|
|
3843
3922
|
/** Convenience: `resolveSceneContext` + `toEntityRef`. */
|
|
3844
3923
|
declare function resolveEntityFromObject(object: Object3D | null, instanceId?: number): MeasuredEntityRef | null;
|
|
3845
3924
|
|
|
3846
|
-
export { type AngleMeasurement, type Annotation, type AnnotationAnchor, type AnnotationInput, type AreaConfig, type AreaOptions, AssetLoader, type AssetManifest, BUILTIN_MODULE_SIDECARS, BUILTIN_MOVER_SIDECARS, BUILTIN_RAIL_SIDECARS, BUILTIN_TOOL_SIDECARS, type BuiltChain, type BuiltModule, type CameraProjection, type CameraState, type CaptureMode, type CheckModuleCollisionsOptions, type CheckMoverCollisionsOptions, type ClickModifiers, type CoordinateSystem, type CustomAssetBinding, type CustomAssetConfig, type CustomMoverLayout, DEFAULT_LABEL_FONT_URL, DEFAULT_MEASUREMENT_STYLE, DEFAULT_MODULE_HALF_WIDTH_MM, DEFAULT_MODULE_HEIGHT_MM, DEFAULT_MODULE_MANIFEST, DEFAULT_MOVER_MANIFEST, DEFAULT_ORIGIN_CORRECTION, DEFAULT_RAIL_MANIFEST, DEFAULT_SNAP_KINDS, DEFAULT_SNAP_RADIUS_PX, DEFAULT_TOOL_MANIFEST, type DimensionOptions, type DisplayOptions, type DistanceMeasurement, EMPTY_SELECTION, type EndDelta, type FeedSegment, type FeedSegmentHighlight, type FeedSegmentSelector, type FeedSegmentSpan, type FocusOptions, type FocusTarget, type FrameCaptureOptions, type FrameCaptureSession, HEPCO_GFX_PROFILE, type HeatmapSample, type HepcoGfxRailProfileDims, IDENTITY_POSE, INFEED_MODULE_TYPES, type InfoBarConfig, type InfoBarMarkerConfig, type InfoBarOptions, JSDELIVR_ASSETS_BASE_URL, MODULE_CATALOG, MODULE_GUIDING_RAIL_MAP, MOVER_CATALOG, type MarkerOptions, type MarkerShape, type MeasuredEntityRef, type Measurement, type MeasurementApi, type MeasurementAxis, type MeasurementDocument, type MeasurementDraft, type MeasurementFormatOptions, type MeasurementId, type MeasurementInput, type MeasurementKind, type MeasurementOptions, type MeasurementPoint, type MeasurementResult, type MeasurementSnapshot, type MeasurementStyle, type MeasurementTool, type ModuleAssetEntry, type ModuleCatalogEntry, type ModuleCollision, type ModuleCollisionPartInput, type ModuleCollisionXpuInput, ModuleCornerMarkers, type ModuleEntry, type ModuleHighlight, type ModuleProbe, type ModuleRef, type ModuleSidecar, type ModuleStatusEntry, type ModuleType3D, type MoverAssetEntry, type MoverCatalogEntry, type MoverCollision, type MoverConfig, MoverIdLabel, type MoverIdLabelOptions, type MoverPositionEntry, type MoverProbe, type MoverRef, type MoverSidecar, type MoverToolAssetEntry, type MoverToolConfig, type MoverToolSidecar, type MoverToolType3D, type MoverType3D, type NormalizationWarning, type NormalizedXtsConfig, type Orientation, type OriginCorrection, type PartConfig, type PartPath, type PartTransformation, type PathMeasurement, type PathSample, type PathType, type PlanarPose, type PointCloud, type PointProjector, type PositionFrame, type ProcessingUnitConfig, type RailAssetEntry, type RailSidecar, type RailSystem, type RailType3D, type ResolvedMeasurementStyle, SIDECAR_KINDS, type ScreenshotFormat, type ScreenshotMode, type ScreenshotOptions, type ScreenshotResult, type SelectionMode, type SelectionState, type SidecarIdOf, type SidecarKind, type SidecarKindSpec, type SidecarKinds, SidecarLoader, type SidecarOf, type SidecarOverrides, type SidecarSourceConfig, SidecarSourceContext, type SnapCandidate, type SnapKind, type SnapOptions, type SplitFeedSegmentsOptions, type StationConfig, type StationOptions, type StatorHeatmap, type StopPositionMoverOptions, type TextOptions, type TrackAnchor, type TrackDistanceMeasurement, type TrackIndex, type TrackIndexEntry, type TrackMetrics, type TrackMetricsResolver, type TrackProjection, type TrackTransform, VERSION, type Vec2, type Vec3, XtsArcCurve3, type XtsConfig, XtsConfigNormalizer, type XtsModelDocument, XtsPointCloudCurve3, type XtsRuntimeState, XtsViewer3D, type XtsViewer3DProps, type XtsViewer3DRef, type XtsViewerError, type XtsViewerErrorCode, XtsViewerErrorException, angleDeg, applyBeckhoffXtsConvention, applyEmptyClick, applyModuleClick, applyMoverClick, arcPoints, axisDistanceMm, buildChain, buildModuleProbes, buildPartPath, buildTrackIndex, chainToUserPositionMm, checkModuleCollisions, checkSamePathCollisions, chooseSnapCandidate, collectFeedSegments, collectFeedSegmentsForXpu, collectTriangleSnapCandidates, composeAssetUrl, computeMeasurementResult, createHepcoGfxBaseplateShape, createHepcoGfxRailShape, deselectAll, distanceMm, findModuleAt, formatAngleDeg, formatLengthMm, getModuleEntry, getMoverEntry, getPointCloud, getSharedAssetLoader, interpolateHeatmapValue, isChainClosed, isKnownModuleType, isKnownMoverType, isModuleSelected, isMoverSelected, labelAnchorFor, moduleAnchorWorld, moduleEndDelta, moduleSidecarFilename, moverAnchorWorld, moverSidecarFilename, moverWorldAt, nearestTrackPoint, normaliseToHeatmapRange, normalizeXtsConfig, pathLengthsMm, pickGlbForRail, poseToMatrix4, railSidecarFilename, registerPointCloud, resolveEntityFromObject, resolveGuidingRailGlbUrl, resolveGuidingRailType, resolveHepcoGfxProfile, resolveMeasurementStyle, resolveModuleGlbUrl, resolveMoverGlbUrl, resolveOriginCorrection, resolveStopPositionMm, resolveToolGlbUrl, sampleChainPoint, sampleChainRange, sampleModulePath, snapToGrid, sortHeatmapSamples, splitIntoFeedSegments, toolSidecarFilename, trackAnchorWorld, trackDistanceMm, trackLengthOf, trackPolylineWorld, unregisterPointCloud, useSidecarSource, userToChainPositionMm, worldPointOnPart };
|
|
3925
|
+
export { type AngleMeasurement, type Annotation, type AnnotationAnchor, type AnnotationInput, type AreaConfig, type AreaOptions, AssetLoader, type AssetManifest, BUILTIN_MODULE_SIDECARS, BUILTIN_MOVER_SIDECARS, BUILTIN_RAIL_SIDECARS, BUILTIN_TOOL_SIDECARS, type BuiltChain, type BuiltModule, type CameraProjection, type CameraState, type CaptureDimensions, type CaptureMode, type CaptureRequest, type CheckModuleCollisionsOptions, type CheckMoverCollisionsOptions, type ClickModifiers, type CoordinateSystem, type CustomAssetBinding, type CustomAssetConfig, type CustomMoverLayout, DEFAULT_LABEL_FONT_URL, DEFAULT_MEASUREMENT_STYLE, DEFAULT_MODULE_HALF_WIDTH_MM, DEFAULT_MODULE_HEIGHT_MM, DEFAULT_MODULE_MANIFEST, DEFAULT_MOVER_MANIFEST, DEFAULT_ORIGIN_CORRECTION, DEFAULT_RAIL_MANIFEST, DEFAULT_SNAP_KINDS, DEFAULT_SNAP_RADIUS_PX, DEFAULT_TOOL_MANIFEST, type DimensionOptions, type DisplayOptions, type DistanceMeasurement, EMPTY_SELECTION, type EndDelta, type FeedSegment, type FeedSegmentHighlight, type FeedSegmentSelector, type FeedSegmentSpan, type FocusOptions, type FocusTarget, type FrameCaptureOptions, type FrameCaptureSession, HEPCO_GFX_PROFILE, type HeatmapSample, type HepcoGfxRailProfileDims, IDENTITY_POSE, INFEED_MODULE_TYPES, type InfoBarConfig, type InfoBarMarkerConfig, type InfoBarOptions, type InteractionLocks, JSDELIVR_ASSETS_BASE_URL, MODULE_CATALOG, MODULE_GUIDING_RAIL_MAP, MOVER_CATALOG, type MarkerOptions, type MarkerShape, type MeasuredEntityRef, type Measurement, type MeasurementApi, type MeasurementAxis, type MeasurementDocument, type MeasurementDraft, type MeasurementFormatOptions, type MeasurementId, type MeasurementInput, type MeasurementKind, type MeasurementOptions, type MeasurementPoint, type MeasurementResult, type MeasurementSnapshot, type MeasurementStyle, type MeasurementTool, type ModuleAssetEntry, type ModuleCatalogEntry, type ModuleCollision, type ModuleCollisionPartInput, type ModuleCollisionXpuInput, ModuleCornerMarkers, type ModuleEntry, type ModuleHighlight, type ModuleProbe, type ModuleRef, type ModuleSidecar, type ModuleStatusEntry, type ModuleType3D, type MoverAssetEntry, type MoverCatalogEntry, type MoverCollision, type MoverConfig, MoverIdLabel, type MoverIdLabelOptions, type MoverPositionEntry, type MoverProbe, type MoverRef, type MoverSidecar, type MoverToolAssetEntry, type MoverToolConfig, type MoverToolSidecar, type MoverToolType3D, type MoverType3D, type NormalizationWarning, type NormalizedXtsConfig, type Orientation, type OriginCorrection, type PartConfig, type PartPath, type PartTransformation, type PathMeasurement, type PathSample, type PathType, type PerformanceOptions, type PlanarPose, type PointCloud, type PointProjector, type PositionFrame, type ProcessingUnitConfig, type RailAssetEntry, type RailSidecar, type RailSystem, type RailType3D, type ResolvedMeasurementStyle, SIDECAR_KINDS, type ScreenshotFormat, type ScreenshotMode, type ScreenshotOptions, type ScreenshotResult, type SelectionMode, type SelectionState, type SidecarIdOf, type SidecarKind, type SidecarKindSpec, type SidecarKinds, SidecarLoader, type SidecarOf, type SidecarOverrides, type SidecarSourceConfig, SidecarSourceContext, type SnapCandidate, type SnapKind, type SnapOptions, type SplitFeedSegmentsOptions, type StationConfig, type StationOptions, type StatorHeatmap, type StopPositionMoverOptions, type TextOptions, type TrackAnchor, type TrackDistanceMeasurement, type TrackIndex, type TrackIndexEntry, type TrackMetrics, type TrackMetricsResolver, type TrackProjection, type TrackTransform, VERSION, type Vec2, type Vec3, type ViewCubeAlignment, type ViewCubeOptions, XtsArcCurve3, type XtsConfig, XtsConfigNormalizer, type XtsModelDocument, XtsPointCloudCurve3, type XtsRuntimeState, XtsViewer3D, type XtsViewer3DProps, type XtsViewer3DRef, type XtsViewerError, type XtsViewerErrorCode, XtsViewerErrorException, angleDeg, applyBeckhoffXtsConvention, applyEmptyClick, applyModuleClick, applyMoverClick, arcPoints, axisDistanceMm, buildChain, buildModuleProbes, buildPartPath, buildTrackIndex, chainToUserPositionMm, checkAllModuleCollisions, checkAllMoverCollisions, checkModuleCollisions, checkSamePathCollisions, chooseSnapCandidate, collectFeedSegments, collectFeedSegmentsForXpu, collectTriangleSnapCandidates, composeAssetUrl, computeMeasurementResult, createHepcoGfxBaseplateShape, createHepcoGfxRailShape, deselectAll, distanceMm, findModuleAt, formatAngleDeg, formatLengthMm, getModuleEntry, getMoverEntry, getPointCloud, getSharedAssetLoader, interpolateHeatmapValue, isChainClosed, isKnownModuleType, isKnownMoverType, isModuleSelected, isMoverSelected, labelAnchorFor, moduleAnchorWorld, moduleEndDelta, moduleSidecarFilename, moverAnchorWorld, moverSidecarFilename, moverWorldAt, nearestTrackPoint, normaliseToHeatmapRange, normalizeXtsConfig, pathLengthsMm, pickGlbForRail, poseToMatrix4, railSidecarFilename, registerPointCloud, resolveEntityFromObject, resolveGuidingRailGlbUrl, resolveGuidingRailType, resolveHepcoGfxProfile, resolveMeasurementStyle, resolveModuleGlbUrl, resolveMoverGlbUrl, resolveOriginCorrection, resolveStopPositionMm, resolveToolGlbUrl, sampleChainPoint, sampleChainRange, sampleModulePath, snapToGrid, sortHeatmapSamples, splitIntoFeedSegments, toModuleCollisionInputs, toolSidecarFilename, trackAnchorWorld, trackDistanceMm, trackLengthOf, trackPolylineWorld, unregisterPointCloud, useSidecarSource, userToChainPositionMm, worldPointOnPart };
|