@aura3d/controls 1.0.6

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.
Files changed (76) hide show
  1. package/dist/ControlState.d.ts +14 -0
  2. package/dist/ControlState.d.ts.map +1 -0
  3. package/dist/ControlState.js +11 -0
  4. package/dist/ControlState.js.map +1 -0
  5. package/dist/DragControls.d.ts +8 -0
  6. package/dist/DragControls.d.ts.map +1 -0
  7. package/dist/DragControls.js +14 -0
  8. package/dist/DragControls.js.map +1 -0
  9. package/dist/FirstPersonControls.d.ts +5 -0
  10. package/dist/FirstPersonControls.d.ts.map +1 -0
  11. package/dist/FirstPersonControls.js +8 -0
  12. package/dist/FirstPersonControls.js.map +1 -0
  13. package/dist/FlyControls.d.ts +8 -0
  14. package/dist/FlyControls.d.ts.map +1 -0
  15. package/dist/FlyControls.js +12 -0
  16. package/dist/FlyControls.js.map +1 -0
  17. package/dist/InteractionControls.d.ts +83 -0
  18. package/dist/InteractionControls.d.ts.map +1 -0
  19. package/dist/InteractionControls.js +163 -0
  20. package/dist/InteractionControls.js.map +1 -0
  21. package/dist/MapControls.d.ts +6 -0
  22. package/dist/MapControls.d.ts.map +1 -0
  23. package/dist/MapControls.js +9 -0
  24. package/dist/MapControls.js.map +1 -0
  25. package/dist/NativeControlTypes.d.ts +49 -0
  26. package/dist/NativeControlTypes.d.ts.map +1 -0
  27. package/dist/NativeControlTypes.js +58 -0
  28. package/dist/NativeControlTypes.js.map +1 -0
  29. package/dist/OrbitControls.d.ts +11 -0
  30. package/dist/OrbitControls.d.ts.map +1 -0
  31. package/dist/OrbitControls.js +25 -0
  32. package/dist/OrbitControls.js.map +1 -0
  33. package/dist/Picking.d.ts +41 -0
  34. package/dist/Picking.d.ts.map +1 -0
  35. package/dist/Picking.js +149 -0
  36. package/dist/Picking.js.map +1 -0
  37. package/dist/PickingAnnotations.d.ts +134 -0
  38. package/dist/PickingAnnotations.d.ts.map +1 -0
  39. package/dist/PickingAnnotations.js +221 -0
  40. package/dist/PickingAnnotations.js.map +1 -0
  41. package/dist/PointerLockControls.d.ts +9 -0
  42. package/dist/PointerLockControls.d.ts.map +1 -0
  43. package/dist/PointerLockControls.js +14 -0
  44. package/dist/PointerLockControls.js.map +1 -0
  45. package/dist/SelectionManager.d.ts +8 -0
  46. package/dist/SelectionManager.d.ts.map +1 -0
  47. package/dist/SelectionManager.js +15 -0
  48. package/dist/SelectionManager.js.map +1 -0
  49. package/dist/TrackballControls.d.ts +18 -0
  50. package/dist/TrackballControls.d.ts.map +1 -0
  51. package/dist/TrackballControls.js +99 -0
  52. package/dist/TrackballControls.js.map +1 -0
  53. package/dist/TransformControls.d.ts +11 -0
  54. package/dist/TransformControls.d.ts.map +1 -0
  55. package/dist/TransformControls.js +19 -0
  56. package/dist/TransformControls.js.map +1 -0
  57. package/dist/index.d.ts +21 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +15 -0
  60. package/dist/index.js.map +1 -0
  61. package/package.json +16 -0
  62. package/src/ControlState.ts +24 -0
  63. package/src/DragControls.ts +17 -0
  64. package/src/FirstPersonControls.ts +8 -0
  65. package/src/FlyControls.ts +14 -0
  66. package/src/InteractionControls.ts +224 -0
  67. package/src/MapControls.ts +10 -0
  68. package/src/NativeControlTypes.ts +93 -0
  69. package/src/OrbitControls.ts +25 -0
  70. package/src/Picking.ts +234 -0
  71. package/src/PickingAnnotations.ts +391 -0
  72. package/src/PointerLockControls.ts +15 -0
  73. package/src/SelectionManager.ts +18 -0
  74. package/src/TrackballControls.ts +116 -0
  75. package/src/TransformControls.ts +19 -0
  76. package/src/index.ts +58 -0
