chart2/source/view/charttypes/GL3DBarChart.cxx | 49 +++++++++++++++++++++-- chart2/source/view/inc/3DChartObjects.hxx | 19 ++++++++- chart2/source/view/inc/GL3DBarChart.hxx | 7 +++ chart2/source/view/inc/GL3DRenderer.hxx | 10 ---- chart2/source/view/main/3DChartObjects.cxx | 36 +++++++++++++---- chart2/source/view/main/GL3DRenderer.cxx | 52 ++----------------------- sc/source/ui/view/viewdata.cxx | 8 --- 7 files changed, 101 insertions(+), 80 deletions(-)
New commits: commit 9ef8f82cb933f598d6bc9641f6bb937fce103ec9 Author: Markus Mohrhard <[email protected]> Date: Sat May 24 17:35:41 2014 +0200 much improved camera control for 3D chart Change-Id: I5acc481db01e2ea66c11933ec05f222858ba36f9 diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index dbf0310..db1dc5b 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -54,6 +54,23 @@ float calculateTextWidth(const OUString& rText) return rText.getLength() * 10; } +double findMaxValue(const boost::ptr_vector<VDataSeries>& rDataSeriesContainer) +{ + double nMax = 0.0; + for (boost::ptr_vector<VDataSeries>::const_iterator itr = rDataSeriesContainer.begin(), + itrEnd = rDataSeriesContainer.end(); itr != itrEnd; ++itr) + { + const VDataSeries& rDataSeries = *itr; + sal_Int32 nPointCount = rDataSeries.getTotalPointCount(); + for(sal_Int32 nIndex = 0; nIndex < nPointCount; ++nIndex) + { + double nVal = rDataSeries.getYValue(nIndex); + nMax = std::max(nMax, nVal); + } + } + return nMax; +} + } void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSeriesContainer, @@ -85,6 +102,8 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer mpCamera = static_cast<opengl3D::Camera*>(&maShapes.back()); sal_Int32 nSeriesIndex = 0; + sal_Int32 nMaxPointCount = 0; + double nMaxVal = findMaxValue(rDataSeriesContainer)/100; for (boost::ptr_vector<VDataSeries>::const_iterator itr = rDataSeriesContainer.begin(), itrEnd = rDataSeriesContainer.end(); itr != itrEnd; ++itr) { @@ -92,6 +111,7 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer const VDataSeries& rDataSeries = *itr; sal_Int32 nPointCount = rDataSeries.getTotalPointCount(); + nMaxPointCount = std::max(nMaxPointCount, nPointCount); bool bMappedFillProperty = rDataSeries.hasPropertyMapping("FillColor"); @@ -126,8 +146,7 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer float nVal = rDataSeries.getYValue(nIndex); float nXPos = nIndex * (nBarSizeX + nBarDistanceX) + nBarDistanceX; - - glm::mat4 aScaleMatrix = glm::scale(nBarSizeX, nBarSizeY, nVal); + glm::mat4 aScaleMatrix = glm::scale(nBarSizeX, nBarSizeY, float(nVal/nMaxVal)); glm::mat4 aTranslationMatrix = glm::translate(nXPos, nYPos, 0.0f); glm::mat4 aBarPosition = aTranslationMatrix * aScaleMatrix; @@ -207,6 +226,10 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer aBottomRight.y = -calculateTextWidth(aCats[i]) - 0.5 * nBarDistanceY; p->setPosition(aTopLeft, aTopRight, aBottomRight); } + + maCameraPosition = glm::vec3(-30, -30, 200); + mpCamera->setPosition(maCameraPosition); + mpCamera->setDirection(glm::vec3(nMaxPointCount*(nBarSizeX+ nBarDistanceX), nSeriesIndex*(nBarSizeY+nBarDistanceY), 0)); } void GL3DBarChart::render() diff --git a/chart2/source/view/inc/3DChartObjects.hxx b/chart2/source/view/inc/3DChartObjects.hxx index c92a435..1530dfc 100644 --- a/chart2/source/view/inc/3DChartObjects.hxx +++ b/chart2/source/view/inc/3DChartObjects.hxx @@ -115,6 +115,9 @@ public: Camera(OpenGL3DRenderer* pRenderer); virtual void render() SAL_OVERRIDE; + void setPosition(const glm::vec3& rPos); + void setDirection(const glm::vec3& rPos); + /// Zooms the camera towards the bar with Unique Id nId. void zoom(sal_uInt32 nId); diff --git a/chart2/source/view/inc/GL3DBarChart.hxx b/chart2/source/view/inc/GL3DBarChart.hxx index 15fffde..0ca4e23 100644 --- a/chart2/source/view/inc/GL3DBarChart.hxx +++ b/chart2/source/view/inc/GL3DBarChart.hxx @@ -16,6 +16,8 @@ #include <boost/ptr_container/ptr_vector.hpp> #include "VDataSeries.hxx" +#include <glm/glm.hpp> + #include <vcl/openglwin.hxx> namespace chart { @@ -61,6 +63,8 @@ private: bool mbValidContext; boost::scoped_ptr<opengl3D::TextCache> mpTextCache; + + glm::vec3 maCameraPosition; }; } diff --git a/chart2/source/view/main/3DChartObjects.cxx b/chart2/source/view/main/3DChartObjects.cxx index ea20774..c77a273 100644 --- a/chart2/source/view/main/3DChartObjects.cxx +++ b/chart2/source/view/main/3DChartObjects.cxx @@ -186,6 +186,16 @@ void Camera::render() mpRenderer->SetCameraInfo(maPos, maDirection, maUp); } +void Camera::setPosition(const glm::vec3& rPos) +{ + maPos = rPos; +} + +void Camera::setDirection(const glm::vec3& rDir) +{ + maDirection = rDir; +} + void Camera::zoom(sal_uInt32 /*nId*/) { // TODO here commit 20e4e65b656e3c47d2a0115ed3f17dabcb8d30da Author: Markus Mohrhard <[email protected]> Date: Sat May 24 16:44:00 2014 +0200 add a text cache to improve rendering performance Change-Id: I5b3fbe9476f0eafed4524f57aa7bf65dfd029c1d diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 7a3d311..dbf0310 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -30,7 +30,8 @@ GL3DBarChart::GL3DBarChart( mpRenderer(new opengl3D::OpenGL3DRenderer()), mrWindow(rWindow), mpCamera(NULL), - mbValidContext(true) + mbValidContext(true), + mpTextCache(new opengl3D::TextCache()) { Size aSize = mrWindow.GetSizePixel(); mpRenderer->SetSize(aSize); @@ -101,7 +102,8 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer if(!aSeriesName.isEmpty()) { - maShapes.push_back(new opengl3D::Text(mpRenderer.get(), aSeriesName, nId++)); + maShapes.push_back(new opengl3D::Text(mpRenderer.get(), + *mpTextCache, aSeriesName, nId++)); opengl3D::Text* p = static_cast<opengl3D::Text*>(&maShapes.back()); glm::vec3 aTopLeft, aTopRight, aBottomRight; aTopLeft.x = -nBarDistanceY; @@ -181,7 +183,8 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer float nXPos = i * (nBarSizeX + nBarDistanceX); - maShapes.push_back(new opengl3D::Text(mpRenderer.get(), aCats[i], nId++)); + maShapes.push_back(new opengl3D::Text(mpRenderer.get(), *mpTextCache, + aCats[i], nId++)); opengl3D::Text* p = static_cast<opengl3D::Text*>(&maShapes.back()); aTopLeft.x = nXPos + TEXT_HEIGHT; aTopLeft.y = nYPos + calculateTextWidth(aCats[i]) + 0.5 * nBarDistanceY; @@ -193,7 +196,8 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer // create shapes on other side as well - maShapes.push_back(new opengl3D::Text(mpRenderer.get(), aCats[i], nId++)); + maShapes.push_back(new opengl3D::Text(mpRenderer.get(), *mpTextCache, + aCats[i], nId++)); p = static_cast<opengl3D::Text*>(&maShapes.back()); aTopLeft.x = nXPos + TEXT_HEIGHT; aTopLeft.y = - 0.5 * nBarDistanceY; diff --git a/chart2/source/view/inc/3DChartObjects.hxx b/chart2/source/view/inc/3DChartObjects.hxx index f8138aa..c92a435 100644 --- a/chart2/source/view/inc/3DChartObjects.hxx +++ b/chart2/source/view/inc/3DChartObjects.hxx @@ -14,10 +14,22 @@ #include <vcl/opengl/OpenGLContext.hxx> #include "GL3DRenderer.hxx" +#include <boost/ptr_container/ptr_map.hpp> + namespace chart { namespace opengl3D { +class TextCache +{ +public: + const BitmapEx& getText(OUString rText); +private: + typedef boost::ptr_map<OUString, BitmapEx> TextCacheType; + + TextCacheType maTextCache; +}; + class Renderable3DObject { public: @@ -65,7 +77,7 @@ private: class Text : public Renderable3DObject { public: - Text(OpenGL3DRenderer* pRenderer, const OUString& rStr, sal_uInt32 nId); + Text(OpenGL3DRenderer* pRenderer, TextCache& rTextCache, const OUString& rStr, sal_uInt32 nId); virtual void render() SAL_OVERRIDE; Size getSize() const; @@ -73,7 +85,7 @@ public: void setPosition(const glm::vec3& rTopLeft, const glm::vec3& rTopRight, const glm::vec3& rBottomRight); private: - BitmapEx maText; + const BitmapEx& mrText; glm::vec3 maTopLeft; glm::vec3 maTopRight; glm::vec3 maBottomRight; diff --git a/chart2/source/view/inc/GL3DBarChart.hxx b/chart2/source/view/inc/GL3DBarChart.hxx index 674daf6..15fffde 100644 --- a/chart2/source/view/inc/GL3DBarChart.hxx +++ b/chart2/source/view/inc/GL3DBarChart.hxx @@ -26,6 +26,7 @@ namespace opengl3D { class Renderable3DObject; class OpenGL3DRenderer; +class TextCache; class Camera; } @@ -58,6 +59,8 @@ private: opengl3D::Camera* mpCamera; bool mbValidContext; + + boost::scoped_ptr<opengl3D::TextCache> mpTextCache; }; } diff --git a/chart2/source/view/main/3DChartObjects.cxx b/chart2/source/view/main/3DChartObjects.cxx index bf8c10b..ea20774 100644 --- a/chart2/source/view/main/3DChartObjects.cxx +++ b/chart2/source/view/main/3DChartObjects.cxx @@ -68,10 +68,12 @@ void Line::setLineColor(const Color& rColor) maLineColor = rColor; } -Text::Text(OpenGL3DRenderer* pRenderer, const OUString& rStr, sal_uInt32 nId): - Renderable3DObject(pRenderer, nId) +const BitmapEx& TextCache::getText(OUString rText) { - // Convert OUString to BitmapEx. + TextCacheType::const_iterator itr = maTextCache.find(rText); + if(itr != maTextCache.end()) + return *itr->second; + VirtualDevice aDevice(*Application::GetDefaultDevice(), 0, 0); Font aFont = aDevice.GetFont(); aFont.SetSize(Size(0, 96)); @@ -79,27 +81,35 @@ Text::Text(OpenGL3DRenderer* pRenderer, const OUString& rStr, sal_uInt32 nId): ::Rectangle aRect; aDevice.SetFont(aFont); aDevice.Erase(); - aDevice.GetTextBoundRect(aRect, rStr); + aDevice.GetTextBoundRect(aRect, rText); Size aSize = aRect.GetSize(); aSize.Width() += 5; aSize.Height() *= 1.6; aDevice.SetOutputSizePixel(aSize); aDevice.SetBackground(Wallpaper(COL_TRANSPARENT)); - aDevice.DrawText(Point(0,0), rStr); + aDevice.DrawText(Point(0,0), rText); - maText = BitmapEx(aDevice.GetBitmapEx(Point(0,0), aSize)); + BitmapEx* pText = new BitmapEx(aDevice.GetBitmapEx(Point(0,0), aSize)); + maTextCache.insert(rText, pText); + return *pText; +} + +Text::Text(OpenGL3DRenderer* pRenderer, TextCache& rTextCache, const OUString& rStr, sal_uInt32 nId): + Renderable3DObject(pRenderer, nId), + mrText(rTextCache.getText(rStr)) +{ } void Text::render() { glm::vec3 dir2 = maTopRight - maTopLeft; glm::vec3 bottomLeft = maBottomRight - dir2; - mpRenderer->CreateTextTexture(maText, maTopLeft, maTopRight, maBottomRight, bottomLeft, mnUniqueId); + mpRenderer->CreateTextTexture(mrText, maTopLeft, maTopRight, maBottomRight, bottomLeft, mnUniqueId); } Size Text::getSize() const { - return maText.GetSizePixel(); + return mrText.GetSizePixel(); } void Text::setPosition(const glm::vec3& rTopLeft, const glm::vec3& rTopRight, const glm::vec3& rBottomRight) commit 4f8d97753fb48da181c5e7aa277c1d26f092d2ae Author: Markus Mohrhard <[email protected]> Date: Sat May 24 15:38:53 2014 +0200 fix chart background color Change-Id: I4bda3201dff1094a7fd646c620b016532a4fbc77 diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 555ee73..b49aa4c 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -1520,7 +1520,7 @@ void OpenGL3DRenderer::ProcessUnrenderedShape() { glViewport(0, 0, m_iWidth, m_iHeight); glClearDepth(1.0f); - glClearColor(1.0, 0.0, 1.0, 1.0); + glClearColor(1.0, 1.0, 1.0, 1.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); CreateSceneBoxView(); //Polygon commit ead6136ba9a5eff7df2c7f094e8fc4d3f5d2428f Author: Markus Mohrhard <[email protected]> Date: Sat May 24 15:35:30 2014 +0200 add text on both sides of the chart Change-Id: I12d5f5e92bf908bc6d8fbd0e88293e1fcaa31c96 diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 6d0b6d7..7a3d311 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -190,6 +190,18 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer aBottomRight.x = nXPos; aBottomRight.y = nYPos + 0.5 * nBarDistanceY; p->setPosition(aTopLeft, aTopRight, aBottomRight); + + // create shapes on other side as well + + maShapes.push_back(new opengl3D::Text(mpRenderer.get(), aCats[i], nId++)); + p = static_cast<opengl3D::Text*>(&maShapes.back()); + aTopLeft.x = nXPos + TEXT_HEIGHT; + aTopLeft.y = - 0.5 * nBarDistanceY; + aTopRight = aTopLeft; + aTopRight.y = -calculateTextWidth(aCats[i]) - 0.5* nBarDistanceY; + aBottomRight.x = nXPos; + aBottomRight.y = -calculateTextWidth(aCats[i]) - 0.5 * nBarDistanceY; + p->setPosition(aTopLeft, aTopRight, aBottomRight); } } commit 72dcc910a07ea1392c243dbf44674622bf79b871 Author: Markus Mohrhard <[email protected]> Date: Sat May 24 15:24:57 2014 +0200 remove camera positioning from OpenGL code Change-Id: I70a654282e8b187bc3d78041c44af17a11b4a622 diff --git a/chart2/source/view/inc/GL3DRenderer.hxx b/chart2/source/view/inc/GL3DRenderer.hxx index cf19979..0fcf437 100644 --- a/chart2/source/view/inc/GL3DRenderer.hxx +++ b/chart2/source/view/inc/GL3DRenderer.hxx @@ -142,15 +142,6 @@ struct TextInfo float vertex[12]; }; -typedef struct SceneBox{ - float maxXCoord; - float minXCoord; - float maxYCoord; - float minYCoord; - float maxZCoord; - float minZCoord; -}SceneBox; - class OpenGL3DRenderer { public: @@ -385,7 +376,6 @@ private: float m_fHeightWeight; bool mbPickingMode; - SceneBox m_SenceBox; GLuint mnPickingFbo; GLuint mnPickingRboDepth; diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 3404e6b..555ee73 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -23,8 +23,6 @@ #define DEBUG_FBO 0 -#define GL_PI 3.14159f - using namespace com::sun::star; namespace chart { @@ -88,12 +86,6 @@ OpenGL3DRenderer::OpenGL3DRenderer(): GetFreq(); m_RoundBarMesh.iMeshSizes = 0; - m_SenceBox.maxXCoord = -1.0 * FLT_MAX; - m_SenceBox.minXCoord = FLT_MAX; - m_SenceBox.maxYCoord = -1.0 * FLT_MAX; - m_SenceBox.minYCoord = FLT_MAX; - m_SenceBox.maxZCoord = -1.0 * FLT_MAX; - m_SenceBox.minZCoord = FLT_MAX; } OpenGL3DRenderer::~OpenGL3DRenderer() @@ -958,12 +950,6 @@ void OpenGL3DRenderer::AddPolygon3DObjectPoint(float x, float y, float z) float actualY = y; float actualZ = z; m_Polygon3DInfo.vertices->push_back(glm::vec3(actualX, actualY, actualZ)); - m_SenceBox.maxXCoord = std::max(m_SenceBox.maxXCoord, actualX); - m_SenceBox.minXCoord = std::min(m_SenceBox.minXCoord, actualX); - m_SenceBox.maxYCoord = std::max(m_SenceBox.maxYCoord, actualY); - m_SenceBox.minYCoord = std::min(m_SenceBox.minYCoord, actualY); - m_SenceBox.maxZCoord = std::max(m_SenceBox.maxZCoord, actualZ); - m_SenceBox.minZCoord = std::min(m_SenceBox.minZCoord, actualZ); } void OpenGL3DRenderer::EndAddPolygon3DObjectPoint() @@ -1017,12 +1003,6 @@ void OpenGL3DRenderer::AddShape3DExtrudeObject(bool roundedCorner, sal_uInt32 nC m_Normals.clear(); m_Indeices.clear(); } - m_SenceBox.maxXCoord = std::max(m_SenceBox.maxXCoord, m_Extrude3DInfo.xTransform + m_Extrude3DInfo.xScale); - m_SenceBox.minXCoord = std::min(m_SenceBox.minXCoord, m_Extrude3DInfo.xTransform); - m_SenceBox.maxYCoord = std::max(m_SenceBox.maxYCoord, m_Extrude3DInfo.yTransform + m_Extrude3DInfo.yScale); - m_SenceBox.minYCoord = std::min(m_SenceBox.minYCoord, m_Extrude3DInfo.yTransform ); - m_SenceBox.maxZCoord = std::max(m_SenceBox.maxZCoord, m_Extrude3DInfo.zTransform + m_Extrude3DInfo.zScale); - m_SenceBox.minZCoord = std::min(m_SenceBox.minZCoord, m_Extrude3DInfo.zTransform); } void OpenGL3DRenderer::EndAddShape3DExtrudeObject() @@ -1531,38 +1511,16 @@ void OpenGL3DRenderer::RenderClickPos(Point aMPos) void OpenGL3DRenderer::CreateSceneBoxView() { -//original code start m_3DView = glm::lookAt(m_CameraInfo.cameraPos, m_CameraInfo.cameraOrg, m_CameraInfo.cameraUp); -//original code end - float senceBoxWidth = m_SenceBox.maxXCoord - m_SenceBox.minXCoord; - float senceBoxHeight = m_SenceBox.maxZCoord - m_SenceBox.minZCoord; - float senceBoxDepth = m_SenceBox.maxYCoord - m_SenceBox.minYCoord; - float distanceY = m_SenceBox.maxYCoord + senceBoxWidth / 2 / tan(m_fViewAngle / 2 * GL_PI / 180.0f); - float veriticalAngle = atan((float)m_iHeight / (float)m_iWidth); - float distance = distanceY / cos(veriticalAngle); - float horizontalAngle = 0; - m_fHeightWeight = senceBoxWidth * (float)m_iHeight / (float)m_iWidth / senceBoxHeight; - m_SenceBox.maxZCoord *= m_fHeightWeight; - m_SenceBox.minZCoord *= m_fHeightWeight; - m_CameraInfo.cameraOrg = glm::vec3(m_SenceBox.minXCoord + senceBoxWidth / 2, - m_SenceBox.minYCoord + senceBoxDepth / 2, - m_SenceBox.minZCoord + senceBoxHeight * m_fHeightWeight/ 2); //update the camera position and org - m_CameraInfo.cameraPos.x = m_CameraInfo.cameraOrg.x + distance * cos(veriticalAngle) * sin(horizontalAngle); - m_CameraInfo.cameraPos.y = m_CameraInfo.cameraOrg.y + distance * cos(veriticalAngle) * cos(horizontalAngle); - m_CameraInfo.cameraPos.z = m_CameraInfo.cameraOrg.z + distance * sin(veriticalAngle); - m_3DView = glm::lookAt(m_CameraInfo.cameraPos, - m_CameraInfo.cameraOrg, - m_CameraInfo.cameraUp - ); } void OpenGL3DRenderer::ProcessUnrenderedShape() { glViewport(0, 0, m_iWidth, m_iHeight); glClearDepth(1.0f); - glClearColor(1.0, 1.0, 1.0, 1.0); + glClearColor(1.0, 0.0, 1.0, 1.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); CreateSceneBoxView(); //Polygon commit 9cff642cd51bc70327789f9dc64349bb9b4cb3ea Author: Markus Mohrhard <[email protected]> Date: Sat May 24 12:24:49 2014 +0200 remove whitespace Change-Id: Ia8b664f09da0008bde48e55a144e63965dd00609 diff --git a/sc/source/ui/view/viewdata.cxx b/sc/source/ui/view/viewdata.cxx index 90f1377..d77d8cd 100644 --- a/sc/source/ui/view/viewdata.cxx +++ b/sc/source/ui/view/viewdata.cxx @@ -17,11 +17,9 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ - #include "scitems.hxx" #include <editeng/eeitem.hxx> - #include <sfx2/viewfrm.hxx> #include <editeng/adjustitem.hxx> #include <svx/algitem.hxx> @@ -442,7 +440,6 @@ void ScViewData::InitData( ScDocument* pDocument ) *pOptions = pDoc->GetViewOptions(); } - ScDocument* ScViewData::GetDocument() const { if (pDoc) @@ -1611,10 +1608,7 @@ Point ScViewData::GetScrPos( SCCOL nWhereX, SCROW nWhereY, ScSplitPos eWhich, return Point( nScrPosX, nScrPosY ); } - // Number of cells on a screen - - SCCOL ScViewData::CellsAtX( SCsCOL nPosX, SCsCOL nDir, ScHSplitPos eWhichX, sal_uInt16 nScrSizeX ) const { OSL_ENSURE( nDir==1 || nDir==-1, "falscher CellsAt Aufruf" ); @@ -1715,7 +1709,6 @@ SCROW ScViewData::PrevCellsY( ScVSplitPos eWhichY ) const return CellsAtY( GetPosY( eWhichY ), -1, eWhichY, SC_SIZE_NONE ); } - bool ScViewData::GetMergeSizePixel( SCCOL nX, SCROW nY, long& rSizeXPix, long& rSizeYPix ) const { const ScMergeAttr* pMerge = (const ScMergeAttr*) pDoc->GetAttr( nX,nY,nTabNo, ATTR_MERGE ); @@ -3090,7 +3083,6 @@ void ScViewData::AddPixelsWhile( long & rScrY, long nEndPixels, SCROW & rPosY, rPosY = nRow; } - void ScViewData::AddPixelsWhileBackward( long & rScrY, long nEndPixels, SCROW & rPosY, SCROW nStartRow, double nPPTY, const ScDocument * pDoc, SCTAB nTabNo ) commit 904eb232d2df83d72957a93c624edbab0730cc10 Author: Markus Mohrhard <[email protected]> Date: Thu May 22 17:27:35 2014 +0200 Revert "add reverse bars code" This reverts commit 07ef1602dfc48301031dc92d1795a42c2b6d8769. diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index ffd89ad..3404e6b 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -349,7 +349,7 @@ void OpenGL3DRenderer::CreateActualRoundedCube(float fRadius, int iSubDivY, int glm::vec3 actualNormals[3]; std::vector<unsigned short> indeices[5]; glm::vec3 externSurNormal; - glm::mat4 corrctCoord = glm::translate(glm::vec3(0.0f, 0.0f, depth / 2.0f - fRadius)); + glm::mat4 corrctCoord = glm::translate(glm::vec3(width / 2.0f, height / 2.0f, depth / 2.0f - fRadius)); m_RoundBarMesh.topThreshold = topThreshold; m_RoundBarMesh.bottomThreshold = bottomThreshold; m_RoundBarMesh.iMeshStartIndices = m_Vertices.size(); @@ -979,14 +979,13 @@ void OpenGL3DRenderer::AddShape3DExtrudeObject(bool roundedCorner, sal_uInt32 nC glm::vec4 DirX = modelMatrix * glm::vec4(1.0, 0.0, 0.0, 0.0); glm::vec4 DirY = modelMatrix * glm::vec4(0.0, 1.0, 0.0, 0.0); glm::vec4 DirZ = modelMatrix * glm::vec4(0.0, 0.0, 1.0, 0.0); - float crossZ = glm::normalize(glm::dot(glm::vec3(DirZ), glm::vec3(0.0, 0.0, 1.0))); - m_Extrude3DInfo.reverse = (crossZ > 0 ? 0 : 1); m_Extrude3DInfo.xScale = glm::length(DirX); m_Extrude3DInfo.yScale = glm::length(DirY); m_Extrude3DInfo.zScale = glm::length(DirZ); glm::mat4 transformMatrixInverse = glm::inverse(glm::translate(glm::vec3(tranform))); - glm::mat4 scaleMatrixInverse = glm::inverse(glm::scale(m_Extrude3DInfo.xScale, m_Extrude3DInfo.yScale, m_Extrude3DInfo.zScale * crossZ)); + glm::mat4 scaleMatrixInverse = glm::inverse(glm::scale(m_Extrude3DInfo.xScale, m_Extrude3DInfo.yScale, m_Extrude3DInfo.zScale)); m_Extrude3DInfo.rotation = transformMatrixInverse * modelMatrix * scaleMatrixInverse; + //color m_Extrude3DInfo.extrudeColor = getColorAsVector(nColor); m_Extrude3DInfo.material.materialColor = m_Extrude3DInfo.extrudeColor;//material color seems to be the same for all parts, so we use the polygon color @@ -1022,8 +1021,8 @@ void OpenGL3DRenderer::AddShape3DExtrudeObject(bool roundedCorner, sal_uInt32 nC m_SenceBox.minXCoord = std::min(m_SenceBox.minXCoord, m_Extrude3DInfo.xTransform); m_SenceBox.maxYCoord = std::max(m_SenceBox.maxYCoord, m_Extrude3DInfo.yTransform + m_Extrude3DInfo.yScale); m_SenceBox.minYCoord = std::min(m_SenceBox.minYCoord, m_Extrude3DInfo.yTransform ); - m_SenceBox.maxZCoord = std::max(m_SenceBox.maxZCoord, m_Extrude3DInfo.zTransform - (m_Extrude3DInfo.reverse - 1) * m_Extrude3DInfo.zScale); - m_SenceBox.minZCoord = std::min(m_SenceBox.minZCoord, m_Extrude3DInfo.zTransform - m_Extrude3DInfo.reverse * m_Extrude3DInfo.zScale); + m_SenceBox.maxZCoord = std::max(m_SenceBox.maxZCoord, m_Extrude3DInfo.zTransform + m_Extrude3DInfo.zScale); + m_SenceBox.minZCoord = std::min(m_SenceBox.minZCoord, m_Extrude3DInfo.zTransform); } void OpenGL3DRenderer::EndAddShape3DExtrudeObject() @@ -1131,7 +1130,7 @@ void OpenGL3DRenderer::RenderExtrudeBottomSurface(const Extrude3DInfo& extrude3D } else { - glm::mat4 topTrans = glm::translate(glm::vec3(0.0, 0.0, -actualZTrans)); + glm::mat4 topTrans = glm::translate(glm::vec3(0.0, 0.0, actualZTrans)); glm::mat4 topScale = glm::scale(xyScale, xyScale, xyScale); glm::mat4 aTranslationMatrix = glm::translate(glm::vec3(trans.x, trans.y, trans.z)); m_Model = aTranslationMatrix * extrude3D.rotation * topTrans * topScale; @@ -1352,6 +1351,7 @@ void OpenGL3DRenderer::RenderExtrude3DObject() CHECK_GL_ERROR(); glBindBuffer(GL_UNIFORM_BUFFER, 0); } + extrude3DInfo.reverse = 0; if (extrude3DInfo.rounded) { glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_CubeElementBuf); _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
