Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_bspline_1d.cpp
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#include "kis_bspline_1d.h"
8
9#include <kis_debug.h>
10#include <limits>
11
14
15#include "kis_bspline_p.h"
16
17namespace KisBSplines {
18
24
26 float gridEnd,
27 int numSamples,
29 : m_d(new Private)
30{
32 m_gridEnd = gridEnd/* + step*/;
33 m_numSamples = numSamples/* + 1*/;
34
35 m_d->bc = bc;
36 m_d->spline = 0;
37}
38
40{
41 if (m_d->spline) {
42 destroy_Bspline(m_d->spline);
43 }
44}
45
47{
48 Ugrid grid;
49 grid.start = m_gridStart;
50 grid.end = m_gridEnd;
51 grid.num = m_numSamples;
52 grid.delta = 0.0;
53 grid.delta_inv = 0.0;
54
55 BCtype_s bctype;
56 bctype.lCode = bctype.rCode = convertBorderType(m_d->bc);
57 bctype.lVal = 0.0;
58 bctype.rVal = 0.0;
59
60
61 m_d->spline =
63 bctype,
64 const_cast<float*>(values.constData()));
65}
66
67float KisBSpline1D::value(float x) const
68{
74 if (x == m_gridEnd) {
75 x -= x * std::numeric_limits<float>::epsilon();
76 }
77
79
80 float value;
81 eval_UBspline_1d_s (m_d->spline, x, &value);
82
83 return value;
84}
85
86}
void destroy_Bspline(void *spline)
UBspline_1d_s * create_UBspline_1d_s(Ugrid x_grid, BCtype_s xBC, float *data)
void eval_UBspline_1d_s(UBspline_1d_s *restrict spline, double x, float *restrict val)
#define KIS_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:97
bc_code convertBorderType(BorderCondition v)
float lVal
float rVal
bc_code lCode
bc_code rCode
void initializeSplineImpl(const QVector< float > &values)
float value(float x) const
KisBSpline1D(float gridStart, float gridEnd, int numSamples, BorderCondition bc)
const QScopedPointer< Private > m_d
double end
double delta
double start
double delta_inv
int num