Blender V4.3
blender::bke::curves::nurbs Namespace Reference

Classes

struct  BasisCache
 

Functions

bool check_valid_num_and_order (int points_num, int8_t order, bool cyclic, KnotsMode knots_mode)
 
int calculate_evaluated_num (int points_num, int8_t order, bool cyclic, int resolution, KnotsMode knots_mode)
 
int knots_num (int points_num, int8_t order, bool cyclic)
 
void calculate_knots (int points_num, KnotsMode mode, int8_t order, bool cyclic, MutableSpan< float > knots)
 
void calculate_basis_cache (int points_num, int evaluated_num, int8_t order, bool cyclic, Span< float > knots, BasisCache &basis_cache)
 
void interpolate_to_evaluated (const BasisCache &basis_cache, int8_t order, Span< float > control_weights, GSpan src, GMutableSpan dst)
 
static void calculate_basis_for_point (const float parameter, const int points_num, const int degree, const Span< float > knots, MutableSpan< float > r_weights, int &r_start_index)
 
template<typename T >
static void interpolate_to_evaluated (const BasisCache &basis_cache, const int8_t order, const Span< T > src, MutableSpan< T > dst)
 
template<typename T >
static void interpolate_to_evaluated_rational (const BasisCache &basis_cache, const int8_t order, const Span< float > control_weights, const Span< T > src, MutableSpan< T > dst)
 

Function Documentation

◆ calculate_basis_cache()

void blender::bke::curves::nurbs::calculate_basis_cache ( int points_num,
int evaluated_num,
int8_t order,
bool cyclic,
Span< float > knots,
BasisCache & basis_cache )

Based on the knots, the order, and other properties of a NURBS curve, calculate a cache that can be used to more simply interpolate attributes to the evaluated points later. The cache includes two pieces of information for every evaluated point: the first control point that influences it, and a weight for each control point.

Definition at line 152 of file curve_nurbs.cc.

References BLI_assert, calculate_basis_for_point(), blender::Vector< T, InlineBufferCapacity, Allocator >::resize(), blender::bke::curves::segments_num(), blender::MutableSpan< T >::slice(), blender::bke::curves::nurbs::BasisCache::start_indices, and blender::bke::curves::nurbs::BasisCache::weights.

◆ calculate_basis_for_point()

static void blender::bke::curves::nurbs::calculate_basis_for_point ( const float parameter,
const int points_num,
const int degree,
const Span< float > knots,
MutableSpan< float > r_weights,
int & r_start_index )
static

◆ calculate_evaluated_num()

int blender::bke::curves::nurbs::calculate_evaluated_num ( int points_num,
int8_t order,
bool cyclic,
int resolution,
KnotsMode knots_mode )

Calculate the standard evaluated size for a NURBS curve, using the standard that the resolution is multiplied by the number of segments between the control points.

Note
Though the number of evaluated points is rather arbitrary, it's useful to have a standard for predictability and so that cached basis weights of NURBS curves with these properties can be shared.

Definition at line 35 of file curve_nurbs.cc.

References check_valid_num_and_order(), and blender::bke::curves::segments_num().

◆ calculate_knots()

void blender::bke::curves::nurbs::calculate_knots ( int points_num,
KnotsMode mode,
int8_t order,
bool cyclic,
MutableSpan< float > knots )

Calculate the knots for a curve given its properties, based on built-in standards defined by KnotsMode.

Note
Theoretically any sorted values can be used for NURBS knots, but calculating based on standard modes allows useful presets, automatic recalculation when the number of points changes, and is generally more intuitive than defining the knot vector manually.

Definition at line 55 of file curve_nurbs.cc.

References BLI_assert, ELEM, knots_num(), min_ii(), NURBS_KNOT_MODE_BEZIER, NURBS_KNOT_MODE_ENDPOINT, NURBS_KNOT_MODE_ENDPOINT_BEZIER, blender::MutableSpan< T >::size(), and UNUSED_VARS_NDEBUG.

Referenced by blender::io::usd::populate_curve_props_for_nurbs().

◆ check_valid_num_and_order()

bool blender::bke::curves::nurbs::check_valid_num_and_order ( int points_num,
int8_t order,
bool cyclic,
KnotsMode knots_mode )

Checks the conditions that a NURBS curve needs to evaluate.

Definition at line 16 of file curve_nurbs.cc.

References ELEM, NURBS_KNOT_MODE_BEZIER, and NURBS_KNOT_MODE_ENDPOINT_BEZIER.

Referenced by calculate_evaluated_num().

◆ interpolate_to_evaluated() [1/2]

template<typename T >
static void blender::bke::curves::nurbs::interpolate_to_evaluated ( const BasisCache & basis_cache,
const int8_t order,
const Span< T > src,
MutableSpan< T > dst )
static

◆ interpolate_to_evaluated() [2/2]

void blender::bke::curves::nurbs::interpolate_to_evaluated ( const BasisCache & basis_cache,
int8_t order,
Span< float > control_weights,
GSpan src,
GMutableSpan dst )

Using a "basis cache" generated by #BasisCache, interpolate attribute values to the evaluated points. The number of evaluated points is determined by the #basis_cache argument.

Parameters
control_weightsAn optional span of control point weights, which must have the same size as the number of control points in the curve if provided. Using this argument gives a NURBS curve the "Rational" behavior that's part of its acronym; otherwise it is a NUBS.

Definition at line 233 of file curve_nurbs.cc.

References BLI_assert, blender::GMutableSpan::copy_from(), blender::bke::curves::nurbs::BasisCache::invalid, blender::GMutableSpan::size(), blender::Vector< T, InlineBufferCapacity, Allocator >::size(), blender::bke::curves::nurbs::BasisCache::start_indices, and blender::GSpan::type().

◆ interpolate_to_evaluated_rational()

template<typename T >
static void blender::bke::curves::nurbs::interpolate_to_evaluated_rational ( const BasisCache & basis_cache,
const int8_t order,
const Span< float > control_weights,
const Span< T > src,
MutableSpan< T > dst )
static

◆ knots_num()

int blender::bke::curves::nurbs::knots_num ( int points_num,
int8_t order,
bool cyclic )

Calculate the length of the knot vector for a NURBS curve with the given properties. The knots must be longer for a cyclic curve, for example, in order to provide weights for the last evaluated points that are also influenced by the first control points.

Definition at line 47 of file curve_nurbs.cc.

Referenced by calculate_knots(), and blender::io::usd::populate_curve_props_for_nurbs().