commit 32e28cdeaa549d6762c0108c583902a173cbf889
parent 5765dab7fefe1381761cfbd8f25f285bb84221c0
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Wed, 1 Feb 2017 16:11:01 +0100
BugFix: default number of slices not set for spheres and cylinders.
Diffstat:
2 files changed, 39 insertions(+), 7 deletions(-)
diff --git a/src/parser/solparser.c b/src/parser/solparser.c
@@ -1602,6 +1602,13 @@ parse_cylinder
CHECK_PARAM(RADIUS, "radius");
#undef CHECK_PARAM
+ #define DEFAULT_PARAM(Flag, Ptr, Value) \
+ if(!(mask & BIT(Flag))) { \
+ *(Ptr) = Value; \
+ } (void)0
+ DEFAULT_PARAM(SLICES, &shape->nslices, 16);
+ #undef DEFAULT_PARAM
+
exit:
out_ishape->i = ishape;
return res;
@@ -1955,11 +1962,22 @@ parse_sphere
#undef SETUP_MASK
}
- if(!(mask & BIT(RADIUS))) {
- log_err(parser, sphere, "the sphere radius is missing.\n");
- res = RES_BAD_ARG;
- goto error;
- }
+ #define CHECK_PARAM(Flag, Name) \
+ if(!(mask & BIT(Flag))) { \
+ log_err(parser, sphere, \
+ "the sphere parameter `"Name"' is missing.\n"); \
+ res = RES_BAD_ARG; \
+ goto error; \
+ } (void)0
+ CHECK_PARAM(RADIUS, "radius");
+ #undef CHECK_PARAM
+
+ #define DEFAULT_PARAM(Flag, Ptr, Value) \
+ if(!(mask & BIT(Flag))) { \
+ *(Ptr) = Value; \
+ } (void)0
+ DEFAULT_PARAM(SLICES, &shape->nslices, 16);
+ #undef DEFAULT_PARAM
exit:
out_ishape->i = ishape;
diff --git a/src/parser/test_solparser3.c b/src/parser/test_solparser3.c
@@ -22,6 +22,9 @@ static const char* input[] = {
"- geometry: &cylinder\n",
" - cylinder: { radius: 1, height: 10, slices: 128 }\n",
" material: *lambertian\n",
+ "- geometry: &cylinder2\n",
+ " - cylinder: { radius: 1, height: 10 }\n",
+ " material: *lambertian\n",
"- sun: \n",
" dni: 1\n",
" spectrum: [{wavelength: 1, data: 1}]\n",
@@ -37,7 +40,7 @@ static const char* input[] = {
" children:\n",
" - name: entity0a\n",
" primary: 1\n",
- " geometry: *cylinder\n",
+ " geometry: *cylinder2\n",
" - name: entity0b\n",
" primary: 1\n",
" geometry: *cylinder\n",
@@ -135,10 +138,21 @@ check_entity0
entity0a = solparser_get_entity(parser, entity_id);
CHECK(strcmp(str_cget(&entity0a->name), "entity0a"), 0);
CHECK(entity0a->type, SOLPARSER_ENTITY_GEOMETRY);
- CHECK(entity0->data.geometry.i, entity0a->data.geometry.i);
+ NCHECK(entity0->data.geometry.i, entity0a->data.geometry.i);
CHECK(solparser_entity_get_anchors_count(entity0a), 0);
CHECK(solparser_entity_get_children_count(entity0a), 0);
+ geom = solparser_get_geometry(parser, entity0a->data.geometry);
+ CHECK(solparser_geometry_get_objects_count(geom), 1);
+ obj_id = solparser_geometry_get_object(geom, 0);
+ obj = solparser_get_object(parser, obj_id);
+ shape = solparser_get_shape(parser, obj->shape);
+ CHECK(shape->type, SOLPARSER_SHAPE_CYLINDER);
+ cylinder = solparser_get_shape_cylinder(parser, shape->data.cylinder);
+ CHECK(cylinder->height, 10);
+ CHECK(cylinder->radius, 1);
+ CHECK(cylinder->nslices, 16);
+
entity_id = solparser_entity_get_child(entity0, 1);
entity0b = solparser_get_entity(parser, entity_id);
CHECK(strcmp(str_cget(&entity0b->name), "entity0b"), 0);