Alembic export: fixed curve type and order.
[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 DerivedMesh;
33 struct ListBase;
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         double frame_step_xform;
51         double frame_step_shape;
52
53         double shutter_open;
54         double shutter_close;
55
56         /* bools */
57         unsigned int selected_only : 1;
58         unsigned int uvs : 1;
59         unsigned int normals : 1;
60         unsigned int vcolors : 1;
61         unsigned int apply_subdiv : 1;
62         unsigned int flatten_hierarchy : 1;
63         unsigned int visible_layers_only : 1;
64         unsigned int renderable_only : 1;
65         unsigned int face_sets : 1;
66         unsigned int use_subdiv_schema : 1;
67         unsigned int packuv : 1;
68         unsigned int triangulate : 1;
69
70         unsigned int compression_type : 1;
71
72         int quad_method;
73         int ngon_method;
74         float global_scale;
75 };
76
77 void ABC_export(
78         struct Scene *scene,
79         struct bContext *C,
80         const char *filepath,
81         const struct AlembicExportParams *params);
82
83 void ABC_import(struct bContext *C,
84                 const char *filepath,
85                 float scale,
86                 bool is_sequence,
87                 bool set_frame_range,
88                 int sequence_len,
89                 int offset,
90                 bool validate_meshes);
91
92 AbcArchiveHandle *ABC_create_handle(const char *filename, struct ListBase *object_paths);
93
94 void ABC_free_handle(AbcArchiveHandle *handle);
95
96 void ABC_get_transform(struct CacheReader *reader,
97                        float r_mat[4][4],
98                        float time,
99                        float scale);
100
101 struct DerivedMesh *ABC_read_mesh(struct CacheReader *reader,
102                                   struct Object *ob,
103                                   struct DerivedMesh *dm,
104                                   const float time,
105                                   const char **err_str,
106                                   int flags);
107
108 void CacheReader_free(struct CacheReader *reader);
109
110 struct CacheReader *CacheReader_open_alembic_object(struct AbcArchiveHandle *handle,
111                                                     struct CacheReader *reader,
112                                                     struct Object *object,
113                                                     const char *object_path);
114
115 #ifdef __cplusplus
116 }
117 #endif
118
119 #endif  /* __ABC_ALEMBIC_H__ */