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

#include <kis_nu_bspline_2d.h>

+ Inheritance diagram for KisBSplines::KisNUBSpline2D:

Public Member Functions

BorderCondition borderConditionX () const
 
BorderCondition borderConditionY () const
 
QPointF bottomRight () const
 
template<class FunctionOp >
void initializeSpline (const FunctionOp &op)
 
 KisNUBSpline2D (const QVector< double > &xSamples, BorderCondition bcX, const QVector< double > &ySamples, BorderCondition bcY)
 
QPointF topLeft () const
 
float value (float x, float y) const
 
 ~KisNUBSpline2D ()
 
- Public Member Functions inherited from Private
 Private (KisCanvas2 *c)
 

Public Attributes

BorderCondition bcX
 
BorderCondition bcY
 
float maxX
 
float maxY
 
float minX
 
float minY
 
NUBspline_2d_sspline
 
NUgridxGrid
 
NUgridyGrid
 
- 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
 
const QVector< double > m_xSamples
 
const QVector< double > m_ySamples
 

Detailed Description

Definition at line 19 of file kis_nu_bspline_2d.cpp.

Constructor & Destructor Documentation

◆ KisNUBSpline2D()

KisBSplines::KisNUBSpline2D::KisNUBSpline2D ( const QVector< double > & xSamples,
BorderCondition bcX,
const QVector< double > & ySamples,
BorderCondition bcY )

Definition at line 35 of file kis_nu_bspline_2d.cpp.

37 : m_d(new Private),
38 m_xSamples(xSamples),
39 m_ySamples(ySamples)
40{
41 m_d->xGrid = create_general_grid(const_cast<double*>(m_xSamples.constData()), m_xSamples.size());
42 m_d->yGrid = create_general_grid(const_cast<double*>(m_ySamples.constData()), m_ySamples.size());
43
44 m_d->bcX = bcX;
45 m_d->bcY = bcY;
46
47 m_d->minX = xSamples.first();
48 m_d->maxX = xSamples.last();
49
50 m_d->minY = ySamples.first();
51 m_d->maxY = ySamples.last();
52
53 m_d->spline = 0;
54}
NUgrid * create_general_grid(double *points, int num_points)
Definition nugrid.cpp:155
const QVector< double > m_xSamples
const QVector< double > m_ySamples
const QScopedPointer< Private > m_d

References bcX, bcY, create_general_grid(), m_d, m_xSamples, and m_ySamples.

◆ ~KisNUBSpline2D()

KisBSplines::KisNUBSpline2D::~KisNUBSpline2D ( )

Definition at line 56 of file kis_nu_bspline_2d.cpp.

57{
58 if (m_d->spline) {
59 destroy_Bspline(m_d->spline);
60 }
61
62 destroy_grid(m_d->xGrid);
63 destroy_grid(m_d->yGrid);
64}
void destroy_Bspline(void *spline)
void destroy_grid(NUgrid *grid)
Definition nugrid.cpp:173

References destroy_Bspline(), destroy_grid(), and m_d.

Member Function Documentation

◆ borderConditionX()

BorderCondition KisBSplines::KisNUBSpline2D::borderConditionX ( ) const

Definition at line 116 of file kis_nu_bspline_2d.cpp.

117{
118 return m_d->bcX;
119}

References m_d.

◆ borderConditionY()

BorderCondition KisBSplines::KisNUBSpline2D::borderConditionY ( ) const

Definition at line 121 of file kis_nu_bspline_2d.cpp.

122{
123 return m_d->bcY;
124}

References m_d.

◆ bottomRight()

QPointF KisBSplines::KisNUBSpline2D::bottomRight ( ) const

Definition at line 111 of file kis_nu_bspline_2d.cpp.

112{
113 return QPointF(m_d->maxX, m_d->maxY);
114}

References m_d.

◆ initializeSpline()

template<class FunctionOp >
void KisBSplines::KisNUBSpline2D::initializeSpline ( const FunctionOp & op)
inline

Definition at line 31 of file kis_nu_bspline_2d.h.

31 {
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
49 }
qreal v
void initializeSplineImpl(const QVector< float > &values)

References v.

◆ initializeSplineImpl()

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

Definition at line 66 of file kis_nu_bspline_2d.cpp.

