[Bf-blender-cvs] [7a85be00b58] greasepencil-object: GPencil: Calculate real radius size for SVG point

Antonio Vazquez noreply at git.blender.org
Mon Jul 27 13:22:41 CEST 2020


Commit: 7a85be00b5877e637757f012e5b014b8fbb62062
Author: Antonio Vazquez
Date:   Mon Jul 27 13:01:10 2020 +0200
Branches: greasepencil-object
https://developer.blender.org/rB7a85be00b5877e637757f012e5b014b8fbb62062

GPencil: Calculate real radius size for SVG point

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

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

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

diff --git a/source/blender/io/gpencil/intern/gpencil_io_svg.cc b/source/blender/io/gpencil/intern/gpencil_io_svg.cc
index 6a4baa05a72..7b151e2b6ec 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_svg.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_svg.cc
@@ -269,13 +269,15 @@ void GpencilExporterSVG::export_point(pugi::xml_node gpl_node,
                                       float diff_mat[4][4])
 {
   BLI_assert(gps->totpoints == 1);
+  RegionView3D *rv3d = (RegionView3D *)params.region->regiondata;
+  bGPDspoint *pt = NULL;
 
   pugi::xml_node gps_node = gpl_node.append_child("circle");
 
   gps_node.append_attribute("class").set_value(
       ("style_stroke_" + std::to_string(gps->mat_nr + 1)).c_str());
 
-  bGPDspoint *pt = &gps->points[0];
+  pt = &gps->points[0];
   float screen_co[2];
   gpencil_3d_point_to_screen_space(params.region, diff_mat, &pt->x, screen_co);
   /* Invert Y axis. */
@@ -285,10 +287,25 @@ void GpencilExporterSVG::export_point(pugi::xml_node gpl_node,
   gps_node.append_attribute("cy").set_value(screen_co[1]);
 
   /* Radius. */
-  /* TODO: This is wrong. */
-  float defaultpixsize = 1000.0f / gpd->pixfactor;
-  float stroke_radius = ((gps->thickness + gpl->line_change) / defaultpixsize) / 2.0f;
-  gps_node.append_attribute("r").set_value(stroke_radius);
+  bGPDstroke *gps_tmp = BKE_gpencil_stroke_duplicate(gps, true);
+  bGPDstroke *gps_perimeter = BKE_gpencil_stroke_perimeter_from_view(
+      rv3d, gpd, gpl, gps_tmp, 3, diff_mat);
+
+  pt = &gps_perimeter->points[0];
+  float screen_ex[2];
+  gpencil_3d_point_to_screen_space(params.region, diff_mat, &pt->x, screen_ex);
+  /* Invert Y axis. */
+  screen_ex[1] = params.region->winy - screen_ex[1];
+
+  float v1[2];
+  sub_v2_v2v2(v1, screen_co, screen_ex);
+  float radius = len_v2(v1);
+  BKE_gpencil_free_stroke(gps_perimeter);
+  BKE_gpencil_free_stroke(gps_tmp);
+
+  // float defaultpixsize = 1000.0f / gpd->pixfactor;
+  // float stroke_radius = ((gps->thickness + gpl->line_change) / defaultpixsize) / 2.0f;
+  gps_node.append_attribute("r").set_value(radius);
 }
 
 /**
@@ -304,8 +321,6 @@ void GpencilExporterSVG::export_stroke(pugi::xml_node gpl_node,
                                        const bool is_fill)
 {
   pugi::xml_node gps_node = gpl_node.append_child("path");
-  // gps_node.append_attribute("fill").set_value("#000000");
-  // gps_node.append_attribute("stroke").set_value("#000000");
 
   std::string style_type = (is_fill) ? "_fill_" : "_stroke_";
   gps_node.append_attribute("class").set_value(



More information about the Bf-blender-cvs mailing list