IWORKPath.h Source File documentation

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
25namespace libetonyek
26{
27
28 class IWORKPath
29{
30 friend bool approxEqual(const IWORKPath &left, const IWORKPath &right, const double eps);
31
32public:
33 struct Impl;
34 struct InvalidException {};
35
36public:
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;
71private:
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
87 class IWORKConnectionPath
88{
89public:
90 IWORKConnectionPath();
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: */
IWORKPath_fwd.h
IWORKTypes.h
libetonyek::IWORKConnectionPath::m_isSpline
bool m_isSpline
Definition IWORKPath.h:95
libetonyek::IWORKConnectionPath::m_positions
boost::optional< IWORKPosition > m_positions[3]
Definition IWORKPath.h:93
libetonyek::IWORKConnectionPath::m_size
boost::optional< IWORKSize > m_size
Definition IWORKPath.h:94
libetonyek::IWORKConnectionPath::IWORKConnectionPath
IWORKConnectionPath()
libetonyek::IWORKConnectionPath::getPath
IWORKPathPtr_t getPath() const
libetonyek::IWORKPath
Definition IWORKPath.h:29
libetonyek::IWORKPath::write
void write(librevenge::RVNGPropertyListVector &vec, double deltaX=0, double deltaY=0) const
Create librevenge representation of this path.
libetonyek::IWORKPath::appendMoveTo
void appendMoveTo(double x, double y)
libetonyek::IWORKPath::appendQCurveTo
void appendQCurveTo(double x1, double y1, double x, double y)
libetonyek::IWORKPath::appendLineTo
void appendLineTo(double x, double y)
libetonyek::IWORKPath::m_impl
std::shared_ptr< Impl > m_impl
Definition IWORKPath.h:72
libetonyek::IWORKPath::IWORKPath
IWORKPath(const IWORKPath &other)
libetonyek::IWORKPath::str
const std::string str() const
libetonyek::IWORKPath::computeBoundingBox
void computeBoundingBox(double &minX, double &minY, double &maxX, double &maxY, double factor=1) const
libetonyek::IWORKPath::appendClose
void appendClose()
libetonyek::IWORKPath::IWORKPath
IWORKPath(const std::string &path)
libetonyek::IWORKPath::isRectangle
bool isRectangle() const
libetonyek::IWORKPath::IWORKPath
IWORKPath()
libetonyek::IWORKPath::approxEqual
friend bool approxEqual(const IWORKPath &left, const IWORKPath &right, const double eps)
libetonyek::IWORKPath::operator*=
void operator*=(const glm::dmat3 &tr)
Transform all elements of the path.
libetonyek::IWORKPath::appendCCurveTo
void appendCCurveTo(double x1, double y1, double x2, double y2, double x, double y)
libetonyek::IWORKPath::clear
void clear()
libetonyek::IWORKPath::operator=
IWORKPath & operator=(const IWORKPath &other)
libetonyek::IWORKPath::closePath
void closePath(bool closeOnlyIsSamePoint=true)
libetonyek::IWORKPath::empty
bool empty() const
libetonyek::IWORKPath::swap
void swap(IWORKPath &other)
libetonyek_utils.h
ETONYEK_EPSILON
#define ETONYEK_EPSILON
Definition libetonyek_utils.h:26
libetonyek::IWORKToken::y
@ y
Definition IWORKToken.h:643
libetonyek::IWORKToken::path
@ path
Definition IWORKToken.h:365
libetonyek::IWORKToken::left
@ left
Definition IWORKToken.h:575
libetonyek::IWORKToken::x
@ x
Definition IWORKToken.h:641
libetonyek::IWORKToken::right
@ right
Definition IWORKToken.h:604
libetonyek::KEY1Token::tr
@ tr
Definition KEY1Token.h:206
libetonyek
Definition IWORKBezierElement.cpp:21
libetonyek::operator*
IWORKPath operator*(const IWORKPath &path, const glm::dmat3 &tr)
Create a transformed path.
libetonyek::operator==
bool operator==(const IWORKPath &left, const IWORKPath &right)
libetonyek::approxEqual
bool approxEqual(const IWORKPath &left, const IWORKPath &right, double eps=ETONYEK_EPSILON)
libetonyek::operator!=
bool operator!=(const IWORKPath &left, const IWORKPath &right)
libetonyek::IWORKPathPtr_t
std::shared_ptr< IWORKPath > IWORKPathPtr_t
Definition IWORKPath_fwd.h:22
libetonyek::IWORKPath::Impl
Definition IWORKPath.cpp:79
libetonyek::IWORKPath::InvalidException
Definition IWORKPath.h:34