67{
68 BCtype_s bctypeX;
69 bctypeX.lCode = bctypeX.rCode = convertBorderType(m_d->bcX);
70 bctypeX.lVal = bctypeX.rVal = 0.0;
71
72 BCtype_s bctypeY;
73 bctypeY.lCode = bctypeY.rCode = convertBorderType(m_d->bcY);
74 bctypeY.lVal = bctypeY.rVal = 0.0;
75
76 m_d->spline =
77 create_NUBspline_2d_s(m_d->xGrid, m_d->yGrid,
78 bctypeX, bctypeY,
79 const_cast<float*>(values.constData()));
80}
bc_code convertBorderType(BorderCondition v)
NUBspline_2d_s * create_NUBspline_2d_s(NUgrid *x_grid, NUgrid *y_grid, BCtype_s xBC, BCtype_s yBC, float *data)
float lVal
float rVal
bc_code lCode
bc_code rCode

References KisBSplines::convertBorderType(), create_NUBspline_2d_s(), BCtype_s::lCode, BCtype_s::lVal, m_d, BCtype_s::rCode, and BCtype_s::rVal.

◆ topLeft()

QPointF KisBSplines::KisNUBSpline2D::topLeft ( ) const

Definition at line 106 of file kis_nu_bspline_2d.cpp.

107{
108 return QPointF(m_d->minX, m_d->minY);
109}

References m_d.

◆ value()

float KisBSplines::KisNUBSpline2D::value ( float x,
float y ) const

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

Definition at line 82 of file kis_nu_bspline_2d.cpp.

83{
89 if (x == m_d->maxX) {
90 x -= x * std::numeric_limits<float>::epsilon();
91 }
92
93 if (y == m_d->maxY) {
94 y -= y * std::numeric_limits<float>::epsilon();
95 }
96
97 KIS_ASSERT_RECOVER_NOOP(x >= m_d->minX && x < m_d->maxX);
98 KIS_ASSERT_RECOVER_NOOP(y >= m_d->minY && y < m_d->maxY);
99
100 float value;
101 eval_NUBspline_2d_s(m_d->spline, x, y, &value);
102
103 return value;
104}
#define KIS_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:97
void eval_NUBspline_2d_s(NUBspline_2d_s *restrict spline, double x, double y, float *restrict val)
float value(float x, float y) const

References eval_NUBspline_2d_s(), KIS_ASSERT_RECOVER_NOOP, m_d, maxX, maxY, and value().

Member Data Documentation

◆ bcX

BorderCondition KisBSplines::KisNUBSpline2D::bcX

Definition at line 21 of file kis_nu_bspline_2d.cpp.

◆ bcY

BorderCondition KisBSplines::KisNUBSpline2D::bcY

Definition at line 22 of file kis_nu_bspline_2d.cpp.

◆ m_d

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

Definition at line 64 of file kis_nu_bspline_2d.h.

◆ m_xSamples

const QVector<double> KisBSplines::KisNUBSpline2D::m_xSamples
private

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

Definition at line 70 of file kis_nu_bspline_2d.h.

◆ m_ySamples

const QVector<double> KisBSplines::KisNUBSpline2D::m_ySamples
private

Definition at line 71 of file kis_nu_bspline_2d.h.

◆ maxX

float KisBSplines::KisNUBSpline2D::maxX

Definition at line 30 of file kis_nu_bspline_2d.cpp.

◆ maxY

float KisBSplines::KisNUBSpline2D::maxY

Definition at line 32 of file kis_nu_bspline_2d.cpp.

◆ minX

float KisBSplines::KisNUBSpline2D::minX

Definition at line 29 of file kis_nu_bspline_2d.cpp.

◆ minY

float KisBSplines::KisNUBSpline2D::minY

Definition at line 31 of file kis_nu_bspline_2d.cpp.

◆ spline

NUBspline_2d_s* KisBSplines::KisNUBSpline2D::spline

Definition at line 24 of file kis_nu_bspline_2d.cpp.

◆ xGrid

NUgrid* KisBSplines::KisNUBSpline2D::xGrid

Definition at line 26 of file kis_nu_bspline_2d.cpp.

◆ yGrid

NUgrid* KisBSplines::KisNUBSpline2D::yGrid

Definition at line 27 of file kis_nu_bspline_2d.cpp.


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