FHPath.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 libfreehand 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 __FHPATH_H__
11 #define __FHPATH_H__
12
13 #include <memory>
14 #include <vector>
15 #include <ostream>
16
17 #include <librevenge/librevenge.h>
18
19 namespace libfreehand
20 {
21
22 struct FHTransform;
23
24 class FHPathElement
25 {
26 public:
27 FHPathElement() {}
28 virtual ~FHPathElement() {}
29 virtual void writeOut(librevenge::RVNGPropertyListVector &vec) const = 0;
30 virtual void writeOut(std::ostream &s) const = 0;
31 virtual void transform(const FHTransform &trafo) = 0;
32 virtual FHPathElement *clone() = 0;
33 virtual void getBoundingBox(double x0, double y0, double &px, double &py, double &qx, double &qy) const = 0;
34 virtual double getX() const = 0;
35 virtual double getY() const = 0;
36 };
37
38
39 class FHPath
40 {
41 public:
42 FHPath() : m_elements(), m_isClosed(false), m_xFormId(0), m_graphicStyleId(0), m_evenOdd(false) {}
43 FHPath(const FHPath &path);
44 ~FHPath();
45
46 FHPath &operator=(const FHPath &path);
47
48 void appendMoveTo(double x, double y);
49 void appendLineTo(double x, double y);
50 void appendCubicBezierTo(double x1, double y1, double x2, double y2, double x, double y);
51 void appendQuadraticBezierTo(double x1, double y1, double x, double y);
52 void appendArcTo(double rx, double ry, double rotation, bool longAngle, bool sweep, double x, double y);
53 void appendClosePath();
54 void appendPath(const FHPath &path);
55 void setXFormId(unsigned xFormId);
56 void setGraphicStyleId(unsigned graphicStyleId);
57 void setEvenOdd(bool evenOdd);
58
59 void writeOut(librevenge::RVNGPropertyListVector &vec) const;
60 std::string getPathString() const;
61 void transform(const FHTransform &trafo);
62 void getBoundingBox(double x0, double y0, double &xmin, double &ymin, double &xmax, double &ymax) const;
63 double getX() const;
64 double getY() const;
65
66 void clear();
67 bool empty() const;
68 bool isClosed() const;
69 unsigned getXFormId() const;
70 unsigned getGraphicStyleId() const;
71 bool getEvenOdd() const;
72 void getBoundingBox(double &xmin, double &ymin, double &xmax, double &ymax) const;
73
74 private:
75 std::vector<std::unique_ptr<FHPathElement>> m_elements;
76 bool m_isClosed;
77 unsigned m_xFormId;
78 unsigned m_graphicStyleId;
79 bool m_evenOdd;
80 };
81
82 } // namespace libfreehand
83
84 #endif /* __FHPATH_H__ */
85 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
libfreehand::FHPath::appendLineTo
void appendLineTo(double x, double y)
Definition: FHPath.cpp:623
libfreehand::FHPathElement::clone
virtual FHPathElement * clone()=0
libfreehand::FHPath::getPathString
std::string getPathString() const
Definition: FHPath.cpp:700
libfreehand::FHPath::FHPath
FHPath()
Definition: FHPath.h:42
libfreehand::FHPathElement::writeOut
virtual void writeOut(librevenge::RVNGPropertyListVector &vec) const =0
libfreehand::FHPath::setGraphicStyleId
void setGraphicStyleId(unsigned graphicStyleId)
Definition: FHPath.cpp:684
libfreehand::FHPathElement::getX
virtual double getX() const =0
libfreehand::FHPath::writeOut
void writeOut(librevenge::RVNGPropertyListVector &vec) const
Definition: FHPath.cpp:694
libfreehand::FHPath::getGraphicStyleId
unsigned getGraphicStyleId() const
Definition: FHPath.cpp:751
libfreehand::FHPath::setEvenOdd
void setEvenOdd(bool evenOdd)
Definition: FHPath.cpp:689
libfreehand::FHPath::m_elements
std::vector< std::unique_ptr< FHPathElement > > m_elements
Definition: FHPath.h:75
libfreehand::FHPath::getY
double getY() const
Definition: FHPath.cpp:739
libfreehand::FHPath::m_isClosed
bool m_isClosed
Definition: FHPath.h:76
libfreehand
Definition: FHCollector.h:22
libfreehand::FHPath::appendMoveTo
void appendMoveTo(double x, double y)
Definition: FHPath.cpp:618
libfreehand::FHPath::m_xFormId
unsigned m_xFormId
Definition: FHPath.h:77
libfreehand::FHPath::setXFormId
void setXFormId(unsigned xFormId)
Definition: FHPath.cpp:679
libfreehand::FHPath::isClosed
bool isClosed() const
Definition: FHPath.cpp:727
libfreehand::FHPath::appendArcTo
void appendArcTo(double rx, double ry, double rotation, bool longAngle, bool sweep, double x, double y)
Definition: FHPath.cpp:638
libfreehand::FHPath::getBoundingBox
void getBoundingBox(double x0, double y0, double &xmin, double &ymin, double &xmax, double &ymax) const
Definition: FHPath.cpp:761
libfreehand::FHPath::appendPath
void appendPath(const FHPath &path)
Definition: FHPath.cpp:669
libfreehand::FHPath::empty
bool empty() const
Definition: FHPath.cpp:722
libfreehand::FHPath::operator=
FHPath & operator=(const FHPath &path)
Definition: FHPath.cpp:655
libfreehand::FHPathElement::getY
virtual double getY() const =0
libfreehand::FHPath::appendClosePath
void appendClosePath()
Definition: FHPath.cpp:643
libfreehand::FHPathElement::FHPathElement
FHPathElement()
Definition: FHPath.h:27
libfreehand::FHPath::clear
void clear()
Definition: FHPath.cpp:714
libfreehand::FHTransform
Definition: FHTransform.h:18
libfreehand::FHPath::transform
void transform(const FHTransform &trafo)
Definition: FHPath.cpp:708
libfreehand::FHPathElement::getBoundingBox
virtual void getBoundingBox(double x0, double y0, double &px, double &py, double &qx, double &qy) const =0
libfreehand::FHPathElement
Definition: FHPath.h:24
libfreehand::FHPath::~FHPath
~FHPath()
Definition: FHPath.cpp:675
libfreehand::FHPath::getXFormId
unsigned getXFormId() const
Definition: FHPath.cpp:746
libfreehand::FHPathElement::transform
virtual void transform(const FHTransform &trafo)=0
libfreehand::FHPath::m_evenOdd
bool m_evenOdd
Definition: FHPath.h:79
libfreehand::FHPath::getEvenOdd
bool getEvenOdd() const
Definition: FHPath.cpp:756
libfreehand::FHPath::appendCubicBezierTo
void appendCubicBezierTo(double x1, double y1, double x2, double y2, double x, double y)
Definition: FHPath.cpp:628
libfreehand::FHPath::appendQuadraticBezierTo
void appendQuadraticBezierTo(double x1, double y1, double x, double y)
Definition: FHPath.cpp:633
libfreehand::FHPath
Definition: FHPath.h:39
libfreehand::FHPath::m_graphicStyleId
unsigned m_graphicStyleId
Definition: FHPath.h:78
libfreehand::FHPathElement::~FHPathElement
virtual ~FHPathElement()
Definition: FHPath.h:28
libfreehand::FHPath::getX
double getX() const
Definition: FHPath.cpp:732