Blender V4.3
BKE_curve.hh File Reference
#include <optional>
#include "BLI_bounds_types.hh"
#include "BLI_math_vector_types.hh"
#include "BLI_sys_types.h"
#include "DNA_listBase.h"

Go to the source code of this file.

Classes

struct  CurveCache
 
struct  CVKeyIndex
 

Macros

#define KNOTSU(nu)    ((nu)->orderu + (nu)->pntsu + (((nu)->flagu & CU_NURB_CYCLIC) ? ((nu)->orderu - 1) : 0))
 
#define KNOTSV(nu)    ((nu)->orderv + (nu)->pntsv + (((nu)->flagv & CU_NURB_CYCLIC) ? ((nu)->orderv - 1) : 0))
 
#define SEGMENTSU(nu)   (((nu)->flagu & CU_NURB_CYCLIC) ? (nu)->pntsu : (nu)->pntsu - 1)
 
#define SEGMENTSV(nu)   (((nu)->flagv & CU_NURB_CYCLIC) ? (nu)->pntsv : (nu)->pntsv - 1)
 
#define CU_DO_RADIUS(cu, nu)
 
#define CU_IS_2D(cu)   (((cu)->flag & CU_3D) == 0)
 
#define CU_DO_2DFILL(cu)   (CU_IS_2D(cu) && (((cu)->flag & (CU_FRONT | CU_BACK)) != 0))
 

Typedefs

using eBezTriple_Flag__Alias = int
 

Enumerations

enum  eNurbHandleTest_Mode { NURB_HANDLE_TEST_EACH = 1 , NURB_HANDLE_TEST_KNOT_OR_EACH = 2 , NURB_HANDLE_TEST_KNOT_ONLY = 3 }
 
enum  { BKE_CURVE_BATCH_DIRTY_ALL = 0 , BKE_CURVE_BATCH_DIRTY_SELECT }
 

Functions

void BKE_curve_editfont_free (Curve *cu)
 
void BKE_curve_init (Curve *cu, short curve_type)
 
CurveBKE_curve_add (Main *bmain, const char *name, int type)
 
short BKE_curve_type_get (const Curve *cu)
 
void BKE_curve_type_test (Object *ob)
 
void BKE_curve_dimension_update (Curve *cu)
 
void BKE_curve_texspace_calc (Curve *cu)
 
void BKE_curve_texspace_ensure (Curve *cu)
 
std::optional< blender::Bounds< blender::float3 > > BKE_curve_minmax (const Curve *cu, bool use_radius)
 
bool BKE_curve_center_median (Curve *cu, float cent[3])
 
void BKE_curve_transform_ex (Curve *cu, const float mat[4][4], bool do_keys, bool do_props, float unit_scale)
 
void BKE_curve_transform (Curve *cu, const float mat[4][4], bool do_keys, bool do_props)
 
void BKE_curve_translate (Curve *cu, const float offset[3], bool do_keys)
 
void BKE_curve_material_index_remove (Curve *cu, int index)
 
bool BKE_curve_material_index_used (const Curve *cu, int index)
 
void BKE_curve_material_index_clear (Curve *cu)
 
bool BKE_curve_material_index_validate (Curve *cu)
 
void BKE_curve_material_remap (Curve *cu, const unsigned int *remap, unsigned int remap_len)
 
void BKE_curve_smooth_flag_set (Curve *cu, bool use_smooth)
 
ListBaseBKE_curve_nurbs_get (Curve *cu)
 
const ListBaseBKE_curve_nurbs_get_for_read (const Curve *cu)
 
int BKE_curve_nurb_vert_index_get (const Nurb *nu, const void *vert)
 
void BKE_curve_nurb_active_set (Curve *cu, const Nurb *nu)
 
NurbBKE_curve_nurb_active_get (Curve *cu)
 
void * BKE_curve_vert_active_get (Curve *cu)
 
void BKE_curve_nurb_vert_active_set (Curve *cu, const Nurb *nu, const void *vert)
 
bool BKE_curve_nurb_vert_active_get (Curve *cu, Nurb **r_nu, void **r_vert)
 
void BKE_curve_nurb_vert_active_validate (Curve *cu)
 
float(* BKE_curve_nurbs_vert_coords_alloc (const ListBase *lb, int *r_vert_len))[3]
 
void BKE_curve_nurbs_vert_coords_get (const ListBase *lb, float(*vert_coords)[3], int vert_len)
 
void BKE_curve_nurbs_vert_coords_apply_with_mat4 (ListBase *lb, const float(*vert_coords)[3], const float mat[4][4], bool constrain_2d)
 
void BKE_curve_nurbs_vert_coords_apply (ListBase *lb, const float(*vert_coords)[3], bool constrain_2d)
 
float(* BKE_curve_nurbs_key_vert_coords_alloc (const ListBase *lb, float *key, int *r_vert_len))[3]
 
void BKE_curve_nurbs_key_vert_tilts_apply (ListBase *lb, const float *key)
 
void BKE_curve_editNurb_keyIndex_delCV (GHash *keyindex, const void *cv)
 
void BKE_curve_editNurb_keyIndex_free (GHash **keyindex)
 
void BKE_curve_editNurb_free (Curve *cu)
 
ListBaseBKE_curve_editNurbs_get (Curve *cu)
 
const ListBaseBKE_curve_editNurbs_get_for_read (const Curve *cu)
 
