@shapediver/viewer.rendering-engine.intersection-engine 3.16.8 → 3.16.10
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/implementation/IntersectionEngine.d.ts +35 -35
- package/dist/implementation/IntersectionEngine.js +206 -196
- package/dist/implementation/IntersectionEngine.js.map +1 -1
- package/dist/implementation/SelectionBox.d.ts +30 -30
- package/dist/implementation/SelectionBox.d.ts.map +1 -1
- package/dist/implementation/SelectionBox.js +210 -210
- package/dist/implementation/SelectionBox.js.map +1 -1
- package/dist/index.d.ts +7 -7
- package/dist/index.js +7 -7
- package/dist/interfaces/IIntersectionEngine.d.ts +9 -9
- package/dist/interfaces/IIntersectionEngine.js +2 -2
- package/dist/interfaces/ISelectionBox.d.ts +21 -21
- package/dist/interfaces/ISelectionBox.js +2 -2
- package/package.json +8 -8
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
import { GeometryData, ITreeNode } from "@shapediver/viewer.shared.node-tree";
|
|
2
|
-
import { IIntersectionDefinition, IIntersectionFilter, IRay, IRayTracingIntersection } from "@shapediver/viewer.shared.types";
|
|
3
|
-
import * as THREE from "three";
|
|
4
|
-
import { IIntersectionEngine } from "../interfaces/IIntersectionEngine";
|
|
5
|
-
import { SelectionBox } from "./SelectionBox";
|
|
6
|
-
export declare class IntersectionEngine implements IIntersectionEngine {
|
|
7
|
-
private readonly _eventEngine;
|
|
8
|
-
private readonly _raycaster;
|
|
9
|
-
private readonly _tree;
|
|
10
|
-
private static _instance;
|
|
11
|
-
private _intersectNodes;
|
|
12
|
-
private constructor();
|
|
13
|
-
static get instance(): IntersectionEngine;
|
|
14
|
-
intersect(ray: IRay, viewportId: string, filterCriteria?: IIntersectionFilter[], options?: {
|
|
15
|
-
rayCasterParams?: THREE.RaycasterParameters;
|
|
16
|
-
selectionBox?: SelectionBox;
|
|
17
|
-
}): IIntersectionDefinition[];
|
|
18
|
-
intersectNode(ray: IRay, node: ITreeNode, geometryData: {
|
|
19
|
-
[key: string]: GeometryData;
|
|
20
|
-
}, viewportId: string, filterCriteria?: IIntersectionFilter[], rayCasterParams?: THREE.RaycasterParameters): IRayTracingIntersection[] | undefined;
|
|
21
|
-
/**
|
|
22
|
-
* Gather all nodes that contain geometry data.
|
|
23
|
-
*/
|
|
24
|
-
private gatherNodes;
|
|
25
|
-
/**
|
|
26
|
-
* Do the intersection test with the ray and the node.
|
|
27
|
-
*
|
|
28
|
-
* @param ray the ray to test
|
|
29
|
-
* @param node the node to test
|
|
30
|
-
* @param geometryData the geometry data of the node
|
|
31
|
-
* @param viewportId the viewport id
|
|
32
|
-
* @returns
|
|
33
|
-
*/
|
|
34
|
-
private intersectionTest;
|
|
35
|
-
}
|
|
1
|
+
import { GeometryData, ITreeNode } from "@shapediver/viewer.shared.node-tree";
|
|
2
|
+
import { IIntersectionDefinition, IIntersectionFilter, IRay, IRayTracingIntersection } from "@shapediver/viewer.shared.types";
|
|
3
|
+
import * as THREE from "three";
|
|
4
|
+
import { IIntersectionEngine } from "../interfaces/IIntersectionEngine";
|
|
5
|
+
import { SelectionBox } from "./SelectionBox";
|
|
6
|
+
export declare class IntersectionEngine implements IIntersectionEngine {
|
|
7
|
+
private readonly _eventEngine;
|
|
8
|
+
private readonly _raycaster;
|
|
9
|
+
private readonly _tree;
|
|
10
|
+
private static _instance;
|
|
11
|
+
private _intersectNodes;
|
|
12
|
+
private constructor();
|
|
13
|
+
static get instance(): IntersectionEngine;
|
|
14
|
+
intersect(ray: IRay, viewportId: string, filterCriteria?: IIntersectionFilter[], options?: {
|
|
15
|
+
rayCasterParams?: THREE.RaycasterParameters;
|
|
16
|
+
selectionBox?: SelectionBox;
|
|
17
|
+
}): IIntersectionDefinition[];
|
|
18
|
+
intersectNode(ray: IRay, node: ITreeNode, geometryData: {
|
|
19
|
+
[key: string]: GeometryData;
|
|
20
|
+
}, viewportId: string, filterCriteria?: IIntersectionFilter[], rayCasterParams?: THREE.RaycasterParameters): IRayTracingIntersection[] | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Gather all nodes that contain geometry data.
|
|
23
|
+
*/
|
|
24
|
+
private gatherNodes;
|
|
25
|
+
/**
|
|
26
|
+
* Do the intersection test with the ray and the node.
|
|
27
|
+
*
|
|
28
|
+
* @param ray the ray to test
|
|
29
|
+
* @param node the node to test
|
|
30
|
+
* @param geometryData the geometry data of the node
|
|
31
|
+
* @param viewportId the viewport id
|
|
32
|
+
* @returns
|
|
33
|
+
*/
|
|
34
|
+
private intersectionTest;
|
|
35
|
+
}
|
|
36
36
|
//# sourceMappingURL=IntersectionEngine.d.ts.map
|
|
@@ -1,197 +1,207 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
if
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
return;
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
visible
|
|
147
|
-
restrictViewports
|
|
148
|
-
excludeViewports
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.IntersectionEngine = void 0;
|
|
37
|
+
const viewer_shared_node_tree_1 = require("@shapediver/viewer.shared.node-tree");
|
|
38
|
+
const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
|
|
39
|
+
const THREE = __importStar(require("three"));
|
|
40
|
+
class IntersectionEngine {
|
|
41
|
+
// #endregion Properties (5)
|
|
42
|
+
// #region Constructors (1)
|
|
43
|
+
constructor() {
|
|
44
|
+
// #region Properties (5)
|
|
45
|
+
this._eventEngine = viewer_shared_services_1.EventEngine.instance;
|
|
46
|
+
this._raycaster = new THREE.Raycaster();
|
|
47
|
+
this._tree = viewer_shared_node_tree_1.Tree.instance;
|
|
48
|
+
this._intersectNodes = [];
|
|
49
|
+
this.gatherNodes();
|
|
50
|
+
this._eventEngine.addListener(viewer_shared_services_1.EVENTTYPE.VIEWPORT.VIEWPORT_UPDATED, () => {
|
|
51
|
+
this.gatherNodes();
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
// #endregion Constructors (1)
|
|
55
|
+
// #region Public Static Getters And Setters (1)
|
|
56
|
+
static get instance() {
|
|
57
|
+
return this._instance || (this._instance = new this());
|
|
58
|
+
}
|
|
59
|
+
// #endregion Public Static Getters And Setters (1)
|
|
60
|
+
// #region Public Methods (2)
|
|
61
|
+
intersect(ray, viewportId, filterCriteria, options) {
|
|
62
|
+
if (options === null || options === void 0 ? void 0 : options.selectionBox) {
|
|
63
|
+
const selectionBox = options.selectionBox;
|
|
64
|
+
return selectionBox.intersectObjects(this._intersectNodes.map((n) => n.node), filterCriteria || []);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
let intersections = [];
|
|
68
|
+
this._intersectNodes.forEach((i) => {
|
|
69
|
+
const currentIntersections = this.intersectNode(ray, i.node, i.geometryData, viewportId, filterCriteria, options === null || options === void 0 ? void 0 : options.rayCasterParams);
|
|
70
|
+
if (currentIntersections)
|
|
71
|
+
intersections = intersections.concat(currentIntersections);
|
|
72
|
+
});
|
|
73
|
+
intersections.sort((a, b) => {
|
|
74
|
+
const distanceDiff = a.distance - b.distance;
|
|
75
|
+
if (distanceDiff !== 0)
|
|
76
|
+
return distanceDiff;
|
|
77
|
+
// if the distance is the same, sort by the closest InteractionData within the sceneTree
|
|
78
|
+
let depthA = Infinity;
|
|
79
|
+
let depthB = Infinity;
|
|
80
|
+
const computeDepth = (targetNode, node, depth = 0) => {
|
|
81
|
+
if (targetNode === node)
|
|
82
|
+
return depth;
|
|
83
|
+
if (node.parent)
|
|
84
|
+
return computeDepth(targetNode, node.parent, depth + 1);
|
|
85
|
+
return Infinity;
|
|
86
|
+
};
|
|
87
|
+
if (a.geometryData) {
|
|
88
|
+
a.node.traverse((node) => {
|
|
89
|
+
if (a.geometryData &&
|
|
90
|
+
node.data.includes(a.geometryData))
|
|
91
|
+
depthA = computeDepth(a.node, node);
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
if (b.geometryData) {
|
|
95
|
+
b.node.traverse((node) => {
|
|
96
|
+
if (b.geometryData &&
|
|
97
|
+
node.data.includes(b.geometryData))
|
|
98
|
+
depthB = computeDepth(b.node, node);
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return depthA - depthB;
|
|
102
|
+
});
|
|
103
|
+
return intersections;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
intersectNode(ray, node, geometryData, viewportId, filterCriteria, rayCasterParams) {
|
|
107
|
+
if (node.visible === false)
|
|
108
|
+
return;
|
|
109
|
+
if (viewportId !== undefined) {
|
|
110
|
+
if (node.excludeViewports.includes(viewportId))
|
|
111
|
+
return;
|
|
112
|
+
if (node.restrictViewports.length > 0 &&
|
|
113
|
+
!node.restrictViewports.includes(viewportId))
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if (filterCriteria) {
|
|
117
|
+
for (let i = 0; i < filterCriteria.length; i++) {
|
|
118
|
+
// if the filter criteria returns false, skip the intersection test
|
|
119
|
+
// the filter criteria per geometryData is then evaluated in the intersectionTest method
|
|
120
|
+
if (filterCriteria[i](node))
|
|
121
|
+
return this.intersectionTest(ray, node, geometryData, viewportId, rayCasterParams, filterCriteria);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
return this.intersectionTest(ray, node, geometryData, viewportId, rayCasterParams);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// #endregion Public Methods (2)
|
|
129
|
+
// #region Private Methods (2)
|
|
130
|
+
/**
|
|
131
|
+
* Gather all nodes that contain geometry data.
|
|
132
|
+
*/
|
|
133
|
+
gatherNodes() {
|
|
134
|
+
this._intersectNodes = [];
|
|
135
|
+
this._tree.root.traverse((node) => {
|
|
136
|
+
if (node.visible === false)
|
|
137
|
+
return;
|
|
138
|
+
if (node.intersectionTest === false)
|
|
139
|
+
return;
|
|
140
|
+
for (let i = 0; i < node.data.length; i++) {
|
|
141
|
+
if (node.data[i] instanceof viewer_shared_node_tree_1.GeometryData) {
|
|
142
|
+
const geometryData = node.data[i];
|
|
143
|
+
let tempNode = node;
|
|
144
|
+
let visible = true, restrictViewports = [], excludeViewports = [];
|
|
145
|
+
while (tempNode.parent) {
|
|
146
|
+
visible = tempNode.visible && visible;
|
|
147
|
+
restrictViewports = restrictViewports.concat(tempNode.restrictViewports);
|
|
148
|
+
excludeViewports = excludeViewports.concat(tempNode.excludeViewports);
|
|
149
|
+
tempNode = tempNode.parent;
|
|
150
|
+
}
|
|
151
|
+
this._intersectNodes.push({
|
|
152
|
+
node,
|
|
153
|
+
geometryData: {
|
|
154
|
+
[`${geometryData.id}_${geometryData.version}`]: geometryData,
|
|
155
|
+
},
|
|
156
|
+
visible,
|
|
157
|
+
restrictViewports: [...new Set(restrictViewports)],
|
|
158
|
+
excludeViewports: [...new Set(excludeViewports)],
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Do the intersection test with the ray and the node.
|
|
166
|
+
*
|
|
167
|
+
* @param ray the ray to test
|
|
168
|
+
* @param node the node to test
|
|
169
|
+
* @param geometryData the geometry data of the node
|
|
170
|
+
* @param viewportId the viewport id
|
|
171
|
+
* @returns
|
|
172
|
+
*/
|
|
173
|
+
intersectionTest(ray, node, geometryData, viewportId, rayCasterParams, filterCriteria) {
|
|
174
|
+
if (rayCasterParams)
|
|
175
|
+
this._raycaster.params = rayCasterParams;
|
|
176
|
+
this._raycaster.ray.direction.set(ray.direction[0], ray.direction[1], ray.direction[2]);
|
|
177
|
+
this._raycaster.ray.origin.set(ray.origin[0], ray.origin[1], ray.origin[2]);
|
|
178
|
+
const threeJsObject = node.convertedObject[viewportId];
|
|
179
|
+
if (threeJsObject) {
|
|
180
|
+
const intersectionThree = this._raycaster.intersectObject(threeJsObject);
|
|
181
|
+
if (intersectionThree.length === 0)
|
|
182
|
+
return;
|
|
183
|
+
let intersections = intersectionThree.map((i) => {
|
|
184
|
+
const intersectionDefinition = {
|
|
185
|
+
distance: i.distance,
|
|
186
|
+
point: [i.point.x, i.point.y, i.point.z],
|
|
187
|
+
node: node,
|
|
188
|
+
geometryData: geometryData[`${i.object.parent.SDid}_${i.object.parent.SDversion}`],
|
|
189
|
+
type: "RayTracingIntersection",
|
|
190
|
+
};
|
|
191
|
+
return intersectionDefinition;
|
|
192
|
+
});
|
|
193
|
+
if (filterCriteria) {
|
|
194
|
+
intersections = intersections.filter((i) => {
|
|
195
|
+
for (let j = 0; j < filterCriteria.length; j++)
|
|
196
|
+
if (filterCriteria[j](i.node, i.geometryData))
|
|
197
|
+
return true;
|
|
198
|
+
return false;
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
intersections.sort((a, b) => a.distance - b.distance);
|
|
202
|
+
return intersections;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
exports.IntersectionEngine = IntersectionEngine;
|
|
197
207
|
//# sourceMappingURL=IntersectionEngine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IntersectionEngine.js","sourceRoot":"","sources":["../../src/implementation/IntersectionEngine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"IntersectionEngine.js","sourceRoot":"","sources":["../../src/implementation/IntersectionEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
import { ITreeNode } from "@shapediver/viewer.shared.node-tree";
|
|
2
|
-
import { IBoxSelectionIntersection, IIntersectionFilter } from "@shapediver/viewer.shared.types";
|
|
3
|
-
import { vec2, vec3 } from "gl-matrix";
|
|
4
|
-
import { ISelectionBox } from "../interfaces/ISelectionBox";
|
|
5
|
-
export declare class SelectionBox implements ISelectionBox {
|
|
6
|
-
#private;
|
|
7
|
-
constructor(canvas: HTMLCanvasElement);
|
|
8
|
-
get coordinates(): {
|
|
9
|
-
start: {
|
|
10
|
-
x: number;
|
|
11
|
-
y: number;
|
|
12
|
-
};
|
|
13
|
-
end: {
|
|
14
|
-
x: number;
|
|
15
|
-
y: number;
|
|
16
|
-
};
|
|
17
|
-
} | undefined;
|
|
18
|
-
intersectObjects(nodes: ITreeNode[], filterCriteria: IIntersectionFilter[]): IBoxSelectionIntersection[];
|
|
19
|
-
/**
|
|
20
|
-
* Intersect drawing tool points with the selection box
|
|
21
|
-
* @param points Array of 3D points to test
|
|
22
|
-
* @returns Array of indices of points that are inside the selection box
|
|
23
|
-
*/
|
|
24
|
-
intersectPoints(points: vec3[]): number[];
|
|
25
|
-
onDown(event: PointerEvent, project: (p: vec3) => vec2): void;
|
|
26
|
-
onEnd(event: PointerEvent): void;
|
|
27
|
-
onMove(event: PointerEvent, insertionActive: boolean, removalActive: boolean): void;
|
|
28
|
-
reset(): void;
|
|
29
|
-
private updateSelectionBox;
|
|
30
|
-
}
|
|
1
|
+
import { ITreeNode } from "@shapediver/viewer.shared.node-tree";
|
|
2
|
+
import { IBoxSelectionIntersection, IIntersectionFilter } from "@shapediver/viewer.shared.types";
|
|
3
|
+
import { vec2, vec3 } from "gl-matrix";
|
|
4
|
+
import { ISelectionBox } from "../interfaces/ISelectionBox";
|
|
5
|
+
export declare class SelectionBox implements ISelectionBox {
|
|
6
|
+
#private;
|
|
7
|
+
constructor(canvas: HTMLCanvasElement);
|
|
8
|
+
get coordinates(): {
|
|
9
|
+
start: {
|
|
10
|
+
x: number;
|
|
11
|
+
y: number;
|
|
12
|
+
};
|
|
13
|
+
end: {
|
|
14
|
+
x: number;
|
|
15
|
+
y: number;
|
|
16
|
+
};
|
|
17
|
+
} | undefined;
|
|
18
|
+
intersectObjects(nodes: ITreeNode[], filterCriteria: IIntersectionFilter[]): IBoxSelectionIntersection[];
|
|
19
|
+
/**
|
|
20
|
+
* Intersect drawing tool points with the selection box
|
|
21
|
+
* @param points Array of 3D points to test
|
|
22
|
+
* @returns Array of indices of points that are inside the selection box
|
|
23
|
+
*/
|
|
24
|
+
intersectPoints(points: vec3[]): number[];
|
|
25
|
+
onDown(event: PointerEvent, project: (p: vec3) => vec2): void;
|
|
26
|
+
onEnd(event: PointerEvent): void;
|
|
27
|
+
onMove(event: PointerEvent, insertionActive: boolean, removalActive: boolean): void;
|
|
28
|
+
reset(): void;
|
|
29
|
+
private updateSelectionBox;
|
|
30
|
+
}
|
|
31
31
|
//# sourceMappingURL=SelectionBox.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionBox.d.ts","sourceRoot":"","sources":["../../src/implementation/SelectionBox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,qCAAqC,CAAC;AAC9D,OAAO,EACN,yBAAyB,EACzB,mBAAmB,EACnB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAC,IAAI,EAAE,IAAI,EAAC,MAAM,WAAW,CAAC;AAErC,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAE1D,qBAAa,YAAa,YAAW,aAAa;;gBASrC,MAAM,EAAE,iBAAiB;IAIrC,IAAW,WAAW
|
|
1
|
+
{"version":3,"file":"SelectionBox.d.ts","sourceRoot":"","sources":["../../src/implementation/SelectionBox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,qCAAqC,CAAC;AAC9D,OAAO,EACN,yBAAyB,EACzB,mBAAmB,EACnB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAC,IAAI,EAAE,IAAI,EAAC,MAAM,WAAW,CAAC;AAErC,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAE1D,qBAAa,YAAa,YAAW,aAAa;;gBASrC,MAAM,EAAE,iBAAiB;IAIrC,IAAW,WAAW;eAVd;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAC;aACxB;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAC;kBAW3B;IAEM,gBAAgB,CACtB,KAAK,EAAE,SAAS,EAAE,EAClB,cAAc,EAAE,mBAAmB,EAAE,GACnC,yBAAyB,EAAE;IA4F9B;;;;OAIG;IACI,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE;IAsCzC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI;IAiB7D,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAWhC,MAAM,CACZ,KAAK,EAAE,YAAY,EACnB,eAAe,EAAE,OAAO,EACxB,aAAa,EAAE,OAAO,GACpB,IAAI;IAYA,KAAK,IAAI,IAAI;IAMpB,OAAO,CAAC,kBAAkB;CAsD1B"}
|
|
@@ -1,211 +1,211 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
6
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
-
};
|
|
8
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
-
};
|
|
13
|
-
var _SelectionBox_canvas, _SelectionBox_coordinates, _SelectionBox_htmlElement, _SelectionBox_project;
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.SelectionBox = void 0;
|
|
16
|
-
const gl_matrix_1 = require("gl-matrix");
|
|
17
|
-
class SelectionBox {
|
|
18
|
-
constructor(canvas) {
|
|
19
|
-
_SelectionBox_canvas.set(this, void 0);
|
|
20
|
-
_SelectionBox_coordinates.set(this, void 0);
|
|
21
|
-
_SelectionBox_htmlElement.set(this, void 0);
|
|
22
|
-
_SelectionBox_project.set(this, void 0);
|
|
23
|
-
__classPrivateFieldSet(this, _SelectionBox_canvas, canvas, "f");
|
|
24
|
-
}
|
|
25
|
-
get coordinates() {
|
|
26
|
-
return __classPrivateFieldGet(this, _SelectionBox_coordinates, "f");
|
|
27
|
-
}
|
|
28
|
-
intersectObjects(nodes, filterCriteria) {
|
|
29
|
-
if (!__classPrivateFieldGet(this, _SelectionBox_coordinates, "f"))
|
|
30
|
-
return [];
|
|
31
|
-
const minX = Math.min(__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").start.x, __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end.x);
|
|
32
|
-
const maxX = Math.max(__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").start.x, __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end.x);
|
|
33
|
-
const minY = Math.min(__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").start.y, __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end.y);
|
|
34
|
-
const maxY = Math.max(__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").start.y, __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end.y);
|
|
35
|
-
// check if the selection is from the right or left side
|
|
36
|
-
const isRightSelection = __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").start.x < __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end.x;
|
|
37
|
-
// for all nodes that can be intersected
|
|
38
|
-
// check if the bounding sphere center is within the selection box
|
|
39
|
-
const selectedObjects = [];
|
|
40
|
-
nodes.forEach((i) => {
|
|
41
|
-
const shouldTest = filterCriteria
|
|
42
|
-
? filterCriteria.some((fc) => fc(i))
|
|
43
|
-
: true;
|
|
44
|
-
if (!shouldTest)
|
|
45
|
-
return;
|
|
46
|
-
// for the selection from the right side, all points of the bounding box have to be included
|
|
47
|
-
let isIncluded = false;
|
|
48
|
-
let breakLoop = false;
|
|
49
|
-
for (let xPoint of [i.boundingBox.min[0], i.boundingBox.max[0]]) {
|
|
50
|
-
for (let yPoint of [
|
|
51
|
-
i.boundingBox.min[1],
|
|
52
|
-
i.boundingBox.max[1],
|
|
53
|
-
]) {
|
|
54
|
-
for (let zPoint of [
|
|
55
|
-
i.boundingBox.min[2],
|
|
56
|
-
i.boundingBox.max[2],
|
|
57
|
-
]) {
|
|
58
|
-
const projection = __classPrivateFieldGet(this, _SelectionBox_project, "f").call(this, gl_matrix_1.vec3.fromValues(xPoint, yPoint, zPoint));
|
|
59
|
-
if (isRightSelection) {
|
|
60
|
-
if (!(projection[0] >= minX &&
|
|
61
|
-
projection[0] <= maxX &&
|
|
62
|
-
projection[1] >= minY &&
|
|
63
|
-
projection[1] <= maxY)) {
|
|
64
|
-
isIncluded = false;
|
|
65
|
-
breakLoop = true;
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
isIncluded = true;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
if (projection[0] >= minX &&
|
|
73
|
-
projection[0] <= maxX &&
|
|
74
|
-
projection[1] >= minY &&
|
|
75
|
-
projection[1] <= maxY) {
|
|
76
|
-
isIncluded = true;
|
|
77
|
-
breakLoop = true;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
if (breakLoop)
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
if (breakLoop)
|
|
84
|
-
break;
|
|
85
|
-
}
|
|
86
|
-
if (breakLoop)
|
|
87
|
-
break;
|
|
88
|
-
}
|
|
89
|
-
if (isIncluded) {
|
|
90
|
-
selectedObjects.push({
|
|
91
|
-
node: i,
|
|
92
|
-
type: "BoxSelectionIntersection",
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
return selectedObjects;
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Intersect drawing tool points with the selection box
|
|
100
|
-
* @param points Array of 3D points to test
|
|
101
|
-
* @returns Array of indices of points that are inside the selection box
|
|
102
|
-
*/
|
|
103
|
-
intersectPoints(points) {
|
|
104
|
-
if (!__classPrivateFieldGet(this, _SelectionBox_coordinates, "f") || !__classPrivateFieldGet(this, _SelectionBox_project, "f"))
|
|
105
|
-
return [];
|
|
106
|
-
const minX = Math.min(__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").start.x, __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end.x);
|
|
107
|
-
const maxX = Math.max(__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").start.x, __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end.x);
|
|
108
|
-
const minY = Math.min(__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").start.y, __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end.y);
|
|
109
|
-
const maxY = Math.max(__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").start.y, __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end.y);
|
|
110
|
-
const selectedPointIndices = [];
|
|
111
|
-
points.forEach((point, index) => {
|
|
112
|
-
const projection = __classPrivateFieldGet(this, _SelectionBox_project, "f").call(this, point);
|
|
113
|
-
if (projection[0] >= minX &&
|
|
114
|
-
projection[0] <= maxX &&
|
|
115
|
-
projection[1] >= minY &&
|
|
116
|
-
projection[1] <= maxY) {
|
|
117
|
-
selectedPointIndices.push(index);
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
return selectedPointIndices;
|
|
121
|
-
}
|
|
122
|
-
onDown(event, project) {
|
|
123
|
-
__classPrivateFieldSet(this, _SelectionBox_project, project, "f");
|
|
124
|
-
const rect = __classPrivateFieldGet(this, _SelectionBox_canvas, "f").getBoundingClientRect();
|
|
125
|
-
const x = ((event.clientX - rect.left) / rect.width) * 2 - 1;
|
|
126
|
-
const y = -((event.clientY - rect.top) / rect.height) * 2 + 1;
|
|
127
|
-
__classPrivateFieldSet(this, _SelectionBox_coordinates, {
|
|
128
|
-
start: {
|
|
129
|
-
x: x,
|
|
130
|
-
y: y,
|
|
131
|
-
},
|
|
132
|
-
end: {
|
|
133
|
-
x: x,
|
|
134
|
-
y: y,
|
|
135
|
-
},
|
|
136
|
-
}, "f");
|
|
137
|
-
}
|
|
138
|
-
onEnd(event) {
|
|
139
|
-
const rect = __classPrivateFieldGet(this, _SelectionBox_canvas, "f").getBoundingClientRect();
|
|
140
|
-
const x = ((event.clientX - rect.left) / rect.width) * 2 - 1;
|
|
141
|
-
const y = -((event.clientY - rect.top) / rect.height) * 2 + 1;
|
|
142
|
-
__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end = {
|
|
143
|
-
x: x,
|
|
144
|
-
y: y,
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
onMove(event, insertionActive, removalActive) {
|
|
148
|
-
// update box selection
|
|
149
|
-
const rect = __classPrivateFieldGet(this, _SelectionBox_canvas, "f").getBoundingClientRect();
|
|
150
|
-
const x = ((event.clientX - rect.left) / rect.width) * 2 - 1;
|
|
151
|
-
const y = -((event.clientY - rect.top) / rect.height) * 2 + 1;
|
|
152
|
-
__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end = {
|
|
153
|
-
x: x,
|
|
154
|
-
y: y,
|
|
155
|
-
};
|
|
156
|
-
this.updateSelectionBox(insertionActive, removalActive);
|
|
157
|
-
}
|
|
158
|
-
reset() {
|
|
159
|
-
var _a;
|
|
160
|
-
(_a = __classPrivateFieldGet(this, _SelectionBox_htmlElement, "f")) === null || _a === void 0 ? void 0 : _a.remove();
|
|
161
|
-
__classPrivateFieldSet(this, _SelectionBox_htmlElement, undefined, "f");
|
|
162
|
-
__classPrivateFieldSet(this, _SelectionBox_coordinates, undefined, "f");
|
|
163
|
-
}
|
|
164
|
-
updateSelectionBox(insertionActive, removalActive) {
|
|
165
|
-
if (!__classPrivateFieldGet(this, _SelectionBox_coordinates, "f"))
|
|
166
|
-
return;
|
|
167
|
-
let color = "0, 0, 255"; // blue
|
|
168
|
-
if (insertionActive && !removalActive) {
|
|
169
|
-
color = "0, 255, 0"; // green
|
|
170
|
-
}
|
|
171
|
-
else if (!insertionActive && removalActive) {
|
|
172
|
-
color = "255, 0, 0"; // red
|
|
173
|
-
}
|
|
174
|
-
if (!__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f")) {
|
|
175
|
-
// create selection box div
|
|
176
|
-
__classPrivateFieldSet(this, _SelectionBox_htmlElement, document.createElement("div"), "f");
|
|
177
|
-
__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.position = "absolute";
|
|
178
|
-
__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.border = `1px solid rgba(${color}, 0.8)`;
|
|
179
|
-
__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.backgroundColor = `rgba(${color}, 0.1)`;
|
|
180
|
-
__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.pointerEvents = "none";
|
|
181
|
-
__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.zIndex = "9999"; // Ensure it's on top
|
|
182
|
-
document.body.appendChild(__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f"));
|
|
183
|
-
}
|
|
184
|
-
else {
|
|
185
|
-
// check if the color needs to be updated
|
|
186
|
-
const currentBorderColor = __classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.border;
|
|
187
|
-
const desiredBorderColor = `1px solid rgba(${color}, 0.8)`;
|
|
188
|
-
if (currentBorderColor !== desiredBorderColor) {
|
|
189
|
-
__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.border = desiredBorderColor;
|
|
190
|
-
__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.backgroundColor = `rgba(${color}, 0.1)`;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
const rect = __classPrivateFieldGet(this, _SelectionBox_canvas, "f").getBoundingClientRect();
|
|
194
|
-
// Convert normalized coordinates back to document coordinates
|
|
195
|
-
const convertedStartX = ((__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").start.x + 1) / 2) * rect.width + rect.left;
|
|
196
|
-
const convertedStartY = ((1 - __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").start.y) / 2) * rect.height + rect.top;
|
|
197
|
-
const convertedEndX = ((__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end.x + 1) / 2) * rect.width + rect.left;
|
|
198
|
-
const convertedEndY = ((1 - __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end.y) / 2) * rect.height + rect.top;
|
|
199
|
-
const x = Math.min(convertedStartX, convertedEndX);
|
|
200
|
-
const y = Math.min(convertedStartY, convertedEndY);
|
|
201
|
-
const width = Math.abs(convertedEndX - convertedStartX);
|
|
202
|
-
const height = Math.abs(convertedEndY - convertedStartY);
|
|
203
|
-
__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.left = `${x}px`;
|
|
204
|
-
__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.top = `${y}px`;
|
|
205
|
-
__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.width = `${width}px`;
|
|
206
|
-
__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.height = `${height}px`;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
exports.SelectionBox = SelectionBox;
|
|
210
|
-
_SelectionBox_canvas = new WeakMap(), _SelectionBox_coordinates = new WeakMap(), _SelectionBox_htmlElement = new WeakMap(), _SelectionBox_project = new WeakMap();
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
6
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
+
};
|
|
8
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
+
};
|
|
13
|
+
var _SelectionBox_canvas, _SelectionBox_coordinates, _SelectionBox_htmlElement, _SelectionBox_project;
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.SelectionBox = void 0;
|
|
16
|
+
const gl_matrix_1 = require("gl-matrix");
|
|
17
|
+
class SelectionBox {
|
|
18
|
+
constructor(canvas) {
|
|
19
|
+
_SelectionBox_canvas.set(this, void 0);
|
|
20
|
+
_SelectionBox_coordinates.set(this, void 0);
|
|
21
|
+
_SelectionBox_htmlElement.set(this, void 0);
|
|
22
|
+
_SelectionBox_project.set(this, void 0);
|
|
23
|
+
__classPrivateFieldSet(this, _SelectionBox_canvas, canvas, "f");
|
|
24
|
+
}
|
|
25
|
+
get coordinates() {
|
|
26
|
+
return __classPrivateFieldGet(this, _SelectionBox_coordinates, "f");
|
|
27
|
+
}
|
|
28
|
+
intersectObjects(nodes, filterCriteria) {
|
|
29
|
+
if (!__classPrivateFieldGet(this, _SelectionBox_coordinates, "f"))
|
|
30
|
+
return [];
|
|
31
|
+
const minX = Math.min(__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").start.x, __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end.x);
|
|
32
|
+
const maxX = Math.max(__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").start.x, __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end.x);
|
|
33
|
+
const minY = Math.min(__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").start.y, __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end.y);
|
|
34
|
+
const maxY = Math.max(__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").start.y, __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end.y);
|
|
35
|
+
// check if the selection is from the right or left side
|
|
36
|
+
const isRightSelection = __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").start.x < __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end.x;
|
|
37
|
+
// for all nodes that can be intersected
|
|
38
|
+
// check if the bounding sphere center is within the selection box
|
|
39
|
+
const selectedObjects = [];
|
|
40
|
+
nodes.forEach((i) => {
|
|
41
|
+
const shouldTest = filterCriteria
|
|
42
|
+
? filterCriteria.some((fc) => fc(i))
|
|
43
|
+
: true;
|
|
44
|
+
if (!shouldTest)
|
|
45
|
+
return;
|
|
46
|
+
// for the selection from the right side, all points of the bounding box have to be included
|
|
47
|
+
let isIncluded = false;
|
|
48
|
+
let breakLoop = false;
|
|
49
|
+
for (let xPoint of [i.boundingBox.min[0], i.boundingBox.max[0]]) {
|
|
50
|
+
for (let yPoint of [
|
|
51
|
+
i.boundingBox.min[1],
|
|
52
|
+
i.boundingBox.max[1],
|
|
53
|
+
]) {
|
|
54
|
+
for (let zPoint of [
|
|
55
|
+
i.boundingBox.min[2],
|
|
56
|
+
i.boundingBox.max[2],
|
|
57
|
+
]) {
|
|
58
|
+
const projection = __classPrivateFieldGet(this, _SelectionBox_project, "f").call(this, gl_matrix_1.vec3.fromValues(xPoint, yPoint, zPoint));
|
|
59
|
+
if (isRightSelection) {
|
|
60
|
+
if (!(projection[0] >= minX &&
|
|
61
|
+
projection[0] <= maxX &&
|
|
62
|
+
projection[1] >= minY &&
|
|
63
|
+
projection[1] <= maxY)) {
|
|
64
|
+
isIncluded = false;
|
|
65
|
+
breakLoop = true;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
isIncluded = true;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
if (projection[0] >= minX &&
|
|
73
|
+
projection[0] <= maxX &&
|
|
74
|
+
projection[1] >= minY &&
|
|
75
|
+
projection[1] <= maxY) {
|
|
76
|
+
isIncluded = true;
|
|
77
|
+
breakLoop = true;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (breakLoop)
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
if (breakLoop)
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
if (breakLoop)
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
if (isIncluded) {
|
|
90
|
+
selectedObjects.push({
|
|
91
|
+
node: i,
|
|
92
|
+
type: "BoxSelectionIntersection",
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
return selectedObjects;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Intersect drawing tool points with the selection box
|
|
100
|
+
* @param points Array of 3D points to test
|
|
101
|
+
* @returns Array of indices of points that are inside the selection box
|
|
102
|
+
*/
|
|
103
|
+
intersectPoints(points) {
|
|
104
|
+
if (!__classPrivateFieldGet(this, _SelectionBox_coordinates, "f") || !__classPrivateFieldGet(this, _SelectionBox_project, "f"))
|
|
105
|
+
return [];
|
|
106
|
+
const minX = Math.min(__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").start.x, __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end.x);
|
|
107
|
+
const maxX = Math.max(__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").start.x, __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end.x);
|
|
108
|
+
const minY = Math.min(__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").start.y, __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end.y);
|
|
109
|
+
const maxY = Math.max(__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").start.y, __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end.y);
|
|
110
|
+
const selectedPointIndices = [];
|
|
111
|
+
points.forEach((point, index) => {
|
|
112
|
+
const projection = __classPrivateFieldGet(this, _SelectionBox_project, "f").call(this, point);
|
|
113
|
+
if (projection[0] >= minX &&
|
|
114
|
+
projection[0] <= maxX &&
|
|
115
|
+
projection[1] >= minY &&
|
|
116
|
+
projection[1] <= maxY) {
|
|
117
|
+
selectedPointIndices.push(index);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
return selectedPointIndices;
|
|
121
|
+
}
|
|
122
|
+
onDown(event, project) {
|
|
123
|
+
__classPrivateFieldSet(this, _SelectionBox_project, project, "f");
|
|
124
|
+
const rect = __classPrivateFieldGet(this, _SelectionBox_canvas, "f").getBoundingClientRect();
|
|
125
|
+
const x = ((event.clientX - rect.left) / rect.width) * 2 - 1;
|
|
126
|
+
const y = -((event.clientY - rect.top) / rect.height) * 2 + 1;
|
|
127
|
+
__classPrivateFieldSet(this, _SelectionBox_coordinates, {
|
|
128
|
+
start: {
|
|
129
|
+
x: x,
|
|
130
|
+
y: y,
|
|
131
|
+
},
|
|
132
|
+
end: {
|
|
133
|
+
x: x,
|
|
134
|
+
y: y,
|
|
135
|
+
},
|
|
136
|
+
}, "f");
|
|
137
|
+
}
|
|
138
|
+
onEnd(event) {
|
|
139
|
+
const rect = __classPrivateFieldGet(this, _SelectionBox_canvas, "f").getBoundingClientRect();
|
|
140
|
+
const x = ((event.clientX - rect.left) / rect.width) * 2 - 1;
|
|
141
|
+
const y = -((event.clientY - rect.top) / rect.height) * 2 + 1;
|
|
142
|
+
__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end = {
|
|
143
|
+
x: x,
|
|
144
|
+
y: y,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
onMove(event, insertionActive, removalActive) {
|
|
148
|
+
// update box selection
|
|
149
|
+
const rect = __classPrivateFieldGet(this, _SelectionBox_canvas, "f").getBoundingClientRect();
|
|
150
|
+
const x = ((event.clientX - rect.left) / rect.width) * 2 - 1;
|
|
151
|
+
const y = -((event.clientY - rect.top) / rect.height) * 2 + 1;
|
|
152
|
+
__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end = {
|
|
153
|
+
x: x,
|
|
154
|
+
y: y,
|
|
155
|
+
};
|
|
156
|
+
this.updateSelectionBox(insertionActive, removalActive);
|
|
157
|
+
}
|
|
158
|
+
reset() {
|
|
159
|
+
var _a;
|
|
160
|
+
(_a = __classPrivateFieldGet(this, _SelectionBox_htmlElement, "f")) === null || _a === void 0 ? void 0 : _a.remove();
|
|
161
|
+
__classPrivateFieldSet(this, _SelectionBox_htmlElement, undefined, "f");
|
|
162
|
+
__classPrivateFieldSet(this, _SelectionBox_coordinates, undefined, "f");
|
|
163
|
+
}
|
|
164
|
+
updateSelectionBox(insertionActive, removalActive) {
|
|
165
|
+
if (!__classPrivateFieldGet(this, _SelectionBox_coordinates, "f"))
|
|
166
|
+
return;
|
|
167
|
+
let color = "0, 0, 255"; // blue
|
|
168
|
+
if (insertionActive && !removalActive) {
|
|
169
|
+
color = "0, 255, 0"; // green
|
|
170
|
+
}
|
|
171
|
+
else if (!insertionActive && removalActive) {
|
|
172
|
+
color = "255, 0, 0"; // red
|
|
173
|
+
}
|
|
174
|
+
if (!__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f")) {
|
|
175
|
+
// create selection box div
|
|
176
|
+
__classPrivateFieldSet(this, _SelectionBox_htmlElement, document.createElement("div"), "f");
|
|
177
|
+
__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.position = "absolute";
|
|
178
|
+
__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.border = `1px solid rgba(${color}, 0.8)`;
|
|
179
|
+
__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.backgroundColor = `rgba(${color}, 0.1)`;
|
|
180
|
+
__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.pointerEvents = "none";
|
|
181
|
+
__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.zIndex = "9999"; // Ensure it's on top
|
|
182
|
+
document.body.appendChild(__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f"));
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
// check if the color needs to be updated
|
|
186
|
+
const currentBorderColor = __classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.border;
|
|
187
|
+
const desiredBorderColor = `1px solid rgba(${color}, 0.8)`;
|
|
188
|
+
if (currentBorderColor !== desiredBorderColor) {
|
|
189
|
+
__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.border = desiredBorderColor;
|
|
190
|
+
__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.backgroundColor = `rgba(${color}, 0.1)`;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
const rect = __classPrivateFieldGet(this, _SelectionBox_canvas, "f").getBoundingClientRect();
|
|
194
|
+
// Convert normalized coordinates back to document coordinates
|
|
195
|
+
const convertedStartX = ((__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").start.x + 1) / 2) * rect.width + rect.left;
|
|
196
|
+
const convertedStartY = ((1 - __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").start.y) / 2) * rect.height + rect.top;
|
|
197
|
+
const convertedEndX = ((__classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end.x + 1) / 2) * rect.width + rect.left;
|
|
198
|
+
const convertedEndY = ((1 - __classPrivateFieldGet(this, _SelectionBox_coordinates, "f").end.y) / 2) * rect.height + rect.top;
|
|
199
|
+
const x = Math.min(convertedStartX, convertedEndX);
|
|
200
|
+
const y = Math.min(convertedStartY, convertedEndY);
|
|
201
|
+
const width = Math.abs(convertedEndX - convertedStartX);
|
|
202
|
+
const height = Math.abs(convertedEndY - convertedStartY);
|
|
203
|
+
__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.left = `${x}px`;
|
|
204
|
+
__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.top = `${y}px`;
|
|
205
|
+
__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.width = `${width}px`;
|
|
206
|
+
__classPrivateFieldGet(this, _SelectionBox_htmlElement, "f").style.height = `${height}px`;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
exports.SelectionBox = SelectionBox;
|
|
210
|
+
_SelectionBox_canvas = new WeakMap(), _SelectionBox_coordinates = new WeakMap(), _SelectionBox_htmlElement = new WeakMap(), _SelectionBox_project = new WeakMap();
|
|
211
211
|
//# sourceMappingURL=SelectionBox.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionBox.js","sourceRoot":"","sources":["../../src/implementation/SelectionBox.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAMA,yCAAqC;AAIrC,MAAa,YAAY;IASxB,YAAY,MAAyB;QARrC,uCAA2B;QAC3B,4CAGE;QACF,4CAA8B;QAC9B,wCAA6B;QAG5B,uBAAA,IAAI,wBAAW,MAAM,MAAA,CAAC;IACvB,CAAC;IAED,IAAW,WAAW;QACrB,OAAO,uBAAA,IAAI,iCAAa,CAAC;IAC1B,CAAC;IAEM,gBAAgB,CACtB,KAAkB,EAClB,cAAqC;QAErC,IAAI,CAAC,uBAAA,IAAI,iCAAa;YAAE,OAAO,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CACpB,uBAAA,IAAI,iCAAa,CAAC,KAAK,CAAC,CAAC,EACzB,uBAAA,IAAI,iCAAa,CAAC,GAAG,CAAC,CAAC,CACvB,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CACpB,uBAAA,IAAI,iCAAa,CAAC,KAAK,CAAC,CAAC,EACzB,uBAAA,IAAI,iCAAa,CAAC,GAAG,CAAC,CAAC,CACvB,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CACpB,uBAAA,IAAI,iCAAa,CAAC,KAAK,CAAC,CAAC,EACzB,uBAAA,IAAI,iCAAa,CAAC,GAAG,CAAC,CAAC,CACvB,CAAC;QAEF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CACpB,uBAAA,IAAI,iCAAa,CAAC,KAAK,CAAC,CAAC,EACzB,uBAAA,IAAI,iCAAa,CAAC,GAAG,CAAC,CAAC,CACvB,CAAC;QAEF,wDAAwD;QACxD,MAAM,gBAAgB,GACrB,uBAAA,IAAI,iCAAa,CAAC,KAAK,CAAC,CAAC,GAAG,uBAAA,IAAI,iCAAa,CAAC,GAAG,CAAC,CAAC,CAAC;QAErD,wCAAwC;QACxC,kEAAkE;QAClE,MAAM,eAAe,GAAgC,EAAE,CAAC;QACxD,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACnB,MAAM,UAAU,GAAG,cAAc;gBAChC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACpC,CAAC,CAAC,IAAI,CAAC;YACR,IAAI,CAAC,UAAU;gBAAE,OAAO;YAExB,4FAA4F;YAC5F,IAAI,UAAU,GAAG,KAAK,CAAC;YACvB,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,KAAK,IAAI,MAAM,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"SelectionBox.js","sourceRoot":"","sources":["../../src/implementation/SelectionBox.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { RaycasterParameters } from "three";
|
|
2
|
-
import { IntersectionEngine } from "./implementation/IntersectionEngine";
|
|
3
|
-
import { SelectionBox } from "./implementation/SelectionBox";
|
|
4
|
-
import { IIntersectionEngine } from "./interfaces/IIntersectionEngine";
|
|
5
|
-
import { ISelectionBox } from "./interfaces/ISelectionBox";
|
|
6
|
-
export { IIntersectionEngine, ISelectionBox, RaycasterParameters };
|
|
7
|
-
export { IntersectionEngine, SelectionBox };
|
|
1
|
+
import { RaycasterParameters } from "three";
|
|
2
|
+
import { IntersectionEngine } from "./implementation/IntersectionEngine";
|
|
3
|
+
import { SelectionBox } from "./implementation/SelectionBox";
|
|
4
|
+
import { IIntersectionEngine } from "./interfaces/IIntersectionEngine";
|
|
5
|
+
import { ISelectionBox } from "./interfaces/ISelectionBox";
|
|
6
|
+
export { IIntersectionEngine, ISelectionBox, RaycasterParameters };
|
|
7
|
+
export { IntersectionEngine, SelectionBox };
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SelectionBox = exports.IntersectionEngine = void 0;
|
|
4
|
-
const IntersectionEngine_1 = require("./implementation/IntersectionEngine");
|
|
5
|
-
Object.defineProperty(exports, "IntersectionEngine", { enumerable: true, get: function () { return IntersectionEngine_1.IntersectionEngine; } });
|
|
6
|
-
const SelectionBox_1 = require("./implementation/SelectionBox");
|
|
7
|
-
Object.defineProperty(exports, "SelectionBox", { enumerable: true, get: function () { return SelectionBox_1.SelectionBox; } });
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SelectionBox = exports.IntersectionEngine = void 0;
|
|
4
|
+
const IntersectionEngine_1 = require("./implementation/IntersectionEngine");
|
|
5
|
+
Object.defineProperty(exports, "IntersectionEngine", { enumerable: true, get: function () { return IntersectionEngine_1.IntersectionEngine; } });
|
|
6
|
+
const SelectionBox_1 = require("./implementation/SelectionBox");
|
|
7
|
+
Object.defineProperty(exports, "SelectionBox", { enumerable: true, get: function () { return SelectionBox_1.SelectionBox; } });
|
|
8
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { IIntersectionDefinition, IIntersectionFilter, IRay } from "@shapediver/viewer.shared.types";
|
|
2
|
-
import * as THREE from "three";
|
|
3
|
-
import { SelectionBox } from "../implementation/SelectionBox";
|
|
4
|
-
export interface IIntersectionEngine {
|
|
5
|
-
intersect(ray: IRay, viewportId: string, filterCriteria?: IIntersectionFilter[], options?: {
|
|
6
|
-
rayCasterParams?: THREE.RaycasterParameters;
|
|
7
|
-
selectionBox?: SelectionBox;
|
|
8
|
-
}): IIntersectionDefinition[];
|
|
9
|
-
}
|
|
1
|
+
import { IIntersectionDefinition, IIntersectionFilter, IRay } from "@shapediver/viewer.shared.types";
|
|
2
|
+
import * as THREE from "three";
|
|
3
|
+
import { SelectionBox } from "../implementation/SelectionBox";
|
|
4
|
+
export interface IIntersectionEngine {
|
|
5
|
+
intersect(ray: IRay, viewportId: string, filterCriteria?: IIntersectionFilter[], options?: {
|
|
6
|
+
rayCasterParams?: THREE.RaycasterParameters;
|
|
7
|
+
selectionBox?: SelectionBox;
|
|
8
|
+
}): IIntersectionDefinition[];
|
|
9
|
+
}
|
|
10
10
|
//# sourceMappingURL=IIntersectionEngine.d.ts.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
//# sourceMappingURL=IIntersectionEngine.js.map
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { ITreeNode } from "@shapediver/viewer.shared.node-tree";
|
|
2
|
-
import { IBoxSelectionIntersection, IIntersectionFilter } from "@shapediver/viewer.shared.types";
|
|
3
|
-
import { vec2, vec3 } from "gl-matrix";
|
|
4
|
-
export interface ISelectionBox {
|
|
5
|
-
readonly coordinates?: {
|
|
6
|
-
start: {
|
|
7
|
-
x: number;
|
|
8
|
-
y: number;
|
|
9
|
-
};
|
|
10
|
-
end: {
|
|
11
|
-
x: number;
|
|
12
|
-
y: number;
|
|
13
|
-
};
|
|
14
|
-
};
|
|
15
|
-
intersectObjects(nodes: ITreeNode[], filterCriteria: IIntersectionFilter[]): IBoxSelectionIntersection[];
|
|
16
|
-
intersectPoints(points: vec3[]): number[];
|
|
17
|
-
onDown(event: PointerEvent, project: (p: vec3) => vec2): void;
|
|
18
|
-
onEnd(event: PointerEvent): void;
|
|
19
|
-
onMove(event: PointerEvent, insertionActive: boolean, removalActive: boolean): void;
|
|
20
|
-
reset(): void;
|
|
21
|
-
}
|
|
1
|
+
import { ITreeNode } from "@shapediver/viewer.shared.node-tree";
|
|
2
|
+
import { IBoxSelectionIntersection, IIntersectionFilter } from "@shapediver/viewer.shared.types";
|
|
3
|
+
import { vec2, vec3 } from "gl-matrix";
|
|
4
|
+
export interface ISelectionBox {
|
|
5
|
+
readonly coordinates?: {
|
|
6
|
+
start: {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
};
|
|
10
|
+
end: {
|
|
11
|
+
x: number;
|
|
12
|
+
y: number;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
intersectObjects(nodes: ITreeNode[], filterCriteria: IIntersectionFilter[]): IBoxSelectionIntersection[];
|
|
16
|
+
intersectPoints(points: vec3[]): number[];
|
|
17
|
+
onDown(event: PointerEvent, project: (p: vec3) => vec2): void;
|
|
18
|
+
onEnd(event: PointerEvent): void;
|
|
19
|
+
onMove(event: PointerEvent, insertionActive: boolean, removalActive: boolean): void;
|
|
20
|
+
reset(): void;
|
|
21
|
+
}
|
|
22
22
|
//# sourceMappingURL=ISelectionBox.d.ts.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
//# sourceMappingURL=ISelectionBox.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shapediver/viewer.rendering-engine.intersection-engine",
|
|
3
|
-
"version": "3.16.
|
|
3
|
+
"version": "3.16.10",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"author": "Michael Oppitz <michael@shapediver.com>",
|
|
@@ -38,15 +38,15 @@
|
|
|
38
38
|
"testEnvironment": "node"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@shapediver/viewer.rendering-engine.rendering-engine": "3.16.
|
|
42
|
-
"@shapediver/viewer.shared.math": "3.16.
|
|
43
|
-
"@shapediver/viewer.shared.node-tree": "3.16.
|
|
44
|
-
"@shapediver/viewer.shared.services": "3.16.
|
|
45
|
-
"@shapediver/viewer.shared.types": "3.16.
|
|
41
|
+
"@shapediver/viewer.rendering-engine.rendering-engine": "3.16.10",
|
|
42
|
+
"@shapediver/viewer.shared.math": "3.16.10",
|
|
43
|
+
"@shapediver/viewer.shared.node-tree": "3.16.10",
|
|
44
|
+
"@shapediver/viewer.shared.services": "3.16.10",
|
|
45
|
+
"@shapediver/viewer.shared.types": "3.16.10",
|
|
46
46
|
"@types/three": "0.162.0",
|
|
47
47
|
"detect-it": "4.0.1",
|
|
48
|
-
"gl-matrix": "3.
|
|
48
|
+
"gl-matrix": "3.4.4",
|
|
49
49
|
"three": "0.162.0"
|
|
50
50
|
},
|
|
51
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "4f56737c5446d23eeb2d55770b88896da115e430"
|
|
52
52
|
}
|