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
29{
30 friend bool approxEqual(const IWORKPath &left, const IWORKPath &right, const double eps);
31
32public:
33 struct Impl;
35
36public:
38 explicit IWORKPath(const std::string &path);
39 IWORKPath(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);
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
75bool approxEqual(const IWORKPath &left, const IWORKPath &right, double eps = ETONYEK_EPSILON);
78
85IWORKPath operator*(const IWORKPath &path, const glm::dmat3 &tr);
86
88{
89public:
92
93 boost::optional<IWORKPosition> m_positions[3];
94 boost::optional<IWORKSize> m_size;
96};
97
98}
99
100#endif // IWORKPATH_H_INCLUDED
101
102/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
Definition IWORKPath.h:88
bool m_isSpline
Definition IWORKPath.h:95
boost::optional< IWORKPosition > m_positions[3]
Definition IWORKPath.h:93
boost::optional< IWORKSize > m_size
Definition IWORKPath.h:94
IWORKPathPtr_t getPath() const
Definition IWORKPath.h:29
void write(librevenge::RVNGPropertyListVector &vec, double deltaX=0, double deltaY=0) const
Create librevenge representation of this path.
void appendMoveTo(double x, double y)
void appendQCurveTo(double x1, double y1, double x, double y)
void appendLineTo(double x, double y)
std::shared_ptr< Impl > m_impl
Definition IWORKPath.h:72
IWORKPath(const IWORKPath &other)
const std::string str() const
void computeBoundingBox(double &minX, double &minY, double &maxX, double &maxY, double factor=1) const
IWORKPath(const std::string &path)
bool isRectangle() const
friend bool approxEqual(const IWORKPath &left, const IWORKPath &right, const double eps)
void operator*=(const glm::dmat3 &tr)
Transform all elements of the path.
void appendCCurveTo(double x1, double y1, double x2, double y2, double x, double y)
IWORKPath & operator=(const IWORKPath &other)
void closePath(bool closeOnlyIsSamePoint=true)
void swap(IWORKPath &other)
#define ETONYEK_EPSILON
Definition libetonyek_utils.h:26
@ y
Definition IWORKToken.h:643
@ path
Definition IWORKToken.h:365
@ left
Definition IWORKToken.h:575
@ x
Definition IWORKToken.h:641
@ right
Definition IWORKToken.h:604
@ tr
Definition KEY1Token.h:206
Definition IWORKBezierElement.cpp:21
IWORKPath operator*(const IWORKPath &path, const glm::dmat3 &tr)
Create a transformed path.
bool operator==(const IWORKPath &left, const IWORKPath &right)
bool approxEqual(const IWORKPath &left, const IWORKPath &right, double eps=ETONYEK_EPSILON)
bool operator!=(const IWORKPath &left, const IWORKPath &right)
std::shared_ptr< IWORKPath > IWORKPathPtr_t
Definition IWORKPath_fwd.h:22
Definition IWORKPath.cpp:79

Generated for libetonyek by doxygen 1.12.0