void BKE_curve_bevelList_free (ListBase *bev)
 
void BKE_curve_bevelList_make (Object *ob, const ListBase *nurbs, bool for_render)
 
ListBase BKE_curve_bevel_make (const Curve *curve)
 
void BKE_curve_forward_diff_bezier (float q0, float q1, float q2, float q3, float *p, int it, int stride)
 
void BKE_curve_forward_diff_tangent_bezier (float q0, float q1, float q2, float q3, float *p, int it, int stride)
 
void BKE_curve_rect_from_textbox (const Curve *cu, const TextBox *tb, rctf *r_rect)
 
void BKE_curve_correct_bezpart (const float v1[2], float v2[2], float v3[2], const float v4[2])
 
bool BKE_nurbList_index_get_co (ListBase *nurb, int index, float r_co[3])
 
int BKE_nurbList_verts_count (const ListBase *nurb)
 
int BKE_nurbList_verts_count_without_handles (const ListBase *nurb)
 
void BKE_nurbList_free (ListBase *lb)
 
void BKE_nurbList_duplicate (ListBase *lb1, const ListBase *lb2)
 
void BKE_nurbList_handles_set (ListBase *editnurb, eNurbHandleTest_Mode handle_mode, char code)
 
void BKE_nurbList_handles_recalculate (ListBase *editnurb, bool calc_length, uint8_t flag)
 
void BKE_nurbList_handles_autocalc (ListBase *editnurb, uint8_t flag)
 
void BKE_nurbList_flag_set (ListBase *editnurb, uint8_t flag, bool set)
 
bool BKE_nurbList_flag_set_from_flag (ListBase *editnurb, uint8_t from_flag, uint8_t flag)
 
void BKE_nurb_free (Nurb *nu)
 
NurbBKE_nurb_duplicate (const Nurb *nu)
 
NurbBKE_nurb_copy (Nurb *src, int pntsu, int pntsv)
 
void BKE_nurb_project_2d (Nurb *nu)
 
float BKE_nurb_calc_length (const Nurb *nu, int resolution)
 
void BKE_nurb_makeFaces (const Nurb *nu, float *coord_array, int rowstride, int resolu, int resolv)
 
void BKE_nurb_makeCurve (const Nurb *nu, float *coord_array, float *tilt_array, float *radius_array, float *weight_array, int resolu, int stride)
 
unsigned int BKE_curve_calc_coords_axis_len (unsigned int bezt_array_len, unsigned int resolu, bool is_cyclic, bool use_cyclic_duplicate_endpoint)
 
void BKE_curve_calc_coords_axis (const BezTriple *bezt_array, unsigned int bezt_array_len, unsigned int resolu, bool is_cyclic, bool use_cyclic_duplicate_endpoint, unsigned int axis, unsigned int stride, float *r_points)
 
void BKE_nurb_knot_calc_u (Nurb *nu)
 
void BKE_nurb_knot_calc_v (Nurb *nu)
 
bool BKE_nurb_check_valid_u (const Nurb *nu)
 
bool BKE_nurb_check_valid_v (const Nurb *nu)
 
bool BKE_nurb_check_valid_uv (const Nurb *nu)
 
bool BKE_nurb_valid_message (int pnts, short order, short flag, short type, bool is_surf, int dir, char *message_dst, size_t maxncpy)
 
bool BKE_nurb_order_clamp_u (Nurb *nu)
 
bool BKE_nurb_order_clamp_v (Nurb *nu)
 
void BKE_nurb_direction_switch (Nurb *nu)
 
bool BKE_nurb_type_convert (Nurb *nu, short type, bool use_handles, const char **r_err_msg)
 
void BKE_nurb_points_add (Nurb *nu, int number)
 
void BKE_nurb_bezierPoints_add (Nurb *nu, int number)
 
int BKE_nurb_index_from_uv (Nurb *nu, int u, int v)
 
void BKE_nurb_index_to_uv (Nurb *nu, int index, int *r_u, int *r_v)
 
BezTripleBKE_nurb_bezt_get_next (Nurb *nu, BezTriple *bezt)
 
BezTripleBKE_nurb_bezt_get_prev (Nurb *nu, BezTriple *bezt)
 
BPointBKE_nurb_bpoint_get_next (Nurb *nu, BPoint *bp)
 
BPointBKE_nurb_bpoint_get_prev (Nurb *nu, BPoint *bp)
 
void BKE_nurb_bezt_calc_normal (Nurb *nu, BezTriple *bezt, float r_normal[3])
 
void BKE_nurb_bezt_calc_plane (Nurb *nu, BezTriple *bezt, float r_plane[3])
 
void BKE_nurb_bpoint_calc_normal (Nurb *nu, BPoint *bp, float r_normal[3])
 
void BKE_nurb_bpoint_calc_plane (Nurb *nu, BPoint *bp, float r_plane[3])
 
void BKE_nurb_handle_calc (BezTriple *bezt, BezTriple *prev, BezTriple *next, bool is_fcurve, char smoothing)
 
void BKE_nurb_handle_calc_ex (BezTriple *bezt, BezTriple *prev, BezTriple *next, eBezTriple_Flag__Alias handle_sel_flag, bool is_fcurve, char smoothing)
 
void BKE_nurb_handle_calc_simple (Nurb *nu, BezTriple *bezt)
 
void BKE_nurb_handle_calc_simple_auto (Nurb *nu, BezTriple *bezt)
 
