commit 3807b863e0a268c13e3706cbe928b0cf28a1914c
parent 15801166fc6a68cb84aee94130414ac0b9d804e6
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Tue, 19 Dec 2017 11:21:35 +0100
Add and test the sdis_scene_get_aabb function
Diffstat:
3 files changed, 39 insertions(+), 5 deletions(-)
diff --git a/src/sdis.h b/src/sdis.h
@@ -261,6 +261,12 @@ SDIS_API res_T
sdis_scene_ref_put
(struct sdis_scene* scn);
+SDIS_API res_T
+sdis_scene_get_aabb
+ (const struct sdis_scene* scn,
+ double lower[3],
+ double upper[3]);
+
END_DECLS
#endif /* SDIS_H */
diff --git a/src/sdis_scene.c b/src/sdis_scene.c
@@ -17,6 +17,7 @@
#include "sdis_device_c.h"
#include "sdis_interface_c.h"
+#include <rsys/double3.h>
#include <rsys/dynamic_array.h>
#include <rsys/mem_allocator.h>
#include <star/s3d.h>
@@ -280,3 +281,17 @@ sdis_scene_ref_put(struct sdis_scene* scn)
return RES_OK;
}
+res_T
+sdis_scene_get_aabb
+ (const struct sdis_scene* scn, double lower[3], double upper[3])
+{
+ float low[3], upp[3];
+ res_T res = RES_OK;
+ if(!scn || !lower || !upper) return RES_BAD_ARG;
+ res = s3d_scene_view_get_aabb(scn->s3d_view, low, upp);
+ if(res != RES_OK) return res;
+ d3_set_f3(lower, low);
+ d3_set_f3(upper, upp);
+ return RES_OK;
+}
+
diff --git a/src/test_sdis_scene.c b/src/test_sdis_scene.c
@@ -15,6 +15,7 @@
#include "sdis.h"
#include "test_sdis_utils.h"
+#include <rsys/math.h>
struct context {
const double* positions;
@@ -66,6 +67,7 @@ main(int argc, char** argv)
struct sdis_fluid_shader fluid_shader = DUMMY_FLUID_SHADER;
struct sdis_solid_shader solid_shader = DUMMY_SOLID_SHADER;
struct sdis_interface_shader interface_shader = DUMMY_INTERFACE_SHADER;
+ double lower[3], upper[3];
struct context ctx;
size_t ntris, npos;
(void)argc, (void)argv;
@@ -97,17 +99,28 @@ main(int argc, char** argv)
CHK(CREATE(dev, ntris, IDS, IFA, npos, NULL, &ctx, &scn) == RES_BAD_ARG);
CHK(CREATE(dev, ntris, IDS, IFA, npos, POS, &ctx, &scn) == RES_OK);
+ #undef CREATE
+ #undef IDS
+ #undef POS
+ #undef IFA
+
+ CHK(sdis_scene_get_aabb(NULL, lower, upper) == RES_BAD_ARG);
+ CHK(sdis_scene_get_aabb(scn, NULL, upper) == RES_BAD_ARG);
+ CHK(sdis_scene_get_aabb(scn, lower, NULL) == RES_BAD_ARG);
+ CHK(sdis_scene_get_aabb(scn, lower, upper) == RES_OK);
+ CHK(eq_eps(lower[0], 0, 1.e-6));
+ CHK(eq_eps(lower[1], 0, 1.e-6));
+ CHK(eq_eps(lower[2], 0, 1.e-6));
+ CHK(eq_eps(upper[0], 1, 1.e-6));
+ CHK(eq_eps(upper[1], 1, 1.e-6));
+ CHK(eq_eps(upper[2], 1, 1.e-6));
+
CHK(sdis_scene_ref_get(NULL) == RES_BAD_ARG);
CHK(sdis_scene_ref_get(scn) == RES_OK);
CHK(sdis_scene_ref_put(NULL) == RES_BAD_ARG);
CHK(sdis_scene_ref_put(scn) == RES_OK);
CHK(sdis_scene_ref_put(scn) == RES_OK);
- #undef CREATE
- #undef IDS
- #undef POS
- #undef ITFACE
-
CHK(sdis_device_ref_put(dev) == RES_OK);
CHK(sdis_interface_ref_put(interface) == RES_OK);
CHK(sdis_medium_ref_put(solid) == RES_OK);