61 static Key *rna_ShapeKey_find_key(
ID *
id)
65 return ((
Curve *)
id)->key;
71 return ((
Mesh *)
id)->key;
79 static void rna_ShapeKey_name_set(
PointerRNA *
ptr,
const char *value)
82 char oldname[
sizeof(kb->
name)];
108 return kb->
pos * 100.0f;
111 static void rna_ShapeKey_value_set(
PointerRNA *
ptr,
float value)
115 data->curval = value;
118 static void rna_ShapeKey_value_range(
128 # define SHAPEKEY_SLIDER_TOL 0.001f
130 static void rna_ShapeKey_slider_min_range(
136 *
max =
data->slidermax - SHAPEKEY_SLIDER_TOL;
139 static void rna_ShapeKey_slider_min_set(
PointerRNA *
ptr,
float value)
142 float min,
max, softmin, softmax;
144 rna_ShapeKey_slider_min_range(
ptr, &
min, &
max, &softmin, &softmax);
146 data->slidermin = value;
149 static void rna_ShapeKey_slider_max_range(
154 *
min =
data->slidermin + SHAPEKEY_SLIDER_TOL;
158 static void rna_ShapeKey_slider_max_set(
PointerRNA *
ptr,
float value)
161 float min,
max, softmin, softmax;
163 rna_ShapeKey_slider_max_range(
ptr, &
min, &
max, &softmin, &softmax);
165 data->slidermax = value;
168 # undef SHAPEKEY_SLIDER_TOL
201 Mesh *me = rna_KeyBlock_normals_get_mesh(
ptr,
NULL);
209 static void rna_KeyBlock_normals_vert_calc(
ID *
id,
214 Mesh *me = rna_KeyBlock_normals_get_mesh(
NULL,
id);
216 *normals_len = (me ? me->
totvert : 0) * 3;
230 Mesh *me = rna_KeyBlock_normals_get_mesh(
ptr,
NULL);
238 static void rna_KeyBlock_normals_poly_calc(
ID *
id,
243 Mesh *me = rna_KeyBlock_normals_get_mesh(
NULL,
id);
245 *normals_len = (me ? me->
totpoly : 0) * 3;
259 Mesh *me = rna_KeyBlock_normals_get_mesh(
ptr,
NULL);
267 static void rna_KeyBlock_normals_loop_calc(
ID *
id,
272 Mesh *me = rna_KeyBlock_normals_get_mesh(
NULL,
id);
274 *normals_len = (me ? me->
totloop : 0) * 3;
288 Key *key = rna_ShapeKey_find_key(
id);
292 if (key && value < key->totkey) {
303 Key *key = rna_ShapeKey_find_key(
id);
331 static void rna_ShapeKeyPoint_co_get(
PointerRNA *
ptr,
float *values)
333 float *vec = (
float *)
ptr->
data;
340 static void rna_ShapeKeyPoint_co_set(
PointerRNA *
ptr,
const float *values)
342 float *vec = (
float *)
ptr->
data;
349 static float rna_ShapeKeyCurvePoint_tilt_get(
PointerRNA *
ptr)
351 float *vec = (
float *)
ptr->
data;
355 static void rna_ShapeKeyCurvePoint_tilt_set(
PointerRNA *
ptr,
float value)
357 float *vec = (
float *)
ptr->
data;
361 static float rna_ShapeKeyCurvePoint_radius_get(
PointerRNA *
ptr)
363 float *vec = (
float *)
ptr->
data;
367 static void rna_ShapeKeyCurvePoint_radius_set(
PointerRNA *
ptr,
float value)
369 float *vec = (
float *)
ptr->
data;
374 static void rna_ShapeKeyBezierPoint_co_get(
PointerRNA *
ptr,
float *values)
376 float *vec = (
float *)
ptr->
data;
378 values[0] = vec[0 + 3];
379 values[1] = vec[1 + 3];
380 values[2] = vec[2 + 3];
383 static void rna_ShapeKeyBezierPoint_co_set(
PointerRNA *
ptr,
const float *values)
385 float *vec = (
float *)
ptr->
data;
387 vec[0 + 3] = values[0];
388 vec[1 + 3] = values[1];
389 vec[2 + 3] = values[2];
392 static void rna_ShapeKeyBezierPoint_handle_1_co_get(
PointerRNA *
ptr,
float *values)
394 float *vec = (
float *)
ptr->
data;
401 static void rna_ShapeKeyBezierPoint_handle_1_co_set(
PointerRNA *
ptr,
const float *values)
403 float *vec = (
float *)
ptr->
data;
410 static void rna_ShapeKeyBezierPoint_handle_2_co_get(
PointerRNA *
ptr,
float *values)
412 float *vec = (
float *)
ptr->
data;
414 values[0] = vec[6 + 0];
415 values[1] = vec[6 + 1];
416 values[2] = vec[6 + 2];
419 static void rna_ShapeKeyBezierPoint_handle_2_co_set(
PointerRNA *
ptr,
const float *values)
421 float *vec = (
float *)
ptr->
data;
423 vec[6 + 0] = values[0];
424 vec[6 + 1] = values[1];
425 vec[6 + 2] = values[2];
428 static float rna_ShapeKeyBezierPoint_tilt_get(
PointerRNA *
ptr)
430 float *vec = (
float *)
ptr->
data;
434 static void rna_ShapeKeyBezierPoint_tilt_set(
PointerRNA *
ptr,
float value)
436 float *vec = (
float *)
ptr->
data;
440 static float rna_ShapeKeyBezierPoint_radius_get(
PointerRNA *
ptr)
442 float *vec = (
float *)
ptr->
data;
446 static void rna_ShapeKeyBezierPoint_radius_set(
PointerRNA *
ptr,
float value)
448 float *vec = (
float *)
ptr->
data;
454 typedef struct NurbInfo {
456 int nurb_size, nurb_elem_step;
462 int item_index, elem_index;
475 static void rna_ShapeKey_NurbInfo_init(NurbInfo *r_info,
Nurb *nu)
480 r_info->nurb_size = nu->
pntsu;
489 static void rna_ShapeKey_NurbInfo_step(NurbInfo *r_info,
494 rna_ShapeKey_NurbInfo_init(r_info, nu);
497 r_info->nurb_index =
MIN2(r_info->nurb_size, *p_raw_index / r_info->nurb_elem_step);
498 *p_raw_index -= r_info->nurb_size * r_info->nurb_elem_step;
501 r_info->nurb_index =
MIN2(r_info->nurb_size, *p_raw_index);
502 *p_raw_index -= r_info->nurb_size;
505 r_info->item_index += r_info->nurb_index;
506 r_info->elem_index += r_info->nurb_index * r_info->nurb_elem_step;
509 static void rna_ShapeKey_NurbInfo_find_index(
Key *key,
516 memset(r_info, 0,
sizeof(*r_info));
519 rna_ShapeKey_NurbInfo_step(r_info, nu, &raw_index, input_elem);
523 static int rna_ShapeKey_curve_find_index(
Key *key,
int elem_index)
526 rna_ShapeKey_NurbInfo_find_index(key, elem_index,
true, &info);
527 return info.item_index;
530 typedef struct ShapeKeyCurvePoint {
533 } ShapeKeyCurvePoint;
541 int point_count = rna_ShapeKey_curve_find_index(key, kb->
totelem);
544 sizeof(ShapeKeyCurvePoint), point_count, __func__);
546 char *databuf = kb->
data;
547 int items_left = point_count;
548 NurbInfo info = {
NULL};
551 ShapeKeyCurvePoint *nurb_points = points + info.item_index;
552 char *nurb_data = databuf + info.elem_index * key->
elemsize;
554 rna_ShapeKey_NurbInfo_step(&info, nu, &items_left,
false);
558 for (
int i = 0; i < info.nurb_index; i++) {
559 nurb_points[i].type =
type;
560 nurb_points[i].data = nurb_data + i * info.nurb_elem_step * key->
elemsize;
581 type = rna_ShapeKey_curve_point_type(nu);
582 rna_ShapeKey_NurbInfo_init(&info, nu);
584 else if (
type != rna_ShapeKey_curve_point_type(nu)) {
592 rna_ShapeKey_data_begin_mixed(iter, key, kb, cu);
596 tot /= info.nurb_elem_step;
597 size *= info.nurb_elem_step;
611 tot = rna_ShapeKey_curve_find_index(key, tot);
625 ShapeKeyCurvePoint *point =
ptr;
644 char *databuf = kb->
data;
646 memset(r_ptr, 0,
sizeof(*r_ptr));
654 rna_ShapeKey_NurbInfo_find_index(key, index,
false, &info);
656 if (info.nu && info.nurb_index < info.nurb_size) {
664 if (index < kb->totelem) {
677 char name_esc[
sizeof(kb->
name) * 2];
682 return BLI_sprintfN(
"shape_keys.key_blocks[\"%s\"]", name_esc);
709 rna_Key_update_data(bmain,
scene,
ptr);
712 static KeyBlock *rna_ShapeKeyData_find_keyblock(
Key *key,
float *point)
725 float *start = (
float *)kb->
data;
729 if ((start ==
NULL) || (start > point)) {
733 else if (start == point) {
755 static int rna_ShapeKeyPoint_get_index(
Key *key,
KeyBlock *kb,
float *point)
761 char *start = (
char *)kb->
data;
762 char *pt = (
char *)point;
764 return (
int)(pt - start) / key->
elemsize;
772 float *point = (
float *)
ptr->
data;
775 kb = rna_ShapeKeyData_find_keyblock(key, point);
778 char name_esc_kb[
sizeof(kb->
name) * 2];
781 index = rna_ShapeKeyPoint_get_index(key, kb, point);
784 index = rna_ShapeKey_curve_find_index(key, index);
790 return BLI_sprintfN(
"key_blocks[\"%s\"].data[%d]", name_esc_kb, index);
793 return BLI_sprintfN(
"shape_keys.key_blocks[\"%s\"].data[%d]", name_esc_kb, index);
841 prop,
"rna_ShapeKeyCurvePoint_tilt_get",
"rna_ShapeKeyCurvePoint_tilt_set",
NULL);
849 prop,
"rna_ShapeKeyCurvePoint_radius_get",
"rna_ShapeKeyCurvePoint_radius_set",
NULL);
862 prop,
"rna_ShapeKeyBezierPoint_co_get",
"rna_ShapeKeyBezierPoint_co_set",
NULL);
869 "rna_ShapeKeyBezierPoint_handle_1_co_get",
870 "rna_ShapeKeyBezierPoint_handle_1_co_set",
878 "rna_ShapeKeyBezierPoint_handle_2_co_get",
879 "rna_ShapeKeyBezierPoint_handle_2_co_set",
886 prop,
"rna_ShapeKeyBezierPoint_tilt_get",
"rna_ShapeKeyBezierPoint_tilt_set",
NULL);
894 prop,
"rna_ShapeKeyBezierPoint_radius_get",
"rna_ShapeKeyBezierPoint_radius_set",
NULL);
951 prop,
"rna_ShapeKey_relative_key_get",
"rna_ShapeKey_relative_key_set",
NULL,
NULL);
966 prop,
NULL,
"rna_ShapeKey_slider_min_set",
"rna_ShapeKey_slider_min_range");
975 prop,
NULL,
"rna_ShapeKey_slider_max_set",
"rna_ShapeKey_slider_max_range");
985 "rna_ShapeKey_data_begin",
988 "rna_ShapeKey_data_get",
989 "rna_ShapeKey_data_length",
990 "rna_ShapeKey_data_lookup_int",
997 func =
RNA_def_function(srna,
"normals_vertex_get",
"rna_KeyBlock_normals_vert_calc");
999 "Compute local space vertices' normals for this shape key");
1007 func =
RNA_def_function(srna,
"normals_polygon_get",
"rna_KeyBlock_normals_poly_calc");
1016 func =
RNA_def_function(srna,
"normals_split_get",
"rna_KeyBlock_normals_loop_calc");
1018 "Compute local space face corners' normals for this shape key");
1034 srna,
"Key",
"Shape keys data-block containing different shapes of geometric data-blocks");
1062 "Make shape keys relative, "
1063 "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(struct KeyBlock *kb, struct Mesh *mesh, float(*r_vertnors)[3], float(*r_polynors)[3], float(*r_loopnors)[3])
struct Key * BKE_key_from_object(const struct Object *ob)
#define LISTBASE_FOREACH(type, var, list)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
size_t size_t char * BLI_sprintfN(const char *__restrict format,...) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_PRINTF_FORMAT(1
size_t size_t char size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, const size_t dst_maxncpy) ATTR_NONNULL()
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, const size_t maxncpy) ATTR_NONNULL()
char * BLI_strncpy_utf8(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
bool BLI_uniquename(struct ListBase *list, void *vlink, const char *defname, char delim, int name_offset, size_t len)
#define IN_RANGE_INCL(a, b, c)
#define BLT_I18NCONTEXT_ID_SHAPEKEY
#define CTX_DATA_(context, msgid)
void DEG_id_tag_update(struct ID *id, int flag)
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.
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
Read Guarded memory(de)allocation.
Group RGB to Bright Vector Camera CLAMP
StructRNA RNA_ShapeKeyBezierPoint
StructRNA RNA_ShapeKeyCurvePoint
StructRNA RNA_ShapeKeyPoint
#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.
static float normals[][3]
void *(* MEM_malloc_arrayN)(size_t len, size_t size, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
void RNA_pointer_create(ID *id, StructRNA *type, void *data, PointerRNA *r_ptr)
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(PointerRNA *ptr, StructRNA *type, void *data)
void rna_def_animdata_common(StructRNA *srna)
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)
FunctionRNA * RNA_def_function(StructRNA *srna, const char *identifier, const char *call)
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)
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)
void RNA_def_struct_name_property(struct StructRNA *srna, struct PropertyRNA *prop)
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)
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
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(struct ID *id, PointerRNA value, int current)
PointerRNA rna_object_shapekey_index_get(struct 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)
static const float tilt_limit
const EnumPropertyItem rna_enum_keyblock_type_items[]
void RNA_def_key(BlenderRNA *brna)
union CollectionPropertyIterator::@1099 internal
void WM_main_add_notifier(unsigned int type, void *reference)