chart2/source/view/charttypes/GL3DBarChart.cxx | 74 +++++++++++++++++-------- 1 file changed, 52 insertions(+), 22 deletions(-)
New commits: commit 5c9ca2fb863e84ae2328f6b0186e137cd5f02ed6 Author: xukai <[email protected]> Date: Fri Sep 19 15:18:41 2014 +0800 update effect of bar click Change-Id: Ibb09537d418e78c7fc9b6760988abd56505268b3 Reviewed-on: https://gerrit.libreoffice.org/11539 Reviewed-by: Kohei Yoshida <[email protected]> Tested-by: Kohei Yoshida <[email protected]> diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index d07653f..9b44421 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -567,6 +567,19 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer { SharedResourceAccess(maCond1, maCond2); osl::MutexGuard aGuard(maMutex); + mnPreSelectBarId = mnSelectBarId; + mnSelectBarId -= 10; + sal_uInt32 nSelectRow = (mnSelectBarId - SHAPE_START_ID) / ID_STEP / (mnBarsInRow + 1); + sal_uInt32 nPreSelectRow = (mnPreSelectBarId - SHAPE_START_ID) / ID_STEP / (mnBarsInRow + 1); + if(nSelectRow != nPreSelectRow) + { + mnSelectBarId = mnPreSelectBarId; + } + else + { + mpRenderer->EndClick(); + mpRenderer->StartClick(mnSelectBarId); + } mpRenderer->ReleaseShapes(); // Each series of data flows from left to right, and multiple series are // stacked vertically along y axis. commit 32d267f556634d3bbceba4978efc4d8cb62b148c Author: xukai <[email protected]> Date: Mon Sep 22 20:08:26 2014 +0800 make Camera flythrough looks more smooth Change-Id: I46f79bb6ede2da133fe8971319fc4b7257848382 Reviewed-on: https://gerrit.libreoffice.org/11590 Reviewed-by: Kohei Yoshida <[email protected]> Tested-by: Kohei Yoshida <[email protected]> diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 3474de3..d07653f 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -209,6 +209,7 @@ protected: private: void ProcessMouseEvent(); void MoveCamera(); + void MoveCameraToBar(); void MoveToBar(); void MoveToDefault(); void MoveToCorner(); @@ -224,11 +225,14 @@ private: bool mbNeedFlyBack; glm::vec3 maStep; glm::vec3 maStepDirection; + glm::mat4 maMatrixStep; size_t mnStep; size_t mnStepsTotal; TimeValue maClickFlyBackStartTime; TimeValue maClickFlyBackEndTime; OUString maFPS; + glm::vec3 maTargetPosition; + glm::vec3 maTargetDirection; }; void RenderBenchMarkThread::MoveCamera() @@ -246,21 +250,36 @@ void RenderBenchMarkThread::MoveCamera() mnStep = 0; mbExecuting = false; mbAutoFlyExecuting = false; - if ((mpChart->maRenderEvent == EVENT_CLICK) || (mpChart->maRenderEvent == EVENT_AUTO_FLY)) - { - mbNeedFlyBack = true; - osl_getSystemTime(&maClickFlyBackStartTime); - osl_getSystemTime(&maClickFlyBackEndTime); - mpChart->maRenderEvent = EVENT_SHOW_SELECT; - } - else - { - mbNeedFlyBack = false; - mpChart->maRenderEvent = EVENT_NONE; - } + mbNeedFlyBack = false; + mpChart->maRenderEvent = EVENT_NONE; + } +} + +void RenderBenchMarkThread::MoveCameraToBar() +{ + if(mnStep < mnStepsTotal) + { + ++mnStep; + mpChart->mpRenderer->AddMatrixDiff(maMatrixStep); + } + else + { + mpChart->maCameraPosition = maTargetPosition; + mpChart->maCameraDirection = maTargetDirection; + mpChart->mpCamera->setPosition(maTargetPosition); + mpChart->mpCamera->setDirection(maTargetDirection); + mpChart->mpRenderer->ResetMatrixDiff(); + mnStep = 0; + mbExecuting = false; + mbAutoFlyExecuting = false; + mbNeedFlyBack = true; + osl_getSystemTime(&maClickFlyBackStartTime); + osl_getSystemTime(&maClickFlyBackEndTime); + mpChart->maRenderEvent = EVENT_SHOW_SELECT; } } + void RenderBenchMarkThread::MoveToDefault() { if ((mpChart->maCameraPosition == mpChart->maDefaultCameraDirection) && @@ -301,21 +320,20 @@ void RenderBenchMarkThread::MoveToBar() const GL3DBarChart::BarInformation& rBarInfo = itr->second; mnStep = 0; mnStepsTotal = STEPS; - glm::vec3 maTargetPosition = rBarInfo.maPos; + maTargetPosition = rBarInfo.maPos; maTargetPosition.z += 240; maTargetPosition.x += BAR_SIZE_X / 2.0f; - glm::vec3 maTargetDirection = rBarInfo.maPos; + maTargetDirection = rBarInfo.maPos; maTargetDirection.x += BAR_SIZE_X / 2.0f; maTargetDirection.y += BAR_SIZE_Y / 2.0f; maTargetPosition.y = maTargetDirection.y - 240; - maStep = (maTargetPosition - mpChart->maCameraPosition)/((float)mnStepsTotal); - maStepDirection = (maTargetDirection - mpChart->maCameraDirection)/((float)mnStepsTotal); + maMatrixStep = mpChart->mpRenderer->GetDiffOfTwoCameras(mpChart->maCameraPosition, maTargetPosition, mpChart->maCameraDirection, maTargetDirection)/((float)mnStepsTotal); mpChart->maClickCond.set(); mbExecuting = true; mbNeedFlyBack = false; mpChart->mpRenderer->StartClick(mpChart->mnSelectBarId); } - MoveCamera(); + MoveCameraToBar(); } void RenderBenchMarkThread::AutoMoveToBar() @@ -332,20 +350,19 @@ void RenderBenchMarkThread::AutoMoveToBar() const GL3DBarChart::BarInformation& rBarInfo = itr->second; mnStep = 0; mnStepsTotal = STEPS; - glm::vec3 maTargetPosition = rBarInfo.maPos; + maTargetPosition = rBarInfo.maPos; maTargetPosition.z += 240; maTargetPosition.x += BAR_SIZE_X / 2.0f; - glm::vec3 maTargetDirection = rBarInfo.maPos; + maTargetDirection = rBarInfo.maPos; maTargetDirection.x += BAR_SIZE_X / 2.0f; maTargetDirection.y += BAR_SIZE_Y / 2.0f; maTargetPosition.y = maTargetDirection.y - 240; - maStep = (maTargetPosition - mpChart->maCameraPosition)/((float)mnStepsTotal); - maStepDirection = (maTargetDirection - mpChart->maCameraDirection)/((float)mnStepsTotal); + maMatrixStep = mpChart->mpRenderer->GetDiffOfTwoCameras(mpChart->maCameraPosition, maTargetPosition, mpChart->maCameraDirection, maTargetDirection)/((float)mnStepsTotal); mpChart->mpRenderer->StartClick(mpChart->mnSelectBarId); mbAutoFlyExecuting = true; mbNeedFlyBack = false; } - MoveCamera(); + MoveCameraToBar(); } void RenderBenchMarkThread::MoveToCorner() _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
