Merging fluidcontrol to trunk from rev16649 fluidcontrol branch. Code provided by...
[blender-staging.git] / source / blender / blenkernel / BKE_pointcache.h
1 /*
2 *
3 * ***** BEGIN GPL LICENSE BLOCK *****
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software  Foundation,
17 * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18 *
19 * The Original Code is Copyright (C) 2006 Blender Foundation.
20 * All rights reserved.
21 *
22 * The Original Code is: all of this file.
23 *
24 * Contributor(s): Campbell Barton <ideasman42@gmail.com>
25 *
26 * ***** END GPL LICENSE BLOCK *****
27 */
28
29 #ifndef BKE_POINTCACHE_H
30 #define BKE_POINTCACHE_H
31
32 #include "DNA_ID.h"
33
34 /* Point cache clearing option, for BKE_ptcache_id_clear, before
35  * and after are non inclusive (they wont remove the cfra) */
36 #define PTCACHE_CLEAR_ALL               0
37 #define PTCACHE_CLEAR_FRAME             1
38 #define PTCACHE_CLEAR_BEFORE    2
39 #define PTCACHE_CLEAR_AFTER             3
40
41 /* Point cache reset options */
42 #define PTCACHE_RESET_DEPSGRAPH         0
43 #define PTCACHE_RESET_BAKED                     1
44 #define PTCACHE_RESET_OUTDATED          2
45
46 /* Add the blendfile name after blendcache_ */
47 #define PTCACHE_EXT ".bphys"
48 #define PTCACHE_PATH "blendcache_"
49
50 /* File open options, for BKE_ptcache_file_open */
51 #define PTCACHE_FILE_READ       0
52 #define PTCACHE_FILE_WRITE      1
53
54 /* PTCacheID types */
55 #define PTCACHE_TYPE_SOFTBODY   0
56 #define PTCACHE_TYPE_PARTICLES  1
57 #define PTCACHE_TYPE_CLOTH              2
58
59 /* Structs */
60 struct Object;
61 struct SoftBody;
62 struct ParticleSystem;
63 struct ClothModifierData;
64 struct PointCache;
65 struct ListBase;
66
67 typedef struct PTCacheFile {
68         FILE *fp;
69 } PTCacheFile;
70
71 typedef struct PTCacheID {
72         struct PTCacheID *next, *prev;
73
74         struct Object *ob;
75         void *data;
76         int type;
77         int stack_index;
78
79         struct PointCache *cache;
80 } PTCacheID;
81
82 /* Creating ID's */
83 void BKE_ptcache_id_from_softbody(PTCacheID *pid, struct Object *ob, struct SoftBody *sb);
84 void BKE_ptcache_id_from_particles(PTCacheID *pid, struct Object *ob, struct ParticleSystem *psys);
85 void BKE_ptcache_id_from_cloth(PTCacheID *pid, struct Object *ob, struct ClothModifierData *clmd);
86
87 void BKE_ptcache_ids_from_object(struct ListBase *lb, struct Object *ob);
88
89 /* Global funcs */
90 void BKE_ptcache_remove(void);
91
92 /* ID specific functions */
93 void    BKE_ptcache_id_clear(PTCacheID *id, int mode, int cfra);
94 int             BKE_ptcache_id_exist(PTCacheID *id, int cfra);
95 int             BKE_ptcache_id_reset(PTCacheID *id, int mode);
96 void    BKE_ptcache_id_time(PTCacheID *pid, float cfra, int *startframe, int *endframe, float *timescale);
97 int             BKE_ptcache_object_reset(struct Object *ob, int mode);
98
99 /* File reading/writing */
100 PTCacheFile     *BKE_ptcache_file_open(PTCacheID *id, int mode, int cfra);
101 void         BKE_ptcache_file_close(PTCacheFile *pf);
102 int          BKE_ptcache_file_read_floats(PTCacheFile *pf, float *f, int tot);
103 int          BKE_ptcache_file_write_floats(PTCacheFile *pf, float *f, int tot);
104
105 /* Continue physics */
106 void BKE_ptcache_set_continue_physics(int enable);
107 int BKE_ptcache_get_continue_physics(void);
108
109 /* Point Cache */
110 struct PointCache *BKE_ptcache_add(void);
111 void BKE_ptcache_free(struct PointCache *cache);
112 struct PointCache *BKE_ptcache_copy(struct PointCache *cache);
113
114 #endif