1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove 25*b1cdbd2cSJim Jagielski #include "precompiled_drawinglayer.hxx" 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> 28*b1cdbd2cSJim Jagielski #include <basegfx/polygon/b2dpolypolygontools.hxx> 29*b1cdbd2cSJim Jagielski #include <basegfx/tools/canvastools.hxx> 30*b1cdbd2cSJim Jagielski #include <drawinglayer/primitive2d/fillgradientprimitive2d.hxx> 31*b1cdbd2cSJim Jagielski #include <drawinglayer/primitive2d/maskprimitive2d.hxx> 32*b1cdbd2cSJim Jagielski #include <drawinglayer/primitive2d/fillhatchprimitive2d.hxx> 33*b1cdbd2cSJim Jagielski #include <basegfx/matrix/b2dhommatrix.hxx> 34*b1cdbd2cSJim Jagielski #include <drawinglayer/primitive2d/fillgraphicprimitive2d.hxx> 35*b1cdbd2cSJim Jagielski #include <drawinglayer/primitive2d/polygonprimitive2d.hxx> 36*b1cdbd2cSJim Jagielski #include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> 37*b1cdbd2cSJim Jagielski #include <basegfx/matrix/b2dhommatrixtools.hxx> 38*b1cdbd2cSJim Jagielski #include <drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx> 39*b1cdbd2cSJim Jagielski #include <drawinglayer/geometry/viewinformation2d.hxx> 40*b1cdbd2cSJim Jagielski #include <vcl/graph.hxx> 41*b1cdbd2cSJim Jagielski 42*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielski using namespace com::sun::star; 45*b1cdbd2cSJim Jagielski 46*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 47*b1cdbd2cSJim Jagielski 48*b1cdbd2cSJim Jagielski namespace drawinglayer 49*b1cdbd2cSJim Jagielski { 50*b1cdbd2cSJim Jagielski namespace primitive2d 51*b1cdbd2cSJim Jagielski { create2DDecomposition(const geometry::ViewInformation2D &) const52*b1cdbd2cSJim Jagielski Primitive2DSequence PolyPolygonHairlinePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const 53*b1cdbd2cSJim Jagielski { 54*b1cdbd2cSJim Jagielski const basegfx::B2DPolyPolygon aPolyPolygon(getB2DPolyPolygon()); 55*b1cdbd2cSJim Jagielski const sal_uInt32 nCount(aPolyPolygon.count()); 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski if(nCount) 58*b1cdbd2cSJim Jagielski { 59*b1cdbd2cSJim Jagielski Primitive2DSequence aRetval(nCount); 60*b1cdbd2cSJim Jagielski 61*b1cdbd2cSJim Jagielski for(sal_uInt32 a(0L); a < nCount; a++) 62*b1cdbd2cSJim Jagielski { 63*b1cdbd2cSJim Jagielski aRetval[a] = Primitive2DReference(new PolygonHairlinePrimitive2D(aPolyPolygon.getB2DPolygon(a), getBColor())); 64*b1cdbd2cSJim Jagielski } 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski return aRetval; 67*b1cdbd2cSJim Jagielski } 68*b1cdbd2cSJim Jagielski else 69*b1cdbd2cSJim Jagielski { 70*b1cdbd2cSJim Jagielski return Primitive2DSequence(); 71*b1cdbd2cSJim Jagielski } 72*b1cdbd2cSJim Jagielski } 73*b1cdbd2cSJim Jagielski PolyPolygonHairlinePrimitive2D(const basegfx::B2DPolyPolygon & rPolyPolygon,const basegfx::BColor & rBColor)74*b1cdbd2cSJim Jagielski PolyPolygonHairlinePrimitive2D::PolyPolygonHairlinePrimitive2D(const basegfx::B2DPolyPolygon& rPolyPolygon, const basegfx::BColor& rBColor) 75*b1cdbd2cSJim Jagielski : BufferedDecompositionPrimitive2D(), 76*b1cdbd2cSJim Jagielski maPolyPolygon(rPolyPolygon), 77*b1cdbd2cSJim Jagielski maBColor(rBColor) 78*b1cdbd2cSJim Jagielski { 79*b1cdbd2cSJim Jagielski } 80*b1cdbd2cSJim Jagielski operator ==(const BasePrimitive2D & rPrimitive) const81*b1cdbd2cSJim Jagielski bool PolyPolygonHairlinePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const 82*b1cdbd2cSJim Jagielski { 83*b1cdbd2cSJim Jagielski if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) 84*b1cdbd2cSJim Jagielski { 85*b1cdbd2cSJim Jagielski const PolyPolygonHairlinePrimitive2D& rCompare = (PolyPolygonHairlinePrimitive2D&)rPrimitive; 86*b1cdbd2cSJim Jagielski 87*b1cdbd2cSJim Jagielski return (getB2DPolyPolygon() == rCompare.getB2DPolyPolygon() 88*b1cdbd2cSJim Jagielski && getBColor() == rCompare.getBColor()); 89*b1cdbd2cSJim Jagielski } 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski return false; 92*b1cdbd2cSJim Jagielski } 93*b1cdbd2cSJim Jagielski getB2DRange(const geometry::ViewInformation2D &) const94*b1cdbd2cSJim Jagielski basegfx::B2DRange PolyPolygonHairlinePrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const 95*b1cdbd2cSJim Jagielski { 96*b1cdbd2cSJim Jagielski // return range 97*b1cdbd2cSJim Jagielski return basegfx::tools::getRange(getB2DPolyPolygon()); 98*b1cdbd2cSJim Jagielski } 99*b1cdbd2cSJim Jagielski 100*b1cdbd2cSJim Jagielski // provide unique ID 101*b1cdbd2cSJim Jagielski ImplPrimitrive2DIDBlock(PolyPolygonHairlinePrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONHAIRLINEPRIMITIVE2D) 102*b1cdbd2cSJim Jagielski 103*b1cdbd2cSJim Jagielski } // end of namespace primitive2d 104*b1cdbd2cSJim Jagielski } // end of namespace drawinglayer 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 107*b1cdbd2cSJim Jagielski 108*b1cdbd2cSJim Jagielski namespace drawinglayer 109*b1cdbd2cSJim Jagielski { 110*b1cdbd2cSJim Jagielski namespace primitive2d 111*b1cdbd2cSJim Jagielski { create2DDecomposition(const geometry::ViewInformation2D &) const112*b1cdbd2cSJim Jagielski Primitive2DSequence PolyPolygonMarkerPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const 113*b1cdbd2cSJim Jagielski { 114*b1cdbd2cSJim Jagielski const basegfx::B2DPolyPolygon aPolyPolygon(getB2DPolyPolygon()); 115*b1cdbd2cSJim Jagielski const sal_uInt32 nCount(aPolyPolygon.count()); 116*b1cdbd2cSJim Jagielski 117*b1cdbd2cSJim Jagielski if(nCount) 118*b1cdbd2cSJim Jagielski { 119*b1cdbd2cSJim Jagielski Primitive2DSequence aRetval(nCount); 120*b1cdbd2cSJim Jagielski 121*b1cdbd2cSJim Jagielski for(sal_uInt32 a(0L); a < nCount; a++) 122*b1cdbd2cSJim Jagielski { 123*b1cdbd2cSJim Jagielski aRetval[a] = Primitive2DReference( 124*b1cdbd2cSJim Jagielski new PolygonMarkerPrimitive2D( 125*b1cdbd2cSJim Jagielski aPolyPolygon.getB2DPolygon(a), 126*b1cdbd2cSJim Jagielski getRGBColorA(), 127*b1cdbd2cSJim Jagielski getRGBColorB(), 128*b1cdbd2cSJim Jagielski getDiscreteDashLength())); 129*b1cdbd2cSJim Jagielski } 130*b1cdbd2cSJim Jagielski 131*b1cdbd2cSJim Jagielski return aRetval; 132*b1cdbd2cSJim Jagielski } 133*b1cdbd2cSJim Jagielski else 134*b1cdbd2cSJim Jagielski { 135*b1cdbd2cSJim Jagielski return Primitive2DSequence(); 136*b1cdbd2cSJim Jagielski } 137*b1cdbd2cSJim Jagielski } 138*b1cdbd2cSJim Jagielski PolyPolygonMarkerPrimitive2D(const basegfx::B2DPolyPolygon & rPolyPolygon,const basegfx::BColor & rRGBColorA,const basegfx::BColor & rRGBColorB,double fDiscreteDashLength)139*b1cdbd2cSJim Jagielski PolyPolygonMarkerPrimitive2D::PolyPolygonMarkerPrimitive2D( 140*b1cdbd2cSJim Jagielski const basegfx::B2DPolyPolygon& rPolyPolygon, 141*b1cdbd2cSJim Jagielski const basegfx::BColor& rRGBColorA, 142*b1cdbd2cSJim Jagielski const basegfx::BColor& rRGBColorB, 143*b1cdbd2cSJim Jagielski double fDiscreteDashLength) 144*b1cdbd2cSJim Jagielski : BufferedDecompositionPrimitive2D(), 145*b1cdbd2cSJim Jagielski maPolyPolygon(rPolyPolygon), 146*b1cdbd2cSJim Jagielski maRGBColorA(rRGBColorA), 147*b1cdbd2cSJim Jagielski maRGBColorB(rRGBColorB), 148*b1cdbd2cSJim Jagielski mfDiscreteDashLength(fDiscreteDashLength) 149*b1cdbd2cSJim Jagielski { 150*b1cdbd2cSJim Jagielski } 151*b1cdbd2cSJim Jagielski operator ==(const BasePrimitive2D & rPrimitive) const152*b1cdbd2cSJim Jagielski bool PolyPolygonMarkerPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const 153*b1cdbd2cSJim Jagielski { 154*b1cdbd2cSJim Jagielski if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) 155*b1cdbd2cSJim Jagielski { 156*b1cdbd2cSJim Jagielski const PolyPolygonMarkerPrimitive2D& rCompare = (PolyPolygonMarkerPrimitive2D&)rPrimitive; 157*b1cdbd2cSJim Jagielski 158*b1cdbd2cSJim Jagielski return (getB2DPolyPolygon() == rCompare.getB2DPolyPolygon() 159*b1cdbd2cSJim Jagielski && getRGBColorA() == rCompare.getRGBColorA() 160*b1cdbd2cSJim Jagielski && getRGBColorB() == rCompare.getRGBColorB() 161*b1cdbd2cSJim Jagielski && getDiscreteDashLength() == rCompare.getDiscreteDashLength()); 162*b1cdbd2cSJim Jagielski } 163*b1cdbd2cSJim Jagielski 164*b1cdbd2cSJim Jagielski return false; 165*b1cdbd2cSJim Jagielski } 166*b1cdbd2cSJim Jagielski getB2DRange(const geometry::ViewInformation2D &) const167*b1cdbd2cSJim Jagielski basegfx::B2DRange PolyPolygonMarkerPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const 168*b1cdbd2cSJim Jagielski { 169*b1cdbd2cSJim Jagielski // return range 170*b1cdbd2cSJim Jagielski return basegfx::tools::getRange(getB2DPolyPolygon()); 171*b1cdbd2cSJim Jagielski } 172*b1cdbd2cSJim Jagielski 173*b1cdbd2cSJim Jagielski // provide unique ID 174*b1cdbd2cSJim Jagielski ImplPrimitrive2DIDBlock(PolyPolygonMarkerPrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONMARKERPRIMITIVE2D) 175*b1cdbd2cSJim Jagielski 176*b1cdbd2cSJim Jagielski } // end of namespace primitive2d 177*b1cdbd2cSJim Jagielski } // end of namespace drawinglayer 178*b1cdbd2cSJim Jagielski 179*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 180*b1cdbd2cSJim Jagielski 181*b1cdbd2cSJim Jagielski namespace drawinglayer 182*b1cdbd2cSJim Jagielski { 183*b1cdbd2cSJim Jagielski namespace primitive2d 184*b1cdbd2cSJim Jagielski { create2DDecomposition(const geometry::ViewInformation2D &) const185*b1cdbd2cSJim Jagielski Primitive2DSequence PolyPolygonStrokePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const 186*b1cdbd2cSJim Jagielski { 187*b1cdbd2cSJim Jagielski const basegfx::B2DPolyPolygon aPolyPolygon(getB2DPolyPolygon()); 188*b1cdbd2cSJim Jagielski const sal_uInt32 nCount(aPolyPolygon.count()); 189*b1cdbd2cSJim Jagielski 190*b1cdbd2cSJim Jagielski if(nCount) 191*b1cdbd2cSJim Jagielski { 192*b1cdbd2cSJim Jagielski Primitive2DSequence aRetval(nCount); 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielski for(sal_uInt32 a(0L); a < nCount; a++) 195*b1cdbd2cSJim Jagielski { 196*b1cdbd2cSJim Jagielski aRetval[a] = Primitive2DReference( 197*b1cdbd2cSJim Jagielski new PolygonStrokePrimitive2D( 198*b1cdbd2cSJim Jagielski aPolyPolygon.getB2DPolygon(a), getLineAttribute(), getStrokeAttribute())); 199*b1cdbd2cSJim Jagielski } 200*b1cdbd2cSJim Jagielski 201*b1cdbd2cSJim Jagielski return aRetval; 202*b1cdbd2cSJim Jagielski } 203*b1cdbd2cSJim Jagielski else 204*b1cdbd2cSJim Jagielski { 205*b1cdbd2cSJim Jagielski return Primitive2DSequence(); 206*b1cdbd2cSJim Jagielski } 207*b1cdbd2cSJim Jagielski } 208*b1cdbd2cSJim Jagielski PolyPolygonStrokePrimitive2D(const basegfx::B2DPolyPolygon & rPolyPolygon,const attribute::LineAttribute & rLineAttribute,const attribute::StrokeAttribute & rStrokeAttribute)209*b1cdbd2cSJim Jagielski PolyPolygonStrokePrimitive2D::PolyPolygonStrokePrimitive2D( 210*b1cdbd2cSJim Jagielski const basegfx::B2DPolyPolygon& rPolyPolygon, 211*b1cdbd2cSJim Jagielski const attribute::LineAttribute& rLineAttribute, 212*b1cdbd2cSJim Jagielski const attribute::StrokeAttribute& rStrokeAttribute) 213*b1cdbd2cSJim Jagielski : BufferedDecompositionPrimitive2D(), 214*b1cdbd2cSJim Jagielski maPolyPolygon(rPolyPolygon), 215*b1cdbd2cSJim Jagielski maLineAttribute(rLineAttribute), 216*b1cdbd2cSJim Jagielski maStrokeAttribute(rStrokeAttribute) 217*b1cdbd2cSJim Jagielski { 218*b1cdbd2cSJim Jagielski } 219*b1cdbd2cSJim Jagielski PolyPolygonStrokePrimitive2D(const basegfx::B2DPolyPolygon & rPolyPolygon,const attribute::LineAttribute & rLineAttribute)220*b1cdbd2cSJim Jagielski PolyPolygonStrokePrimitive2D::PolyPolygonStrokePrimitive2D( 221*b1cdbd2cSJim Jagielski const basegfx::B2DPolyPolygon& rPolyPolygon, 222*b1cdbd2cSJim Jagielski const attribute::LineAttribute& rLineAttribute) 223*b1cdbd2cSJim Jagielski : BufferedDecompositionPrimitive2D(), 224*b1cdbd2cSJim Jagielski maPolyPolygon(rPolyPolygon), 225*b1cdbd2cSJim Jagielski maLineAttribute(rLineAttribute), 226*b1cdbd2cSJim Jagielski maStrokeAttribute() 227*b1cdbd2cSJim Jagielski { 228*b1cdbd2cSJim Jagielski } 229*b1cdbd2cSJim Jagielski operator ==(const BasePrimitive2D & rPrimitive) const230*b1cdbd2cSJim Jagielski bool PolyPolygonStrokePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const 231*b1cdbd2cSJim Jagielski { 232*b1cdbd2cSJim Jagielski if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) 233*b1cdbd2cSJim Jagielski { 234*b1cdbd2cSJim Jagielski const PolyPolygonStrokePrimitive2D& rCompare = (PolyPolygonStrokePrimitive2D&)rPrimitive; 235*b1cdbd2cSJim Jagielski 236*b1cdbd2cSJim Jagielski return (getB2DPolyPolygon() == rCompare.getB2DPolyPolygon() 237*b1cdbd2cSJim Jagielski && getLineAttribute() == rCompare.getLineAttribute() 238*b1cdbd2cSJim Jagielski && getStrokeAttribute() == rCompare.getStrokeAttribute()); 239*b1cdbd2cSJim Jagielski } 240*b1cdbd2cSJim Jagielski 241*b1cdbd2cSJim Jagielski return false; 242*b1cdbd2cSJim Jagielski } 243*b1cdbd2cSJim Jagielski getB2DRange(const geometry::ViewInformation2D &) const244*b1cdbd2cSJim Jagielski basegfx::B2DRange PolyPolygonStrokePrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const 245*b1cdbd2cSJim Jagielski { 246*b1cdbd2cSJim Jagielski // get range of it (subdivided) 247*b1cdbd2cSJim Jagielski basegfx::B2DRange aRetval(basegfx::tools::getRange(getB2DPolyPolygon())); 248*b1cdbd2cSJim Jagielski 249*b1cdbd2cSJim Jagielski // if width, grow by line width 250*b1cdbd2cSJim Jagielski if(getLineAttribute().getWidth()) 251*b1cdbd2cSJim Jagielski { 252*b1cdbd2cSJim Jagielski aRetval.grow(getLineAttribute().getWidth() / 2.0); 253*b1cdbd2cSJim Jagielski } 254*b1cdbd2cSJim Jagielski 255*b1cdbd2cSJim Jagielski return aRetval; 256*b1cdbd2cSJim Jagielski } 257*b1cdbd2cSJim Jagielski 258*b1cdbd2cSJim Jagielski // provide unique ID 259*b1cdbd2cSJim Jagielski ImplPrimitrive2DIDBlock(PolyPolygonStrokePrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONSTROKEPRIMITIVE2D) 260*b1cdbd2cSJim Jagielski 261*b1cdbd2cSJim Jagielski } // end of namespace primitive2d 262*b1cdbd2cSJim Jagielski } // end of namespace drawinglayer 263*b1cdbd2cSJim Jagielski 264*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 265*b1cdbd2cSJim Jagielski 266*b1cdbd2cSJim Jagielski namespace drawinglayer 267*b1cdbd2cSJim Jagielski { 268*b1cdbd2cSJim Jagielski namespace primitive2d 269*b1cdbd2cSJim Jagielski { create2DDecomposition(const geometry::ViewInformation2D &) const270*b1cdbd2cSJim Jagielski Primitive2DSequence PolyPolygonStrokeArrowPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const 271*b1cdbd2cSJim Jagielski { 272*b1cdbd2cSJim Jagielski const basegfx::B2DPolyPolygon aPolyPolygon(getB2DPolyPolygon()); 273*b1cdbd2cSJim Jagielski const sal_uInt32 nCount(aPolyPolygon.count()); 274*b1cdbd2cSJim Jagielski 275*b1cdbd2cSJim Jagielski if(nCount) 276*b1cdbd2cSJim Jagielski { 277*b1cdbd2cSJim Jagielski Primitive2DSequence aRetval(nCount); 278*b1cdbd2cSJim Jagielski 279*b1cdbd2cSJim Jagielski for(sal_uInt32 a(0L); a < nCount; a++) 280*b1cdbd2cSJim Jagielski { 281*b1cdbd2cSJim Jagielski const basegfx::B2DPolygon aPolygon(aPolyPolygon.getB2DPolygon(a)); 282*b1cdbd2cSJim Jagielski 283*b1cdbd2cSJim Jagielski if(aPolygon.isClosed()) 284*b1cdbd2cSJim Jagielski { 285*b1cdbd2cSJim Jagielski // no need for PolygonStrokeArrowPrimitive2D when polygon is closed 286*b1cdbd2cSJim Jagielski aRetval[a] = Primitive2DReference( 287*b1cdbd2cSJim Jagielski new PolygonStrokePrimitive2D(aPolygon, getLineAttribute(), getStrokeAttribute())); 288*b1cdbd2cSJim Jagielski } 289*b1cdbd2cSJim Jagielski else 290*b1cdbd2cSJim Jagielski { 291*b1cdbd2cSJim Jagielski aRetval[a] = Primitive2DReference( 292*b1cdbd2cSJim Jagielski new PolygonStrokeArrowPrimitive2D(aPolygon, getLineAttribute(), 293*b1cdbd2cSJim Jagielski getStrokeAttribute(), getStart(), getEnd())); 294*b1cdbd2cSJim Jagielski } 295*b1cdbd2cSJim Jagielski } 296*b1cdbd2cSJim Jagielski 297*b1cdbd2cSJim Jagielski return aRetval; 298*b1cdbd2cSJim Jagielski } 299*b1cdbd2cSJim Jagielski else 300*b1cdbd2cSJim Jagielski { 301*b1cdbd2cSJim Jagielski return Primitive2DSequence(); 302*b1cdbd2cSJim Jagielski } 303*b1cdbd2cSJim Jagielski } 304*b1cdbd2cSJim Jagielski PolyPolygonStrokeArrowPrimitive2D(const basegfx::B2DPolyPolygon & rPolyPolygon,const attribute::LineAttribute & rLineAttribute,const attribute::StrokeAttribute & rStrokeAttribute,const attribute::LineStartEndAttribute & rStart,const attribute::LineStartEndAttribute & rEnd)305*b1cdbd2cSJim Jagielski PolyPolygonStrokeArrowPrimitive2D::PolyPolygonStrokeArrowPrimitive2D( 306*b1cdbd2cSJim Jagielski const basegfx::B2DPolyPolygon& rPolyPolygon, 307*b1cdbd2cSJim Jagielski const attribute::LineAttribute& rLineAttribute, 308*b1cdbd2cSJim Jagielski const attribute::StrokeAttribute& rStrokeAttribute, 309*b1cdbd2cSJim Jagielski const attribute::LineStartEndAttribute& rStart, 310*b1cdbd2cSJim Jagielski const attribute::LineStartEndAttribute& rEnd) 311*b1cdbd2cSJim Jagielski : PolyPolygonStrokePrimitive2D(rPolyPolygon, rLineAttribute, rStrokeAttribute), 312*b1cdbd2cSJim Jagielski maStart(rStart), 313*b1cdbd2cSJim Jagielski maEnd(rEnd) 314*b1cdbd2cSJim Jagielski { 315*b1cdbd2cSJim Jagielski } 316*b1cdbd2cSJim Jagielski PolyPolygonStrokeArrowPrimitive2D(const basegfx::B2DPolyPolygon & rPolyPolygon,const attribute::LineAttribute & rLineAttribute,const attribute::LineStartEndAttribute & rStart,const attribute::LineStartEndAttribute & rEnd)317*b1cdbd2cSJim Jagielski PolyPolygonStrokeArrowPrimitive2D::PolyPolygonStrokeArrowPrimitive2D( 318*b1cdbd2cSJim Jagielski const basegfx::B2DPolyPolygon& rPolyPolygon, 319*b1cdbd2cSJim Jagielski const attribute::LineAttribute& rLineAttribute, 320*b1cdbd2cSJim Jagielski const attribute::LineStartEndAttribute& rStart, 321*b1cdbd2cSJim Jagielski const attribute::LineStartEndAttribute& rEnd) 322*b1cdbd2cSJim Jagielski : PolyPolygonStrokePrimitive2D(rPolyPolygon, rLineAttribute), 323*b1cdbd2cSJim Jagielski maStart(rStart), 324*b1cdbd2cSJim Jagielski maEnd(rEnd) 325*b1cdbd2cSJim Jagielski { 326*b1cdbd2cSJim Jagielski } 327*b1cdbd2cSJim Jagielski operator ==(const BasePrimitive2D & rPrimitive) const328*b1cdbd2cSJim Jagielski bool PolyPolygonStrokeArrowPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const 329*b1cdbd2cSJim Jagielski { 330*b1cdbd2cSJim Jagielski if(PolyPolygonStrokePrimitive2D::operator==(rPrimitive)) 331*b1cdbd2cSJim Jagielski { 332*b1cdbd2cSJim Jagielski const PolyPolygonStrokeArrowPrimitive2D& rCompare = (PolyPolygonStrokeArrowPrimitive2D&)rPrimitive; 333*b1cdbd2cSJim Jagielski 334*b1cdbd2cSJim Jagielski return (getStart() == rCompare.getStart() 335*b1cdbd2cSJim Jagielski && getEnd() == rCompare.getEnd()); 336*b1cdbd2cSJim Jagielski } 337*b1cdbd2cSJim Jagielski 338*b1cdbd2cSJim Jagielski return false; 339*b1cdbd2cSJim Jagielski } 340*b1cdbd2cSJim Jagielski getB2DRange(const geometry::ViewInformation2D & rViewInformation) const341*b1cdbd2cSJim Jagielski basegfx::B2DRange PolyPolygonStrokeArrowPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const 342*b1cdbd2cSJim Jagielski { 343*b1cdbd2cSJim Jagielski basegfx::B2DRange aRetval; 344*b1cdbd2cSJim Jagielski 345*b1cdbd2cSJim Jagielski if(getStart().isActive() || getEnd().isActive()) 346*b1cdbd2cSJim Jagielski { 347*b1cdbd2cSJim Jagielski // use decomposition when line start/end is used 348*b1cdbd2cSJim Jagielski return BufferedDecompositionPrimitive2D::getB2DRange(rViewInformation); 349*b1cdbd2cSJim Jagielski } 350*b1cdbd2cSJim Jagielski else 351*b1cdbd2cSJim Jagielski { 352*b1cdbd2cSJim Jagielski // get range from parent 353*b1cdbd2cSJim Jagielski return PolyPolygonStrokePrimitive2D::getB2DRange(rViewInformation); 354*b1cdbd2cSJim Jagielski } 355*b1cdbd2cSJim Jagielski } 356*b1cdbd2cSJim Jagielski 357*b1cdbd2cSJim Jagielski // provide unique ID 358*b1cdbd2cSJim Jagielski ImplPrimitrive2DIDBlock(PolyPolygonStrokeArrowPrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONSTROKEARROWPRIMITIVE2D) 359*b1cdbd2cSJim Jagielski 360*b1cdbd2cSJim Jagielski } // end of namespace primitive2d 361*b1cdbd2cSJim Jagielski } // end of namespace drawinglayer 362*b1cdbd2cSJim Jagielski 363*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 364*b1cdbd2cSJim Jagielski 365*b1cdbd2cSJim Jagielski namespace drawinglayer 366*b1cdbd2cSJim Jagielski { 367*b1cdbd2cSJim Jagielski namespace primitive2d 368*b1cdbd2cSJim Jagielski { PolyPolygonColorPrimitive2D(const basegfx::B2DPolyPolygon & rPolyPolygon,const basegfx::BColor & rBColor)369*b1cdbd2cSJim Jagielski PolyPolygonColorPrimitive2D::PolyPolygonColorPrimitive2D( 370*b1cdbd2cSJim Jagielski const basegfx::B2DPolyPolygon& rPolyPolygon, 371*b1cdbd2cSJim Jagielski const basegfx::BColor& rBColor) 372*b1cdbd2cSJim Jagielski : BasePrimitive2D(), 373*b1cdbd2cSJim Jagielski maPolyPolygon(rPolyPolygon), 374*b1cdbd2cSJim Jagielski maBColor(rBColor) 375*b1cdbd2cSJim Jagielski { 376*b1cdbd2cSJim Jagielski } 377*b1cdbd2cSJim Jagielski operator ==(const BasePrimitive2D & rPrimitive) const378*b1cdbd2cSJim Jagielski bool PolyPolygonColorPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const 379*b1cdbd2cSJim Jagielski { 380*b1cdbd2cSJim Jagielski if(BasePrimitive2D::operator==(rPrimitive)) 381*b1cdbd2cSJim Jagielski { 382*b1cdbd2cSJim Jagielski const PolyPolygonColorPrimitive2D& rCompare = (PolyPolygonColorPrimitive2D&)rPrimitive; 383*b1cdbd2cSJim Jagielski 384*b1cdbd2cSJim Jagielski return (getB2DPolyPolygon() == rCompare.getB2DPolyPolygon() 385*b1cdbd2cSJim Jagielski && getBColor() == rCompare.getBColor()); 386*b1cdbd2cSJim Jagielski } 387*b1cdbd2cSJim Jagielski 388*b1cdbd2cSJim Jagielski return false; 389*b1cdbd2cSJim Jagielski } 390*b1cdbd2cSJim Jagielski getB2DRange(const geometry::ViewInformation2D &) const391*b1cdbd2cSJim Jagielski basegfx::B2DRange PolyPolygonColorPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const 392*b1cdbd2cSJim Jagielski { 393*b1cdbd2cSJim Jagielski // return range 394*b1cdbd2cSJim Jagielski return basegfx::tools::getRange(getB2DPolyPolygon()); 395*b1cdbd2cSJim Jagielski } 396*b1cdbd2cSJim Jagielski 397*b1cdbd2cSJim Jagielski // provide unique ID 398*b1cdbd2cSJim Jagielski ImplPrimitrive2DIDBlock(PolyPolygonColorPrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D) 399*b1cdbd2cSJim Jagielski 400*b1cdbd2cSJim Jagielski } // end of namespace primitive2d 401*b1cdbd2cSJim Jagielski } // end of namespace drawinglayer 402*b1cdbd2cSJim Jagielski 403*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 404*b1cdbd2cSJim Jagielski 405*b1cdbd2cSJim Jagielski namespace drawinglayer 406*b1cdbd2cSJim Jagielski { 407*b1cdbd2cSJim Jagielski namespace primitive2d 408*b1cdbd2cSJim Jagielski { create2DDecomposition(const geometry::ViewInformation2D &) const409*b1cdbd2cSJim Jagielski Primitive2DSequence PolyPolygonGradientPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const 410*b1cdbd2cSJim Jagielski { 411*b1cdbd2cSJim Jagielski if(!getFillGradient().isDefault()) 412*b1cdbd2cSJim Jagielski { 413*b1cdbd2cSJim Jagielski // create SubSequence with FillGradientPrimitive2D 414*b1cdbd2cSJim Jagielski const basegfx::B2DRange aPolyPolygonRange(getB2DPolyPolygon().getB2DRange()); 415*b1cdbd2cSJim Jagielski FillGradientPrimitive2D* pNewGradient = new FillGradientPrimitive2D(aPolyPolygonRange, getFillGradient()); 416*b1cdbd2cSJim Jagielski const Primitive2DReference xSubRef(pNewGradient); 417*b1cdbd2cSJim Jagielski const Primitive2DSequence aSubSequence(&xSubRef, 1L); 418*b1cdbd2cSJim Jagielski 419*b1cdbd2cSJim Jagielski // create mask primitive 420*b1cdbd2cSJim Jagielski MaskPrimitive2D* pNewMask = new MaskPrimitive2D(getB2DPolyPolygon(), aSubSequence); 421*b1cdbd2cSJim Jagielski const Primitive2DReference xRef(pNewMask); 422*b1cdbd2cSJim Jagielski 423*b1cdbd2cSJim Jagielski return Primitive2DSequence(&xRef, 1); 424*b1cdbd2cSJim Jagielski } 425*b1cdbd2cSJim Jagielski else 426*b1cdbd2cSJim Jagielski { 427*b1cdbd2cSJim Jagielski return Primitive2DSequence(); 428*b1cdbd2cSJim Jagielski } 429*b1cdbd2cSJim Jagielski } 430*b1cdbd2cSJim Jagielski PolyPolygonGradientPrimitive2D(const basegfx::B2DPolyPolygon & rPolyPolygon,const attribute::FillGradientAttribute & rFillGradient)431*b1cdbd2cSJim Jagielski PolyPolygonGradientPrimitive2D::PolyPolygonGradientPrimitive2D( 432*b1cdbd2cSJim Jagielski const basegfx::B2DPolyPolygon& rPolyPolygon, 433*b1cdbd2cSJim Jagielski const attribute::FillGradientAttribute& rFillGradient) 434*b1cdbd2cSJim Jagielski : BufferedDecompositionPrimitive2D(), 435*b1cdbd2cSJim Jagielski maPolyPolygon(rPolyPolygon), 436*b1cdbd2cSJim Jagielski maFillGradient(rFillGradient) 437*b1cdbd2cSJim Jagielski { 438*b1cdbd2cSJim Jagielski } 439*b1cdbd2cSJim Jagielski operator ==(const BasePrimitive2D & rPrimitive) const440*b1cdbd2cSJim Jagielski bool PolyPolygonGradientPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const 441*b1cdbd2cSJim Jagielski { 442*b1cdbd2cSJim Jagielski if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) 443*b1cdbd2cSJim Jagielski { 444*b1cdbd2cSJim Jagielski const PolyPolygonGradientPrimitive2D& rCompare = (PolyPolygonGradientPrimitive2D&)rPrimitive; 445*b1cdbd2cSJim Jagielski 446*b1cdbd2cSJim Jagielski return (getFillGradient() == rCompare.getFillGradient()); 447*b1cdbd2cSJim Jagielski } 448*b1cdbd2cSJim Jagielski 449*b1cdbd2cSJim Jagielski return false; 450*b1cdbd2cSJim Jagielski } 451*b1cdbd2cSJim Jagielski 452*b1cdbd2cSJim Jagielski // provide unique ID 453*b1cdbd2cSJim Jagielski ImplPrimitrive2DIDBlock(PolyPolygonGradientPrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONGRADIENTPRIMITIVE2D) 454*b1cdbd2cSJim Jagielski 455*b1cdbd2cSJim Jagielski } // end of namespace primitive2d 456*b1cdbd2cSJim Jagielski } // end of namespace drawinglayer 457*b1cdbd2cSJim Jagielski 458*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 459*b1cdbd2cSJim Jagielski 460*b1cdbd2cSJim Jagielski namespace drawinglayer 461*b1cdbd2cSJim Jagielski { 462*b1cdbd2cSJim Jagielski namespace primitive2d 463*b1cdbd2cSJim Jagielski { create2DDecomposition(const geometry::ViewInformation2D &) const464*b1cdbd2cSJim Jagielski Primitive2DSequence PolyPolygonHatchPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const 465*b1cdbd2cSJim Jagielski { 466*b1cdbd2cSJim Jagielski if(!getFillHatch().isDefault()) 467*b1cdbd2cSJim Jagielski { 468*b1cdbd2cSJim Jagielski // create SubSequence with FillHatchPrimitive2D 469*b1cdbd2cSJim Jagielski const basegfx::B2DRange aPolyPolygonRange(getB2DPolyPolygon().getB2DRange()); 470*b1cdbd2cSJim Jagielski FillHatchPrimitive2D* pNewHatch = new FillHatchPrimitive2D(aPolyPolygonRange, getBackgroundColor(), getFillHatch()); 471*b1cdbd2cSJim Jagielski const Primitive2DReference xSubRef(pNewHatch); 472*b1cdbd2cSJim Jagielski const Primitive2DSequence aSubSequence(&xSubRef, 1L); 473*b1cdbd2cSJim Jagielski 474*b1cdbd2cSJim Jagielski // create mask primitive 475*b1cdbd2cSJim Jagielski MaskPrimitive2D* pNewMask = new MaskPrimitive2D(getB2DPolyPolygon(), aSubSequence); 476*b1cdbd2cSJim Jagielski const Primitive2DReference xRef(pNewMask); 477*b1cdbd2cSJim Jagielski 478*b1cdbd2cSJim Jagielski return Primitive2DSequence(&xRef, 1); 479*b1cdbd2cSJim Jagielski } 480*b1cdbd2cSJim Jagielski else 481*b1cdbd2cSJim Jagielski { 482*b1cdbd2cSJim Jagielski return Primitive2DSequence(); 483*b1cdbd2cSJim Jagielski } 484*b1cdbd2cSJim Jagielski } 485*b1cdbd2cSJim Jagielski PolyPolygonHatchPrimitive2D(const basegfx::B2DPolyPolygon & rPolyPolygon,const basegfx::BColor & rBackgroundColor,const attribute::FillHatchAttribute & rFillHatch)486*b1cdbd2cSJim Jagielski PolyPolygonHatchPrimitive2D::PolyPolygonHatchPrimitive2D( 487*b1cdbd2cSJim Jagielski const basegfx::B2DPolyPolygon& rPolyPolygon, 488*b1cdbd2cSJim Jagielski const basegfx::BColor& rBackgroundColor, 489*b1cdbd2cSJim Jagielski const attribute::FillHatchAttribute& rFillHatch) 490*b1cdbd2cSJim Jagielski : BufferedDecompositionPrimitive2D(), 491*b1cdbd2cSJim Jagielski maPolyPolygon(rPolyPolygon), 492*b1cdbd2cSJim Jagielski maBackgroundColor(rBackgroundColor), 493*b1cdbd2cSJim Jagielski maFillHatch(rFillHatch) 494*b1cdbd2cSJim Jagielski { 495*b1cdbd2cSJim Jagielski } 496*b1cdbd2cSJim Jagielski operator ==(const BasePrimitive2D & rPrimitive) const497*b1cdbd2cSJim Jagielski bool PolyPolygonHatchPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const 498*b1cdbd2cSJim Jagielski { 499*b1cdbd2cSJim Jagielski if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) 500*b1cdbd2cSJim Jagielski { 501*b1cdbd2cSJim Jagielski const PolyPolygonHatchPrimitive2D& rCompare = (PolyPolygonHatchPrimitive2D&)rPrimitive; 502*b1cdbd2cSJim Jagielski 503*b1cdbd2cSJim Jagielski return (getBackgroundColor() == rCompare.getBackgroundColor() 504*b1cdbd2cSJim Jagielski && getFillHatch() == rCompare.getFillHatch()); 505*b1cdbd2cSJim Jagielski } 506*b1cdbd2cSJim Jagielski 507*b1cdbd2cSJim Jagielski return false; 508*b1cdbd2cSJim Jagielski } 509*b1cdbd2cSJim Jagielski 510*b1cdbd2cSJim Jagielski // provide unique ID 511*b1cdbd2cSJim Jagielski ImplPrimitrive2DIDBlock(PolyPolygonHatchPrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONHATCHPRIMITIVE2D) 512*b1cdbd2cSJim Jagielski 513*b1cdbd2cSJim Jagielski } // end of namespace primitive2d 514*b1cdbd2cSJim Jagielski } // end of namespace drawinglayer 515*b1cdbd2cSJim Jagielski 516*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 517*b1cdbd2cSJim Jagielski 518*b1cdbd2cSJim Jagielski namespace drawinglayer 519*b1cdbd2cSJim Jagielski { 520*b1cdbd2cSJim Jagielski namespace primitive2d 521*b1cdbd2cSJim Jagielski { create2DDecomposition(const geometry::ViewInformation2D &) const522*b1cdbd2cSJim Jagielski Primitive2DSequence PolyPolygonGraphicPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const 523*b1cdbd2cSJim Jagielski { 524*b1cdbd2cSJim Jagielski if(!getFillGraphic().isDefault()) 525*b1cdbd2cSJim Jagielski { 526*b1cdbd2cSJim Jagielski const Graphic& rGraphic = getFillGraphic().getGraphic(); 527*b1cdbd2cSJim Jagielski const GraphicType aType(rGraphic.GetType()); 528*b1cdbd2cSJim Jagielski 529*b1cdbd2cSJim Jagielski // is there a bitmap or a metafile (do we have content)? 530*b1cdbd2cSJim Jagielski if(GRAPHIC_BITMAP == aType || GRAPHIC_GDIMETAFILE == aType) 531*b1cdbd2cSJim Jagielski { 532*b1cdbd2cSJim Jagielski const Size aPrefSize(rGraphic.GetPrefSize()); 533*b1cdbd2cSJim Jagielski 534*b1cdbd2cSJim Jagielski // does content have a size? 535*b1cdbd2cSJim Jagielski if(aPrefSize.Width() && aPrefSize.Height()) 536*b1cdbd2cSJim Jagielski { 537*b1cdbd2cSJim Jagielski // create SubSequence with FillGraphicPrimitive2D based on polygon range 538*b1cdbd2cSJim Jagielski const basegfx::B2DRange aPolyPolygonRange(getB2DPolyPolygon().getB2DRange()); 539*b1cdbd2cSJim Jagielski const basegfx::B2DHomMatrix aNewObjectTransform( 540*b1cdbd2cSJim Jagielski basegfx::tools::createScaleTranslateB2DHomMatrix( 541*b1cdbd2cSJim Jagielski aPolyPolygonRange.getRange(), 542*b1cdbd2cSJim Jagielski aPolyPolygonRange.getMinimum())); 543*b1cdbd2cSJim Jagielski const Primitive2DReference xSubRef( 544*b1cdbd2cSJim Jagielski new FillGraphicPrimitive2D( 545*b1cdbd2cSJim Jagielski aNewObjectTransform, 546*b1cdbd2cSJim Jagielski getFillGraphic())); 547*b1cdbd2cSJim Jagielski 548*b1cdbd2cSJim Jagielski // embed to mask primitive 549*b1cdbd2cSJim Jagielski const Primitive2DReference xRef( 550*b1cdbd2cSJim Jagielski new MaskPrimitive2D( 551*b1cdbd2cSJim Jagielski getB2DPolyPolygon(), 552*b1cdbd2cSJim Jagielski Primitive2DSequence(&xSubRef, 1))); 553*b1cdbd2cSJim Jagielski 554*b1cdbd2cSJim Jagielski return Primitive2DSequence(&xRef, 1); 555*b1cdbd2cSJim Jagielski } 556*b1cdbd2cSJim Jagielski } 557*b1cdbd2cSJim Jagielski } 558*b1cdbd2cSJim Jagielski 559*b1cdbd2cSJim Jagielski return Primitive2DSequence(); 560*b1cdbd2cSJim Jagielski } 561*b1cdbd2cSJim Jagielski PolyPolygonGraphicPrimitive2D(const basegfx::B2DPolyPolygon & rPolyPolygon,const attribute::FillGraphicAttribute & rFillGraphic)562*b1cdbd2cSJim Jagielski PolyPolygonGraphicPrimitive2D::PolyPolygonGraphicPrimitive2D( 563*b1cdbd2cSJim Jagielski const basegfx::B2DPolyPolygon& rPolyPolygon, 564*b1cdbd2cSJim Jagielski const attribute::FillGraphicAttribute& rFillGraphic) 565*b1cdbd2cSJim Jagielski : BufferedDecompositionPrimitive2D(), 566*b1cdbd2cSJim Jagielski maPolyPolygon(rPolyPolygon), 567*b1cdbd2cSJim Jagielski maFillGraphic(rFillGraphic) 568*b1cdbd2cSJim Jagielski { 569*b1cdbd2cSJim Jagielski } 570*b1cdbd2cSJim Jagielski operator ==(const BasePrimitive2D & rPrimitive) const571*b1cdbd2cSJim Jagielski bool PolyPolygonGraphicPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const 572*b1cdbd2cSJim Jagielski { 573*b1cdbd2cSJim Jagielski if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) 574*b1cdbd2cSJim Jagielski { 575*b1cdbd2cSJim Jagielski const PolyPolygonGraphicPrimitive2D& rCompare = (PolyPolygonGraphicPrimitive2D&)rPrimitive; 576*b1cdbd2cSJim Jagielski 577*b1cdbd2cSJim Jagielski return (getFillGraphic() == rCompare.getFillGraphic()); 578*b1cdbd2cSJim Jagielski } 579*b1cdbd2cSJim Jagielski 580*b1cdbd2cSJim Jagielski return false; 581*b1cdbd2cSJim Jagielski } 582*b1cdbd2cSJim Jagielski 583*b1cdbd2cSJim Jagielski // provide unique ID 584*b1cdbd2cSJim Jagielski ImplPrimitrive2DIDBlock(PolyPolygonGraphicPrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONGRAPHICPRIMITIVE2D) 585*b1cdbd2cSJim Jagielski 586*b1cdbd2cSJim Jagielski } // end of namespace primitive2d 587*b1cdbd2cSJim Jagielski } // end of namespace drawinglayer 588*b1cdbd2cSJim Jagielski 589*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 590*b1cdbd2cSJim Jagielski 591*b1cdbd2cSJim Jagielski namespace drawinglayer 592*b1cdbd2cSJim Jagielski { 593*b1cdbd2cSJim Jagielski namespace primitive2d 594*b1cdbd2cSJim Jagielski { create2DDecomposition(const geometry::ViewInformation2D &) const595*b1cdbd2cSJim Jagielski Primitive2DSequence PolyPolygonSelectionPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const 596*b1cdbd2cSJim Jagielski { 597*b1cdbd2cSJim Jagielski Primitive2DSequence aRetval; 598*b1cdbd2cSJim Jagielski 599*b1cdbd2cSJim Jagielski if(getTransparence() < 1.0 && getB2DPolyPolygon().count()) 600*b1cdbd2cSJim Jagielski { 601*b1cdbd2cSJim Jagielski if(getFill() && getB2DPolyPolygon().isClosed()) 602*b1cdbd2cSJim Jagielski { 603*b1cdbd2cSJim Jagielski // create fill primitive 604*b1cdbd2cSJim Jagielski const Primitive2DReference aFill( 605*b1cdbd2cSJim Jagielski new PolyPolygonColorPrimitive2D( 606*b1cdbd2cSJim Jagielski getB2DPolyPolygon(), 607*b1cdbd2cSJim Jagielski getColor())); 608*b1cdbd2cSJim Jagielski 609*b1cdbd2cSJim Jagielski aRetval = Primitive2DSequence(&aFill, 1); 610*b1cdbd2cSJim Jagielski } 611*b1cdbd2cSJim Jagielski 612*b1cdbd2cSJim Jagielski if(getDiscreteGrow() > 0.0) 613*b1cdbd2cSJim Jagielski { 614*b1cdbd2cSJim Jagielski const attribute::LineAttribute aLineAttribute( 615*b1cdbd2cSJim Jagielski getColor(), 616*b1cdbd2cSJim Jagielski getDiscreteGrow() * getDiscreteUnit() * 2.0); 617*b1cdbd2cSJim Jagielski const Primitive2DReference aFatLine( 618*b1cdbd2cSJim Jagielski new PolyPolygonStrokePrimitive2D( 619*b1cdbd2cSJim Jagielski getB2DPolyPolygon(), 620*b1cdbd2cSJim Jagielski aLineAttribute)); 621*b1cdbd2cSJim Jagielski 622*b1cdbd2cSJim Jagielski appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, aFatLine); 623*b1cdbd2cSJim Jagielski } 624*b1cdbd2cSJim Jagielski 625*b1cdbd2cSJim Jagielski // embed filled to transparency (if used) 626*b1cdbd2cSJim Jagielski if(aRetval.getLength() && getTransparence() > 0.0) 627*b1cdbd2cSJim Jagielski { 628*b1cdbd2cSJim Jagielski const Primitive2DReference aTrans( 629*b1cdbd2cSJim Jagielski new UnifiedTransparencePrimitive2D( 630*b1cdbd2cSJim Jagielski aRetval, 631*b1cdbd2cSJim Jagielski getTransparence())); 632*b1cdbd2cSJim Jagielski 633*b1cdbd2cSJim Jagielski aRetval = Primitive2DSequence(&aTrans, 1); 634*b1cdbd2cSJim Jagielski } 635*b1cdbd2cSJim Jagielski } 636*b1cdbd2cSJim Jagielski 637*b1cdbd2cSJim Jagielski return aRetval; 638*b1cdbd2cSJim Jagielski } 639*b1cdbd2cSJim Jagielski PolyPolygonSelectionPrimitive2D(const basegfx::B2DPolyPolygon & rPolyPolygon,const basegfx::BColor & rColor,double fTransparence,double fDiscreteGrow,bool bFill)640*b1cdbd2cSJim Jagielski PolyPolygonSelectionPrimitive2D::PolyPolygonSelectionPrimitive2D( 641*b1cdbd2cSJim Jagielski const basegfx::B2DPolyPolygon& rPolyPolygon, 642*b1cdbd2cSJim Jagielski const basegfx::BColor& rColor, 643*b1cdbd2cSJim Jagielski double fTransparence, 644*b1cdbd2cSJim Jagielski double fDiscreteGrow, 645*b1cdbd2cSJim Jagielski bool bFill) 646*b1cdbd2cSJim Jagielski : DiscreteMetricDependentPrimitive2D(), 647*b1cdbd2cSJim Jagielski maPolyPolygon(rPolyPolygon), 648*b1cdbd2cSJim Jagielski maColor(rColor), 649*b1cdbd2cSJim Jagielski mfTransparence(fTransparence), 650*b1cdbd2cSJim Jagielski mfDiscreteGrow(fabs(fDiscreteGrow)), 651*b1cdbd2cSJim Jagielski mbFill(bFill) 652*b1cdbd2cSJim Jagielski { 653*b1cdbd2cSJim Jagielski } 654*b1cdbd2cSJim Jagielski operator ==(const BasePrimitive2D & rPrimitive) const655*b1cdbd2cSJim Jagielski bool PolyPolygonSelectionPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const 656*b1cdbd2cSJim Jagielski { 657*b1cdbd2cSJim Jagielski if(DiscreteMetricDependentPrimitive2D::operator==(rPrimitive)) 658*b1cdbd2cSJim Jagielski { 659*b1cdbd2cSJim Jagielski const PolyPolygonSelectionPrimitive2D& rCompare = (PolyPolygonSelectionPrimitive2D&)rPrimitive; 660*b1cdbd2cSJim Jagielski 661*b1cdbd2cSJim Jagielski return (getB2DPolyPolygon() == rCompare.getB2DPolyPolygon() 662*b1cdbd2cSJim Jagielski && getColor() == rCompare.getColor() 663*b1cdbd2cSJim Jagielski && getTransparence() == rCompare.getTransparence() 664*b1cdbd2cSJim Jagielski && getDiscreteGrow() == rCompare.getDiscreteGrow() 665*b1cdbd2cSJim Jagielski && getFill() == rCompare.getFill()); 666*b1cdbd2cSJim Jagielski } 667*b1cdbd2cSJim Jagielski 668*b1cdbd2cSJim Jagielski return false; 669*b1cdbd2cSJim Jagielski } 670*b1cdbd2cSJim Jagielski getB2DRange(const geometry::ViewInformation2D & rViewInformation) const671*b1cdbd2cSJim Jagielski basegfx::B2DRange PolyPolygonSelectionPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const 672*b1cdbd2cSJim Jagielski { 673*b1cdbd2cSJim Jagielski basegfx::B2DRange aRetval(basegfx::tools::getRange(getB2DPolyPolygon())); 674*b1cdbd2cSJim Jagielski 675*b1cdbd2cSJim Jagielski if(getDiscreteGrow() > 0.0) 676*b1cdbd2cSJim Jagielski { 677*b1cdbd2cSJim Jagielski // get the current DiscreteUnit (not sure if getDiscreteUnit() is updated here, better go safe way) 678*b1cdbd2cSJim Jagielski const double fDiscreteUnit((rViewInformation.getInverseObjectToViewTransformation() * basegfx::B2DVector(1.0, 0.0)).getLength()); 679*b1cdbd2cSJim Jagielski 680*b1cdbd2cSJim Jagielski aRetval.grow(fDiscreteUnit * getDiscreteGrow()); 681*b1cdbd2cSJim Jagielski } 682*b1cdbd2cSJim Jagielski 683*b1cdbd2cSJim Jagielski return aRetval; 684*b1cdbd2cSJim Jagielski } 685*b1cdbd2cSJim Jagielski 686*b1cdbd2cSJim Jagielski // provide unique ID 687*b1cdbd2cSJim Jagielski ImplPrimitrive2DIDBlock(PolyPolygonSelectionPrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONSELECTIONPRIMITIVE2D) 688*b1cdbd2cSJim Jagielski 689*b1cdbd2cSJim Jagielski } // end of namespace primitive2d 690*b1cdbd2cSJim Jagielski } // end of namespace drawinglayer 691*b1cdbd2cSJim Jagielski 692*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 693*b1cdbd2cSJim Jagielski // eof 694