void BKE_nurb_handle_smooth_fcurve (BezTriple *bezt, int total, bool cyclic)
 
void BKE_nurb_handles_calc (Nurb *nu)
 
void BKE_nurb_handles_autocalc (Nurb *nu, uint8_t flag)
 
short BKE_nurb_bezt_handle_test_calc_flag (const BezTriple *bezt, const eBezTriple_Flag__Alias sel_flag, const eNurbHandleTest_Mode handle_mode)
 
void BKE_nurb_bezt_handle_test (BezTriple *bezt, eBezTriple_Flag__Alias sel_flag, const eNurbHandleTest_Mode handle_mode, bool use_around_local)
 
void BKE_nurb_handles_test (Nurb *nu, eNurbHandleTest_Mode handle_mode, bool use_around_local)
 
void BKE_curve_eval_geometry (Depsgraph *depsgraph, Curve *curve)
 
void BKE_curve_batch_cache_dirty_tag (Curve *cu, int mode)
 
void BKE_curve_batch_cache_free (Curve *cu)
 
CurveBKE_curve_new_from_object (Object *object, Depsgraph *depsgraph, bool apply_modifiers)
 
Decimate Curve (<tt>curve_decimate.cc</tt>)

Simplify curve data.

unsigned int BKE_curve_decimate_bezt_array (BezTriple *bezt_array, unsigned int bezt_array_len, unsigned int resolu, bool is_cyclic, char flag_test, char flag_set, float error_sq_max, unsigned int error_target_len)
 
void BKE_curve_decimate_nurb (Nurb *nu, unsigned int resolu, float error_sq_max, unsigned int error_target_len)
 
Deform 3D Coordinates by Curve (<tt>curve_deform.cc</tt>)
void BKE_curve_deform_coords (const Object *ob_curve, const Object *ob_target, float(*vert_coords)[3], int vert_coords_len, const MDeformVert *dvert, int defgrp_index, short flag, short defaxis)
 
void BKE_curve_deform_coords_with_editmesh (const Object *ob_curve, const Object *ob_target, float(*vert_coords)[3], int vert_coords_len, int defgrp_index, short flag, short defaxis, const BMEditMesh *em_target)
 
void BKE_curve_deform_co (const Object *ob_curve, const Object *ob_target, const float orco[3], float vec[3], int no_rot_axis, float r_mat[3][3])
 

Variables

void(* BKE_curve_batch_cache_dirty_tag_cb )(Curve *cu, int mode)
 
void(* BKE_curve_batch_cache_free_cb )(Curve *cu)
 

Macro Definition Documentation

◆ CU_DO_2DFILL

#define CU_DO_2DFILL ( cu)    (CU_IS_2D(cu) && (((cu)->flag & (CU_FRONT | CU_BACK)) != 0))

◆ CU_DO_RADIUS

#define CU_DO_RADIUS ( cu,
nu )
Value:
((((cu)->flag & (CU_PATH_RADIUS | CU_3D)) || (cu)->bevobj || (cu)->extrude != 0.0f || \
(cu)->bevel_radius != 0.0f) ? \
1 : \
0)
@ CU_3D
@ CU_PATH_RADIUS
uint8_t flag
Definition wm_window.cc:138

Definition at line 80 of file BKE_curve.hh.

Referenced by BKE_curve_bevelList_make().

◆ CU_IS_2D

◆ KNOTSU

◆ KNOTSV

#define KNOTSV ( nu)     ((nu)->orderv + (nu)->pntsv + (((nu)->flagv & CU_NURB_CYCLIC) ? ((nu)->orderv - 1) : 0))

◆ SEGMENTSU

#define SEGMENTSU ( nu)    (((nu)->flagu & CU_NURB_CYCLIC) ? (nu)->pntsu : (nu)->pntsu - 1)

◆ SEGMENTSV

#define SEGMENTSV ( nu)    (((nu)->flagv & CU_NURB_CYCLIC) ? (nu)->pntsv : (nu)->pntsv - 1)

Definition at line 78 of file BKE_curve.hh.

Typedef Documentation

◆ eBezTriple_Flag__Alias

Definition at line 34 of file BKE_curve.hh.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
BKE_CURVE_BATCH_DIRTY_ALL 
BKE_CURVE_BATCH_DIRTY_SELECT 

Definition at line 374 of file BKE_curve.hh.

◆ eNurbHandleTest_Mode

Enumerator
NURB_HANDLE_TEST_EACH 

Read the selection from each handle.

NURB_HANDLE_TEST_KNOT_OR_EACH 

When the knot (center point) is selected treat the handles as selected too. Otherwise use the same behavior as NURB_HANDLE_TEST_EACH.

NURB_HANDLE_TEST_KNOT_ONLY 

When the knot is selected, treat all handles as selected, otherwise none.

Note
Typically used when handles are hidden.

Definition at line 56 of file BKE_curve.hh.

Function Documentation

◆ BKE_curve_add()

◆ BKE_curve_batch_cache_dirty_tag()

void BKE_curve_batch_cache_dirty_tag ( Curve * cu,
int mode )

◆ BKE_curve_batch_cache_free()

void BKE_curve_batch_cache_free ( Curve * cu)

Definition at line 5517 of file curve.cc.

References Curve::batch_cache, and BKE_curve_batch_cache_free_cb.

Referenced by curve_free_data().

◆ BKE_curve_bevel_make()

◆ BKE_curve_bevelList_free()

