OutputShape.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 libpagemaker 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 __LIBPAGEMAKER_OUTPUTSHAPE_H__
11#define __LIBPAGEMAKER_OUTPUTSHAPE_H__
12
13#include <memory>
14#include <vector>
15
16#include "PMDExceptions.h"
17#include "geometry.h"
18#include "libpagemaker_utils.h"
19
20 namespace libpagemaker
21{
22
23 class OutputShape
24{
25 bool m_isClosed;
26 uint8_t m_shapeType;
27 std::vector<InchPoint> m_points;
28 double m_rotation;
29 double m_skew;
30 double m_bboxLeft, m_bboxTop, m_bboxRight, m_bboxBot;
31 PMDFillProperties m_fillProps;
32 PMDStrokeProperties m_strokeProps;
33 std::string m_text;
34 std::vector<PMDCharProperties> m_charProps;
35 std::vector<PMDParaProperties> m_paraProps;
36 librevenge::RVNGBinaryData m_bitmap;
37 double m_width,m_height;
38
39 public:
40 OutputShape(bool isClosed, int shape, double rotation, double skew, const PMDFillProperties &fillProps, const PMDStrokeProperties &strokeProps)
41 : m_isClosed(isClosed), m_shapeType(shape), m_points(), m_rotation(rotation), m_skew(skew),
42 m_bboxLeft(), m_bboxTop(), m_bboxRight(), m_bboxBot(), m_fillProps(fillProps), m_strokeProps(strokeProps), m_text(), m_charProps(), m_paraProps(), m_bitmap(), m_width(), m_height()
43 { }
44
45 OutputShape(bool isClosed, int shape, double rotation, double skew, std::string text, std::vector<PMDCharProperties> charProps, std::vector<PMDParaProperties> paraProps)
46 : m_isClosed(isClosed), m_shapeType(shape), m_points(), m_rotation(rotation), m_skew(skew),
47 m_bboxLeft(), m_bboxTop(), m_bboxRight(), m_bboxBot(),
48 m_fillProps(),
49 m_strokeProps(),
50 m_text(text), m_charProps(charProps), m_paraProps(paraProps), m_bitmap(), m_width(), m_height()
51 { }
52
53 OutputShape(bool isClosed, int shape, double rotation, double skew, librevenge::RVNGBinaryData bitmap)
54 : m_isClosed(isClosed), m_shapeType(shape), m_points(), m_rotation(rotation), m_skew(skew),
55 m_bboxLeft(), m_bboxTop(), m_bboxRight(), m_bboxBot(),
56 m_fillProps(),
57 m_strokeProps(),
58 m_text(), m_charProps(), m_paraProps(), m_bitmap(bitmap), m_width(), m_height()
59 { }
60
61 unsigned numPoints() const
62 {
63 return m_points.size();
64 }
65
66 InchPoint getPoint(unsigned i) const
67 {
68 return (m_points.size() > i) ? m_points[i] : InchPoint(0, 0);
69 }
70
71 bool getIsClosed() const
72 {
73 return m_isClosed;
74 }
75
76 uint8_t shapeType() const
77 {
78 return m_shapeType;
79 }
80
81 const PMDFillProperties &getFillProperties() const
82 {
83 return m_fillProps;
84 }
85
86 const PMDStrokeProperties &getStrokeProperties() const
87 {
88 return m_strokeProps;
89 }
90
91 double getRotation() const
92 {
93 return m_rotation;
94 }
95
96 double getSkew() const
97 {
98 return m_skew;
99 }
100
101 std::string getText() const
102 {
103 return m_text;
104 }
105
106 std::vector<PMDCharProperties> getCharProperties() const
107 {
108 return m_charProps;
109 }
110
111 std::vector<PMDParaProperties> getParaProperties() const
112 {
113 return m_paraProps;
114 }
115
116 librevenge::RVNGBinaryData getBitmap() const
117 {
118 return m_bitmap;
119 }
120
121 std::pair<InchPoint, InchPoint> getBoundingBox() const
122 {
123 if (m_points.empty() && m_bitmap.empty())
124 {
125 throw EmptyLineSetException();
126 }
127 return std::make_pair(InchPoint(m_bboxLeft, m_bboxTop), InchPoint(m_bboxRight, m_bboxBot));
128 }
129
130 void setBoundingBox(InchPoint bboxTopLeft, InchPoint bboxBotRight)
131 {
132 m_bboxLeft = bboxTopLeft.m_x;
133 m_bboxTop = bboxTopLeft.m_y;
134 m_bboxRight = bboxBotRight.m_x;
135 m_bboxBot = bboxBotRight.m_y;
136 }
137
138 void addPoint(InchPoint point)
139 {
140 m_points.push_back(InchPoint(point.m_x, point.m_y));
141 }
142
143 void setDimensions(double width, double height)
144 {
145 m_width = width,
146 m_height = height;
147 }
148
149 double getWidth() const
150 {
151 return m_width;
152 }
153
154 double getHeight() const
155 {
156 return m_height;
157 }
158};
159
160
161std::shared_ptr<OutputShape> newOutputShape(
162 const std::shared_ptr<const PMDLineSet> &lineSet, const InchPoint &translate);
163
164}
165
166#endif /* __LIBPAGEMAKER_OUTPUTSHAPE_H__ */
167
168/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
PMDExceptions.h
libpagemaker::OutputShape
Definition OutputShape.h:24
libpagemaker::OutputShape::getStrokeProperties
const PMDStrokeProperties & getStrokeProperties() const
Definition OutputShape.h:86
libpagemaker::OutputShape::m_bboxLeft
double m_bboxLeft
Definition OutputShape.h:30
libpagemaker::OutputShape::OutputShape
OutputShape(bool isClosed, int shape, double rotation, double skew, std::string text, std::vector< PMDCharProperties > charProps, std::vector< PMDParaProperties > paraProps)
Definition OutputShape.h:45
libpagemaker::OutputShape::setBoundingBox
void setBoundingBox(InchPoint bboxTopLeft, InchPoint bboxBotRight)
Definition OutputShape.h:130
libpagemaker::OutputShape::m_height
double m_height
Definition OutputShape.h:37
libpagemaker::OutputShape::getPoint
InchPoint getPoint(unsigned i) const
Definition OutputShape.h:66
libpagemaker::OutputShape::m_shapeType
uint8_t m_shapeType
Definition OutputShape.h:26
libpagemaker::OutputShape::m_bboxTop
double m_bboxTop
Definition OutputShape.h:30
libpagemaker::OutputShape::getSkew
double getSkew() const
Definition OutputShape.h:96
libpagemaker::OutputShape::setDimensions
void setDimensions(double width, double height)
Definition OutputShape.h:143
libpagemaker::OutputShape::m_rotation
double m_rotation
Definition OutputShape.h:28
libpagemaker::OutputShape::getBitmap
librevenge::RVNGBinaryData getBitmap() const
Definition OutputShape.h:116
libpagemaker::OutputShape::m_bitmap
librevenge::RVNGBinaryData m_bitmap
Definition OutputShape.h:36
libpagemaker::OutputShape::m_skew
double m_skew
Definition OutputShape.h:29
libpagemaker::OutputShape::getHeight
double getHeight() const
Definition OutputShape.h:154
libpagemaker::OutputShape::OutputShape
OutputShape(bool isClosed, int shape, double rotation, double skew, librevenge::RVNGBinaryData bitmap)
Definition OutputShape.h:53
libpagemaker::OutputShape::numPoints
unsigned numPoints() const
Definition OutputShape.h:61
libpagemaker::OutputShape::getIsClosed
bool getIsClosed() const
Definition OutputShape.h:71
libpagemaker::OutputShape::getText
std::string getText() const
Definition OutputShape.h:101
libpagemaker::OutputShape::getCharProperties
std::vector< PMDCharProperties > getCharProperties() const
Definition OutputShape.h:106
libpagemaker::OutputShape::m_points
std::vector< InchPoint > m_points
Definition OutputShape.h:27
libpagemaker::OutputShape::m_bboxRight
double m_bboxRight
Definition OutputShape.h:30
libpagemaker::OutputShape::m_paraProps
std::vector< PMDParaProperties > m_paraProps
Definition OutputShape.h:35
libpagemaker::OutputShape::m_isClosed
bool m_isClosed
Definition OutputShape.h:25
libpagemaker::OutputShape::m_charProps
std::vector< PMDCharProperties > m_charProps
Definition OutputShape.h:34
libpagemaker::OutputShape::m_strokeProps
PMDStrokeProperties m_strokeProps
Definition OutputShape.h:32
libpagemaker::OutputShape::m_fillProps
PMDFillProperties m_fillProps
Definition OutputShape.h:31
libpagemaker::OutputShape::getFillProperties
const PMDFillProperties & getFillProperties() const
Definition OutputShape.h:81
libpagemaker::OutputShape::getWidth
double getWidth() const
Definition OutputShape.h:149
libpagemaker::OutputShape::getRotation
double getRotation() const
Definition OutputShape.h:91
libpagemaker::OutputShape::OutputShape
OutputShape(bool isClosed, int shape, double rotation, double skew, const PMDFillProperties &fillProps, const PMDStrokeProperties &strokeProps)
Definition OutputShape.h:40
libpagemaker::OutputShape::m_text
std::string m_text
Definition OutputShape.h:33
libpagemaker::OutputShape::m_bboxBot
double m_bboxBot
Definition OutputShape.h:30
libpagemaker::OutputShape::m_width
double m_width
Definition OutputShape.h:37
libpagemaker::OutputShape::addPoint
void addPoint(InchPoint point)
Definition OutputShape.h:138
libpagemaker::OutputShape::getParaProperties
std::vector< PMDParaProperties > getParaProperties() const
Definition OutputShape.h:111
libpagemaker::OutputShape::shapeType
uint8_t shapeType() const
Definition OutputShape.h:76
libpagemaker::OutputShape::getBoundingBox
std::pair< InchPoint, InchPoint > getBoundingBox() const
Definition OutputShape.h:121
geometry.h
libpagemaker_utils.h
libpagemaker
Definition geometry.h:23
libpagemaker::InchPoint
Point< double > InchPoint
Definition geometry.h:34
libpagemaker::newOutputShape
std::shared_ptr< OutputShape > newOutputShape(const std::shared_ptr< const PMDLineSet > &lineSet, const InchPoint &translate)
Definition OutputShape.cpp:17
libpagemaker::EmptyLineSetException
Definition PMDExceptions.h:57
libpagemaker::PMDFillProperties
Definition PMDTypes.h:44
libpagemaker::PMDStrokeProperties
Definition PMDTypes.h:54
libpagemaker::Point
Definition geometry.h:25
libpagemaker::Point::m_y
Unit m_y
Definition geometry.h:27
libpagemaker::Point::m_x
Unit m_x
Definition geometry.h:26