Put category and data series names into the shape collection.
Their positions are yet to be calculated. Change-Id: Ibb1f2498eb2af3305c2afb6d41be99eaf279daaf
This commit is contained in:
@@ -16,16 +16,22 @@
|
||||
|
||||
#include "3DChartObjects.hxx"
|
||||
#include "GL3DRenderer.hxx"
|
||||
#include <ExplicitCategoriesProvider.hxx>
|
||||
#include <DataSeriesHelper.hxx>
|
||||
|
||||
using namespace com::sun::star;
|
||||
|
||||
namespace chart {
|
||||
|
||||
GL3DBarChart::GL3DBarChart(const std::vector<VDataSeries*>& rDataSeries,
|
||||
OpenGLWindow& rWindow):
|
||||
GL3DBarChart::GL3DBarChart(
|
||||
const css::uno::Reference<css::chart2::XChartType>& xChartType,
|
||||
const std::vector<VDataSeries*>& rDataSeries,
|
||||
OpenGLWindow& rWindow, ExplicitCategoriesProvider& rCatProvider ) :
|
||||
mxChartType(xChartType),
|
||||
maDataSeries(rDataSeries),
|
||||
mpRenderer(new opengl3D::OpenGL3DRenderer()),
|
||||
mrWindow(rWindow)
|
||||
mrWindow(rWindow),
|
||||
mrCatProvider(rCatProvider)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -40,15 +46,29 @@ void GL3DBarChart::create3DShapes()
|
||||
const float nBarDistanceX = nBarSizeX / 2;
|
||||
const float nBarDistanceY = nBarSizeY / 2;
|
||||
|
||||
sal_uInt32 nId = 1;
|
||||
|
||||
uno::Sequence<OUString> aCats = mrCatProvider.getSimpleCategories();
|
||||
for (sal_Int32 i = 0; i < aCats.getLength(); ++i)
|
||||
// Category name text object.
|
||||
maShapes.push_back(new opengl3D::Text(mpRenderer.get(), aCats[i], nId++));
|
||||
|
||||
maShapes.clear();
|
||||
maShapes.push_back(new opengl3D::Camera(mpRenderer.get()));
|
||||
sal_Int32 nSeriesIndex = 0;
|
||||
sal_uInt32 nId = 1;
|
||||
for(std::vector<VDataSeries*>::const_iterator itr = maDataSeries.begin(),
|
||||
itrEnd = maDataSeries.end(); itr != itrEnd; ++itr)
|
||||
{
|
||||
VDataSeries* pDataSeries = *itr;
|
||||
sal_Int32 nPointCount = pDataSeries->getTotalPointCount();
|
||||
|
||||
// Create series name text object.
|
||||
OUString aSeriesName =
|
||||
DataSeriesHelper::getDataSeriesLabel(
|
||||
pDataSeries->getModel(), mxChartType->getRoleOfSequenceForSeriesLabel());
|
||||
|
||||
maShapes.push_back(new opengl3D::Text(mpRenderer.get(), aSeriesName, nId++));
|
||||
|
||||
for(sal_Int32 nIndex = 0; nIndex < nPointCount; ++nIndex)
|
||||
{
|
||||
float nVal = pDataSeries->getYValue(nIndex);
|
||||
|
@@ -62,7 +62,7 @@ private:
|
||||
class Text : public Renderable3DObject
|
||||
{
|
||||
public:
|
||||
Text(OpenGL3DRenderer* pRenderer, sal_uInt32 nId);
|
||||
Text(OpenGL3DRenderer* pRenderer, const OUString& rStr, sal_uInt32 nId);
|
||||
virtual void render() SAL_OVERRIDE;
|
||||
private:
|
||||
BitmapEx maText;
|
||||
|
@@ -18,6 +18,8 @@
|
||||
|
||||
namespace chart {
|
||||
|
||||
class ExplicitCategoriesProvider;
|
||||
|
||||
namespace opengl3D {
|
||||
|
||||
class Renderable3DObject;
|
||||
@@ -32,7 +34,11 @@ class TemporaryContext;
|
||||
class GL3DBarChart
|
||||
{
|
||||
public:
|
||||
GL3DBarChart(const std::vector<VDataSeries*>& rDataSeries, OpenGLWindow& rContext);
|
||||
GL3DBarChart(
|
||||
const css::uno::Reference<css::chart2::XChartType>& xChartType,
|
||||
const std::vector<VDataSeries*>& rDataSeries, OpenGLWindow& rContext,
|
||||
ExplicitCategoriesProvider& rCatProvider );
|
||||
|
||||
~GL3DBarChart();
|
||||
|
||||
void create3DShapes();
|
||||
@@ -40,12 +46,13 @@ public:
|
||||
void render();
|
||||
|
||||
private:
|
||||
|
||||
css::uno::Reference<css::chart2::XChartType> mxChartType;
|
||||
std::vector<VDataSeries*> maDataSeries;
|
||||
boost::ptr_vector<opengl3D::Renderable3DObject> maShapes;
|
||||
|
||||
boost::scoped_ptr<opengl3D::OpenGL3DRenderer> mpRenderer;
|
||||
OpenGLWindow& mrWindow;
|
||||
ExplicitCategoriesProvider& mrCatProvider;
|
||||
};
|
||||
|
||||
}
|
||||
|
@@ -51,9 +51,10 @@ void Line::render()
|
||||
mpRenderer->EndAddShapePolygon3DObject();
|
||||
}
|
||||
|
||||
Text::Text(OpenGL3DRenderer* pRenderer, sal_uInt32 nId):
|
||||
Text::Text(OpenGL3DRenderer* pRenderer, const OUString& /*rStr*/, sal_uInt32 nId):
|
||||
Renderable3DObject(pRenderer, nId)
|
||||
{
|
||||
// TODO : convert OUString to BitmapEx.
|
||||
}
|
||||
|
||||
void Text::render()
|
||||
|
@@ -3121,45 +3121,53 @@ void ChartView::createShapes3D()
|
||||
|
||||
uno::Sequence< uno::Reference< XCoordinateSystem > > aCooSysList( xCooSysContainer->getCoordinateSystems() );
|
||||
std::vector<VDataSeries*> aDataSeries;
|
||||
for( sal_Int32 nCS = 0; nCS < aCooSysList.getLength(); ++nCS )
|
||||
|
||||
if (aCooSysList.getLength() != 1)
|
||||
// Supporting multiple coordinates in a truly 3D chart (which implies
|
||||
// it's a Cartesian coordinate system) is a bit of a challenge, if not
|
||||
// impossible.
|
||||
return;
|
||||
|
||||
uno::Reference<XCoordinateSystem> xCooSys( aCooSysList[0] );
|
||||
|
||||
//iterate through all chart types in the current coordinate system
|
||||
uno::Reference< XChartTypeContainer > xChartTypeContainer( xCooSys, uno::UNO_QUERY );
|
||||
OSL_ASSERT( xChartTypeContainer.is());
|
||||
if( !xChartTypeContainer.is() )
|
||||
return;
|
||||
|
||||
uno::Sequence< uno::Reference< XChartType > > aChartTypeList( xChartTypeContainer->getChartTypes() );
|
||||
if (aChartTypeList.getLength() != 1)
|
||||
// Likewise, we can't really support multiple chart types here.
|
||||
return;
|
||||
|
||||
uno::Reference< XChartType > xChartType( aChartTypeList[0] );
|
||||
|
||||
uno::Reference< XDataSeriesContainer > xDataSeriesContainer( xChartType, uno::UNO_QUERY );
|
||||
OSL_ASSERT( xDataSeriesContainer.is());
|
||||
if( !xDataSeriesContainer.is() )
|
||||
return;
|
||||
|
||||
uno::Sequence< uno::Reference< XDataSeries > > aSeriesList( xDataSeriesContainer->getDataSeries() );
|
||||
for( sal_Int32 nS = 0; nS < aSeriesList.getLength(); ++nS )
|
||||
{
|
||||
uno::Reference< XCoordinateSystem > xCooSys( aCooSysList[nCS] );
|
||||
|
||||
//iterate through all chart types in the current coordinate system
|
||||
uno::Reference< XChartTypeContainer > xChartTypeContainer( xCooSys, uno::UNO_QUERY );
|
||||
OSL_ASSERT( xChartTypeContainer.is());
|
||||
if( !xChartTypeContainer.is() )
|
||||
uno::Reference< XDataSeries > xDataSeries( aSeriesList[nS], uno::UNO_QUERY );
|
||||
if(!xDataSeries.is())
|
||||
continue;
|
||||
uno::Sequence< uno::Reference< XChartType > > aChartTypeList( xChartTypeContainer->getChartTypes() );
|
||||
for( sal_Int32 nT = 0; nT < aChartTypeList.getLength(); ++nT )
|
||||
{
|
||||
uno::Reference< XChartType > xChartType( aChartTypeList[nT] );
|
||||
|
||||
uno::Reference< XDataSeriesContainer > xDataSeriesContainer( xChartType, uno::UNO_QUERY );
|
||||
OSL_ASSERT( xDataSeriesContainer.is());
|
||||
if( !xDataSeriesContainer.is() )
|
||||
continue;
|
||||
|
||||
uno::Sequence< uno::Reference< XDataSeries > > aSeriesList( xDataSeriesContainer->getDataSeries() );
|
||||
for( sal_Int32 nS = 0; nS < aSeriesList.getLength(); ++nS )
|
||||
{
|
||||
uno::Reference< XDataSeries > xDataSeries( aSeriesList[nS], uno::UNO_QUERY );
|
||||
if(!xDataSeries.is())
|
||||
continue;
|
||||
|
||||
VDataSeries* pSeries = new VDataSeries( xDataSeries );
|
||||
aDataSeries.push_back(pSeries);
|
||||
}
|
||||
}
|
||||
VDataSeries* pSeries = new VDataSeries( xDataSeries );
|
||||
aDataSeries.push_back(pSeries);
|
||||
}
|
||||
|
||||
OpenGLWindow* pWindow = mrChartModel.getOpenGLWindow();
|
||||
if(!pWindow)
|
||||
return;
|
||||
|
||||
boost::scoped_ptr<ExplicitCategoriesProvider> pCatProvider(new ExplicitCategoriesProvider(xCooSys, mrChartModel));
|
||||
|
||||
pWindow->Show();
|
||||
|
||||
GL3DBarChart aBarChart(aDataSeries, *pWindow);
|
||||
GL3DBarChart aBarChart(xChartType, aDataSeries, *pWindow, *pCatProvider);
|
||||
aBarChart.create3DShapes();
|
||||
aBarChart.render();
|
||||
}
|
||||
|
Reference in New Issue
Block a user