Merge branch 'blender2.7'
[blender.git] / source / blender / alembic / ABC_alembic.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * Contributor(s): Esteban Tovagliari, Cedric Paille, Kevin Dietrich
19  *
20  * ***** END GPL LICENSE BLOCK *****
21  */
22
23 #ifndef __ABC_ALEMBIC_H__
24 #define __ABC_ALEMBIC_H__
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29
30 struct bContext;
31 struct CacheReader;
32 struct ListBase;
33 struct Mesh;
34 struct Object;
35 struct Scene;
36
37 typedef struct AbcArchiveHandle AbcArchiveHandle;
38
39 enum {
40         ABC_ARCHIVE_OGAWA = 0,
41         ABC_ARCHIVE_HDF5  = 1,
42 };
43
44 int ABC_get_version(void);
45
46 struct AlembicExportParams {
47         double frame_start;
48         double frame_end;
49
50         unsigned int frame_samples_xform;
51         unsigned int frame_samples_shape;
52
53         double shutter_open;
54         double shutter_close;
55
56         bool selected_only;
57         bool uvs;
58         bool normals;
59         bool vcolors;
60         bool apply_subdiv;
61         bool curves_as_mesh;
62         bool flatten_hierarchy;
63         bool visible_layers_only;
64         bool renderable_only;
65         bool face_sets;
66         bool use_subdiv_schema;
67         bool packuv;
68         bool triangulate;
69         bool export_hair;
70         bool export_particles;
71
72         unsigned int compression_type : 1;
73
74         /* See MOD_TRIANGULATE_NGON_xxx and MOD_TRIANGULATE_QUAD_xxx
75          * in DNA_modifier_types.h */
76         int quad_method;
77         int ngon_method;
78
79         float global_scale;
80 };
81
82 /* The ABC_export and ABC_import functions both take a as_background_job
83  * parameter, and return a boolean.
84  *
85  * When as_background_job=true, returns false immediately after scheduling
86  * a background job.
87  *
88  * When as_background_job=false, performs the export synchronously, and returns
89  * true when the export was ok, and false if there were any errors.
90  */
91
92 bool ABC_export(
93         struct Scene *scene,
94         struct bContext *C,
95         const char *filepath,
96         const struct AlembicExportParams *params,
97         bool as_background_job);
98
99 bool ABC_import(struct bContext *C,
100                 const char *filepath,
101                 float scale,
102                 bool is_sequence,
103                 bool set_frame_range,
104                 int sequence_len,
105                 int offset,
106                 bool validate_meshes,
107                 bool as_background_job);
108
109 AbcArchiveHandle *ABC_create_handle(const char *filename, struct ListBase *object_paths);
110
111 void ABC_free_handle(AbcArchiveHandle *handle);
112
113 void ABC_get_transform(struct CacheReader *reader,
114                        float r_mat[4][4],
115                        float time,
116                        float scale);
117
118 /* Either modifies current_mesh in-place or constructs a new mesh. */
119 struct Mesh *ABC_read_mesh(struct CacheReader *reader,
120                            struct Object *ob,
121                            struct Mesh *current_mesh,
122                            const float time,
123                            const char **err_str,
124                            int flags);
125
126 void CacheReader_incref(struct CacheReader *reader);
127 void CacheReader_free(struct CacheReader *reader);
128
129 struct CacheReader *CacheReader_open_alembic_object(struct AbcArchiveHandle *handle,
130                                                     struct CacheReader *reader,
131                                                     struct Object *object,
132                                                     const char *object_path);
133
134 #ifdef __cplusplus
135 }
136 #endif
137
138 #endif  /* __ABC_ALEMBIC_H__ */