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 INCLUDED_POLYGONUTILS_H
11#define INCLUDED_POLYGONUTILS_H
12
13#include <functional>
14#include <memory>
15#include <vector>
16
17#include <librevenge/librevenge.h>
18
19#include "Coordinate.h"
20#include "ShapeType.h"
21
22 namespace libmspub
23{
24 const int PROP_ADJUST_VAL_FIRST = 327;
25 const int PROP_ADJUST_VAL_LAST = 336;
26 const int PROP_GEO_LEFT = 320;
27 const int PROP_GEO_TOP = 321;
28 const int PROP_GEO_RIGHT = 322;
29 const int PROP_GEO_BOTTOM = 323;
30
31 const int OTHER_CALC_VAL = 0x400;
32 const int ASPECT_RATIO = 0x600;
33
34 class VectorTransformation2D;
35
36 struct Color;
37 struct Line;
38
39 typedef struct
40{
41 int m_x;
42 int m_y;
43} Vertex;
44
45 typedef struct
46{
47 int m_flags;
48 int m_argOne;
49 int m_argTwo;
50 int m_argThree;
51} Calculation;
52
53 typedef struct
54{
55 Vertex first;
56 Vertex second;
57} TextRectangle;
58
59 struct CustomShape
60{
61 const Vertex *mp_vertices;
62 unsigned m_numVertices;
63 const unsigned short *mp_elements;
64 unsigned m_numElements;
65 const Calculation *mp_calculations;
66 unsigned m_numCalculations;
67 const int *mp_defaultAdjustValues;
68 unsigned m_numDefaultAdjustValues;
69 const TextRectangle *mp_textRectangles;
70 unsigned m_numTextRectangles;
71 unsigned m_coordWidth;
72 unsigned m_coordHeight;
73 const Vertex *mp_gluePoints;
74 unsigned m_numGluePoints;
75 unsigned char m_adjustShiftMask;
76
77 Coordinate getTextRectangle(double x, double y, double width, double height, std::function<double(unsigned index)> calculator) const;
78
79 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) :
80 mp_vertices(p_vertices), m_numVertices(numVertices),
81 mp_elements(p_elements), m_numElements(numElements),
82 mp_calculations(p_calculations), m_numCalculations(numCalculations),
83 mp_defaultAdjustValues(p_defaultAdjustValues), m_numDefaultAdjustValues(numDefaultAdjustValues),
84 mp_textRectangles(p_textRectangles), m_numTextRectangles(numTextRectangles),
85 m_coordWidth(coordWidth), m_coordHeight(coordHeight),
86 mp_gluePoints(p_gluePoints), m_numGluePoints(numGluePoints),
87 m_adjustShiftMask(adjustShiftMask)
88 {
89 }
90};
91
92 struct DynamicCustomShape
93{
94 std::vector<Vertex> m_vertices;
95 std::vector<unsigned short> m_elements;
96 std::vector<Calculation> m_calculations;
97 std::vector<int> m_defaultAdjustValues;
98 std::vector<TextRectangle> m_textRectangles;
99 std::vector<Vertex> m_gluePoints;
100 unsigned m_coordWidth;
101 unsigned m_coordHeight;
102 unsigned char m_adjustShiftMask;
103
104 DynamicCustomShape(unsigned coordWidth, unsigned coordHeight)
105 : m_vertices(), m_elements(),
106 m_calculations(), m_defaultAdjustValues(),
107 m_textRectangles(), m_gluePoints(),
108 m_coordWidth(coordWidth), m_coordHeight(coordHeight),
109 m_adjustShiftMask(0)
110 {
111 }
112};
113
114std::shared_ptr<const CustomShape> getFromDynamicCustomShape(const DynamicCustomShape &dcs);
115
116 const CustomShape *getCustomShape(ShapeType type);
117 bool isShapeTypeRectangle(ShapeType type);
118librevenge::RVNGPropertyList calcClipPath(const std::vector<libmspub::Vertex> &verts, double x, double y, double height, double width, VectorTransformation2D transform, std::shared_ptr<const CustomShape> shape);
119 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, std::function<double(unsigned index)> calculator, const std::vector<Color> &palette, std::shared_ptr<const CustomShape> shape);
120
121} // libmspub
122#endif /* INCLUDED_POLYGONUTILS_H */
123/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
Coordinate.h
ShapeType.h
libmspub::VectorTransformation2D
Definition VectorTransformation2D.h:26
libmspub
Definition Arrow.h:14
libmspub::PROP_GEO_BOTTOM
const int PROP_GEO_BOTTOM
Definition PolygonUtils.h:29
libmspub::PROP_GEO_RIGHT
const int PROP_GEO_RIGHT
Definition PolygonUtils.h:28
libmspub::calcClipPath
librevenge::RVNGPropertyList calcClipPath(const std::vector< Vertex > &verts, double x, double y, double height, double width, VectorTransformation2D transform, std::shared_ptr< const CustomShape > shape)
Definition PolygonUtils.cpp:5883
libmspub::PROP_GEO_TOP
const int PROP_GEO_TOP
Definition PolygonUtils.h:27
libmspub::ShapeType
ShapeType
Definition ShapeType.h:16
libmspub::PROP_ADJUST_VAL_FIRST
const int PROP_ADJUST_VAL_FIRST
Definition PolygonUtils.h:24
libmspub::writeCustomShape
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, std::function< double(unsigned index)> calculator, const std::vector< Color > &palette, std::shared_ptr< const CustomShape > shape)
Definition PolygonUtils.cpp:5908
libmspub::ASPECT_RATIO
const int ASPECT_RATIO
Definition PolygonUtils.h:32
libmspub::isShapeTypeRectangle
bool isShapeTypeRectangle(ShapeType type)
Definition PolygonUtils.cpp:6375
libmspub::getFromDynamicCustomShape
std::shared_ptr< const CustomShape > getFromDynamicCustomShape(const DynamicCustomShape &dcs)
Definition PolygonUtils.cpp:6381
libmspub::PROP_ADJUST_VAL_LAST
const int PROP_ADJUST_VAL_LAST
Definition PolygonUtils.h:25
libmspub::PROP_GEO_LEFT
const int PROP_GEO_LEFT
Definition PolygonUtils.h:26
libmspub::getCustomShape
const CustomShape * getCustomShape(ShapeType type)
Definition PolygonUtils.cpp:5245
libmspub::OTHER_CALC_VAL
const int OTHER_CALC_VAL
Definition PolygonUtils.h:31
libmspub::Calculation
Definition PolygonUtils.h:46
libmspub::Calculation::m_argOne
int m_argOne
Definition PolygonUtils.h:48
libmspub::Calculation::m_argTwo
int m_argTwo
Definition PolygonUtils.h:49
libmspub::Calculation::m_flags
int m_flags
Definition PolygonUtils.h:47
libmspub::Calculation::m_argThree
int m_argThree
Definition PolygonUtils.h:50
libmspub::Color
Definition MSPUBTypes.h:200
libmspub::Coordinate
Definition Coordinate.h:19
libmspub::CustomShape::mp_defaultAdjustValues
const int * mp_defaultAdjustValues
Definition PolygonUtils.h:67
libmspub::CustomShape::m_numDefaultAdjustValues
unsigned m_numDefaultAdjustValues
Definition PolygonUtils.h:68
libmspub::CustomShape::m_coordWidth
unsigned m_coordWidth
Definition PolygonUtils.h:71
libmspub::CustomShape::m_coordHeight
unsigned m_coordHeight
Definition PolygonUtils.h:72
libmspub::CustomShape::CustomShape
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)
Definition PolygonUtils.h:79
libmspub::CustomShape::mp_vertices
const Vertex * mp_vertices
Definition PolygonUtils.h:61
libmspub::CustomShape::m_numGluePoints
unsigned m_numGluePoints
Definition PolygonUtils.h:74
libmspub::CustomShape::mp_gluePoints
const Vertex * mp_gluePoints
Definition PolygonUtils.h:73
libmspub::CustomShape::m_numElements
unsigned m_numElements
Definition PolygonUtils.h:64
libmspub::CustomShape::m_numVertices
unsigned m_numVertices
Definition PolygonUtils.h:62
libmspub::CustomShape::m_adjustShiftMask
unsigned char m_adjustShiftMask
Definition PolygonUtils.h:75
libmspub::CustomShape::getTextRectangle
Coordinate getTextRectangle(double x, double y, double width, double height, std::function< double(unsigned index)> calculator) const
Definition PolygonUtils.cpp:5683
libmspub::CustomShape::m_numTextRectangles
unsigned m_numTextRectangles
Definition PolygonUtils.h:70
libmspub::CustomShape::mp_elements
const unsigned short * mp_elements
Definition PolygonUtils.h:63
libmspub::CustomShape::mp_calculations
const Calculation * mp_calculations
Definition PolygonUtils.h:65
libmspub::CustomShape::mp_textRectangles
const TextRectangle * mp_textRectangles
Definition PolygonUtils.h:69
libmspub::CustomShape::m_numCalculations
unsigned m_numCalculations
Definition PolygonUtils.h:66
libmspub::DynamicCustomShape::m_defaultAdjustValues
std::vector< int > m_defaultAdjustValues
Definition PolygonUtils.h:97
libmspub::DynamicCustomShape::m_coordHeight
unsigned m_coordHeight
Definition PolygonUtils.h:101
libmspub::DynamicCustomShape::m_adjustShiftMask
unsigned char m_adjustShiftMask
Definition PolygonUtils.h:102
libmspub::DynamicCustomShape::m_vertices
std::vector< Vertex > m_vertices
Definition PolygonUtils.h:94
libmspub::DynamicCustomShape::m_textRectangles
std::vector< TextRectangle > m_textRectangles
Definition PolygonUtils.h:98
libmspub::DynamicCustomShape::m_calculations
std::vector< Calculation > m_calculations
Definition PolygonUtils.h:96
libmspub::DynamicCustomShape::m_elements
std::vector< unsigned short > m_elements
Definition PolygonUtils.h:95
libmspub::DynamicCustomShape::m_gluePoints
std::vector< Vertex > m_gluePoints
Definition PolygonUtils.h:99
libmspub::DynamicCustomShape::m_coordWidth
unsigned m_coordWidth
Definition PolygonUtils.h:100
libmspub::DynamicCustomShape::DynamicCustomShape
DynamicCustomShape(unsigned coordWidth, unsigned coordHeight)
Definition PolygonUtils.h:104
libmspub::Line
Definition Line.h:21
libmspub::TextRectangle
Definition PolygonUtils.h:54
libmspub::TextRectangle::second
Vertex second
Definition PolygonUtils.h:56
libmspub::TextRectangle::first
Vertex first
Definition PolygonUtils.h:55
libmspub::Vertex
Definition PolygonUtils.h:40
libmspub::Vertex::m_x
int m_x
Definition PolygonUtils.h:41
libmspub::Vertex::m_y
int m_y
Definition PolygonUtils.h:42