1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef _BGFX_POLYGON_B2DPOLYPOLYGON_HXX 25 #define _BGFX_POLYGON_B2DPOLYPOLYGON_HXX 26 27 #include <sal/types.h> 28 #include <o3tl/cow_wrapper.hxx> 29 #include <basegfx/range/b2drange.hxx> 30 31 // predeclarations 32 class ImplB2DPolyPolygon; 33 34 namespace basegfx 35 { 36 class B2DPolygon; 37 class B2DHomMatrix; 38 } // end of namespace basegfx 39 40 ////////////////////////////////////////////////////////////////////////////// 41 42 namespace basegfx 43 { 44 class B2DPolyPolygon 45 { 46 public: 47 typedef o3tl::cow_wrapper< ImplB2DPolyPolygon > ImplType; 48 49 private: 50 ImplType mpPolyPolygon; 51 52 public: 53 B2DPolyPolygon(); 54 B2DPolyPolygon(const B2DPolyPolygon& rPolyPolygon); 55 explicit B2DPolyPolygon(const B2DPolygon& rPolygon); 56 ~B2DPolyPolygon(); 57 58 // assignment operator 59 B2DPolyPolygon& operator=(const B2DPolyPolygon& rPolyPolygon); 60 61 /// unshare this poly-polygon (and all included polygons) with all internally shared instances 62 void makeUnique(); 63 64 // compare operators 65 bool operator==(const B2DPolyPolygon& rPolyPolygon) const; 66 bool operator!=(const B2DPolyPolygon& rPolyPolygon) const; 67 68 // polygon interface 69 sal_uInt32 count() const; 70 71 B2DPolygon getB2DPolygon(sal_uInt32 nIndex) const; 72 void setB2DPolygon(sal_uInt32 nIndex, const B2DPolygon& rPolygon); 73 74 // test for curve 75 bool areControlPointsUsed() const; 76 77 // insert/append single polygon 78 void insert(sal_uInt32 nIndex, const B2DPolygon& rPolygon, sal_uInt32 nCount = 1); 79 void append(const B2DPolygon& rPolygon, sal_uInt32 nCount = 1); 80 81 /** Default adaptive subdivision access 82 83 For details refer to B2DPolygon::getDefaultAdaptiveSubdivision() 84 85 @return 86 The default subdivision of this polygon 87 */ 88 B2DPolyPolygon getDefaultAdaptiveSubdivision() const; 89 90 /** Get the B2DRange (Rectangle dimensions) of this B2DPolyPolygon 91 92 For details refer to B2DPolygon::getB2DRange() 93 94 @return 95 The outer range of the bezier curve/polygon 96 */ 97 B2DRange getB2DRange() const; 98 99 // insert/append multiple polygons 100 void insert(sal_uInt32 nIndex, const B2DPolyPolygon& rPolyPolygon); 101 void append(const B2DPolyPolygon& rPolyPolygon); 102 103 // remove 104 void remove(sal_uInt32 nIndex, sal_uInt32 nCount = 1); 105 106 // reset to empty state 107 void clear(); 108 109 // closed state 110 bool isClosed() const; 111 void setClosed(bool bNew); 112 113 // flip polygon direction 114 void flip(); 115 116 // test if PolyPolygon has double points 117 bool hasDoublePoints() const; 118 119 // remove double points, at the begin/end and follow-ups, too 120 void removeDoublePoints(); 121 122 // apply transformation given in matrix form to the polygon 123 void transform(const basegfx::B2DHomMatrix& rMatrix); 124 125 // polygon iterators (same iterator validity conditions as for vector) 126 const B2DPolygon* begin() const; 127 const B2DPolygon* end() const; 128 B2DPolygon* begin(); 129 B2DPolygon* end(); 130 }; 131 132 // typedef for a vector of B2DPolyPolygons 133 typedef ::std::vector< B2DPolyPolygon > B2DPolyPolygonVector; 134 135 } // end of namespace basegfx 136 137 #endif /* _BGFX_POLYGON_B2DPOLYPOLYGON_HXX */ 138