commit 088b3fc08a1e7d29818a77b5cbe96964db5e5c5d
parent 06b836cda6bfc748801cb882c2b490dbe2385635
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Fri, 6 Oct 2017 17:49:50 +0200
The nslices arg validity for s3dut_create_hemisphere is now [3 Inf).
The same as other sphere related functions.
Diffstat:
3 files changed, 52 insertions(+), 75 deletions(-)
diff --git a/src/s3dut.h b/src/s3dut.h
@@ -133,7 +133,7 @@ S3DUT_API res_T
s3dut_create_hemisphere
(struct mem_allocator* allocator,
const double radius,
- const unsigned nslices, /* # subdivisions around Z axis in [2, INF) */
+ const unsigned nslices, /* # subdivisions around Z axis in [3, INF) */
const unsigned nstacks, /* # subdivisions along Z axis int [2, INF) */
struct s3dut_mesh** hemisphere);
diff --git a/src/s3dut_sphere.c b/src/s3dut_sphere.c
@@ -171,16 +171,46 @@ setup_sphere_indices
}
}
-static res_T
-s3dut_create_truncated_sphere_do
+/*******************************************************************************
+ * Exported function
+ ******************************************************************************/
+res_T
+s3dut_create_sphere
(struct mem_allocator* allocator,
const double radius,
const unsigned nslices,
const unsigned nstacks,
- const double z_range[2],
- const unsigned close_ends,
struct s3dut_mesh** mesh)
{
+ return s3dut_create_truncated_sphere
+ (allocator, radius, nslices, nstacks, NULL, 0, mesh);
+}
+
+res_T
+s3dut_create_hemisphere
+(struct mem_allocator* allocator,
+ const double radius,
+ const unsigned nslices,
+ const unsigned nstacks,
+ struct s3dut_mesh** mesh)
+{
+ double z_range[2];
+ z_range[0] = 0;
+ z_range[1] = +radius;
+ return s3dut_create_truncated_sphere
+ (allocator, radius, nslices, nstacks, z_range, 0, mesh);
+}
+
+res_T
+s3dut_create_truncated_sphere
+(struct mem_allocator* allocator,
+ const double radius,
+ const unsigned nslices,
+ const unsigned nstacks,
+ const double z_range[2],
+ const unsigned close_ends,
+ struct s3dut_mesh** mesh)
+{
struct s3dut_mesh* sphere = NULL;
const int top_truncated = z_range && z_range[1] < +radius;
const int bottom_truncated = z_range && z_range[0] > -radius;
@@ -197,6 +227,12 @@ s3dut_create_truncated_sphere_do
res_T res = RES_OK;
ASSERT(0 <= nb_truncated && nb_truncated <= 2);
+ if(radius <= 0 || nslices < 3 || nstacks < 2 || !mesh
+ || (z_range && z_range[0] >= z_range[1])) {
+ res = RES_BAD_ARG;
+ goto error;
+ }
+
res = mesh_create(allocator, S3DUT_MESH_SPHERE, nverts, ntris, &sphere);
if(res != RES_OK) goto error;
@@ -217,62 +253,3 @@ error:
}
goto exit;
}
-
-
-/*******************************************************************************
- * Exported function
- ******************************************************************************/
-res_T
-s3dut_create_sphere
- (struct mem_allocator* allocator,
- const double radius,
- const unsigned nslices,
- const unsigned nstacks,
- struct s3dut_mesh** mesh)
-{
- if(radius <= 0 || nslices < 3 || nstacks < 2 || !mesh) {
- return RES_BAD_ARG;
- }
-
- return s3dut_create_truncated_sphere_do
- (allocator, radius, nslices, nstacks, NULL, 0, mesh);
-}
-
-res_T
-s3dut_create_hemisphere
-(struct mem_allocator* allocator,
- const double radius,
- const unsigned nslices,
- const unsigned nstacks,
- struct s3dut_mesh** mesh)
-{
- double z_range[2];
-
- if(radius <= 0 || nslices < 2 || nstacks < 2 || !mesh) {
- return RES_BAD_ARG;
- }
-
- z_range[0] = 0;
- z_range[1] = +radius;
- return s3dut_create_truncated_sphere_do
- (allocator, radius, nslices, nstacks, z_range, 0, mesh);
-}
-
-res_T
-s3dut_create_truncated_sphere
- (struct mem_allocator* allocator,
- const double radius,
- const unsigned nslices,
- const unsigned nstacks,
- const double z_range[2],
- const unsigned close_ends,
- struct s3dut_mesh** mesh)
-{
- if(radius <= 0 || nslices < 3 || nstacks < 2 || !mesh
- || (z_range && z_range[0] >= z_range[1])) {
- return RES_BAD_ARG;
- }
-
- return s3dut_create_truncated_sphere_do
- (allocator, radius, nslices, nstacks, z_range, close_ends, mesh);
-}
diff --git a/src/test_s3dut_hemisphere.c b/src/test_s3dut_hemisphere.c
@@ -32,20 +32,20 @@ main(int argc, char** argv)
CHECK(s3dut_create_hemisphere(NULL, 0, 0, 0, NULL), RES_BAD_ARG);
CHECK(s3dut_create_hemisphere(NULL, 1, 0, 0, NULL), RES_BAD_ARG);
- CHECK(s3dut_create_hemisphere(NULL, 0, 2, 0, NULL), RES_BAD_ARG);
- CHECK(s3dut_create_hemisphere(NULL, 1, 2, 0, NULL), RES_BAD_ARG);
+ CHECK(s3dut_create_hemisphere(NULL, 0, 3, 0, NULL), RES_BAD_ARG);
+ CHECK(s3dut_create_hemisphere(NULL, 1, 3, 0, NULL), RES_BAD_ARG);
CHECK(s3dut_create_hemisphere(NULL, 0, 0, 2, NULL), RES_BAD_ARG);
CHECK(s3dut_create_hemisphere(NULL, 1, 0, 2, NULL), RES_BAD_ARG);
- CHECK(s3dut_create_hemisphere(NULL, 0, 2, 2, NULL), RES_BAD_ARG);
- CHECK(s3dut_create_hemisphere(NULL, 1, 2, 2, NULL), RES_BAD_ARG);
+ CHECK(s3dut_create_hemisphere(NULL, 0, 3, 2, NULL), RES_BAD_ARG);
+ CHECK(s3dut_create_hemisphere(NULL, 1, 3, 2, NULL), RES_BAD_ARG);
CHECK(s3dut_create_hemisphere(NULL, 0, 0, 0, &msh), RES_BAD_ARG);
CHECK(s3dut_create_hemisphere(NULL, 1, 0, 0, &msh), RES_BAD_ARG);
- CHECK(s3dut_create_hemisphere(NULL, 0, 2, 0, &msh), RES_BAD_ARG);
- CHECK(s3dut_create_hemisphere(NULL, 1, 2, 0, &msh), RES_BAD_ARG);
+ CHECK(s3dut_create_hemisphere(NULL, 0, 3, 0, &msh), RES_BAD_ARG);
+ CHECK(s3dut_create_hemisphere(NULL, 1, 3, 0, &msh), RES_BAD_ARG);
CHECK(s3dut_create_hemisphere(NULL, 0, 0, 2, &msh), RES_BAD_ARG);
CHECK(s3dut_create_hemisphere(NULL, 1, 0, 2, &msh), RES_BAD_ARG);
- CHECK(s3dut_create_hemisphere(NULL, 0, 2, 2, &msh), RES_BAD_ARG);
- CHECK(s3dut_create_hemisphere(NULL, 1, 2, 2, &msh), RES_OK);
+ CHECK(s3dut_create_hemisphere(NULL, 0, 3, 2, &msh), RES_BAD_ARG);
+ CHECK(s3dut_create_hemisphere(NULL, 1, 3, 2, &msh), RES_OK);
CHECK(s3dut_mesh_ref_get(NULL), RES_BAD_ARG);
CHECK(s3dut_mesh_ref_get(msh), RES_OK);
@@ -53,12 +53,12 @@ main(int argc, char** argv)
CHECK(s3dut_mesh_ref_put(msh), RES_OK);
CHECK(s3dut_mesh_ref_put(msh), RES_OK);
- CHECK(s3dut_create_hemisphere(&allocator, 1, 2, 2, &msh), RES_OK);
+ CHECK(s3dut_create_hemisphere(&allocator, 1, 3, 2, &msh), RES_OK);
CHECK(s3dut_mesh_ref_put(msh), RES_OK);
CHECK(s3dut_create_hemisphere(&allocator, 1, 1, 2, &msh), RES_BAD_ARG);
- CHECK(s3dut_create_hemisphere(&allocator, 1, 2, 1, &msh), RES_BAD_ARG);
- CHECK(s3dut_create_hemisphere(&allocator,-1, 2, 2, &msh), RES_BAD_ARG);
+ CHECK(s3dut_create_hemisphere(&allocator, 1, 3, 1, &msh), RES_BAD_ARG);
+ CHECK(s3dut_create_hemisphere(&allocator,-1, 3, 2, &msh), RES_BAD_ARG);
CHECK(s3dut_create_hemisphere(&allocator, 1, 32, 16, &msh), RES_OK);
CHECK(s3dut_mesh_get_data(NULL, NULL), RES_BAD_ARG);