chart2/source/view/charttypes/GL3DBarChart.cxx | 83 ++++++++++++++++++++++++- chart2/source/view/inc/GL3DBarChart.hxx | 19 +++++ chart2/source/view/inc/GL3DRenderer.hxx | 7 -- chart2/source/view/main/GL3DRenderer.cxx | 79 ++--------------------- 4 files changed, 107 insertions(+), 81 deletions(-)
New commits: commit 1e14703564ecb0f81087dc4a1922dfcdcc6a3deb Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Sun May 25 21:46:05 2014 +0200 remove unused variables Change-Id: I020be0cecd3becc24edc1267b4bce714db3bb627 diff --git a/chart2/source/view/inc/GL3DRenderer.hxx b/chart2/source/view/inc/GL3DRenderer.hxx index 046b2a1..b4d6b35 100644 --- a/chart2/source/view/inc/GL3DRenderer.hxx +++ b/chart2/source/view/inc/GL3DRenderer.hxx @@ -81,7 +81,6 @@ struct Polygon3DInfo glm::vec4 polygonColor; glm::vec4 id; Vertices3D *vertices; - UVs3D *uvs; Normals3D *normals; std::vector <Vertices3D *> verticesList; std::vector <UVs3D *> uvsList; diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index fc211ec..2c5ef11 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -79,7 +79,6 @@ OpenGL3DRenderer::OpenGL3DRenderer(): m_Polygon3DInfo.lineOnly = false; m_Polygon3DInfo.twoSidesLighting = false; m_Polygon3DInfo.vertices = NULL; - m_Polygon3DInfo.uvs = NULL; m_Polygon3DInfo.normals = NULL; m_Polygon3DInfo.lineWidth = 0.001f; commit a3a6acd2c91f7cef04cbe697568383f03ffda39b Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Sun May 25 21:38:38 2014 +0200 remove all the unused functions Change-Id: Idb78a97793615ff0ccb5377d87442deaaa09161d diff --git a/chart2/source/view/inc/GL3DRenderer.hxx b/chart2/source/view/inc/GL3DRenderer.hxx index e0214a8..046b2a1 100644 --- a/chart2/source/view/inc/GL3DRenderer.hxx +++ b/chart2/source/view/inc/GL3DRenderer.hxx @@ -161,9 +161,6 @@ public: void EndAddPolygon3DObjectPoint(); void AddShape3DExtrudeObject(bool roundedCorner, sal_uInt32 color, sal_uInt32 specular, const glm::mat4& modelMatrix, sal_uInt32 nUniqueId); void EndAddShape3DExtrudeObject(); - double GetTime(); - void SetFPS(float fps); - void RenderClickPos(Point aMPos); void SetSize(const Size& rSize); void SetCameraInfo(glm::vec3 pos, glm::vec3 direction, glm::vec3 up); void CreateTextTexture(const BitmapEx& rBitmapEx, glm::vec3 vTopLeft,glm::vec3 vTopRight, glm::vec3 vBottomRight, glm::vec3 vBottomLeft, sal_uInt32 nUniqueId); @@ -175,17 +172,14 @@ public: private: void MoveModelf(PosVecf3& trans,PosVecf3& angle,PosVecf3& scale); - void GetFreq(); void RenderPolygon3DObject(); void RenderLine3D(Polygon3DInfo &polygon); void RenderPolygon3D(Polygon3DInfo &polygon); void Init3DUniformBlock(); void Update3DUniformBlock(); void RenderExtrude3DObject(); - void RenderFPS(float fps); //add for text void RenderTextShape(); - void RenderText(const ::rtl::OUString& string, com::sun::star::awt::Point aPos); void RenderExtrudeSurface(const Extrude3DInfo& extrude3D); void RenderExtrudeTopSurface(const Extrude3DInfo& extrude3D); void RenderExtrudeMiddleSurface(const Extrude3DInfo& extrude3D); diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index a1e3cdb..fc211ec 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -66,7 +66,6 @@ glm::vec4 getColorAsVector(sal_uInt32 nColor) ((nColor & 0x0000FF00) >> 8) / 255.0f, (nColor & 0x000000FF) / 255.0f, (0xFF - (nColor & 0xFF000000)/255.0)); - } } @@ -86,7 +85,6 @@ OpenGL3DRenderer::OpenGL3DRenderer(): m_Extrude3DInfo.twoSidesLighting = false; - GetFreq(); m_RoundBarMesh.iMeshSizes = 0; } @@ -668,25 +666,6 @@ int OpenGL3DRenderer::GenerateRoundCornerBar(std::vector<glm::vec3> &vertices, s return iFacesAdded; } -void OpenGL3DRenderer::GetFreq() -{ -#if 0 - LARGE_INTEGER litmpold; - QueryPerformanceFrequency(&litmpold); - m_dFreq= litmpold.QuadPart; -#endif -} - -double OpenGL3DRenderer::GetTime() -{ -#if 0 - LARGE_INTEGER litmpold; - QueryPerformanceCounter(&litmpold); - return litmpold.QuadPart*1000000 / m_dFreq; -#endif - return 0; -} - void OpenGL3DRenderer::RenderLine3D(Polygon3DInfo &polygon) { glUseProgram(maResources.m_CommonProID); @@ -1485,54 +1464,6 @@ void OpenGL3DRenderer::RenderTextShape() CHECK_GL_ERROR(); } -void OpenGL3DRenderer::RenderText(const ::rtl::OUString& , awt::Point ) -{ - //TODO: moggi: disabled for now - /* - Font aFont("Arial", Size(0, 100)); - Rectangle aRect; - VirtualDevice aDevice; - aDevice.GetTextBoundRect(aRect, string); - int screenWidth = (aRect.BottomRight().X() + 3) & ~3; - int screenHeight = (aRect.BottomRight().Y() + 3) & ~3; - int textHeight = OPENGL_SCALE_VALUE * m_iHeight / 20; - int textWidth = (float)textHeight * ((float)screenWidth / (float)screenHeight); - textWidth = (textWidth + 3) & ~3; - awt::Size aSize(textWidth, textHeight); - //clear text info - size_t listNum = m_TextInfoList.size(); - for (size_t i = 0; i < listNum; i++) - { - TextInfo &textInfo = m_TextInfoList.front(); - glDeleteTextures(1, &textInfo.texture); - m_TextInfoList.pop_front(); - } - //create text texture - CreateTextTexture(string, aFont, 0xFF0000, aPos, aSize, 0); - RenderTextShape(); - */ -} - -void OpenGL3DRenderer::RenderFPS(float fps) -{ - //use width and height to get the position - ::rtl::OUString stringFps = ::rtl::OUString("fps ") + ::rtl::OUString::number(fps); - awt::Point aPos(0,0); - RenderText(stringFps, aPos); -} - -void OpenGL3DRenderer::RenderClickPos(Point aMPos) -{ - //use width and height to get the position - ::rtl::OUString stringPos = ::rtl::OUString("(") + - ::rtl::OUString::number(aMPos.X()) + - ::rtl::OUString(",") + - ::rtl::OUString::number(aMPos.Y()) + - ::rtl::OUString(")"); - awt::Point aPos(aMPos.X(), aMPos.Y()); - RenderText(stringPos, aPos); -} - void OpenGL3DRenderer::CreateSceneBoxView() { m_3DView = glm::lookAt(m_CameraInfo.cameraPos, commit d63f4e3c2334857b11c500e06c1956cc435d0a3c Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Sun May 25 21:30:55 2014 +0200 avoid magic numbers Change-Id: Ib7c3bd23e119ebee91f3f76b073faf10daa87b3e diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index ba24bb3..a1e3cdb 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -30,6 +30,9 @@ namespace opengl3D { namespace { +const int CORNER_DIVION_Y = 10; +const int CORNER_DIVION_Z = 10; + int static checkGLError(const char *file, int line) { GLenum glErr; @@ -397,7 +400,8 @@ void OpenGL3DRenderer::CreateActualRoundedCube(float fRadius, int iSubDivY, int int OpenGL3DRenderer::GenerateRoundCornerBar(std::vector<glm::vec3> &vertices, std::vector<glm::vec3> &normals, float fRadius, int iSubDivY, int iSubDivZ, float width, float height, float depth) { //float fAddAngleY = 360.0f/float(iSubDivY), fAddAngleZ = 180.0f/float(iSubDivZ); - float fAddAngleY = 360.0f/float(iSubDivY), fAddAngleZ = 180.0f/float(iSubDivZ); + float fAddAngleY = 360.0f/float(iSubDivY); + float fAddAngleZ = 180.0f/float(iSubDivZ); float fCurAngleY = 0.0f; int iStepsY = 1; @@ -1001,7 +1005,8 @@ void OpenGL3DRenderer::AddShape3DExtrudeObject(bool roundedCorner, sal_uInt32 nC if (m_Extrude3DInfo.rounded && (m_RoundBarMesh.iMeshSizes == 0)) { float radius = 0.2f; - CreateActualRoundedCube(radius, 10, 10, 1.0f, m_Extrude3DInfo.yScale / m_Extrude3DInfo.xScale, 1 + 2 * radius); + CreateActualRoundedCube(radius, CORNER_DIVION_Y, CORNER_DIVION_Z, + 1.0f, m_Extrude3DInfo.yScale / m_Extrude3DInfo.xScale, 1 + 2 * radius); AddVertexData(m_CubeVertexBuf); AddNormalData(m_CubeNormalBuf); AddIndexData(m_CubeElementBuf); commit 6ba0cb05c600861753a85cda872b05fb19a35fc1 Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Sun May 25 21:04:02 2014 +0200 implement movement from one corner to the next Change-Id: I6c782f7630c9f77e3e3f28a79e26391e8c97c706 diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index c95458b..6594c03 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -31,12 +31,16 @@ GL3DBarChart::GL3DBarChart( mrWindow(rWindow), mpCamera(NULL), mbValidContext(true), - mpTextCache(new opengl3D::TextCache()) + mpTextCache(new opengl3D::TextCache()), + mnStep(0), + mnStepsTotal(0), + mnCornerId(0) { Size aSize = mrWindow.GetSizePixel(); mpRenderer->SetSize(aSize); mrWindow.setRenderer(this); mpRenderer->init(); + maTimer.SetTimeoutHdl(LINK(this, GL3DBarChart, MoveCamera)); } GL3DBarChart::~GL3DBarChart() @@ -48,6 +52,7 @@ GL3DBarChart::~GL3DBarChart() namespace { const float TEXT_HEIGHT = 15.0f; +const sal_uLong TIMEOUT = 5; float calculateTextWidth(const OUString& rText) { @@ -227,6 +232,9 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer p->setPosition(aTopLeft, aTopRight, aBottomRight); } + mnMaxX = nMaxPointCount * (nBarSizeX + nBarDistanceX) + 40; + mnMaxY = nSeriesIndex * (nBarSizeY + nBarDistanceY) + 40; + maCameraPosition = glm::vec3(-30, -30, 200); mpCamera->setPosition(maCameraPosition); maCameraDirection = glm::vec3(0, 0, 0); @@ -293,12 +301,83 @@ void GL3DBarChart::clickedAt(const Point& rPos) void GL3DBarChart::mouseDragMove(const Point& rStartPos, const Point& rEndPos, sal_uInt16 nButtons) { SAL_WARN("chart2.opengl", "Dragging: " << rStartPos << " to : " << rEndPos << " Buttons: " << nButtons); + if(nButtons == MOUSE_RIGHT) + { + mnCornerId = (mnCornerId + 1) % 4; + moveToCorner(); + } + else if(nButtons == MOUSE_LEFT) + { + mnCornerId = mnCornerId - 1; + if(mnCornerId < 0) + mnCornerId = 3; + moveToCorner(); + } +} + +glm::vec3 GL3DBarChart::getCornerPosition(sal_Int8 nId) +{ + switch(nId) + { + case 0: + { + return glm::vec3(-30, -30, 200); + } + break; + case 1: + { + return glm::vec3(mnMaxX, -30, 200); + } + break; + case 2: + { + return glm::vec3(mnMaxX, mnMaxY, 200); + } + break; + case 3: + { + return glm::vec3(-30, mnMaxY, 200); + } + break; + default: + assert(false); + } + + return glm::vec3(-30, -30, 200); +} + +void GL3DBarChart::moveToCorner() +{ + mnStepsTotal = 100; + maStep = (getCornerPosition(mnCornerId) - maCameraPosition) / float(mnStepsTotal); + maTimer.SetTimeout(TIMEOUT); + maTimer.Start(); +} + +IMPL_LINK_NOARG(GL3DBarChart, MoveCamera) +{ + maTimer.Stop(); + if(mnStep < mnStepsTotal) + { + ++mnStep; + maCameraPosition += maStep; + mpCamera->setPosition(maCameraPosition); + render(); + maTimer.SetTimeout(TIMEOUT); + maTimer.Start(); + } + else + { + mnStep = 0; + } + + return 0; } void GL3DBarChart::scroll(long nDelta) { glm::vec3 maDir = glm::normalize(maCameraPosition - maCameraDirection); - maCameraPosition += (float((nDelta/10)) * maDir); + maCameraPosition -= (float((nDelta/10)) * maDir); mpCamera->setPosition(maCameraPosition); render(); } diff --git a/chart2/source/view/inc/GL3DBarChart.hxx b/chart2/source/view/inc/GL3DBarChart.hxx index 7997174..0f56b64 100644 --- a/chart2/source/view/inc/GL3DBarChart.hxx +++ b/chart2/source/view/inc/GL3DBarChart.hxx @@ -18,6 +18,7 @@ #include <glm/glm.hpp> +#include <vcl/timer.hxx> #include <vcl/openglwin.hxx> namespace chart { @@ -55,6 +56,12 @@ public: virtual void contextDestroyed() SAL_OVERRIDE; private: + + void moveToCorner(); + glm::vec3 getCornerPosition(sal_Int8 nCornerId); + + DECL_LINK(MoveCamera, void*); + css::uno::Reference<css::chart2::XChartType> mxChartType; boost::ptr_vector<opengl3D::Renderable3DObject> maShapes; @@ -68,6 +75,18 @@ private: glm::vec3 maCameraPosition; glm::vec3 maCameraDirection; + + Timer maTimer; + glm::vec3 maStep; + size_t mnStep; + size_t mnStepsTotal; + float mnMaxX; + float mnMaxY; + /** + * 0 = corner at (0,0,0); + * numbering counter clockwise + */ + sal_Int8 mnCornerId; }; } commit 15a13e4134d32a1788380002b641b43eb92d7adc Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Sun May 25 21:03:10 2014 +0200 reduce the number of traingles per bar Change-Id: If24391481c916b689e8c8e90d6430bf7ca56a5e3 diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index ecab037..ba24bb3 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -1001,7 +1001,7 @@ void OpenGL3DRenderer::AddShape3DExtrudeObject(bool roundedCorner, sal_uInt32 nC if (m_Extrude3DInfo.rounded && (m_RoundBarMesh.iMeshSizes == 0)) { float radius = 0.2f; - CreateActualRoundedCube(radius, 30, 30, 1.0f, m_Extrude3DInfo.yScale / m_Extrude3DInfo.xScale, 1 + 2 * radius); + CreateActualRoundedCube(radius, 10, 10, 1.0f, m_Extrude3DInfo.yScale / m_Extrude3DInfo.xScale, 1 + 2 * radius); AddVertexData(m_CubeVertexBuf); AddNormalData(m_CubeNormalBuf); AddIndexData(m_CubeElementBuf); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits