Merge branch 'blender-v2.81-release'
[blender.git] / source / blender / blenkernel / BKE_anim.h
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) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19 #ifndef __BKE_ANIM_H__
20 #define __BKE_ANIM_H__
21
22 /** \file
23  * \ingroup bke
24  */
25 struct Depsgraph;
26 struct ListBase;
27 struct Object;
28 struct ParticleSystem;
29 struct Path;
30 struct ReportList;
31 struct Scene;
32 struct bAnimVizSettings;
33 struct bMotionPath;
34 struct bPoseChannel;
35
36 /* ---------------------------------------------------- */
37 /* Animation Visualization */
38
39 void animviz_settings_init(struct bAnimVizSettings *avs);
40
41 struct bMotionPath *animviz_copy_motionpath(const struct bMotionPath *mpath_src);
42
43 void animviz_free_motionpath_cache(struct bMotionPath *mpath);
44 void animviz_free_motionpath(struct bMotionPath *mpath);
45
46 struct bMotionPath *animviz_verify_motionpaths(struct ReportList *reports,
47                                                struct Scene *scene,
48                                                struct Object *ob,
49                                                struct bPoseChannel *pchan);
50
51 /* ---------------------------------------------------- */
52 /* Curve Paths */
53
54 void free_path(struct Path *path);
55 void calc_curvepath(struct Object *ob, struct ListBase *nurbs);
56 int where_on_path(struct Object *ob,
57                   float ctime,
58                   float vec[4],
59                   float dir[3],
60                   float quat[4],
61                   float *radius,
62                   float *weight);
63
64 /* ---------------------------------------------------- */
65 /* Dupli-Geometry */
66
67 struct ListBase *object_duplilist(struct Depsgraph *depsgraph,
68                                   struct Scene *sce,
69                                   struct Object *ob);
70 void free_object_duplilist(struct ListBase *lb);
71
72 typedef struct DupliObject {
73   struct DupliObject *next, *prev;
74   struct Object *ob;
75   float mat[4][4];
76   float orco[3], uv[2];
77
78   short type; /* from Object.transflag */
79   char no_draw;
80
81   /* Persistent identifier for a dupli object, for inter-frame matching of
82    * objects with motion blur, or inter-update matching for syncing. */
83   int persistent_id[16]; /* 2*MAX_DUPLI_RECUR */
84
85   /* Particle this dupli was generated from. */
86   struct ParticleSystem *particle_system;
87
88   /* Random ID for shading */
89   unsigned int random_id;
90 } DupliObject;
91
92 #endif