[Bf-blender-cvs] [c576a6cf533] temp-gpencil-io: Move shared function to geometry module

Antonio Vazquez noreply at git.blender.org
Thu Mar 18 12:53:42 CET 2021


Commit: c576a6cf53348c3d02afc6b1b5675c65f578bce2
Author: Antonio Vazquez
Date:   Thu Mar 18 12:53:39 2021 +0100
Branches: temp-gpencil-io
https://developer.blender.org/rBc576a6cf53348c3d02afc6b1b5675c65f578bce2

Move shared function to geometry module

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

M	source/blender/blenkernel/BKE_gpencil_geom.h
M	source/blender/blenkernel/intern/gpencil_geom.c
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_export_pdf.cc
M	source/blender/io/gpencil/intern/gpencil_io_export_svg.cc

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

diff --git a/source/blender/blenkernel/BKE_gpencil_geom.h b/source/blender/blenkernel/BKE_gpencil_geom.h
index 11594208b73..9e094f3adf5 100644
--- a/source/blender/blenkernel/BKE_gpencil_geom.h
+++ b/source/blender/blenkernel/BKE_gpencil_geom.h
@@ -188,6 +188,8 @@ struct bGPDstroke *BKE_gpencil_stroke_perimeter_from_view(struct RegionView3D *r
                                                           struct bGPDstroke *gps,
                                                           int subdivisions,
                                                           float diff_mat[4][4]);
+float BKE_gpencil_stroke_average_pressure_get(struct bGPDstroke *gps);
+bool BKE_gpencil_stroke_is_thickness_constant(struct bGPDstroke *gps);
 #ifdef __cplusplus
 }
 #endif
diff --git a/source/blender/blenkernel/intern/gpencil_geom.c b/source/blender/blenkernel/intern/gpencil_geom.c
index d07b1ccaf38..fc145956836 100644
--- a/source/blender/blenkernel/intern/gpencil_geom.c
+++ b/source/blender/blenkernel/intern/gpencil_geom.c
@@ -3575,8 +3575,10 @@ static int generate_arc_from_point_to_point(ListBase *list,
   return 0;
 }
 
-static int generate_semi_circle_from_point_to_point(
-    ListBase *list, tPerimeterPoint *from, tPerimeterPoint *to, int subdivisions)
+static int generate_semi_circle_from_point_to_point(ListBase *list,
+                                                    tPerimeterPoint *from,
+                                                    tPerimeterPoint *to,
+                                                    int subdivisions)
 {
   int num_points = (1 << (subdivisions + 1)) + 1;
   float center_pt[3];
@@ -3649,8 +3651,7 @@ static int generate_perimeter_cap(const float point[4],
 
   int num_points = 0;
   if (cap_type == GP_STROKE_CAP_ROUND) {
-    num_points += generate_semi_circle_from_point_to_point(
-        list, p_pt, p_pt_inv, subdivisions);
+    num_points += generate_semi_circle_from_point_to_point(list, p_pt, p_pt_inv, subdivisions);
   }
 
   return num_points + 2;
@@ -3712,12 +3713,8 @@ static ListBase *gpencil_stroke_perimeter_ex(const bGPdata *gpd,
   }
 
   /* generate points for start cap */
-  num_perimeter_points += generate_perimeter_cap(first_pt,
-                                                 first_next_pt,
-                                                 first_radius,
-                                                 perimeter_right_side,
-                                                 subdivisions,
-                                                 gps->caps[0]);
+  num_perimeter_points += generate_perimeter_cap(
+      first_pt, first_next_pt, first_radius, perimeter_right_side, subdivisions, gps->caps[0]);
 
   /* generate perimeter points  */
   float curr_pt[3], next_pt[3], prev_pt[3];
@@ -3977,4 +3974,42 @@ bGPDstroke *BKE_gpencil_stroke_perimeter_from_view(struct RegionView3D *rv3d,
 
   return perimeter_stroke;
 }
+
+/** Get average pressure. */
+float BKE_gpencil_stroke_average_pressure_get(struct bGPDstroke *gps)
+{
+
+  if (gps->totpoints == 1) {
+    return gps->points[0].pressure;
+  }
+
+  const bGPDspoint *pt;
+  int i;
+  float tot = 0.0f;
+  for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
+    tot += pt->pressure;
+  }
+
+  return tot / (float)gps->totpoints;
+}
+
+/** Check if the thickness of the stroke is constant. */
+bool BKE_gpencil_stroke_is_thickness_constant(struct bGPDstroke *gps)
+{
+  if (gps->totpoints == 1) {
+    return true;
+  }
+
+  const bGPDspoint *pt;
+  int i;
+
+  float prv_pressure = gps->points[0].pressure;
+  for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
+    if (pt->pressure != prv_pressure) {
+      return false;
+    }
+  }
+
+  return true;
+}
 /** \} */
