Blender  V2.93
abc_archive.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) 2020 Blender Foundation.
17  * All rights reserved.
18  */
19 
24 #pragma once
25 
26 #include "ABC_alembic.h"
28 
29 #include <Alembic/Abc/OArchive.h>
30 #include <Alembic/Abc/OTypedScalarProperty.h>
31 
32 #include <fstream>
33 #include <set>
34 #include <string>
35 
36 struct Main;
37 struct Scene;
38 
39 namespace blender::io::alembic {
40 
41 /* Container for an Alembic archive and time sampling info.
42  *
43  * Constructor arguments are used to create the correct output stream and to set the archive's
44  * metadata. */
45 class ABCArchive {
46  public:
47  typedef std::set<double> Frames;
48 
49  Alembic::Abc::OArchive *archive;
50 
51  ABCArchive(const Main *bmain,
52  const Scene *scene,
54  std::string filename);
55  ~ABCArchive();
56 
59 
60  Frames::const_iterator frames_begin() const;
61  Frames::const_iterator frames_end() const;
62  size_t total_frame_count() const;
63 
64  bool is_xform_frame(double frame) const;
65  bool is_shape_frame(double frame) const;
66 
67  ExportSubset export_subset_for_frame(double frame) const;
68 
69  void update_bounding_box(const Imath::Box3d &bounds);
70 
71  private:
72  std::ofstream abc_ostream_;
73  uint32_t time_sampling_index_transforms_;
74  uint32_t time_sampling_index_shapes_;
75 
76  Frames xform_frames_;
77  Frames shape_frames_;
78  Frames export_frames_;
79 
80  Alembic::Abc::OBox3dProperty abc_archive_bbox_;
81 };
82 
83 } // namespace blender::io::alembic
static btDbvtVolume bounds(btDbvtNode **leaves, int count)
Definition: btDbvt.cpp:299
Frames::const_iterator frames_end() const
Definition: abc_archive.cc:231
ABCArchive(const Main *bmain, const Scene *scene, AlembicExportParams params, std::string filename)
Definition: abc_archive.cc:171
bool is_xform_frame(double frame) const
Definition: abc_archive.cc:240
ExportSubset export_subset_for_frame(double frame) const
Definition: abc_archive.cc:248
bool is_shape_frame(double frame) const
Definition: abc_archive.cc:244
Frames::const_iterator frames_begin() const
Definition: abc_archive.cc:227
uint32_t time_sampling_index_shapes() const
Definition: abc_archive.cc:222
Alembic::Abc::OArchive * archive
Definition: abc_archive.h:49
void update_bounding_box(const Imath::Box3d &bounds)
Definition: abc_archive.cc:256
uint32_t time_sampling_index_transforms() const
Definition: abc_archive.cc:217
Scene scene
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
unsigned int uint32_t
Definition: stdint.h:83
Definition: BKE_main.h:116