void BKE_curve_bevelList_free ( ListBase * bev)

◆ BKE_curve_bevelList_make()

void BKE_curve_bevelList_make ( Object * ob,
const ListBase * nurbs,
bool for_render )

Definition at line 2528 of file curve.cc.

References b, bevelinside(), Curve::bevfac1_mapping, Curve::bevfac2_mapping, bevlist_firstlast_direction_calc_from_bpoint(), Curve::bevobj, BevList::bevpoints, BKE_curve_bevelList_free(), BKE_curve_forward_diff_bezier(), BKE_nurb_check_valid_u(), BKE_nurb_makeCurve(), BevelSort::bl, BLI_addtail(), BLI_assert, BLI_insertlinkbefore(), BLI_remlink(), BevList::charidx, compare_v3v3(), copy_v3_v3(), CU_3D, CU_BACK, CU_BEVFAC_MAP_SEGMENT, CU_BEVFAC_MAP_SPLINE, CU_BEZIER, CU_DO_RADIUS, CU_FRONT, CU_IS_2D, CU_NURB_CYCLIC, CU_NURBS, CU_POLY, CU_TWIST_TANGENT, Object::data, BevelSort::dir, BevPoint::dir, BevList::dupe_nr, BevPoint::dupe_tag, Curve::editnurb, ELEM, fabsf, Curve::flag, forward_diff_bezier_cotangent(), BezTriple::h1, BezTriple::h2, HD_VECT, BevList::hole, is_cyclic(), BevelSort::left, len, len_v3v3(), LISTBASE_FOREACH, LISTBASE_FOREACH_MUTABLE, make_bevel_list_2D(), make_bevel_list_3D(), make_bevel_list_segment_2D(), make_bevel_list_segment_3D(), MEM_calloc_arrayN, MEM_callocN, MEM_freeN(), MEM_malloc_arrayN, MEM_mallocN, min, normalize_v3(), BevList::nr, OB_FONT, BevPoint::offset, BevList::poly, BevPoint::quat, BevPoint::radius, BezTriple::radius, BPoint::radius, Curve::resolu_ren, Object::runtime, BevList::segbevcount, BevList::seglen, SEGMENTSU, sub_v3_v3v3(), BevPoint::tan, Curve::taperobj, BevPoint::tilt, BezTriple::tilt, BPoint::tilt, tilt_bezpart(), Curve::twist_mode, Curve::twist_smooth, Object::type, unit_qt(), BevPoint::vec, BezTriple::vec, BPoint::vec, vergxcobev(), BevPoint::weight, BezTriple::weight, and BPoint::weight.

Referenced by evaluate_curve_type_object().

◆ BKE_curve_calc_coords_axis()

void BKE_curve_calc_coords_axis ( const BezTriple * bezt_array,
unsigned int bezt_array_len,
unsigned int resolu,
bool is_cyclic,
bool use_cyclic_duplicate_endpoint,
unsigned int axis,
unsigned int stride,
float * r_points )

Calculate an array for the entire curve (cyclic or non-cyclic).

Note
Call for each axis.
Parameters
use_cyclic_duplicate_endpointDuplicate values at the beginning & end of the array.

Definition at line 1607 of file curve.cc.

References BKE_curve_calc_coords_axis_len(), BKE_curve_forward_diff_bezier(), BLI_assert, is_cyclic(), POINTER_OFFSET, UNUSED_VARS_NDEBUG, and BezTriple::vec.

Referenced by BKE_curve_decimate_bezt_array().

◆ BKE_curve_calc_coords_axis_len()

unsigned int BKE_curve_calc_coords_axis_len ( unsigned int bezt_array_len,
unsigned int resolu,
bool is_cyclic,
bool use_cyclic_duplicate_endpoint )

Calculate the length for arrays filled in by BKE_curve_calc_coords_axis.

Definition at line 1597 of file curve.cc.

References is_cyclic().

Referenced by BKE_curve_calc_coords_axis(), and BKE_curve_decimate_bezt_array().

◆ BKE_curve_center_median()

bool BKE_curve_center_median ( Curve * cu,
float cent[3] )

◆ BKE_curve_correct_bezpart()

void BKE_curve_correct_bezpart ( const float v1[2],
float v2[2],
float v3[2],
const float v4[2] )

This function is almost the same as BKE_fcurve_correct_bezpart, but doesn't allow as large a tangent.

Definition at line 5451 of file curve.cc.

References fabsf, len, and v2.

Referenced by curve_eval_bezier_point().

◆ BKE_curve_decimate_bezt_array()

unsigned int BKE_curve_decimate_bezt_array ( BezTriple * bezt_array,
unsigned int bezt_array_len,
unsigned int resolu,
bool is_cyclic,
char flag_test,
char flag_set,
float error_sq_max,
unsigned int error_target_len )

◆ BKE_curve_decimate_nurb()

void BKE_curve_decimate_nurb ( Nurb * nu,
unsigned int resolu,
float error_sq_max,
unsigned int error_target_len )

◆ BKE_curve_deform_co()

void BKE_curve_deform_co ( const Object * ob_curve,
const Object * ob_target,
const float orco[3],
float vec[3],
int no_rot_axis,
float r_mat[3][3] )
Parameters
orcoInput vec and orco = local coord in curve space orco is original not-animated or deformed reference point.

The result written to vec and r_mat.

Definition at line 408 of file curve_deform.cc.

