[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