diff options
Diffstat (limited to 'chart2')
-rw-r--r-- | chart2/source/view/diagram/VDiagram.cxx | 137 | ||||
-rw-r--r-- | chart2/source/view/main/ChartItemPool.cxx | 19 | ||||
-rw-r--r-- | chart2/source/view/main/ChartItemPool.hxx | 2 | ||||
-rw-r--r-- | chart2/source/view/main/DrawModelWrapper.cxx | 2 | ||||
-rw-r--r-- | chart2/source/view/main/PropertyMapper.cxx | 4 |
5 files changed, 75 insertions, 89 deletions
diff --git a/chart2/source/view/diagram/VDiagram.cxx b/chart2/source/view/diagram/VDiagram.cxx index 103134b32..23fa74da8 100644 --- a/chart2/source/view/diagram/VDiagram.cxx +++ b/chart2/source/view/diagram/VDiagram.cxx @@ -523,6 +523,72 @@ void VDiagram::createShapes_3d() "com.sun.star.drawing.Shape3DSceneObject" ) ), uno::UNO_QUERY ); m_xLogicTarget->add(m_xOuterGroupShape); + uno::Reference< drawing::XShapes > xOuterGroup_Shapes = + uno::Reference<drawing::XShapes>( m_xOuterGroupShape, uno::UNO_QUERY ); + + + //------------------------------------------------------------------------- + //create additional group to manipulate the aspect ratio of the whole diagram: + xOuterGroup_Shapes = m_pShapeFactory->createGroup3D( xOuterGroup_Shapes, rtl::OUString() ); + + m_xAspectRatio3D = uno::Reference< beans::XPropertySet >( xOuterGroup_Shapes, uno::UNO_QUERY ); + + //--------------------------- + + bool bAddFloorAndWall = DiagramHelper::isSupportingFloorAndWall( m_xDiagram ); + + //add walls + { + uno::Reference< beans::XPropertySet > xWallProp( NULL ); + if( m_xDiagram.is() ) + xWallProp=uno::Reference< beans::XPropertySet >( m_xDiagram->getWall()); + + rtl::OUString aWallCID( ObjectIdentifier::createClassifiedIdentifier( OBJECTTYPE_DIAGRAM_WALL, rtl::OUString() ) );//@todo read CID from model + if( !bAddFloorAndWall ) + aWallCID = rtl::OUString(); + uno::Reference< drawing::XShapes > xWallGroup_Shapes( m_pShapeFactory->createGroup3D( xOuterGroup_Shapes, aWallCID ) ); + //add left wall + { + double xPos = 0.0; + CuboidPlanePosition eLeftWallPos( ThreeDHelper::getAutomaticCuboidPlanePositionForStandardLeftWall( uno::Reference< beans::XPropertySet >( m_xDiagram, uno::UNO_QUERY ) ) ); + if( CuboidPlanePosition_Right==eLeftWallPos ) + xPos = FIXED_SIZE_FOR_3D_CHART_VOLUME; + Stripe aStripe( drawing::Position3D(xPos,0,0) + , drawing::Direction3D(0,FIXED_SIZE_FOR_3D_CHART_VOLUME,0) + , drawing::Direction3D(0,0,FIXED_SIZE_FOR_3D_CHART_VOLUME) ); + + uno::Reference< drawing::XShape > xShape = + m_pShapeFactory->createStripe( xWallGroup_Shapes, aStripe + , xWallProp, PropertyMapper::getPropertyNameMapForFillAndLineProperties(), true ); + if( !bAddFloorAndWall ) + { + //we always need this object as dummy object for correct scene dimensions + //but it should not be visible in this case: + ShapeFactory::makeShapeInvisible( xShape ); + } + } + //add back wall + { + double zPos = 0.0; + CuboidPlanePosition eBackWallPos( ThreeDHelper::getAutomaticCuboidPlanePositionForStandardBackWall( uno::Reference< beans::XPropertySet >( m_xDiagram, uno::UNO_QUERY ) ) ); + if( CuboidPlanePosition_Front==eBackWallPos ) + zPos = FIXED_SIZE_FOR_3D_CHART_VOLUME; + Stripe aStripe( drawing::Position3D(0,0,zPos) + , drawing::Direction3D(FIXED_SIZE_FOR_3D_CHART_VOLUME,0,0) + , drawing::Direction3D(0,FIXED_SIZE_FOR_3D_CHART_VOLUME,0) ); + + uno::Reference< drawing::XShape > xShape = + m_pShapeFactory->createStripe(xWallGroup_Shapes, aStripe + , xWallProp, PropertyMapper::getPropertyNameMapForFillAndLineProperties(), true ); + if( !bAddFloorAndWall ) + { + //we always need this object as dummy object for correct scene dimensions + //but it should not be visible in this case: + ShapeFactory::makeShapeInvisible( xShape ); + } + } + } + try { uno::Reference< beans::XPropertySet > xSourceProp( m_xDiagram, uno::UNO_QUERY_THROW ); @@ -563,6 +629,8 @@ void VDiagram::createShapes_3d() else aEffectiveTranformation.shearXY(m_fYAnglePi,-m_fXAnglePi); + //#i98497# 3D charts are rendered with wrong size + E3DModifySceneSnapRectUpdater aUpdater(lcl_getE3dScene( m_xOuterGroupShape )); xDestProp->setPropertyValue( C2U( UNO_NAME_3D_TRANSFORM_MATRIX ), uno::makeAny( BaseGFXHelper::B3DHomMatrixToHomogenMatrix( aEffectiveTranformation ) ) ); } @@ -572,20 +640,6 @@ void VDiagram::createShapes_3d() ASSERT_EXCEPTION( ex ); } - uno::Reference< drawing::XShapes > xOuterGroup_Shapes = - uno::Reference<drawing::XShapes>( m_xOuterGroupShape, uno::UNO_QUERY ); - - - //------------------------------------------------------------------------- - //create additional group to manipulate the aspect ratio of the whole diagram: - xOuterGroup_Shapes = m_pShapeFactory->createGroup3D( xOuterGroup_Shapes, rtl::OUString() ); - - m_xAspectRatio3D = uno::Reference< beans::XPropertySet >( xOuterGroup_Shapes, uno::UNO_QUERY ); - - //--------------------------- - - bool bAddFloorAndWall = DiagramHelper::isSupportingFloorAndWall( m_xDiagram ); - //add floor plate { uno::Reference< beans::XPropertySet > xFloorProp( NULL ); @@ -623,6 +677,7 @@ void VDiagram::createShapes_3d() aM.rotate(F_PI/2.0,0.0,0.0); aM.translate(0.0,FLOOR_THICKNESS, 0.0); drawing::HomogenMatrix aHM = B3DHomMatrixToHomogenMatrix(aM); + E3DModifySceneSnapRectUpdater aUpdater(lcl_getE3dScene( m_xOuterGroupShape )); xShapeProp->setPropertyValue( C2U( UNO_NAME_3D_TRANSFORM_MATRIX ) , uno::makeAny(aHM) ); } @@ -643,59 +698,6 @@ void VDiagram::createShapes_3d() ShapeFactory::setShapeName( xShape, aFloorCID ); } } - - //--------------------------- - //add walls - { - uno::Reference< beans::XPropertySet > xWallProp( NULL ); - if( m_xDiagram.is() ) - xWallProp=uno::Reference< beans::XPropertySet >( m_xDiagram->getWall()); - - rtl::OUString aWallCID( ObjectIdentifier::createClassifiedIdentifier( OBJECTTYPE_DIAGRAM_WALL, rtl::OUString() ) );//@todo read CID from model - if( !bAddFloorAndWall ) - aWallCID = rtl::OUString(); - uno::Reference< drawing::XShapes > xWallGroup_Shapes( m_pShapeFactory->createGroup3D( xOuterGroup_Shapes, aWallCID ) ); - //add left wall - { - double xPos = 0.0; - CuboidPlanePosition eLeftWallPos( ThreeDHelper::getAutomaticCuboidPlanePositionForStandardLeftWall( uno::Reference< beans::XPropertySet >( m_xDiagram, uno::UNO_QUERY ) ) ); - if( CuboidPlanePosition_Right==eLeftWallPos ) - xPos = FIXED_SIZE_FOR_3D_CHART_VOLUME; - Stripe aStripe( drawing::Position3D(xPos,0,0) - , drawing::Direction3D(0,FIXED_SIZE_FOR_3D_CHART_VOLUME,0) - , drawing::Direction3D(0,0,FIXED_SIZE_FOR_3D_CHART_VOLUME) ); - - uno::Reference< drawing::XShape > xShape = - m_pShapeFactory->createStripe( xWallGroup_Shapes, aStripe - , xWallProp, PropertyMapper::getPropertyNameMapForFillAndLineProperties(), true ); - if( !bAddFloorAndWall ) - { - //we always need this object as dummy object for correct scene dimensions - //but it should not be visible in this case: - ShapeFactory::makeShapeInvisible( xShape ); - } - } - //add back wall - { - double zPos = 0.0; - CuboidPlanePosition eBackWallPos( ThreeDHelper::getAutomaticCuboidPlanePositionForStandardBackWall( uno::Reference< beans::XPropertySet >( m_xDiagram, uno::UNO_QUERY ) ) ); - if( CuboidPlanePosition_Front==eBackWallPos ) - zPos = FIXED_SIZE_FOR_3D_CHART_VOLUME; - Stripe aStripe( drawing::Position3D(0,0,zPos) - , drawing::Direction3D(FIXED_SIZE_FOR_3D_CHART_VOLUME,0,0) - , drawing::Direction3D(0,FIXED_SIZE_FOR_3D_CHART_VOLUME,0) ); - - uno::Reference< drawing::XShape > xShape = - m_pShapeFactory->createStripe(xWallGroup_Shapes, aStripe - , xWallProp, PropertyMapper::getPropertyNameMapForFillAndLineProperties(), true ); - if( !bAddFloorAndWall ) - { - //we always need this object as dummy object for correct scene dimensions - //but it should not be visible in this case: - ShapeFactory::makeShapeInvisible( xShape ); - } - } - } //--------------------------- //create an additional scene for the smaller inner coordinate region: @@ -716,6 +718,7 @@ void VDiagram::createShapes_3d() ::basegfx::B3DHomMatrix aM; aM.translate(GRID_TO_WALL_DISTANCE/fXScale, (FLOOR_THICKNESS+GRID_TO_WALL_DISTANCE)/fYScale, GRID_TO_WALL_DISTANCE/fZScale); aM.scale( fXScale, fYScale, fZScale ); + E3DModifySceneSnapRectUpdater aUpdater(lcl_getE3dScene( m_xOuterGroupShape )); xShapeProp->setPropertyValue( C2U( UNO_NAME_3D_TRANSFORM_MATRIX ) , uno::makeAny(BaseGFXHelper::B3DHomMatrixToHomogenMatrix(aM)) ); } diff --git a/chart2/source/view/main/ChartItemPool.cxx b/chart2/source/view/main/ChartItemPool.cxx index 4ba957232..e00deac2d 100644 --- a/chart2/source/view/main/ChartItemPool.cxx +++ b/chart2/source/view/main/ChartItemPool.cxx @@ -46,25 +46,6 @@ #define _SVSTDARR_ULONGS #include <svtools/svstdarr.hxx> -// for Singleton GetChartItemPool() function -// --------------------------------------- -#ifndef INCLUDED_OSL_DOUBLECHECKEDLOCKING_H -#include "rtl/instance.hxx" -#endif -#include "osl/getglobalmutex.hxx" - -namespace { -struct ChartItemPoolInitialization -{ - ::chart::ChartItemPool * operator()() - { - static ::chart::ChartItemPool aInstance; - return &aInstance; - } -}; -} -// --------------------------------------- - namespace chart { diff --git a/chart2/source/view/main/ChartItemPool.hxx b/chart2/source/view/main/ChartItemPool.hxx index d0f29c5be..8723753e2 100644 --- a/chart2/source/view/main/ChartItemPool.hxx +++ b/chart2/source/view/main/ChartItemPool.hxx @@ -44,7 +44,9 @@ private: public: ChartItemPool(); ChartItemPool(const ChartItemPool& rPool); +protected: virtual ~ChartItemPool(); +public: virtual SfxItemPool* Clone() const; SfxMapUnit GetMetric( USHORT nWhich ) const; diff --git a/chart2/source/view/main/DrawModelWrapper.cxx b/chart2/source/view/main/DrawModelWrapper.cxx index 8a296b413..e03e9e42d 100644 --- a/chart2/source/view/main/DrawModelWrapper.cxx +++ b/chart2/source/view/main/DrawModelWrapper.cxx @@ -208,7 +208,7 @@ DrawModelWrapper::~DrawModelWrapper() } pPool = pSecondary; } - delete m_pChartItemPool; + SfxItemPool::Free(m_pChartItemPool); } } diff --git a/chart2/source/view/main/PropertyMapper.cxx b/chart2/source/view/main/PropertyMapper.cxx index 82c6c25ac..595aa7b4a 100644 --- a/chart2/source/view/main/PropertyMapper.cxx +++ b/chart2/source/view/main/PropertyMapper.cxx @@ -200,8 +200,8 @@ const tMakePropertyNameMap& PropertyMapper::getPropertyNameMapForCharacterProper ( C2U( "CharContoured" ), C2U("CharContoured") ) /////// ( C2U( "CharCrossedOut" ), C2U("CharCrossedOut") ) //setting this explicitly somehow conflicts with CharStrikeout ( C2U( "CharEmphasis" ), C2U("CharEmphasis") )//the service style::CharacterProperties describes a property called 'CharEmphasize' wich is nowhere implemented - ( C2U( "CharEscapement" ), C2U("CharEscapement") ) - ( C2U( "CharEscapementHeight" ), C2U("CharEscapementHeight") ) +// ( C2U( "CharEscapement" ), C2U("CharEscapement") ) //#i98344# @future: add these to properties again, if the user interface offers the possibility to change them; then make sure that older wrong files are corrected on import +// ( C2U( "CharEscapementHeight" ), C2U("CharEscapementHeight") ) //#i98344# @future: add these to properties again, if the user interface offers the possibility to change them; then make sure that older wrong files are corrected on import // ( C2U( "CharFlash" ), C2U("Flashing") ) ( C2U( "CharFontFamily" ), C2U("CharFontFamily") ) |