References calc_curve_deform(), copy_v3_v3(), CurveDeform::curvespace, CurveDeform::dmax, CurveDeform::dmin, init_curve_deform(), mul_m3_m3m3(), mul_m4_v3(), CurveDeform::no_rot_axis, OB_CURVES_LEGACY, CurveDeform::objectspace, CurveDeform::objectspace3, quat_to_mat3(), Object::trackflag, Object::type, and unit_m3().

◆ BKE_curve_deform_coords()

void BKE_curve_deform_coords ( const Object * ob_curve,
const Object * ob_target,
float(*) vert_coords[3],
int vert_coords_len,
const MDeformVert * dvert,
int defgrp_index,
short flag,
short defaxis )

Definition at line 368 of file curve_deform.cc.

References curve_deform_coords_impl(), and flag.

Referenced by deform_verts(), and deform_verts_EM().

◆ BKE_curve_deform_coords_with_editmesh()

void BKE_curve_deform_coords_with_editmesh ( const Object * ob_curve,
const Object * ob_target,
float(*) vert_coords[3],
int vert_coords_len,
int defgrp_index,
short flag,
short defaxis,
const BMEditMesh * em_target )

Definition at line 388 of file curve_deform.cc.

References curve_deform_coords_impl(), and flag.

Referenced by deform_verts_EM().

◆ BKE_curve_dimension_update()

◆ BKE_curve_editfont_free()

void BKE_curve_editfont_free ( Curve * cu)

Frees edit-curve entirely.

Definition at line 295 of file curve.cc.

References Curve::editfont, MEM_freeN(), EditFont::selboxes, EditFont::textbuf, and EditFont::textbufinfo.

Referenced by curve_free_data(), and ED_curve_editfont_free().

◆ BKE_curve_editNurb_free()

void BKE_curve_editNurb_free ( Curve * cu)

◆ BKE_curve_editNurb_keyIndex_delCV()

void BKE_curve_editNurb_keyIndex_delCV ( GHash * keyindex,
const void * cv )

◆ BKE_curve_editNurb_keyIndex_free()

void BKE_curve_editNurb_keyIndex_free ( GHash ** keyindex)

◆ BKE_curve_editNurbs_get()

◆ BKE_curve_editNurbs_get_for_read()

const ListBase * BKE_curve_editNurbs_get_for_read ( const Curve * cu)

Definition at line 407 of file curve.cc.

References Curve::editnurb, and EditNurb::nurbs.

Referenced by BKE_curve_nurbs_get_for_read(), and evaluate_surface_object().

◆ BKE_curve_eval_geometry()

◆ BKE_curve_forward_diff_bezier()

◆ BKE_curve_forward_diff_tangent_bezier()

void BKE_curve_forward_diff_tangent_bezier ( float q0,
float q1,
float q2,
float q3,
float * p,
int it,
int stride )

Forward differencing method for first derivative of cubic bezier curve.

Definition at line 1691 of file curve.cc.

References float, POINTER_OFFSET, and q1.

Referenced by blender::ed::sculpt_paint::paint_stroke_curve_end().

◆ BKE_curve_init()

◆ BKE_curve_material_index_clear()

void BKE_curve_material_index_clear ( Curve * cu)

◆ BKE_curve_material_index_remove()

void BKE_curve_material_index_remove ( Curve * cu,
int index )

◆ BKE_curve_material_index_used()

bool BKE_curve_material_index_used ( const Curve * cu,
int index )

◆ BKE_curve_material_index_validate()

◆ BKE_curve_material_remap()

void BKE_curve_material_remap ( Curve * cu,
const unsigned int * remap,
unsigned int remap_len )

◆ BKE_curve_minmax()

◆ BKE_curve_new_from_object()

Curve * BKE_curve_new_from_object ( Object * object,
Depsgraph * depsgraph,
bool apply_modifiers )

◆ BKE_curve_nurb_active_get()

Nurb * BKE_curve_nurb_active_get ( Curve * cu)

◆ BKE_curve_nurb_active_set()

◆ BKE_curve_nurb_vert_active_get()

bool BKE_curve_nurb_vert_active_get ( Curve * cu,
Nurb ** r_nu,
void ** r_vert )

◆ BKE_curve_nurb_vert_active_set()

◆ BKE_curve_nurb_vert_active_validate()

◆ BKE_curve_nurb_vert_index_get()

◆ BKE_curve_nurbs_get()

◆ BKE_curve_nurbs_get_for_read()

const ListBase * BKE_curve_nurbs_get_for_read ( const Curve * cu)

◆ BKE_curve_nurbs_key_vert_coords_alloc()

float(* BKE_curve_nurbs_key_vert_coords_alloc ( const ListBase * lb,
float * key,
int * r_vert_len ))[3]

◆ BKE_curve_nurbs_key_vert_tilts_apply()

void BKE_curve_nurbs_key_vert_tilts_apply ( ListBase * lb,
const float * key )

◆ BKE_curve_nurbs_vert_coords_alloc()

◆ BKE_curve_nurbs_vert_coords_apply()

void BKE_curve_nurbs_vert_coords_apply ( ListBase * lb,
const float(*) vert_coords[3],
bool constrain_2d )

◆ BKE_curve_nurbs_vert_coords_apply_with_mat4()

void BKE_curve_nurbs_vert_coords_apply_with_mat4 ( ListBase * lb,
const float(*) vert_coords[3],
const float mat[4][4],
bool constrain_2d )

