diff options
Diffstat (limited to 'drawinglayer/source/primitive2d/embedded3dprimitive2d.cxx')
-rw-r--r-- | drawinglayer/source/primitive2d/embedded3dprimitive2d.cxx | 43 |
1 files changed, 25 insertions, 18 deletions
diff --git a/drawinglayer/source/primitive2d/embedded3dprimitive2d.cxx b/drawinglayer/source/primitive2d/embedded3dprimitive2d.cxx index c4377bb16c62..5805c02a61ed 100644 --- a/drawinglayer/source/primitive2d/embedded3dprimitive2d.cxx +++ b/drawinglayer/source/primitive2d/embedded3dprimitive2d.cxx @@ -110,6 +110,7 @@ namespace drawinglayer mfShadowSlant(fShadowSlant), maScene3DRange(rScene3DRange), maShadowPrimitives(), + maB2DRange(), mbShadow3DChecked(false) { maLightNormal.normalize(); @@ -134,29 +135,35 @@ namespace drawinglayer basegfx::B2DRange Embedded3DPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const { - // use the 3d transformation stack to create a projection of the 3D range - basegfx::B3DRange a3DRange(primitive3d::getB3DRangeFromPrimitive3DSequence(getChildren3D(), getViewInformation3D())); - a3DRange.transform(getViewInformation3D().getObjectToView()); - - // create 2d range from projected 3d and transform with scene's object transformation - basegfx::B2DRange aRetval; - aRetval.expand(basegfx::B2DPoint(a3DRange.getMinX(), a3DRange.getMinY())); - aRetval.expand(basegfx::B2DPoint(a3DRange.getMaxX(), a3DRange.getMaxY())); - aRetval.transform(getObjectTransformation()); - - // cehck for 3D shadows and their 2D projections. If those exist, they need to be - // taken into account - if(impGetShadow3D(rViewInformation)) + if(maB2DRange.isEmpty()) { - const basegfx::B2DRange aShadow2DRange(getB2DRangeFromPrimitive2DSequence(maShadowPrimitives, rViewInformation)); - - if(!aShadow2DRange.isEmpty()) + // use the 3d transformation stack to create a projection of the 3D range + basegfx::B3DRange a3DRange(primitive3d::getB3DRangeFromPrimitive3DSequence(getChildren3D(), getViewInformation3D())); + a3DRange.transform(getViewInformation3D().getObjectToView()); + + // create 2d range from projected 3d and transform with scene's object transformation + basegfx::B2DRange aNewRange; + aNewRange.expand(basegfx::B2DPoint(a3DRange.getMinX(), a3DRange.getMinY())); + aNewRange.expand(basegfx::B2DPoint(a3DRange.getMaxX(), a3DRange.getMaxY())); + aNewRange.transform(getObjectTransformation()); + + // cehck for 3D shadows and their 2D projections. If those exist, they need to be + // taken into account + if(impGetShadow3D(rViewInformation)) { - aRetval.expand(aShadow2DRange); + const basegfx::B2DRange aShadow2DRange(getB2DRangeFromPrimitive2DSequence(maShadowPrimitives, rViewInformation)); + + if(!aShadow2DRange.isEmpty()) + { + aNewRange.expand(aShadow2DRange); + } } + + // assign to buffered value + const_cast< Embedded3DPrimitive2D* >(this)->maB2DRange = aNewRange; } - return aRetval; + return maB2DRange; } // provide unique ID |