56 if (visible_objects_only) {
67 std::cout <<
"Alembic export of '" <<
data->filename <<
"' took ";
80 data->was_canceled =
false;
81 data->start_time = blender::timeit::Clock::now();
83 G.is_rendering =
true;
92 if (!
data->params.apply_subdiv) {
100 const bool export_animation = (
data->params.frame_start !=
data->params.frame_end);
103 std::unique_ptr<ABCArchive> abc_archive;
105 abc_archive = std::make_unique<ABCArchive>(
108 catch (
const std::exception &ex) {
109 std::stringstream error_message_stream;
110 error_message_stream <<
"Error writing to " <<
data->filename;
111 const std::string &error_message = error_message_stream.str();
115 CLOG_ERROR(&
LOG,
"%s: %s", error_message.c_str(), ex.what());
117 data->export_ok =
false;
122 std::stringstream error_message_stream;
123 error_message_stream <<
"Unknown error writing to " <<
data->filename;
125 data->export_ok =
false;
131 if (export_animation) {
135 const float progress_per_frame = 1.0f /
std::max(
size_t(1), abc_archive->total_frame_count());
136 ABCArchive::Frames::const_iterator frame_it = abc_archive->frames_begin();
137 const ABCArchive::Frames::const_iterator frames_end = abc_archive->frames_end();
139 for (; frame_it != frames_end; frame_it++) {
140 double frame = *frame_it;
142 if (
G.is_break || (stop !=
nullptr && *stop)) {
152 ExportSubset export_subset = abc_archive->export_subset_for_frame(frame);
156 *progress += progress_per_frame;
173 data->export_ok = !
data->was_canceled;
189 G.is_rendering =
false;
198 const char *filepath,
200 bool as_background_job)
215 bool export_ok =
false;
216 if (as_background_job) {
233 short stop = 0, do_update = 0;
234 float progress = 0.0f;
struct wmWindowManager * CTX_wm_manager(const bContext *C)
struct ViewLayer * CTX_data_view_layer(const bContext *C)
struct Main * CTX_data_main(const bContext *C)
struct wmWindow * CTX_wm_window(const bContext *C)
void BKE_scene_graph_update_tagged(struct Depsgraph *depsgraph, struct Main *bmain)
void BKE_scene_graph_update_for_newframe(struct Depsgraph *depsgraph)
File and directory operations.
int BLI_exists(const char *path) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
int BLI_delete(const char *file, bool dir, bool recursive) ATTR_NONNULL()
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
#define CLOG_ERROR(clg_ref,...)
#define CLOG_INFO(clg_ref, level,...)
Depsgraph * DEG_graph_new(struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, eEvaluationMode mode)
struct Depsgraph Depsgraph
void DEG_graph_free(Depsgraph *graph)
void DEG_graph_build_from_view_layer(struct Depsgraph *graph)
void DEG_graph_build_for_all_objects(struct Depsgraph *graph)
struct Scene * DEG_get_input_scene(const Depsgraph *graph)
Read Guarded memory(de)allocation.
bool ABC_export(Scene *scene, bContext *C, const char *filepath, const AlembicExportParams *params, bool as_background_job)
void set_export_subset(ExportSubset export_subset_)
virtual void iterate_and_write() override
const Depsgraph * depsgraph
void(* MEM_freeN)(void *vmemh)
void *(* MEM_mallocN)(size_t len, const char *str)
static void export_startjob(void *customdata, short *stop, short *do_update, float *progress)
static void export_endjob(void *customdata)
static void build_depsgraph(Depsgraph *depsgraph, const bool visible_objects_only)
static void report_job_duration(const ExportJobData *data)
Clock::time_point TimePoint
void print_duration(Nanoseconds duration)
std::chrono::nanoseconds Nanoseconds
AlembicExportParams params
blender::timeit::TimePoint start_time
void WM_report(eReportType type, const char *message)
void WM_set_locked_interface(wmWindowManager *wm, bool lock)
void WM_jobs_start(wmWindowManager *wm, wmJob *wm_job)
void WM_jobs_callbacks(wmJob *wm_job, wm_jobs_start_callback startjob, void(*initjob)(void *), void(*update)(void *), void(*endjob)(void *))
void WM_jobs_customdata_set(wmJob *wm_job, void *customdata, void(*free)(void *))
void WM_jobs_timer(wmJob *wm_job, double timestep, unsigned int note, unsigned int endnote)
wmJob * WM_jobs_get(wmWindowManager *wm, wmWindow *win, const void *owner, const char *name, int flag, int job_type)