◆ BKE_curve_nurbs_vert_coords_get()

void BKE_curve_nurbs_vert_coords_get ( const ListBase * lb,
float(*) vert_coords[3],
int vert_len )

◆ BKE_curve_rect_from_textbox()

void BKE_curve_rect_from_textbox ( const Curve * cu,
const TextBox * tb,
rctf * r_rect )

◆ BKE_curve_smooth_flag_set()

void BKE_curve_smooth_flag_set ( Curve * cu,
bool use_smooth )

Definition at line 5428 of file curve.cc.

References CU_SMOOTH, LISTBASE_FOREACH, and Curve::nurb.

Referenced by blender::ed::object::shade_smooth_exec().

◆ BKE_curve_texspace_calc()

◆ BKE_curve_texspace_ensure()

◆ BKE_curve_transform()

void BKE_curve_transform ( Curve * cu,
const float mat[4][4],
bool do_keys,
bool do_props )

Definition at line 5239 of file curve.cc.

References BKE_curve_transform_ex(), and mat4_to_scale().

◆ BKE_curve_transform_ex()

◆ BKE_curve_translate()

◆ BKE_curve_type_get()

◆ BKE_curve_type_test()

void BKE_curve_type_test ( Object * ob)

◆ BKE_curve_vert_active_get()

void * BKE_curve_vert_active_get ( Curve * cu)

Get active vert for curve.

Definition at line 5001 of file curve.cc.

References BKE_curve_nurb_vert_active_get().

Referenced by ED_curve_editnurb_select_pick().

◆ BKE_nurb_bezierPoints_add()

void BKE_nurb_bezierPoints_add ( Nurb * nu,
int number )

Definition at line 875 of file curve.cc.

References Nurb::bezt, MEM_recallocN, Nurb::pntsu, and BezTriple::radius.

Referenced by ed_editcurve_addvert().

◆ BKE_nurb_bezt_calc_normal()

void BKE_nurb_bezt_calc_normal ( Nurb * nu,
BezTriple * bezt,
float r_normal[3] )

◆ BKE_nurb_bezt_calc_plane()

◆ BKE_nurb_bezt_get_next()

◆ BKE_nurb_bezt_get_prev()

◆ BKE_nurb_bezt_handle_test()

void BKE_nurb_bezt_handle_test ( BezTriple * bezt,
eBezTriple_Flag__Alias sel_flag,
const eNurbHandleTest_Mode handle_mode,
bool use_around_local )

Update selected handle types to ensure valid state, e.g. deduce "Auto" types to concrete ones. Thereby sel_flag defines what qualifies as selected. Use when something has changed handle positions.

The caller needs to recalculate handles.

Parameters
sel_flagThe flag (bezt.f1/2/3) value to use to determine selection. Usually SELECT, but may want to use a different one at times (if caller does not operate on * selection).
handle_modeInterpret the selection base on modes in eNurbHandleTest_Mode.

Definition at line 4046 of file curve.cc.

References BKE_nurb_bezt_handle_test_calc_flag(), ELEM, flag, BezTriple::h1, BezTriple::h2, HD_ALIGN, HD_AUTO, HD_AUTO_ANIM, HD_FREE, HD_VECT, SEL_F1, SEL_F2, and SEL_F3.

Referenced by BKE_nurb_handles_test(), createTransGPencil_curves(), graphedit_activekey_handles_cb(), and testhandles_fcurve().

◆ BKE_nurb_bezt_handle_test_calc_flag()

short BKE_nurb_bezt_handle_test_calc_flag ( const BezTriple * bezt,
const eBezTriple_Flag__Alias sel_flag,
const eNurbHandleTest_Mode handle_mode )

Return a flag for the handles to treat as "selected": 1 << 0, 1 << 1, 1 << 2 map to handles 1 2 & 3.

Definition at line 4013 of file curve.cc.

References BezTriple::f1, BezTriple::f2, BezTriple::f3, flag, NURB_HANDLE_TEST_EACH, NURB_HANDLE_TEST_KNOT_ONLY, NURB_HANDLE_TEST_KNOT_OR_EACH, SEL_F1, SEL_F2, and SEL_F3.

Referenced by bezt_select_to_transform_triple_flag(), BKE_nurb_bezt_handle_test(), and BKE_nurbList_handles_set().

◆ BKE_nurb_bpoint_calc_normal()

◆ BKE_nurb_bpoint_calc_plane()

void BKE_nurb_bpoint_calc_plane ( Nurb * nu,
BPoint * bp,
float r_plane[3] )

◆ BKE_nurb_bpoint_get_next()

BPoint * BKE_nurb_bpoint_get_next ( Nurb * nu,
BPoint * bp )

◆ BKE_nurb_bpoint_get_prev()

BPoint * BKE_nurb_bpoint_get_prev ( Nurb * nu,
BPoint * bp )

◆ BKE_nurb_calc_length()

◆ BKE_nurb_check_valid_u()

bool BKE_nurb_check_valid_u ( const Nurb * nu)

◆ BKE_nurb_check_valid_uv()

bool BKE_nurb_check_valid_uv ( const Nurb * nu)

Definition at line 4789 of file curve.cc.

References BKE_nurb_check_valid_u(), BKE_nurb_check_valid_v(), and Nurb::pntsv.

Referenced by evaluate_surface_object().

◆ BKE_nurb_check_valid_v()

