[Bf-blender-cvs] [7e26866f788] greasepencil-object: GPencil: More changes to fix SVG Storyboard

Antonio Vazquez noreply at git.blender.org
Sat Aug 15 15:40:37 CEST 2020


Commit: 7e26866f788e39f71096483b599d2359e867daf7
Author: Antonio Vazquez
Date:   Sat Aug 15 15:40:15 2020 +0200
Branches: greasepencil-object
https://developer.blender.org/rB7e26866f788e39f71096483b599d2359e867daf7

GPencil: More changes to fix SVG Storyboard

There was a problem with the output file name.

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

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_export_base.h
M	source/blender/io/gpencil/intern/gpencil_io_export_svg.cc
M	source/blender/io/gpencil/intern/gpencil_io_export_svg.h

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

diff --git a/source/blender/io/gpencil/gpencil_io_exporter.h b/source/blender/io/gpencil/gpencil_io_exporter.h
index e1620f04504..bf5ae1a6fb1 100644
--- a/source/blender/io/gpencil/gpencil_io_exporter.h
+++ b/source/blender/io/gpencil/gpencil_io_exporter.h
@@ -42,7 +42,7 @@ struct GpencilExportParams {
   double frame_start;
   /** End frame.  */
   double frame_end;
-  /** Frame subfix. */
+  /** File subfix. */
   char file_subfix[5];
   /* Current frame. */
   int32_t framenum;
diff --git a/source/blender/io/gpencil/intern/gpencil_io_capi.cc b/source/blender/io/gpencil/intern/gpencil_io_capi.cc
index 9248392ad3f..18705805e5a 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_capi.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_capi.cc
@@ -45,7 +45,8 @@
 
 using blender::io::gpencil::GpencilExporterSVG;
 
-static bool is_keyframe_empty(bContext *C, bGPdata *gpd, int framenum, bool use_markers)
+/* Check if frame is included. */
+static bool is_keyframe_selected(bContext *C, bGPdata *gpd, int framenum, bool use_markers)
 {
   if (!use_markers) {
     /* Check if exist a frame. */
@@ -89,10 +90,10 @@ static bool gpencil_io_export_frame(GpencilExporterSVG *exporter,
       exporter->set_frame_offset(frame_offset);
       std::string subfix = iparams->file_subfix;
       if (newpage) {
-        exporter->add_newpage();
+        result |= exporter->add_newpage();
       }
       if (body) {
-        exporter->add_body();
+        result |= exporter->add_body();
       }
       if (savepage) {
         result = exporter->write(subfix);
@@ -108,14 +109,20 @@ static bool gpencil_io_export_frame(GpencilExporterSVG *exporter,
 }
 
 /* Export full animation in Storyboard mode. */
-static bool gpencil_io_export_storyboard(
-    Main *bmain, Depsgraph *depsgraph, Scene *scene, Object *ob, GpencilExportParams *iparams)
+static bool gpencil_io_export_storyboard(Main *bmain,
+                                         Depsgraph *depsgraph,
+                                         Scene *scene,
+                                         Object *ob,
+                                         const char *filename,
+                                         GpencilExportParams *iparams)
 {
   Object *ob_eval_ = (Object *)DEG_get_evaluated_id(depsgraph, &ob->id);
   bGPdata *gpd_eval = (bGPdata *)ob_eval_->data;
   bool done = false;
 
   GpencilExporterSVG *exporter = new GpencilExporterSVG(iparams);
+  /* Prepare output filename with full path. */
+  exporter->set_out_filename(filename);
 
   /* Storyboard only works in camera view. */
   RegionView3D *rv3d = (RegionView3D *)iparams->region->regiondata;
@@ -152,7 +159,7 @@ static bool gpencil_io_export_storyboard(
   const bool use_markers = ((iparams->flag & GP_EXPORT_MARKERS) != 0);
 
   for (int i = iparams->frame_start; i < iparams->frame_end + 1; i++) {
-    if (is_keyframe_empty(iparams->C, gpd_eval, i, use_markers)) {
+    if (is_keyframe_selected(iparams->C, gpd_eval, i, use_markers)) {
       continue;
     }
     shot++;
@@ -198,6 +205,8 @@ static bool gpencil_io_export_storyboard(
       /* Create a new class object per page. */
       delete exporter;
       exporter = new GpencilExporterSVG(iparams);
+      /* Prepare output filename with full path. */
+      exporter->set_out_filename(filename);
     }
   }
 
@@ -226,20 +235,20 @@ bool gpencil_io_export(const char *filename, GpencilExportParams *iparams)
   copy_v2_v2(iparams->paper_size, iparams->paper_size);
 
   if (!is_storyboard) {
-    GpencilExporterSVG writter = GpencilExporterSVG(iparams);
+    GpencilExporterSVG exporter = GpencilExporterSVG(iparams);
     /* Prepare output filename with full path. */
-    writter.set_out_filename(filename);
+    exporter.set_out_filename(filename);
 
     float no_offset[2] = {0.0f, 0.0f};
     float ratio[2] = {1.0f, 1.0f};
-    writter.set_frame_ratio(ratio);
+    exporter.set_frame_ratio(ratio);
     iparams->file_subfix[0] = '\0';
-    done |= gpencil_io_export_frame(&writter, iparams, no_offset, true, true, true);
+    done |= gpencil_io_export_frame(&exporter, iparams, no_offset, true, true, true);
   }
   else {
     int oldframe = (int)DEG_get_ctime(depsgraph);
 
-    done |= gpencil_io_export_storyboard(bmain, depsgraph, scene, ob, iparams);
+    done |= gpencil_io_export_storyboard(bmain, depsgraph, scene, ob, filename, iparams);
 
     /* Return frame state and DB to original state. */
     CFRA = oldframe;
diff --git a/source/blender/io/gpencil/intern/gpencil_io_export_base.h b/source/blender/io/gpencil/intern/gpencil_io_export_base.h
index 0f6c3aa3b6c..49787171865 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_export_base.h
+++ b/source/blender/io/gpencil/intern/gpencil_io_export_base.h
@@ -44,8 +44,8 @@ class GpencilExporter {
 
  public:
   GpencilExporter(const struct GpencilExportParams *iparams);
-  virtual void add_newpage(void) = 0;
-  virtual void add_body(void) = 0;
+  virtual bool add_newpage(void) = 0;
+  virtual bool add_body(void) = 0;
   virtual bool write(std::string subfix) = 0;
 
   void set_out_filename(const char *filename);
diff --git a/source/blender/io/gpencil/intern/gpencil_io_export_svg.cc b/source/blender/io/gpencil/intern/gpencil_io_export_svg.cc
index 2fce9d20421..f1a63f6648b 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_export_svg.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_export_svg.cc
@@ -69,21 +69,24 @@ GpencilExporterSVG::GpencilExporterSVG(const struct GpencilExportParams *iparams
   invert_axis_[1] = true;
 }
 
-void GpencilExporterSVG::add_newpage(void)
+bool GpencilExporterSVG::add_newpage(void)
 {
   create_document_header();
+  return true;
 }
 
-void GpencilExporterSVG::add_body(void)
+bool GpencilExporterSVG::add_body(void)
 {
   export_gpencil_layers();
+  return true;
 }
 
 bool GpencilExporterSVG::write(std::string subfix)
 {
   bool result = true;
   /* Save File. */
-  /* Add frame to filename. */
+
+  /* Add page to filename. */
   std::string frame_file = out_filename_;
   size_t found = frame_file.find_last_of(".");
   if (found != std::string::npos) {
@@ -147,12 +150,11 @@ void GpencilExporterSVG::create_document_header(void)
 
   /* Scene name. */
   if ((params_.flag & GP_EXPORT_STORYBOARD_MODE) != 0) {
-    add_text(main_node,
-             30.0f,
-             params_.paper_size[1] - 30.0f,
-             std::string(scene->id.name + 2),
-             12.0f,
-             "#000000");
+    char scenetxt[96];
+    sprintf(scenetxt, "Scene: %s", scene->id.name + 2);
+
+    add_text(
+        main_node, 30.0f, params_.paper_size[1] - 30.0f, std::string(scenetxt), 12.0f, "#000000");
   }
 }
 
diff --git a/source/blender/io/gpencil/intern/gpencil_io_export_svg.h b/source/blender/io/gpencil/intern/gpencil_io_export_svg.h
index f575f926a62..6c644308c41 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_export_svg.h
+++ b/source/blender/io/gpencil/intern/gpencil_io_export_svg.h
@@ -42,9 +42,9 @@ class GpencilExporterSVG : public GpencilExporter {
 
  public:
   GpencilExporterSVG(const struct GpencilExportParams *iparams);
-  virtual void add_newpage(void);
-  virtual void add_body(void);
-  virtual bool write(std::string subfix);
+  bool add_newpage(void);
+  bool add_body(void);
+  bool write(std::string subfix);
 
  protected:
   void add_rect(pugi::xml_node node,



More information about the Bf-blender-cvs mailing list