[Bf-blender-cvs] [7d166ddf2a3] greasepencil-object: GPencil: reorganize code to make it more C++ish

Antonio Vazquez noreply at git.blender.org
Wed Jul 29 10:35:37 CEST 2020


Commit: 7d166ddf2a390946f692d366bf0c77eb3690b8a2
Author: Antonio Vazquez
Date:   Wed Jul 29 10:20:09 2020 +0200
Branches: greasepencil-object
https://developer.blender.org/rB7d166ddf2a390946f692d366bf0c77eb3690b8a2

GPencil: reorganize code to make it more C++ish

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

M	source/blender/io/gpencil/intern/gpencil_io_base.cc
M	source/blender/io/gpencil/intern/gpencil_io_base.h
M	source/blender/io/gpencil/intern/gpencil_io_svg.cc

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

diff --git a/source/blender/io/gpencil/intern/gpencil_io_base.cc b/source/blender/io/gpencil/intern/gpencil_io_base.cc
index da65e7d8a8c..d5530913b4e 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_base.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_base.cc
@@ -27,6 +27,7 @@
 #include "BKE_gpencil.h"
 #include "BKE_gpencil_geom.h"
 #include "BKE_main.h"
+#include "BKE_material.h"
 
 #include "BLI_blenlib.h"
 #include "BLI_math.h"
@@ -35,6 +36,7 @@
 #include "BLI_utildefines.h"
 
 #include "DNA_gpencil_types.h"
+#include "DNA_material_types.h"
 #include "DNA_object_types.h"
 #include "DNA_screen_types.h"
 
