commit bc7aa8a1fe3f7d8c593e6b3d6e3477ca10516415
parent 638f759b9cf717f826b80291c60f330ad3eae652
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Mon, 16 Jan 2017 09:30:04 +0100
Merge remote-tracking branch 'origin/master' into receiver
Diffstat:
4 files changed, 41 insertions(+), 4 deletions(-)
diff --git a/doc/input b/doc/input
@@ -251,7 +251,7 @@
<pillbox> ::=
pillbox:
- aperture: REAL # in ]0, PI/2]
+ aperture: REAL # in ]0, 90]
----------------------------------------
<transform> ::=
diff --git a/src/parser/solparser.c b/src/parser/solparser.c
@@ -1210,7 +1210,7 @@ parse_polyclip
#define CHECK_PARAM(Flag, Name) \
if(!(mask & BIT(Flag))) { \
log_err(parser, polyclip, \
- "the clipping polygon parameter `"Name"' is missing"); \
+ "the clipping polygon parameter `"Name"' is missing.\n"); \
res = RES_BAD_ARG; \
goto error; \
} (void)0
@@ -1747,7 +1747,7 @@ parse_sphere
} (void)0
if(!strcmp((char*)key->data.scalar.value, "radius")) {
SETUP_MASK(RADIUS, "radius");
- res = parse_real(parser, val, 0, DBL_MAX, &shape->radius);
+ res = parse_real(parser, val, nextafter(0, 1), DBL_MAX, &shape->radius);
} else if(!strcmp((char*)key->data.scalar.value, "slices")) {
SETUP_MASK(SLICES, "slices");
res = parse_integer(parser, val, 4, 4096, &shape->nslices);
@@ -2715,7 +2715,8 @@ parse_pillbox
goto error;
}
mask |= BIT(APERTURE);
- res = parse_real(parser, val, nextafter(0, 1), PI/2.0, &sun->aperture);
+ res = parse_real(parser, val, nextafter(0, 1), 90, &sun->aperture);
+ sun->aperture = MDEG2RAD(sun->aperture);
} else {
log_err(parser, pillbox, "unknown pillbox parameter `%s'.\n",
key->data.scalar.value);
diff --git a/src/solstice_args.c b/src/solstice_args.c
@@ -119,6 +119,21 @@ parse_sun_dir_list(const char* str, struct solstice_args* args)
goto error;
}
+ if(tmp[0] < 0 || tmp[0] >= 360) {
+ fprintf(stderr,
+ "Invalid azimuth angle `%g'. Azimuth must be in [0, 360[ degrees.\n",
+ tmp[0]);
+ res = RES_BAD_ARG;
+ goto error;
+ }
+ if(tmp[1] < 0 || tmp[1] > 90) {
+ fprintf(stderr,
+ "Invalid elevation angle `%g'. Elevation must be in [0, 90] degrees.\n",
+ tmp[1]);
+ res = RES_BAD_ARG;
+ goto error;
+ }
+
spherical.azimuth = MDEG2RAD(tmp[0]);
spherical.elevation = MDEG2RAD(tmp[1]);
sa_push(args->sun_dirs, spherical);
diff --git a/src/test_solstice_args.c b/src/test_solstice_args.c
@@ -205,6 +205,27 @@ test_sun_dirs(void)
cmd = cmd_create(0, "test", "-D", "1.2,3.4:5.2,A", NULL);
CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_BAD_ARG);
cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "-0.1,2", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_BAD_ARG);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "360,2", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_BAD_ARG);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,-1", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_BAD_ARG);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,91", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_BAD_ARG);
+ cmd_delete(cmd);
+
+ cmd = cmd_create(0, "test", "-D", "0,90", NULL);
+ CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_OK);
+ solstice_args_release(&args);
+ cmd_delete(cmd);
}
int