Hi all,
I am working on developing a user interface that displays an animated camera 
view. I need to be able to pan, rotate and zoom the view. I have implemented 
the use of the QML Camera component and managed to get both zoom and rotate 
working via PinchArea and MultipPointTouchArea. My current issue is that I am 
not able to understand how to define separate functionalities for various touch 
points. Ie. I would like it to behave differently if the user swipes with one 
finger, or multiple fingers. A one finger swipe should allow for view rotation 
and a two finger swipe should translate the view. I have tried to find examples 
online but have come up short. All though the documentation for 
MultiPointTouchArea does describe the capability to nest MultiPointTouchAreas 
to handle two finger or one finger touches separately I have not been able to 
find any examples demonstrating how this might be done. I have tried using the 
Boolean 'pressed' values to see if each touch point is selected how ever this 
does not seem to work as anticipated. If anyone could point me to some examples 
or explain to me a solution it would be greatly appreciated!

Relevant Code:

SimpleCamera.qml

               Connections {
                              target: window
                              onZoomChanged: {
                                             root.zoom = zoom;
                              }
                              onRelativeZoomChanged: {
                                             root.zoom *= zoom;
                              }
                              onRotateView: {
                                             camera.tiltAboutViewCenter(a, 
Qt.vector3d(0,     1,   0));
                                             camera.panAboutViewCenter(b, 
upVector);
                              }
                              onTranslateView: {
                                             
camera.translate(Qt.vector3d(x,y,0));
                              }
               }


               property Camera camera : Camera {
                              id: camera
                              position:   
root.positionOffset.plus(Qt.vector3d(0, 0, -2))
                              viewCenter: Qt.vector3d(0, 0, -2)

                              upVector:   root.upVector

                              onPositionChanged: {
                              }
               }

               components: [ camera ]
}

PTZController.qml

Rectangle {
               id: pinchUser
               PinchArea {
                              id: pa
                              anchors.fill: parent
                              pinch.target: pinchUser

                              pinch.dragAxis: Pinch.XAndYAxis

                              onPinchStarted:  {
                                             pinchUser.zoom_ini = 
shipScene.cameraSet.user.cameraView.zoom;
                              }
                              onPinchUpdated:  {
                                             zoomChanged(pinchUser.zoom_ini * 
pinch.scale);
                              }
                              onPinchFinished: {
                                             pinchUser.zoom = 
pinchUser.zoom_ini * pinch.scale;
                              }

                              MouseArea {
                                             id: mouseUser
                                             anchors.fill: parent
                                             scrollGestureEnabled: false
                                             onWheel: {
                                                            
relativeZoomChanged(1 + (wheel.angleDelta.y/1200));
                                             }
                              }
                              MultiPointTouchArea {
                                             anchors.fill: parent
                                             touchPoints: [
                                                            TouchPoint { id: 
rotate },
                                                            TouchPoint { id: 
pan},
                                                            TouchPoint { id: 
pan2}
                                             ]
                                             onPressed: {
                                                            if (!pan.pressed) {
                                                                           
xDistance = rotate.x;//sets the initial x and y values to
                                                                           
yDistance = rotate.y;//discern the distance the mouse has travelled
                                                            }
                                                            if ( rotate.pressed 
&& pan.pressed) {
                                                                           
xDistance = rotate.x;//sets the initial x and y values to
                                                                           
yDistance = rotate.y;//discern the distance the mouse has travelled
                                                            }
                                             }
                                             onUpdated: {
                                                            if ( !pan.pressed ) 
{
                                                                           
currentxDistance = xDistance - rotate.x;//find the distance the mouse has 
travelled
                                                                           
currentyDistance = -(yDistance - rotate.y);
                                                                           
rotateView(currentyDistance, currentxDistance);
                                                            }
                                                            else if ( 
rotate.pressed && pan.pressed) {
                                                                           
currentxDistance = xDistance - rotate.x;//find the distance the mouse has 
travelled
                                                                           
currentyDistance = -(yDistance - rotate.y);
                                                                           
translateView(currentxDistance, currentyDistance);
                                                            }
                                                            xDistance = 
rotate.x;//reset x and y values to last point used
                                                            yDistance = 
rotate.y;//to maintain consistent distance increments
                                             }
                              }
               }
}


Emily
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to