@@ -55,6 +57,31 @@ namespace blender {
 namespace io {
 namespace gpencil {
 
+/* Constructor. */
+GpencilExporter::GpencilExporter(const struct GpencilExportParams *params)
+{
+  this->params.frame_start = params->frame_start;
+  this->params.frame_end = params->frame_end;
+  this->params.ob = params->ob;
+  this->params.region = params->region;
+  this->params.C = params->C;
+  this->params.filename = params->filename;
+  this->params.mode = params->mode;
+  this->params.flag = params->flag;
+
+  /* Easy access data. */
+  this->bmain = CTX_data_main(params->C);
+  this->depsgraph = CTX_data_depsgraph_pointer(params->C);
+  this->rv3d = (RegionView3D *)params->region->regiondata;
+  this->gpd = (bGPdata *)params->ob->data;
+
+  this->winx = params->region->winx;
+  this->winy = params->region->winy;
+
+  /* Prepare output filename with full path. */
+  set_out_filename(params->filename);
+}
+
 /**
  * Set output file input_text full path.
  * \param C: Context.
@@ -71,7 +98,7 @@ void GpencilExporter::set_out_filename(char *filename)
 }
 
 /* Convert to screen space.
- * TODO: Cleanup using a more generic BKE function. */
+ * TODO: Cleanup using a more generic BKE function.?? */
 bool GpencilExporter::gpencil_3d_point_to_screen_space(const float co[3], float r_co[2])
 {
   float parent_co[3];
@@ -84,11 +111,11 @@ bool GpencilExporter::gpencil_3d_point_to_screen_space(const float co[3], float
       copy_v2_v2(r_co, screen_co);
       /* Invert X axis. */
       if (invert_axis[0]) {
-        r_co[0] = params.region->winx - r_co[0];
+        r_co[0] = winx - r_co[0];
       }
       /* Invert Y axis. */
       if (invert_axis[1]) {
-        r_co[1] = params.region->winy - r_co[1];
+        r_co[1] = winy - r_co[1];
       }
 
       return true;
@@ -99,11 +126,11 @@ bool GpencilExporter::gpencil_3d_point_to_screen_space(const float co[3], float
 
   /* Invert X axis. */
   if (invert_axis[0]) {
-    r_co[0] = params.region->winx - r_co[0];
+    r_co[0] = winx - r_co[0];
   }
   /* Invert Y axis. */
   if (invert_axis[1]) {
-    r_co[1] = params.region->winy - r_co[1];
+    r_co[1] = winy - r_co[1];
   }
 
   return false;
@@ -217,6 +244,62 @@ std::string GpencilExporter::to_lower_string(char *input_text)
 
   return text;
 }
+
+struct bGPDlayer *GpencilExporter::gpl_current_get(void)
+{
+  return gpl_cur;
+}
+
+void GpencilExporter::gpl_current_set(struct bGPDlayer *gpl)
+{
+  gpl_cur = gpl;
+  BKE_gpencil_parent_matrix_get(depsgraph, params.ob, gpl, diff_mat);
+}
+struct bGPDframe *GpencilExporter::gpf_current_get(void)
+{
+  return gpf_cur;
+}
+
+void GpencilExporter::gpf_current_set(struct bGPDframe *gpf)
+{
+  gpf_cur = gpf;
+}
+struct bGPDstroke *GpencilExporter::gps_current_get(void)
+{
+  return gps_cur;
+}
+
+void GpencilExporter::gps_current_set(struct bGPDstroke *gps)
+{
+  gps_cur = gps;
+  gp_style = BKE_gpencil_material_settings(params.ob, gps->mat_nr + 1);
+  gp_style_current_set(gp_style);
+}
+
+void GpencilExporter::gp_style_current_set(MaterialGPencilStyle *gp_style)
+{
+  this->gp_style = gp_style;
+  is_stroke = ((gp_style->flag & GP_MATERIAL_STROKE_SHOW) &&
+               (gp_style->stroke_rgba[3] > GPENCIL_ALPHA_OPACITY_THRESH));
+  is_fill = ((gp_style->flag & GP_MATERIAL_FILL_SHOW) &&
+             (gp_style->fill_rgba[3] > GPENCIL_ALPHA_OPACITY_THRESH));
+}
+
+struct MaterialGPencilStyle *GpencilExporter::gp_style_current_get(void)
+{
+  return gp_style;
+}
+
+bool GpencilExporter::gp_style_is_stroke(void)
+{
+  return is_stroke;
+}
+
+bool GpencilExporter::gp_style_is_fill(void)
+{
+  return is_fill;
+}
+
 }  // namespace gpencil
 }  // namespace io
 }  // namespace blender
diff --git a/source/blender/io/gpencil/intern/gpencil_io_base.h b/source/blender/io/gpencil/intern/gpencil_io_base.h
index e878b1ea80f..3601573026e 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_base.h
+++ b/source/blender/io/gpencil/intern/gpencil_io_base.h
@@ -24,11 +24,7 @@
 
 #include "BLI_path_util.h"
 
-#include "BKE_gpencil.h"
-#include "BKE_material.h"
-
 #include "DNA_defs.h"
-#include "DNA_gpencil_types.h"
 
 #include "gpencil_io_exporter.h"
 
@@ -49,8 +45,8 @@ namespace gpencil {
 class GpencilExporter {
 
  public:
+  GpencilExporter(const struct GpencilExportParams *params);
   virtual bool write(std::string actual_frame) = 0;
-  void set_out_filename(char *filename);
 
   /* Geometry functions. */
   bool gpencil_3d_point_to_screen_space(const float co[3], float r_co[2]);
@@ -73,44 +69,29 @@ class GpencilExporter {
   struct bGPdata *gpd;
   struct Main *bmain;
   struct RegionView3D *rv3d;
+  int winx, winy;
+
+  struct bGPDlayer *gpl_current_get(void);
+  struct bGPDframe *gpf_current_get(void);
+  struct bGPDstroke *gps_current_get(void);
+  struct MaterialGPencilStyle *gp_style_current_get(void);
+  bool gp_style_is_stroke(void);
+  bool gp_style_is_fill(void);
 
-  struct bGPDlayer *gpl_current_get(void)
-  {
-    return gpl_cur;
-  }
-  void gpl_current_set(struct bGPDlayer *gpl)
-  {
-    gpl_cur = gpl;
-    BKE_gpencil_parent_matrix_get(depsgraph, params.ob, gpl, diff_mat);
-  }
-  struct bGPDframe *gpf_current_get(void)
-  {
-    return gpf_cur;
-  }
-  void gpf_current_set(struct bGPDframe *gpf)
-  {
-    gpf_cur = gpf;
-  }
-  struct bGPDstroke *gps_current_get(void)
-  {
-    return gps_cur;
-  }
-  void gps_current_set(struct bGPDstroke *gps)
-  {
-    gps_cur = gps;
-    gp_style = BKE_gpencil_material_settings(params.ob, gps->mat_nr + 1);
-  }
-
-  struct MaterialGPencilStyle *gp_style_current_get(void)
-  {
-    return gp_style;
-  }
+  void gpl_current_set(struct bGPDlayer *gpl);
+  void gpf_current_set(struct bGPDframe *gpf);
+  void gps_current_set(struct bGPDstroke *gps);
+  void gp_style_current_set(MaterialGPencilStyle *gp_style);
 
  private:
   struct bGPDlayer *gpl_cur;
   struct bGPDframe *gpf_cur;
   struct bGPDstroke *gps_cur;
   struct MaterialGPencilStyle *gp_style;
+  bool is_stroke;
+  bool is_fill;
+
+  void set_out_filename(char *filename);
 };
 
 }  // namespace gpencil
diff --git a/source/blender/io/gpencil/intern/gpencil_io_svg.cc b/source/blender/io/gpencil/intern/gpencil_io_svg.cc
index 2916474d4aa..ae6ca3c0e62 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_svg.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_svg.cc
@@ -62,26 +62,10 @@ namespace gpencil {
 
 /* Constructor. */
 GpencilExporterSVG::GpencilExporterSVG(const struct GpencilExportParams *params)
+    : GpencilExporter(params)
 {
-  this->params.frame_start = params->frame_start;
-  this->params.frame_end = params->frame_end;
-  this->params.ob = params->ob;
-  this->params.region = params->region;
-  this->params.C = params->C;
-  this->params.filename = params->filename;
-  this->params.mode = params->mode;
-  this->params.flag = params->flag;
-
-  /* Easy access data. */
-  this->bmain = CTX_data_main(params->C);
-  this->depsgraph = CTX_data_depsgraph_pointer(params->C);
-  this->rv3d = (RegionView3D *)params->region->regiondata;
-  this->gpd = (bGPdata *)params->ob->data;
   this->invert_axis[0] = false;
   this->invert_axis[1] = true;
-
-  /* Prepare output filename with full path. */
-  set_out_filename(params->filename);
 }
 
 /* Main write method for SVG format. */
@@ -107,9 +91,6 @@ bool GpencilExporterSVG::write(std::string actual_frame)
 /* Create document header and main svg node. */
 void GpencilExporterSVG::create_document_header(void)
 {
-  int x = params.region->winx;
-  int y = params.region->winy;
-
   /* Add a custom document declaration node. */
   pugi::xml_node decl = doc.prepend_child(pugi::node_declaration);
   decl.append_attribute("version") = "1.0";
@@ -128,11 +109,11 @@ void GpencilExporterSVG::create_document_header(void)
   main_node.append_attribute("x").set_value("0px");
   main_node.append_attribute("y").set_value("0px");
 
-  std::string width = std::to_string(x) + "px";
-  std::string height = std::to_string(y) + "px";
+  std::string width = std::to_string(winx) + "px";
+  std::string height = std::to_string(winy) + "px";
   main_node.append_attribute("width").set_value(width.c_str());
   main_node.append_attribute("height").set_value(height.c_str());
-  std::string viewbox = "0 0 " + std::to_string(x) + " " + std::to_string(y);
+  std::string viewbox = "0 0 " + std::to_string(winx) + " " + std::to_string(winy);
   main_node.append_attribute("viewBox").set_value(viewbox.c_str());
 }
 
@@ -152,15 +133,11 @@ void GpencilExporterSVG::export_style_list(void)
 
   for (int i = 0; i < mat_len; i++) {
     MaterialGPencilStyle *gp_style = BKE_gpencil_material_settings(ob, i + 1);
-
-    bool is_stroke = ((gp_style->flag & GP_MATERIAL_STROKE_SHOW) &&
-                      (gp_style->stroke_rgba[3] > GPENCIL_ALPHA_OPACITY_THRESH));
-    bool is_fill = ((gp_style->flag & GP_MATERIAL_FILL_SHOW) &&
-                    (gp_style->fill_rgba[3] > GPENCIL_ALPHA_OPACITY_THRESH));
+    gp_style_current_set(gp_style);
 
     int id = i + 1;
 
-    if (is_stroke) {
+    if (gp_style_is_stroke()) {
       char out[128];
       linearrgb_to_srgb_v3_v3(col, gp_style->stroke_rgba);
       std::string stroke_hex = rgb_to_hex(col);
@@ -172,7 +149,7 @@ void GpencilExporterSVG::export_style_list(void)
       txt.append(out);
     }
 
-    if (is_fill) {
+    if (gp_style_is_fill()) {
       char out[128];
       linearrgb_to_srgb_v3_v3(col, gp_style->fill_rgba);
       std::string stroke_hex = rgb_to_hex(col);
@@ -230,11 +207,6 @@ void GpencilExporterSVG::export_layers(void)
         continue;
       }
       gps_current_set(gps);
-      MaterialGPencilStyle *gp_style = gp_style_current_

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list