26 {0,
nullptr, 0,
nullptr,
nullptr},
33# include <fmt/format.h>
56static Key *rna_ShapeKey_find_key(
ID *
id)
60 return ((
Curve *)
id)->key;
66 return ((
Mesh *)
id)->key;
74static void rna_ShapeKey_name_set(
PointerRNA *
ptr,
const char *value)
77 char oldname[
sizeof(kb->
name)];
87 Key *key = rna_ShapeKey_find_key(
ptr->owner_id);
103 return kb->
pos * 100.0f;
106static void rna_ShapeKey_value_set(
PointerRNA *
ptr,
float value)
110 data->curval = value;
113static void rna_ShapeKey_value_range(
123# define SHAPEKEY_SLIDER_TOL 0.001f
125static void rna_ShapeKey_slider_min_range(
131 *
max =
data->slidermax - SHAPEKEY_SLIDER_TOL;
134static void rna_ShapeKey_slider_min_set(
PointerRNA *
ptr,
float value)
137 float min,
max, softmin, softmax;
139 rna_ShapeKey_slider_min_range(
ptr, &
min, &
max, &softmin, &softmax);
141 data->slidermin = value;
144static void rna_ShapeKey_slider_max_range(
149 *
min =
data->slidermin + SHAPEKEY_SLIDER_TOL;
153static void rna_ShapeKey_slider_max_set(
PointerRNA *
ptr,
float value)
156 float min,
max, softmin, softmax;
158 rna_ShapeKey_slider_max_range(
ptr, &
min, &
max, &softmin, &softmax);
160 data->slidermax = value;
163# undef SHAPEKEY_SLIDER_TOL
173 Key *key = rna_ShapeKey_find_key((
id ==
nullptr &&
ptr !=
nullptr) ?
ptr->owner_id :
id);
174 id = key ? key->
from :
nullptr;
183 return static_cast<Mesh *
>(ob->
data);
194static int rna_KeyBlock_normals_vert_len(
const PointerRNA *
ptr,
197 const Mesh *mesh = rna_KeyBlock_normals_get_mesh(
ptr,
nullptr);
205static void rna_KeyBlock_normals_vert_calc(
ID *
id,
210 Mesh *mesh = rna_KeyBlock_normals_get_mesh(
nullptr,
id);
212 *normals_num = (mesh ? mesh->
verts_num : 0) * 3;
224static int rna_KeyBlock_normals_poly_len(
const PointerRNA *
ptr,
227 const Mesh *mesh = rna_KeyBlock_normals_get_mesh(
ptr,
nullptr);
235static void rna_KeyBlock_normals_poly_calc(
ID *
id,
240 Mesh *mesh = rna_KeyBlock_normals_get_mesh(
nullptr,
id);
242 *normals_num = (mesh ? mesh->
faces_num : 0) * 3;
254static int rna_KeyBlock_normals_loop_len(
const PointerRNA *
ptr,
257 const Mesh *mesh = rna_KeyBlock_normals_get_mesh(
ptr,
nullptr);
265static void rna_KeyBlock_normals_loop_calc(
ID *
id,
270 Mesh *mesh = rna_KeyBlock_normals_get_mesh(
nullptr,
id);
286 Key *key = rna_ShapeKey_find_key(
id);
289 if (key && value < key->totkey) {
299 Key *key = rna_ShapeKey_find_key(
id);
327static void rna_ShapeKeyPoint_co_get(
PointerRNA *
ptr,
float *values)
329 float *vec = (
float *)
ptr->data;
336static void rna_ShapeKeyPoint_co_set(
PointerRNA *
ptr,
const float *values)
338 float *vec = (
float *)
ptr->data;
347 float *vec = (
float *)
ptr->data;
351static void rna_ShapeKeyCurvePoint_tilt_set(
PointerRNA *
ptr,
float value)
353 float *vec = (
float *)
ptr->data;
357static float rna_ShapeKeyCurvePoint_radius_get(
PointerRNA *
ptr)
359 float *vec = (
float *)
ptr->data;
363static void rna_ShapeKeyCurvePoint_radius_set(
PointerRNA *
ptr,
float value)
365 float *vec = (
float *)
ptr->data;
370static void rna_ShapeKeyBezierPoint_co_get(
PointerRNA *
ptr,
float *values)
372 float *vec = (
float *)
ptr->data;
374 values[0] = vec[0 + 3];
375 values[1] = vec[1 + 3];
376 values[2] = vec[2 + 3];
379static void rna_ShapeKeyBezierPoint_co_set(
PointerRNA *
ptr,
const float *values)
381 float *vec = (
float *)
ptr->data;
383 vec[0 + 3] = values[0];
384 vec[1 + 3] = values[1];
385 vec[2 + 3] = values[2];
388static void rna_ShapeKeyBezierPoint_handle_1_co_get(
PointerRNA *
ptr,
float *values)
390 float *vec = (
float *)
ptr->data;
397static void rna_ShapeKeyBezierPoint_handle_1_co_set(
PointerRNA *
ptr,
const float *values)
399 float *vec = (
float *)
ptr->data;
406static void rna_ShapeKeyBezierPoint_handle_2_co_get(
PointerRNA *
ptr,
float *values)
408 float *vec = (
float *)
ptr->data;
410 values[0] = vec[6 + 0];
411 values[1] = vec[6 + 1];
412 values[2] = vec[6 + 2];
415static void rna_ShapeKeyBezierPoint_handle_2_co_set(
PointerRNA *
ptr,
const float *values)
417 float *vec = (
float *)
ptr->data;
419 vec[6 + 0] = values[0];
420 vec[6 + 1] = values[1];
421 vec[6 + 2] = values[2];
424static float rna_ShapeKeyBezierPoint_tilt_get(
PointerRNA *
ptr)
426 float *vec = (
float *)
ptr->data;
430static void rna_ShapeKeyBezierPoint_tilt_set(
PointerRNA *
ptr,
float value)
432 float *vec = (
float *)
ptr->data;
436static float rna_ShapeKeyBezierPoint_radius_get(
PointerRNA *
ptr)
438 float *vec = (
float *)
ptr->data;
442static void rna_ShapeKeyBezierPoint_radius_set(
PointerRNA *
ptr,
float value)
444 float *vec = (
float *)
ptr->data;
452 int nurb_size, nurb_elem_step;
458 int item_index, elem_index;
464 return &RNA_ShapeKeyBezierPoint;
466 return &RNA_ShapeKeyCurvePoint;
469static void rna_ShapeKey_NurbInfo_init(NurbInfo *r_info,
Nurb *nu)
474 r_info->nurb_size = nu->
pntsu;
483static void rna_ShapeKey_NurbInfo_step(NurbInfo *r_info,
488 rna_ShapeKey_NurbInfo_init(r_info, nu);
491 r_info->nurb_index = std::min(r_info->nurb_size, *p_raw_index / r_info->nurb_elem_step);
492 *p_raw_index -= r_info->nurb_size * r_info->nurb_elem_step;
495 r_info->nurb_index = std::min(r_info->nurb_size, *p_raw_index);
496 *p_raw_index -= r_info->nurb_size;
499 r_info->item_index += r_info->nurb_index;
500 r_info->elem_index += r_info->nurb_index * r_info->nurb_elem_step;
503static void rna_ShapeKey_NurbInfo_find_index(
Key *key,
510 memset(r_info, 0,
sizeof(*r_info));
512 for (
Nurb *nu =
static_cast<Nurb *
>(cu->nurb.first); nu && raw_index >= 0; nu = nu->
next) {
513 rna_ShapeKey_NurbInfo_step(r_info, nu, &raw_index, input_elem);
517static int rna_ShapeKey_curve_find_index(
Key *key,
int elem_index)
520 rna_ShapeKey_NurbInfo_find_index(key, elem_index,
true, &info);
521 return info.item_index;
524struct ShapeKeyCurvePoint {
530static void rna_ShapeKey_data_begin_mixed(
533 int point_count = rna_ShapeKey_curve_find_index(key, kb->
totelem);
538 char *databuf =
static_cast<char *
>(kb->
data);
539 int items_left = point_count;
540 NurbInfo info = {
nullptr};
543 ShapeKeyCurvePoint *nurb_points = points + info.item_index;
544 char *nurb_data = databuf + info.elem_index * key->
elemsize;
546 rna_ShapeKey_NurbInfo_step(&info, nu, &items_left,
false);
548 StructRNA *type = rna_ShapeKey_curve_point_type(nu);
550 for (
int i = 0;
i < info.nurb_index;
i++) {
551 nurb_points[
i].type = type;
552 nurb_points[
i].data = nurb_data +
i * info.nurb_elem_step * key->
elemsize;
561 Key *key = rna_ShapeKey_find_key(
ptr->owner_id);
568 NurbInfo info = {
nullptr};
572 if (type ==
nullptr) {
573 type = rna_ShapeKey_curve_point_type(nu);
574 rna_ShapeKey_NurbInfo_init(&info, nu);
576 else if (type != rna_ShapeKey_curve_point_type(nu)) {
583 if (type ==
nullptr) {
584 rna_ShapeKey_data_begin_mixed(iter,
ptr, key, kb, cu);
587 tot /= info.nurb_elem_step;
588 size *= info.nurb_elem_step;
596 Key *key = rna_ShapeKey_find_key(
ptr->owner_id);
601 tot = rna_ShapeKey_curve_find_index(key, tot);
615 ShapeKeyCurvePoint *point =
static_cast<ShapeKeyCurvePoint *
>(
ptr);
623 type = rna_ShapeKey_curve_point_type(
static_cast<Nurb *
>(cu->
nurb.
first));
631 Key *key = rna_ShapeKey_find_key(
ptr->owner_id);
634 char *databuf =
static_cast<char *
>(kb->
data);
644 rna_ShapeKey_NurbInfo_find_index(key, index,
false, &info);
646 if (info.nu && info.nurb_index < info.nurb_size) {
647 StructRNA *type = rna_ShapeKey_curve_point_type(info.nu);
654 if (index < kb->totelem) {
656 *
ptr, &RNA_ShapeKeyPoint, databuf + elemsize * index, *r_ptr);
666 Key *key = rna_ShapeKey_find_key(
ptr->owner_id);
679 Key *key = rna_ShapeKey_find_key(
ptr->owner_id);
693 Key *key = rna_ShapeKey_find_key(
ptr->owner_id);
696 char *databuf =
static_cast<char *
>(kb->
data);
709 if (index < kb->totelem) {
711 *
ptr, &RNA_ShapeKeyPoint, databuf + elemsize * index, *r_ptr);
719static std::optional<std::string> rna_ShapeKey_path(
const PointerRNA *
ptr)
722 const ID *
id =
ptr->owner_id;
723 char name_esc[
sizeof(kb->
name) * 2];
728 return fmt::format(
"shape_keys.key_blocks[\"{}\"]", name_esc);
730 return fmt::format(
"key_blocks[\"{}\"]", name_esc);
738 for (ob =
static_cast<Object *
>(bmain->objects.first); ob;
755 rna_Key_update_data(bmain, scene,
ptr);
758static KeyBlock *rna_ShapeKeyData_find_keyblock(
Key *key,
const float *point)
763 if (
ELEM(
nullptr, key, point)) {
771 float *start = (
float *)kb->
data;
775 if ((start ==
nullptr) || (start > point)) {
779 if (start == point) {
801static int rna_ShapeKeyPoint_get_index(
Key *key,
KeyBlock *kb,
float *point)
807 char *start = (
char *)kb->
data;
808 char *pt = (
char *)point;
810 return int(pt - start) / key->
elemsize;
813static std::optional<std::string> rna_ShapeKeyPoint_path(
const PointerRNA *
ptr)
815 ID *
id =
ptr->owner_id;
816 Key *key = rna_ShapeKey_find_key(
ptr->owner_id);
818 float *point = (
float *)
ptr->data;
821 kb = rna_ShapeKeyData_find_keyblock(key, point);
824 char name_esc_kb[
sizeof(kb->
name) * 2];
827 index = rna_ShapeKeyPoint_get_index(key, kb, point);
829 if (
ELEM(
ptr->type, &RNA_ShapeKeyBezierPoint, &RNA_ShapeKeyCurvePoint)) {
830 index = rna_ShapeKey_curve_find_index(key, index);
836 return fmt::format(
"key_blocks[\"{}\"].data[{}]", name_esc_kb, index);
838 return fmt::format(
"shape_keys.key_blocks[\"{}\"].data[{}]", name_esc_kb, index);
871 prop,
"rna_ShapeKeyPoint_co_get",
"rna_ShapeKeyPoint_co_set",
nullptr);
877 prop,
"rna_ShapeKeyCurvePoint_tilt_get",
"rna_ShapeKeyCurvePoint_tilt_set",
nullptr);
885 prop,
"rna_ShapeKeyCurvePoint_radius_get",
"rna_ShapeKeyCurvePoint_radius_set",
nullptr);
898 prop,
"rna_ShapeKeyBezierPoint_co_get",
"rna_ShapeKeyBezierPoint_co_set",
nullptr);
905 "rna_ShapeKeyBezierPoint_handle_1_co_get",
906 "rna_ShapeKeyBezierPoint_handle_1_co_set",
914 "rna_ShapeKeyBezierPoint_handle_2_co_get",
915 "rna_ShapeKeyBezierPoint_handle_2_co_set",
922 prop,
"rna_ShapeKeyBezierPoint_tilt_get",
"rna_ShapeKeyBezierPoint_tilt_set",
nullptr);
930 prop,
"rna_ShapeKeyBezierPoint_radius_get",
"rna_ShapeKeyBezierPoint_radius_set",
nullptr);
968 prop,
nullptr,
"rna_ShapeKey_value_set",
"rna_ShapeKey_value_range");
988 prop,
"rna_ShapeKey_relative_key_get",
"rna_ShapeKey_relative_key_set",
nullptr,
nullptr);
1002 prop,
"Lock Shape",
"Protect the shape key from accidental sculpting and editing");
1010 prop,
nullptr,
"rna_ShapeKey_slider_min_set",
"rna_ShapeKey_slider_min_range");
1019 prop,
nullptr,
"rna_ShapeKey_slider_max_set",
"rna_ShapeKey_slider_max_range");
1029 "rna_ShapeKey_data_begin",
1032 "rna_ShapeKey_data_get",
1033 "rna_ShapeKey_data_length",
1034 "rna_ShapeKey_data_lookup_int",
1044 "Optimized access to shape keys point data, when using "
1045 "foreach_get/foreach_set accessors. "
1046 "Warning: Does not support legacy Curve shape keys.");
1048 "rna_ShapeKey_points_begin",
1049 "rna_iterator_array_next",
1050 "rna_iterator_array_end",
1051 "rna_iterator_array_get",
1052 "rna_ShapeKey_points_length",
1053 "rna_ShapeKey_points_lookup_int",
1060 func =
RNA_def_function(srna,
"normals_vertex_get",
"rna_KeyBlock_normals_vert_calc");
1062 "Compute local space vertices' normals for this shape key");
1070 func =
RNA_def_function(srna,
"normals_polygon_get",
"rna_KeyBlock_normals_poly_calc");
1079 func =
RNA_def_function(srna,
"normals_split_get",
"rna_KeyBlock_normals_loop_calc");
1081 "Compute local space face corners' normals for this shape key");
1097 srna,
"Key",
"Shape keys data-block containing different shapes of geometric data-blocks");
1125 "Make shape keys relative, "
1126 "otherwise play through shapes as a sequence using the evaluation time");
void BKE_animdata_fix_paths_rename_all(struct ID *ref_id, const char *prefix, const char *oldName, const char *newName)
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])
Key * BKE_key_from_object(Object *ob)
int BLI_findindex(const ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void * BLI_findlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
char * STRNCPY(char(&dst)[N], const char *src)
size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
#define STRNCPY_UTF8(dst, src)
void BLI_uniquename(const struct ListBase *list, void *vlink, const char *defname, char delim, int name_offset, size_t name_maxncpy) ATTR_NONNULL(1
#define IN_RANGE_INCL(a, b, c)
#define BLT_I18NCONTEXT_ID_SHAPEKEY
#define CTX_DATA_(context, msgid)
void DEG_id_tag_update(ID *id, unsigned int flags)
#define KEYELEM_ELEM_LEN_BPOINT
#define KEYELEM_ELEM_LEN_BEZTRIPLE
Object is a sort of wrapper for general info.
#define RNA_MAX_ARRAY_DIMENSION
@ PROPOVERRIDE_OVERRIDABLE_LIBRARY
@ PROPOVERRIDE_NO_COMPARISON
BMesh const char void * data
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
static float normals[][3]
float length(VecOp< float, D >) RET
void * MEM_malloc_arrayN(size_t len, size_t size, const char *str)
void rna_iterator_array_begin(CollectionPropertyIterator *iter, PointerRNA *ptr, void *data, int itemsize, int length, bool free_ptr, IteratorSkipFunc skip)
void * rna_iterator_array_get(CollectionPropertyIterator *iter)
void rna_pointer_create_with_ancestors(const PointerRNA &parent, StructRNA *type, void *data, PointerRNA &r_ptr)
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
PointerRNA RNA_pointer_create_with_parent(const PointerRNA &parent, StructRNA *type, void *data)
void rna_def_animdata_common(StructRNA *srna)
static const float tilt_limit
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
void RNA_def_struct_name_property(StructRNA *srna, PropertyRNA *prop)
void RNA_def_property_pointer_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_struct_path_func(StructRNA *srna, const char *path)
void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set)
void RNA_def_property_float_default(PropertyRNA *prop, float value)
void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
void RNA_def_property_string_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_ui_icon(PropertyRNA *prop, int icon, int consecutive)
void RNA_def_property_collection_funcs(PropertyRNA *prop, const char *begin, const char *next, const char *end, const char *get, const char *length, const char *lookupint, const char *lookupstring, const char *assignint)
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
void RNA_def_property_dynamic_array_funcs(PropertyRNA *prop, const char *getlength)
void RNA_def_property_multi_array(PropertyRNA *prop, int dimension, const int length[])
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
FunctionRNA * RNA_def_function(StructRNA *srna, const char *identifier, const char *call)
void RNA_def_property_array(PropertyRNA *prop, int length)
void RNA_def_property_range(PropertyRNA *prop, double min, double max)
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname, const char *propname, const char *lengthpropname)
void RNA_def_function_ui_description(FunctionRNA *func, const char *description)
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
void RNA_def_function_flag(FunctionRNA *func, int flag)
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *type_fn, const char *poll)
void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_struct_ui_icon(StructRNA *srna, int icon)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double step, int precision)
void RNA_def_property_override_flag(PropertyRNA *prop, PropertyOverrideFlag flag)
void RNA_def_parameter_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
int rna_object_shapekey_index_set(ID *id, PointerRNA value, int current)
PointerRNA rna_object_shapekey_index_get(ID *id, int value)
static void rna_def_keyblock(BlenderRNA *brna)
static void rna_def_keydata(BlenderRNA *brna)
static void rna_def_key(BlenderRNA *brna)
const EnumPropertyItem rna_enum_keyblock_type_items[]
void RNA_def_key(BlenderRNA *brna)
union CollectionPropertyIterator::@251313231040372062304153161337117373343066046335 internal
void WM_main_add_notifier(uint type, void *reference)