@@ -0,0 +1,149 @@
1
+ import { ControlVector3, traverseControlObject } from "./NativeControlTypes.js";
2
+ export class Picking {
3
+ pick(root, origin = new ControlVector3(), direction = new ControlVector3(0, 0, -1), options = {}) {
4
+ return this.report(root, origin, direction, options).hit;
5
+ }
6
+ pickAll(root, origin = new ControlVector3(), direction = new ControlVector3(0, 0, -1), options = {}) {
7
+ return this.report(root, origin, direction, options).hits;
8
+ }
9
+ report(root, origin = new ControlVector3(), direction = new ControlVector3(0, 0, -1), options = {}) {
10
+ const normalizedDirection = normalizedRayDirection(direction);
11
+ const near = finiteRange(options.near ?? 0, "near", 0);
12
+ const far = finiteRange(options.far ?? Number.POSITIVE_INFINITY, "far", near);
13
+ const tolerance = finiteRange(options.tolerance ?? 0, "tolerance", 0);
14
+ const hits = [];
15
+ const counters = {
16
+ testedObjects: 0,
17
+ candidateObjects: 0,
18
+ skippedInvisible: 0,
19
+ skippedNonPickable: 0,
20
+ skippedDisabled: 0,
21
+ skippedOutOfRange: 0,
22
+ skippedMissedRadius: 0
23
+ };
24
+ let nearestMissPerpendicularDistance = Number.POSITIVE_INFINITY;
25
+ traverseControlObject(root, (object) => {
26
+ counters.testedObjects += 1;
27
+ if (object.visible === false && options.includeInvisible !== true) {
28
+ counters.skippedInvisible += 1;
29
+ return;
30
+ }
31
+ const metadata = resolvePickMetadata(object, options);
32
+ if (metadata?.selectable === false) {
33
+ counters.skippedDisabled += 1;
34
+ return;
35
+ }
36
+ if (!isPickableObject(object, metadata, options)) {
37
+ counters.skippedNonPickable += 1;
38
+ return;
39
+ }
40
+ counters.candidateObjects += 1;
41
+ const toObject = new ControlVector3(object.position.x - origin.x, object.position.y - origin.y, object.position.z - origin.z);
42
+ const distanceAlongRay = dot(toObject, normalizedDirection);
43
+ if (distanceAlongRay < near || distanceAlongRay > far) {
44
+ counters.skippedOutOfRange += 1;
45
+ return;
46
+ }
47
+ const closestPoint = pointOnRay(origin, normalizedDirection, distanceAlongRay);
48
+ const perpendicularDistance = new ControlVector3(object.position.x - closestPoint.x, object.position.y - closestPoint.y, object.position.z - closestPoint.z).length();
49
+ const radius = resolvePickRadius(object, metadata) + tolerance;
50
+ if (perpendicularDistance > radius) {
51
+ counters.skippedMissedRadius += 1;
52
+ nearestMissPerpendicularDistance = Math.min(nearestMissPerpendicularDistance, perpendicularDistance);
53
+ return;
54
+ }
55
+ const rayEntryDistance = Math.max(near, distanceAlongRay - Math.sqrt(Math.max(0, radius * radius - perpendicularDistance * perpendicularDistance)));
56
+ hits.push({
57
+ object,
58
+ distance: rayEntryDistance,
59
+ distanceAlongRay,
60
+ perpendicularDistance,
61
+ point: pointOnRay(origin, normalizedDirection, rayEntryDistance),
62
+ radius,
63
+ metadata
64
+ });
65
+ });
66
+ hits.sort(compareHits);
67
+ const hit = hits[0] ?? null;
68
+ return {
69
+ hit,
70
+ hits,
71
+ diagnostics: {
72
+ ...counters,
73
+ hitCount: hits.length,
74
+ nearestMissPerpendicularDistance: Number.isFinite(nearestMissPerpendicularDistance) ? nearestMissPerpendicularDistance : null,
75
+ nearestHitLabel: hit ? pickLabel(hit.object, hit.metadata) : null
76
+ }
77
+ };
78
+ }
79
+ }
80
+ function normalizedRayDirection(direction) {
81
+ const normalized = new ControlVector3(direction.x, direction.y, direction.z);
82
+ const length = normalized.length();
83
+ if (!Number.isFinite(length) || length <= 1e-8) {
84
+ throw new RangeError("Picking ray direction must be finite and non-zero.");
85
+ }
86
+ return normalized.set(normalized.x / length, normalized.y / length, normalized.z / length);
87
+ }
88
+ function finiteRange(value, label, minimum) {
89
+ if (value === Number.POSITIVE_INFINITY && label === "far")
90
+ return value;
91
+ if (!Number.isFinite(value) || value < minimum) {
92
+ throw new RangeError(`Picking ${label} must be finite and >= ${minimum}.`);
93
+ }
94
+ return value;
95
+ }
96
+ function resolvePickMetadata(object, options) {
97
+ return options.metadata?.(object)
98
+ ?? object.picking
99
+ ?? readUserDataMetadata(object.userData);
100
+ }
101
+ function readUserDataMetadata(userData) {
102
+ const value = userData?.a3dPicking ?? userData?.picking;
103
+ if (!value || typeof value !== "object")
104
+ return undefined;
105
+ return value;
106
+ }
107
+ function isPickableObject(object, metadata, options) {
108
+ if (metadata && options.includeNonRenderableMetadata !== false)
109
+ return true;
110
+ return object.type === "Mesh" || object.type === "Sprite" || object.type === "Points" || object.type === "LineSegments";
111
+ }
112
+ function resolvePickRadius(object, metadata) {
113
+ const explicit = metadata?.pickRadius ?? object.pickRadius ?? readUserDataRadius(object.userData);
114
+ if (explicit !== undefined)
115
+ return positiveFinite(explicit, "pickRadius");
116
+ const scale = object.scale;
117
+ if (!scale)
118
+ return 0.5;
119
+ const radius = Math.max(Math.abs(scale.x), Math.abs(scale.y), Math.abs(scale.z)) * 0.5;
120
+ return Number.isFinite(radius) && radius > 0 ? radius : 0.5;
121
+ }
122
+ function readUserDataRadius(userData) {
123
+ const value = userData?.a3dPickRadius;
124
+ return typeof value === "number" ? value : undefined;
125
+ }
126
+ function positiveFinite(value, label) {
127
+ if (!Number.isFinite(value) || value <= 0)
128
+ throw new RangeError(`Picking ${label} must be finite and positive.`);
129
+ return value;
130
+ }
131
+ function dot(left, right) {
132
+ return left.x * right.x + left.y * right.y + left.z * right.z;
133
+ }
134
+ function pointOnRay(origin, direction, distance) {
135
+ return new ControlVector3(origin.x + direction.x * distance, origin.y + direction.y * distance, origin.z + direction.z * distance);
136
+ }
137
+ function compareHits(left, right) {
138
+ const distanceDelta = left.distance - right.distance;
139
+ if (Math.abs(distanceDelta) > 1e-8)
140
+ return distanceDelta;
141
+ return pickPriority(right) - pickPriority(left);
142
+ }
143
+ function pickPriority(hit) {
144
+ return hit.metadata?.priority ?? hit.object.pickPriority ?? 0;
145
+ }
146
+ function pickLabel(object, metadata) {
147
+ return metadata?.label ?? metadata?.id ?? object.name ?? null;
148
+ }
149
+ //# sourceMappingURL=Picking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Picking.js","sourceRoot":"","sources":["../../../../packages/controls/src/Picking.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ import { type PickingOptions, type PickingReport, type ThreeCompatPickResult } from "./Picking";
2
+ import { type ControlObject3DLike, type ControlPickMetadata, type Vector3Like } from "./NativeControlTypes";
3
+ export type PickingAnnotationKind = "hotspot" | "label" | "district" | "building" | "robot" | "entity";
4
+ export type PickingAnnotationSource = "imported-gltf" | "procedural" | "screen-space";
5
+ export type PickingAnnotationHitPolicy = "nearest" | "priority";
6
+ export interface PickingAnnotation<TPayload = unknown> {
7
+ readonly id: string;
8
+ readonly label: string;
9
+ readonly kind: PickingAnnotationKind;
10
+ readonly position: Vector3Like | readonly [number, number, number];
11
+ readonly radius: number;
12
+ readonly priority?: number;
13
+ readonly group?: string;
14
+ readonly routeId?: string;
15
+ readonly source?: PickingAnnotationSource;
16
+ readonly selectable?: boolean;
17
+ readonly highlightable?: boolean;
18
+ readonly targetId?: string;
19
+ readonly payload?: TPayload;
20
+ }
21
+ export interface PickingAnnotationRoot<TPayload = unknown> extends ControlObject3DLike {
22
+ readonly type: "PickingAnnotationRoot";
23
+ readonly name: string;
24
+ readonly children: readonly PickingAnnotationObject<TPayload>[];
25
+ }
26
+ export interface PickingAnnotationObject<TPayload = unknown> extends ControlObject3DLike {
27
+ readonly type: "PickingAnnotation";
28
+ readonly name: string;
29
+ readonly picking: ControlPickMetadata;
30
+ readonly userData: {
31
+ readonly a3dPicking: ControlPickMetadata;
32
+ readonly a3dPickingAnnotation: PickingAnnotation<TPayload>;
33
+ };
34
+ }
35
+ export interface PickingAnnotationReport<TPayload = unknown> extends PickingReport {
36
+ readonly annotation: PickingAnnotation<TPayload> | null;
37
+ readonly annotations: readonly PickingAnnotation<TPayload>[];
38
+ }
39
+ export interface PickingAnnotationOptions extends PickingOptions {
40
+ readonly hitPolicy?: PickingAnnotationHitPolicy;
41
+ }
42
+ export interface ImportedGlbHotspotDescriptor<TPayload = unknown> {
43
+ readonly id?: string;
44
+ readonly nodeName?: string;
45
+ readonly label?: string;
46
+ readonly focusId?: string;
47
+ readonly position: Vector3Like | readonly [number, number, number];
48
+ readonly radius?: number;
49
+ readonly priority?: number;
50
+ readonly selectable?: boolean;
51
+ readonly highlightable?: boolean;
52
+ readonly payload?: TPayload;
53
+ }
54
+ export interface DistrictPickingDescriptor<TPayload = unknown> {
55
+ readonly id: string;
56
+ readonly label?: string;
57
+ readonly center: Vector3Like | readonly [number, number, number];
58
+ readonly radius: number;
59
+ readonly priority?: number;
60
+ readonly routeId?: string;
61
+ readonly payload?: TPayload;
62
+ readonly buildings?: readonly BuildingPickingDescriptor<TPayload>[];
63
+ }
64
+ export interface BuildingPickingDescriptor<TPayload = unknown> {
65
+ readonly id: string;
66
+ readonly label?: string;
67
+ readonly position: Vector3Like | readonly [number, number, number];
68
+ readonly radius: number;
69
+ readonly priority?: number;
70
+ readonly payload?: TPayload;
71
+ }
72
+ export interface EntityPickingDescriptor<TPayload = unknown> {
73
+ readonly id: string;
74
+ readonly label?: string;
75
+ readonly kind?: "robot" | "entity";
76
+ readonly position: Vector3Like | readonly [number, number, number];
77
+ readonly radius: number;
78
+ readonly priority?: number;
79
+ readonly group?: string;
80
+ readonly routeId?: string;
81
+ readonly payload?: TPayload;
82
+ }
83
+ export interface ScreenPickingAnnotation<TPayload = unknown> {
84
+ readonly id: string;
85
+ readonly label: string;
86
+ readonly kind: PickingAnnotationKind;
87
+ readonly x: number;
88
+ readonly y: number;
89
+ readonly radius: number;
90
+ readonly priority?: number;
91
+ readonly group?: string;
92
+ readonly routeId?: string;
93
+ readonly source?: PickingAnnotationSource;
94
+ readonly selectable?: boolean;
95
+ readonly highlightable?: boolean;
96
+ readonly targetId?: string;
97
+ readonly payload?: TPayload;
98
+ }
99
+ export interface ScreenPickingHit<TPayload = unknown> {
100
+ readonly annotation: ScreenPickingAnnotation<TPayload>;
101
+ readonly distance: number;
102
+ }
103
+ export interface ScreenPickingReport<TPayload = unknown> {
104
+ readonly hit: ScreenPickingHit<TPayload> | null;
105
+ readonly hits: readonly ScreenPickingHit<TPayload>[];
106
+ readonly diagnostics: {
107
+ readonly testedAnnotations: number;
108
+ readonly candidateAnnotations: number;
109
+ readonly hitCount: number;
110
+ readonly skippedDisabled: number;
111
+ readonly skippedOutOfRadius: number;
112
+ readonly nearestHitLabel: string | null;
113
+ };
114
+ }
115
+ export interface ScreenPickingOptions {
116
+ readonly tolerance?: number;
117
+ readonly hitPolicy?: PickingAnnotationHitPolicy;
118
+ }
119
+ export declare function createPickingAnnotationRoot<TPayload = unknown>(name: string, annotations: readonly PickingAnnotation<TPayload>[]): PickingAnnotationRoot<TPayload>;
120
+ export declare function createPickingAnnotationObject<TPayload = unknown>(annotation: PickingAnnotation<TPayload>): PickingAnnotationObject<TPayload>;
121
+ export declare function pickAnnotation<TPayload = unknown>(root: ControlObject3DLike, origin?: Vector3Like, direction?: Vector3Like, options?: PickingAnnotationOptions): PickingAnnotationReport<TPayload>;
122
+ export declare function annotationFromPickHit<TPayload = unknown>(hit: ThreeCompatPickResult | null | undefined): PickingAnnotation<TPayload> | null;
123
+ export declare function createImportedGlbHotspotAnnotations<TPayload = unknown>(assetId: string, hotspots: readonly ImportedGlbHotspotDescriptor<TPayload>[], routeId?: string): readonly PickingAnnotation<TPayload>[];
124
+ export declare function createDistrictPickingAnnotations<TPayload = unknown>(districts: readonly DistrictPickingDescriptor<TPayload>[]): readonly PickingAnnotation<TPayload>[];
125
+ export declare function createRobotPickingAnnotations<TPayload = unknown>(robots: readonly EntityPickingDescriptor<TPayload>[]): readonly PickingAnnotation<TPayload>[];
126
+ export declare function createEntityPickingAnnotations<TPayload = unknown>(entities: readonly EntityPickingDescriptor<TPayload>[], options?: {
127
+ readonly defaultGroup?: string;
128
+ readonly defaultPriority?: number;
129
+ }): readonly PickingAnnotation<TPayload>[];
130
+ export declare function pickScreenSpaceAnnotation<TPayload = unknown>(pointer: {
131
+ readonly x: number;
132
+ readonly y: number;
133
+ }, annotations: readonly ScreenPickingAnnotation<TPayload>[], options?: ScreenPickingOptions): ScreenPickingReport<TPayload>;
134
+ //# sourceMappingURL=PickingAnnotations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PickingAnnotations.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/PickingAnnotations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,221 @@
1
+ import { Picking } from "./Picking.js";
2
+ import { ControlVector3 } from "./NativeControlTypes.js";
3
+ export function createPickingAnnotationRoot(name, annotations) {
4
+ return {
5
+ type: "PickingAnnotationRoot",
6
+ name,
7
+ position: new ControlVector3(),
8
+ children: annotations.map(createPickingAnnotationObject)
9
+ };
10
+ }
11
+ export function createPickingAnnotationObject(annotation) {
12
+ const radius = positiveFinite(annotation.radius, "annotation radius");
13
+ const metadata = {
14
+ id: annotation.id,
15
+ label: annotation.label,
16
+ kind: annotation.kind,
17
+ group: annotation.group,
18
+ selectable: annotation.selectable,
19
+ highlightable: annotation.highlightable,
20
+ pickRadius: radius,
21
+ priority: annotation.priority,
22
+ routeId: annotation.routeId,
23
+ source: annotation.source,
24
+ targetId: annotation.targetId,
25
+ payload: annotation.payload
26
+ };
27
+ return {
28
+ type: "PickingAnnotation",
29
+ name: annotation.label,
30
+ position: toVector3(annotation.position),
31
+ scale: new ControlVector3(radius * 2, radius * 2, radius * 2),
32
+ visible: annotation.selectable === false ? false : true,
33
+ pickRadius: radius,
34
+ pickPriority: annotation.priority,
35
+ picking: metadata,
36
+ userData: {
37
+ a3dPicking: metadata,
38
+ a3dPickingAnnotation: annotation
39
+ }
40
+ };
41
+ }
42
+ export function pickAnnotation(root, origin = new ControlVector3(), direction = new ControlVector3(0, 0, -1), options = {}) {
43
+ const report = new Picking().report(root, origin, direction, options);
44
+ const hits = options.hitPolicy === "priority"
45
+ ? [...report.hits].sort(compareAnnotationHitsByPriority)
46
+ : report.hits;
47
+ const hit = hits[0] ?? null;
48
+ return {
49
+ ...report,
50
+ hit,
51
+ hits,
52
+ annotation: hit ? annotationFromPickHit(hit) : null,
53
+ annotations: hits.map((candidate) => annotationFromPickHit(candidate)).filter((annotation) => Boolean(annotation))
54
+ };
55
+ }
56
+ export function annotationFromPickHit(hit) {
57
+ const value = hit?.object.userData?.a3dPickingAnnotation;
58
+ return isPickingAnnotation(value) ? value : null;
59
+ }
60
+ export function createImportedGlbHotspotAnnotations(assetId, hotspots, routeId) {
61
+ return hotspots.map((hotspot, index) => {
62
+ const targetId = hotspot.focusId ?? hotspot.nodeName ?? hotspot.id ?? `hotspot-${index}`;
63
+ return {
64
+ id: hotspot.id ?? `${assetId}:${targetId}`,
65
+ label: hotspot.label ?? readableLabel(targetId),
66
+ kind: "hotspot",
67
+ position: hotspot.position,
68
+ radius: hotspot.radius ?? 0.18,
69
+ priority: hotspot.priority ?? 100,
70
+ group: assetId,
71
+ routeId,
72
+ source: "imported-gltf",
73
+ selectable: hotspot.selectable,
74
+ highlightable: hotspot.highlightable ?? true,
75
+ targetId,
76
+ payload: hotspot.payload
77
+ };
78
+ });
79
+ }
80
+ export function createDistrictPickingAnnotations(districts) {
81
+ const annotations = [];
82
+ for (const district of districts) {
83
+ annotations.push({
84
+ id: district.id,
85
+ label: district.label ?? readableLabel(district.id),
86
+ kind: "district",
87
+ position: district.center,
88
+ radius: district.radius,
89
+ priority: district.priority ?? 10,
90
+ group: "district",
91
+ routeId: district.routeId,
92
+ source: "procedural",
93
+ highlightable: true,
94
+ payload: district.payload
95
+ });
96
+ for (const building of district.buildings ?? []) {
97
+ annotations.push({
98
+ id: building.id,
99
+ label: building.label ?? readableLabel(building.id),
100
+ kind: "building",
101
+ position: building.position,
102
+ radius: building.radius,
103
+ priority: building.priority ?? 40,
104
+ group: district.id,
105
+ routeId: district.routeId,
106
+ source: "procedural",
107
+ highlightable: true,
108
+ payload: building.payload
109
+ });
110
+ }
111
+ }
112
+ return annotations;
113
+ }
114
+ export function createRobotPickingAnnotations(robots) {
115
+ return createEntityPickingAnnotations(robots.map((robot) => ({ ...robot, kind: "robot" })), {
116
+ defaultGroup: "robot",
117
+ defaultPriority: 70
118
+ });
119
+ }
120
+ export function createEntityPickingAnnotations(entities, options = {}) {
121
+ return entities.map((entity) => ({
122
+ id: entity.id,
123
+ label: entity.label ?? readableLabel(entity.id),
124
+ kind: entity.kind ?? "entity",
125
+ position: entity.position,
126
+ radius: entity.radius,
127
+ priority: entity.priority ?? options.defaultPriority ?? 50,
128
+ group: entity.group ?? options.defaultGroup,
129
+ routeId: entity.routeId,
130
+ source: "procedural",
131
+ highlightable: true,
132
+ targetId: entity.id,
133
+ payload: entity.payload
134
+ }));
135
+ }
136
+ export function pickScreenSpaceAnnotation(pointer, annotations, options = {}) {
137
+ validateScreenPoint(pointer, "pointer");
138
+ const tolerance = options.tolerance ?? 0;
139
+ if (!Number.isFinite(tolerance) || tolerance < 0)
140
+ throw new RangeError("Screen picking tolerance must be finite and non-negative.");
141
+ const hits = [];
142
+ let skippedDisabled = 0;
143
+ let skippedOutOfRadius = 0;
144
+ for (const annotation of annotations) {
145
+ if (annotation.selectable === false) {
146
+ skippedDisabled += 1;
147
+ continue;
148
+ }
149
+ validateScreenPoint(annotation, annotation.id);
150
+ const radius = positiveFinite(annotation.radius, `${annotation.id} screen radius`) + tolerance;
151
+ const distance = Math.hypot(pointer.x - annotation.x, pointer.y - annotation.y);
152
+ if (distance > radius) {
153
+ skippedOutOfRadius += 1;
154
+ continue;
155
+ }
156
+ hits.push({ annotation, distance });
157
+ }
158
+ hits.sort(options.hitPolicy === "priority" ? compareScreenHitsByPriority : compareScreenHitsByDistance);
159
+ const hit = hits[0] ?? null;
160
+ return {
161
+ hit,
162
+ hits,
163
+ diagnostics: {
164
+ testedAnnotations: annotations.length,
165
+ candidateAnnotations: annotations.length - skippedDisabled,
166
+ hitCount: hits.length,
167
+ skippedDisabled,
168
+ skippedOutOfRadius,
169
+ nearestHitLabel: hit?.annotation.label ?? null
170
+ }
171
+ };
172
+ }
173
+ function toVector3(value) {
174
+ const tuple = value;
175
+ const vector = value;
176
+ const x = Array.isArray(value) ? tuple[0] : vector.x;
177
+ const y = Array.isArray(value) ? tuple[1] : vector.y;
178
+ const z = Array.isArray(value) ? tuple[2] : vector.z;
179
+ if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(z)) {
180
+ throw new RangeError("Picking annotation position must contain three finite values.");
181
+ }
182
+ return new ControlVector3(x, y, z);
183
+ }
184
+ function positiveFinite(value, label) {
185
+ if (!Number.isFinite(value) || value <= 0)
186
+ throw new RangeError(`Picking ${label} must be finite and positive.`);
187
+ return value;
188
+ }
189
+ function readableLabel(value) {
190
+ return value.replace(/[_:-]+/g, " ").replace(/\s+/g, " ").trim() || "Picking target";
191
+ }
192
+ function compareAnnotationHitsByPriority(left, right) {
193
+ const priorityDelta = (right.metadata?.priority ?? 0) - (left.metadata?.priority ?? 0);
194
+ if (Math.abs(priorityDelta) > 1e-8)
195
+ return priorityDelta;
196
+ return left.distance - right.distance;
197
+ }
198
+ function isPickingAnnotation(value) {
199
+ return Boolean(value)
200
+ && typeof value === "object"
201
+ && typeof value.id === "string"
202
+ && typeof value.label === "string";
203
+ }
204
+ function validateScreenPoint(point, label) {
205
+ if (!Number.isFinite(point.x) || !Number.isFinite(point.y)) {
206
+ throw new RangeError(`Screen picking ${label} must contain finite x/y values.`);
207
+ }
208
+ }
209
+ function compareScreenHitsByDistance(left, right) {
210
+ const distanceDelta = left.distance - right.distance;
211
+ if (Math.abs(distanceDelta) > 1e-8)
212
+ return distanceDelta;
213
+ return (right.annotation.priority ?? 0) - (left.annotation.priority ?? 0);
214
+ }
215
+ function compareScreenHitsByPriority(left, right) {
216
+ const priorityDelta = (right.annotation.priority ?? 0) - (left.annotation.priority ?? 0);
217
+ if (Math.abs(priorityDelta) > 1e-8)
218
+ return priorityDelta;
219
+ return left.distance - right.distance;
220
+ }
221
+ //# sourceMappingURL=PickingAnnotations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PickingAnnotations.js","sourceRoot":"","sources":["../../../../packages/controls/src/PickingAnnotations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type ThreeCompatControlState } from "./ControlState";
2
+ export declare class PointerLockControls {
3
+ readonly state: ThreeCompatControlState;
4
+ locked: boolean;
5
+ lock(): void;
6
+ unlock(): void;
7
+ look(deltaX: number, deltaY: number): void;
8
+ }
9
+ //# sourceMappingURL=PointerLockControls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PointerLockControls.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/PointerLockControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzF,qBAAa,mBAAmB;IAC9B,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAA+B;IACtE,MAAM,UAAS;IAEf,IAAI,IAAI,IAAI;IACZ,MAAM,IAAI,IAAI;IAEd,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAK3C"}
@@ -0,0 +1,14 @@
1
+ import { createDefaultControlState } from "./ControlState.js";
2
+ export class PointerLockControls {
3
+ state = createDefaultControlState();
4
+ locked = false;
5
+ lock() { this.locked = true; }
6
+ unlock() { this.locked = false; }
7
+ look(deltaX, deltaY) {
8
+ if (!this.locked)
9
+ return;
10
+ this.state.rotation.y += deltaX;
11
+ this.state.rotation.x += deltaY;
12
+ }
13
+ }
14
+ //# sourceMappingURL=PointerLockControls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PointerLockControls.js","sourceRoot":"","sources":["../../../../packages/controls/src/PointerLockControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAgC,MAAM,gBAAgB,CAAC;AAEzF,MAAM,OAAO,mBAAmB;IACrB,KAAK,GAA4B,yBAAyB,EAAE,CAAC;IACtE,MAAM,GAAG,KAAK,CAAC;IAEf,IAAI,KAAW,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IACpC,MAAM,KAAW,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;IAEvC,IAAI,CAAC,MAAc,EAAE,MAAc;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC;IAClC,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import type { ControlObject3DLike } from "./NativeControlTypes";
2
+ export declare class SelectionManager {
3
+ readonly selected: Set<ControlObject3DLike>;
4
+ select(object: ControlObject3DLike, additive?: boolean): void;
5
+ deselect(object: ControlObject3DLike): void;
6
+ clear(): void;
7
+ }
8
+ //# sourceMappingURL=SelectionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectionManager.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/SelectionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,qBAAa,gBAAgB;IAC3B,QAAQ,CAAC,QAAQ,2BAAkC;IAEnD,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,QAAQ,UAAQ,GAAG,IAAI;IAK3D,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAI3C,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,15 @@
1
+ export class SelectionManager {
2
+ selected = new Set();
3
+ select(object, additive = false) {
4
+ if (!additive)
5
+ this.clear();
6
+ this.selected.add(object);
7
+ }
8
+ deselect(object) {
9
+ this.selected.delete(object);
10
+ }
11
+ clear() {
12
+ this.selected.clear();
13
+ }
14
+ }
15
+ //# sourceMappingURL=SelectionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectionManager.js","sourceRoot":"","sources":["../../../../packages/controls/src/SelectionManager.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,gBAAgB;IAClB,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEnD,MAAM,CAAC,MAA2B,EAAE,QAAQ,GAAG,KAAK;QAClD,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,QAAQ,CAAC,MAA2B;QAClC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import { OrbitControls } from "./OrbitControls";
2
+ export type TrackballKey = "ArrowUp" | "ArrowDown" | "ArrowLeft" | "ArrowRight" | "KeyQ" | "KeyE" | "NumpadAdd" | "NumpadSubtract" | "+" | "-" | "=" | "_";
3
+ export declare class TrackballControls extends OrbitControls {
4
+ enableDamping: boolean;
5
+ dampingFactor: number;
6
+ keyPanSpeed: number;
7
+ keyRollSpeed: number;
8
+ private rotationVelocity;
9
+ private panVelocity;
10
+ private dollyVelocity;
11
+ roll(delta: number): void;
12
+ rotate(deltaX: number, deltaY: number): void;
13
+ pan(deltaX: number, deltaY: number): void;
14
+ dolly(scale: number): void;
15
+ handleKey(code: TrackballKey): void;
16
+ update(deltaSeconds?: number): boolean;
17
+ }
18
+ //# sourceMappingURL=TrackballControls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrackballControls.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/TrackballControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,WAAW,GACX,WAAW,GACX,YAAY,GACZ,MAAM,GACN,MAAM,GACN,WAAW,GACX,gBAAgB,GAChB,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,CAAC;AAER,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,aAAa,UAAS;IACtB,aAAa,SAAQ;IACrB,WAAW,SAAQ;IACnB,YAAY,SAAQ;IAEpB,OAAO,CAAC,gBAAgB,CAAwB;IAChD,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,aAAa,CAAK;IAE1B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMhB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAO5C,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAOzC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMnC,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAiCnC,MAAM,CAAC,YAAY,SAAS,GAAG,OAAO;CA8BvC"}