[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(&params);
+  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(&params);
+  }
+  /* 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