[Libreoffice-commits] core.git: 7 commits - chart2/source sc/source
haochen
haochen at multicorewareinc.com
Mon Jun 16 22:49:09 PDT 2014
chart2/source/view/charttypes/GL3DBarChart.cxx | 83 +++++++++++++-----
chart2/source/view/inc/GL3DBarChart.hxx | 6 +
chart2/source/view/main/GL3DRenderer.cxx | 2
sc/source/core/opencl/formulagroupcl.cxx | 110 ++++++++++++++-----------
sc/source/core/opencl/op_logical.cxx | 54 +++++++++---
sc/source/core/opencl/opbase.cxx | 48 +++++++---
sc/source/core/opencl/opbase.hxx | 5 -
sc/source/ui/namedlg/namedefdlg.cxx | 1
8 files changed, 210 insertions(+), 99 deletions(-)
New commits:
commit 3ad748accd49b128edeb979969d2100af8902624
Author: haochen <haochen at multicorewareinc.com>
Date: Fri Jun 13 11:26:12 2014 +0800
GPU Calc:Support nested formulae expansion for simple nested
Change-Id: If1ae42a5481cf76942ff1ac5e0ee31a94159badd
diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx
index 07900ad..e19d4a2 100644
--- a/sc/source/core/opencl/formulagroupcl.cxx
+++ b/sc/source/core/opencl/formulagroupcl.cxx
@@ -1256,12 +1256,12 @@ public:
ss << ", ";
vSubArguments[i]->GenSlidingWindowDecl(ss);
}
- ss << ") {\n\t";
- ss << "double tmp = " << GetBottom() <<";\n\t";
- ss << "int gid0 = get_global_id(0);\n\t";
+ ss << ") {\n";
+ ss << "double tmp = " << GetBottom() <<";\n";
+ ss << "int gid0 = get_global_id(0);\n";
if (isAverage())
- ss << "int nCount = 0;\n\t";
- ss << "double tmpBottom;\n\t";
+ ss << "int nCount = 0;\n";
+ ss << "double tmpBottom;\n";
unsigned i = vSubArguments.size();
while (i--)
{
@@ -1292,60 +1292,52 @@ public:
if (pCur->GetType() == formula::svSingleVectorRef)
{
-#ifdef ISNAN
const formula::SingleVectorRefToken* pSVR =
static_cast< const formula::SingleVectorRefToken* >(pCur);
- ss << "if (gid0 < " << pSVR->GetArrayLength() << "){\n\t\t";
-#else
-#endif
+ ss << "if (gid0 < " << pSVR->GetArrayLength() << "){\n";
}
else if (pCur->GetType() == formula::svDouble)
{
-#ifdef ISNAN
- ss << "{\n\t\t";
-#endif
- }
- else
- {
+ ss << "{\n";
}
}
-#ifdef ISNAN
if(ocPush==vSubArguments[i]->GetFormulaToken()->GetOpCode())
{
- ss << "tmpBottom = " << GetBottom() << ";\n\t\t";
+ ss << "tmpBottom = " << GetBottom() << ";\n";
ss << "if (isNan(";
ss << vSubArguments[i]->GenSlidingWindowDeclRef();
- ss << "))\n\t\t\t";
- ss << "tmp = ";
- ss << Gen2("tmpBottom", "tmp") << ";\n\t\t";
- ss << "else{\n\t\t\t";
- ss << "tmp = ";
+ ss << "))\n";
+ if ( ZeroReturnZero() )
+ ss << " return 0;\n";
+ else
+ {
+ ss << " tmp = ";
+ ss << Gen2("tmpBottom", "tmp") << ";\n";
+ }
+ ss << "else{\n";
+ ss << " tmp = ";
ss << Gen2(vSubArguments[i]->GenSlidingWindowDeclRef(), "tmp");
- ss << ";\n\t\t\t";
- ss << "}\n\t";
- ss << "}\n\t";
+ ss << ";\n";
+ ss << " }\n";
+ ss << "}\n";
+ if ( vSubArguments[i]->GetFormulaToken()->GetType() ==
+ formula::svSingleVectorRef&& ZeroReturnZero() )
+ {
+ ss << "else{\n";
+ ss << " return 0;\n";
+ ss << " }\n";
+ }
}
else
{
ss << "tmp = ";
ss << Gen2(vSubArguments[i]->GenSlidingWindowDeclRef(), "tmp");
- ss << ";\n\t";
+ ss << ";\n";
}
-#else
- ss << "tmp = ";
- // Generate the operation in binary form
- ss << Gen2(vSubArguments[i]->GenSlidingWindowDeclRef(), "tmp");
- ss << ";\n\t";
-#endif
}
ss << "return tmp";
-#ifdef ISNAN
if (isAverage())
ss << "*pow((double)nCount,-1.0)";
-#else
- if (isAverage())
- ss << "/(double)"<<nItems;
-#endif
ss << ";\n}";
}
virtual bool isAverage() const { return false; }
@@ -1535,6 +1527,11 @@ public:
static_cast< const formula::SingleVectorRefToken*>
(vSubArguments[i]->GetFormulaToken());
temp3<<pSVR->GetArrayLength();
+ temp3 << ")||isNan("<<vSubArguments[i]
+ ->GenSlidingWindowDeclRef();
+ temp3 << ")?0:";
+ temp3 << vSubArguments[i]->GenSlidingWindowDeclRef();
+ temp3 << ")";
}
else if(vSubArguments[i]->GetFormulaToken()->GetType() ==
formula::svDoubleVectorRef){
@@ -1542,12 +1539,13 @@ public:
static_cast< const formula::DoubleVectorRefToken*>
(vSubArguments[i]->GetFormulaToken());
temp3<<pSVR->GetArrayLength();
- }
- temp3 << ")||isNan("<<vSubArguments[i]
+ temp3 << ")||isNan("<<vSubArguments[i]
->GenSlidingWindowDeclRef(true);
temp3 << ")?0:";
temp3 << vSubArguments[i]->GenSlidingWindowDeclRef(true);
temp3 << ")";
+ }
+
}
else
temp3 << vSubArguments[i]->GenSlidingWindowDeclRef(true);
@@ -1604,6 +1602,11 @@ public:
static_cast< const formula::SingleVectorRefToken*>
(vSubArguments[i]->GetFormulaToken());
temp4<<pSVR->GetArrayLength();
+ temp4 << ")||isNan("<<vSubArguments[i]
+ ->GenSlidingWindowDeclRef();
+ temp4 << ")?0:";
+ temp4 << vSubArguments[i]->GenSlidingWindowDeclRef();
+ temp4 << ")";
}
else if(vSubArguments[i]->GetFormulaToken()->GetType() ==
formula::svDoubleVectorRef)
@@ -1612,12 +1615,13 @@ public:
static_cast< const formula::DoubleVectorRefToken*>
(vSubArguments[i]->GetFormulaToken());
temp4<<pSVR->GetArrayLength();
+ temp4 << ")||isNan("<<vSubArguments[i]
+ ->GenSlidingWindowDeclRef(true);
+ temp4 << ")?0:";
+ temp4 << vSubArguments[i]->GenSlidingWindowDeclRef(true);
+ temp4 << ")";
}
- temp4 << ")||isNan("<<vSubArguments[i]
- ->GenSlidingWindowDeclRef(true);
- temp4 << ")?0:";
- temp4 << vSubArguments[i]->GenSlidingWindowDeclRef(true);
- temp4 << ")";
+
}
else
{
@@ -1752,6 +1756,7 @@ public:
return lhs + "*" + rhs;
}
virtual std::string BinFuncName(void) const SAL_OVERRIDE { return "fmul"; }
+ virtual bool ZeroReturnZero() {return true;};
};
/// Technically not a reduction, but fits the framework.
@@ -2020,9 +2025,20 @@ public:
ss << ")";
} else {
if (mvSubArguments.size() != 2)
- throw Unhandled();
- ss << "(" << mpCodeGen->Gen2(mvSubArguments[0]->GenSlidingWindowDeclRef(true),
- mvSubArguments[1]->GenSlidingWindowDeclRef(true)) << ")";
+ throw Unhandled();
+ bool bArgument1_NeedNested =
+ (mvSubArguments[0]->GetFormulaToken()->GetType()
+ == formula::svSingleVectorRef)? false:true;
+ bool bArgument2_NeedNested =
+ (mvSubArguments[1]->GetFormulaToken()->GetType()
+ == formula::svSingleVectorRef) ? false:true;
+ ss << "(";
+ ss << mpCodeGen->
+ Gen2(mvSubArguments[0]
+ ->GenSlidingWindowDeclRef(bArgument1_NeedNested),
+ mvSubArguments[1]
+ ->GenSlidingWindowDeclRef(bArgument2_NeedNested));
+ ss << ")";
}
return ss.str();
}
diff --git a/sc/source/core/opencl/op_logical.cxx b/sc/source/core/opencl/op_logical.cxx
index 9dce77b..96170f2 100644
--- a/sc/source/core/opencl/op_logical.cxx
+++ b/sc/source/core/opencl/op_logical.cxx
@@ -319,7 +319,6 @@ void OpIf::GenSlidingWindowFunction(std::stringstream &ss,
{
ss << "\ndouble " << sSymName;
ss << "_"<< BinFuncName() <<"(";
- if(vSubArguments.size()!=3) throw Unhandled("unknown operand for ocPush");
for (unsigned i = 0; i < vSubArguments.size(); i++)
{
if (i)
@@ -332,22 +331,49 @@ void OpIf::GenSlidingWindowFunction(std::stringstream &ss,
FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken();
if(tmpCur0->GetType() == formula::svDoubleVectorRef)
{
- throw UnhandledToken(tmpCur0, "unknown operand for ocPush");
+ throw UnhandledToken(tmpCur0, "unknown operand for ocPush");
}
else
{
- ss << " if(isNan(";
- ss << vSubArguments[0]->GenSlidingWindowDeclRef();
- ss << ")|| ";
- ss << vSubArguments[0]->GenSlidingWindowDeclRef();
- ss << " == 0)\n";
- ss << " return ";
- ss << vSubArguments[2]->GenSlidingWindowDeclRef();
- ss << ";\n";
- ss << " else";
- ss <<" return ";
- ss << vSubArguments[1]->GenSlidingWindowDeclRef();
- ss <<";\n";
+ if(vSubArguments.size()==3)
+ {
+ ss << " if(isNan(";
+ ss << vSubArguments[0]->GenSlidingWindowDeclRef();
+ ss << ")|| ";
+ ss << vSubArguments[0]->GenSlidingWindowDeclRef();
+ ss << " == 0)\n";
+ ss << " return ";
+ ss << vSubArguments[2]->GenSlidingWindowDeclRef();
+ ss << ";\n";
+ ss << " else";
+ ss <<" return ";
+ ss << vSubArguments[1]->GenSlidingWindowDeclRef();
+ ss <<";\n";
+ }
+ if(vSubArguments.size()==2)
+ {
+ ss << " if(isNan(";
+ ss << vSubArguments[0]->GenSlidingWindowDeclRef();
+ ss << ")|| ";
+ ss << vSubArguments[0]->GenSlidingWindowDeclRef();
+ ss << " == 0)\n";
+ ss << " return 0;\n";
+ ss << " else";
+ ss <<" return ";
+ ss << vSubArguments[1]->GenSlidingWindowDeclRef();
+ ss <<";\n";
+ }
+ if(vSubArguments.size()==1)
+ {
+ ss << " if(isNan(";
+ ss << vSubArguments[0]->GenSlidingWindowDeclRef();
+ ss << ")|| ";
+ ss << vSubArguments[0]->GenSlidingWindowDeclRef();
+ ss << " == 0)\n";
+ ss << " return 0;\n";
+ ss << " else";
+ ss <<" return 1;\n";
+ }
}
ss << "}\n";
}
diff --git a/sc/source/core/opencl/opbase.cxx b/sc/source/core/opencl/opbase.cxx
index 02b9c37..b0751f5 100644
--- a/sc/source/core/opencl/opbase.cxx
+++ b/sc/source/core/opencl/opbase.cxx
@@ -130,7 +130,6 @@ void CheckVariables::CheckSubArgumentIsNan( std::stringstream & ss,
SubArguments &vSubArguments, int argumentNum)
{
int i = argumentNum;
-#ifdef ISNAN
if(vSubArguments[i]->GetFormulaToken()->GetType() ==
formula::svSingleVectorRef)
{
@@ -139,6 +138,17 @@ void CheckVariables::CheckSubArgumentIsNan( std::stringstream & ss,
ss<< " if(singleIndex>=";
ss<< pTmpDVR1->GetArrayLength();
ss<<" ||";
+ ss<< "isNan(";
+ ss<< vSubArguments[i]->GenSlidingWindowDeclRef(true);
+ ss<<"))\n";
+ ss<< " tmp";
+ ss<< i;
+ ss <<"=0;\n else \n";
+ ss <<" tmp";
+ ss <<i;
+ ss << "=";
+ ss << vSubArguments[i]->GenSlidingWindowDeclRef(true);
+ ss<<";\n";
}
if(vSubArguments[i]->GetFormulaToken()->GetType() ==
formula::svDoubleVectorRef)
@@ -148,24 +158,36 @@ void CheckVariables::CheckSubArgumentIsNan( std::stringstream & ss,
ss<< " if(doubleIndex>=";
ss<< pTmpDVR2->GetArrayLength();
ss<<" ||";
+ ss<< "isNan(";
+ ss<< vSubArguments[i]->GenSlidingWindowDeclRef(false);
+ ss<<"))\n";
+ ss<< " tmp";
+ ss<< i;
+ ss <<"=0;\n else \n";
+ ss <<" tmp";
+ ss <<i;
+ ss << "=";
+ ss << vSubArguments[i]->GenSlidingWindowDeclRef(false);
+ ss<<";\n";
}
if(vSubArguments[i]->GetFormulaToken()->GetType() == formula::svDouble ||
vSubArguments[i]->GetFormulaToken()->GetOpCode() != ocPush)
{
ss<< " if(";
+ ss<< "isNan(";
+ ss<< vSubArguments[i]->GenSlidingWindowDeclRef();
+ ss<<"))\n";
+ ss<< " tmp";
+ ss<< i;
+ ss <<"=0;\n else \n";
+ ss <<" tmp";
+ ss <<i;
+ ss << "=";
+ ss << vSubArguments[i]->GenSlidingWindowDeclRef();
+ ss<<";\n";
+
}
- ss<< "isNan(";
- ss<< vSubArguments[i]->GenSlidingWindowDeclRef(true);
- ss<<"))\n";
- ss<< " tmp";
- ss<< i;
- ss <<"=0;\n else \n";
-#endif
- ss <<" tmp";
- ss <<i;
- ss << "=";
- ss << vSubArguments[i]->GenSlidingWindowDeclRef(true);
- ss<<";\n";
+
}
void CheckVariables::CheckSubArgumentIsNan2( std::stringstream & ss,
diff --git a/sc/source/core/opencl/opbase.hxx b/sc/source/core/opencl/opbase.hxx
index d1d0005..487fc04 100644
--- a/sc/source/core/opencl/opbase.hxx
+++ b/sc/source/core/opencl/opbase.hxx
@@ -211,7 +211,7 @@ public:
virtual void GenSlidingWindowDecl(std::stringstream &ss) const SAL_OVERRIDE;
/// When referenced in a sliding window function
- virtual std::string GenSlidingWindowDeclRef(bool=true) const SAL_OVERRIDE;
+ virtual std::string GenSlidingWindowDeclRef(bool=false) const SAL_OVERRIDE;
/// Create buffer and pass the buffer to a given kernel
virtual size_t Marshal(cl_kernel, int, int, cl_program) SAL_OVERRIDE;
@@ -250,6 +250,9 @@ public:
std::set<std::string>& ) {}
virtual bool takeString() const = 0;
virtual bool takeNumeric() const = 0;
+ //Continue process 'Zero' or Not(like OpMul, not continue process when meet
+ // 'Zero'
+ virtual bool ZeroReturnZero() {return false;}
virtual ~OpBase() {}
};
commit 8e19f8ebd8febccf7a706f1e0179a4d72f30d6d8
Author: weigao <weigao at multicorewareinc.com>
Date: Mon Jun 16 23:40:36 2014 -0700
modify the mouse drag function
Change-Id: I9639b2a29522ba0765f4442c2f78de56388fe754
diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx
index 7c3b881..0fc12b1 100644
--- a/chart2/source/view/charttypes/GL3DBarChart.cxx
+++ b/chart2/source/view/charttypes/GL3DBarChart.cxx
@@ -416,19 +416,19 @@ void GL3DBarChart::clickedAt(const Point& rPos, sal_uInt16 nButtons)
pScreenText->render();
}
-void GL3DBarChart::mouseDragMove(const Point& , const Point& , sal_uInt16 nButtons)
+void GL3DBarChart::mouseDragMove(const Point& rStartPos, const Point& rEndPos, sal_uInt16 )
{
if(mbBlockUserInput)
return;
mbBlockUserInput = true;
-
- if(nButtons == MOUSE_RIGHT)
+ long direction = rEndPos.X() - rStartPos.X();
+ if(direction < 0)
{
mnCornerId = (mnCornerId + 1) % 4;
moveToCorner();
}
- else if(nButtons == MOUSE_LEFT)
+ else if(direction > 0)
{
mnCornerId = mnCornerId - 1;
if(mnCornerId < 0)
@@ -439,33 +439,33 @@ void GL3DBarChart::mouseDragMove(const Point& , const Point& , sal_uInt16 nButto
glm::vec3 GL3DBarChart::getCornerPosition(sal_Int8 nId)
{
+ float pi = 3.1415926;
switch(nId)
{
case 0:
{
- return glm::vec3(-30, -30, DEFAULT_CAMERA_HEIGHT);
+ return glm::vec3(mnMaxX / 2 - mnDistance * sin(pi / 4), mnMaxY / 2 - mnDistance * cos(pi / 4), DEFAULT_CAMERA_HEIGHT * 2);
}
break;
case 1:
{
- return glm::vec3(mnMaxX, -30, DEFAULT_CAMERA_HEIGHT);
+ return glm::vec3(mnMaxX / 2 + mnDistance * sin(pi / 4), mnMaxY / 2 - mnDistance * cos(pi / 4), DEFAULT_CAMERA_HEIGHT * 2);
}
break;
case 2:
{
- return glm::vec3(mnMaxX, mnMaxY, DEFAULT_CAMERA_HEIGHT);
+ return glm::vec3(mnMaxX / 2 + mnDistance * sin(pi / 4), mnMaxY / 2 + mnDistance * cos(pi / 4), DEFAULT_CAMERA_HEIGHT * 2);
}
break;
case 3:
{
- return glm::vec3(-30, mnMaxY, DEFAULT_CAMERA_HEIGHT);
+ return glm::vec3(mnMaxX / 2 - mnDistance * sin(pi / 4), mnMaxY / 2 + mnDistance * cos(pi / 4), DEFAULT_CAMERA_HEIGHT * 2);
}
break;
default:
assert(false);
}
-
- return glm::vec3(-30, -30, DEFAULT_CAMERA_HEIGHT);
+ return maDefaultCameraPosition;
}
void GL3DBarChart::moveToCorner()
commit af5dfd8af2e92cbd511ae6ff840d4ea7f3f83ad5
Author: weigao <weigao at multicorewareinc.com>
Date: Mon Jun 16 23:33:03 2014 -0700
add move to default process
Change-Id: I8d562b3e2d1bb83a6e07ed089a3006a109beeece
diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx
index c889809..7c3b881 100644
--- a/chart2/source/view/charttypes/GL3DBarChart.cxx
+++ b/chart2/source/view/charttypes/GL3DBarChart.cxx
@@ -357,24 +357,19 @@ void GL3DBarChart::moveToDefault()
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;
+ maTimer.SetTimeout(TIMEOUT);
+ maTimer.SetTimeoutHdl(LINK(this, GL3DBarChart, MoveToBar));
+ maTimer.Start();
}
void GL3DBarChart::clickedAt(const Point& rPos, sal_uInt16 nButtons)
{
if(mbBlockUserInput)
return;
+ if (nButtons == MOUSE_RIGHT)
+ {
+ moveToDefault();
+ }
if(nButtons != MOUSE_LEFT)
return;
commit a96c575764a36399e459813d6204db3bfc0a08f3
Author: weigao <weigao at multicorewareinc.com>
Date: Mon Jun 16 23:21:04 2014 -0700
modify the click view angle
Change-Id: I8717745d2f503f8ad3c21673a07aed867b5681f9
diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx
index 88f49dd..c889809 100644
--- a/chart2/source/view/charttypes/GL3DBarChart.cxx
+++ b/chart2/source/view/charttypes/GL3DBarChart.cxx
@@ -400,14 +400,15 @@ void GL3DBarChart::clickedAt(const Point& rPos, sal_uInt16 nButtons)
render();
glm::vec3 maTargetPosition = rBarInfo.maPos;
- maTargetPosition.z += 45;
- maStep = (maTargetPosition - maCameraPosition)/100.0f;
+ maTargetPosition.z += 240;
+ maTargetPosition.y += BAR_SIZE_Y / 2.0f;
+ maStep = (maTargetPosition - maCameraPosition)/((float)mnStepsTotal);
glm::vec3 maTargetDirection = rBarInfo.maPos;
maTargetDirection.x += BAR_SIZE_X / 2.0f;
maTargetDirection.y += BAR_SIZE_Y / 2.0f;
- maStepDirection = (maTargetDirection - maCameraDirection)/100.f;
+ maStepDirection = (maTargetDirection - maCameraDirection)/((float)mnStepsTotal);
maTimer.SetTimeout(TIMEOUT);
maTimer.SetTimeoutHdl(LINK(this, GL3DBarChart, MoveToBar));
commit 6c4ce5f351f7acf2086f5bf2b67ef15ffcda0c51
Author: weigao <weigao at multicorewareinc.com>
Date: Mon Jun 16 23:08:00 2014 -0700
modify the default view angle
Change-Id: Ic7c901108a290a9d9c5a8564b6eefa7ed32a9e1f
diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx
index 334b740..88f49dd 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 0566904..d3426a3 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;
};
}
commit c52e440377750ef83cfd65ffdd7f24165123fd2d
Author: weigao <weigao at multicorewareinc.com>
Date: Mon Jun 16 22:58:26 2014 -0700
modify the perspective view angle to 30
Change-Id: I07b39f8b372368f82137feec3a6d12921fc1ec9f
diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx
index a7d1496..52199c5 100644
--- a/chart2/source/view/main/GL3DRenderer.cxx
+++ b/chart2/source/view/main/GL3DRenderer.cxx
@@ -278,7 +278,7 @@ void OpenGL3DRenderer::init()
glBufferData(GL_ARRAY_BUFFER, sizeof(boundBoxNormal), boundBoxNormal, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
- m_fViewAngle = 60.0f;
+ m_fViewAngle = 30.0f;
m_3DProjection = glm::perspective(m_fViewAngle, (float)m_iWidth / (float)m_iHeight, 0.01f, 6000.0f);
maResources.LoadShaders();
commit 1c8babfdb0808318bbaa94e911c819456a65337e
Author: Markus Mohrhard <markus.mohrhard at collabora.co.uk>
Date: Tue Jun 10 18:13:46 2014 +0200
document must be set modified when range name is defined, fdo#79451
Change-Id: I382bef9b95d40a1abac993795e8da540b5aa5d18
diff --git a/sc/source/ui/namedlg/namedefdlg.cxx b/sc/source/ui/namedlg/namedefdlg.cxx
index 3ab5d2f..b05d69b 100644
--- a/sc/source/ui/namedlg/namedefdlg.cxx
+++ b/sc/source/ui/namedlg/namedefdlg.cxx
@@ -245,6 +245,7 @@ void ScNameDefDlg::AddPushed()
if (nTab != -1)
mpDoc->SetStreamValid(nTab, false);
SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_AREAS_CHANGED ) );
+ mpDocShell->SetDocumentModified();
Close();
}
else
More information about the Libreoffice-commits
mailing list