Changeset View
Changeset View
Standalone View
Standalone View
source/blender/alembic/intern/alembic_capi.cc
| Show First 20 Lines • Show All 226 Lines • ▼ Show 20 Lines | static void find_iobject(const IObject &object, IObject &ret, | ||||
| } | } | ||||
| ret = tmp; | ret = tmp; | ||||
| } | } | ||||
| struct ExportJobData { | struct ExportJobData { | ||||
| EvaluationContext eval_ctx; | EvaluationContext eval_ctx; | ||||
| Scene *scene; | Scene *scene; | ||||
| SceneLayer *scene_layer; | ViewLayer *view_layer; | ||||
| Depsgraph *depsgraph; | Depsgraph *depsgraph; | ||||
| Main *bmain; | Main *bmain; | ||||
| char filename[1024]; | char filename[1024]; | ||||
| ExportSettings settings; | ExportSettings settings; | ||||
| short *stop; | short *stop; | ||||
| short *do_update; | short *do_update; | ||||
| Show All 16 Lines | static void export_startjob(void *customdata, short *stop, short *do_update, float *progress) | ||||
| */ | */ | ||||
| G.is_rendering = true; | G.is_rendering = true; | ||||
| BKE_spacedata_draw_locks(true); | BKE_spacedata_draw_locks(true); | ||||
| G.is_break = false; | G.is_break = false; | ||||
| try { | try { | ||||
| Scene *scene = data->scene; | Scene *scene = data->scene; | ||||
| SceneLayer *scene_layer = data->scene_layer; | ViewLayer *view_layer = data->view_layer; | ||||
| AbcExporter exporter(data->bmain, &data->eval_ctx, scene, scene_layer, data->depsgraph, data->filename, data->settings); | AbcExporter exporter(data->bmain, &data->eval_ctx, scene, view_layer, data->depsgraph, data->filename, data->settings); | ||||
| const int orig_frame = CFRA; | const int orig_frame = CFRA; | ||||
| data->was_canceled = false; | data->was_canceled = false; | ||||
| exporter(data->bmain, *data->progress, data->was_canceled); | exporter(data->bmain, *data->progress, data->was_canceled); | ||||
| if (CFRA != orig_frame) { | if (CFRA != orig_frame) { | ||||
| CFRA = orig_frame; | CFRA = orig_frame; | ||||
| BKE_scene_graph_update_for_newframe(data->bmain->eval_ctx, data->depsgraph, data->bmain, scene, data->scene_layer); | BKE_scene_graph_update_for_newframe(data->bmain->eval_ctx, data->depsgraph, data->bmain, scene, data->view_layer); | ||||
| } | } | ||||
| data->export_ok = !data->was_canceled; | data->export_ok = !data->was_canceled; | ||||
| } | } | ||||
| catch (const std::exception &e) { | catch (const std::exception &e) { | ||||
| ABC_LOG(data->settings.logger) << "Abc Export error: " << e.what() << '\n'; | ABC_LOG(data->settings.logger) << "Abc Export error: " << e.what() << '\n'; | ||||
| } | } | ||||
| catch (...) { | catch (...) { | ||||
| Show All 25 Lines | bool ABC_export( | ||||
| const struct AlembicExportParams *params, | const struct AlembicExportParams *params, | ||||
| bool as_background_job) | bool as_background_job) | ||||
| { | { | ||||
| ExportJobData *job = static_cast<ExportJobData *>(MEM_mallocN(sizeof(ExportJobData), "ExportJobData")); | ExportJobData *job = static_cast<ExportJobData *>(MEM_mallocN(sizeof(ExportJobData), "ExportJobData")); | ||||
| CTX_data_eval_ctx(C, &job->eval_ctx); | CTX_data_eval_ctx(C, &job->eval_ctx); | ||||
| job->scene = scene; | job->scene = scene; | ||||
| job->scene_layer = CTX_data_scene_layer(C); | job->view_layer = CTX_data_view_layer(C); | ||||
| job->depsgraph = CTX_data_depsgraph(C); | job->depsgraph = CTX_data_depsgraph(C); | ||||
| job->bmain = CTX_data_main(C); | job->bmain = CTX_data_main(C); | ||||
| job->export_ok = false; | job->export_ok = false; | ||||
| BLI_strncpy(job->filename, filepath, 1024); | BLI_strncpy(job->filename, filepath, 1024); | ||||
| /* Alright, alright, alright.... | /* Alright, alright, alright.... | ||||
| * | * | ||||
| * ExportJobData contains an ExportSettings containing a SimpleLogger. | * ExportJobData contains an ExportSettings containing a SimpleLogger. | ||||
| Show All 12 Lines | bool ABC_export( | ||||
| new (&job->settings) ExportSettings(); | new (&job->settings) ExportSettings(); | ||||
| job->settings.scene = job->scene; | job->settings.scene = job->scene; | ||||
| job->settings.depsgraph = job->depsgraph; | job->settings.depsgraph = job->depsgraph; | ||||
| /* Sybren: for now we only export the active scene layer. | /* Sybren: for now we only export the active scene layer. | ||||
| * Later in the 2.8 development process this may be replaced by using | * Later in the 2.8 development process this may be replaced by using | ||||
| * a specific collection for Alembic I/O, which can then be toggled | * a specific collection for Alembic I/O, which can then be toggled | ||||
| * between "real" objects and cached Alembic files. */ | * between "real" objects and cached Alembic files. */ | ||||
| job->settings.scene_layer = CTX_data_scene_layer(C); | job->settings.view_layer = CTX_data_view_layer(C); | ||||
| job->settings.frame_start = params->frame_start; | job->settings.frame_start = params->frame_start; | ||||
| job->settings.frame_end = params->frame_end; | job->settings.frame_end = params->frame_end; | ||||
| job->settings.frame_samples_xform = params->frame_samples_xform; | job->settings.frame_samples_xform = params->frame_samples_xform; | ||||
| job->settings.frame_samples_shape = params->frame_samples_shape; | job->settings.frame_samples_shape = params->frame_samples_shape; | ||||
| job->settings.shutter_open = params->shutter_open; | job->settings.shutter_open = params->shutter_open; | ||||
| job->settings.shutter_close = params->shutter_close; | job->settings.shutter_close = params->shutter_close; | ||||
| ▲ Show 20 Lines • Show All 270 Lines • ▼ Show 20 Lines | enum { | ||||
| ABC_NO_ERROR = 0, | ABC_NO_ERROR = 0, | ||||
| ABC_ARCHIVE_FAIL, | ABC_ARCHIVE_FAIL, | ||||
| ABC_UNSUPPORTED_HDF5, | ABC_UNSUPPORTED_HDF5, | ||||
| }; | }; | ||||
| struct ImportJobData { | struct ImportJobData { | ||||
| Main *bmain; | Main *bmain; | ||||
| Scene *scene; | Scene *scene; | ||||
| SceneLayer *scene_layer; | ViewLayer *view_layer; | ||||
| char filename[1024]; | char filename[1024]; | ||||
| ImportSettings settings; | ImportSettings settings; | ||||
| std::vector<AbcObjectReader *> readers; | std::vector<AbcObjectReader *> readers; | ||||
| short *stop; | short *stop; | ||||
| short *do_update; | short *do_update; | ||||
| ▲ Show 20 Lines • Show All 186 Lines • ▼ Show 20 Lines | for (iter = data->readers.begin(); iter != data->readers.end(); ++iter) { | ||||
| BKE_libblock_free_us(data->bmain, ob); | BKE_libblock_free_us(data->bmain, ob); | ||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| /* Add object to scene. */ | /* Add object to scene. */ | ||||
| Base *base; | Base *base; | ||||
| LayerCollection *lc; | LayerCollection *lc; | ||||
| SceneLayer *scene_layer = data->scene_layer; | ViewLayer *view_layer = data->view_layer; | ||||
| BKE_scene_layer_base_deselect_all(scene_layer); | BKE_view_layer_base_deselect_all(view_layer); | ||||
| lc = BKE_layer_collection_get_active(scene_layer); | lc = BKE_layer_collection_get_active(view_layer); | ||||
| if (lc == NULL) { | if (lc == NULL) { | ||||
| BLI_assert(BLI_listbase_count_ex(&scene_layer->layer_collections, 1) == 0); | BLI_assert(BLI_listbase_count_ex(&view_layer->layer_collections, 1) == 0); | ||||
| /* when there is no collection linked to this SceneLayer, create one */ | /* when there is no collection linked to this ViewLayer, create one */ | ||||
| SceneCollection *sc = BKE_collection_add(data->scene, NULL, NULL); | SceneCollection *sc = BKE_collection_add(data->scene, NULL, NULL); | ||||
| lc = BKE_collection_link(scene_layer, sc); | lc = BKE_collection_link(view_layer, sc); | ||||
| } | } | ||||
| for (iter = data->readers.begin(); iter != data->readers.end(); ++iter) { | for (iter = data->readers.begin(); iter != data->readers.end(); ++iter) { | ||||
| Object *ob = (*iter)->object(); | Object *ob = (*iter)->object(); | ||||
| ob->lay = data->scene->lay; | ob->lay = data->scene->lay; | ||||
| BKE_collection_object_add(data->scene, lc->scene_collection, ob); | BKE_collection_object_add(data->scene, lc->scene_collection, ob); | ||||
| base = BKE_scene_layer_base_find(scene_layer, ob); | base = BKE_view_layer_base_find(view_layer, ob); | ||||
| BKE_scene_layer_base_select(scene_layer, base); | BKE_view_layer_base_select(view_layer, base); | ||||
| DEG_id_tag_update_ex(data->bmain, &ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME); | DEG_id_tag_update_ex(data->bmain, &ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME); | ||||
| } | } | ||||
| DEG_relations_tag_update(data->bmain); | DEG_relations_tag_update(data->bmain); | ||||
| } | } | ||||
| for (iter = data->readers.begin(); iter != data->readers.end(); ++iter) { | for (iter = data->readers.begin(); iter != data->readers.end(); ++iter) { | ||||
| Show All 31 Lines | bool ABC_import(bContext *C, const char *filepath, float scale, bool is_sequence, | ||||
| bool set_frame_range, int sequence_len, int offset, | bool set_frame_range, int sequence_len, int offset, | ||||
| bool validate_meshes, bool as_background_job) | bool validate_meshes, bool as_background_job) | ||||
| { | { | ||||
| /* Using new here since MEM_* funcs do not call ctor to properly initialize | /* Using new here since MEM_* funcs do not call ctor to properly initialize | ||||
| * data. */ | * data. */ | ||||
| ImportJobData *job = new ImportJobData(); | ImportJobData *job = new ImportJobData(); | ||||
| job->bmain = CTX_data_main(C); | job->bmain = CTX_data_main(C); | ||||
| job->scene = CTX_data_scene(C); | job->scene = CTX_data_scene(C); | ||||
| job->scene_layer = CTX_data_scene_layer(C); | job->view_layer = CTX_data_view_layer(C); | ||||
| job->import_ok = false; | job->import_ok = false; | ||||
| BLI_strncpy(job->filename, filepath, 1024); | BLI_strncpy(job->filename, filepath, 1024); | ||||
| job->settings.scale = scale; | job->settings.scale = scale; | ||||
| job->settings.is_sequence = is_sequence; | job->settings.is_sequence = is_sequence; | ||||
| job->settings.set_frame_range = set_frame_range; | job->settings.set_frame_range = set_frame_range; | ||||
| job->settings.sequence_len = sequence_len; | job->settings.sequence_len = sequence_len; | ||||
| job->settings.sequence_offset = offset; | job->settings.sequence_offset = offset; | ||||
| ▲ Show 20 Lines • Show All 128 Lines • Show Last 20 Lines | |||||