[Bf-blender-cvs] [3361620d68a] greasepencil-object: GPencil: reorganize code

Antonio Vazquez noreply at git.blender.org
Sat Jul 25 16:33:27 CEST 2020


Commit: 3361620d68a99ad3bf10e2366f81aa799c89262c
Author: Antonio Vazquez
Date:   Thu Jul 23 23:06:13 2020 +0200
Branches: greasepencil-object
https://developer.blender.org/rB3361620d68a99ad3bf10e2366f81aa799c89262c

GPencil: reorganize code

Prepare to have more exporter types

===================================================================

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_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 6b33b508fbe..a85cfc54167 100644
--- a/source/blender/editors/io/io_gpencil.c
+++ b/source/blender/editors/io/io_gpencil.c
@@ -100,8 +100,6 @@ static int wm_gpencil_export_invoke(bContext *C, wmOperator *op, const wmEvent *
 
 static int wm_gpencil_export_exec(bContext *C, wmOperator *op)
 {
-  Scene *scene = CTX_data_scene(C);
-
   if (!RNA_struct_property_is_set(op->ptr, "filepath")) {
     BKE_report(op->reports, RPT_ERROR, "No filename given");
     return OPERATOR_CANCELLED;
@@ -112,12 +110,23 @@ static int wm_gpencil_export_exec(bContext *C, wmOperator *op)
   Object *ob = CTX_data_active_object(C);
 
   struct GpencilExportParams params = {
-      .frame_start = (params.frame_start == INT_MIN) ? SFRA : RNA_int_get(op->ptr, "start"),
-      .frame_end = (params.frame_end == INT_MIN) ? EFRA : RNA_int_get(op->ptr, "end"),
+      .C = C,
       .ob = ob,
+      .filename = filename,
+      .mode = GP_EXPORT_TO_SVG,
+      .frame_start = RNA_int_get(op->ptr, "start"),
+      .frame_end = RNA_int_get(op->ptr, "end"),
   };
+  /* Take some defaults from the scene, if not specified explicitly. */
+  Scene *scene = CTX_data_scene(C);
+  if (params.frame_start == INT_MIN) {
+    params.frame_start = SFRA;
+  }
+  if (params.frame_end == INT_MIN) {
+    params.frame_end = EFRA;
+  }
 
-  gpencil_io_export(C, filename, &params);
+  gpencil_io_export(&params);
 
   return OPERATOR_FINISHED;
 }
diff --git a/source/blender/io/gpencil/gpencil_io_exporter.h b/source/blender/io/gpencil/gpencil_io_exporter.h
index 1b9e53e2b16..d71cf505a79 100644
--- a/source/blender/io/gpencil/gpencil_io_exporter.h
+++ b/source/blender/io/gpencil/gpencil_io_exporter.h
@@ -26,16 +26,25 @@ extern "C" {
 struct Scene;
 struct bContext;
 
+typedef enum eGpencilExport_Modes {
+  GP_EXPORT_TO_SVG = 0,
+} eGpencilExport_Modes;
+
 struct GpencilExportParams {
-  double frame_start;
-  double frame_end;
+  bContext *C;
   /** Grease pencil object. */
   struct Object *ob;
+  /** Output filename.  */
+  char *filename;
+  /** Export mode.  */
+  short mode;
+  /** Start frame.  */
+  double frame_start;
+  /** End frame.  */
+  double frame_end;
 };
 
-bool gpencil_io_export(struct bContext *C,
-                       const char *filepath,
-                       const struct GpencilExportParams *params);
+bool gpencil_io_export(const struct GpencilExportParams *params);
 
 #ifdef __cplusplus
 }
diff --git a/source/blender/io/gpencil/intern/gpencil_io_capi.cc b/source/blender/io/gpencil/intern/gpencil_io_capi.cc
index 1d90214fa88..9c470f34e34 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_capi.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_capi.cc
@@ -23,10 +23,10 @@
 
 #include "gpencil_io_svg.h"
 
-bool gpencil_io_export(bContext *C, const char *filepath, const GpencilExportParams *params)
+bool gpencil_io_export(const GpencilExportParams *params)
 {
-  blender::io::gpencil::GpencilSVGwriter mywriter;
-  mywriter.write(C, filepath, params);
+  blender::io::gpencil::Gpencilwriter mywriter(params);
+  mywriter.export_object();
 
   return true;
 }
diff --git a/source/blender/io/gpencil/intern/gpencil_io_svg.cc b/source/blender/io/gpencil/intern/gpencil_io_svg.cc
index cf6e46cad85..cdb8128b1e2 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_svg.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_svg.cc
@@ -43,32 +43,60 @@ namespace io {
 namespace gpencil {
 
 /* Constructor. */
-GpencilSVGwriter::GpencilSVGwriter(void)
+Gpencilwriter::Gpencilwriter(const struct GpencilExportParams *params)
 {
-  std::cout << "Constructor\n";
+  this->params = GpencilExportParams();
+  this->params.frame_start = params->frame_start;
+  this->params.frame_end = params->frame_end;
+  this->params.ob = params->ob;
+  this->params.C = params->C;
+  this->params.filename = params->filename;
+  this->params.mode = params->mode;
 }
 
-bool GpencilSVGwriter::write(struct bContext *C,
-                             const char *filepath,
-                             const struct GpencilExportParams *params)
+/**
+ * Select type of export
+ * @return
+ */
+bool Gpencilwriter::export_object(void)
 {
-  Main *bmain = CTX_data_main(C);
+  switch (this->params.mode) {
+    case GP_EXPORT_TO_SVG: {
+      GpencilwriterSVG writter = GpencilwriterSVG(&params);
+      writter.write();
+      break;
+    }
+    default:
+      break;
+  }
+
+  return true;
+}
+
+/* Constructor. */
+GpencilwriterSVG::GpencilwriterSVG(struct GpencilExportParams *params)
+{
+  this->params = params;
+}
+
+/* Main write method for SVG format. */
+bool GpencilwriterSVG::write(void)
+{
+  Main *bmain = CTX_data_main(this->params->C);
   char svg_filename[FILE_MAX];
-  BLI_strncpy(svg_filename, filepath, FILE_MAX);
+  BLI_strncpy(svg_filename, this->params->filename, FILE_MAX);
   BLI_path_abs(svg_filename, BKE_main_blendfile_path(bmain));
 
-  Object *ob = params->ob;
+  Object *ob = this->params->ob;
 
   //#ifdef WIN32
   //  UTF16_ENCODE(svg_filename);
   //#endif
 
   /* Create simple XML. */
-  pugi::xml_document doc;
-
   // tag::code[]
   // add node with some name
-  pugi::xml_node node = doc.append_child("node");
+  pugi::xml_node node = this->doc.append_child("node");
 
   // add description node with text child
   pugi::xml_node descr = node.append_child("object");
diff --git a/source/blender/io/gpencil/intern/gpencil_io_svg.h b/source/blender/io/gpencil/intern/gpencil_io_svg.h
index ece8e4e49a3..95d560ebc2f 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_svg.h
+++ b/source/blender/io/gpencil/intern/gpencil_io_svg.h
@@ -18,6 +18,7 @@
 /** \file
  * \ingroup bgpencil
  */
+#include "pugixml.hpp"
 
 struct Main;
 struct GpencilExportParams;
@@ -26,11 +27,25 @@ namespace blender {
 namespace io {
 namespace gpencil {
 
-class GpencilSVGwriter {
+class Gpencilwriter {
 
  public:
-  GpencilSVGwriter(void);
-  bool write(struct bContext *C, const char *filepath, const struct GpencilExportParams *params);
+  Gpencilwriter(const struct GpencilExportParams *params);
+  bool export_object(void);
+
+ private:
+  GpencilExportParams params;
+};
+
+class GpencilwriterSVG {
+
+ public:
+  GpencilwriterSVG(struct GpencilExportParams *params);
+  bool write(void);
+
+ private:
+  GpencilExportParams *params;
+  pugi::xml_document doc;
 };
 
 }  // namespace gpencil



More information about the Bf-blender-cvs mailing list