Blender V4.5
BKE_key.hh File Reference
#include <optional>
#include <string>
#include "BLI_array.hh"
#include "BLI_math_matrix_types.hh"
#include "BLI_math_vector_types.hh"
#include "BLI_span.hh"
#include "DNA_key_types.h"

Go to the source code of this file.

Functions

void BKE_key_free_nolib (Key *key)
KeyBKE_key_add (Main *bmain, ID *id)
void BKE_key_sort (Key *key)
void key_curve_position_weights (float t, float data[4], KeyInterpolationType type)
void key_curve_tangent_weights (float t, float data[4], KeyInterpolationType type)
void key_curve_normal_weights (float t, float data[4], KeyInterpolationType type)
float * BKE_key_evaluate_object_ex (Object *ob, int *r_totelem, float *arr, size_t arr_size, ID *obdata)
float * BKE_key_evaluate_object (Object *ob, int *r_totelem)
int BKE_keyblock_element_count_from_shape (const Key *key, int shape_index)
int BKE_keyblock_element_count (const Key *key)
size_t BKE_keyblock_element_calc_size_from_shape (const Key *key, int shape_index)
size_t BKE_keyblock_element_calc_size (const Key *key)
bool BKE_key_idtype_support (short id_type)
Key ** BKE_key_from_id_p (ID *id)
KeyBKE_key_from_id (ID *id)
Key ** BKE_key_from_object_p (Object *ob)
KeyBKE_key_from_object (Object *ob)
KeyBlockBKE_keyblock_from_object (Object *ob)
KeyBlockBKE_keyblock_from_object_reference (Object *ob)
KeyBlockBKE_keyblock_add (Key *key, const char *name)
KeyBlockBKE_keyblock_duplicate (Key *key, KeyBlock *kb_src)
KeyBlockBKE_keyblock_add_ctime (Key *key, const char *name, bool do_force)
KeyBlockBKE_keyblock_find_by_index (Key *key, int index)
KeyBlockBKE_keyblock_find_name (Key *key, const char name[])
KeyBlockBKE_keyblock_find_uid (Key *key, int uid)
void BKE_keyblock_copy_settings (KeyBlock *kb_dst, const KeyBlock *kb_src)
 copy shape-key attributes, but not key data or name/UID.
std::optional< std::string > BKE_keyblock_curval_rnapath_get (const Key *key, const KeyBlock *kb)
void BKE_keyblock_update_from_lattice (const Lattice *lt, KeyBlock *kb)
void BKE_keyblock_convert_from_lattice (const Lattice *lt, KeyBlock *kb)
void BKE_keyblock_convert_to_lattice (const KeyBlock *kb, Lattice *lt)
int BKE_keyblock_curve_element_count (const ListBase *nurb)
void BKE_keyblock_curve_data_transform (const ListBase *nurb, const float mat[4][4], const void *src, void *dst)
void BKE_keyblock_update_from_curve (const Curve *cu, KeyBlock *kb, const ListBase *nurb)
void BKE_keyblock_convert_from_curve (const Curve *cu, KeyBlock *kb, const ListBase *nurb)
void BKE_keyblock_convert_to_curve (KeyBlock *kb, Curve *cu, ListBase *nurb)
void BKE_keyblock_update_from_mesh (const Mesh *mesh, KeyBlock *kb)
void BKE_keyblock_convert_from_mesh (const Mesh *mesh, const Key *key, KeyBlock *kb)
void BKE_keyblock_convert_to_mesh (const KeyBlock *kb, blender::MutableSpan< blender::float3 > vert_positions)
void BKE_keyblock_mesh_calc_normals (const KeyBlock *kb, Mesh *mesh, float(*r_vert_normals)[3], float(*r_face_normals)[3], float(*r_loop_normals)[3])
bool BKE_keyblock_move (Object *ob, int org_index, int new_index)
bool BKE_keyblock_is_basis (const Key *key, int index)
std::optional< blender::Array< bool > > BKE_keyblock_get_dependent_keys (const Key *key, int index)
Key-Block Data Access
void BKE_keyblock_data_get_from_shape (const Key *key, blender::MutableSpan< blender::float3 > arr, int shape_index)
void BKE_keyblock_data_get (const Key *key, blender::MutableSpan< blender::float3 > arr)
void BKE_keyblock_data_set_with_mat4 (Key *key, int shape_index, blender::Span< blender::float3 > coords, const blender::float4x4 &transform)
void BKE_keyblock_curve_data_set_with_mat4 (Key *key, const ListBase *nurb, int shape_index, const void *data, const blender::float4x4 &transform)
void BKE_keyblock_data_set (Key *key, int shape_index, const void *data)

