[Bf-blender-cvs] [3c316c91adf] greasepencil-object: GPencil: Add generic Y axis invert to main function
Antonio Vazquez
noreply at git.blender.org
Mon Jul 27 23:24:34 CEST 2020
Commit: 3c316c91adf1f23ba8000d82df11c253ed0d9a66
Author: Antonio Vazquez
Date: Mon Jul 27 23:24:24 2020 +0200
Branches: greasepencil-object
https://developer.blender.org/rB3c316c91adf1f23ba8000d82df11c253ed0d9a66
GPencil: Add generic Y axis invert to main function
This removes duplicate code
===================================================================
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 46cec62b923..fbd92632ae9 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_base.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_base.cc
@@ -76,21 +76,32 @@ void GpencilExporter::set_out_filename(struct bContext *C, char *filename)
bool GpencilExporter::gpencil_3d_point_to_screen_space(struct ARegion *region,
const float diff_mat[4][4],
const float co[3],
+ const bool invert,
float r_co[2])
{
float parent_co[3];
mul_v3_m4v3(parent_co, diff_mat, co);
float screen_co[2];
- // eV3DProjTest test = (eV3DProjTest)(V3D_PROJ_RET_CLIP_BB | V3D_PROJ_RET_CLIP_WIN);
eV3DProjTest test = (eV3DProjTest)(V3D_PROJ_RET_OK);
if (ED_view3d_project_float_global(region, parent_co, screen_co, test) == V3D_PROJ_RET_OK) {
if (!ELEM(V2D_IS_CLIPPED, screen_co[0], screen_co[1])) {
copy_v2_v2(r_co, screen_co);
+ /* Invert Y axis. */
+ if (invert) {
+ r_co[1] = params.region->winy - r_co[1];
+ }
+
return true;
}
}
r_co[0] = V2D_IS_CLIPPED;
r_co[1] = V2D_IS_CLIPPED;
+
+ /* Invert Y axis. */
+ if (invert) {
+ r_co[1] = params.region->winy - r_co[1];
+ }
+
return false;
}
@@ -150,18 +161,14 @@ float GpencilExporter::stroke_point_radius_get(const struct bGPDlayer *gpl,
float v1[2], screen_co[2], screen_ex[2];
pt = &gps->points[0];
- gpencil_3d_point_to_screen_space(params.region, diff_mat, &pt->x, screen_co);
- /* Invert Y axis. */
- screen_co[1] = params.region->winy - screen_co[1];
+ gpencil_3d_point_to_screen_space(params.region, diff_mat, &pt->x, true, screen_co);
/* Radius. */
bGPDstroke *gps_perimeter = BKE_gpencil_stroke_perimeter_from_view(
rv3d, gpd, gpl, gps, 3, diff_mat);
pt = &gps_perimeter->points[0];
- 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];
+ gpencil_3d_point_to_screen_space(params.region, diff_mat, &pt->x, true, screen_ex);
sub_v2_v2v2(v1, screen_co, screen_ex);
float radius = len_v2(v1);
diff --git a/source/blender/io/gpencil/intern/gpencil_io_base.h b/source/blender/io/gpencil/intern/gpencil_io_base.h
index 603f08901c9..2cadaf29429 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_base.h
+++ b/source/blender/io/gpencil/intern/gpencil_io_base.h
@@ -48,6 +48,7 @@ class GpencilExporter {
bool gpencil_3d_point_to_screen_space(struct ARegion *region,
const float diff_mat[4][4],
const float co[3],
+ const bool invert,
float r_co[2]);
bool is_stroke_thickness_constant(struct bGPDstroke *gps);
diff --git a/source/blender/io/gpencil/intern/gpencil_io_svg.cc b/source/blender/io/gpencil/intern/gpencil_io_svg.cc
index b5ad18e840f..e2c35b694f6 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_svg.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_svg.cc
@@ -289,9 +289,7 @@ void GpencilExporterSVG::export_point(pugi::xml_node gpl_node,
("stylestroke" + std::to_string(gps->mat_nr + 1)).c_str());
bGPDspoint *pt = &gps->points[0];
- gpencil_3d_point_to_screen_space(params.region, diff_mat, &pt->x, screen_co);
- /* Invert Y axis. */
- screen_co[1] = params.region->winy - screen_co[1];
+ gpencil_3d_point_to_screen_space(params.region, diff_mat, &pt->x, true, screen_co);
gps_node.append_attribute("cx").set_value(screen_co[0]);
gps_node.append_attribute("cy").set_value(screen_co[1]);
@@ -328,9 +326,7 @@ void GpencilExporterSVG::export_stroke_path(pugi::xml_node gpl_node,
}
bGPDspoint *pt = &gps->points[i];
float screen_co[2];
- gpencil_3d_point_to_screen_space(params.region, diff_mat, &pt->x, screen_co);
- /* Invert Y axis. */
- screen_co[1] = params.region->winy - screen_co[1];
+ gpencil_3d_point_to_screen_space(params.region, diff_mat, &pt->x, true, screen_co);
txt.append(std::to_string(screen_co[0]) + "," + std::to_string(screen_co[1]));
}
/* Close patch (cyclic)*/
@@ -403,9 +399,7 @@ void GpencilExporterSVG::export_stroke_polyline(pugi::xml_node gpl_node,
}
bGPDspoint *pt = &gps->points[i];
float screen_co[2];
- gpencil_3d_point_to_screen_space(params.region, diff_mat, &pt->x, screen_co);
- /* Invert Y axis. */
- screen_co[1] = params.region->winy - screen_co[1];
+ gpencil_3d_point_to_screen_space(params.region, diff_mat, &pt->x, true, screen_co);
txt.append(std::to_string(screen_co[0]) + "," + std::to_string(screen_co[1]));
}
More information about the Bf-blender-cvs
mailing list