//-------------------------------------------------------------------------------------------------- public void TouchMove(int id, Point pos) { if (ViewportController == null) { return; } if (_MultiTouch) { // Double touch, pan double dx = 0, dy = 0; if (_FirstId == id) { dx = pos.X - _FirstPos.X; dy = pos.Y - _FirstPos.Y; _FirstPos = pos; } else if (_SecondId == id) { dx = pos.X - _SecondPos.X; dy = pos.Y - _SecondPos.Y; _SecondPos = pos; } double scale = ViewportController.Viewport.Scale * 1.1; ViewportController.Pan(dx / scale, -dy / scale); _MoveCallCount++; // zoom and roll var newFirstToSecond = Point.Subtract(_FirstPos, _SecondPos); var diffDistance = newFirstToSecond.Length - _FirstToSecond.Length; ViewportController.Zoom(diffDistance / 100.0); var angle = Vector.AngleBetween(_FirstToSecond, newFirstToSecond); ViewportController.Rotate(0, 0, angle); _FirstToSecond = newFirstToSecond; } else { // Single touch, rotate if (_FirstId == id) { var dx = (pos.X - _FirstPos.X) * 0.25; var dy = (pos.Y - _FirstPos.Y) * 0.25; ViewportController.Rotate(dy, -dx, 0.0); _FirstPos = pos; _MoveCallCount++; } } if (_MoveCallCount > 3) { // Touch events are propagated to mouse events. If we do not cancel selection, // the MouseUp event will select the body moved under the pointer. ViewportController.WorkspaceController.CancelSelection(); } }
//-------------------------------------------------------------------------------------------------- public void TouchMove(int id, Point pos) { if (ViewportController == null) { return; } if (_MultiTouch) { // Double touch, pan mode if (_FirstId == id) { var dx = (pos.X - _FirstPos.X) / 2.0; var dy = (pos.Y - _FirstPos.Y) / 2.0; ViewportController.Pan(dx, -dy); _FirstPos = pos; _MoveCallCount++; } else if (_SecondId == id) { var dx = (pos.X - _SecondPos.X) / 2.0; var dy = (pos.Y - _SecondPos.Y) / 2.0; ViewportController.Pan(dx, -dy); _SecondPos = pos; _MoveCallCount++; } } else { // Single touch, rotate mode if (_FirstId == id) { var dx = (pos.X - _FirstPos.X) * 0.05; var dy = (pos.Y - _FirstPos.Y) * 0.05; ViewportController.Rotate(dy, -dx, 0.0); _FirstPos = pos; _MoveCallCount++; } } if (_MoveCallCount > 3) { // Touch events are propagated to mouse events. If we do not cancel selection, // the MouseUp event will select the body moved under the pointer. ViewportController.WorkspaceController.CancelSelection(); } }