star-cpr

Clip 2D meshes with 2D polygons
git clone git://git.meso-star.fr/star-cpr.git
Log | Files | Refs | README | LICENSE

commit 7e38ca7227aa5f65400773b9c59df11f62924421
parent 339d4f77b30d883e15469dee20bd3de935715a77
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Thu,  9 Feb 2023 18:38:28 +0100

Add a in bbox test for polygons

Diffstat:
Msrc/scpr.h | 7+++++++
Msrc/scpr_polygon.c | 32++++++++++++++++++++++++++++++++
2 files changed, 39 insertions(+), 0 deletions(-)

diff --git a/src/scpr.h b/src/scpr.h @@ -173,6 +173,13 @@ scpr_polygon_setup_indexed_vertices void* data); /* Client data set as the last param of the callbacks */ SCPR_API res_T +scpr_polygon_in_bbox + (struct scpr_polygon* polygon, + const double lower[2], + const double upper[2], + int* inside); + +SCPR_API res_T scpr_offset_polygon (struct scpr_polygon* polygon, const double offset, /* Can be either positive or negative */ diff --git a/src/scpr_polygon.c b/src/scpr_polygon.c @@ -258,6 +258,38 @@ error: } res_T +scpr_polygon_in_bbox + (struct scpr_polygon* polygon, + const double lower[2], + const double upper[2], + int* inside) +{ + int i, in = 1; + int64_t low[2], up[2]; + res_T res = RES_OK; + + if(!polygon || !lower || !upper || !inside) { + res = RES_BAD_ARG; + goto error; + } + + SCPR(device_scale(polygon->device, lower, 2, low)); + SCPR(device_scale(polygon->device, upper, 2, up)); + for(i = 0; i < 2; i++) { + if(polygon->lower[i] < low[i] || polygon->upper[i] > up[i]) { + in = 0; + break; + } + } + + *inside = in; +exit: + return res; +error: + goto exit; +} + +res_T scpr_polygon_create_copy (struct scpr_device* dev, const struct scpr_polygon* src_polygon,