solstice-solver

Solver library of the solstice app
git clone git://git.meso-star.com/solstice-solver.git
Log | Files | Refs | README | LICENSE

commit 2c26a2f248c578f4abc10ad23b2b2e2a0a5f3a3c
parent de54c65f9878b2e1c8a3aef6c2d9d33618010cdb
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Wed, 15 Mar 2017 11:23:48 +0100

Add normal to instances.

Diffstat:
Msrc/ssol.h | 6++++++
Msrc/ssol_instance.c | 13++++++++++++-
Msrc/test_ssol_instance.c | 4++++
3 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/src/ssol.h b/src/ssol.h @@ -736,6 +736,12 @@ ssol_instance_get_area (const struct ssol_instance* instance, double* area); +/* Retrieve the normal of the instance */ +SSOL_API res_T +ssol_instance_get_normal + (const struct ssol_instance* instance, + double normal[3]); + SSOL_API res_T ssol_instance_get_shaded_shapes_count (const struct ssol_instance* instance, diff --git a/src/ssol_instance.c b/src/ssol_instance.c @@ -193,13 +193,24 @@ ssol_instance_get_area (const struct ssol_instance* instance, double* area) { - if (!instance || !area) return RES_BAD_ARG;; + if (!instance || !area) return RES_BAD_ARG; /* the area of the 3D surface */ *area = instance->shape_rt_area; return RES_OK; } res_T +ssol_instance_get_normal + (const struct ssol_instance* instance, + double normal[3]) +{ + if (!instance || !normal) return RES_BAD_ARG; + SSOL(object_get_normal(instance->object, normal)); + d33_muld3(normal, instance->transform, normal); + return RES_OK; +} + +res_T ssol_instance_get_shaded_shapes_count (const struct ssol_instance* instance, size_t* count) { diff --git a/src/test_ssol_instance.c b/src/test_ssol_instance.c @@ -78,6 +78,10 @@ main(int argc, char** argv) CHECK(ssol_instance_set_transform(instance, transform), RES_OK); CHECK(ssol_instance_set_transform(instance, transform), RES_OK); + CHECK(ssol_instance_get_normal(instance, NULL), RES_BAD_ARG); + CHECK(ssol_instance_get_normal(NULL, val), RES_BAD_ARG); + CHECK(ssol_instance_get_normal(instance, val), RES_OK); + CHECK(ssol_instance_set_receiver(NULL, 0, 0), RES_BAD_ARG); CHECK(ssol_instance_set_receiver(instance, 0, 0), RES_OK); CHECK(ssol_instance_sample(NULL, 0), RES_BAD_ARG);