Skip to content

Commit

Permalink
handle double-click pivot move
Browse files Browse the repository at this point in the history
  • Loading branch information
sdumetz committed Apr 15, 2024
1 parent 2ec9279 commit 32d4e2c
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
17 changes: 17 additions & 0 deletions source/client/components/CVOrbitNavigation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ import { ENavigationType, TNavigationType, INavigation } from "client/schema/set
import CVScene from "./CVScene";
import CVAssetManager from "./CVAssetManager";
import CVARManager from "./CVARManager";
import CVModel2 from "./CVModel2";
import { getMeshTransform } from "client/utils/Helpers";

////////////////////////////////////////////////////////////////////////////////

Expand Down Expand Up @@ -129,6 +131,7 @@ export default class CVOrbitNavigation extends CObject3D
return [
this.ins.orbit,
this.ins.offset,
this.ins.pivot,
];
}

Expand All @@ -147,6 +150,7 @@ export default class CVOrbitNavigation extends CObject3D
super.create();

this.system.on<IPointerEvent>(["pointer-down", "pointer-up", "pointer-move"], this.onPointer, this);
this.system.on<ITriggerEvent>("double-click", this.onDoubleClick, this);
this.system.on<ITriggerEvent>("wheel", this.onTrigger, this);
this.system.on<IKeyboardEvent>("keydown", this.onKeyboard, this);

Expand Down Expand Up @@ -426,6 +430,19 @@ export default class CVOrbitNavigation extends CObject3D
this._hasChanged = true;
}

protected onDoubleClick(event: ITriggerEvent){
if(event.component.typeName != "CVModel2") return;
const model = event.component as CVModel2;

const meshTransform = getMeshTransform(model.object3D, event.object3D);
const invMeshTransform = meshTransform.clone().invert();
const bounds = model.localBoundingBox.clone().applyMatrix4(meshTransform);
// add mesh parent transforms in this branch
let localPosition = event.view.pickPosition(event as any, bounds).applyMatrix4(invMeshTransform);
this.ins.pivot.setValue(localPosition.toArray());
this.ins.offset.setValue([0, 0, this.ins.offset.value[2]]);
}

protected onTrigger(event: ITriggerEvent)
{
const viewport = event.viewport;
Expand Down
3 changes: 3 additions & 0 deletions source/client/ui/SceneView.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ export default class SceneView extends SystemView
this.ownerDocument.addEventListener("pointermove", this.manipTarget.onPointerMove); // To catch out of frame drag releases
this.ownerDocument.addEventListener("pointerup", this.onPointerUpOrCancel); // To catch out of frame drag releases
this.ownerDocument.addEventListener("pointercancel", this.onPointerUpOrCancel); // To catch out of frame drag releases
this.addEventListener("dblclick", this.manipTarget.onDoubleClick);
this.addEventListener("wheel", this.manipTarget.onWheel);
this.addEventListener("contextmenu", this.manipTarget.onContextMenu);
this.addEventListener("keydown", this.manipTarget.onKeyDown);
Expand Down Expand Up @@ -166,6 +167,7 @@ export default class SceneView extends SystemView
this.ownerDocument.addEventListener("pointermove", this.manipTarget.onPointerMove); // To catch out of frame drag releases
this.ownerDocument.addEventListener("pointerup", this.onPointerUpOrCancel); // To catch out of frame drag releases
this.ownerDocument.addEventListener("pointercancel", this.onPointerUpOrCancel); // To catch out of frame drag releases
this.addEventListener("dblclick", this.manipTarget.onDoubleClick);
this.addEventListener("wheel", this.manipTarget.onWheel);
this.addEventListener("contextmenu", this.manipTarget.onContextMenu);
this.addEventListener("keydown", this.manipTarget.onKeyDown);
Expand All @@ -184,6 +186,7 @@ export default class SceneView extends SystemView
this.ownerDocument.removeEventListener("pointermove", this.manipTarget.onPointerMove); // To catch out of frame drag releases
this.ownerDocument.removeEventListener("pointerup", this.onPointerUpOrCancel); // To catch out of frame drag releases
this.ownerDocument.removeEventListener("pointercancel", this.onPointerUpOrCancel); // To catch out of frame drag releases
this.removeEventListener("dblclick", this.manipTarget.onDoubleClick);
this.removeEventListener("wheel", this.manipTarget.onWheel);
this.removeEventListener("contextmenu", this.manipTarget.onContextMenu);
this.removeEventListener("keydown", this.manipTarget.onKeyDown);
Expand Down

0 comments on commit 32d4e2c

Please sign in to comment.