[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