Function Documentation

◆ BKE_key_add()

◆ BKE_key_evaluate_object()

float * BKE_key_evaluate_object ( Object * ob,
int * r_totelem )

◆ BKE_key_evaluate_object_ex()

◆ BKE_key_free_nolib()

void BKE_key_free_nolib ( Key * key)

Definition at line 248 of file key.cc.

References BKE_key_free_nolib(), BLI_pophead(), Key::block, and MEM_freeN().

Referenced by BKE_key_free_nolib().

◆ BKE_key_from_id()

◆ BKE_key_from_id_p()

◆ BKE_key_from_object()

Key * BKE_key_from_object ( Object * ob)

Definition at line 1824 of file key.cc.

References BKE_key_from_object(), and BKE_key_from_object_p().

Referenced by actedit_get_shapekeys(), action_new_poll(), animdata_filter_dopesheet_ob(), bc_has_animations(), BKE_key_evaluate_object_ex(), BKE_key_from_object(), BKE_keyblock_from_object(), BKE_keyblock_from_object_reference(), BKE_keyblock_move(), BKE_modifiers_get_virtual_modifierlist(), BKE_object_is_deform_modified(), BKE_object_is_modified(), BKE_object_shapekey_remove(), blender::deg::DepsgraphRelationBuilder::build_object_data(), blender::deg::DepsgraphRelationBuilder::build_object_data_geometry(), blender::io::AbstractHierarchyWriter::check_is_animated(), deform_matrices(), deform_matrices_EM(), deform_verts(), deform_verts(), deform_verts_EM(), draw_selected_name(), ED_actedit_animdata_from_context(), blender::bke::get_orco_coords(), object_deforms_in_time(), blender::ed::object::object_is_any_shape_key_locked(), blender::ed::object::object_shape_key_add(), blender::ed::object::object_shape_key_mirror(), blender::ed::object::object_shapekey_remove(), ControllerExporter::operator()(), GeometryExporter::operator()(), blender::ed::sculpt_paint::undo::restore_active_shape_key(), blender::ed::object::shape_key_clear_exec(), blender::ed::object::shape_key_copy_exec(), blender::ed::object::shape_key_lock_exec(), blender::ed::object::shape_key_move_exec(), blender::ed::object::shape_key_move_poll(), blender::ed::object::shape_key_retime_exec(), and blender::ed::transform::special_aftertrans_update__actedit().

◆ BKE_key_from_object_p()

Key ** BKE_key_from_object_p ( Object * ob)

◆ BKE_key_idtype_support()

bool BKE_key_idtype_support ( short id_type)

Definition at line 1767 of file key.cc.

References BKE_key_idtype_support(), ID_CU_LEGACY, ID_LT, and ID_ME.

Referenced by BKE_key_idtype_support(), and BLO_main_validate_shapekeys().

◆ BKE_key_sort()

void BKE_key_sort ( Key * key)

Sort shape keys after a change. This assumes that at most one key was moved, which is a valid assumption for the places it's currently being called.

Definition at line 310 of file key.cc.

References BKE_key_sort(), BLI_insertlinkafter(), BLI_remlink(), Key::block, ListBase::first, LISTBASE_FOREACH, KeyBlock::next, KeyBlock::pos, and Key::refkey.

Referenced by BKE_key_sort(), BKE_keyblock_add_ctime(), and ED_mesh_join_objects_exec().

◆ BKE_keyblock_add()

◆ BKE_keyblock_add_ctime()

KeyBlock * BKE_keyblock_add_ctime ( Key * key,
const char * name,
bool do_force )
Note
sorting is a problematic side effect in some cases, better only do this explicitly by having its own function,
Parameters
keyThe key datablock to add to.
nameOptional name for the new keyblock.
do_forcealways use ctime even for relative keys.

Definition at line 1895 of file key.cc.

References BKE_key_sort(), BKE_keyblock_add(), BKE_keyblock_add_ctime(), Key::block, compare_ff(), Key::ctime, KEY_RELATIVE, LISTBASE_FOREACH, KeyBlock::pos, and Key::type.

Referenced by BKE_keyblock_add_ctime(), insert_curvekey(), insert_lattkey(), insert_meshkey(), and ArmatureImporter::make_shape_keys().

