Krita Source Code Documentation
Loading...
Searching...
No Matches
KisBSplines::KisBSpline1D Class Reference

#include <kis_bspline_1d.h>

+ Inheritance diagram for KisBSplines::KisBSpline1D:

Public Member Functions

float gridEnd () const
 
float gridStart () const
 
template<class FunctionOp >
void initializeSpline ()
 
 KisBSpline1D (float gridStart, float gridEnd, int numSamples, BorderCondition bc)
 
float value (float x) const
 
 ~KisBSpline1D ()
 
- Public Member Functions inherited from Private
 Private (KisCanvas2 *c)
 

Public Attributes

BorderCondition bc
 
UBspline_1d_sspline
 
- Public Attributes inherited from Private
KisCanvas2canvas
 
int displayedFrame
 
int intendedFrame
 

Private Member Functions

void initializeSplineImpl (const QVector< float > &values)
 

Private Attributes

const QScopedPointer< Privatem_d
 
float m_gridEnd
 
float m_gridStart
 
int m_numSamples
 

Detailed Description

Definition at line 19 of file kis_bspline_1d.cpp.

Constructor & Destructor Documentation

◆ KisBSpline1D()

KisBSplines::KisBSpline1D::KisBSpline1D ( float gridStart,
float gridEnd,
int numSamples,
BorderCondition bc )

Definition at line 25 of file kis_bspline_1d.cpp.

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}
const QScopedPointer< Private > m_d

References bc, gridEnd(), gridStart(), m_d, m_gridEnd, m_gridStart, and m_numSamples.

◆ ~KisBSpline1D()

KisBSplines::KisBSpline1D::~KisBSpline1D ( )

Definition at line 39 of file kis_bspline_1d.cpp.

40{
41 if (m_d->spline) {
42 destroy_Bspline(m_d->spline);
43 }
44}
void destroy_Bspline(void *spline)

References destroy_Bspline(), and m_d.

Member Function Documentation

◆ gridEnd()

float KisBSplines::KisBSpline1D::gridEnd ( ) const
inline

Definition at line 49 of file kis_bspline_1d.h.

49 {
50 return m_gridEnd;
51 }

◆ gridStart()

float KisBSplines::KisBSpline1D::gridStart ( ) const
inline

Definition at line 45 of file kis_bspline_1d.h.

45 {
46 return m_gridStart;
47 }

◆ initializeSpline()

template<class FunctionOp >
void KisBSplines::KisBSpline1D::initializeSpline ( )
inline

Definition at line 27 of file kis_bspline_1d.h.

27 {
28
29 FunctionOp op;
30 float step = (m_gridEnd - m_gridStart) / (m_numSamples - 1);
32
33 for (int i = 0; i < m_numSamples; i++) {
34 float x = m_gridStart + i * step;
35 float y = op(x);
36
37 values[i] = y;
38 }
39
41 }
void initializeSplineImpl(const QVector< float > &values)

◆ initializeSplineImpl()

void KisBSplines::KisBSpline1D::initializeSplineImpl ( const QVector< float > & values)
private

Definition at line 46 of file kis_bspline_1d.cpp.

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}
UBspline_1d_s * create_UBspline_1d_s(Ugrid x_grid, BCtype_s xBC, float *data)
bc_code convertBorderType(BorderCondition v)
float lVal
float rVal
bc_code lCode
bc_code rCode
double end
double delta
double start
double delta_inv
int num

References KisBSplines::convertBorderType(), create_UBspline_1d_s(), Ugrid::delta, Ugrid::delta_inv, Ugrid::end, BCtype_s::lCode, BCtype_s::lVal, m_d, m_gridEnd, m_gridStart, m_numSamples, Ugrid::num, BCtype_s::rCode, BCtype_s::rVal, and Ugrid::start.

◆ value()

float KisBSplines::KisBSpline1D::value ( float x) const

The spline works for an open interval only, so include the last point explicitly

Definition at line 67 of file kis_bspline_1d.cpp.

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}
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
float value(float x) const

References eval_UBspline_1d_s(), KIS_ASSERT_RECOVER_NOOP, m_d, m_gridEnd, m_gridStart, and value().

Member Data Documentation

◆ bc

BorderCondition KisBSplines::KisBSpline1D::bc

Definition at line 21 of file kis_bspline_1d.cpp.

◆ m_d

const QScopedPointer<Private> KisBSplines::KisBSpline1D::m_d
private

Definition at line 58 of file kis_bspline_1d.h.

◆ m_gridEnd

float KisBSplines::KisBSpline1D::m_gridEnd
private

Definition at line 65 of file kis_bspline_1d.h.

◆ m_gridStart

float KisBSplines::KisBSpline1D::m_gridStart
private

We need to store them separately, because they should be accessible from the templated part

Definition at line 64 of file kis_bspline_1d.h.

◆ m_numSamples

int KisBSplines::KisBSpline1D::m_numSamples
private

Definition at line 66 of file kis_bspline_1d.h.

◆ spline

UBspline_1d_s* KisBSplines::KisBSpline1D::spline

Definition at line 22 of file kis_bspline_1d.cpp.


The documentation for this class was generated from the following files: