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,
295 ID *
id =
ptr->owner_id;
297 rna_ChannelDriver_update_data_impl(bmain, scene,
id, driver);
308 rna_ChannelDriver_update_data(bmain, scene,
ptr);
314 FCurve *fcu = rna_FCurve_find_driver_by_target(
ptr->owner_id, dtar);
322 rna_ChannelDriver_update_data_impl(bmain, scene,
ptr->owner_id, driver);
328 FCurve *fcu = rna_FCurve_find_driver_by_variable(
ptr->owner_id, dvar);
336 rna_ChannelDriver_update_data_impl(bmain, scene,
ptr->owner_id, driver);
343 FCurve *fcu = rna_FCurve_find_driver_by_variable(
ptr->owner_id, dvar);
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)
392 data->idtype = value;
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)
602 ID *pid =
ptr->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;
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);
731 rna_FCurve_update_data_ex(
ptr->owner_id, (
FCurve *)
ptr->data, bmain);
744 rna_tag_animation_update(bmain,
ptr->owner_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;
854 ID *
id =
ptr->owner_id;
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) {
891 for (fm = fmo->next; fm; fm = fm->next) {
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)
933 data->rect.xmin = value;
935 if (
data->rect.xmin >=
data->rect.xmax) {
940static void rna_FModifierLimits_maxx_set(
PointerRNA *
ptr,
float value)
945 data->rect.xmax = value;
947 if (
data->rect.xmax <=
data->rect.xmin) {
952static void rna_FModifierLimits_miny_set(
PointerRNA *
ptr,
float value)
957 data->rect.ymin = value;
959 if (
data->rect.ymin >=
data->rect.ymax) {
964static void rna_FModifierLimits_maxy_set(
PointerRNA *
ptr,
float value)
969 data->rect.ymax = value;
971 if (
data->rect.ymax <=
data->rect.ymin) {
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)
1090 rna_tag_animation_update(bmain,
id);
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(
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(
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;
1243 rna_tag_animation_update(bmain,
ptr->owner_id);
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)
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_POINTER_INVALIDATE(ptr)
StructRNA * ID_code_to_RNA_type(short idcode)
#define RNA_MAX_ARRAY_DIMENSION
#define RNA_ENUM_ITEM_SEPR
@ PROPOVERRIDE_OVERRIDABLE_LIBRARY
SIMD_FORCE_INLINE btScalar length(const btQuaternion &q)
Return the length of a quaternion.
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)
struct ActionChannelBag * channel_bag
eBezTriple_KeyframeType keyframe_type
void WM_main_add_notifier(uint type, void *reference)