◆ BKE_keyblock_convert_from_curve()

◆ BKE_keyblock_convert_from_lattice()

◆ BKE_keyblock_convert_from_mesh()

◆ BKE_keyblock_convert_to_curve()

◆ BKE_keyblock_convert_to_lattice()

◆ BKE_keyblock_convert_to_mesh()

◆ BKE_keyblock_copy_settings()

void BKE_keyblock_copy_settings ( KeyBlock * kb_dst,
const KeyBlock * kb_src )

◆ BKE_keyblock_curval_rnapath_get()

std::optional< std::string > BKE_keyblock_curval_rnapath_get ( const Key * key,
const KeyBlock * kb )

Get RNA-Path for 'value' setting of the given shape-key.

Note
the user needs to free the returned string once they're finished with it.

Definition at line 1975 of file key.cc.

References BKE_keyblock_curval_rnapath_get(), ELEM, Key::id, RNA_path_from_ID_to_property(), RNA_pointer_create_discrete(), and RNA_struct_find_property().

Referenced by achannel_setting_slider_shapekey_cb(), ANIM_channel_draw_widgets(), BKE_keyblock_curval_rnapath_get(), and make_new_animlistelem().

◆ BKE_keyblock_curve_data_set_with_mat4()

void BKE_keyblock_curve_data_set_with_mat4 ( Key * key,
const ListBase * nurb,
int shape_index,
const void * data,
const blender::float4x4 & transform )

◆ BKE_keyblock_curve_data_transform()

void BKE_keyblock_curve_data_transform ( const ListBase * nurb,
const float mat[4][4],
const void * src,
void * dst )

◆ BKE_keyblock_curve_element_count()

◆ BKE_keyblock_data_get()

void BKE_keyblock_data_get ( const Key * key,
blender::MutableSpan< blender::float3 > arr )

◆ BKE_keyblock_data_get_from_shape()

void BKE_keyblock_data_get_from_shape ( const Key * key,
blender::MutableSpan< blender::float3 > arr,
int shape_index )

◆ BKE_keyblock_data_set()

void BKE_keyblock_data_set ( Key * key,
int shape_index,
const void * data )

Set the data for all key-blocks (or shape_index if != -1).

Definition at line 1752 of file key.cc.

References BKE_keyblock_data_set(), Key::block, data, ELEM, Key::elemsize, ListBase::first, and KeyBlock::next.

Referenced by BKE_keyblock_data_set(), BKE_keyblock_data_set_with_mat4(), and blender::ed::object::data_xform_restore().

◆ BKE_keyblock_data_set_with_mat4()

void BKE_keyblock_data_set_with_mat4 ( Key * key,
int shape_index,
blender::Span< blender::float3 > coords,
const blender::float4x4 & transform )

◆ BKE_keyblock_duplicate()

KeyBlock * BKE_keyblock_duplicate ( Key * key,
KeyBlock * kb_src )

◆ BKE_keyblock_element_calc_size()

size_t BKE_keyblock_element_calc_size ( const Key * key)

◆ BKE_keyblock_element_calc_size_from_shape()

size_t BKE_keyblock_element_calc_size_from_shape ( const Key * key,
int shape_index )

◆ BKE_keyblock_element_count()

int BKE_keyblock_element_count ( const Key * key)

◆ BKE_keyblock_element_count_from_shape()

int BKE_keyblock_element_count_from_shape ( const Key * key,
int shape_index )
Parameters
shape_indexThe index to use or all (when -1).

Definition at line 1649 of file key.cc.

References BKE_keyblock_element_count_from_shape(), Key::block, ELEM, ListBase::first, KeyBlock::next, and result.

Referenced by BKE_keyblock_element_calc_size_from_shape(), BKE_keyblock_element_count(), and BKE_keyblock_element_count_from_shape().

◆ BKE_keyblock_find_by_index()

◆ BKE_keyblock_find_name()

◆ BKE_keyblock_find_uid()

KeyBlock * BKE_keyblock_find_uid ( Key * key,
int uid )

Definition at line 1954 of file key.cc.

References BKE_keyblock_find_uid(), Key::block, and LISTBASE_FOREACH.

Referenced by BKE_keyblock_find_uid(), and keyblock_ensure_from_uid().

◆ BKE_keyblock_from_object()

◆ BKE_keyblock_from_object_reference()