bool BKE_nurb_check_valid_v ( const Nurb * nu)

Definition at line 4781 of file curve.cc.

References Nurb::flagv, nurb_check_valid(), Nurb::orderv, Nurb::pntsv, Nurb::type, and Valid.

Referenced by BKE_nurb_check_valid_uv(), and makeknots().

◆ BKE_nurb_copy()

Nurb * BKE_nurb_copy ( Nurb * src,
int pntsu,
int pntsv )

Copy the nurb but allow for different number of points (to be copied after this).

Definition at line 648 of file curve.cc.

References Nurb::bezt, Nurb::bp, Nurb::knotsu, Nurb::knotsv, MEM_malloc_arrayN, MEM_mallocN, Nurb::pntsu, and Nurb::pntsv.

Referenced by adduplicateflagNurb(), curve_delete_segments(), and ed_editcurve_addvert().

◆ BKE_nurb_direction_switch()

◆ BKE_nurb_duplicate()

◆ BKE_nurb_free()

◆ BKE_nurb_handle_calc()

void BKE_nurb_handle_calc ( BezTriple * bezt,
BezTriple * prev,
BezTriple * next,
bool is_fcurve,
char smoothing )

Recalculate the handles of a nurb bezier-triple. Acts based on handle selection with SELECT flag. To use a different flag, use BKE_nurb_handle_calc_ex().

Definition at line 3938 of file curve.cc.

References calchandleNurb_intern(), next, and SELECT.

Referenced by BKE_gpencil_editcurve_recalculate_handles(), BKE_nurb_handle_calc_simple(), calc_keyHandles(), mask_calc_point_handle(), and points_to_bezier().

◆ BKE_nurb_handle_calc_ex()

void BKE_nurb_handle_calc_ex ( BezTriple * bezt,
BezTriple * prev,
BezTriple * next,
eBezTriple_Flag__Alias handle_sel_flag,
bool is_fcurve,
char smoothing )

Variant of BKE_nurb_handle_calc() that allows calculating based on a different select flag.

Parameters
handle_sel_flagThe flag (bezt.f1/2/3) value to use to determine selection. Usually SELECT, but may want to use a different one at times (if caller does not operate on selection).

Definition at line 3944 of file curve.cc.

References calchandleNurb_intern(), and next.

◆ BKE_nurb_handle_calc_simple()

void BKE_nurb_handle_calc_simple ( Nurb * nu,
BezTriple * bezt )

Similar to BKE_nurb_handle_calc but for curves and figures out the previous and next for us.

Definition at line 3985 of file curve.cc.

References BKE_nurb_bezt_get_next(), BKE_nurb_bezt_get_prev(), BKE_nurb_handle_calc(), next, and Nurb::pntsu.

Referenced by adduplicateflagNurb(), and BKE_nurb_handle_calc_simple_auto().

◆ BKE_nurb_handle_calc_simple_auto()

void BKE_nurb_handle_calc_simple_auto ( Nurb * nu,
BezTriple * bezt )

◆ BKE_nurb_handle_smooth_fcurve()

void BKE_nurb_handle_smooth_fcurve ( BezTriple * bezt,
int total,
bool cyclic )

Definition at line 3889 of file curve.cc.

References bezier_handle_calc_smooth_fcurve(), count, and is_free_auto_point().

◆ BKE_nurb_handles_autocalc()

◆ BKE_nurb_handles_calc()

◆ BKE_nurb_handles_test()

void BKE_nurb_handles_test ( Nurb * nu,
eNurbHandleTest_Mode handle_mode,
bool use_around_local )

◆ BKE_nurb_index_from_uv()

int BKE_nurb_index_from_uv ( Nurb * nu,
int u,
int v )

Definition at line 889 of file curve.cc.

References CU_NURB_CYCLIC, Nurb::flagu, Nurb::flagv, mod_i(), Nurb::pntsu, Nurb::pntsv, and v.

Referenced by curve_select_shortest_path_surf().

◆ BKE_nurb_index_to_uv()

void BKE_nurb_index_to_uv ( Nurb * nu,
int index,
int * r_u,
int * r_v )

Definition at line 911 of file curve.cc.

References BLI_assert, Nurb::pntsu, and Nurb::pntsv.

Referenced by curve_select_shortest_path_surf().

◆ BKE_nurb_knot_calc_u()

◆ BKE_nurb_knot_calc_v()

◆ BKE_nurb_makeCurve()

void BKE_nurb_makeCurve ( const Nurb * nu,
float * coord_array,
float * tilt_array,
float * radius_array,
float * weight_array,
int resolu,
int stride )
Parameters
coord_arrayHas to be (3 * 4 * pntsu * resolu) in size and zero-ed
tilt_arrayset when non-NULL
radius_arrayset when non-NULL

Definition at line 1461 of file curve.cc.

References basisNurb(), Nurb::bp, CU_NURB_CYCLIC, eps, Nurb::flagu, float, KNOTSU, Nurb::knotsu, len, madd_v3_v3fl(), MEM_calloc_arrayN, MEM_freeN(), MEM_malloc_arrayN, Nurb::orderu, Nurb::pntsu, POINTER_OFFSET, BPoint::radius, SEGMENTSU, sum(), BPoint::tilt, BPoint::vec, BPoint::weight, and zero_v3().

Referenced by BKE_curve_bevelList_make(), BKE_nurb_calc_length(), curve_to_displist(), and evaluate_surface_object().

