1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the QtPositioning module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or (at your option) the GNU General
28** Public license version 3 or any later version approved by the KDE Free
29** Qt Foundation. The licenses are as published by the Free Software
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31** included in the packaging of this file. Please review the following
32** information to ensure the GNU General Public License requirements will
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34** https://www.gnu.org/licenses/gpl-3.0.html.
35**
36** $QT_END_LICENSE$
37**
38****************************************************************************/
39
40#include "qclipperutils_p.h"
41
42QT_BEGIN_NAMESPACE
43
44static const double kClipperScaleFactor = 281474976710656.0; // 48 bits of precision
45static const double kClipperScaleFactorInv = 1.0 / kClipperScaleFactor;
46
47double QClipperUtils::clipperScaleFactor()
48{
49 return kClipperScaleFactor;
50}
51
52QDoubleVector2D QClipperUtils::toVector2D(const IntPoint &p)
53{
54 return QDoubleVector2D(double(p.X) * kClipperScaleFactorInv, double(p.Y) * kClipperScaleFactorInv);
55}
56
57IntPoint QClipperUtils::toIntPoint(const QDoubleVector2D &p)
58{
59 return IntPoint(cInt(p.x() * kClipperScaleFactor), cInt(p.y() * kClipperScaleFactor));
60}
61
62QList<QDoubleVector2D> QClipperUtils::pathToQList(const Path &path)
63{
64 QList<QDoubleVector2D> res;
65 res.reserve(alloc: int(path.size()));
66 for (const IntPoint &ip: path)
67 res.append(t: toVector2D(p: ip));
68 return res;
69}
70
71QList<QList<QDoubleVector2D> > QClipperUtils::pathsToQList(const Paths &paths)
72{
73 QList<QList<QDoubleVector2D> > res;
74 res.reserve(alloc: int(paths.size()));
75 for (const Path &p: paths) {
76 res.append(t: pathToQList(path: p));
77 }
78 return res;
79}
80
81Path QClipperUtils::qListToPath(const QList<QDoubleVector2D> &list)
82{
83 Path res;
84 res.reserve(n: list.size());
85 for (const QDoubleVector2D &p: list)
86 res.push_back(x: toIntPoint(p));
87 return res;
88}
89
90Paths QClipperUtils::qListToPaths(const QList<QList<QDoubleVector2D> > &lists)
91{
92 Paths res;
93 res.reserve(n: lists.size());
94 for (const QList<QDoubleVector2D> &l: lists) {
95 res.push_back(x: qListToPath(list: l));
96 }
97 return res;
98}
99
100QT_END_NAMESPACE
101

source code of qtlocation/src/positioning/qclipperutils.cpp