@inweb/viewer-three 27.2.1 → 27.2.2

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.
@@ -21255,7 +21255,7 @@
21255
21255
  this.material.dispose();
21256
21256
  }
21257
21257
  }
21258
- let PlaneHelper$1 = class PlaneHelper extends Line$1 {
21258
+ class PlaneHelper extends Line$1 {
21259
21259
  constructor( plane, size = 1, hex = 0xffff00 ) {
21260
21260
  const color = hex;
21261
21261
  const positions = [ 1, -1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0, 1, 1, 0 ];
@@ -21285,7 +21285,7 @@
21285
21285
  this.children[ 0 ].geometry.dispose();
21286
21286
  this.children[ 0 ].material.dispose();
21287
21287
  }
21288
- };
21288
+ }
21289
21289
  const _axis = new Vector3();
21290
21290
  let _lineGeometry, _coneGeometry;
21291
21291
  class ArrowHelper extends Object3D {
@@ -32455,7 +32455,7 @@ void main() {
32455
32455
  PerspectiveCamera: PerspectiveCamera,
32456
32456
  Plane: Plane,
32457
32457
  PlaneGeometry: PlaneGeometry,
32458
- PlaneHelper: PlaneHelper$1,
32458
+ PlaneHelper: PlaneHelper,
32459
32459
  PointLight: PointLight,
32460
32460
  PointLightHelper: PointLightHelper,
32461
32461
  Points: Points,
@@ -33644,17 +33644,15 @@ void main() {
33644
33644
  }
33645
33645
  }
33646
33646
 
33647
- class PlaneHelper extends Line$1 {
33648
- constructor(plane, size = 1, color = 0xffff00, offset = new Vector3()) {
33647
+ class PlaneHelper2 extends Line$1 {
33648
+ constructor(size = 1, color = 0xc0c0c0) {
33649
33649
  const positions = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0, 1, 1, 0];
33650
33650
  const geometry = new BufferGeometry();
33651
33651
  geometry.setAttribute("position", new Float32BufferAttribute(positions, 3));
33652
33652
  geometry.computeBoundingSphere();
33653
33653
  super(geometry, new LineBasicMaterial({ color, toneMapped: false }));
33654
- this.type = "PlaneHelper";
33655
- this.plane = plane;
33654
+ this.type = "PlaneHelper2";
33656
33655
  this.size = size;
33657
- this.offset = offset;
33658
33656
  const positions2 = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, -1, 0, 1, -1, 0];
33659
33657
  const geometry2 = new BufferGeometry();
33660
33658
  geometry2.setAttribute("position", new Float32BufferAttribute(positions2, 3));
@@ -33672,14 +33670,10 @@ void main() {
33672
33670
  dispose() {
33673
33671
  this.geometry.dispose();
33674
33672
  this.material.dispose();
33675
- this.children[0].geometry.dispose();
33676
- this.children[0].material.dispose();
33673
+ this.helper.geometry.dispose();
33674
+ this.helper.material.dispose();
33677
33675
  }
33678
33676
  updateMatrixWorld(force) {
33679
- this.position.set(0, 0, 0);
33680
- this.lookAt(this.plane.normal);
33681
- this.position.copy(this.offset);
33682
- this.translateZ(-(this.offset.dot(this.plane.normal) + this.plane.constant));
33683
33677
  this.scale.set(0.5 * this.size, 0.5 * this.size, 1);
33684
33678
  super.updateMatrixWorld(force);
33685
33679
  }
@@ -34435,26 +34429,41 @@ void main() {
34435
34429
  }
34436
34430
 
34437
34431
  class CuttingPlaneDragger extends OrbitDragger {
34438
- constructor(viewer, normal, color) {
34432
+ constructor(viewer, normal) {
34439
34433
  super(viewer);
34440
34434
  this.transformChange = () => {
34435
+ this.plane.normal.copy(new Vector3(0, 0, -1)).applyQuaternion(this.planeCenter.quaternion);
34441
34436
  this.plane.constant = -this.planeCenter.position.dot(this.plane.normal);
34442
34437
  this.viewer.update();
34443
34438
  };
34444
- this.transformDrag = (event) => {
34439
+ this.translateDrag = (event) => {
34440
+ this.orbit.enabled = !event.value;
34441
+ this.rotate.enabled = !event.value;
34442
+ };
34443
+ this.rotateDrag = (event) => {
34445
34444
  this.orbit.enabled = !event.value;
34445
+ this.translate.enabled = !event.value;
34446
34446
  };
34447
34447
  this.updatePlaneSize = () => {
34448
34448
  this.planeHelper.size = this.viewer.extents.getSize(new Vector3()).length() || 1;
34449
34449
  this.viewer.update();
34450
34450
  };
34451
34451
  this.updateTransformCamera = () => {
34452
- this.transform.camera = this.viewer.camera;
34452
+ this.translate.camera = this.viewer.camera;
34453
+ this.rotate.camera = this.viewer.camera;
34454
+ };
34455
+ this.onKeyDown = (event) => {
34456
+ if (event.key === "Shift")
34457
+ this.rotate.setRotationSnap(Math.PI / 4);
34458
+ };
34459
+ this.onKeyUp = (event) => {
34460
+ if (event.key === "Shift")
34461
+ this.rotate.setRotationSnap(null);
34453
34462
  };
34454
34463
  this.onDoubleClick = (event) => {
34455
34464
  event.stopPropagation();
34456
- this.plane.negate();
34457
- this.viewer.update();
34465
+ this.planeCenter.rotateOnAxis(new Vector3(0, 1, 0), Math.PI);
34466
+ this.transformChange();
34458
34467
  };
34459
34468
  const extentsSize = viewer.extents.getSize(new Vector3()).length() || 1;
34460
34469
  const extentsCenter = viewer.extents.getCenter(new Vector3());
@@ -34463,24 +34472,38 @@ void main() {
34463
34472
  if (!viewer.renderer.clippingPlanes)
34464
34473
  viewer.renderer.clippingPlanes = [];
34465
34474
  viewer.renderer.clippingPlanes.push(this.plane);
34466
- this.planeHelper = new PlaneHelper(this.plane, extentsSize, color, extentsCenter);
34467
- this.viewer.helpers.add(this.planeHelper);
34468
34475
  this.planeCenter = new Object3D();
34469
34476
  this.planeCenter.position.copy(extentsCenter);
34477
+ this.planeCenter.quaternion.setFromUnitVectors(new Vector3(0, 0, -1), normal);
34470
34478
  this.viewer.helpers.add(this.planeCenter);
34471
- this.transform = new TransformControls(viewer.camera, viewer.canvas);
34472
- this.transform.showX = !!normal.x;
34473
- this.transform.showY = !!normal.y;
34474
- this.transform.showZ = !!normal.z;
34475
- this.transform.attach(this.planeCenter);
34476
- this.transform.addEventListener("change", this.transformChange);
34477
- this.transform.addEventListener("dragging-changed", this.transformDrag);
34478
- this.viewer.helpers.add(this.transform.getHelper());
34479
+ this.planeHelper = new PlaneHelper2(extentsSize);
34480
+ this.planeCenter.add(this.planeHelper);
34481
+ this.translate = new TransformControls(viewer.camera, viewer.canvas);
34482
+ this.translate.setSpace("local");
34483
+ this.translate.showX = false;
34484
+ this.translate.showY = false;
34485
+ this.translate.showZ = true;
34486
+ this.translate.attach(this.planeCenter);
34487
+ this.translate.addEventListener("change", this.transformChange);
34488
+ this.translate.addEventListener("dragging-changed", this.translateDrag);
34489
+ this.viewer.helpers.add(this.translate.getHelper());
34490
+ this.rotate = new TransformControls(viewer.camera, viewer.canvas);
34491
+ this.rotate.setMode("rotate");
34492
+ this.rotate.setSpace("local");
34493
+ this.rotate.showX = true;
34494
+ this.rotate.showY = true;
34495
+ this.rotate.showZ = false;
34496
+ this.rotate.attach(this.planeCenter);
34497
+ this.rotate.addEventListener("change", this.transformChange);
34498
+ this.rotate.addEventListener("dragging-changed", this.rotateDrag);
34499
+ this.viewer.helpers.add(this.rotate.getHelper());
34479
34500
  this.viewer.addEventListener("explode", this.updatePlaneSize);
34480
34501
  this.viewer.addEventListener("show", this.updatePlaneSize);
34481
34502
  this.viewer.addEventListener("showall", this.updatePlaneSize);
34482
34503
  this.viewer.addEventListener("changecameramode", this.updateTransformCamera);
34483
34504
  this.viewer.canvas.addEventListener("dblclick", this.onDoubleClick, true);
34505
+ window.addEventListener("keydown", this.onKeyDown);
34506
+ window.addEventListener("keyup", this.onKeyUp);
34484
34507
  this.viewer.update();
34485
34508
  }
34486
34509
  dispose() {
@@ -34489,11 +34512,18 @@ void main() {
34489
34512
  this.viewer.removeEventListener("showall", this.updatePlaneSize);
34490
34513
  this.viewer.removeEventListener("changecameramode", this.updateTransformCamera);
34491
34514
  this.viewer.canvas.removeEventListener("dblclick", this.onDoubleClick, true);
34492
- this.transform.removeEventListener("change", this.transformChange);
34493
- this.transform.removeEventListener("dragging-changed", this.transformDrag);
34494
- this.transform.getHelper().removeFromParent();
34495
- this.transform.detach();
34496
- this.transform.dispose();
34515
+ window.removeEventListener("keydown", this.onKeyDown);
34516
+ window.removeEventListener("keyup", this.onKeyUp);
34517
+ this.translate.removeEventListener("change", this.transformChange);
34518
+ this.translate.removeEventListener("dragging-changed", this.translateDrag);
34519
+ this.translate.getHelper().removeFromParent();
34520
+ this.translate.detach();
34521
+ this.translate.dispose();
34522
+ this.rotate.removeEventListener("change", this.transformChange);
34523
+ this.rotate.removeEventListener("dragging-changed", this.rotateDrag);
34524
+ this.rotate.getHelper().removeFromParent();
34525
+ this.rotate.detach();
34526
+ this.rotate.dispose();
34497
34527
  this.planeHelper.removeFromParent();
34498
34528
  this.planeHelper.dispose();
34499
34529
  this.planeCenter.removeFromParent();
@@ -34503,19 +34533,19 @@ void main() {
34503
34533
 
34504
34534
  class CuttingPlaneXAxisDragger extends CuttingPlaneDragger {
34505
34535
  constructor(viewer) {
34506
- super(viewer, new Vector3(1, 0, 0), 0xff0000);
34536
+ super(viewer, new Vector3(-1, 0, 0));
34507
34537
  }
34508
34538
  }
34509
34539
 
34510
34540
  class CuttingPlaneYAxisDragger extends CuttingPlaneDragger {
34511
34541
  constructor(viewer) {
34512
- super(viewer, new Vector3(0, 1, 0), 0x00ff00);
34542
+ super(viewer, new Vector3(0, -1, 0));
34513
34543
  }
34514
34544
  }
34515
34545
 
34516
34546
  class CuttingPlaneZAxisDragger extends CuttingPlaneDragger {
34517
34547
  constructor(viewer) {
34518
- super(viewer, new Vector3(0, 0, 1), 0x0000ff);
34548
+ super(viewer, new Vector3(0, 0, -1));
34519
34549
  }
34520
34550
  }
34521
34551
 
@@ -35117,6 +35147,12 @@ void main() {
35117
35147
  this.movementSpeed = 0.1;
35118
35148
  this.multiplier = 3;
35119
35149
  this.groundFollowingSkippedFrames = 0;
35150
+ this.GROUND_BOX_HALF_SIZE = 20;
35151
+ this.GROUND_BOX_REFRESH_THRESHOLD = 0.3;
35152
+ this._groundObjectBoxes = new Map();
35153
+ this._activeGroundObjects = [];
35154
+ this._groundBox = new Box3();
35155
+ this._groundBoxCenter = new Vector3();
35120
35156
  this.moveWheel = 0;
35121
35157
  this.mouseDragOn = false;
35122
35158
  this._up = new Vector3();
@@ -35188,6 +35224,9 @@ void main() {
35188
35224
  };
35189
35225
  this.camera = camera;
35190
35226
  this.groundObjects = groundObjects;
35227
+ for (const obj of groundObjects) {
35228
+ this._groundObjectBoxes.set(obj, new Box3().setFromObject(obj));
35229
+ }
35191
35230
  this.raycaster = new Raycaster();
35192
35231
  this.raycaster.near = 0;
35193
35232
  this.raycaster.far = this.EYE_HEIGHT + this.FAILING_DISTANCE;
@@ -35222,10 +35261,29 @@ void main() {
35222
35261
  window.removeEventListener("keyup", this.onKeyUp);
35223
35262
  super.dispose();
35224
35263
  }
35264
+ _rebuildGroundBox(center) {
35265
+ const h = this.GROUND_BOX_HALF_SIZE;
35266
+ this._groundBoxCenter.copy(center);
35267
+ this._groundBox.set(new Vector3(center.x - h, center.y - h * 4, center.z - h), new Vector3(center.x + h, center.y + h * 4, center.z + h));
35268
+ this._activeGroundObjects = this.groundObjects.filter((obj) => {
35269
+ const objectBox = this._groundObjectBoxes.get(obj);
35270
+ return objectBox !== undefined && this._groundBox.intersectsBox(objectBox);
35271
+ });
35272
+ }
35273
+ _needsGroundBoxRebuild(pos) {
35274
+ if (this._activeGroundObjects.length === 0 && this.groundObjects.length > 0)
35275
+ return true;
35276
+ const threshold = this.GROUND_BOX_HALF_SIZE * this.GROUND_BOX_REFRESH_THRESHOLD;
35277
+ return (Math.abs(pos.x - this._groundBoxCenter.x) > threshold || Math.abs(pos.z - this._groundBoxCenter.z) > threshold);
35278
+ }
35225
35279
  updateGroundFollowing() {
35280
+ const pos = this.object.position;
35281
+ if (this._needsGroundBoxRebuild(pos)) {
35282
+ this._rebuildGroundBox(pos);
35283
+ }
35226
35284
  this._up.copy(this.camera.up).negate();
35227
- this.raycaster.set(this.object.position, this._up);
35228
- const intersects = this.raycaster.intersectObjects(this.groundObjects, false);
35285
+ this.raycaster.set(pos, this._up);
35286
+ const intersects = this.raycaster.intersectObjects(this._activeGroundObjects, false);
35229
35287
  if (intersects.length > 0) {
35230
35288
  const groundY = intersects[0].point.y;
35231
35289
  const targetY = groundY + this.EYE_HEIGHT;
@@ -57746,12 +57804,14 @@ js: import "konva/skia-backend";
57746
57804
  if (!this.renderer)
57747
57805
  return;
57748
57806
  this._markup.clearOverlay();
57807
+ this.emitEvent({ type: "clearoverlay" });
57749
57808
  this.update();
57750
57809
  }
57751
57810
  clearSlices() {
57752
57811
  if (!this.renderer)
57753
57812
  return;
57754
57813
  this.renderer.clippingPlanes = [];
57814
+ this.emitEvent({ type: "clearslices" });
57755
57815
  this.update();
57756
57816
  }
57757
57817
  getSelected() {