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])); } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs