@shapediver/viewer.rendering-engine.intersection-engine 1.15.5 → 2.0.0

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.
@@ -1,11 +1,11 @@
1
- import { TreeNode } from "@shapediver/viewer.shared.node-tree";
1
+ import { ITreeNode } from "@shapediver/viewer.shared.node-tree";
2
2
  import { IIntersection } from "../interfaces/IIntersection";
3
3
  import { IIntersectionEngine } from "../interfaces/IIntersectionEngine";
4
4
  import { IIntersectionFilter } from "../interfaces/IIntersectionFilter";
5
5
  import { IRay } from "../interfaces/IRay";
6
6
  export declare class IntersectionEngine implements IIntersectionEngine {
7
7
  private readonly _tree;
8
- intersect(ray: IRay, filterCriteria?: IIntersectionFilter[], root?: TreeNode, viewerID?: string): IIntersection[];
8
+ intersect(ray: IRay, filterCriteria?: IIntersectionFilter[], root?: ITreeNode, viewerID?: string): IIntersection[];
9
9
  private checkIntersection;
10
10
  private checkLineIntersection;
11
11
  private checkPointIntersection;
@@ -1 +1 @@
1
- {"version":3,"file":"IntersectionEngine.d.ts","sourceRoot":"","sources":["../../src/implementation/IntersectionEngine.ts"],"names":[],"mappings":"AAGA,OAAO,EAAQ,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAG1C,qBACa,kBAAmB,YAAW,mBAAmB;IAC1D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuC;IAE7D,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,cAAc,GAAE,mBAAmB,EAAO,EAAE,IAAI,GAAE,QAA0B,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE;IA8BtI,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,qBAAqB;IA4C7B,OAAO,CAAC,sBAAsB;IAwB9B,OAAO,CAAC,aAAa;CAyJxB"}
1
+ {"version":3,"file":"IntersectionEngine.d.ts","sourceRoot":"","sources":["../../src/implementation/IntersectionEngine.ts"],"names":[],"mappings":"AAGA,OAAO,EAAS,SAAS,EAAkB,MAAM,qCAAqC,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAG1C,qBACa,kBAAmB,YAAW,mBAAmB;IAC1D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyC;IAE/D,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,cAAc,GAAE,mBAAmB,EAAO,EAAE,IAAI,GAAE,SAA2B,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE;IA8BvI,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,qBAAqB;IA4C7B,OAAO,CAAC,sBAAsB;IAwB9B,OAAO,CAAC,aAAa;CA6JxB"}
@@ -20,9 +20,9 @@ let IntersectionEngine = class IntersectionEngine {
20
20
  let intersections = [];
21
21
  const intersectNode = (node) => {
22
22
  if (viewerID !== undefined) {
23
- if (node.excludeViewers.includes(viewerID))
23
+ if (node.excludeViewports.includes(viewerID))
24
24
  return;
25
- if (node.includeViewers.length > 0 && !node.includeViewers.includes(viewerID))
25
+ if (node.restrictViewports.length > 0 && !node.restrictViewports.includes(viewerID))
26
26
  return;
27
27
  }
28
28
  for (let i = 0; i < filterCriteria.length; i++) {
@@ -125,7 +125,7 @@ let IntersectionEngine = class IntersectionEngine {
125
125
  }
126
126
  }
127
127
  intersectNode(node, rayIn) {
128
- const inverseMatrix = gl_matrix_1.mat4.invert(gl_matrix_1.mat4.create(), node.nodeMatrix);
128
+ const inverseMatrix = gl_matrix_1.mat4.invert(gl_matrix_1.mat4.create(), node.worldMatrix);
129
129
  const ray = {
130
130
  origin: gl_matrix_1.vec3.transformMat4(gl_matrix_1.vec3.create(), rayIn.origin, inverseMatrix),
131
131
  direction: gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.fromValues(inverseMatrix[0] * rayIn.direction[0] + inverseMatrix[4] * rayIn.direction[1] + inverseMatrix[8] * rayIn.direction[2], inverseMatrix[1] * rayIn.direction[0] + inverseMatrix[5] * rayIn.direction[1] + inverseMatrix[9] * rayIn.direction[2], inverseMatrix[2] * rayIn.direction[0] + inverseMatrix[6] * rayIn.direction[1] + inverseMatrix[10] * rayIn.direction[2]))
@@ -140,7 +140,7 @@ let IntersectionEngine = class IntersectionEngine {
140
140
  if (!geometryData) {
141
141
  let intersections = [];
142
142
  for (let i = 0; i < node.children.length; i++) {
143
- let intersection = this.intersectNode(node.children[i], ray);
143
+ let intersection = this.intersectNode(node.children[i], rayIn);
144
144
  if (intersection)
145
145
  intersections = intersections.concat(intersection);
146
146
  }
@@ -152,7 +152,7 @@ let IntersectionEngine = class IntersectionEngine {
152
152
  }
153
153
  else if (geometryData.primitive.mode === viewer_shared_types_1.PRIMITIVE_MODE.LINES) {
154
154
  // if (node.boundingBox.boundingSphere.intersect(ray.origin, ray.direction) === null) return;
155
- if (node.boundingBox.intersect(rayIn.origin, rayIn.direction) === null)
155
+ if (node.boundingBox.clone().applyMatrix(node.worldMatrix).intersect(rayIn.origin, rayIn.direction) === null)
156
156
  return;
157
157
  const index = geometryData.primitive.indices;
158
158
  const position = geometryData.primitive.attributes['POSITION'];
@@ -179,11 +179,12 @@ let IntersectionEngine = class IntersectionEngine {
179
179
  }
180
180
  }
181
181
  intersections.sort((a, b) => a.distance - b.distance);
182
+ intersections.forEach(i => i.point = gl_matrix_1.vec3.transformMat4(i.point, i.point, node.worldMatrix));
182
183
  return intersections;
183
184
  }
184
185
  else if (geometryData.primitive.mode === viewer_shared_types_1.PRIMITIVE_MODE.LINE_LOOP || geometryData.primitive.mode === viewer_shared_types_1.PRIMITIVE_MODE.LINE_STRIP) {
185
186
  // if (node.boundingBox.boundingSphere.intersect(ray.origin, ray.direction) === null) return;
186
- if (node.boundingBox.intersect(rayIn.origin, rayIn.direction) === null)
187
+ if (node.boundingBox.clone().applyMatrix(node.worldMatrix).intersect(rayIn.origin, rayIn.direction) === null)
187
188
  return;
188
189
  const index = geometryData.primitive.indices;
189
190
  const position = geometryData.primitive.attributes['POSITION'];
@@ -210,6 +211,7 @@ let IntersectionEngine = class IntersectionEngine {
210
211
  }
211
212
  }
212
213
  intersections.sort((a, b) => a.distance - b.distance);
214
+ intersections.forEach(i => i.point = gl_matrix_1.vec3.transformMat4(i.point, i.point, node.worldMatrix));
213
215
  return intersections;
214
216
  }
215
217
  else if (geometryData.primitive.mode === viewer_shared_types_1.PRIMITIVE_MODE.POINTS) {
@@ -225,11 +227,12 @@ let IntersectionEngine = class IntersectionEngine {
225
227
  }
226
228
  }
227
229
  intersections.sort((a, b) => a.distance - b.distance);
230
+ intersections.forEach(i => i.point = gl_matrix_1.vec3.transformMat4(i.point, i.point, node.worldMatrix));
228
231
  return intersections;
229
232
  }
230
233
  else {
231
234
  // if (node.boundingBox.boundingSphere.intersect(ray.origin, ray.direction) === null) return;
232
- if (node.boundingBox.intersect(rayIn.origin, rayIn.direction) === null)
235
+ if (node.boundingBox.clone().applyMatrix(node.worldMatrix).intersect(rayIn.origin, rayIn.direction) === null)
233
236
  return;
234
237
  const material = geometryData.primitive.material;
235
238
  const index = geometryData.primitive.indices;
@@ -258,12 +261,13 @@ let IntersectionEngine = class IntersectionEngine {
258
261
  }
259
262
  }
260
263
  intersections.sort((a, b) => a.distance - b.distance);
264
+ intersections.forEach(i => i.point = gl_matrix_1.vec3.transformMat4(i.point, i.point, node.worldMatrix));
261
265
  return intersections;
262
266
  }
263
267
  }
264
268
  };
265
269
  IntersectionEngine = __decorate([
266
- tsyringe_1.singleton()
270
+ (0, tsyringe_1.singleton)()
267
271
  ], IntersectionEngine);
268
272
  exports.IntersectionEngine = IntersectionEngine;
269
273
  //# sourceMappingURL=IntersectionEngine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IntersectionEngine.js","sourceRoot":"","sources":["../../src/implementation/IntersectionEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IntersectionEngine.js","sourceRoot":"","sources":["../../src/implementation/IntersectionEngine.ts"],"names":[],"mappings":";;;;;;;;;AAAA,yEAAqH;AACrH,yCAAuC;AACvC,uEAA0D;AAC1D,iFAAuF;AAKvF,uCAAgD;AAGhD,IAAa,kBAAkB,GAA/B,MAAa,kBAAkB;IAA/B;QACqB,UAAK,GAAiB,oBAAS,CAAC,OAAO,CAAC,8BAAI,CAAC,CAAC;IAsRnE,CAAC;IApRG,SAAS,CAAC,GAAS,EAAE,iBAAwC,EAAE,EAAE,OAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAiB;QACjH,IAAI,aAAa,GAAoB,EAAE,CAAC;QACxC,MAAM,aAAa,GAAG,CAAC,IAAe,EAAE,EAAE;YACtC,IAAG,QAAQ,KAAK,SAAS,EAAE;gBACvB,IAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAAE,OAAO;gBACpD,IAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAAE,OAAO;aAC9F;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;oBACzB,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;oBAClD,IAAI,YAAY,EAAE;wBACd,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;wBACzC,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;qBACtD;oBACD,MAAM;iBACT;aACJ;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE;gBACzC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;QACvC,CAAC,CAAA;QACD,aAAa,CAAC,IAAI,CAAC,CAAC;QAGpB,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QACtD,OAAO,aAAa,CAAC;IACzB,CAAC;IAGO,iBAAiB,CAAC,IAAe,EAAE,QAAsC,EAAE,GAAS,EAAE,EAAQ,EAAE,EAAQ,EAAE,EAAQ;QACtH,IAAI,KAAkB,CAAC;QAEvB,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,mCAAa,CAAC,IAAI,EAAE;YAClD,MAAM,QAAQ,GAAG,IAAI,6BAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAC1C,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;SACzD;aAAM;YACH,MAAM,QAAQ,GAAG,IAAI,6BAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAC1C,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;SACzD;QAED,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO;QAE3B,MAAM,QAAQ,GAAG,gBAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO;YACH,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,gBAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YACxB,IAAI;SACP,CAAC;IACN,CAAC;IAEO,qBAAqB,CAAC,IAAe,EAAE,GAAS,EAAE,MAAc,EAAE,EAAQ,EAAE,EAAQ;QACxF,MAAM,SAAS,GAAG,gBAAI,CAAC,GAAG,CAAC,gBAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,gBAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG;YACZ,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,gBAAI,CAAC,MAAM,CAAC,gBAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,gBAAI,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;SACxG,CAAC;QACF,MAAM,WAAW,GAAG,gBAAI,CAAC,KAAK,CAAC,gBAAI,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAEhF,MAAM,EAAE,GAAG,gBAAI,CAAC,SAAS,CAAC,gBAAI,CAAC,MAAM,EAAE,EAAE,gBAAI,CAAC,KAAK,CAAC,gBAAI,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;QAChG,MAAM,EAAE,GAAG,gBAAI,CAAC,SAAS,CAAC,gBAAI,CAAC,MAAM,EAAE,EAAE,gBAAI,CAAC,KAAK,CAAC,gBAAI,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;QAEpG,MAAM,EAAE,GAAG,gBAAI,CAAC,GAAG,CAAC,gBAAI,CAAC,GAAG,CAAC,gBAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,gBAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC/F,MAAM,EAAE,GAAG,gBAAI,CAAC,GAAG,CAAC,gBAAI,CAAC,GAAG,CAAC,gBAAI,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,gBAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAEnG,IAAI,MAAM,GAAS,gBAAI,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,EAAE,GAAG,CAAC,EAAE;YACR,gBAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;SACjC;aAAM;YACH,MAAM,GAAG,gBAAI,CAAC,GAAG,CAAC,gBAAI,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAI,CAAC,GAAG,CAAC,gBAAI,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,SAAS,EAAE,gBAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;SACrH;QAED,IAAI,MAAM,GAAS,gBAAI,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,EAAE,GAAG,CAAC,EAAE;YACR,gBAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;SACzB;aAAM,IAAI,EAAE,GAAG,UAAU,EAAE;YACxB,MAAM,GAAG,gBAAI,CAAC,GAAG,CAAC,gBAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,gBAAI,CAAC,GAAG,CAAC,gBAAI,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,gBAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;SACjH;aAAM;YACH,gBAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;SACzB;QAED,MAAM,QAAQ,GAAG,gBAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,QAAQ,GAAG,MAAM,EAAE;YACnB,OAAO;gBACH,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,gBAAI,CAAC,KAAK,CAAC,MAAM,CAAC;gBACzB,IAAI;aACP,CAAA;SACJ;aAAM;YACH,OAAO;SACV;IACL,CAAC;IAGO,sBAAsB,CAAC,IAAe,EAAE,GAAS,EAAE,MAAc,EAAE,CAAO;QAC9E,MAAM,YAAY,GAAG,gBAAI,CAAC,GAAG,CAAC,gBAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5D,MAAM,iBAAiB,GAAG,gBAAI,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAEhE,IAAI,iBAAiB,GAAG,CAAC,EAAE;YACvB,gBAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;SACvC;aAAM;YACH,gBAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,gBAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,gBAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC;YAC9I,gBAAI,CAAC,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;SACpD;QAED,MAAM,QAAQ,GAAG,gBAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAChD,IAAI,QAAQ,GAAG,MAAM,EAAE;YACnB,OAAO;gBACH,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,gBAAI,CAAC,KAAK,CAAC,YAAY,CAAC;gBAC/B,IAAI;aACP,CAAA;SACJ;aAAM;YACH,OAAO;SACV;IACL,CAAC;IAGO,aAAa,CAAC,IAAe,EAAE,KAAW;QAC9C,MAAM,aAAa,GAAG,gBAAI,CAAC,MAAM,CAAC,gBAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACnE,MAAM,GAAG,GAAG;YACR,MAAM,EAAE,gBAAI,CAAC,aAAa,CAAC,gBAAI,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC;YACtE,SAAS,EAAE,gBAAI,CAAC,SAAS,CAAC,gBAAI,CAAC,MAAM,EAAE,EAAE,gBAAI,CAAC,UAAU,CACpD,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EACrH,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EACrH,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CACzH,CAAC;SACL,CAAC;QAEF,IAAI,YAAsC,CAAC;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,kCAAY,EAAE;gBACtC,YAAY,GAAiB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC1C,MAAM;aACT;SACJ;QAED,IAAI,CAAC,YAAY,EAAE;YACf,IAAI,aAAa,GAAoB,EAAE,CAAC;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC3C,IAAI,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC/D,IAAI,YAAY;oBACZ,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;aAC1D;YACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1B,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;gBACtD,OAAO,aAAa,CAAC;aACxB;YACD,OAAO;SACV;aAAM,IAAI,YAAY,CAAC,SAAS,CAAC,IAAI,KAAK,oCAAc,CAAC,KAAK,EAAE;YAC7D,6FAA6F;YAC7F,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI;gBAAE,OAAO;YAErH,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC;YAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,GAAG,CAAC;YACnB,IAAI,aAAa,GAAG,EAAE,CAAC;YACvB,IAAI,KAAK,KAAK,IAAI,EAAE;gBAChB,0BAA0B;gBAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;oBAC/C,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAC5C,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAEhD,IAAI,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAC3D,gBAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAC5I,gBAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClJ,IAAI,YAAY;wBAAE,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;iBACrD;aACJ;iBAAM,IAAI,QAAQ,KAAK,SAAS,EAAE;gBAC/B,8BAA8B;gBAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;oBAClD,MAAM,CAAC,GAAG,CAAC,CAAC;oBACZ,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAChB,IAAI,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAC3D,gBAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAC5I,gBAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAAC,IAAI,YAAY;wBAAE,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;iBACxM;aACJ;YAED,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;YACtD,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,gBAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YAC7F,OAAO,aAAa,CAAC;SACxB;aAAM,IAAI,YAAY,CAAC,SAAS,CAAC,IAAI,KAAK,oCAAc,CAAC,SAAS,IAAI,YAAY,CAAC,SAAS,CAAC,IAAI,KAAK,oCAAc,CAAC,UAAU,EAAE;YAC9H,6FAA6F;YAC7F,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI;gBAAE,OAAO;YAErH,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC;YAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,GAAG,CAAC;YACnB,IAAI,aAAa,GAAG,EAAE,CAAC;YACvB,IAAI,KAAK,KAAK,IAAI,EAAE;gBAChB,0BAA0B;gBAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;oBAChD,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAC5C,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAEhD,IAAI,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAC3D,gBAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAC5I,gBAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClJ,IAAI,YAAY;wBAAE,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;iBACrD;aACJ;iBAAM,IAAI,QAAQ,KAAK,SAAS,EAAE;gBAC/B,8BAA8B;gBAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;oBAClD,MAAM,CAAC,GAAG,CAAC,CAAC;oBACZ,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAChB,IAAI,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAC3D,gBAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAC5I,gBAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAAC,IAAI,YAAY;wBAAE,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;iBACxM;aACJ;YAED,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;YACtD,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,gBAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YAC7F,OAAO,aAAa,CAAC;SACxB;aAAM,IAAI,YAAY,CAAC,SAAS,CAAC,IAAI,KAAK,oCAAc,CAAC,MAAM,EAAE;YAC9D,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,GAAG,CAAC;YACnB,IAAI,aAAa,GAAG,EAAE,CAAC;YACvB,IAAI,QAAQ,KAAK,SAAS,EAAE;gBACxB,8BAA8B;gBAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;oBAC/C,IAAI,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAC5D,gBAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClJ,IAAI,YAAY;wBAAE,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;iBACrD;aACJ;YAED,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;YACtD,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,gBAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YAC7F,OAAO,aAAa,CAAC;SACxB;aAAM;YAEH,6FAA6F;YAC7F,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI;gBAAE,OAAO;YAErH,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC;YACjD,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC;YAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAE/D,IAAI,aAAa,GAAG,EAAE,CAAC;YAEvB,IAAI,KAAK,KAAK,IAAI,EAAE;gBAChB,0BAA0B;gBAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;oBAC/C,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAC5C,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAChD,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAEhD,IAAI,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EACzD,gBAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAC5I,gBAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAC5I,gBAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClJ,IAAI,YAAY;wBAAE,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;iBACrD;aACJ;iBAAM,IAAI,QAAQ,KAAK,SAAS,EAAE;gBAC/B,8BAA8B;gBAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;oBAClD,MAAM,CAAC,GAAG,CAAC,CAAC;oBACZ,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAChB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAChB,IAAI,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EACzD,gBAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAC5I,gBAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAC5I,gBAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClJ,IAAI,YAAY;wBAAE,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;iBACrD;aACJ;YAED,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;YACtD,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,gBAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YAC7F,OAAO,aAAa,CAAC;SACxB;IACL,CAAC;CAEJ,CAAA;AAvRY,kBAAkB;IAD9B,IAAA,oBAAS,GAAE;GACC,kBAAkB,CAuR9B;AAvRY,gDAAkB"}
