diff --git a/docs/camera_manipulation.mdx b/docs/camera_manipulation.mdx deleted file mode 100644 index dea46481..00000000 --- a/docs/camera_manipulation.mdx +++ /dev/null @@ -1,63 +0,0 @@ -## Camera Manipulation (Flutter) - -> You can find the entire project below in the [flutter/quickstart](https://github.com/nmfisher/thermion/examples/flutter/camera_manipulation) folder. - -A `ThermionListenerWidget` is one option for manipulating the camera with an input device (e.g. mouse or touchscreen gestures). - -This will generally wrap a `ThermionWidget`, meaning the entire viewport will act as a receiver for gesture events. - -> You can position this independently (for example, stacked vertically beneath the viewport), but this will not translate picking queries correctly. - -``` -@override - Widget build(BuildContext context) { - return Stack(children: [ - if (_thermionViewer != null) - Positioned.fill( - child: ThermionListenerWidget( - inputHandler: - DelegateInputHandler.fixedOrbit(_thermionViewer!) - ..setActionForType(InputType.MMB_HOLD_AND_MOVE, InputAction.ROTATE) - ..setActionForType(InputType.SCALE1, InputAction.ROTATE) - ..setActionForType(InputType.SCALE2, InputAction.ZOOM) - ..setActionForType(InputType.SCROLLWHEEL, InputAction.ZOOM), - child: ThermionWidget( - viewer: _thermionViewer!, - ))), - ]); -``` - -`ThermionListenerWidget` is a very simple widget; it simply forwards pointer, gesture and keyboard events to the provided [InputHandler], which must decide how to interpret those events. - -For example, one [InputHandler] implementation might interpret mouse pointer movement as "rotate the camera", whereas a separate implementation might interpret it as "translate this specific entity". - -Thermion provides two default InputHandler implementations for manipulating the camera: [DelegateInputHandler.fixedOrbit] and [DelegateInputHandler.flight]. - -[DelegateInputHandler.fixedOrbit] will rotate the camera in a fixed orbit around a target point (the origin, by default), and also allow zooming in/out (subject to a minimum distance, which is configurable). - -By default, [DelegateInputHandler.fixedOrbit] will: -- rotate the camera when the middle mouse button is held and the pointer is moved (on desktop), and when a single swipe left/right/up/down is detected (on mobile) -- zoom the camera when the scroll wheel is scrolled up/down (on desktop), and when a pinch gesture is detected (on mobile) - -You can change the action for a specific input type by calling `setActionForType`; for example, if you wanted to rotate the camera by moving the mouse pointer while holding the left mouse button, you would call: - -``` -setActionForType(InputType.LMB_HOLD_AND_MOVE, InputAction.ROTATE) -``` - -See the [InputType] and [InputAction] enums for available input types and actions. - -[DelegateInputHandler.flight] will translate keyboard and mouse/touchscreen gestures to free flight camera manipulation. - -By default: -- holding the middle mouse button will control the pitch/roll/yaw of the camera -- holding the left mouse button will pan the camera left/right/up/down -- the middle mouse button will zoom/dolly the camera in/out -- the WASD keys will pan the camera left/right/up/down and dolly the camera forward/backward - -If these don't exactly fit your use case, you can create your own [InputHandler] implementation. If you think it would be useful to other users, please feel free to submit a PR for your implementation to be included in the base Thermion package. - - - - -