GPencil: New option to export PDF full scene

This new mode export all frames of the scene.

Reviewed By: pepeland

Differential Revision: https://developer.blender.org/D13055
This commit is contained in:
Antonio Vazquez 2021-11-08 16:03:30 +01:00
parent c865577643
commit e1c4e5df22
3 changed files with 31 additions and 22 deletions

View File

@ -410,6 +410,7 @@ void WM_OT_gpencil_export_pdf(wmOperatorType *ot)
static const EnumPropertyItem gpencil_export_frame_items[] = {
{GP_EXPORT_FRAME_ACTIVE, "ACTIVE", 0, "Active", "Include only active frame"},
{GP_EXPORT_FRAME_SELECTED, "SELECTED", 0, "Selected", "Include selected frames"},
{GP_EXPORT_FRAME_SCENE, "SCENE", 0, "Scene", "Include all scene frames"},
{0, NULL, 0, NULL, NULL},
};

View File

@ -82,6 +82,7 @@ typedef enum eGpencilExportSelect {
typedef enum eGpencilExportFrame {
GP_EXPORT_FRAME_ACTIVE = 0,
GP_EXPORT_FRAME_SELECTED = 1,
GP_EXPORT_FRAME_SCENE = 2,
} eGpencilExportFrame;
bool gpencil_io_export(const char *filename, struct GpencilIOParams *iparams);

View File

@ -112,32 +112,39 @@ static bool gpencil_io_export_pdf(Depsgraph *depsgraph,
exporter->frame_number_set(iparams->frame_cur);
result |= exporter->new_document();
const bool use_frame_selected = (iparams->frame_mode == GP_EXPORT_FRAME_SELECTED);
if (use_frame_selected) {
for (int32_t i = iparams->frame_start; i < iparams->frame_end + 1; i++) {
if (!is_keyframe_included(gpd_eval, i, use_frame_selected)) {
continue;
}
CFRA = i;
BKE_scene_graph_update_for_newframe(depsgraph);
switch (iparams->frame_mode) {
case GP_EXPORT_FRAME_ACTIVE: {
exporter->prepare_camera_params(scene, iparams);
exporter->frame_number_set(i);
exporter->add_newpage();
exporter->add_body();
result = exporter->write();
break;
}
result = exporter->write();
/* Back to original frame. */
exporter->frame_number_set(iparams->frame_cur);
CFRA = iparams->frame_cur;
BKE_scene_camera_switch_update(scene);
BKE_scene_graph_update_for_newframe(depsgraph);
}
else {
exporter->prepare_camera_params(scene, iparams);
exporter->add_newpage();
exporter->add_body();
result = exporter->write();
case GP_EXPORT_FRAME_SELECTED:
case GP_EXPORT_FRAME_SCENE: {
for (int32_t i = iparams->frame_start; i < iparams->frame_end + 1; i++) {
if ((iparams->frame_mode == GP_EXPORT_FRAME_SELECTED) &&
(!is_keyframe_included(gpd_eval, i, true))) {
continue;
}
CFRA = i;
BKE_scene_graph_update_for_newframe(depsgraph);
exporter->prepare_camera_params(scene, iparams);
exporter->frame_number_set(i);
exporter->add_newpage();
exporter->add_body();
}
result = exporter->write();
/* Back to original frame. */
exporter->frame_number_set(iparams->frame_cur);
CFRA = iparams->frame_cur;
BKE_scene_camera_switch_update(scene);
BKE_scene_graph_update_for_newframe(depsgraph);
break;
}
default:
break;
}
return result;