Blender  V2.93
BKE_fcurve_driver.h
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung
17  * All rights reserved.
18  */
19 
20 #pragma once
21 
26 #include "DNA_curve_types.h"
27 
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31 
33 struct ChannelDriver;
34 struct DriverTarget;
35 struct DriverVar;
36 struct FCurve;
37 struct PathResolvedRNA;
38 struct PointerRNA;
39 struct PropertyRNA;
40 
41 /* ************** F-Curve Drivers ***************** */
42 
43 /* With these iterators for convenience, the variables "tarIndex" and "dtar" can be
44  * accessed directly from the code using them, but it is not recommended that their
45  * values be changed to point at other slots...
46  */
47 
48 /* convenience looper over ALL driver targets for a given variable (even the unused ones) */
49 #define DRIVER_TARGETS_LOOPER_BEGIN(dvar) \
50  { \
51  DriverTarget *dtar = &dvar->targets[0]; \
52  int tarIndex = 0; \
53  for (; tarIndex < MAX_DRIVER_TARGETS; tarIndex++, dtar++)
54 
55 /* convenience looper over USED driver targets only */
56 #define DRIVER_TARGETS_USED_LOOPER_BEGIN(dvar) \
57  { \
58  DriverTarget *dtar = &dvar->targets[0]; \
59  int tarIndex = 0; \
60  for (; tarIndex < dvar->num_targets; tarIndex++, dtar++)
61 
62 /* tidy up for driver targets loopers */
63 #define DRIVER_TARGETS_LOOPER_END \
64  } \
65  ((void)0)
66 
67 /* ---------------------- */
68 
69 void fcurve_free_driver(struct FCurve *fcu);
70 struct ChannelDriver *fcurve_copy_driver(const struct ChannelDriver *driver);
71 
72 void driver_variables_copy(struct ListBase *dst_vars, const struct ListBase *src_vars);
73 
75  float mat[4][4], int auto_order, int rotation_mode, int channel, bool angles, float r_buf[4]);
76 
77 void driver_free_variable(struct ListBase *variables, struct DriverVar *dvar);
78 void driver_free_variable_ex(struct ChannelDriver *driver, struct DriverVar *dvar);
79 
80 void driver_change_variable_type(struct DriverVar *dvar, int type);
81 void driver_variable_name_validate(struct DriverVar *dvar);
82 struct DriverVar *driver_add_new_variable(struct ChannelDriver *driver);
83 
84 float driver_get_variable_value(struct ChannelDriver *driver, struct DriverVar *dvar);
86  struct DriverTarget *dtar,
87  struct PointerRNA *r_ptr,
88  struct PropertyRNA **r_prop,
89  int *r_index);
90 
94  bool expr_changed,
95  bool varname_changed);
96 
97 float evaluate_driver(struct PathResolvedRNA *anim_rna,
98  struct ChannelDriver *driver,
99  struct ChannelDriver *driver_orig,
100  const struct AnimationEvalContext *anim_eval_context);
101 
102 #ifdef __cplusplus
103 }
104 #endif
float evaluate_driver(struct PathResolvedRNA *anim_rna, struct ChannelDriver *driver, struct ChannelDriver *driver_orig, const struct AnimationEvalContext *anim_eval_context)
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_variables_copy(struct ListBase *dst_vars, const struct ListBase *src_vars)
bool driver_get_variable_property(struct ChannelDriver *driver, struct DriverTarget *dtar, struct PointerRNA *r_ptr, struct PropertyRNA **r_prop, int *r_index)
float driver_get_variable_value(struct ChannelDriver *driver, struct DriverVar *dvar)
void BKE_driver_target_matrix_to_rot_channels(float mat[4][4], int auto_order, int rotation_mode, int channel, bool angles, float r_buf[4])
bool BKE_driver_expression_depends_on_time(struct ChannelDriver *driver)
struct DriverVar * driver_add_new_variable(struct ChannelDriver *driver)
void driver_free_variable_ex(struct ChannelDriver *driver, struct DriverVar *dvar)
void fcurve_free_driver(struct FCurve *fcu)
void driver_free_variable(struct ListBase *variables, struct DriverVar *dvar)
void driver_change_variable_type(struct DriverVar *dvar, int type)
void driver_variable_name_validate(struct DriverVar *dvar)
struct ChannelDriver * fcurve_copy_driver(const struct ChannelDriver *driver)
_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
ListBase variables