@@ -1,8 +1,8 @@
1
1
  import { vec3 } from "gl-matrix";
2
- import { TreeNode } from "@shapediver/viewer.shared.node-tree";
2
+ import { ITreeNode } from "@shapediver/viewer.shared.node-tree";
3
3
  export interface IIntersection {
4
4
  distance: number;
5
5
  point: vec3;
6
- node: TreeNode;
6
+ node: ITreeNode;
7
7
  }
8
8
  //# sourceMappingURL=IIntersection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IIntersection.d.ts","sourceRoot":"","sources":["../../src/interfaces/IIntersection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAE/D,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,IAAI,CAAC;IACZ,IAAI,EAAE,QAAQ,CAAA;CACjB"}
1
+ {"version":3,"file":"IIntersection.d.ts","sourceRoot":"","sources":["../../src/interfaces/IIntersection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,IAAI,CAAC;IACZ,IAAI,EAAE,SAAS,CAAA;CAClB"}
@@ -1,8 +1,8 @@
1
- import { TreeNode } from "@shapediver/viewer.shared.node-tree";
1
+ import { ITreeNode } from "@shapediver/viewer.shared.node-tree";
2
2
  import { IIntersection } from "./IIntersection";
3
3
  import { IIntersectionFilter } from "./IIntersectionFilter";
4
4
  import { IRay } from "./IRay";
5
5
  export interface IIntersectionEngine {
6
- intersect(ray: IRay, filterCriteria?: IIntersectionFilter[], root?: TreeNode, viewerID?: string): IIntersection[];
6
+ intersect(ray: IRay, filterCriteria?: IIntersectionFilter[], root?: ITreeNode, viewerID?: string): IIntersection[];
7
7
  }
8
8
  //# sourceMappingURL=IIntersectionEngine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IIntersectionEngine.d.ts","sourceRoot":"","sources":["../../src/interfaces/IIntersectionEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,MAAM,WAAW,mBAAmB;IAChC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,mBAAmB,EAAE,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CAAC;CACrH"}
1
+ {"version":3,"file":"IIntersectionEngine.d.ts","sourceRoot":"","sources":["../../src/interfaces/IIntersectionEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,MAAM,WAAW,mBAAmB;IAChC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,mBAAmB,EAAE,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CAAC;CACtH"}
@@ -1,5 +1,5 @@
1
- import { TreeNode } from "@shapediver/viewer.shared.node-tree";
1
+ import { ITreeNode } from "@shapediver/viewer.shared.node-tree";
2
2
  export interface IIntersectionFilter {
3
- (node: TreeNode): boolean;
3
+ (node: ITreeNode): boolean;
4
4
  }
5
5
  //# sourceMappingURL=IIntersectionFilter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IIntersectionFilter.d.ts","sourceRoot":"","sources":["../../src/interfaces/IIntersectionFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAE/D,MAAM,WAAW,mBAAmB;IAChC,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;CAC7B"}
1
+ {"version":3,"file":"IIntersectionFilter.d.ts","sourceRoot":"","sources":["../../src/interfaces/IIntersectionFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEhE,MAAM,WAAW,mBAAmB;IAChC,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;CAC9B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shapediver/viewer.rendering-engine.intersection-engine",
3
- "version": "1.15.5",
3
+ "version": "2.0.0",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "author": "Michael Oppitz <michael@shapediver.com>",
@@ -10,7 +10,11 @@
10
10
  "test": "__tests__"
11
11
  },
12
12
  "files": [
13
- "dist"
13
+ "dist",
14
+ "src",
15
+ "package.json",
16
+ "README.md",
17
+ "tsconfig.json"
14
18
  ],
15
19
  "publishConfig": {
16
20
  "access": "public"
@@ -20,11 +24,10 @@
20
24
  "url": "git+https://github.com/shapediver/Viewer.git"
21
25
  },
22
26
  "scripts": {
23
- "test": "bash ../../scripts/test.sh",
24
27
  "check": "tsc --noEmit",
25
- "build": "bash ../../scripts/build.sh",
26
- "build-watch": "bash ../../scripts/build-watch.sh",
27
- "build-dep": "bash ../../scripts/build-dep.sh"
28
+ "build": "bash ../../scripts/building/build.sh",
29
+ "build-watch": "bash ../../scripts/building/build-watch.sh",
30
+ "build-dep": "bash ../../scripts/building/build-dep.sh"
28
31
  },
29
32
  "bugs": {
30
33
  "url": "https://github.com/shapediver/Viewer/issues"
@@ -36,13 +39,14 @@
36
39
  "testEnvironment": "node"
37
40
  },
38
41
  "dependencies": {
39
- "@shapediver/viewer.shared.math": "1.15.5",
40
- "@shapediver/viewer.shared.node-tree": "1.15.5",
41
- "@shapediver/viewer.shared.services": "1.15.5",
42
- "@shapediver/viewer.shared.types": "1.15.5",
42
+ "@shapediver/viewer.rendering-engine.rendering-engine": "2.0.0",
43
+ "@shapediver/viewer.shared.math": "2.0.0",
44
+ "@shapediver/viewer.shared.node-tree": "2.0.0",
45
+ "@shapediver/viewer.shared.services": "2.0.0",
46
+ "@shapediver/viewer.shared.types": "2.0.0",
43
47
  "detect-it": "4.0.1",
44
48
  "gl-matrix": "3.3.0",
45
49
  "tsyringe": "^4.5.0"
46
50
  },
47
- "gitHead": "120dd5fcfe70c66dcf03648d7a0afe35ad0fa120"
51
+ "gitHead": "bb53f1f23dcf3b1d76e786bdc8eb20e485c029f2"
48
52
  }
@@ -0,0 +1,291 @@
1
+ import { GeometryData, IMaterialAbstractData, MATERIAL_SIDE, PRIMITIVE_MODE } from "@shapediver/viewer.shared.types";
2
+ import { mat4, vec3 } from "gl-matrix";
3
+ import { Triangle } from "@shapediver/viewer.shared.math";
4
+ import { ITree, ITreeNode, Tree, TreeNode } from "@shapediver/viewer.shared.node-tree";
5
+ import { IIntersection } from "../interfaces/IIntersection";
6
+ import { IIntersectionEngine } from "../interfaces/IIntersectionEngine";
7
+ import { IIntersectionFilter } from "../interfaces/IIntersectionFilter";
8
+ import { IRay } from "../interfaces/IRay";
9
+ import { container, singleton } from "tsyringe";
10
+
11
+ @singleton()
12
+ export class IntersectionEngine implements IIntersectionEngine {
13
+ private readonly _tree: ITree = <ITree>container.resolve(Tree);
14
+
15
+ intersect(ray: IRay, filterCriteria: IIntersectionFilter[] = [], root: ITreeNode = this._tree.root, viewerID?: string): IIntersection[] {
16
+ let intersections: IIntersection[] = [];
17
+ const intersectNode = (node: ITreeNode) => {
18
+ if(viewerID !== undefined) {
19
+ if(node.excludeViewports.includes(viewerID)) return;
20
+ if(node.restrictViewports.length > 0 && !node.restrictViewports.includes(viewerID)) return;
21
+ }
22
+
23
+ for (let i = 0; i < filterCriteria.length; i++) {
24
+ if (filterCriteria[i](node)) {
25
+ const intersection = this.intersectNode(node, ray)
26
+ if (intersection) {
27
+ intersection.forEach(i => i.node = node);
28
+ intersections = intersections.concat(intersection);
29
+ }
30
+ break;
31
+ }
32
+ }
33
+
34
+ for (let i = 0; i < node.children.length; i++)
35
+ intersectNode(node.children[i])
36
+ }
37
+ intersectNode(root);
38
+
39
+
40
+ intersections.sort((a, b) => a.distance - b.distance);
41
+ return intersections;
42
+ }
43
+
44
+
45
+ private checkIntersection(node: ITreeNode, material: IMaterialAbstractData | null, ray: IRay, pA: vec3, pB: vec3, pC: vec3): { distance: number, point: vec3, node: ITreeNode } | undefined {
46
+ let point: vec3 | null;
47
+
48
+ if (material && material.side === MATERIAL_SIDE.BACK) {
49
+ const triangle = new Triangle(pC, pB, pA);
50
+ point = triangle.intersect(ray.origin, ray.direction);
51
+ } else {
52
+ const triangle = new Triangle(pA, pB, pC);
53
+ point = triangle.intersect(ray.origin, ray.direction);
54
+ }
55
+
56
+ if (point === null) return;
57
+
58
+ const distance = vec3.distance(ray.origin, point);
59
+ return {
60
+ distance: distance,
61
+ point: vec3.clone(point),
62
+ node
63
+ };
64
+ }
65
+
66
+ private checkLineIntersection(node: ITreeNode, ray: IRay, radius: number, pA: vec3, pB: vec3): { distance: number, point: vec3, node: ITreeNode } | undefined {
67
+ const direction = vec3.sub(vec3.create(), pB, pA);
68
+ const lineLength = vec3.length(direction);
69
+ const lineRay = {
70
+ origin: pA,
71
+ direction: vec3.divide(vec3.create(), direction, vec3.fromValues(lineLength, lineLength, lineLength))
72
+ };
73
+ const planeNormal = vec3.cross(vec3.create(), ray.direction, lineRay.direction);
74
+
75
+ const Na = vec3.normalize(vec3.create(), vec3.cross(vec3.create(), ray.direction, planeNormal));
76
+ const Nb = vec3.normalize(vec3.create(), vec3.cross(vec3.create(), lineRay.direction, planeNormal));
77
+
78
+ const da = vec3.dot(vec3.sub(vec3.create(), pA, ray.origin), Nb) / vec3.dot(ray.direction, Nb);
79
+ const db = vec3.dot(vec3.sub(vec3.create(), ray.origin, pA), Na) / vec3.dot(lineRay.direction, Na);
80
+
81
+ let pointA: vec3 = vec3.create();
82
+ if (da < 0) {
83
+ vec3.copy(pointA, ray.origin);
84
+ } else {
85
+ pointA = vec3.add(vec3.create(), ray.origin, vec3.mul(vec3.create(), ray.direction, vec3.fromValues(da, da, da)));
86
+ }
87
+
88
+ let pointB: vec3 = vec3.create();
89
+ if (db < 0) {
90
+ vec3.copy(pointB, pA);
91
+ } else if (db < lineLength) {
92
+ pointB = vec3.add(vec3.create(), pA, vec3.mul(vec3.create(), lineRay.direction, vec3.fromValues(db, db, db)));
93
+ } else {
94
+ vec3.copy(pointB, pB);
95
+ }
96
+
97
+ const distance = vec3.distance(pointA, pointB);
98
+ if (distance < radius) {
99
+ return {
100
+ distance: distance,
101
+ point: vec3.clone(pointB),
102
+ node
103
+ }
104
+ } else {
105
+ return;
106
+ }
107
+ }
108
+
109
+
110
+ private checkPointIntersection(node: ITreeNode, ray: IRay, radius: number, p: vec3): { distance: number, point: vec3, node: ITreeNode } | undefined {
111
+ const closestPoint = vec3.sub(vec3.create(), p, ray.origin);
112
+ const directionDistance = vec3.dot(closestPoint, ray.direction);
113
+
114
+ if (directionDistance < 0) {
115
+ vec3.copy(closestPoint, ray.origin);
116
+ } else {
117
+ vec3.multiply(closestPoint, vec3.copy(closestPoint, ray.direction), vec3.fromValues(directionDistance, directionDistance, directionDistance));
118
+ vec3.add(closestPoint, closestPoint, ray.origin);
119
+ }
120
+
121
+ const distance = vec3.distance(closestPoint, p);
122
+ if (distance < radius) {
123
+ return {
124
+ distance: distance,
125
+ point: vec3.clone(closestPoint),
126
+ node
127
+ }
128
+ } else {
129
+ return;
130
+ }
131
+ }
132
+
133
+
134
+ private intersectNode(node: ITreeNode, rayIn: IRay): IIntersection[] | undefined {
135
+ const inverseMatrix = mat4.invert(mat4.create(), node.worldMatrix);
136
+ const ray = {
137
+ origin: vec3.transformMat4(vec3.create(), rayIn.origin, inverseMatrix),
138
+ direction: vec3.normalize(vec3.create(), vec3.fromValues(
139
+ inverseMatrix[0] * rayIn.direction[0] + inverseMatrix[4] * rayIn.direction[1] + inverseMatrix[8] * rayIn.direction[2],
140
+ inverseMatrix[1] * rayIn.direction[0] + inverseMatrix[5] * rayIn.direction[1] + inverseMatrix[9] * rayIn.direction[2],
141
+ inverseMatrix[2] * rayIn.direction[0] + inverseMatrix[6] * rayIn.direction[1] + inverseMatrix[10] * rayIn.direction[2]
142
+ ))
143
+ };
144
+
145
+ let geometryData: GeometryData | undefined;
146
+ for (let i = 0; i < node.data.length; i++) {
147
+ if (node.data[i] instanceof GeometryData) {
148
+ geometryData = <GeometryData>node.data[i];
149
+ break;
150
+ }
151
+ }
152
+
153
+ if (!geometryData) {
154
+ let intersections: IIntersection[] = [];
155
+ for (let i = 0; i < node.children.length; i++) {
156
+ let intersection = this.intersectNode(node.children[i], rayIn);
157
+ if (intersection)
158
+ intersections = intersections.concat(intersection);
159
+ }
160
+ if (intersections.length > 0) {
161
+ intersections.sort((a, b) => a.distance - b.distance);
162
+ return intersections;
163
+ }
164
+ return;
165
+ } else if (geometryData.primitive.mode === PRIMITIVE_MODE.LINES) {
166
+ // if (node.boundingBox.boundingSphere.intersect(ray.origin, ray.direction) === null) return;
167
+ if (node.boundingBox.clone().applyMatrix(node.worldMatrix).intersect(rayIn.origin, rayIn.direction) === null) return;
168
+
169
+ const index = geometryData.primitive.indices;
170
+ const position = geometryData.primitive.attributes['POSITION'];
171
+ const radius = 0.1;
172
+ let intersections = [];
173
+ if (index !== null) {
174
+ // indexed buffer geometry
175
+ for (let i = 0, il = +index.count; i < il; i += 2) {
176
+ const a = index.array[(i) * index.itemSize];
177
+ const b = index.array[(i + 1) * index.itemSize];
178
+
179
+ let intersection = this.checkLineIntersection(node, ray, radius,
180
+ vec3.fromValues(position.array[a * position.itemSize], position.array[a * position.itemSize + 1], position.array[a * position.itemSize + 2]),
181
+ vec3.fromValues(position.array[b * position.itemSize], position.array[b * position.itemSize + 1], position.array[b * position.itemSize + 2]));
182
+ if (intersection) intersections.push(intersection)
183
+ }
184
+ } else if (position !== undefined) {
185
+ // non-indexed buffer geometry
186
+ for (let i = 0, il = +position.count; i < il; i += 2) {
187
+ const a = i;
188
+ const b = i + 1;
189
+ let intersection = this.checkLineIntersection(node, ray, radius,
190
+ vec3.fromValues(position.array[a * position.itemSize], position.array[a * position.itemSize + 1], position.array[a * position.itemSize + 2]),
191
+ vec3.fromValues(position.array[b * position.itemSize], position.array[b * position.itemSize + 1], position.array[b * position.itemSize + 2])); if (intersection) intersections.push(intersection)
192
+ }
193
+ }
194
+
195
+ intersections.sort((a, b) => a.distance - b.distance);
196
+ intersections.forEach(i => i.point = vec3.transformMat4(i.point, i.point, node.worldMatrix));
197
+ return intersections;
198
+ } else if (geometryData.primitive.mode === PRIMITIVE_MODE.LINE_LOOP || geometryData.primitive.mode === PRIMITIVE_MODE.LINE_STRIP) {
199
+ // if (node.boundingBox.boundingSphere.intersect(ray.origin, ray.direction) === null) return;
200
+ if (node.boundingBox.clone().applyMatrix(node.worldMatrix).intersect(rayIn.origin, rayIn.direction) === null) return;
201
+
202
+ const index = geometryData.primitive.indices;
203
+ const position = geometryData.primitive.attributes['POSITION'];
204
+ const radius = 0.1;
205
+ let intersections = [];
206
+ if (index !== null) {
207
+ // indexed buffer geometry
208
+ for (let i = 0, il = +index.count - 1; i < il; i++) {
209
+ const a = index.array[(i) * index.itemSize];
210
+ const b = index.array[(i + 1) * index.itemSize];
211
+
212
+ let intersection = this.checkLineIntersection(node, ray, radius,
213
+ vec3.fromValues(position.array[a * position.itemSize], position.array[a * position.itemSize + 1], position.array[a * position.itemSize + 2]),
214
+ vec3.fromValues(position.array[b * position.itemSize], position.array[b * position.itemSize + 1], position.array[b * position.itemSize + 2]));
215
+ if (intersection) intersections.push(intersection)
216
+ }
217
+ } else if (position !== undefined) {
218
+ // non-indexed buffer geometry
219
+ for (let i = 0, il = +position.count; i < il; i += 2) {
220
+ const a = i;
221
+ const b = i + 1;
222
+ let intersection = this.checkLineIntersection(node, ray, radius,
223
+ vec3.fromValues(position.array[a * position.itemSize], position.array[a * position.itemSize + 1], position.array[a * position.itemSize + 2]),
224
+ vec3.fromValues(position.array[b * position.itemSize], position.array[b * position.itemSize + 1], position.array[b * position.itemSize + 2])); if (intersection) intersections.push(intersection)
225
+ }
226
+ }
227
+
228
+ intersections.sort((a, b) => a.distance - b.distance);
229
+ intersections.forEach(i => i.point = vec3.transformMat4(i.point, i.point, node.worldMatrix));
230
+ return intersections;
231
+ } else if (geometryData.primitive.mode === PRIMITIVE_MODE.POINTS) {
232
+ const position = geometryData.primitive.attributes['POSITION'];
233
+ const radius = 0.1;
234
+ let intersections = [];
235
+ if (position !== undefined) {
236
+ // non-indexed buffer geometry
237
+ for (let i = 0, il = +position.count; i < il; i++) {
238
+ let intersection = this.checkPointIntersection(node, ray, radius,
239
+ vec3.fromValues(position.array[i * position.itemSize], position.array[i * position.itemSize + 1], position.array[i * position.itemSize + 2]));
240
+ if (intersection) intersections.push(intersection)
241
+ }
242
+ }
243
+
244
+ intersections.sort((a, b) => a.distance - b.distance);
245
+ intersections.forEach(i => i.point = vec3.transformMat4(i.point, i.point, node.worldMatrix));
246
+ return intersections;
247
+ } else {
248
+
249
+ // if (node.boundingBox.boundingSphere.intersect(ray.origin, ray.direction) === null) return;
250
+ if (node.boundingBox.clone().applyMatrix(node.worldMatrix).intersect(rayIn.origin, rayIn.direction) === null) return;
251
+
252
+ const material = geometryData.primitive.material;
253
+ const index = geometryData.primitive.indices;
254
+ const position = geometryData.primitive.attributes['POSITION'];
255
+
256
+ let intersections = [];
257
+
258
+ if (index !== null) {
259
+ // indexed buffer geometry
260
+ for (let i = 0, il = +index.count; i < il; i += 3) {
261
+ const a = index.array[(i) * index.itemSize];
262
+ const b = index.array[(i + 1) * index.itemSize];
263
+ const c = index.array[(i + 2) * index.itemSize];
264
+
265
+ let intersection = this.checkIntersection(node, material, ray,
266
+ vec3.fromValues(position.array[a * position.itemSize], position.array[a * position.itemSize + 1], position.array[a * position.itemSize + 2]),
267
+ vec3.fromValues(position.array[b * position.itemSize], position.array[b * position.itemSize + 1], position.array[b * position.itemSize + 2]),
268
+ vec3.fromValues(position.array[c * position.itemSize], position.array[c * position.itemSize + 1], position.array[c * position.itemSize + 2]));
269
+ if (intersection) intersections.push(intersection)
270
+ }
271
+ } else if (position !== undefined) {
272
+ // non-indexed buffer geometry
273
+ for (let i = 0, il = +position.count; i < il; i += 3) {
274
+ const a = i;
275
+ const b = i + 1;
276
+ const c = i + 2;
277
+ let intersection = this.checkIntersection(node, material, ray,
278
+ vec3.fromValues(position.array[a * position.itemSize], position.array[a * position.itemSize + 1], position.array[a * position.itemSize + 2]),
279
+ vec3.fromValues(position.array[b * position.itemSize], position.array[b * position.itemSize + 1], position.array[b * position.itemSize + 2]),
280
+ vec3.fromValues(position.array[c * position.itemSize], position.array[c * position.itemSize + 1], position.array[c * position.itemSize + 2]));
281
+ if (intersection) intersections.push(intersection)
282
+ }
283
+ }
284
+
285
+ intersections.sort((a, b) => a.distance - b.distance);
286
+ intersections.forEach(i => i.point = vec3.transformMat4(i.point, i.point, node.worldMatrix));
287
+ return intersections;
288
+ }
289
+ }
290
+
291
+ }
package/src/index.ts ADDED
@@ -0,0 +1,13 @@
1
+ import { IntersectionEngine } from "./implementation/IntersectionEngine"
2
+ import { IIntersection } from "./interfaces/IIntersection"
3
+ import { IIntersectionEngine } from "./interfaces/IIntersectionEngine"
4
+ import { IIntersectionFilter } from "./interfaces/IIntersectionFilter"
5
+ import { IRay } from "./interfaces/IRay"
6
+
7
+ export {
8
+ IRay, IIntersection, IIntersectionFilter, IIntersectionEngine
9
+ }
10
+
11
+ export {
12
+ IntersectionEngine
13
+ }
@@ -0,0 +1,8 @@
1
+ import { vec3 } from "gl-matrix";
2
+ import { ITreeNode } from "@shapediver/viewer.shared.node-tree";
3
+
4
+ export interface IIntersection {
5
+ distance: number,
6
+ point: vec3,
7
+ node: ITreeNode
8
+ }
@@ -0,0 +1,8 @@
1
+ import { ITreeNode, TreeNode } from "@shapediver/viewer.shared.node-tree";
2
+ import { IIntersection } from "./IIntersection";
3
+ import { IIntersectionFilter } from "./IIntersectionFilter";
4
+ import { IRay } from "./IRay";
5
+
6
+ export interface IIntersectionEngine {
7
+ intersect(ray: IRay, filterCriteria?: IIntersectionFilter[], root?: ITreeNode, viewerID?: string): IIntersection[];
8
+ }
@@ -0,0 +1,5 @@
1
+ import { ITreeNode } from "@shapediver/viewer.shared.node-tree";
2
+
3
+ export interface IIntersectionFilter {
4
+ (node: ITreeNode): boolean;
5
+ }
@@ -0,0 +1,6 @@
1
+ import { vec3 } from "gl-matrix";
2
+
3
+ export interface IRay {
4
+ origin: vec3,
5
+ direction: vec3
6
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "include": [
4
+ "./**/*.ts"
5
+ ],
6
+ "compilerOptions": {
7
+ "rootDir": "src",
8
+ "outDir": "dist"
9
+ },
10
+ "exclude": [
11
+ "__tests__",
12
+ "node_modules",
13
+ "dist",
14
+ "dist-dev",
15
+ "dist-prod"
16
+ ]
17
+ }