@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.
- package/dist/viewer-three.js +99 -39
- package/dist/viewer-three.js.map +1 -1
- package/dist/viewer-three.min.js +2 -2
- package/dist/viewer-three.module.js +97 -37
- package/dist/viewer-three.module.js.map +1 -1
- package/lib/Viewer/controls/WalkControls.d.ts +8 -0
- package/lib/Viewer/draggers/CuttingPlaneDragger.d.ts +9 -5
- package/lib/Viewer/helpers/PlaneHelper2.d.ts +8 -0
- package/package.json +5 -5
- package/src/Viewer/Viewer.ts +4 -0
- package/src/Viewer/controls/WalkControls.ts +41 -3
- package/src/Viewer/draggers/CuttingPlaneDragger.ts +65 -24
- package/src/Viewer/draggers/CuttingPlaneXAxis.ts +1 -1
- package/src/Viewer/draggers/CuttingPlaneYAxis.ts +1 -1
- package/src/Viewer/draggers/CuttingPlaneZAxis.ts +1 -1
- package/src/Viewer/helpers/{PlaneHelper.ts → PlaneHelper2.ts} +6 -23
- package/lib/Viewer/helpers/PlaneHelper.d.ts +0 -11
package/dist/viewer-three.js
CHANGED
|
@@ -21255,7 +21255,7 @@
|
|
|
21255
21255
|
this.material.dispose();
|
|
21256
21256
|
}
|
|
21257
21257
|
}
|
|
21258
|
-
|
|
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
|
|
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
|
|
33648
|
-
constructor(
|
|
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 = "
|
|
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.
|
|
33676
|
-
this.
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
34457
|
-
this.
|
|
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.
|
|
34472
|
-
this.
|
|
34473
|
-
this.
|
|
34474
|
-
this.
|
|
34475
|
-
this.
|
|
34476
|
-
this.
|
|
34477
|
-
this.
|
|
34478
|
-
this.
|
|
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
|
-
|
|
34493
|
-
|
|
34494
|
-
this.
|
|
34495
|
-
this.
|
|
34496
|
-
this.
|
|
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)
|
|
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)
|
|
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)
|
|
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(
|
|
35228
|
-
const intersects = this.raycaster.intersectObjects(this.
|
|
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() {
|