44 "Generate a curve using a factorized or expanded polynomial"},
49 "Generate a curve using standard math functions such as sin and cos"},
54 "Reshape F-Curve values, e.g. change amplitude of movements"},
61 "Restrict maximum and minimum values of F-Curve"},
65 "Stepped Interpolation",
66 "Snap values to nearest grid step, e.g. for a stop-motion look"},
67 {0,
nullptr, 0,
nullptr,
nullptr},
75 "Automatic handles only take immediately adjacent keys into account"},
79 "Continuous Acceleration",
80 "Automatic handles are adjusted to avoid jumps in acceleration, resulting "
81 "in smoother curves. However, key changes may affect interpolation over a "
82 "larger stretch of the curve."},
83 {0,
nullptr, 0,
nullptr,
nullptr},
89 ICON_KEYTYPE_KEYFRAME_VEC,
91 "Normal keyframe, e.g. for key poses"},
94 ICON_KEYTYPE_BREAKDOWN_VEC,
96 "A breakdown pose, e.g. for transitions between key poses"},
99 ICON_KEYTYPE_MOVING_HOLD_VEC,
101 "A keyframe that is part of a moving hold"},
104 ICON_KEYTYPE_EXTREME_VEC,
106 "An \"extreme\" pose, or some other purpose as needed"},
109 ICON_KEYTYPE_JITTER_VEC,
111 "A filler or baked keyframe for keying on ones, or some other purpose as needed"},
114 ICON_KEYTYPE_GENERATED_VEC,
116 "A key generated automatically by a tool, not manually created"},
117 {0,
nullptr, 0,
nullptr,
nullptr},
124 ICON_IPO_EASE_IN_OUT,
126 "Easing type is chosen automatically based on what the type of interpolation used "
127 "(e.g. Ease In for transitional types, and Ease Out for dynamic effects)"},
133 "Only on the end closest to the next keyframe"},
138 "Only on the end closest to the first keyframe"},
141 ICON_IPO_EASE_IN_OUT,
143 "Segment between both keyframes"},
144 {0,
nullptr, 0,
nullptr,
nullptr},
148 {
DTAR_ROTMODE_AUTO,
"AUTO", 0,
"Auto Euler",
"Euler using the rotation order of the target"},
160 "Decompose into a swing rotation to aim the X axis, followed by twist around it"},
165 "Decompose into a swing rotation to aim the Y axis, followed by twist around it"},
170 "Decompose into a swing rotation to aim the Z axis, followed by twist around it"},
171 {0,
nullptr, 0,
nullptr,
nullptr},
179 "Currently evaluating scene"},
184 "Currently evaluating view layer"},
185 {0,
nullptr, 0,
nullptr,
nullptr},
200 return &RNA_FModifierGenerator;
202 return &RNA_FModifierFunctionGenerator;
204 return &RNA_FModifierEnvelope;
206 return &RNA_FModifierCycles;
208 return &RNA_FModifierNoise;
210 return &RNA_FModifierLimits;
212 return &RNA_FModifierStepped;
214 return &RNA_UnknownType;
237 if (driver ==
nullptr) {
257 if (driver ==
nullptr) {
272static bool rna_ChannelDriver_is_simple_expression_get(
PointerRNA *
ptr)
279static void rna_ChannelDriver_update_data_impl(
Main *bmain,
284 driver->
flag &= ~DRIVER_FLAG_INVALID;
297 rna_ChannelDriver_update_data_impl(bmain, scene,
id, driver);
308 rna_ChannelDriver_update_data(bmain, scene,
ptr);
321 fcu->
flag &= ~FCURVE_DISABLED;
322 rna_ChannelDriver_update_data_impl(bmain, scene,
ptr->
owner_id, driver);
335 fcu->
flag &= ~FCURVE_DISABLED;
336 rna_ChannelDriver_update_data_impl(bmain, scene,
ptr->
owner_id, driver);
350 fcu->
flag &= ~FCURVE_DISABLED;
351 rna_ChannelDriver_update_data_impl(bmain, scene,
ptr->
owner_id, driver);
360 dtar->
id =
static_cast<ID *
>(value.data);
369static int rna_DriverTarget_id_editable(
const PointerRNA *
ptr,
const char ** )
375static int rna_DriverTarget_id_type_editable(
const PointerRNA *
ptr,
const char ** )
385static void rna_DriverTarget_id_type_set(
PointerRNA *
ptr,
int value)
396 data->idtype =
ID_OB;
400 if ((data->id) && (
GS(data->id->name) != data->idtype)) {
405static void rna_DriverTarget_RnaPath_get(
PointerRNA *
ptr,
char *value)
429static void rna_DriverTarget_RnaPath_set(
PointerRNA *
ptr,
const char *value)
447static void rna_DriverVariable_type_set(
PointerRNA *
ptr,
int value)
455void rna_DriverVariable_name_set(
PointerRNA *
ptr,
const char *value)
488static void rna_FKeyframe_handle1_get(
PointerRNA *
ptr,
float *values)
492 values[0] = bezt->vec[0][0];
493 values[1] = bezt->vec[0][1];
496static void rna_FKeyframe_handle1_set(
PointerRNA *
ptr,
const float *values)
500 bezt->vec[0][0] = values[0];
501 bezt->vec[0][1] = values[1];
504static void rna_FKeyframe_handle2_get(
PointerRNA *
ptr,
float *values)
508 values[0] = bezt->vec[2][0];
509 values[1] = bezt->vec[2][1];
512static void rna_FKeyframe_handle2_set(
PointerRNA *
ptr,
const float *values)
516 bezt->vec[2][0] = values[0];
517 bezt->vec[2][1] = values[1];
520static void rna_FKeyframe_ctrlpoint_get(
PointerRNA *
ptr,
float *values)
524 values[0] = bezt->vec[1][0];
525 values[1] = bezt->vec[1][1];
528static void rna_FKeyframe_ctrlpoint_set(
PointerRNA *
ptr,
const float *values)
532 bezt->vec[1][0] = values[0];
533 bezt->vec[1][1] = values[1];
536static void rna_FKeyframe_ctrlpoint_ui_set(
PointerRNA *
ptr,
const float *values)
540 const float frame_delta = values[0] - bezt->vec[1][0];
541 const float value_delta = values[1] - bezt->vec[1][1];
547 bezt->vec[0][0] += frame_delta;
548 bezt->vec[0][1] += value_delta;
550 bezt->vec[1][0] = values[0];
551 bezt->vec[1][1] = values[1];
553 bezt->vec[2][0] += frame_delta;
554 bezt->vec[2][1] += value_delta;
559static void rna_FCurve_RnaPath_get(
PointerRNA *
ptr,
char *value)
583static void rna_FCurve_RnaPath_set(
PointerRNA *
ptr,
const char *value)
593 fcu->
flag &= ~FCURVE_DISABLED;
603 ID *vid = value.owner_id;
608 if (
ELEM(
nullptr, pid, vid)) {
609 printf(
"ERROR: one of the ID's for the groups to assign to is invalid (ptr=%p, val=%p)\n",
614 else if (value.data && (pid != vid)) {
616 printf(
"ERROR: IDs differ - ptr=%p vs value=%p\n", pid, vid);
628 act = (adt) ? adt->
action : nullptr;
632 if (fcu->
grp == value.data) {
634 printf(
"ERROR: F-Curve already belongs to this group\n");
641 if (act ==
nullptr) {
643 printf(
"ERROR: cannot assign F-Curve to group, since F-Curve is not attached to any ID\n");
654 printf(
"ERROR: F-Curve (%p) doesn't exist in action '%s'\n", fcu, act->
id.
name);
684 "ERROR: F-Curve (datapath: '%s') doesn't belong to the same channel bag as "
685 "channel group '%s'\n",
693static void rna_FCurve_range(
FCurve *fcu,
float range[2])
704static void rna_tag_animation_update(
Main *bmain,
ID *
id)
718static void rna_FCurve_update_data_ex(
ID *
id,
FCurve *fcu,
Main *bmain)
724 rna_tag_animation_update(bmain,
id);
788static void rna_FModifier_start_frame_set(
PointerRNA *
ptr,
float value)
801static void rna_FModifier_end_frame_set(
PointerRNA *
ptr,
float value)
814static void rna_FModifier_start_frame_range(
829static void rna_FModifier_end_frame_range(
843static void rna_FModifier_blending_range(
849 *max = fcm->efra - fcm->sfra;
861 rna_tag_animation_update(bmain,
id);
864static void rna_fModifier_name_set(
PointerRNA *
ptr,
const char *value)
880 rna_FModifier_update(bmain, scene,
ptr);
888 for (fm = fmo->prev; fm; fm = fm->prev) {
889 fm->flag &= ~FMODIFIER_FLAG_ACTIVE;
891 for (fm = fmo->next; fm; fm = fm->next) {
892 fm->flag &= ~FMODIFIER_FLAG_ACTIVE;
895 rna_FModifier_update(bmain, scene,
ptr);
898static int rna_FModifierGenerator_coefficients_get_length(
const PointerRNA *
ptr,
914static void rna_FModifierGenerator_coefficients_get(
PointerRNA *
ptr,
float *values)
921static void rna_FModifierGenerator_coefficients_set(
PointerRNA *
ptr,
const float *values)
928static void rna_FModifierLimits_minx_set(
PointerRNA *
ptr,
float value)
935 if (data->rect.xmin >= data->rect.xmax) {
936 data->rect.xmax = data->rect.xmin;
940static void rna_FModifierLimits_maxx_set(
PointerRNA *
ptr,
float value)
947 if (data->rect.xmax <= data->rect.xmin) {
948 data->rect.xmin = data->rect.xmax;
952static void rna_FModifierLimits_miny_set(
PointerRNA *
ptr,
float value)
959 if (data->rect.ymin >= data->rect.ymax) {
960 data->rect.ymax = data->rect.ymin;
964static void rna_FModifierLimits_maxy_set(
PointerRNA *
ptr,
float value)
971 if (data->rect.ymax <= data->rect.ymin) {
972 data->rect.ymin = data->rect.ymax;
976static void rna_FModifierLimits_minx_range(
988static void rna_FModifierLimits_maxx_range(
1001static void rna_FModifierLimits_miny_range(
1013static void rna_FModifierLimits_maxy_range(
1026static void rna_FModifierStepped_start_frame_range(
1036static void rna_FModifierStepped_end_frame_range(
1046static void rna_FModifierStepped_frame_start_set(
PointerRNA *
ptr,
float value)
1051 float prop_clamp_min = -
FLT_MAX, prop_clamp_max =
FLT_MAX, prop_soft_min, prop_soft_max;
1052 rna_FModifierStepped_start_frame_range(
1053 ptr, &prop_clamp_min, &prop_clamp_max, &prop_soft_min, &prop_soft_max);
1054 value = std::clamp(value, prop_clamp_min, prop_clamp_max);
1059 data->start_frame = value;
1063static void rna_FModifierStepped_frame_end_set(
PointerRNA *
ptr,
float value)
1068 float prop_clamp_min = -
FLT_MAX, prop_clamp_max =
FLT_MAX, prop_soft_min, prop_soft_max;
1069 rna_FModifierStepped_end_frame_range(
1070 ptr, &prop_clamp_min, &prop_clamp_max, &prop_soft_min, &prop_soft_max);
1071 value = std::clamp(value, prop_clamp_min, prop_clamp_max);
1076 data->end_frame = value;
1080static BezTriple *rna_FKeyframe_points_insert(
1081 ID *
id,
FCurve *fcu,
Main *bmain,
float frame,
float value,
int keyframe_type,
int flag)
1089 if ((fcu->
bezt) && (result == SingleKeyingResult::SUCCESS)) {
1090 rna_tag_animation_update(bmain,
id);
1095 return fcu->
bezt + index;
1101static void rna_FKeyframe_points_add(
ID *
id,
FCurve *fcu,
Main *bmain,
int tot)
1108 rna_tag_animation_update(bmain,
id);
1111static void rna_FKeyframe_points_remove(
1115 int index =
int(bezt - fcu->
bezt);
1116 if (index < 0 || index >= fcu->
totvert) {
1128 rna_tag_animation_update(bmain,
id);
1131static void rna_FKeyframe_points_clear(
ID *
id,
FCurve *fcu,
Main *bmain)
1135 rna_tag_animation_update(bmain,
id);
1138static void rna_FKeyframe_points_sort(
ID *
id,
FCurve *fcu,
Main *bmain)
1141 rna_tag_animation_update(bmain,
id);
1144static void rna_FKeyframe_points_deduplicate(
ID *
id,
FCurve *fcu,
Main *bmain)
1147 rna_tag_animation_update(bmain,
id);
1150static void rna_FKeyframe_points_handles_recalc(
ID *
id,
FCurve *fcu,
Main *bmain)
1153 rna_tag_animation_update(bmain,
id);
1163 rna_tag_animation_update(bmain,
id);
1169 fed.f1 = fed.f2 = 0;
1184 if (i < env->totvert) {
1185 memmove(env->data + i + 1, env->data + i, (env->totvert - i) *
sizeof(
FCM_EnvelopeData));
1198 *(env->data + i) = fed;
1199 return (env->data + i);
1202static void rna_FModifierEnvelope_points_remove(
1208 int index =
int(cp - env->data);
1211 if (index < 0 || index >= env->totvert) {
1216 rna_tag_animation_update(bmain,
id);
1218 if (env->totvert > 1) {
1221 memmove(env->data + index,
1222 env->data + (index + 1),
1234 env->data =
nullptr;
1246static void rna_FModifier_show_expanded_set(
PointerRNA *
ptr,
bool value)
1262 "POLYNOMIAL_FACTORISED",
1264 "Factorized Polynomial",
1266 {0,
nullptr, 0,
nullptr,
nullptr},
1271 srna,
"Generator F-Modifier",
"Deterministically generate values for the modified F-Curve");
1280 "Values generated by this modifier are applied on top of "
1281 "the existing values instead of overwriting them");
1297 "The highest power of 'x' for this polynomial (number of coefficients - 1)");
1309 "rna_FModifierGenerator_coefficients_get",
1310 "rna_FModifierGenerator_coefficients_set",
1313 prop,
"Coefficients",
"Coefficients for 'x' (starting from lowest power of x^0)");
1326 {0,
"SIN", 0,
"Sine",
""},
1327 {1,
"COS", 0,
"Cosine",
""},
1328 {2,
"TAN", 0,
"Tangent",
""},
1329 {3,
"SQRT", 0,
"Square Root",
""},
1330 {4,
"LN", 0,
"Natural Logarithm",
""},
1331 {5,
"SINC", 0,
"Normalized Sine",
"sin(x) / x"},
1332 {0,
nullptr, 0,
nullptr,
nullptr},
1335 srna =
RNA_def_struct(brna,
"FModifierFunctionGenerator",
"FModifier");
1337 srna,
"Built-In Function F-Modifier",
"Generate values using a built-in function");
1344 prop,
"Amplitude",
"Scale factor determining the maximum/minimum values");
1350 prop,
"Phase Multiple",
"Scale factor determining the 'speed' of the function");
1369 "Values generated by this modifier are applied on top of "
1370 "the existing values instead of overwriting them");
1388 srna =
RNA_def_struct(brna,
"FModifierEnvelopeControlPoint",
nullptr);
1427 srna =
RNA_def_struct(brna,
"FModifierEnvelopeControlPoints",
nullptr);
1431 srna,
"Control Points",
"Control points defining the shape of the envelope");
1442 "Frame to add this control-point",
1447 func,
"point",
"FModifierEnvelopeControlPoint",
"",
"Newly created control-point");
1450 func =
RNA_def_function(srna,
"remove",
"rna_FModifierEnvelope_points_remove");
1454 func,
"point",
"FModifierEnvelopeControlPoint",
"",
"Control-point to remove");
1473 prop,
"Control Points",
"Control points defining the shape of the envelope");
1481 prop,
"Reference Value",
"Value that envelope's influence is centered around / based on");
1488 prop,
"Default Minimum",
"Lower distance from Reference Value for 1:1 default influence");
1495 prop,
"Default Maximum",
"Upper distance from Reference Value for 1:1 default influence");
1512 "Repeat with Offset",
1513 "Repeat keyframe range, but with offset based on gradient between "
1514 "start and end values"},
1519 "Alternate between forward and reverse playback of keyframe range"},
1520 {0,
nullptr, 0,
nullptr,
nullptr},
1541 "Maximum number of cycles to allow before first keyframe (0 = infinite)");
1557 "Maximum number of cycles to allow after last keyframe (0 = infinite)");
1570 srna,
"Limit F-Modifier",
"Limit the time/value ranges of the modified F-Curve");
1601 prop,
nullptr,
"rna_FModifierLimits_minx_set",
"rna_FModifierLimits_minx_range");
1609 prop,
nullptr,
"rna_FModifierLimits_miny_set",
"rna_FModifierLimits_miny_range");
1617 prop,
nullptr,
"rna_FModifierLimits_maxx_set",
"rna_FModifierLimits_maxx_range");
1625 prop,
nullptr,
"rna_FModifierLimits_maxy_set",
"rna_FModifierLimits_maxy_range");
1642 {0,
nullptr, 0,
nullptr,
nullptr},
1668 "Amplitude of the noise - the amount that it modifies the underlying curve");
1700 "Stepped Interpolation F-Modifier",
1701 "Hold each interpolated value from the F-Curve for several frames without "
1702 "changing the timing");
1717 "Reference number of frames before frames get held "
1718 "(use to get hold for '1-3' vs '5-7' holding patterns)");
1725 prop,
"Use Start Frame",
"Restrict modifier to only act after its 'start' frame");
1732 prop,
"Use End Frame",
"Restrict modifier to only act before its 'end' frame");
1740 "rna_FModifierStepped_frame_start_set",
1741 "rna_FModifierStepped_start_frame_range");
1743 prop,
"Start Frame",
"Frame that modifier's influence starts (if applicable)");
1750 prop,
nullptr,
"rna_FModifierStepped_frame_end_set",
"rna_FModifierStepped_end_frame_range");
1752 prop,
"End Frame",
"Frame that modifier's influence ends (if applicable)");
1803 prop,
"Disabled",
"F-Curve Modifier has invalid settings and will not be evaluated");
1821 "Restrict Frame Range",
1822 "F-Curve Modifier is only applied for the specified frame range to help "
1823 "mask off effects in order to chain them");
1830 prop,
nullptr,
"rna_FModifier_start_frame_set",
"rna_FModifier_start_frame_range");
1834 "Frame that modifier's influence starts (if Restrict Frame Range is in use)");
1841 prop,
nullptr,
"rna_FModifier_end_frame_set",
"rna_FModifier_end_frame_range");
1845 "Frame that modifier's influence ends (if Restrict Frame Range is in use)");
1853 prop,
"Blend In",
"Number of frames from start frame for influence to take effect");
1861 prop,
"Blend Out",
"Number of frames from end frame for influence to fade out");
1869 prop,
"Use Influence",
"F-Curve Modifier's effects will be tempered by a default factor");
1878 prop,
"Influence",
"Amount of influence F-Curve Modifier will have when not fading in/out");
1903 {0,
nullptr, 0,
nullptr,
nullptr},
1911 "Transforms include effects of parenting/restpose and constraints"},
1916 "Transforms don't include parenting/restpose or constraints"},
1921 "Transforms include effects of constraints but not "
1922 "parenting/restpose"},
1923 {0,
nullptr, 0,
nullptr,
nullptr},
1937 prop,
nullptr,
"rna_DriverTarget_id_set",
"rna_DriverTarget_id_typef",
nullptr);
1940 "ID-block that the specific property used can be found from "
1941 "(id_type property must be set first)");
1957 "rna_DriverTarget_RnaPath_get",
1958 "rna_DriverTarget_RnaPath_length",
1959 "rna_DriverTarget_RnaPath_set");
1991 prop,
"Context Property",
"Type of a context-dependent data-block to access property from");
1998 "Use the fallback value if the data path can't be resolved, instead of "
1999 "failing to evaluate the driver");
2005 prop,
"Fallback",
"The value to use if the data path can't be resolved");
2014 "Indicates that the most recent variable evaluation used the fallback value");
2027 "Use the value from some RNA property"},
2030 ICON_DRIVER_TRANSFORM,
2031 "Transform Channel",
2032 "Final transformation value of object or bone"},
2035 ICON_DRIVER_ROTATIONAL_DIFFERENCE,
2036 "Rotational Difference",
2037 "Use the angle between two bones"},
2040 ICON_DRIVER_DISTANCE,
2042 "Distance between two bones or objects"},
2047 "Use the value from some RNA property within the current evaluation context"},
2048 {0,
nullptr, 0,
nullptr,
nullptr},
2054 srna,
"Driver Variable",
"Variable from some source/target for driver relationship");
2063 "Name to use in scripted expressions/functions (no spaces or dots are allowed, "
2064 "and must start with a letter)");
2103 srna,
"ChannelDriver Variables",
"Collection of channel driver Variables");
2109 parm =
RNA_def_pointer(func,
"var",
"DriverVariable",
"",
"Newly created Driver Variable");
2118 func,
"variable",
"DriverVariable",
"",
"Variable to remove from the driver");
2134 {0,
nullptr, 0,
nullptr,
nullptr},
2140 srna,
"Driver",
"Driver for the value of a setting based on an external value");
2168 "Include a 'self' variable in the name-space, "
2169 "so drivers can easily reference the data being modified (object, bone, etc...)");
2175 prop,
"Invalid",
"Driver could not be evaluated in past, so should be skipped");
2182 "Simple Expression",
2183 "The scripted expression can be evaluated without using the full Python interpreter");
2226 srna,
"Keyframe",
"Bézier curve point with two handles defining a Keyframe on an F-Curve");
2262 "Interpolation method to use for segment of the F-Curve from "
2263 "this Keyframe until the next Keyframe");
2278 "Which ends of the segment between this and the next keyframe easing "
2279 "interpolation is applied to");
2292 prop,
"Amplitude",
"Amount to boost elastic bounces for 'elastic' easing");
2305 prop,
"rna_FKeyframe_handle1_get",
"rna_FKeyframe_handle1_set",
nullptr);
2307 prop,
"Left Handle",
"Coordinates of the left handle (before the control point)");
2313 prop,
"rna_FKeyframe_ctrlpoint_get",
"rna_FKeyframe_ctrlpoint_set",
nullptr);
2321 prop,
"rna_FKeyframe_ctrlpoint_get",
"rna_FKeyframe_ctrlpoint_ui_set",
nullptr);
2325 "Coordinates of the control point. Note: Changing this value also updates the handles "
2326 "similar to using the graph editor transform operator");
2333 prop,
"rna_FKeyframe_handle2_get",
"rna_FKeyframe_handle2_set",
nullptr);
2335 prop,
"Right Handle",
"Coordinates of the right handle (after the control point)");
2358 prop,
"rna_FCurve_active_modifier_get",
"rna_FCurve_active_modifier_set",
nullptr,
nullptr);
2366 parm =
RNA_def_pointer(func,
"fmodifier",
"FModifier",
"",
"New fmodifier");
2377 parm =
RNA_def_pointer(func,
"modifier",
"FModifier",
"",
"Removed modifier");
2395 "Don't add any new keyframes, but just replace existing ones"},
2396 {
INSERTKEY_NEEDED,
"NEEDED", 0,
"Needed",
"Only adds keyframes that are needed"},
2401 "Fast keyframe insertion to avoid recalculating the curve each time"},
2402 {0,
nullptr, 0,
nullptr,
nullptr},
2419 "X Value of this keyframe point",
2429 "Y Value of this keyframe point",
2433 RNA_def_enum_flag(func,
"options", keyframe_flag_items, 0,
"",
"Keyframe options");
2439 "Type of keyframe to insert");
2440 parm =
RNA_def_pointer(func,
"keyframe",
"Keyframe",
"",
"Newly created keyframe");
2447 func,
"count", 1, 0, INT_MAX,
"Number",
"Number of points to add to the spline", 0, INT_MAX);
2453 parm =
RNA_def_pointer(func,
"keyframe",
"Keyframe",
"",
"Keyframe to remove");
2461 "Fast keyframe removal to avoid recalculating the curve each time");
2471 func =
RNA_def_function(srna,
"deduplicate",
"rna_FKeyframe_points_deduplicate");
2474 "Ensure there are no duplicate keys. Assumes that the points have already been sorted");
2477 func =
RNA_def_function(srna,
"handles_recalc",
"rna_FKeyframe_points_handles_recalc");
2479 "Update handles after modifications to the keyframe points, to "
2480 "update things like auto-clamping");
2496 "Hold values of endpoint keyframes"},
2501 "Use slope of curve leading in/out of endpoint keyframes"},
2502 {0,
nullptr, 0,
nullptr,
nullptr},
2509 "Cycle through the rainbow, trying to give each curve a unique color"},
2514 "Use axis colors for transform and color properties, and auto-rainbow for the rest"},
2518 "Auto WXYZ to YRGB",
2519 "Use axis colors for XYZ parts of transform, and yellow for the 'W' channel"},
2524 "Use custom hand-picked color for F-Curve"},
2525 {0,
nullptr, 0,
nullptr,
nullptr},
2539 "Method used for evaluating value of F-Curve outside first and last keyframes");
2558 prop,
"rna_FCurve_RnaPath_get",
"rna_FCurve_RnaPath_length",
"rna_FCurve_RnaPath_set");
2566 prop,
"RNA Array Index",
"Index to the specific property affected by F-Curve if applicable");
2574 prop,
"Color Mode",
"Method used to determine color of F-Curve in Graph Editor");
2603 prop,
"Hide",
"F-Curve and its keyframes are hidden in the Graph Editor graphs");
2609 prop,
"Auto Handle Smoothing",
"Algorithm used to compute automatic handles");
2618 "False when F-Curve could not be evaluated in past, so should be skipped "
2627 "True if the curve contributes no animation due to lack of "
2628 "keyframes or useful modifiers, and should be deleted");
2657 "Evaluate F-Curve at given frame",
2668 "Value of F-Curve specific frame",
2677 func,
"Ensure keyframes are sorted in chronological order and handles are set correctly");
2690 srna,
"update_autoflags",
"update_autoflags_fcurve");
2693 "Update FCurve flags set automatically from affected property "
2694 "(currently, integer/discrete flags set when the property is not a float)");
2697 func,
"data",
"AnyType",
"Data",
"Data containing the property controlled by given FCurve");
Functions and classes to work with Actions.
Functions to modify FCurves.
Blender kernel action and pose functionality.
void action_groups_add_channel(bAction *act, bActionGroup *agrp, FCurve *fcurve)
void action_groups_remove_channel(bAction *act, FCurve *fcu)
AnimData * BKE_animdata_from_id(const ID *id)
int BKE_fcm_envelope_find_index(FCM_EnvelopeData *array, float frame, int arraylen, bool *r_exists)
void BKE_fcurve_deduplicate_keys(FCurve *fcu)
void BKE_fmodifier_name_set(FModifier *fcm, const char *name)
int BKE_fcurve_bezt_binarysearch_index(const BezTriple array[], float frame, int arraylen, bool *r_replace)
void BKE_fcurve_handles_recalc(FCurve *fcu)
FModifier * add_fmodifier(ListBase *modifiers, int type, FCurve *owner_fcu)
bool remove_fmodifier(ListBase *modifiers, FModifier *fcm)
void set_active_fmodifier(ListBase *modifiers, FModifier *fcm)
bool BKE_fcurve_is_empty(const FCurve *fcu)
FModifier * find_active_fmodifier(ListBase *modifiers)
bool BKE_fcurve_calc_range(const FCurve *fcu, float *r_min, float *r_max, bool selected_keys_only)
void sort_time_fcurve(FCurve *fcu)
const FModifierTypeInfo * fmodifier_get_typeinfo(const FModifier *fcm)
void BKE_fcurve_delete_key(FCurve *fcu, int index)
void BKE_fcurve_delete_keys_all(FCurve *fcu)
struct DriverVar * driver_add_new_variable(struct ChannelDriver *driver)
void driver_variable_unique_name(struct DriverVar *dvar)
void BKE_driver_invalidate_expression(struct ChannelDriver *driver, bool expr_changed, bool varname_changed)
bool BKE_driver_has_simple_expression(struct ChannelDriver *driver)
void driver_free_variable_ex(struct ChannelDriver *driver, struct DriverVar *dvar)
void driver_change_variable_type(struct DriverVar *dvar, int type)
void driver_variable_name_validate(struct DriverVar *dvar)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
void BKE_report(ReportList *reports, eReportType type, const char *message)
#define LISTBASE_FOREACH(type, var, list)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC
#define STRNCPY_UTF8(dst, src)
#define ARRAY_HAS_ITEM(arr_item, arr_start, arr_len)
#define SET_FLAG_FROM_TEST(value, test, flag)
#define BLT_I18NCONTEXT_ID_ACTION
#define BLT_I18NCONTEXT_ID_ID
void DEG_id_tag_update(ID *id, unsigned int flags)
void DEG_id_tag_update_ex(Main *bmain, ID *id, unsigned int flags)
void DEG_relations_tag_update(Main *bmain)
#define MAX_DRIVER_TARGETS
@ DTAR_TRANSCHAN_SCALE_AVG
@ FCM_EXTRAPOLATE_CYCLIC_OFFSET
@ DTAR_OPTION_USE_FALLBACK
@ FCURVE_COLOR_AUTO_RAINBOW
@ FCM_NOISE_MODIF_REPLACE
@ FCM_NOISE_MODIF_SUBTRACT
@ FCM_NOISE_MODIF_MULTIPLY
@ DVAR_TYPE_TRANSFORM_CHAN
@ FMODIFIER_TYPE_FN_GENERATOR
@ FMODIFIER_TYPE_GENERATOR
@ FMODIFIER_TYPE_ENVELOPE
@ FCM_GENERATOR_POLYNOMIAL_FACTORISED
@ FCM_GENERATOR_POLYNOMIAL
@ FMODIFIER_FLAG_USEINFLUENCE
@ FMODIFIER_FLAG_DISABLED
@ FMODIFIER_FLAG_RANGERESTRICT
@ DTAR_ROTMODE_QUATERNION
@ DTAR_ROTMODE_SWING_TWIST_X
@ DTAR_ROTMODE_SWING_TWIST_Y
@ DTAR_ROTMODE_SWING_TWIST_Z
@ DTAR_FLAG_FALLBACK_USED
@ FCURVE_EXTRAPOLATE_CONSTANT
@ FCURVE_EXTRAPOLATE_LINEAR
@ FCURVE_SMOOTH_CONT_ACCEL
@ DTAR_CONTEXT_PROPERTY_ACTIVE_SCENE
@ DTAR_CONTEXT_PROPERTY_ACTIVE_VIEW_LAYER
Object is a sort of wrapper for general info.
@ UI_PANEL_DATA_EXPAND_ROOT
Read Guarded memory(de)allocation.
#define MEM_reallocN(vmemh, len)
#define RNA_POINTER_INVALIDATE(ptr)
StructRNA * ID_code_to_RNA_type(short idcode)
#define RNA_MAX_ARRAY_DIMENSION
#define RNA_ENUM_ITEM_SEPR
@ PROPOVERRIDE_OVERRIDABLE_LIBRARY
bool is_action_layered() const
bool fcurve_assign_to_channel_group(FCurve &fcurve, bActionGroup &to_group)
void ED_keyframes_add(FCurve *fcu, int num_keys_to_add)
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
void *(* MEM_mallocN)(size_t len, const char *str)
void MEM_freeN(void *vmemh)
ccl_device_inline float2 fmod(const float2 a, const float b)
KeyframeSettings get_keyframe_settings(bool from_userprefs)
SingleKeyingResult insert_vert_fcurve(FCurve *fcu, const float2 position, const KeyframeSettings &settings, eInsertKeyFlags flag)
Main Key-framing API call.
const EnumPropertyItem rna_enum_id_type_items[]
PointerRNA rna_pointer_inherit_refine(const PointerRNA *ptr, StructRNA *type, void *data)
const EnumPropertyItem rna_enum_beztriple_interpolation_mode_items[]
const EnumPropertyItem rna_enum_keyframe_handle_type_items[]
void RNA_def_struct_name_property(StructRNA *srna, PropertyRNA *prop)
void RNA_def_struct_refine_func(StructRNA *srna, const char *refine)
void RNA_def_property_pointer_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t bit)
void RNA_def_parameter_clear_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
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_function_return(FunctionRNA *func, PropertyRNA *ret)
void RNA_def_property_enum_default(PropertyRNA *prop, int 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_srna(PropertyRNA *prop, const char *type)
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
PropertyRNA * RNA_def_float_vector(StructOrFunctionRNA *cont_, const char *identifier, const int len, const float *default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
void RNA_def_property_boolean_funcs(PropertyRNA *prop, const char *get, const char *set)
void RNA_def_property_dynamic_array_funcs(PropertyRNA *prop, const char *getlength)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
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)
PropertyRNA * RNA_def_pointer(StructOrFunctionRNA *cont_, const char *identifier, const char *type, const char *ui_name, const char *ui_description)
void RNA_def_struct_sdna_from(StructRNA *srna, const char *structname, const char *propname)
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_property_enum_funcs(PropertyRNA *prop, const char *get, const char *set, const char *item)
void RNA_def_property_editable_func(PropertyRNA *prop, const char *editable)
void RNA_def_property_enum_bitflag_sdna(PropertyRNA *prop, const char *structname, const char *propname)
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
PropertyRNA * RNA_def_enum_flag(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
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)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
void RNA_def_property_translation_context(PropertyRNA *prop, const char *context)
void RNA_def_function_output(FunctionRNA *, PropertyRNA *ret)
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_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, const int default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const int softmax)
void RNA_def_property_boolean_negative_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
void RNA_def_property_override_flag(PropertyRNA *prop, PropertyOverrideFlag flag)
void RNA_def_parameter_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
static void rna_def_fmodifier_noise(BlenderRNA *brna)
static void rna_def_fmodifier_envelope(BlenderRNA *brna)
void RNA_def_fcurve(BlenderRNA *brna)
const EnumPropertyItem rna_enum_fmodifier_type_items[]
static const EnumPropertyItem rna_enum_driver_target_context_property_items[]
static void rna_def_fmodifier(BlenderRNA *brna)
static void rna_def_channeldriver(BlenderRNA *brna)
static void rna_def_channeldriver_variables(BlenderRNA *brna, PropertyRNA *cprop)
const EnumPropertyItem rna_enum_beztriple_interpolation_easing_items[]
static void rna_def_drivervar(BlenderRNA *brna)
static void rna_def_fmodifier_cycles(BlenderRNA *brna)
static void rna_def_drivertarget(BlenderRNA *brna)
static void rna_def_fcurve_keyframe_points(BlenderRNA *brna, PropertyRNA *cprop)
static void rna_def_fmodifier_stepped(BlenderRNA *brna)
static void rna_def_fmodifier_generator(BlenderRNA *brna)
const EnumPropertyItem rna_enum_beztriple_keyframe_type_items[]
const EnumPropertyItem rna_enum_fcurve_auto_smoothing_items[]
static void rna_def_fcurve(BlenderRNA *brna)
const EnumPropertyItem rna_enum_driver_target_rotation_mode_items[]
static void rna_def_fmodifier_limits(BlenderRNA *brna)
static void rna_def_fpoint(BlenderRNA *brna)
static void rna_def_fmodifier_envelope_ctrl(BlenderRNA *brna)
static void rna_def_fmodifier_function_generator(BlenderRNA *brna)
static void rna_def_fmodifier_envelope_control_points(BlenderRNA *brna, PropertyRNA *cprop)
static void rna_def_fkeyframe(BlenderRNA *brna)
static void rna_def_fcurve_modifiers(BlenderRNA *brna, PropertyRNA *cprop)
void RNA_api_fcurves(StructRNA *srna)
void RNA_api_drivers(StructRNA *)
void(* verify_data)(FModifier *fcm)
void WM_main_add_notifier(uint type, void *reference)