Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_nu_bspline_2d.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2014 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#ifndef __KIS_NU_BSPLINE_2D_H
8#define __KIS_NU_BSPLINE_2D_H
9
10#include <kritaimage_export.h>
11
12#include <QScopedPointer>
13#include <QVector>
14#include <QPointF>
15#include <QSize>
16
17#include "kis_bspline.h"
18
19
20namespace KisBSplines {
21
22class KRITAIMAGE_EXPORT KisNUBSpline2D
23{
24public:
25 KisNUBSpline2D(const QVector<double> &xSamples, BorderCondition bcX,
26 const QVector<double> &ySamples, BorderCondition bcY);
27
28 ~KisNUBSpline2D();
29
30 template <class FunctionOp>
31 inline void initializeSpline(const FunctionOp &op) {
32
33 const int xSize = m_xSamples.size();
34 const int ySize = m_ySamples.size();
35
36 QVector<float> values(xSize * ySize);
37
38 for (int x = 0; x < xSize; x++) {
39 double fx = m_xSamples[x];
40
41 for (int y = 0; y < ySize; y++) {
42 double fy = m_ySamples[y];
43 float v = op(fx, fy);
44 values[x * ySize + y] = v;
45 }
46 }
47
48 initializeSplineImpl(values);
49 }
50
51 float value(float x, float y) const;
52
53 QPointF topLeft() const;
54 QPointF bottomRight() const;
55
56 BorderCondition borderConditionX() const;
57 BorderCondition borderConditionY() const;
58
59private:
60 void initializeSplineImpl(const QVector<float> &values);
61
62private:
63 struct Private;
64 const QScopedPointer<Private> m_d;
65
72};
73
74}
75
76#endif /* __KIS_NU_BSPLINE_2D_H */
float value(const T *src, size_t ch)
qreal v
const QVector< double > m_xSamples
const QVector< double > m_ySamples
void initializeSpline(const FunctionOp &op)
const QScopedPointer< Private > m_d