36 {0,
nullptr, 0,
nullptr,
nullptr},
42# include <fmt/format.h>
59static Key *rna_ShapeKey_find_key(
ID *
id)
63 return ((
Curve *)
id)->key;
69 return ((
Mesh *)
id)->key;
77static void rna_ShapeKey_name_set(
PointerRNA *
ptr,
const char *value)
80 char oldname[
sizeof(kb->
name)];
90 Key *key = rna_ShapeKey_find_key(
ptr->owner_id);
106 return kb->
pos * 100.0f;
109static void rna_ShapeKey_value_set(
PointerRNA *
ptr,
float value)
113 data->curval = value;
116static void rna_ShapeKey_value_range(
126# define SHAPEKEY_SLIDER_TOL 0.001f
128static void rna_ShapeKey_slider_min_range(
134 *
max =
data->slidermax - SHAPEKEY_SLIDER_TOL;
137static void rna_ShapeKey_slider_min_set(
PointerRNA *
ptr,
float value)
140 float min,
max, softmin, softmax;
142 rna_ShapeKey_slider_min_range(
ptr, &
min, &
max, &softmin, &softmax);
144 data->slidermin = value;
147static void rna_ShapeKey_slider_max_range(
152 *
min =
data->slidermin + SHAPEKEY_SLIDER_TOL;
156static void rna_ShapeKey_slider_max_set(
PointerRNA *
ptr,
float value)
159 float min,
max, softmin, softmax;
161 rna_ShapeKey_slider_max_range(
ptr, &
min, &
max, &softmin, &softmax);
163 data->slidermax = value;
166# undef SHAPEKEY_SLIDER_TOL
176 Key *key = rna_ShapeKey_find_key((
id ==
nullptr &&
ptr !=
nullptr) ?
ptr->owner_id :
id);
177 id = key ? key->
from :
nullptr;
186 return static_cast<Mesh *
>(ob->
data);
197static int rna_KeyBlock_normals_vert_len(
const PointerRNA *
ptr,
200 const Mesh *mesh = rna_KeyBlock_normals_get_mesh(
ptr,
nullptr);
208static void rna_KeyBlock_normals_vert_calc(
ID *
id,
213 Mesh *mesh = rna_KeyBlock_normals_get_mesh(
nullptr,
id);
215 *normals_num = (mesh ? mesh->
verts_num : 0) * 3;
227static int rna_KeyBlock_normals_poly_len(
const PointerRNA *
ptr,
230 const Mesh *mesh = rna_KeyBlock_normals_get_mesh(
ptr,
nullptr);
238static void rna_KeyBlock_normals_poly_calc(
ID *
id,
243 Mesh *mesh = rna_KeyBlock_normals_get_mesh(
nullptr,
id);
245 *normals_num = (mesh ? mesh->
faces_num : 0) * 3;
257static int rna_KeyBlock_normals_loop_len(
const PointerRNA *
ptr,
260 const Mesh *mesh = rna_KeyBlock_normals_get_mesh(
ptr,
nullptr);
268static void rna_KeyBlock_normals_loop_calc(
ID *
id,
273 Mesh *mesh = rna_KeyBlock_normals_get_mesh(
nullptr,
id);
289 Key *key = rna_ShapeKey_find_key(
id);
292 if (key && value < key->totkey) {
302 Key *key = rna_ShapeKey_find_key(
id);
330static void rna_ShapeKeyPoint_co_get(
PointerRNA *
ptr,
float *values)
332 float *vec = (
float *)
ptr->data;
339static void rna_ShapeKeyPoint_co_set(
PointerRNA *
ptr,
const float *values)
341 float *vec = (
float *)
ptr->data;
350 float *vec = (
float *)
ptr->data;
354static void rna_ShapeKeyCurvePoint_tilt_set(
PointerRNA *
ptr,
float value)
356 float *vec = (
float *)
ptr->data;
360static float rna_ShapeKeyCurvePoint_radius_get(
PointerRNA *
ptr)
362 float *vec = (
float *)
ptr->data;
366static void rna_ShapeKeyCurvePoint_radius_set(
PointerRNA *
ptr,
float value)
368 float *vec = (
float *)
ptr->data;
373static void rna_ShapeKeyBezierPoint_co_get(
PointerRNA *
ptr,
float *values)
375 float *vec = (
float *)
ptr->data;
377 values[0] = vec[0 + 3];
378 values[1] = vec[1 + 3];
379 values[2] = vec[2 + 3];
382static void rna_ShapeKeyBezierPoint_co_set(
PointerRNA *
ptr,
const float *values)
384 float *vec = (
float *)
ptr->data;
386 vec[0 + 3] = values[0];
387 vec[1 + 3] = values[1];
388 vec[2 + 3] = values[2];
391static void rna_ShapeKeyBezierPoint_handle_1_co_get(
PointerRNA *
ptr,
float *values)
393 float *vec = (
float *)
ptr->data;
400static void rna_ShapeKeyBezierPoint_handle_1_co_set(
PointerRNA *
ptr,
const float *values)
402 float *vec = (
float *)
ptr->data;
409static void rna_ShapeKeyBezierPoint_handle_2_co_get(
PointerRNA *
ptr,
float *values)
411 float *vec = (
float *)
ptr->data;
413 values[0] = vec[6 + 0];
414 values[1] = vec[6 + 1];
415 values[2] = vec[6 + 2];
418static void rna_ShapeKeyBezierPoint_handle_2_co_set(
PointerRNA *
ptr,
const float *values)
420 float *vec = (
float *)
ptr->data;
422 vec[6 + 0] = values[0];
423 vec[6 + 1] = values[1];
424 vec[6 + 2] = values[2];
427static float rna_ShapeKeyBezierPoint_tilt_get(
PointerRNA *
ptr)
429 float *vec = (
float *)
ptr->data;
433static void rna_ShapeKeyBezierPoint_tilt_set(
PointerRNA *
ptr,
float value)
435 float *vec = (
float *)
ptr->data;
439static float rna_ShapeKeyBezierPoint_radius_get(
PointerRNA *
ptr)
441 float *vec = (
float *)
ptr->data;
445static void rna_ShapeKeyBezierPoint_radius_set(
PointerRNA *
ptr,
float value)
447 float *vec = (
float *)
ptr->data;
455 int nurb_size, nurb_elem_step;
461 int item_index, elem_index;
467 return &RNA_ShapeKeyBezierPoint;
470 return &RNA_ShapeKeyCurvePoint;
474static void rna_ShapeKey_NurbInfo_init(NurbInfo *r_info,
Nurb *nu)
479 r_info->nurb_size = nu->
pntsu;
488static void rna_ShapeKey_NurbInfo_step(NurbInfo *r_info,
493 rna_ShapeKey_NurbInfo_init(r_info, nu);
496 r_info->nurb_index = std::min(r_info->nurb_size, *p_raw_index / r_info->nurb_elem_step);
497 *p_raw_index -= r_info->nurb_size * r_info->nurb_elem_step;
500 r_info->nurb_index = std::min(r_info->nurb_size, *p_raw_index);
501 *p_raw_index -= r_info->nurb_size;
504 r_info->item_index += r_info->nurb_index;
505 r_info->elem_index += r_info->nurb_index * r_info->nurb_elem_step;
508static void rna_ShapeKey_NurbInfo_find_index(
Key *key,
515 memset(r_info, 0,
sizeof(*r_info));
517 for (
Nurb *nu =
static_cast<Nurb *
>(cu->nurb.first); nu && raw_index >= 0; nu = nu->
next) {
518 rna_ShapeKey_NurbInfo_step(r_info, nu, &raw_index, input_elem);
522static int rna_ShapeKey_curve_find_index(
Key *key,
int elem_index)
525 rna_ShapeKey_NurbInfo_find_index(key, elem_index,
true, &info);
526 return info.item_index;
529struct ShapeKeyCurvePoint {
540 int point_count = rna_ShapeKey_curve_find_index(key, kb->
totelem);
542 ShapeKeyCurvePoint *points =
static_cast<ShapeKeyCurvePoint *
>(
545 char *databuf =
static_cast<char *
>(kb->
data);
546 int items_left = point_count;
547 NurbInfo info = {
nullptr};
550 ShapeKeyCurvePoint *nurb_points = points + info.item_index;
551 char *nurb_data = databuf + info.elem_index * key->
elemsize;
553 rna_ShapeKey_NurbInfo_step(&info, nu, &items_left,
false);
555 StructRNA *type = rna_ShapeKey_curve_point_type(nu);
557 for (
int i = 0; i < info.nurb_index; i++) {
558 nurb_points[i].type = type;
559 nurb_points[i].data = nurb_data + i * info.nurb_elem_step * key->
elemsize;
568 Key *key = rna_ShapeKey_find_key(
ptr->owner_id);
579 if (type ==
nullptr) {
580 type = rna_ShapeKey_curve_point_type(nu);
581 rna_ShapeKey_NurbInfo_init(&info, nu);
583 else if (type != rna_ShapeKey_curve_point_type(nu)) {
590 if (type ==
nullptr) {
591 rna_ShapeKey_data_begin_mixed(iter, key, kb, cu);
595 tot /= info.nurb_elem_step;
596 size *= info.nurb_elem_step;
605 Key *key = rna_ShapeKey_find_key(
ptr->owner_id);
610 tot = rna_ShapeKey_curve_find_index(key, tot);
624 ShapeKeyCurvePoint *
point =
static_cast<ShapeKeyCurvePoint *
>(
ptr);
632 type = rna_ShapeKey_curve_point_type(
static_cast<Nurb *
>(cu->
nurb.
first));
640 Key *key = rna_ShapeKey_find_key(
ptr->owner_id);
643 char *databuf =
static_cast<char *
>(kb->
data);
653 rna_ShapeKey_NurbInfo_find_index(key, index,
false, &info);
655 if (info.nu && info.nurb_index < info.nurb_size) {
656 StructRNA *type = rna_ShapeKey_curve_point_type(info.nu);
663 if (index < kb->totelem) {
674 Key *key = rna_ShapeKey_find_key(
ptr->owner_id);
687 Key *key = rna_ShapeKey_find_key(
ptr->owner_id);
701 Key *key = rna_ShapeKey_find_key(
ptr->owner_id);
704 char *databuf =
static_cast<char *
>(kb->
data);
717 if (index < kb->totelem) {
718 r_ptr->owner_id =
ptr->owner_id;
719 r_ptr->type = &RNA_ShapeKeyPoint;
720 r_ptr->data = databuf + elemsize *
index;
728static std::optional<std::string> rna_ShapeKey_path(
const PointerRNA *
ptr)
731 const ID *
id =
ptr->owner_id;
732 char name_esc[
sizeof(kb->
name) * 2];
737 return fmt::format(
"shape_keys.key_blocks[\"{}\"]", name_esc);
739 return fmt::format(
"key_blocks[\"{}\"]", name_esc);
747 for (ob =
static_cast<Object *
>(bmain->objects.first); ob;
764 rna_Key_update_data(bmain, scene,
ptr);
780 float *start = (
float *)kb->
data;
784 if ((start ==
nullptr) || (start >
point)) {
788 else if (start ==
point) {
816 char *start = (
char *)kb->
data;
817 char *pt = (
char *)
point;
822static std::optional<std::string> rna_ShapeKeyPoint_path(
const PointerRNA *
ptr)
824 ID *
id =
ptr->owner_id;
825 Key *key = rna_ShapeKey_find_key(
ptr->owner_id);
830 kb = rna_ShapeKeyData_find_keyblock(key,
point);
833 char name_esc_kb[
sizeof(kb->
name) * 2];
836 index = rna_ShapeKeyPoint_get_index(key, kb,
point);
838 if (
ELEM(
ptr->type, &RNA_ShapeKeyBezierPoint, &RNA_ShapeKeyCurvePoint)) {
839 index = rna_ShapeKey_curve_find_index(key, index);
845 return fmt::format(
"key_blocks[\"{}\"].data[{}]", name_esc_kb, index);
847 return fmt::format(
"shape_keys.key_blocks[\"{}\"].data[{}]", name_esc_kb, index);
880 prop,
"rna_ShapeKeyPoint_co_get",
"rna_ShapeKeyPoint_co_set",
nullptr);
886 prop,
"rna_ShapeKeyCurvePoint_tilt_get",
"rna_ShapeKeyCurvePoint_tilt_set",
nullptr);
894 prop,
"rna_ShapeKeyCurvePoint_radius_get",
"rna_ShapeKeyCurvePoint_radius_set",
nullptr);
907 prop,
"rna_ShapeKeyBezierPoint_co_get",
"rna_ShapeKeyBezierPoint_co_set",
nullptr);
914 "rna_ShapeKeyBezierPoint_handle_1_co_get",
915 "rna_ShapeKeyBezierPoint_handle_1_co_set",
923 "rna_ShapeKeyBezierPoint_handle_2_co_get",
924 "rna_ShapeKeyBezierPoint_handle_2_co_set",
931 prop,
"rna_ShapeKeyBezierPoint_tilt_get",
"rna_ShapeKeyBezierPoint_tilt_set",
nullptr);
939 prop,
"rna_ShapeKeyBezierPoint_radius_get",
"rna_ShapeKeyBezierPoint_radius_set",
nullptr);
977 prop,
nullptr,
"rna_ShapeKey_value_set",
"rna_ShapeKey_value_range");
997 prop,
"rna_ShapeKey_relative_key_get",
"rna_ShapeKey_relative_key_set",
nullptr,
nullptr);
1011 prop,
"Lock Shape",
"Protect the shape key from accidental sculpting and editing");
1019 prop,
nullptr,
"rna_ShapeKey_slider_min_set",
"rna_ShapeKey_slider_min_range");
1028 prop,
nullptr,
"rna_ShapeKey_slider_max_set",
"rna_ShapeKey_slider_max_range");
1038 "rna_ShapeKey_data_begin",
1041 "rna_ShapeKey_data_get",
1042 "rna_ShapeKey_data_length",
1043 "rna_ShapeKey_data_lookup_int",
1053 "Optimized access to shape keys point data, when using "
1054 "foreach_get/foreach_set accessors. "
1055 "Warning: Does not support legacy Curve shape keys.");
1057 "rna_ShapeKey_points_begin",
1058 "rna_iterator_array_next",
1059 "rna_iterator_array_end",
1060 "rna_iterator_array_get",
1061 "rna_ShapeKey_points_length",
1062 "rna_ShapeKey_points_lookup_int",
1069 func =
RNA_def_function(srna,
"normals_vertex_get",
"rna_KeyBlock_normals_vert_calc");
1071 "Compute local space vertices' normals for this shape key");
1079 func =
RNA_def_function(srna,
"normals_polygon_get",
"rna_KeyBlock_normals_poly_calc");
1088 func =
RNA_def_function(srna,
"normals_split_get",
"rna_KeyBlock_normals_loop_calc");
1090 "Compute local space face corners' normals for this shape key");
1106 srna,
"Key",
"Shape keys data-block containing different shapes of geometric data-blocks");
1134 "Make shape keys relative, "
1135 "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)
#define LISTBASE_FOREACH(type, var, list)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define STRNCPY(dst, 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)
ID and Library types, which are fundamental for SDNA.
#define KEYELEM_ELEM_LEN_BPOINT
#define KEYELEM_ELEM_LEN_BEZTRIPLE
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Gabor Generate Gabor noise Gradient Generate interpolated color and intensity values based on the input vector Magic Generate a psychedelic color texture Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a point
#define RNA_MAX_ARRAY_DIMENSION
@ PROPOVERRIDE_OVERRIDABLE_LIBRARY
@ PROPOVERRIDE_NO_COMPARISON
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
SIMD_FORCE_INLINE btScalar length(const btQuaternion &q)
Return the length of a quaternion.
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
static float normals[][3]
void *(* MEM_mallocN)(size_t len, const char *str)
void *(* MEM_malloc_arrayN)(size_t len, size_t size, const char *str)
void rna_iterator_array_begin(CollectionPropertyIterator *iter, void *ptr, int itemsize, int length, bool free_ptr, IteratorSkipFunc skip)
void * rna_iterator_array_get(CollectionPropertyIterator *iter)
PointerRNA rna_pointer_inherit_refine(const PointerRNA *ptr, StructRNA *type, void *data)
PointerRNA RNA_pointer_create(ID *id, StructRNA *type, void *data)
void rna_def_animdata_common(StructRNA *srna)
static const float tilt_limit
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_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t bit)
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::@007202232026116251301165241340012352366154236373 internal
void WM_main_add_notifier(uint type, void *reference)