IWORKPath.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 libetonyek 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 IWORKPATH_H_INCLUDED
11 #define IWORKPATH_H_INCLUDED
12 
13 #include "IWORKPath_fwd.h"
14 
15 #include <string>
16 
17 #include <glm/glm.hpp>
18 
19 #include <librevenge/librevenge.h>
20 
21 #include "libetonyek_utils.h"
22 
23 #include "IWORKTypes.h"
24 
25 namespace libetonyek
26 {
27 
28 class IWORKPath
29 {
30  friend bool approxEqual(const IWORKPath &left, const IWORKPath &right, const double eps);
31 
32 public:
33  struct Impl;
34  struct InvalidException {};
35 
36 public:
37  IWORKPath();
38  explicit IWORKPath(const std::string &path);
39  IWORKPath(const IWORKPath &other);
40  IWORKPath &operator=(const IWORKPath &other);
41 
42  void swap(IWORKPath &other);
43 
44  void clear();
45  bool empty() const;
46 
47  void appendMoveTo(double x, double y);
48  void appendLineTo(double x, double y);
49  void appendQCurveTo(double x1, double y1, double x, double y);
50  void appendCCurveTo(double x1, double y1, double x2, double y2, double x, double y);
51  void appendClose();
52 
53  void closePath(bool closeOnlyIsSamePoint=true);
54  void computeBoundingBox(double &minX, double &minY, double &maxX, double &maxY, double factor=1) const;
55  bool isRectangle() const;
60  void operator*=(const glm::dmat3 &tr);
61 
62  /* Create a string representation of this path.
63  *
64  * @return an SVG path representing this.
65  */
66  const std::string str() const;
67 
70  void write(librevenge::RVNGPropertyListVector &vec, double deltaX=0, double deltaY=0) const;
71 private:
72  std::shared_ptr<Impl> m_impl;
73 };
74 
75 bool approxEqual(const IWORKPath &left, const IWORKPath &right, double eps = ETONYEK_EPSILON);
76 bool operator==(const IWORKPath &left, const IWORKPath &right);
77 bool operator!=(const IWORKPath &left, const IWORKPath &right);
78 
85 IWORKPath operator*(const IWORKPath &path, const glm::dmat3 &tr);
86 
88 {
89 public:
91  IWORKPathPtr_t getPath() const;
92 
93  boost::optional<IWORKPosition> m_positions[3];
94  boost::optional<IWORKSize> m_size;
95  bool m_isSpline;
96 };
97 
98 }
99 
100 #endif // IWORKPATH_H_INCLUDED
101 
102 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
const std::string str() const
Definition: IWORKPath.cpp:785
IWORKPathPtr_t getPath() const
Definition: IWORKPath.cpp:856
void operator*=(const glm::dmat3 &tr)
Transform all elements of the path.
Definition: IWORKPath.cpp:666
Definition: IWORKToken.h:365
IWORKPath operator*(const IWORKPath &path, const glm::dmat3 &tr)
Create a transformed path.
void clear()
Definition: IWORKPath.cpp:589
void appendLineTo(double x, double y)
Definition: IWORKPath.cpp:615
double y
Definition: IWORKShape.cpp:47
void swap(IWORKPath &other)
Definition: IWORKPath.cpp:584
boost::optional< IWORKPosition > m_positions[3]
Definition: IWORKPath.h:93
boost::optional< IWORKSize > m_size
Definition: IWORKPath.h:94
Definition: IWORKToken.h:575
void computeBoundingBox(double &minX, double &minY, double &maxX, double &maxY, double factor=1) const
Definition: IWORKPath.cpp:675
bool approxEqual(const IWORKPath &left, const IWORKPath &right, double eps=ETONYEK_EPSILON)
double x
Definition: IWORKShape.cpp:46
void appendClose()
Definition: IWORKPath.cpp:651
void closePath(bool closeOnlyIsSamePoint=true)
Definition: IWORKPath.cpp:736
void appendCCurveTo(double x1, double y1, double x2, double y2, double x, double y)
Definition: IWORKPath.cpp:625
Definition: IWORKPath.h:28
Definition: KEY1Token.h:206
Definition: IWORKPath.h:34
void appendQCurveTo(double x1, double y1, double x, double y)
Definition: IWORKPath.cpp:639
IWORKPath()
Definition: IWORKPath.cpp:553
Definition: IWORKToken.h:604
bool operator==(const IWORKPath &left, const IWORKPath &right)
std::shared_ptr< Impl > m_impl
Definition: IWORKPath.h:72
bool m_isSpline
Definition: IWORKPath.h:95
Definition: IWORKPath.h:87
bool operator!=(const IWORKPath &left, const IWORKPath &right)
bool empty() const
Definition: IWORKPath.cpp:595
Definition: IWORKToken.h:418
void appendMoveTo(double x, double y)
Definition: IWORKPath.cpp:600
#define ETONYEK_EPSILON
Definition: libetonyek_utils.h:26
std::shared_ptr< IWORKPath > IWORKPathPtr_t
Definition: IWORKPath_fwd.h:20
Definition: IWORKPath.cpp:78
IWORKConnectionPath()
Definition: IWORKPath.cpp:850
friend bool approxEqual(const IWORKPath &left, const IWORKPath &right, const double eps)
IWORKPath & operator=(const IWORKPath &other)
Definition: IWORKPath.cpp:577
bool isRectangle() const
Definition: IWORKPath.cpp:689
void write(librevenge::RVNGPropertyListVector &vec, double deltaX=0, double deltaY=0) const
Create librevenge representation of this path.
Definition: IWORKPath.cpp:805

Generated for libetonyek by doxygen 1.8.6