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:
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,