supermedium/superframe

[orbit-controls] Conflicts with TransformControls

Closed this issue · 6 comments

How to deactivate orbit-controls when using the transform controls?

okay I got it.. i just added an event listener

let transform_controls = new TransformControls(camera, scene.sceneEl.renderer.domElement)
    transform_controls.attach(elem)
    transform_controls.addEventListener( 'dragging-changed', function ( event ) {
        current_camera = document.getElementById('camera')
        if (event.value) {
            current_camera.pause()
            return
        }

        current_camera.play()
    } )

another problem is that after I move the entity, the camera returns to its target coordinate.. it doesn't stay in the previous position

This seems to be a problem specific to your project code. You'll probably have a better chance of finding a solution to your issue on WebXR Discord aframe channel if you provide a glitch example of the issue.

I fixed the problem by removing controls.target = this.target.copy(data.target); in the update function of orbit-control

That's great you find a fix. Hard to tell if it's a good one or not without a full example of what you're doing and how you switch between the two controls. You can close the issue if this change looks good to you.

For documentation purposes here is my code:

    const elem = document.getElementById(primitive.id).getObject3D('mesh')    
    const camera = document.getElementById('camera').getObject3D('camera')

    let transform_controls = new TransformControls(camera, scene.sceneEl.renderer.domElement)
    transform_controls.attach(elem)
    transform_controls.addEventListener('dragging-changed', function (event) {
        // disable orbit control when doing transform(translate, rotate and scale)
        orbit_control.enabled = !event.value
    })
    transform_controls.addEventListener('objectChange', (e) => {
        // update selected model
        updateControlModel(e.target.object)
    })
    scene.object3D.add(transform_controls)

in my orbit-control.js

                    // controls.target = this.target.copy(data.target);
                    controls.cursor = this.cursor.copy(data.cursor);
                    controls.autoRotate = data.autoRotate;
                    controls.autoRotateSpeed = data.autoRotateSpeed;
                    controls.dampingFactor = data.dampingFactor;
                    controls.enabled = data.enabled;
                    controls.enableDamping = data.enableDamping;
                    controls.enablePan = data.enablePan;
                    controls.enableRotate = data.enableRotate;
                    controls.enableZoom = data.enableZoom;
                    controls.keyPanSpeed = data.keyPanSpeed;
                    controls.maxPolarAngle = THREE.MathUtils.degToRad(data.maxPolarAngle);
                    controls.maxAzimuthAngle = THREE.MathUtils.degToRad(data.maxAzimuthAngle);
                    controls.maxDistance = data.maxDistance;
                    controls.minDistance = data.minDistance;
                    controls.minPolarAngle = THREE.MathUtils.degToRad(data.minPolarAngle);
                    controls.minTargetRadius = data.minTargetRadius;
                    controls.maxTargetRadius = data.maxTargetRadius;
                    controls.minAzimuthAngle = THREE.MathUtils.degToRad(data.minAzimuthAngle);
                    controls.minZoom = data.minZoom;
                    controls.maxZoom = data.maxZoom;
                    controls.panSpeed = data.panSpeed;
                    controls.rotateSpeed = data.rotateSpeed;
                    controls.screenSpacePanning = data.screenSpacePanning;
                    controls.zoomSpeed = data.zoomSpeed;
                    controls.zoomToCursor = data.zoomToCursor;