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:
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);