◆ BKE_nurb_makeFaces()

void BKE_nurb_makeFaces ( const Nurb * nu,
float * coord_array,
int rowstride,
int resolu,
int resolv )
Parameters
coord_arrayhas to be (3 * 4 * resolu * resolv) in size, and zero-ed.

Definition at line 1269 of file curve.cc.

References basisNurb(), Nurb::bp, CU_NURB_CYCLIC, Nurb::flagu, Nurb::flagv, float, KNOTSU, Nurb::knotsu, KNOTSV, Nurb::knotsv, len, madd_v3_v3fl(), MEM_calloc_arrayN, MEM_freeN(), MEM_malloc_arrayN, Nurb::orderu, Nurb::orderv, Nurb::pntsu, Nurb::pntsv, sum(), v, BPoint::vec, and zero_v3().

Referenced by evaluate_surface_object().

◆ BKE_nurb_order_clamp_u()

bool BKE_nurb_order_clamp_u ( Nurb * nu)

◆ BKE_nurb_order_clamp_v()

bool BKE_nurb_order_clamp_v ( Nurb * nu)

Definition at line 4811 of file curve.cc.

References max_ii(), Nurb::orderv, and Nurb::pntsv.

Referenced by adduplicateflagNurb(), curve_delete_segments(), and ed_surf_delete_selected().

◆ BKE_nurb_points_add()

void BKE_nurb_points_add ( Nurb * nu,
int number )

Be sure to call BKE_nurb_knot_calc_u / BKE_nurb_knot_calc_v after this.

Definition at line 862 of file curve.cc.

References Nurb::bp, MEM_recallocN, Nurb::pntsu, and BPoint::radius.

◆ BKE_nurb_project_2d()

◆ BKE_nurb_type_convert()

◆ BKE_nurb_valid_message()

bool BKE_nurb_valid_message ( int pnts,
short order,
short flag,
short type,
bool is_surf,
int dir,
char * message_dst,
size_t maxncpy )

◆ BKE_nurbList_duplicate()

void BKE_nurbList_duplicate ( ListBase * lb1,
const ListBase * lb2 )

◆ BKE_nurbList_flag_set()

◆ BKE_nurbList_flag_set_from_flag()

bool BKE_nurbList_flag_set_from_flag ( ListBase * editnurb,
uint8_t from_flag,
uint8_t flag )

Set flag for every point that already has from_flag set.

Definition at line 4374 of file curve.cc.

References CU_BEZIER, BezTriple::f1, BPoint::f1, BezTriple::f2, BezTriple::f3, flag, LISTBASE_FOREACH, and SET_FLAG_FROM_TEST.

Referenced by do_lasso_select_curve(), do_nurbs_box_select(), and nurbscurve_circle_select().

◆ BKE_nurbList_free()

◆ BKE_nurbList_handles_autocalc()

void BKE_nurbList_handles_autocalc ( ListBase * editnurb,
uint8_t flag )

Definition at line 4184 of file curve.cc.

References BKE_nurb_handles_autocalc(), flag, and LISTBASE_FOREACH.

◆ BKE_nurbList_handles_recalculate()

void BKE_nurbList_handles_recalculate ( ListBase * editnurb,
bool calc_length,
uint8_t flag )

◆ BKE_nurbList_handles_set()

void BKE_nurbList_handles_set ( ListBase * editnurb,
eNurbHandleTest_Mode handle_mode,
char code )
Parameters
code
  • 1 (HD_AUTO): set auto-handle.
  • 2 (HD_VECT): set vector-handle.
  • 3 (HD_ALIGN) it toggle, vector-handles become HD_FREE.
  • 5: Set align, like 3 but no toggle.
  • 6: Clear align (setting HD_FREE), like 3 but no toggle.

Definition at line 4191 of file curve.cc.

References BKE_nurb_bezt_handle_test_calc_flag(), CU_BEZIER, ELEM, flag, BezTriple::h1, BezTriple::h2, HD_ALIGN, HD_AUTO, HD_FREE, HD_VECT, LISTBASE_FOREACH, nurb_handles_calc__align_selected(), and SELECT.

Referenced by set_handle_type_exec().

◆ BKE_nurbList_index_get_co()

bool BKE_nurbList_index_get_co ( ListBase * nurb,
int index,
float r_co[3] )

Definition at line 509 of file curve.cc.

References copy_v3_v3(), CU_BEZIER, and LISTBASE_FOREACH.

Referenced by give_parvert().

◆ BKE_nurbList_verts_count()

◆ BKE_nurbList_verts_count_without_handles()

int BKE_nurbList_verts_count_without_handles ( const ListBase * nurb)

Definition at line 551 of file curve.cc.

References LISTBASE_FOREACH.

Referenced by BKE_object_as_kdtree().

Variable Documentation

◆ BKE_curve_batch_cache_dirty_tag_cb

void(* BKE_curve_batch_cache_dirty_tag_cb) (Curve *cu, int mode) ( Curve * cu,
int mode )
extern

Definition at line 5508 of file curve.cc.

Referenced by BKE_curve_batch_cache_dirty_tag(), and DRW_engines_register().

◆ BKE_curve_batch_cache_free_cb

void(* BKE_curve_batch_cache_free_cb) (Curve *cu) ( Curve * cu)
extern

Definition at line 5509 of file curve.cc.

Referenced by BKE_curve_batch_cache_free(), and DRW_engines_register().