PolygonUtils.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /*
3  * This file is part of the libmspub project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  */
9 
10 #ifndef __POLYGONUTILS_H__
11 #define __POLYGONUTILS_H__
12 
13 #include <vector>
14 
15 #include <librevenge/librevenge.h>
16 #include <boost/function.hpp>
17 #include <boost/shared_ptr.hpp>
18 
19 #include "ShapeType.h"
20 #include "VectorTransformation2D.h"
21 #include "Coordinate.h"
22 #include "Line.h"
23 
24 namespace libmspub
25 {
26 const int PROP_ADJUST_VAL_FIRST = 327;
27 const int PROP_ADJUST_VAL_LAST = 336;
28 const int PROP_GEO_LEFT = 320;
29 const int PROP_GEO_TOP = 321;
30 const int PROP_GEO_RIGHT = 322;
31 const int PROP_GEO_BOTTOM = 323;
32 
33 const int OTHER_CALC_VAL = 0x400;
34 const int ASPECT_RATIO = 0x600;
35 
36 class MSPUBCollector;
37 
38 typedef struct
39 {
40  int m_x;
41  int m_y;
42 } Vertex;
43 
44 typedef struct
45 {
46  int m_flags;
47  int m_argOne;
48  int m_argTwo;
50 } Calculation;
51 
52 typedef struct
53 {
57 
59 {
61  unsigned m_numVertices;
62  const unsigned short *mp_elements;
63  unsigned m_numElements;
70  unsigned m_coordWidth;
71  unsigned m_coordHeight;
73  unsigned m_numGluePoints;
74  unsigned char m_adjustShiftMask;
75 
76  Coordinate getTextRectangle(double x, double y, double width, double height, boost::function<double(unsigned index)> calculator) const;
77 
78  CustomShape(const Vertex *p_vertices, unsigned numVertices, const unsigned short *p_elements, unsigned numElements, const Calculation *p_calculations, unsigned numCalculations, const int *p_defaultAdjustValues, unsigned numDefaultAdjustValues, const TextRectangle *p_textRectangles, unsigned numTextRectangles, unsigned coordWidth, unsigned coordHeight, const Vertex *p_gluePoints, unsigned numGluePoints, unsigned char adjustShiftMask = 0) :
79  mp_vertices(p_vertices), m_numVertices(numVertices),
80  mp_elements(p_elements), m_numElements(numElements),
81  mp_calculations(p_calculations), m_numCalculations(numCalculations),
82  mp_defaultAdjustValues(p_defaultAdjustValues), m_numDefaultAdjustValues(numDefaultAdjustValues),
83  mp_textRectangles(p_textRectangles), m_numTextRectangles(numTextRectangles),
84  m_coordWidth(coordWidth), m_coordHeight(coordHeight),
85  mp_gluePoints(p_gluePoints), m_numGluePoints(numGluePoints),
86  m_adjustShiftMask(adjustShiftMask)
87  {
88  }
89 };
90 
92 {
93  std::vector<Vertex> m_vertices;
94  std::vector<unsigned short> m_elements;
95  std::vector<Calculation> m_calculations;
96  std::vector<int> m_defaultAdjustValues;
97  std::vector<TextRectangle> m_textRectangles;
98  std::vector<Vertex> m_gluePoints;
99  unsigned m_coordWidth;
100  unsigned m_coordHeight;
101  unsigned char m_adjustShiftMask;
102 
103  DynamicCustomShape(unsigned coordWidth, unsigned coordHeight)
104  : m_vertices(), m_elements(),
107  m_coordWidth(coordWidth), m_coordHeight(coordHeight),
109  {
110  }
111 };
112 
113 boost::shared_ptr<const CustomShape> getFromDynamicCustomShape(const DynamicCustomShape &dcs);
114 
115 const CustomShape *getCustomShape(ShapeType type);
117 librevenge::RVNGPropertyList calcClipPath(const std::vector<libmspub::Vertex> &verts, double x, double y, double height, double width, VectorTransformation2D transform, boost::shared_ptr<const CustomShape> shape);
118 void writeCustomShape(ShapeType shapeType, librevenge::RVNGPropertyList &graphicsProps, librevenge::RVNGDrawingInterface *painter, double x, double y, double height, double width, bool closeEverything, VectorTransformation2D transform, std::vector<Line> lines, boost::function<double(unsigned index)> calculator, const std::vector<Color> &palette, boost::shared_ptr<const CustomShape> shape);
119 
120 } // libmspub
121 #endif /* __POLYGONUTILS_H__ */
122 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */

Generated for libmspub by doxygen 1.8.4