KeyBlock * BKE_keyblock_from_object_reference ( Object * ob)

◆ BKE_keyblock_get_dependent_keys()

std::optional< blender::Array< bool > > BKE_keyblock_get_dependent_keys ( const Key * key,
int index )

Returns a newly allocated array containing true for every key that has this one as basis. If none are found, returns null.

Definition at line 2404 of file key.cc.

References BKE_keyblock_get_dependent_keys(), BLI_listbase_count(), Key::block, i, KEY_RELATIVE, LISTBASE_FOREACH_INDEX, KeyBlock::relative, and Key::type.

Referenced by BKE_keyblock_get_dependent_keys(), bm_to_mesh_shape(), calc_shapeKeys(), and blender::ed::sculpt_paint::ShapeKeyData::from_object().

◆ BKE_keyblock_is_basis()

bool BKE_keyblock_is_basis ( const Key * key,
int index )

Check if given key-block (as index) is used as basis by others in given key.

Definition at line 2388 of file key.cc.

References BKE_keyblock_is_basis(), Key::block, ListBase::first, i, KEY_RELATIVE, KeyBlock::next, KeyBlock::relative, and Key::type.

Referenced by BKE_keyblock_is_basis().

◆ BKE_keyblock_mesh_calc_normals()

void BKE_keyblock_mesh_calc_normals ( const KeyBlock * kb,
Mesh * mesh,
float(*) r_vert_normals[3],
float(*) r_face_normals[3],
float(*) r_loop_normals[3] )

Computes normals (vertices, faces and/or loops ones) of given mesh for given shape key.

Parameters
kbthe KeyBlock to use to compute normals.
meshthe Mesh to apply key-block to.
r_vert_normalsif non-NULL, an array of vectors, same length as number of vertices.
r_face_normalsif non-NULL, an array of vectors, same length as number of faces.
r_loop_normalsif non-NULL, an array of vectors, same length as number of loops.

Definition at line 2226 of file key.cc.

References BKE_keyblock_convert_to_mesh(), BKE_keyblock_mesh_calc_normals(), blender::bke::Corner, blender::bke::Edge, blender::bke::Face, blender::bke::AttributeAccessor::lookup(), MEM_freeN(), MEM_malloc_arrayN(), blender::bke::mesh::normals_calc_corners(), blender::bke::mesh::normals_calc_faces(), blender::bke::mesh::normals_calc_verts(), and blender::offset_indices::OffsetIndices< T >::size().

Referenced by BKE_keyblock_mesh_calc_normals().

◆ BKE_keyblock_move()

bool BKE_keyblock_move ( Object * ob,
int org_index,
int new_index )

Move shape key from org_index to new_index. Safe, clamps index to valid range, updates reference keys, the object's active shape index, the 'frame' value in case of absolute keys, etc. Note indices are expected in real values (not fake shapenr +1 ones).

Parameters
org_indexif < 0, current object's active shape will be used as shape-key to move.
Returns
true if something was done, else false.

Definition at line 2307 of file key.cc.

References BKE_key_from_object(), BKE_keyblock_move(), BLI_listbase_swaplinks(), Key::block, CLAMP, ListBase::first, i, ListBase::last, KeyBlock::next, KeyBlock::pos, KeyBlock::prev, Key::refkey, KeyBlock::relative, Object::shapenr, and Key::totkey.

Referenced by BKE_keyblock_move(), and blender::ed::object::shape_key_move_exec().

◆ BKE_keyblock_update_from_curve()

◆ BKE_keyblock_update_from_lattice()

◆ BKE_keyblock_update_from_mesh()

◆ key_curve_normal_weights()

void key_curve_normal_weights ( float t,
float data[4],
KeyInterpolationType type )

Second derivative.

Definition at line 424 of file key.cc.

References data, KEY_BSPLINE, KEY_CARDINAL, KEY_CATMULL_ROM, key_curve_normal_weights(), and KEY_LINEAR.

Referenced by key_curve_normal_weights().

◆ key_curve_position_weights()

◆ key_curve_tangent_weights()

void key_curve_tangent_weights ( float t,
float data[4],
KeyInterpolationType type )

First derivative.

Definition at line 384 of file key.cc.

References data, KEY_BSPLINE, KEY_CARDINAL, KEY_CATMULL_ROM, key_curve_tangent_weights(), and KEY_LINEAR.

Referenced by BKE_where_on_path(), and key_curve_tangent_weights().