summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorweigao <weigao@multicorewareinc.com>2014-06-16 23:08:00 -0700
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2014-06-17 07:43:58 +0200
commit6c4ce5f351f7acf2086f5bf2b67ef15ffcda0c51 (patch)
tree1004d919409207ef2c4e32e44779aaee7242d608
parentc52e440377750ef83cfd65ffdd7f24165123fd2d (diff)
modify the default view angle
Change-Id: Ic7c901108a290a9d9c5a8564b6eefa7ed32a9e1f
-rw-r--r--chart2/source/view/charttypes/GL3DBarChart.cxx61
-rw-r--r--chart2/source/view/inc/GL3DBarChart.hxx6
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;
};
}