diff --git a/source/blender/io/gpencil/intern/gpencil_io_base.cc b/source/blender/io/gpencil/intern/gpencil_io_base.cc
index 5b08078add4..f0960e62866 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_base.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_base.cc
@@ -285,43 +285,6 @@ void GpencilIO::gpencil_3d_point_to_2D(const float co[3], float r_co[2])
   }
 }
 
-/** Get average pressure. */
-float GpencilIO::stroke_average_pressure_get(struct bGPDstroke *gps)
-{
-  bGPDspoint *pt = nullptr;
-
-  if (gps->totpoints == 1) {
-    pt = &gps->points[0];
-    return pt->pressure;
-  }
-
-  float tot = 0.0f;
-  for (const bGPDspoint &pt : Span(gps->points, gps->totpoints)) {
-    tot += pt.pressure;
-  }
-
-  return tot / (float)gps->totpoints;
-}
-
-/** Check if the thickness of the stroke is constant. */
-bool GpencilIO::is_stroke_thickness_constant(struct bGPDstroke *gps)
-{
-  if (gps->totpoints == 1) {
-    return true;
-  }
-
-  bGPDspoint *pt_first = &gps->points[0];
-  float prv_pressure = pt_first->pressure;
-
-  for (const bGPDspoint &pt : Span(gps->points, gps->totpoints)) {
-    if (pt.pressure != prv_pressure) {
-      return false;
-    }
-  }
-
-  return true;
-}
-
 /** Get radius of point. */
 float GpencilIO::stroke_point_radius_get(bGPDlayer *gpl, struct bGPDstroke *gps)
 {
diff --git a/source/blender/io/gpencil/intern/gpencil_io_base.h b/source/blender/io/gpencil/intern/gpencil_io_base.h
index 39f0aa69adc..5b77c317ae8 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_base.h
+++ b/source/blender/io/gpencil/intern/gpencil_io_base.h
@@ -89,8 +89,6 @@ class GpencilIO {
   float stroke_color_[4], fill_color_[4];
 
   static std::string rgb_to_hexstr(float color[3]);
-  static float stroke_average_pressure_get(struct bGPDstroke *gps);
-  static bool is_stroke_thickness_constant(struct bGPDstroke *gps);
 
   /* Geometry functions. */
   bool gpencil_3d_point_to_screen_space(const float co[3], float r_co[2]);
diff --git a/source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc b/source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc
index e254a6bccc8..6b5d76d390a 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc
@@ -251,12 +251,12 @@ void GpencilExporterPDF::export_stroke_to_polyline(bGPDlayer *gpl,
                                                    const bool do_fill,
                                                    const bool normalize)
 {
-  const bool is_thickness_const = is_stroke_thickness_constant(gps);
+  const bool is_thickness_const = BKE_gpencil_stroke_is_thickness_constant(gps);
   const bool cyclic = ((gps->flag & GP_STROKE_CYCLIC) != 0);
 
   /* For constant thickness, use first point pressure. */
   const float avg_pressure = is_thickness_const ? gps->points[0].pressure :
-                                                  stroke_average_pressure_get(gps);
+                                                  BKE_gpencil_stroke_average_pressure_get(gps);
 
   /* Get the thickness in pixels using a simple 1 point stroke. */
   bGPDstroke *gps_temp = BKE_gpencil_stroke_duplicate(gps, false, false);
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 374e8b1f885..a890ab02965 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_export_svg.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_export_svg.cc
@@ -223,7 +223,7 @@ void GpencilExporterSVG::export_gpencil_layers()
         }
         else {
           const bool is_normalized = ((params_.flag & GP_EXPORT_NORM_THICKNESS) != 0) ||
-                                     is_stroke_thickness_constant(gps);
+                                     BKE_gpencil_stroke_is_thickness_constant(gps);
 
           /* Fill. */
           if ((material_is_fill()) && (params_.flag & GP_EXPORT_FILL)) {
@@ -345,12 +345,12 @@ void GpencilExporterSVG::export_stroke_to_polyline(struct bGPDlayer *gpl,
                                                    pugi::xml_node node_gpl,
                                                    const bool do_fill)
 {
-  const bool is_thickness_const = is_stroke_thickness_constant(gps);
+  const bool is_thickness_const = BKE_gpencil_stroke_is_thickness_constant(gps);
   const bool cyclic = ((gps->flag & GP_STROKE_CYCLIC) != 0);
 
   /* For constant thickness, use first point pressure. */
   const float avg_pressure = (is_thickness_const) ? gps->points[0].pressure :
-                                                    stroke_average_pressure_get(gps);
+                                                    BKE_gpencil_stroke_average_pressure_get(gps);
 
   /* Get the thickness in pixels using a simple 1 point stroke. */
   bGPDstroke *gps_temp = BKE_gpencil_stroke_duplicate(gps, false, false);



More information about the Bf-blender-cvs mailing list