diff options
author | weigao <weigao@multicorewareinc.com> | 2014-06-16 23:08:00 -0700 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2014-06-17 07:43:58 +0200 |
commit | 6c4ce5f351f7acf2086f5bf2b67ef15ffcda0c51 (patch) | |
tree | 1004d919409207ef2c4e32e44779aaee7242d608 /chart2/source | |
parent | c52e440377750ef83cfd65ffdd7f24165123fd2d (diff) |
modify the default view angle
Change-Id: Ic7c901108a290a9d9c5a8564b6eefa7ed32a9e1f
Diffstat (limited to 'chart2/source')
-rw-r--r-- | chart2/source/view/charttypes/GL3DBarChart.cxx | 61 | ||||
-rw-r--r-- | chart2/source/view/inc/GL3DBarChart.hxx | 6 |
2 files changed, 57 insertions, 10 deletions
diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 334b74060860..88f49dd840b3 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -38,7 +38,8 @@ GL3DBarChart::GL3DBarChart( mnMaxY(0), mnCornerId(0), mbBlockUserInput(false), - mbNeedsNewRender(true) + mbNeedsNewRender(true), + mbCameraInit(false) { Size aSize = mrWindow.GetSizePixel(); mpRenderer->SetSize(aSize); @@ -63,9 +64,9 @@ GL3DBarChart::~GL3DBarChart() namespace { -const float TEXT_HEIGHT = 15.0f; -const float DEFAULT_CAMERA_HEIGHT = 500.0f; -const size_t STEPS = 100; +const float TEXT_HEIGHT = 10.0f; +float DEFAULT_CAMERA_HEIGHT = 500.0f; +const size_t STEPS = 200; const sal_uLong TIMEOUT = 5; const sal_uInt32 ID_STEP = 10; @@ -268,12 +269,28 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer mnMaxX = nMaxPointCount * (BAR_SIZE_X + BAR_DISTANCE_X) + 40; mnMaxY = nSeriesIndex * (BAR_SIZE_Y + BAR_DISTANCE_Y) + 40; - - maCameraPosition = glm::vec3(-30, -30, DEFAULT_CAMERA_HEIGHT); - mpCamera->setPosition(maCameraPosition); - maCameraDirection = glm::vec3(mnMaxX/2, mnMaxY/2, 0); - mpCamera->setDirection(maCameraDirection); - + if (!mbCameraInit) + { + mnDistance = sqrt(mnMaxX * mnMaxX + mnMaxY * mnMaxY + DEFAULT_CAMERA_HEIGHT * DEFAULT_CAMERA_HEIGHT); + maDefaultCameraDirection = glm::vec3(mnMaxX * 0.4, mnMaxY * 0.35, 0); + maDefaultCameraPosition = glm::vec3(maDefaultCameraDirection.x, maDefaultCameraDirection.y - mnDistance, DEFAULT_CAMERA_HEIGHT * 2); + mnCornerId = 0; + mbCameraInit = true; + float pi = 3.1415926f; + float angleX = -pi / 6.5f; + float angleZ = -pi / 8.0f; + glm::mat4 maDefaultRotateMatrix = glm::eulerAngleYXZ(0.0f, angleX, angleZ); + maDefaultCameraPosition = glm::vec3(maDefaultRotateMatrix * glm::vec4(maDefaultCameraPosition, 1.0f)); + maCameraPosition = maDefaultCameraPosition; + maCameraDirection = maDefaultCameraDirection; + mpCamera->setPosition(maCameraPosition); + mpCamera->setDirection(maCameraDirection); + } + else + { + mpCamera->setPosition(maCameraPosition); + mpCamera->setDirection(maCameraDirection); + } mbNeedsNewRender = true; } @@ -330,6 +347,30 @@ public: } +void GL3DBarChart::moveToDefault() +{ + mnStepsTotal = STEPS; + mnStep = 0; + mbBlockUserInput = true; + glm::vec3 maTargetPosition = maDefaultCameraPosition; + maStep = (maTargetPosition - maCameraPosition)/((float)mnStepsTotal); + + glm::vec3 maTargetDirection = maDefaultCameraDirection; + maStepDirection = (maTargetDirection - maCameraDirection)/((float)mnStepsTotal); + while((mnStep < mnStepsTotal) && mbBlockUserInput) + { + ++mnStep; + maCameraPosition += maStep; + mpCamera->setPosition(maCameraPosition); + maCameraDirection += maStepDirection; + mpCamera->setDirection(maCameraDirection); + render(); + } + maShapes.pop_back(); + mbBlockUserInput = false; + mnStep = 0; +} + void GL3DBarChart::clickedAt(const Point& rPos, sal_uInt16 nButtons) { if(mbBlockUserInput) diff --git a/chart2/source/view/inc/GL3DBarChart.hxx b/chart2/source/view/inc/GL3DBarChart.hxx index 056690410508..d3426a3873d5 100644 --- a/chart2/source/view/inc/GL3DBarChart.hxx +++ b/chart2/source/view/inc/GL3DBarChart.hxx @@ -58,6 +58,7 @@ public: private: void moveToCorner(); + void moveToDefault(); glm::vec3 getCornerPosition(sal_Int8 nCornerId); DECL_LINK(MoveCamera, void*); @@ -77,6 +78,9 @@ private: glm::vec3 maCameraPosition; glm::vec3 maCameraDirection; + glm::vec3 maDefaultCameraPosition; + glm::vec3 maDefaultCameraDirection; + Timer maTimer; glm::vec3 maStep; glm::vec3 maStepDirection; @@ -84,6 +88,7 @@ private: size_t mnStepsTotal; float mnMaxX; float mnMaxY; + float mnDistance; /** * 0 = corner at (0,0,0); * numbering counter clockwise @@ -107,6 +112,7 @@ private: std::map<sal_uInt32, const BarInformation> maBarMap; bool mbBlockUserInput; bool mbNeedsNewRender; + bool mbCameraInit; }; } |