bool PoiRingTouchController::HandleTouchMove(const AppInterface::TouchData &data, const Eegeo::Camera::RenderCamera &renderCamera, Eegeo::Camera::GlobeCamera::GlobeCameraController& globeCameraController) { if (m_myPinCreationModel.GetCreationStage() != Ring) { return false; } if (m_isDragging) { float screenPixelX = data.point.GetX(); float screenPixelY = data.point.GetY(); Eegeo::dv3 rayDirection; Eegeo::Camera::CameraHelpers::GetScreenPickRay(renderCamera, screenPixelX, screenPixelY, rayDirection); Eegeo::dv3 rayOrigin = globeCameraController.ComputeNonFlattenedCameraPosition(); Eegeo::dv3 rayIntersectionPoint; double intersectionParam; bool rayPick = PerformRayPick(rayOrigin, rayDirection, rayIntersectionPoint, intersectionParam); if (rayPick) { m_myPinCreationModel.SetPosition(rayIntersectionPoint); } return true; } return false; }
bool PoiRingTouchController::HandleTouchDown(const AppInterface::TouchData& data, const Eegeo::Camera::RenderCamera& renderCamera, Eegeo::Camera::GlobeCamera::GlobeCameraController& globeCameraController) { if (m_myPinCreationModel.GetCreationStage() != Ring) { return false; } float screenPixelX = data.point.GetX(); float screenPixelY = data.point.GetY(); Eegeo::dv3 rayDirection; Eegeo::Camera::CameraHelpers::GetScreenPickRay(renderCamera, screenPixelX, screenPixelY, rayDirection); Eegeo::dv3 rayOrigin = globeCameraController.ComputeNonFlattenedCameraPosition(); Eegeo::dv3 rayIntersectionPoint; double intersectionParam; bool rayPick = PerformRayPick(rayOrigin, rayDirection, rayIntersectionPoint, intersectionParam); if (rayPick) { Eegeo::dv3 iconPosition; float iconSize; m_poiRingController.GetIconPositionAndSize(iconPosition, iconSize); Eegeo::dv3 spherePosition; float sphereRadius; m_poiRingController.GetSpherePositionAndRadius(spherePosition, sphereRadius); bool hitIcon = Eegeo::Geometry::IntersectionTests::TestRaySphere(rayOrigin, rayDirection, iconPosition, iconSize/2.0f); if ((rayIntersectionPoint - spherePosition).Length() < sphereRadius || hitIcon) { m_isDragging = true; return true; } } return false; }