[Bf-blender-cvs] [ba00eff1889] greasepencil-object: GPencil: Export a range of frames to SVG
Antonio Vazquez
noreply at git.blender.org
Sun Jul 26 18:22:09 CEST 2020
Commit: ba00eff1889e18313b414e43675eda924626b93e
Author: Antonio Vazquez
Date: Sun Jul 26 18:22:00 2020 +0200
Branches: greasepencil-object
https://developer.blender.org/rBba00eff1889e18313b414e43675eda924626b93e
GPencil: Export a range of frames to SVG
===================================================================
M source/blender/editors/io/io_gpencil.c
M source/blender/io/gpencil/gpencil_io_exporter.h
M source/blender/io/gpencil/intern/gpencil_io_base.h
M source/blender/io/gpencil/intern/gpencil_io_capi.cc
M source/blender/io/gpencil/intern/gpencil_io_svg.cc
M source/blender/io/gpencil/intern/gpencil_io_svg.h
===================================================================
diff --git a/source/blender/editors/io/io_gpencil.c b/source/blender/editors/io/io_gpencil.c
index 3f0711e1cef..6c9d02bd2e4 100644
--- a/source/blender/editors/io/io_gpencil.c
+++ b/source/blender/editors/io/io_gpencil.c
@@ -40,6 +40,7 @@
#include "BKE_gpencil.h"
#include "BKE_main.h"
#include "BKE_report.h"
+#include "BKE_scene.h"
#include "BKE_screen.h"
#include "BLI_listbase.h"
@@ -58,6 +59,9 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_query.h"
+
#include "io_gpencil.h"
#include "gpencil_io_exporter.h"
@@ -105,6 +109,9 @@ static ARegion *get_invoke_region(bContext *C)
static int wm_gpencil_export_exec(bContext *C, wmOperator *op)
{
+ Main *bmain = CTX_data_main(C);
+ Depsgraph *depsgraph = CTX_data_depsgraph_pointer(C);
+
if (!RNA_struct_property_is_set(op->ptr, "filepath")) {
BKE_report(op->reports, RPT_ERROR, "No filename given");
return OPERATOR_CANCELLED;
@@ -140,7 +147,17 @@ static int wm_gpencil_export_exec(bContext *C, wmOperator *op)
params.frame_end = EFRA;
}
- gpencil_io_export(¶ms);
+ int oldframe = (int)DEG_get_ctime(depsgraph);
+ for (int i = params.frame_start; i < params.frame_end + 1; i++) {
+ CFRA = i;
+ BKE_scene_graph_update_for_newframe(depsgraph, bmain);
+ sprintf(params.frame, "%04d", i);
+
+ gpencil_io_export(¶ms);
+ }
+ /* return frame state and DB to original state */
+ CFRA = oldframe;
+ BKE_scene_graph_update_for_newframe(depsgraph, bmain);
BKE_report(op->reports, RPT_INFO, "SVG export file created");
diff --git a/source/blender/io/gpencil/gpencil_io_exporter.h b/source/blender/io/gpencil/gpencil_io_exporter.h
index c409d289253..83d3c5037f8 100644
--- a/source/blender/io/gpencil/gpencil_io_exporter.h
+++ b/source/blender/io/gpencil/gpencil_io_exporter.h
@@ -44,6 +44,8 @@ struct GpencilExportParams {
double frame_start;
/** End frame. */
double frame_end;
+ /** Frame subfix. */
+ char frame[5];
};
bool gpencil_io_export(const struct GpencilExportParams *params);
diff --git a/source/blender/io/gpencil/intern/gpencil_io_base.h b/source/blender/io/gpencil/intern/gpencil_io_base.h
index 8da317ed508..48f419de1aa 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_base.h
+++ b/source/blender/io/gpencil/intern/gpencil_io_base.h
@@ -38,7 +38,7 @@ namespace gpencil {
class GpencilExporter {
public:
- virtual bool write(void) = 0;
+ virtual bool write(std::string actual_frame) = 0;
void set_out_filename(struct bContext *C, char *filename);
/* Geometry functions. */
diff --git a/source/blender/io/gpencil/intern/gpencil_io_capi.cc b/source/blender/io/gpencil/intern/gpencil_io_capi.cc
index 033e349ebfc..81dbf0e20c4 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_capi.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_capi.cc
@@ -18,9 +18,9 @@
* \ingroup bgpencil
*/
-#include "../gpencil_io_exporter.h"
#include <stdio.h>
+#include "../gpencil_io_exporter.h"
#include "gpencil_io_svg.h"
using blender::io::gpencil::GpencilExporterSVG;
@@ -30,7 +30,7 @@ bool gpencil_io_export(const GpencilExportParams *params)
switch (params->mode) {
case GP_EXPORT_TO_SVG: {
GpencilExporterSVG writter = GpencilExporterSVG(params);
- writter.write();
+ writter.write(std::string(params->frame));
break;
}
default:
diff --git a/source/blender/io/gpencil/intern/gpencil_io_svg.cc b/source/blender/io/gpencil/intern/gpencil_io_svg.cc
index 3876c8f6653..10eb6521034 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_svg.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_svg.cc
@@ -74,14 +74,21 @@ GpencilExporterSVG::GpencilExporterSVG(const struct GpencilExportParams *params)
}
/* Main write method for SVG format. */
-bool GpencilExporterSVG::write(void)
+bool GpencilExporterSVG::write(std::string actual_frame)
{
create_document_header();
export_style_list();
export_layers();
- doc.save_file(out_filename);
+ /* Add frame to filename. */
+ std::string frame_file = out_filename;
+ size_t found = frame_file.find_first_of(".", 0);
+ if (found != std::string::npos) {
+ frame_file.replace(found, 8, actual_frame + ".svg");
+ }
+
+ doc.save_file(frame_file.c_str());
return true;
}
diff --git a/source/blender/io/gpencil/intern/gpencil_io_svg.h b/source/blender/io/gpencil/intern/gpencil_io_svg.h
index a9e34bb997e..1cf5ab47a95 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_svg.h
+++ b/source/blender/io/gpencil/intern/gpencil_io_svg.h
@@ -40,7 +40,7 @@ class GpencilExporterSVG : public GpencilExporter {
public:
GpencilExporterSVG(const struct GpencilExportParams *params);
- bool write(void);
+ bool write(std::string actual_frame);
private:
/* XML doc. */
More information about the Bf-blender-cvs
mailing list