commit 538da797c5c66a790a728ef28d65a0fe17f6be26
parent 86b5e1df3f0b4586834e7bec0e8d4e5bf9618581
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Tue, 28 Jun 2016 15:05:33 +0200
Implement and test the s2d_scene_get_aabb function
Diffstat:
2 files changed, 39 insertions(+), 0 deletions(-)
diff --git a/src/s2d_scene.c b/src/s2d_scene.c
@@ -1070,3 +1070,17 @@ error:
goto exit;
}
+res_T
+s2d_scene_get_aabb(struct s2d_scene* scn, float lower[2], float upper[2])
+{
+ if(!scn || !lower || !upper) return RES_BAD_ARG;
+ if(!scn->session_mask) {
+ log_error(scn->dev,
+ "%s: A session must be active on the submitted scene.\n", __FUNCTION__);
+ return RES_BAD_OP;
+ }
+ f2_set(lower, scn->lower);
+ f2_set(upper, scn->upper);
+ return RES_OK;
+}
+
diff --git a/src/test_s2d_scene.c b/src/test_s2d_scene.c
@@ -42,6 +42,8 @@ main(int argc, char** argv)
struct s2d_primitive prim;
size_t nprims;
size_t i;
+ float lower[2], upper[2];
+ float tmp[2];
float length;
float area;
int mask;
@@ -169,10 +171,22 @@ main(int argc, char** argv)
CHECK(s2d_scene_compute_area(scn, &area), RES_OK);
CHECK(eq_epsf(area, 4.f, 1.e-6f), 1);
+ CHECK(s2d_scene_get_aabb(NULL, NULL, NULL), RES_BAD_ARG);
+ CHECK(s2d_scene_get_aabb(scn, NULL, NULL), RES_BAD_ARG);
+ CHECK(s2d_scene_get_aabb(NULL, lower, NULL), RES_BAD_ARG);
+ CHECK(s2d_scene_get_aabb(scn, lower, NULL), RES_BAD_ARG);
+ CHECK(s2d_scene_get_aabb(NULL, NULL, upper), RES_BAD_ARG);
+ CHECK(s2d_scene_get_aabb(scn, NULL, upper), RES_BAD_ARG);
+ CHECK(s2d_scene_get_aabb(NULL, lower, upper), RES_BAD_ARG);
+ CHECK(s2d_scene_get_aabb(scn, lower, upper), RES_OK);
+ CHECK(f2_eq_eps(lower, f2(tmp, -1.f, -1.f), 1.e-6f), 1);
+ CHECK(f2_eq_eps(upper, f2(tmp, 1.f, 1.f), 1.e-6f), 1);
+
CHECK(s2d_scene_end_session(scn), RES_OK);
CHECK(s2d_scene_compute_contour_length(scn, &length), RES_BAD_OP);
CHECK(s2d_scene_compute_area(scn, &area), RES_BAD_OP);
+ CHECK(s2d_scene_get_aabb(scn, lower, upper), RES_BAD_OP);
CHECK(s2d_shape_flip_contour(shape), RES_OK);
@@ -186,6 +200,17 @@ main(int argc, char** argv)
CHECK(s2d_scene_end_session(scn), RES_OK);
+ CHECK(s2d_scene_clear(scn), RES_OK);
+ CHECK(s2d_scene_begin_session(scn, S2D_SAMPLE), RES_OK);
+ CHECK(s2d_scene_compute_contour_length(scn, &length), RES_OK);
+ CHECK(length, 0.f);
+ CHECK(s2d_scene_compute_area(scn, &area), RES_OK);
+ CHECK(area, 0.f);
+ CHECK(s2d_scene_get_aabb(scn, lower, upper), RES_OK);
+ CHECK(lower[0] > upper[0], 1);
+ CHECK(lower[1] > upper[1], 1);
+ CHECK(s2d_scene_end_session(scn), RES_OK);
+
CHECK(s2d_shape_ref_put(shape), RES_OK);
CHECK(s2d_scene_ref_put(scn), RES_OK);
CHECK(s2d_device_ref_put(dev), RES_OK);