test_api.c (72964B)
1 /* Copyright (C) 2022-2024 |Méso|Star> (contact@meso-star.com) 2 * 3 * This program is free software: you can redistribute it and/or modify 4 * it under the terms of the GNU General Public License as published by 5 * the Free Software Foundation, either version 3 of the License, or 6 * (at your option) any later version. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public License 14 * along with this program. If not, see <http://www.gnu.org/licenses/>. */ 15 16 #include "scad.h" 17 #include "scad_geometry.h" 18 #include "test_common.h" 19 20 #include <rsys/rsys.h> 21 #include <rsys/str.h> 22 #include <rsys/math.h> 23 #include <rsys/double3.h> 24 #include <rsys/mem_allocator.h> 25 #include <rsys/dynamic_array_double.h> 26 27 #include <stdlib.h> 28 #include <stdio.h> 29 30 #define STRINGIZE(x) STRINGIZE2(x) 31 #define STRINGIZE2(x) #x 32 #define LINE_STRING STRINGIZE(__LINE__) 33 34 static void 35 dummy_release 36 (void* data) 37 { 38 (void) data; 39 return; 40 } 41 42 static void 43 get_position 44 (const size_t ivert, double pos[2], void* data) 45 { 46 double* coord = data; 47 ASSERT(pos && coord); 48 pos[0] = coord[2*ivert]; 49 pos[1] = coord[1+2*ivert]; 50 } 51 52 int 53 main(int argc, char* argv[]) 54 { 55 res_T res = RES_OK; 56 const double p1[3] = {0, 0, 0}; 57 const double p2[3] = {0.25, 0.25, 0.8}; 58 const double p3[3] = {0.85, 0, 0}; 59 const double p4[3] = {1, 0, 0}; 60 const double d0[3] = {0.1, 0.1, 0.1}; 61 const double d1[3] = {1, 1, 1}; 62 const double d2[3] = {1, 1, 0}; 63 const double s[3] = {1, 1, 1}; 64 double coord[] = {0, 1.6, 0.5, 0.9, 0.8, 0.6}; 65 struct scad_geometry* geom1 = NULL; 66 struct scad_geometry* geom2 = NULL; 67 struct scad_geometry* geom = NULL; 68 struct scad_geometry* poly = NULL; 69 struct scad_geometry** geom_array = NULL; 70 struct scad_geometry* geoms[2]; 71 struct scad_geometry* out_geoms[2]; 72 struct mem_allocator allocator; 73 struct darray_double trg; 74 struct scad_options options = SCAD_DEFAULT_OPTIONS; 75 struct scad_options opt = SCAD_DEFAULT_OPTIONS; 76 const char *name, *name2; 77 double m, tmp[3], tmp2[3]; 78 double affine[16] = { 1, 0, 0, 0.25, 0, 1, 0, 0.25, 0, 0, 1, 0.8, 0, 0, 0, 1 }; 79 size_t i, c; 80 int e; 81 void* data; 82 83 (void)argc; (void)argv; 84 85 OK(mem_init_proxy_allocator(&allocator, &mem_default_allocator)); 86 87 options.Misc.DebugEmptyContext = 1; 88 options.Mesh.MeshSizeExtendFromBoundary = 0; 89 options.Mesh.MeshSizeFromPoints = 0; 90 91 /* cannot call any API function before a successful call to scad_initialize */ 92 geom1 = geom2 = geom = 93 (struct scad_geometry*)1; /* To allow tests go past arg!=NULL */ 94 BAD(scad_finalize()); 95 BAD(scad_set_options(&options)); 96 BAD(scad_get_options(&options)); 97 BAD(scad_scene_count(&c)); 98 BAD(scad_scene_clear()); 99 BAD(scad_scene_write("test.step")); 100 BAD(scad_scene_mesh()); 101 BAD(scad_add_rectangle(p1, d2, &geom)); 102 BAD(scad_add_disk(p1, 1, &geom)); 103 BAD(scad_add_polygon(get_position, coord, 0, 3, &geom)); 104 BAD(scad_add_box(p1, d1, &geom)); 105 BAD(scad_add_cylinder(p1, d1, 2, 1, &geom)); 106 BAD(scad_add_sphere(p1, 1, &geom)); 107 BAD(scad_add_cone(p1, d1, 1, 1, 2*PI, &geom)); 108 BAD(scad_add_torus(p1, 1, 1, 2*PI, NULL, &geom)); 109 BAD(scad_geometry_dilate(geom1, p1, p1, &geom)); 110 BAD(scad_geometry_translate(geom1, p1, &geom)); 111 BAD(scad_geometry_rotate(geom1, p1, p1, 2, &geom)); 112 BAD(scad_geometry_extrude(geom1, p1, &geom)); 113 BAD(scad_geometry_explode(geom1, &geom_array, &c)); 114 BAD(scad_geometry_ref_get(geom1)); 115 BAD(scad_geometry_ref_put(geom1)); 116 BAD(scad_geometry_get_count(geom1, NULL)); 117 BAD(scad_geometry_is_empty(geom1, &e)); 118 BAD(scad_geometry_set_custom_data(geom1, NULL, NULL)); 119 BAD(scad_geometry_get_custom_data(geom1, (void*)&trg)); 120 BAD(scad_geometry_set_name(geom1, name)); 121 BAD(scad_geometries_set_name(&geom1, 1, name, 0)); 122 BAD(scad_geometry_get_name(geom1, &name)); 123 BAD(scad_geometries_swap(&geom1, &geom2, 1, 0)); 124 BAD(scad_geometry_get_mass(geom1, &m)); 125 BAD(scad_geometry_get_centerofmass(geom1, tmp)); 126 BAD(scad_geometry_get_closest_point(geom1, p1, tmp, &m, NULL)); 127 BAD(scad_geometry_get_normal(geom1, tmp, tmp, &geom)); 128 BAD(scad_geometry_get_bounding_box(geom1, tmp, tmp)); 129 BAD(scad_geometry_equal(geom1, geom2, &e)); 130 BAD(scad_geometry_is_included(geom1, &geom2, 1, &e)); 131 BAD(scad_geometries_collect(&geom1, 1, &geom2)); 132 BAD(scad_geometries_fuse(&geom1, 1, &geom2, 1, &geom)); 133 BAD(scad_geometries_cut(&geom1, 1, &geom2, 1, &geom)); 134 BAD(scad_geometries_intersect(&geom1, 1, &geom2, 1, &geom)); 135 BAD(scad_geometries_partition(&geom1, 1, 0, &geom)); 136 BAD(scad_geometries_common_boundaries(&geom1, 1, &geom2, 1, &geom_array, &c)); 137 BAD(scad_geometries_common_boundary(&geom1, 1, &geom2, 1, &geom)); 138 BAD(scad_geometries_boundaries(&geom1, 1, &geom_array, &c)); 139 BAD(scad_geometries_boundary(&geom1, 1, &geom)); 140 BAD(scad_geometry_copy(geom1, &geom2)); 141 BAD(scad_geometry_set_visibility(geom1, 0, 0)); 142 BAD(scad_geometries_set_periodic(&geom1, 1, &geom2, 1, affine)); 143 BAD(scad_geometries_set_mesh_size_modifier(&geom1, 1, SCAD_ABSOLUTE_SIZE, 1)); 144 BAD(scad_geometries_set_mesh_algorithm(&geom1, 1, SCAD_QUASI_STRUCTURED)); 145 BAD(scad_geometries_clear_mesh(&geom1, 1)); 146 BAD(scad_step_import("test.step", &geom_array, &c)); 147 BAD(scad_stl_export(geom1, "test.stl", SCAD_KEEP_NORMALS_UNCHANGED, 0)); 148 BAD(scad_stl_export_partial(geom1, &geom1, 1, "test.stl", 149 SCAD_KEEP_NORMALS_UNCHANGED, 0)); 150 BAD(scad_stl_export_split(geom1, "test.stl", SCAD_KEEP_NORMALS_UNCHANGED, 0)); 151 BAD(scad_stl_get_data(geom1, &trg)); 152 BAD(scad_stl_get_data_partial(geom1, &geom2, 1, &trg)); 153 BAD(scad_stl_data_write(&trg, "test.stl", SCAD_KEEP_NORMALS_UNCHANGED, 0)); 154 BAD(scad_run_ui()); 155 BAD(scad_synchronize()); 156 CHK(SIZE_MAX == scad_get_dimtag_refcount(3, 0)); 157 BAD(scad_dump_geometry(geom)); 158 BAD(scad_dump_geometries()); 159 160 /* cannot call any API function after a successful call to scad_finalize */ 161 OK(scad_initialize(NULL, &allocator, 3)); 162 OK(scad_finalize()); 163 164 BAD(scad_finalize()); 165 BAD(scad_set_options(&options)); 166 BAD(scad_get_options(&options)); 167 BAD(scad_scene_count(&c)); 168 BAD(scad_scene_clear()); 169 BAD(scad_scene_write("test.step")); 170 BAD(scad_scene_mesh()); 171 BAD(scad_add_rectangle(p1, d2, &geom)); 172 BAD(scad_add_disk(p1, 1, &geom)); 173 BAD(scad_add_polygon(get_position, coord, 0, 3, &geom)); 174 BAD(scad_add_box(p1, d1, &geom)); 175 BAD(scad_add_cylinder(p1, d1, 2, 1, &geom)); 176 BAD(scad_add_sphere(p1, 1, &geom)); 177 BAD(scad_add_cone(p1, d1, 1, 1, 2*PI, &geom)); 178 BAD(scad_add_torus(p1, 1, 1, 2*PI, NULL, &geom)); 179 BAD(scad_geometry_dilate(geom1, p1, p1, &geom)); 180 BAD(scad_geometry_translate(geom1, p1, &geom)); 181 BAD(scad_geometry_rotate(geom1, p1, p1, 2, &geom)); 182 BAD(scad_geometry_extrude(geom1, p1, &geom)); 183 BAD(scad_geometry_explode(geom1, &geom_array, &c)); 184 BAD(scad_geometry_ref_get(geom1)); 185 BAD(scad_geometry_ref_put(geom1)); 186 BAD(scad_geometry_get_count(geom1, NULL)); 187 BAD(scad_geometry_is_empty(geom1, &e)); 188 BAD(scad_geometry_set_custom_data(geom1, NULL, NULL)); 189 BAD(scad_geometry_get_custom_data(geom1, (void*)&trg)); 190 BAD(scad_geometry_set_name(geom1, name)); 191 BAD(scad_geometries_set_name(&geom1, 1, name, 0)); 192 BAD(scad_geometry_get_name(geom1, &name)); 193 BAD(scad_geometries_swap(&geom1, &geom2, 1, 0)); 194 BAD(scad_geometry_get_mass(geom1, &m)); 195 BAD(scad_geometry_get_centerofmass(geom1, tmp)); 196 BAD(scad_geometry_get_closest_point(geom1, tmp, tmp, &m, NULL)); 197 BAD(scad_geometry_get_normal(geom1, tmp, tmp, &geom)); 198 BAD(scad_geometry_get_bounding_box(geom1, tmp, tmp)); 199 BAD(scad_geometry_equal(geom1, geom2, &e)); 200 BAD(scad_geometry_is_included(geom1, &geom2, 1, &e)); 201 BAD(scad_geometries_collect(&geom1, 1, &geom2)); 202 BAD(scad_geometries_fuse(&geom1, 1, &geom2, 1, &geom)); 203 BAD(scad_geometries_cut(&geom1, 1, &geom2, 1, &geom)); 204 BAD(scad_geometries_intersect(&geom1, 1, &geom2, 1, &geom)); 205 BAD(scad_geometries_partition(&geom1, 1, 0, &geom)); 206 BAD(scad_geometries_common_boundaries(&geom1, 1, &geom2, 1, &geom_array, &c)); 207 BAD(scad_geometries_common_boundary(&geom1, 1, &geom2, 1, &geom)); 208 BAD(scad_geometries_boundaries(&geom1, 1, &geom_array, &c)); 209 BAD(scad_geometries_boundary(&geom1, 1, &geom)); 210 BAD(scad_geometry_copy(geom1, &geom2)); 211 BAD(scad_geometry_set_visibility(geom1, 0, 0)); 212 BAD(scad_geometries_set_periodic(&geom1, 1, &geom2, 1, affine)); 213 BAD(scad_geometries_set_mesh_size_modifier(&geom1, 1, SCAD_ABSOLUTE_SIZE, 1)); 214 BAD(scad_geometries_set_mesh_algorithm(&geom1, 1, SCAD_QUASI_STRUCTURED)); 215 BAD(scad_geometries_clear_mesh(&geom1, 1)); 216 BAD(scad_step_import("test.step", &geom_array, &c)); 217 BAD(scad_stl_export(geom1, "test.stl", SCAD_KEEP_NORMALS_UNCHANGED, 0)); 218 BAD(scad_stl_export_partial(geom1, &geom1, 1, "test.stl", 219 SCAD_KEEP_NORMALS_UNCHANGED, 0)); 220 BAD(scad_stl_export_split(geom1, "test.stl", SCAD_KEEP_NORMALS_UNCHANGED, 0)); 221 BAD(scad_stl_get_data(geom1, &trg)); 222 BAD(scad_stl_get_data_partial(geom1, &geom2, 1, &trg)); 223 BAD(scad_stl_data_write(&trg, "test.stl", SCAD_KEEP_NORMALS_UNCHANGED, 0)); 224 BAD(scad_run_ui()); 225 BAD(scad_synchronize()); 226 CHK(SIZE_MAX == scad_get_dimtag_refcount(3, 0)); 227 BAD(scad_dump_geometry(geom)); 228 BAD(scad_dump_geometries()); 229 230 BAD(scad_initialize(NULL, &allocator, 4)); 231 BAD(scad_initialize(NULL, &allocator, -1)); 232 OK(scad_initialize(NULL, &allocator, 3)); 233 234 OK(scad_scene_count(&c)); 235 CHK(c == 0); 236 237 OK(scad_set_options(NULL)); 238 OK(scad_set_options(&options)); 239 240 OK(scad_scene_count(&c)); 241 CHK(c == 0); 242 243 BAD(scad_get_options(NULL)); 244 OK(scad_get_options(&opt)); 245 246 OK(scad_scene_count(&c)); 247 CHK(c == 0); 248 249 BAD(scad_scene_count(NULL)); 250 OK(scad_scene_count(&c)); 251 CHK(c == 0); 252 OK(scad_add_rectangle(p1, d2, &geom)); 253 OK(scad_scene_count(&c)); 254 CHK(c == 1); 255 OK(scad_geometry_ref_put(geom)); 256 257 OK(scad_scene_count(&c)); 258 CHK(c == 0); 259 260 OK(scad_scene_clear()); 261 OK(scad_scene_count(&c)); 262 CHK(c == 0); 263 OK(scad_add_rectangle(p1, d2, &geom)); 264 OK(scad_scene_clear()); 265 OK(scad_scene_count(&c)); 266 CHK(c == 0); 267 OK(scad_add_rectangle(p1, d2, &geom)); 268 OK(scad_geometry_ref_get(geom)); 269 OK(scad_scene_clear()); 270 OK(scad_scene_count(&c)); 271 CHK(c == 0); 272 273 OK(scad_scene_count(&c)); 274 CHK(c == 0); 275 276 BAD(scad_scene_write(NULL)); 277 ERR(scad_scene_write("")); 278 ERR(scad_scene_write("/tmp/test.bad")); 279 OK(scad_scene_write("/tmp/test"LINE_STRING".step")); 280 281 OK(scad_scene_count(&c)); 282 CHK(c == 0); 283 284 BAD(scad_add_rectangle(NULL, NULL, NULL)); 285 BAD(scad_add_rectangle(NULL, NULL, &geom)); 286 BAD(scad_add_rectangle(NULL, d1, NULL)); 287 BAD(scad_add_rectangle(p1, NULL, NULL)); 288 BAD(scad_add_rectangle(NULL, d2, &geom)); 289 BAD(scad_add_rectangle(p1, NULL, &geom)); 290 BAD(scad_add_rectangle(p1, d2, NULL)); 291 OK(scad_add_rectangle(p1, d2, &geom)); 292 OK(scad_geometry_ref_put(geom)); 293 294 OK(scad_scene_count(&c)); 295 CHK(c == 0); 296 297 BAD(scad_add_disk(NULL, -1, NULL)); 298 BAD(scad_add_disk(NULL, -1, &geom)); 299 BAD(scad_add_disk(NULL, 1, NULL)); 300 BAD(scad_add_disk(p1, -1, NULL)); 301 BAD(scad_add_disk(NULL, 1, &geom)); 302 BAD(scad_add_disk(p1, -1, &geom)); 303 BAD(scad_add_disk(p1, 1, NULL)); 304 OK(scad_add_disk(p1, 1, &geom)); 305 OK(scad_geometry_ref_put(geom)); 306 307 OK(scad_scene_count(&c)); 308 CHK(c == 0); 309 310 BAD(scad_add_polygon(NULL, coord, 0, 0, NULL)); 311 BAD(scad_add_polygon(get_position, coord, 0, 0, NULL)); 312 BAD(scad_add_polygon(NULL, coord, 0, 3, NULL)); 313 BAD(scad_add_polygon(NULL, coord, 0, 0, &poly)); 314 BAD(scad_add_polygon(NULL, coord, 0, 3, &poly)); 315 BAD(scad_add_polygon(get_position, coord, 0, 0, &poly)); 316 BAD(scad_add_polygon(get_position, coord, 0, 3, NULL)); 317 OK(scad_add_polygon(get_position, coord, 0, 3, &poly)); 318 OK(scad_geometry_ref_put(poly)); 319 320 OK(scad_scene_count(&c)); 321 CHK(c == 0); 322 323 BAD(scad_add_box(NULL, NULL, NULL)); 324 BAD(scad_add_box(NULL, NULL, &geom)); 325 BAD(scad_add_box(NULL, d1, NULL)); 326 BAD(scad_add_box(p1, NULL, NULL)); 327 BAD(scad_add_box(NULL, d1, &geom)); 328 BAD(scad_add_box(p1, NULL, &geom)); 329 BAD(scad_add_box(p1, d1, NULL)); 330 OK(scad_add_box(p1, d1, &geom)); 331 OK(scad_geometry_ref_put(geom)); 332 333 OK(scad_scene_count(&c)); 334 CHK(c == 0); 335 336 BAD(scad_add_cylinder(NULL, NULL, -1, -1, NULL)); 337 BAD(scad_add_cylinder(NULL, NULL, -1, -1, &geom)); 338 BAD(scad_add_cylinder(NULL, NULL, -1, 1, NULL)); 339 BAD(scad_add_cylinder(NULL, NULL, 1, -1, NULL)); 340 BAD(scad_add_cylinder(NULL, d1, -1, -1, NULL)); 341 BAD(scad_add_cylinder(p1, NULL, -1, -1, NULL)); 342 BAD(scad_add_cylinder(NULL, NULL, -1, 1, &geom)); 343 BAD(scad_add_cylinder(NULL, NULL, 1, -1, &geom)); 344 BAD(scad_add_cylinder(NULL, d1, -1, -1, &geom)); 345 BAD(scad_add_cylinder(p1, NULL, -1, -1, &geom)); 346 BAD(scad_add_cylinder(NULL, NULL, 1, 1, NULL)); 347 BAD(scad_add_cylinder(NULL, d1, -1, 1, NULL)); 348 BAD(scad_add_cylinder(p1, NULL, -1, 1, NULL)); 349 BAD(scad_add_cylinder(NULL, d1, 1, -1, NULL)); 350 BAD(scad_add_cylinder(p1, NULL, 1, -1, NULL)); 351 BAD(scad_add_cylinder(p1, d1, -1, -1, NULL)); 352 BAD(scad_add_cylinder(NULL, NULL, 1, 1, &geom)); 353 BAD(scad_add_cylinder(NULL, d1, -1, 1, &geom)); 354 BAD(scad_add_cylinder(p1, NULL, -1, 1, &geom)); 355 BAD(scad_add_cylinder(NULL, d1, 1, -1, &geom)); 356 BAD(scad_add_cylinder(p1, NULL, 1, -1, &geom)); 357 BAD(scad_add_cylinder(p1, d1, -1, -1, &geom)); 358 BAD(scad_add_cylinder(NULL, d1, 1, 1, NULL)); 359 BAD(scad_add_cylinder(p1, NULL, 1, 1, NULL)); 360 BAD(scad_add_cylinder(p1, d1, -1, 1, NULL)); 361 BAD(scad_add_cylinder(p1, d1, 1, -1, NULL)); 362 BAD(scad_add_cylinder(NULL, d1, 1, 1, &geom)); 363 BAD(scad_add_cylinder(p1, NULL, 1, 1, &geom)); 364 BAD(scad_add_cylinder(p1, d1, -1, 1, &geom)); 365 BAD(scad_add_cylinder(p1, d1, 1, 3*PI, &geom)); 366 BAD(scad_add_cylinder(p1, d1, 1, 1, NULL)); 367 OK(scad_add_cylinder(p1, d1, 1, 1, &geom)); 368 OK(scad_geometry_ref_put(geom)); 369 370 OK(scad_scene_count(&c)); 371 CHK(c == 0); 372 373 BAD(scad_add_sphere(NULL, -1, NULL)); 374 BAD(scad_add_sphere(NULL, -1, &geom)); 375 BAD(scad_add_sphere(NULL, 1, NULL)); 376 BAD(scad_add_sphere(p1, -1, NULL)); 377 BAD(scad_add_sphere(NULL, 1, &geom)); 378 BAD(scad_add_sphere(p1, 0, &geom)); 379 BAD(scad_add_sphere(p1, 1, NULL)); 380 OK(scad_add_sphere(p1, 1, &geom)); 381 OK(scad_geometry_ref_put(geom)); 382 383 OK(scad_scene_count(&c)); 384 CHK(c == 0); 385 386 BAD(scad_add_cone(NULL, NULL, -1, -1, -1, NULL)); 387 BAD(scad_add_cone(NULL, NULL, -1, -1, -1, &geom)); 388 BAD(scad_add_cone(NULL, NULL, -1, -1, 2*PI, NULL)); 389 BAD(scad_add_cone(NULL, NULL, -1, -1, 2*PI, &geom)); 390 BAD(scad_add_cone(NULL, NULL, -1, 1, -1, NULL)); 391 BAD(scad_add_cone(NULL, NULL, -1, 1, -1, &geom)); 392 BAD(scad_add_cone(NULL, NULL, -1, 1, 2*PI, NULL)); 393 BAD(scad_add_cone(NULL, NULL, -1, 1, 2*PI, &geom)); 394 BAD(scad_add_cone(NULL, NULL, 0, -1, -1, NULL)); 395 BAD(scad_add_cone(NULL, NULL, 0, -1, -1, &geom)); 396 BAD(scad_add_cone(NULL, NULL, 0, -1, 2*PI, NULL)); 397 BAD(scad_add_cone(NULL, NULL, 0, -1, 2*PI, &geom)); 398 BAD(scad_add_cone(NULL, NULL, 0, 1, -1, NULL)); 399 BAD(scad_add_cone(NULL, NULL, 0, 1, -1, &geom)); 400 BAD(scad_add_cone(NULL, NULL, 0, 1, 2*PI, NULL)); 401 BAD(scad_add_cone(NULL, NULL, 0, 1, 2*PI, &geom)); 402 BAD(scad_add_cone(NULL, d1, -1, -1, -1, NULL)); 403 BAD(scad_add_cone(NULL, d1, -1, -1, -1, &geom)); 404 BAD(scad_add_cone(NULL, d1, -1, -1, 2*PI, NULL)); 405 BAD(scad_add_cone(NULL, d1, -1, -1, 2*PI, &geom)); 406 BAD(scad_add_cone(NULL, d1, -1, 1, -1, NULL)); 407 BAD(scad_add_cone(NULL, d1, -1, 1, -1, &geom)); 408 BAD(scad_add_cone(NULL, d1, -1, 1, 2*PI, NULL)); 409 BAD(scad_add_cone(NULL, d1, -1, 1, 2*PI, &geom)); 410 BAD(scad_add_cone(NULL, d1, 0, -1, -1, NULL)); 411 BAD(scad_add_cone(NULL, d1, 0, -1, -1, &geom)); 412 BAD(scad_add_cone(NULL, d1, 0, -1, 2*PI, NULL)); 413 BAD(scad_add_cone(NULL, d1, 0, -1, 2*PI, &geom)); 414 BAD(scad_add_cone(NULL, d1, 0, 1, -1, NULL)); 415 BAD(scad_add_cone(NULL, d1, 0, 1, -1, &geom)); 416 BAD(scad_add_cone(NULL, d1, 0, 1, 2*PI, NULL)); 417 BAD(scad_add_cone(NULL, d1, 0, 1, 2*PI, &geom)); 418 BAD(scad_add_cone(p1, NULL, -1, -1, -1, NULL)); 419 BAD(scad_add_cone(p1, NULL, -1, -1, -1, &geom)); 420 BAD(scad_add_cone(p1, NULL, -1, -1, 2*PI, NULL)); 421 BAD(scad_add_cone(p1, NULL, -1, -1, 2*PI, &geom)); 422 BAD(scad_add_cone(p1, NULL, -1, 1, -1, NULL)); 423 BAD(scad_add_cone(p1, NULL, -1, 1, -1, &geom)); 424 BAD(scad_add_cone(p1, NULL, -1, 1, 2*PI, NULL)); 425 BAD(scad_add_cone(p1, NULL, -1, 1, 2*PI, &geom)); 426 BAD(scad_add_cone(p1, NULL, 0, -1, -1, NULL)); 427 BAD(scad_add_cone(p1, NULL, 0, -1, -1, &geom)); 428 BAD(scad_add_cone(p1, NULL, 0, -1, 2*PI, NULL)); 429 BAD(scad_add_cone(p1, NULL, 0, -1, 2*PI, &geom)); 430 BAD(scad_add_cone(p1, NULL, 0, 1, -1, NULL)); 431 BAD(scad_add_cone(p1, NULL, 0, 1, -1, &geom)); 432 BAD(scad_add_cone(p1, NULL, 0, 1, 2*PI, NULL)); 433 BAD(scad_add_cone(p1, NULL, 0, 1, 2*PI, &geom)); 434 BAD(scad_add_cone(p1, d1, -1, -1, -1, NULL)); 435 BAD(scad_add_cone(p1, d1, -1, -1, -1, &geom)); 436 BAD(scad_add_cone(p1, d1, -1, -1, 2*PI, NULL)); 437 BAD(scad_add_cone(p1, d1, -1, -1, 2*PI, &geom)); 438 BAD(scad_add_cone(p1, d1, -1, 1, -1, NULL)); 439 BAD(scad_add_cone(p1, d1, -1, 1, -1, &geom)); 440 BAD(scad_add_cone(p1, d1, -1, 1, 2*PI, NULL)); 441 BAD(scad_add_cone(p1, d1, -1, 1, 2*PI, &geom)); 442 BAD(scad_add_cone(p1, d1, 0, -1, -1, NULL)); 443 BAD(scad_add_cone(p1, d1, 0, -1, -1, &geom)); 444 BAD(scad_add_cone(p1, d1, 0, -1, 2*PI, NULL)); 445 BAD(scad_add_cone(p1, d1, 0, -1, 2*PI, &geom)); 446 BAD(scad_add_cone(p1, d1, 0, 1, -1, NULL)); 447 BAD(scad_add_cone(p1, d1, 0, 1, -1, &geom)); 448 BAD(scad_add_cone(p1, d1, 0, 1, 2*PI, NULL)); 449 OK(scad_add_cone(p1, d1, 0, 1, 2*PI, &geom)); 450 OK(scad_geometry_ref_put(geom)); 451 BAD(scad_add_cone(p1, d1, 1, 1, 2*PI, &geom)); /* r1 == r2 */ 452 453 OK(scad_scene_count(&c)); 454 CHK(c == 0); 455 456 BAD(scad_add_torus(NULL, 0, 0, -1, NULL, NULL)); 457 BAD(scad_add_torus(NULL, 0, 0, -1, NULL, &geom)); 458 BAD(scad_add_torus(NULL, 0, 0, -1, d1, NULL)); 459 BAD(scad_add_torus(NULL, 0, 0, -1, d1, &geom)); 460 BAD(scad_add_torus(NULL, 0, 0, 2*PI, NULL, NULL)); 461 BAD(scad_add_torus(NULL, 0, 0, 2*PI, NULL, &geom)); 462 BAD(scad_add_torus(NULL, 0, 0, 2*PI, d1, NULL)); 463 BAD(scad_add_torus(NULL, 0, 0, 2*PI, d1, &geom)); 464 BAD(scad_add_torus(NULL, 0, 1, -1, NULL, NULL)); 465 BAD(scad_add_torus(NULL, 0, 1, -1, NULL, &geom)); 466 BAD(scad_add_torus(NULL, 0, 1, -1, d1, NULL)); 467 BAD(scad_add_torus(NULL, 0, 1, -1, d1, &geom)); 468 BAD(scad_add_torus(NULL, 0, 1, 2*PI, NULL, NULL)); 469 BAD(scad_add_torus(NULL, 0, 1, 2*PI, NULL, &geom)); 470 BAD(scad_add_torus(NULL, 0, 1, 2*PI, d1, NULL)); 471 BAD(scad_add_torus(NULL, 0, 1, 2*PI, d1, &geom)); 472 BAD(scad_add_torus(NULL, 1, 0, -1, NULL, NULL)); 473 BAD(scad_add_torus(NULL, 1, 0, -1, NULL, &geom)); 474 BAD(scad_add_torus(NULL, 1, 0, -1, d1, NULL)); 475 BAD(scad_add_torus(NULL, 1, 0, -1, d1, &geom)); 476 BAD(scad_add_torus(NULL, 1, 0, 2*PI, NULL, NULL)); 477 BAD(scad_add_torus(NULL, 1, 0, 2*PI, NULL, &geom)); 478 BAD(scad_add_torus(NULL, 1, 0, 2*PI, d1, NULL)); 479 BAD(scad_add_torus(NULL, 1, 0, 2*PI, d1, &geom)); 480 BAD(scad_add_torus(NULL, 1, 1, -1, NULL, NULL)); 481 BAD(scad_add_torus(NULL, 1, 1, -1, NULL, &geom)); 482 BAD(scad_add_torus(NULL, 1, 1, -1, d1, NULL)); 483 BAD(scad_add_torus(NULL, 1, 1, -1, d1, &geom)); 484 BAD(scad_add_torus(NULL, 1, 1, 2*PI, NULL, NULL)); 485 BAD(scad_add_torus(NULL, 1, 1, 2*PI, NULL, &geom)); 486 BAD(scad_add_torus(NULL, 1, 1, 2*PI, d1, NULL)); 487 BAD(scad_add_torus(NULL, 1, 1, 2*PI, d1, &geom)); 488 BAD(scad_add_torus(p1, 0, 0, -1, NULL, NULL)); 489 BAD(scad_add_torus(p1, 0, 0, -1, NULL, &geom)); 490 BAD(scad_add_torus(p1, 0, 0, -1, d1, NULL)); 491 BAD(scad_add_torus(p1, 0, 0, -1, d1, &geom)); 492 BAD(scad_add_torus(p1, 0, 0, 2*PI, NULL, NULL)); 493 BAD(scad_add_torus(p1, 0, 0, 2*PI, NULL, &geom)); 494 BAD(scad_add_torus(p1, 0, 0, 2*PI, d1, NULL)); 495 BAD(scad_add_torus(p1, 0, 0, 2*PI, d1, &geom)); 496 BAD(scad_add_torus(p1, 0, 1, -1, NULL, NULL)); 497 BAD(scad_add_torus(p1, 0, 1, -1, NULL, &geom)); 498 BAD(scad_add_torus(p1, 0, 1, -1, d1, NULL)); 499 BAD(scad_add_torus(p1, 0, 1, -1, d1, &geom)); 500 BAD(scad_add_torus(p1, 0, 1, 2*PI, NULL, NULL)); 501 BAD(scad_add_torus(p1, 0, 1, 2*PI, NULL, &geom)); 502 BAD(scad_add_torus(p1, 0, 1, 2*PI, d1, NULL)); 503 BAD(scad_add_torus(p1, 0, 1, 2*PI, d1, &geom)); 504 BAD(scad_add_torus(p1, 1, 0, -1, NULL, NULL)); 505 BAD(scad_add_torus(p1, 1, 0, -1, NULL, &geom)); 506 BAD(scad_add_torus(p1, 1, 0, -1, d1, NULL)); 507 BAD(scad_add_torus(p1, 1, 0, -1, d1, &geom)); 508 BAD(scad_add_torus(p1, 1, 0, 2*PI, NULL, NULL)); 509 BAD(scad_add_torus(p1, 1, 0, 2*PI, NULL, &geom)); 510 BAD(scad_add_torus(p1, 1, 0, 2*PI, d1, NULL)); 511 BAD(scad_add_torus(p1, 1, 0, 2*PI, d1, &geom)); 512 BAD(scad_add_torus(p1, 1, 1, -1, NULL, NULL)); 513 BAD(scad_add_torus(p1, 1, 1, -1, NULL, &geom)); 514 BAD(scad_add_torus(p1, 1, 1, -1, d1, NULL)); 515 BAD(scad_add_torus(p1, 1, 1, -1, d1, &geom)); 516 BAD(scad_add_torus(p1, 1, 1, 2*PI, NULL, NULL)); 517 OK(scad_add_torus(p1, 1, 1, 2*PI, NULL, &geom)); 518 OK(scad_geometry_ref_put(geom)); 519 BAD(scad_add_torus(p1, 1, 1, 2*PI, d1, NULL)); 520 OK(scad_add_torus(p1, 1, 1, 2*PI, d1, &geom)); 521 OK(scad_geometry_ref_put(geom)); 522 523 OK(scad_scene_count(&c)); 524 CHK(c == 0); 525 526 OK(scad_add_sphere(p1, 1, &geom1)); 527 BAD(scad_geometry_dilate(NULL, NULL, NULL, NULL)); 528 BAD(scad_geometry_dilate(NULL, NULL, NULL, &geom)); 529 BAD(scad_geometry_dilate(NULL, NULL, s, NULL)); 530 BAD(scad_geometry_dilate(NULL, p1, NULL, NULL)); 531 BAD(scad_geometry_dilate(geom1, NULL, NULL, NULL)); 532 BAD(scad_geometry_dilate(NULL, NULL, s, &geom)); 533 BAD(scad_geometry_dilate(NULL, p1, NULL, &geom)); 534 BAD(scad_geometry_dilate(geom1, NULL, NULL, &geom)); 535 BAD(scad_geometry_dilate(NULL, p1, s, NULL)); 536 BAD(scad_geometry_dilate(geom1, NULL, s, NULL)); 537 BAD(scad_geometry_dilate(NULL, p1, s, &geom)); 538 BAD(scad_geometry_dilate(geom1, NULL, p1, &geom)); 539 BAD(scad_geometry_dilate(geom1, p1, NULL, &geom)); 540 BAD(scad_geometry_dilate(geom1, p1, s, NULL)); 541 OK(scad_geometry_dilate(geom1, p1, s, &geom)); 542 OK(scad_geometry_ref_put(geom1)); 543 OK(scad_geometry_ref_put(geom)); 544 545 OK(scad_scene_count(&c)); 546 CHK(c == 0); 547 548 OK(scad_add_sphere(p1, 1, &geom1)); 549 BAD(scad_geometry_translate(NULL, NULL, NULL)); 550 BAD(scad_geometry_translate(NULL, NULL, &geom)); 551 BAD(scad_geometry_translate(NULL, d1, NULL)); 552 BAD(scad_geometry_translate(geom1, NULL, NULL)); 553 BAD(scad_geometry_translate(NULL, d1, &geom)); 554 BAD(scad_geometry_translate(geom1, NULL, &geom)); 555 BAD(scad_geometry_translate(geom1, d1, NULL)); 556 OK(scad_geometry_translate(geom1, d1, &geom)); 557 OK(scad_geometry_ref_put(geom1)); 558 OK(scad_geometry_ref_put(geom)); 559 560 OK(scad_scene_count(&c)); 561 CHK(c == 0); 562 563 OK(scad_add_sphere(p1, 1, &geom1)); 564 BAD(scad_geometry_rotate(NULL, NULL, NULL, 1, NULL)); 565 BAD(scad_geometry_rotate(NULL, NULL, NULL, 1, &geom)); 566 BAD(scad_geometry_rotate(NULL, NULL, d1, 1, NULL)); 567 BAD(scad_geometry_rotate(NULL, p1, NULL, 1, NULL)); 568 BAD(scad_geometry_rotate(geom1, NULL, NULL, 1, NULL)); 569 BAD(scad_geometry_rotate(NULL, NULL, d1, 1, &geom)); 570 BAD(scad_geometry_rotate(NULL, p1, NULL, 1, &geom)); 571 BAD(scad_geometry_rotate(geom1, NULL, NULL, 1, &geom)); 572 BAD(scad_geometry_rotate(NULL, p1, d1, 1, NULL)); 573 BAD(scad_geometry_rotate(geom1, NULL, d1, 1, NULL)); 574 BAD(scad_geometry_rotate(geom1, p1, NULL, 1, NULL)); 575 BAD(scad_geometry_rotate(NULL, p1, d1, 1, &geom)); 576 BAD(scad_geometry_rotate(geom1, NULL, d1, 1, &geom)); 577 BAD(scad_geometry_rotate(geom1, p1, NULL, 1, &geom)); 578 BAD(scad_geometry_rotate(geom1, p1, d1, 1, NULL)); 579 OK(scad_geometry_rotate(geom1, p1, d1, 1, &geom)); 580 OK(scad_geometry_ref_put(geom1)); 581 OK(scad_geometry_ref_put(geom)); 582 583 OK(scad_scene_count(&c)); 584 CHK(c == 0); 585 586 OK(scad_add_polygon(get_position, coord, 0, 3, &poly)); 587 BAD(scad_geometry_extrude(NULL, NULL, NULL)); 588 BAD(scad_geometry_extrude(NULL, NULL, &geom)); 589 BAD(scad_geometry_extrude(NULL, d1, NULL)); 590 BAD(scad_geometry_extrude(poly, NULL, NULL)); 591 BAD(scad_geometry_extrude(NULL, d1, &geom)); 592 BAD(scad_geometry_extrude(poly, NULL, &geom)); 593 BAD(scad_geometry_extrude(poly, d1, NULL)); 594 OK(scad_geometry_extrude(poly, d1, &geom)); 595 OK(scad_geometry_ref_put(poly)); 596 OK(scad_geometry_ref_put(geom)); 597 598 OK(scad_scene_count(&c)); 599 CHK(c == 0); 600 601 OK(scad_add_polygon(get_position, coord, 0, 3, geoms+0)); 602 OK(scad_geometry_translate(geoms[0], d1, geoms+1)); 603 OK(scad_geometries_collect(geoms, 2, &poly)); 604 OK(scad_geometry_ref_put(geoms[0])); 605 OK(scad_geometry_ref_put(geoms[1])); 606 OK(scad_geometry_extrude(poly, d1, &geom)); 607 OK(scad_geometry_ref_put(poly)); 608 OK(scad_geometry_ref_put(geom)); 609 610 OK(scad_scene_count(&c)); 611 CHK(c == 0); 612 613 OK(scad_add_sphere(p1, 1, &geom)); 614 BAD(scad_geometry_extrude(geom, d1, &geom2)); 615 OK(scad_geometry_ref_put(geom)); 616 617 OK(scad_scene_count(&c)); 618 CHK(c == 0); 619 620 OK(scad_add_sphere(p1, 1, geoms+0)); 621 OK(scad_add_sphere(p2, 2, geoms+1)); 622 OK(scad_geometries_collect(geoms, 2, &geom)); 623 OK(scad_geometry_ref_put(geoms[0])); 624 OK(scad_geometry_ref_put(geoms[1])); 625 BAD(scad_geometry_explode(NULL, NULL, NULL)); 626 BAD(scad_geometry_explode(NULL, NULL, &c)); 627 BAD(scad_geometry_explode(NULL, &geom_array, NULL)); 628 BAD(scad_geometry_explode(geom, NULL, NULL)); 629 BAD(scad_geometry_explode(NULL, &geom_array, &c)); 630 BAD(scad_geometry_explode(geom, NULL, &c)); 631 BAD(scad_geometry_explode(geom, &geom_array, NULL)); 632 OK(scad_geometry_explode(geom, &geom_array, &c)); 633 OK(scad_geometry_ref_put(geom)); 634 CHK(c == 2); 635 OK(scad_geometry_ref_put(geom_array[0])); 636 OK(scad_geometry_ref_put(geom_array[1])); 637 MEM_RM(&allocator, geom_array); 638 639 OK(scad_scene_count(&c)); 640 CHK(c == 0); 641 642 OK(scad_add_sphere(p1, 1, &geom)); 643 BAD(scad_geometry_ref_get(NULL)); 644 OK(scad_geometry_ref_get(geom)); 645 BAD(scad_geometry_ref_put(NULL)); 646 OK(scad_geometry_ref_put(geom)); 647 OK(scad_geometry_ref_put(geom)); 648 649 OK(scad_scene_count(&c)); 650 CHK(c == 0); 651 652 BAD(scad_geometry_get_count(NULL, &c)); 653 BAD(scad_geometry_get_count(geom, NULL)); 654 OK(scad_add_sphere(p1, 1, &geom)); 655 OK(scad_geometry_get_count(geom, &c)); 656 CHK(c == 1); 657 OK(scad_geometry_ref_put(geom)); 658 659 OK(scad_scene_count(&c)); 660 CHK(c == 0); 661 662 OK(scad_add_sphere(p1, 0.1, &geom)); 663 OK(scad_add_sphere(p3, 0.1, &geom1)); 664 OK(scad_geometries_intersect(&geom, 1, &geom1, 1, &geom2)); 665 BAD(scad_geometry_is_empty(NULL, &e)); 666 BAD(scad_geometry_is_empty(geom, NULL)); 667 OK(scad_geometry_is_empty(geom, &e)); 668 CHK(e == 0); 669 OK(scad_geometry_is_empty(geom2, &e)); 670 CHK(e == 1); 671 OK(scad_geometry_ref_put(geom)); 672 OK(scad_geometry_ref_put(geom1)); 673 OK(scad_geometry_ref_put(geom2)); 674 675 OK(scad_scene_count(&c)); 676 CHK(c == 0); 677 678 OK(scad_add_sphere(p1, 1, &geom)); 679 BAD(scad_geometry_set_custom_data(NULL, NULL, NULL)); 680 OK(scad_geometry_set_custom_data(geom, NULL, NULL)); 681 OK(scad_geometry_set_custom_data(geom, NULL, (void*)&e)); 682 OK(scad_geometry_set_custom_data(geom, dummy_release, NULL)); 683 OK(scad_geometry_set_custom_data(geom, dummy_release, (void*)&e)); 684 OK(scad_geometry_ref_put(geom)); 685 686 OK(scad_scene_count(&c)); 687 CHK(c == 0); 688 689 OK(scad_add_sphere(p1, 1, &geom)); 690 BAD(scad_geometry_get_custom_data(NULL, NULL)); 691 BAD(scad_geometry_get_custom_data(geom, NULL)); 692 OK(scad_geometry_get_custom_data(geom, &data)); 693 CHK(data == NULL); /* NULL when unset */ 694 OK(scad_geometry_set_custom_data(geom, NULL, (void*)&c)); 695 OK(scad_geometry_get_custom_data(geom, &data)); 696 CHK(data == (void*)&c); 697 OK(scad_geometry_set_custom_data(geom, NULL, NULL)); 698 OK(scad_geometry_get_custom_data(geom, &data)); 699 CHK(data == NULL); 700 OK(scad_geometry_set_custom_data(geom, dummy_release, (void*)&c)); 701 OK(scad_geometry_get_custom_data(geom, &data)); 702 CHK(data == (void*)&c); 703 OK(scad_geometry_ref_put(geom)); 704 705 OK(scad_scene_count(&c)); 706 CHK(c == 0); 707 708 OK(scad_add_sphere(p1, 1, &geom1)); 709 OK(scad_add_sphere(p2, 2, &geom2)); 710 BAD(scad_geometry_set_name(NULL, NULL)); 711 OK(scad_geometry_set_name(geom1, "sphere 1")); 712 OK(scad_geometry_set_name(geom1, "sphere 1")); /* Same geometry: OK */ 713 name = "sphere 2"; 714 OK(scad_geometry_set_name(geom2, name)); 715 BAD(scad_geometry_set_name(geom2, "sphere 1")); /* Name already in use */ 716 OK(scad_geometry_get_name(geom2, &name2)); 717 CHK(0 == strcmp(name, name2)); /* Name was left unchanged */ 718 OK(scad_geometry_ref_put(geom1)); 719 OK(scad_geometry_ref_put(geom2)); 720 721 OK(scad_scene_count(&c)); 722 CHK(c == 0); 723 724 OK(scad_add_sphere(p1, 1, &geoms[0])); 725 OK(scad_add_sphere(p2, 2, &geoms[1])); 726 BAD(scad_geometries_set_name(NULL, 0, NULL, 0)); 727 BAD(scad_geometries_set_name(NULL, 2, NULL, 0)); 728 BAD(scad_geometries_set_name(geoms, 0, NULL, 0)); 729 OK(scad_geometries_set_name(geoms, 2, NULL, 0)); 730 BAD(scad_geometries_set_name(NULL, 0, "name", 0)); 731 BAD(scad_geometries_set_name(NULL, 2, "name", 0)); 732 BAD(scad_geometries_set_name(geoms, 0, "name", 0)); 733 OK(scad_geometries_set_name(geoms, 2, "name", 0)); 734 OK(scad_geometries_set_name(geoms, 2, "name", 0)); /* Same geometries: OK */ 735 OK(scad_geometry_get_name(geoms[1], &name)); 736 BAD(scad_geometries_set_name(geoms+1, 1, "name", 0)); /* Name already in use */ 737 OK(scad_geometry_get_name(geoms[1], &name2)); 738 CHK(0 == strcmp(name, name2)); /* Name was left unchanged */ 739 OK(scad_geometry_ref_put(geoms[0])); 740 OK(scad_geometry_ref_put(geoms[1])); 741 742 OK(scad_scene_count(&c)); 743 CHK(c == 0); 744 745 OK(scad_scene_count(&c)); 746 CHK(c == 0); 747 OK(scad_add_sphere(p1, 1, &geom)); 748 BAD(scad_geometry_get_name(NULL, &name)); 749 BAD(scad_geometry_get_name(geom, NULL)); 750 OK(scad_geometry_get_name(geom, &name)); 751 CHK(name == NULL); 752 name = "sphere 1"; 753 OK(scad_geometry_set_name(geom, name)); 754 OK(scad_geometry_get_name(geom, &name2)); 755 CHK(0 == strcmp(name, name2)); 756 OK(scad_geometry_set_name(geom, NULL)); 757 OK(scad_geometry_get_name(geom, &name)); 758 CHK(name == NULL); 759 OK(scad_geometry_ref_put(geom)); 760 761 OK(scad_scene_count(&c)); 762 CHK(c == 0); 763 764 OK(scad_add_sphere(p1, 1, &geom1)); 765 OK(scad_add_sphere(p2, 2, &geom2)); 766 /* Sharing content */ 767 OK(scad_geometries_collect(&geom1, 1, geoms+0)); 768 OK(scad_geometries_collect(&geom2, 1, geoms+1)); 769 OK(scad_geometry_set_name(geom1, "sphere 1")); 770 OK(scad_geometry_set_name(geom2, "sphere 2")); 771 BAD(scad_geometries_swap(NULL, NULL, 0, 0)); 772 BAD(scad_geometries_swap(NULL, NULL, 0, SCAD_SWAP_GEOMETRY)); 773 BAD(scad_geometries_swap(NULL, NULL, 1, 0)); 774 BAD(scad_geometries_swap(NULL, &geom2, 0, 0)); 775 BAD(scad_geometries_swap(&geom1, NULL, 0, 0)); 776 BAD(scad_geometries_swap(NULL, NULL, 1, SCAD_SWAP_GEOMETRY)); 777 BAD(scad_geometries_swap(NULL, &geom2, 0, SCAD_SWAP_GEOMETRY)); 778 BAD(scad_geometries_swap(&geom1, NULL, 0, SCAD_SWAP_GEOMETRY)); 779 BAD(scad_geometries_swap(NULL, &geom2, 1, 0)); 780 BAD(scad_geometries_swap(&geom1, NULL, 1, 0)); 781 BAD(scad_geometries_swap(&geom1, &geom2, 0, 0)); 782 BAD(scad_geometries_swap(NULL, &geom2, 1, SCAD_SWAP_GEOMETRY)); 783 BAD(scad_geometries_swap(&geom1, NULL, 1, SCAD_SWAP_GEOMETRY)); 784 BAD(scad_geometries_swap(&geom1, &geom2, 0, SCAD_SWAP_GEOMETRY)); 785 BAD(scad_geometries_swap(&geom1, &geom2, 1, 0)); 786 OK(scad_geometries_swap(&geom1, &geom2, 1, SCAD_SWAP_GEOMETRY)); 787 /* Names not swapped */ 788 OK(scad_geometry_get_name(geom1, &name)); 789 OK(scad_geometry_get_name(geom2, &name2)); 790 CHK(0 == strcmp(name, "sphere 1")); 791 CHK(0 == strcmp(name2, "sphere 2")); 792 /* Geometries swaped */ 793 OK(scad_geometry_equal(geom1, geoms[1], &e)); 794 CHK(e); 795 OK(scad_geometry_equal(geom2, geoms[0], &e)); 796 CHK(e); 797 OK(scad_geometries_swap(&geom1, &geom2, 1, SCAD_SWAP_NAME)); 798 /* Names swapped */ 799 OK(scad_geometry_get_name(geom1, &name)); 800 OK(scad_geometry_get_name(geom2, &name2)); 801 CHK(0 == strcmp(name, "sphere 2")); 802 CHK(0 == strcmp(name2, "sphere 1")); 803 /* Geometries not swaped */ 804 OK(scad_geometry_equal(geom1, geoms[1], &e)); 805 CHK(e); 806 OK(scad_geometry_equal(geom2, geoms[0], &e)); 807 CHK(e); 808 OK(scad_geometry_ref_put(geom1)); 809 OK(scad_geometry_ref_put(geom2)); 810 OK(scad_geometry_ref_put(geoms[0])); 811 OK(scad_geometry_ref_put(geoms[1])); 812 813 OK(scad_scene_count(&c)); 814 CHK(c == 0); 815 816 OK(scad_add_rectangle(p1, d2, &geom1)); 817 BAD(scad_geometry_get_mass(NULL, NULL)); 818 BAD(scad_geometry_get_mass(NULL, &m)); 819 BAD(scad_geometry_get_mass(geom1, NULL)); 820 OK(scad_geometry_get_mass(geom1, &m)); 821 CHK(eq_eps(m, 1, 1e-6)); /* Mass of 2D object is its surface */ 822 OK(scad_geometry_ref_put(geom1)); 823 824 OK(scad_scene_count(&c)); 825 CHK(c == 0); 826 827 OK(scad_add_sphere(p1, 1, &geom1)); 828 OK(scad_geometry_get_mass(geom1, &m)); 829 CHK(eq_eps(m, PI*4/3, 1e-6)); /* Mass of 3D object is its volume */ 830 OK(scad_geometry_ref_put(geom1)); 831 832 OK(scad_scene_count(&c)); 833 CHK(c == 0); 834 835 OK(scad_add_rectangle(p1, d2, &geom1)); 836 d3_add(tmp2, p1, d3_muld(tmp2, d2, 0.5)); 837 BAD(scad_geometry_get_centerofmass(NULL, NULL)); 838 BAD(scad_geometry_get_centerofmass(NULL, tmp)); 839 BAD(scad_geometry_get_centerofmass(geom1, NULL)); 840 OK(scad_geometry_get_centerofmass(geom1, tmp)); 841 CHK(d3_eq_eps(tmp, tmp2, 1e-6)); 842 OK(scad_geometry_ref_put(geom1)); 843 844 OK(scad_scene_count(&c)); 845 CHK(c == 0); 846 847 OK(scad_add_rectangle(p1, d2, geoms+0)); 848 OK(scad_add_rectangle(p2, d2, geoms+1)); 849 d3_add(tmp2, d3_muld(tmp2, d3_add(tmp2, p1, p2), 0.5), d3_muld(tmp, d2, 0.5)); 850 OK(scad_geometries_collect(geoms, 2, &geom1)); 851 OK(scad_geometry_get_centerofmass(geom1, tmp)); 852 CHK(d3_eq_eps(tmp, tmp2, 1e-6)); 853 OK(scad_geometry_ref_put(geom1)); 854 OK(scad_geometry_ref_put(geoms[0])); 855 OK(scad_geometry_ref_put(geoms[1])); 856 857 OK(scad_scene_count(&c)); 858 CHK(c == 0); 859 860 OK(scad_add_sphere(p1, 1, &geom1)); 861 OK(scad_geometry_get_centerofmass(geom1, tmp)); 862 CHK(d3_eq_eps(tmp, p1, 1e-6)); 863 OK(scad_geometry_ref_put(geom1)); 864 865 OK(scad_scene_count(&c)); 866 CHK(c == 0); 867 868 OK(scad_add_sphere(p1, 1, geoms+0)); 869 OK(scad_add_sphere(p2, 1, geoms+1)); 870 OK(scad_geometries_collect(geoms, 2, &geom1)); 871 d3_muld(tmp2, d3_add(tmp2, p1, p2), 0.5); 872 OK(scad_geometry_get_centerofmass(geom1, tmp)); 873 CHK(d3_eq_eps(tmp, tmp2, 1e-6)); 874 OK(scad_geometry_ref_put(geom1)); 875 OK(scad_geometry_ref_put(geoms[0])); 876 OK(scad_geometry_ref_put(geoms[1])); 877 878 OK(scad_scene_count(&c)); 879 CHK(c == 0); 880 881 OK(scad_add_rectangle(p1, d2, &geom1)); 882 BAD(scad_geometry_get_closest_point(NULL, NULL, NULL, NULL, NULL)); 883 BAD(scad_geometry_get_closest_point(NULL, NULL, NULL, &m, NULL)); 884 BAD(scad_geometry_get_closest_point(NULL, NULL, tmp, NULL, NULL)); 885 BAD(scad_geometry_get_closest_point(NULL, p3, NULL, NULL, NULL)); 886 BAD(scad_geometry_get_closest_point(geom1, NULL, NULL, NULL, NULL)); 887 BAD(scad_geometry_get_closest_point(NULL, NULL, tmp, &m, NULL)); 888 BAD(scad_geometry_get_closest_point(NULL, p3, NULL, &m, NULL)); 889 BAD(scad_geometry_get_closest_point(geom1, NULL, NULL, &m, NULL)); 890 BAD(scad_geometry_get_closest_point(NULL, p3, tmp, NULL, NULL)); 891 BAD(scad_geometry_get_closest_point(geom1, NULL, tmp, NULL, NULL)); 892 BAD(scad_geometry_get_closest_point(geom1, p3, NULL, NULL, NULL)); 893 BAD(scad_geometry_get_closest_point(geom1, p3, tmp, NULL, NULL)); 894 BAD(scad_geometry_get_closest_point(geom1, p3, NULL, &m, NULL)); 895 BAD(scad_geometry_get_closest_point(geom1, NULL, tmp, &m, NULL)); 896 BAD(scad_geometry_get_closest_point(NULL, p3, tmp, &m, NULL)); 897 OK(scad_geometry_get_closest_point(geom1, p3, tmp, &m, NULL)); 898 OK(scad_geometry_get_closest_point(geom1, p3, tmp, &m, &geom)); 899 CHK(d3_eq_eps(tmp, p3, 1e-6)); 900 CHK(eq_eps(m, 0, 1e-6)); 901 OK(scad_geometry_ref_put(geom1)); 902 OK(scad_geometry_ref_put(geom)); 903 904 OK(scad_scene_count(&c)); 905 CHK(c == 0); 906 907 OK(scad_add_sphere(p1, 1, &geom1)); 908 d3_normalize(tmp, p2); 909 d3_muld(tmp2, tmp, 0.9999); 910 OK(scad_geometry_get_closest_point(geom1, tmp2, tmp, &m, NULL)); 911 OK(scad_geometry_get_closest_point(geom1, tmp2, tmp, &m, &geom)); 912 CHK(d3_eq_eps(tmp2, tmp, 1e-3)); 913 CHK(eq_eps(m, d3_len(d3_sub(tmp, tmp2, tmp)), 1e-6)); 914 OK(scad_geometry_ref_put(geom1)); 915 OK(scad_geometry_ref_put(geom)); 916 917 OK(scad_scene_count(&c)); 918 CHK(c == 0); 919 920 OK(scad_add_rectangle(p1, d2, &geom1)); 921 BAD(scad_geometry_get_normal(NULL, NULL, NULL, NULL)); 922 BAD(scad_geometry_get_normal(NULL, NULL, tmp, NULL)); 923 BAD(scad_geometry_get_normal(NULL, p3, NULL, NULL)); 924 BAD(scad_geometry_get_normal(geom1, NULL, NULL, NULL)); 925 BAD(scad_geometry_get_normal(NULL, p3, tmp, NULL)); 926 BAD(scad_geometry_get_normal(geom1, NULL, tmp, NULL)); 927 BAD(scad_geometry_get_normal(geom1, p3, NULL, NULL)); 928 d3(tmp2, 0.3, 0.3, 0); 929 OK(scad_geometry_get_normal(geom1, tmp2, tmp, NULL)); 930 OK(scad_geometry_get_normal(geom1, tmp2, tmp, &geom)); 931 d3(tmp2, 0, 0, 1); 932 CHK(d3_eq_eps(tmp, tmp2, 1e-6)); 933 OK(scad_geometry_ref_put(geom1)); 934 OK(scad_geometry_ref_put(geom)); 935 936 OK(scad_scene_count(&c)); 937 CHK(c == 0); 938 939 OK(scad_add_sphere(p1, 1, &geom1)); 940 d3_normalize(tmp2, p2); 941 OK(scad_geometry_get_normal(geom1, tmp2, tmp, NULL)); 942 OK(scad_geometry_get_normal(geom1, tmp2, tmp, &geom)); 943 CHK(d3_eq_eps(tmp, tmp2, 1e-6)); 944 OK(scad_geometry_ref_put(geom1)); 945 OK(scad_geometry_ref_put(geom)); 946 947 OK(scad_scene_count(&c)); 948 CHK(c == 0); 949 950 OK(scad_add_sphere(p1, 1, &geom)); 951 BAD(scad_geometry_get_bounding_box(NULL, NULL, NULL)); 952 BAD(scad_geometry_get_bounding_box(NULL, NULL, tmp2)); 953 BAD(scad_geometry_get_bounding_box(NULL, tmp, NULL)); 954 BAD(scad_geometry_get_bounding_box(geom, NULL, NULL)); 955 BAD(scad_geometry_get_bounding_box(NULL, tmp, tmp2)); 956 BAD(scad_geometry_get_bounding_box(geom, NULL, tmp2)); 957 BAD(scad_geometry_get_bounding_box(geom, tmp, NULL)); 958 OK(scad_geometry_get_bounding_box(geom, tmp, tmp2)); 959 CHK(d3_eq_eps(d3_muld(tmp, tmp, -1), tmp2, 1e-6)); 960 d3(tmp, 1,1,1); 961 CHK(d3_eq_eps(tmp, tmp2, 1e-6)); 962 OK(scad_geometry_ref_put(geom)); 963 964 OK(scad_scene_count(&c)); 965 CHK(c == 0); 966 967 OK(scad_add_sphere(p1, 1, &geom)); 968 OK(scad_geometries_collect(&geom, 1, &geom2)); 969 BAD(scad_geometry_equal(NULL, NULL, NULL)); 970 BAD(scad_geometry_equal(NULL, NULL, &e)); 971 BAD(scad_geometry_equal(NULL, geom2, NULL)); 972 BAD(scad_geometry_equal(geom, NULL, NULL)); 973 BAD(scad_geometry_equal(NULL, geom2, &e)); 974 BAD(scad_geometry_equal(geom, NULL, &e)); 975 BAD(scad_geometry_equal(geom, geom2, NULL)); 976 OK(scad_geometry_equal(geom, geom2, &e)); 977 CHK(e == 1); 978 OK(scad_geometry_ref_put(geom2)); 979 OK(scad_add_sphere(p1, 1, &geom2)); 980 OK(scad_geometry_equal(geom, geom2, &e)); 981 CHK(e == 0); 982 OK(scad_geometry_ref_put(geom)); 983 OK(scad_geometry_ref_put(geom2)); 984 985 OK(scad_scene_count(&c)); 986 CHK(c == 0); 987 988 OK(scad_add_sphere(p1, 1, &geom)); 989 OK(scad_geometries_collect(&geom, 1, &geom2)); 990 BAD(scad_geometry_is_included(NULL, NULL, 0, NULL)); 991 BAD(scad_geometry_is_included(NULL, NULL, 0, &e)); 992 BAD(scad_geometry_is_included(NULL, NULL, 1, NULL)); 993 BAD(scad_geometry_is_included(NULL, &geom2, 0, NULL)); 994 BAD(scad_geometry_is_included(geom, NULL, 0, NULL)); 995 BAD(scad_geometry_is_included(NULL, NULL, 1, &e)); 996 BAD(scad_geometry_is_included(NULL, &geom2, 0, &e)); 997 BAD(scad_geometry_is_included(geom, NULL, 0, &e)); 998 BAD(scad_geometry_is_included(NULL, &geom2, 1, NULL)); 999 BAD(scad_geometry_is_included(geom, NULL, 1, NULL)); 1000 BAD(scad_geometry_is_included(geom, &geom2, 0, NULL)); 1001 BAD(scad_geometry_is_included(geom, &geom2, 1, NULL)); 1002 BAD(scad_geometry_is_included(geom, &geom2, 0, &e)); 1003 BAD(scad_geometry_is_included(geom, NULL, 1, &e)); 1004 BAD(scad_geometry_is_included(NULL, &geom2, 1, &e)); 1005 OK(scad_geometry_is_included(geom, &geom2, 1, &e)); 1006 CHK(e == 1); 1007 OK(scad_geometry_ref_put(geom2)); 1008 OK(scad_add_sphere(p1, 1, &geom2)); 1009 OK(scad_geometry_is_included(geom, &geom2, 1, &e)); 1010 CHK(e == 0); 1011 OK(scad_geometry_ref_put(geom)); 1012 OK(scad_geometry_ref_put(geom2)); 1013 1014 OK(scad_scene_count(&c)); 1015 CHK(c == 0); 1016 1017 OK(scad_add_sphere(p1, 1, &geom)); 1018 BAD(scad_geometries_collect(NULL, 0, NULL)); 1019 BAD(scad_geometries_collect(NULL, 0, &geom2)); 1020 BAD(scad_geometries_collect(NULL, 1, NULL)); 1021 BAD(scad_geometries_collect(&geom, 0, NULL)); 1022 BAD(scad_geometries_collect(NULL, 1, &geom2)); 1023 BAD(scad_geometries_collect(&geom, 0, &geom2)); 1024 BAD(scad_geometries_collect(&geom, 1, NULL)); 1025 OK(scad_geometries_collect(&geom, 1, &geom2)); 1026 OK(scad_geometry_ref_put(geom)); 1027 OK(scad_geometry_ref_put(geom2)); 1028 1029 OK(scad_scene_count(&c)); 1030 CHK(c == 0); 1031 1032 OK(scad_add_box(p1, d0, &geom1)); 1033 OK(scad_add_box(p2, d0, &geom2)); 1034 BAD(scad_geometries_fuse(NULL, 0, NULL, 0, NULL)); 1035 BAD(scad_geometries_fuse(NULL, 0, NULL, 0, &geom)); 1036 BAD(scad_geometries_fuse(NULL, 0, NULL, 1, NULL)); 1037 BAD(scad_geometries_fuse(NULL, 0, &geom2, 0, NULL)); 1038 BAD(scad_geometries_fuse(NULL, 1, NULL, 0, NULL)); 1039 BAD(scad_geometries_fuse(&geom1, 0, NULL, 0, NULL)); 1040 BAD(scad_geometries_fuse(NULL, 0, NULL, 1, &geom)); 1041 BAD(scad_geometries_fuse(NULL, 0, &geom2, 0, &geom)); 1042 BAD(scad_geometries_fuse(NULL, 1, NULL, 0, &geom)); 1043 BAD(scad_geometries_fuse(&geom1, 0, NULL, 0, &geom)); 1044 BAD(scad_geometries_fuse(NULL, 0, &geom2, 1, NULL)); 1045 BAD(scad_geometries_fuse(NULL, 1, NULL, 1, NULL)); 1046 BAD(scad_geometries_fuse(&geom1, 0, NULL, 1, NULL)); 1047 BAD(scad_geometries_fuse(NULL, 1, &geom2, 0, NULL)); 1048 BAD(scad_geometries_fuse(&geom1, 0, &geom2, 0, NULL)); 1049 BAD(scad_geometries_fuse(&geom1, 1, NULL, 0, NULL)); 1050 BAD(scad_geometries_fuse(NULL, 0, &geom2, 1, &geom)); 1051 BAD(scad_geometries_fuse(NULL, 1, NULL, 1, &geom)); 1052 BAD(scad_geometries_fuse(&geom1, 0, NULL, 1, &geom)); 1053 BAD(scad_geometries_fuse(NULL, 1, &geom2, 0, &geom)); 1054 BAD(scad_geometries_fuse(&geom, 0, &geom2, 0, &geom)); 1055 BAD(scad_geometries_fuse(&geom, 1, NULL, 0, &geom)); 1056 BAD(scad_geometries_fuse(NULL, 1, &geom2, 1, NULL)); 1057 BAD(scad_geometries_fuse(&geom, 0, &geom2, 1, NULL)); 1058 BAD(scad_geometries_fuse(&geom1, 1, NULL, 1, &geom)); 1059 BAD(scad_geometries_fuse(&geom, 1, &geom2, 0, NULL)); 1060 BAD(scad_geometries_fuse(&geom1, 1, &geom2, 1, NULL)); 1061 BAD(scad_geometries_fuse(&geom1, 1, &geom2, 0, &geom)); 1062 BAD(scad_geometries_fuse(&geom1, 1, NULL, 1, &geom)); 1063 BAD(scad_geometries_fuse(&geom1, 0, &geom2, 1, &geom)); 1064 BAD(scad_geometries_fuse(NULL, 1, &geom2, 1, &geom)); 1065 OK(scad_geometries_fuse(&geom1, 1, &geom2, 1, &geom)); /* disjoint geometries */ 1066 OK(scad_geometry_get_count(geom, &c)); 1067 CHK(c == 2); 1068 OK(scad_geometry_ref_put(geom1)); 1069 OK(scad_geometry_ref_put(geom2)); 1070 OK(scad_geometry_ref_put(geom)); 1071 1072 OK(scad_scene_count(&c)); 1073 CHK(c == 0); 1074 1075 OK(scad_add_box(p1, d1, &geom1)); 1076 OK(scad_add_box(p2, d1, &geom2)); 1077 OK(scad_geometries_fuse(&geom1, 1, &geom2, 1, &geom)); /* non-disjoint geometries */ 1078 OK(scad_geometry_get_count(geom, &c)); 1079 CHK(c == 1); 1080 OK(scad_geometry_ref_put(geom1)); 1081 OK(scad_geometry_ref_put(geom2)); 1082 OK(scad_geometry_ref_put(geom)); 1083 1084 OK(scad_scene_count(&c)); 1085 CHK(c == 0); 1086 1087 OK(scad_add_box(p1, d0, &geom1)); 1088 OK(scad_add_box(p2, d0, &geom2)); 1089 BAD(scad_geometries_cut(NULL, 0, NULL, 0, &geom)); 1090 BAD(scad_geometries_cut(NULL, 0, NULL, 1, NULL)); 1091 BAD(scad_geometries_cut(NULL, 0, &geom2, 0, NULL)); 1092 BAD(scad_geometries_cut(NULL, 1, NULL, 0, NULL)); 1093 BAD(scad_geometries_cut(&geom1, 0, NULL, 0, NULL)); 1094 BAD(scad_geometries_cut(NULL, 0, NULL, 1, &geom)); 1095 BAD(scad_geometries_cut(NULL, 0, &geom2, 0, &geom)); 1096 BAD(scad_geometries_cut(NULL, 1, NULL, 0, &geom)); 1097 BAD(scad_geometries_cut(&geom1, 0, NULL, 0, &geom)); 1098 BAD(scad_geometries_cut(NULL, 0, &geom2, 1, NULL)); 1099 BAD(scad_geometries_cut(NULL, 1, NULL, 1, NULL)); 1100 BAD(scad_geometries_cut(&geom1, 0, NULL, 1, NULL)); 1101 BAD(scad_geometries_cut(NULL, 1, &geom2, 0, NULL)); 1102 BAD(scad_geometries_cut(&geom1, 0, &geom2, 0, NULL)); 1103 BAD(scad_geometries_cut(&geom1, 1, NULL, 0, NULL)); 1104 BAD(scad_geometries_cut(NULL, 0, &geom2, 1, &geom)); 1105 BAD(scad_geometries_cut(NULL, 1, NULL, 1, &geom)); 1106 BAD(scad_geometries_cut(&geom1, 0, NULL, 1, &geom)); 1107 BAD(scad_geometries_cut(NULL, 1, &geom2, 0, &geom)); 1108 BAD(scad_geometries_cut(&geom, 0, &geom2, 0, &geom)); 1109 BAD(scad_geometries_cut(&geom, 1, NULL, 0, &geom)); 1110 BAD(scad_geometries_cut(NULL, 1, &geom2, 1, NULL)); 1111 BAD(scad_geometries_cut(&geom, 0, &geom2, 1, NULL)); 1112 BAD(scad_geometries_cut(&geom1, 1, NULL, 1, &geom)); 1113 BAD(scad_geometries_cut(&geom, 1, &geom2, 0, NULL)); 1114 BAD(scad_geometries_cut(&geom1, 1, &geom2, 1, NULL)); 1115 BAD(scad_geometries_cut(&geom1, 1, &geom2, 0, &geom)); 1116 BAD(scad_geometries_cut(&geom1, 1, NULL, 1, &geom)); 1117 BAD(scad_geometries_cut(&geom1, 0, &geom2, 1, &geom)); 1118 BAD(scad_geometries_cut(NULL, 1, &geom2, 1, &geom)); 1119 OK(scad_geometries_cut(&geom1, 1, &geom2, 1, &geom)); /* disjoint geometries */ 1120 OK(scad_geometry_is_empty(geom, &e)); 1121 CHK(e == 0); 1122 OK(scad_geometry_ref_put(geom1)); 1123 OK(scad_geometry_ref_put(geom2)); 1124 OK(scad_geometry_ref_put(geom)); 1125 1126 OK(scad_scene_count(&c)); 1127 CHK(c == 0); 1128 1129 OK(scad_add_box(p1, d1, &geom1)); 1130 OK(scad_add_box(p2, d1, &geom2)); 1131 OK(scad_geometries_cut(&geom1, 1, &geom2, 1, &geom)); /* non-disjoint geometries */ 1132 OK(scad_geometry_is_empty(geom, &e)); 1133 CHK(e == 0); 1134 OK(scad_geometry_ref_put(geom1)); 1135 OK(scad_geometry_ref_put(geom2)); 1136 OK(scad_geometry_ref_put(geom)); 1137 1138 OK(scad_scene_count(&c)); 1139 CHK(c == 0); 1140 1141 OK(scad_add_box(p1, d1, &geom1)); 1142 OK(scad_geometries_cut(&geom1, 1, &geom1, 1, &geom)); 1143 OK(scad_geometry_is_empty(geom, &e)); 1144 CHK(e == 1); 1145 OK(scad_geometry_ref_put(geom1)); 1146 OK(scad_geometry_ref_put(geom)); 1147 1148 OK(scad_scene_count(&c)); 1149 CHK(c == 0); 1150 1151 OK(scad_add_sphere(p1, 1, &geom1)); 1152 OK(scad_geometries_cut(&geom1, 1, &geom1, 1, &geom)); 1153 OK(scad_geometry_is_empty(geom, &e)); 1154 CHK(e == 1); 1155 OK(scad_geometry_ref_put(geom1)); 1156 OK(scad_geometry_ref_put(geom)); 1157 1158 OK(scad_scene_count(&c)); 1159 CHK(c == 0); 1160 1161 OK(scad_add_box(p1, d0, &geom1)); 1162 OK(scad_add_box(p2, d0, &geom2)); 1163 BAD(scad_geometries_intersect(NULL, 0, NULL, 0, &geom)); 1164 BAD(scad_geometries_intersect(NULL, 0, NULL, 1, NULL)); 1165 BAD(scad_geometries_intersect(NULL, 0, &geom2, 0, NULL)); 1166 BAD(scad_geometries_intersect(NULL, 1, NULL, 0, NULL)); 1167 BAD(scad_geometries_intersect(&geom1, 0, NULL, 0, NULL)); 1168 BAD(scad_geometries_intersect(NULL, 0, NULL, 1, &geom)); 1169 BAD(scad_geometries_intersect(NULL, 0, &geom2, 0, &geom)); 1170 BAD(scad_geometries_intersect(NULL, 1, NULL, 0, &geom)); 1171 BAD(scad_geometries_intersect(&geom1, 0, NULL, 0, &geom)); 1172 BAD(scad_geometries_intersect(NULL, 0, &geom2, 1, NULL)); 1173 BAD(scad_geometries_intersect(NULL, 1, NULL, 1, NULL)); 1174 BAD(scad_geometries_intersect(&geom1, 0, NULL, 1, NULL)); 1175 BAD(scad_geometries_intersect(NULL, 1, &geom2, 0, NULL)); 1176 BAD(scad_geometries_intersect(&geom1, 0, &geom2, 0, NULL)); 1177 BAD(scad_geometries_intersect(&geom1, 1, NULL, 0, NULL)); 1178 BAD(scad_geometries_intersect(NULL, 0, &geom2, 1, &geom)); 1179 BAD(scad_geometries_intersect(NULL, 1, NULL, 1, &geom)); 1180 BAD(scad_geometries_intersect(&geom1, 0, NULL, 1, &geom)); 1181 BAD(scad_geometries_intersect(NULL, 1, &geom2, 0, &geom)); 1182 BAD(scad_geometries_intersect(&geom, 0, &geom2, 0, &geom)); 1183 BAD(scad_geometries_intersect(&geom, 1, NULL, 0, &geom)); 1184 BAD(scad_geometries_intersect(NULL, 1, &geom2, 1, NULL)); 1185 BAD(scad_geometries_intersect(&geom, 0, &geom2, 1, NULL)); 1186 BAD(scad_geometries_intersect(&geom1, 1, NULL, 1, &geom)); 1187 BAD(scad_geometries_intersect(&geom, 1, &geom2, 0, NULL)); 1188 BAD(scad_geometries_intersect(&geom1, 1, &geom2, 1, NULL)); 1189 BAD(scad_geometries_intersect(&geom1, 1, &geom2, 0, &geom)); 1190 BAD(scad_geometries_intersect(&geom1, 1, NULL, 1, &geom)); 1191 BAD(scad_geometries_intersect(&geom1, 0, &geom2, 1, &geom)); 1192 BAD(scad_geometries_intersect(NULL, 1, &geom2, 1, &geom)); 1193 OK(scad_geometries_intersect(&geom1, 1, &geom2, 1, &geom)); 1194 OK(scad_geometry_is_empty(geom, &e)); 1195 CHK(e == 1); 1196 OK(scad_geometry_ref_put(geom1)); 1197 OK(scad_geometry_ref_put(geom2)); 1198 OK(scad_geometry_ref_put(geom)); 1199 1200 OK(scad_scene_count(&c)); 1201 CHK(c == 0); 1202 1203 OK(scad_add_box(p1, d1, &geom1)); 1204 OK(scad_add_box(p2, d1, &geom2)); 1205 OK(scad_geometries_intersect(&geom1, 1, &geom2, 1, &geom)); 1206 OK(scad_geometry_is_empty(geom, &e)); 1207 CHK(e == 0); 1208 OK(scad_geometry_ref_put(geom1)); 1209 OK(scad_geometry_ref_put(geom2)); 1210 OK(scad_geometry_ref_put(geom)); 1211 1212 OK(scad_scene_count(&c)); 1213 CHK(c == 0); 1214 1215 OK(scad_add_sphere(p1, 0.1, &geom)); 1216 OK(scad_add_sphere(p3, 0.1, &geom1)); 1217 OK(scad_geometries_intersect(&geom, 1, &geom1, 1, &geom2)); 1218 OK(scad_geometry_is_empty(geom2, &e)); 1219 CHK(e == 1); 1220 OK(scad_geometry_ref_put(geom)); 1221 OK(scad_geometry_ref_put(geom1)); 1222 OK(scad_geometry_ref_put(geom2)); 1223 1224 OK(scad_add_box(p1, d0, geoms+0)); 1225 OK(scad_add_box(p2, d0, geoms+1)); 1226 BAD(scad_geometries_partition(NULL, 0, 9, NULL)); 1227 BAD(scad_geometries_partition(NULL, 0, 9, out_geoms)); 1228 BAD(scad_geometries_partition(NULL, 0, 0, NULL)); 1229 BAD(scad_geometries_partition(NULL, 2, 9, NULL)); 1230 BAD(scad_geometries_partition(geoms, 0, 9, NULL)); 1231 BAD(scad_geometries_partition(NULL, 0, 0, out_geoms)); 1232 BAD(scad_geometries_partition(NULL, 2, 9, out_geoms)); 1233 BAD(scad_geometries_partition(geoms, 0, 9, out_geoms)); 1234 BAD(scad_geometries_partition(NULL, 2, 0, NULL)); 1235 BAD(scad_geometries_partition(geoms, 0, 0, NULL)); 1236 BAD(scad_geometries_partition(geoms, 2, 9, NULL)); 1237 BAD(scad_geometries_partition(geoms, 2, 0, NULL)); 1238 BAD(scad_geometries_partition(geoms, 2, 9, out_geoms)); 1239 BAD(scad_geometries_partition(geoms, 0, 0, out_geoms)); 1240 BAD(scad_geometries_partition(NULL, 2, 0, out_geoms)); 1241 OK(scad_geometries_partition(geoms, 2, SCAD_ALLOW_OVERLAPPING, out_geoms)); 1242 OK(scad_geometry_equal(geoms[0], out_geoms[0], &e)); 1243 CHK(e == 1); 1244 OK(scad_geometry_equal(geoms[1], out_geoms[1], &e)); 1245 CHK(e == 1); 1246 OK(scad_geometry_ref_put(geoms[0])); 1247 OK(scad_geometry_ref_put(geoms[1])); 1248 OK(scad_geometry_ref_put(out_geoms[0])); 1249 OK(scad_geometry_ref_put(out_geoms[1])); 1250 1251 OK(scad_scene_count(&c)); 1252 CHK(c == 0); 1253 1254 OK(scad_add_box(p1, d1, geoms+0)); 1255 OK(scad_add_box(p2, d1, geoms+1)); 1256 BAD(scad_geometries_partition(geoms, 2, SCAD_DUMP_ON_OVERLAPPING_ERROR, out_geoms)); 1257 OK(scad_geometries_partition(geoms, 2, SCAD_ALLOW_OVERLAPPING, out_geoms)); 1258 OK(scad_geometry_ref_put(geoms[0])); 1259 OK(scad_geometry_ref_put(geoms[1])); 1260 OK(scad_geometry_ref_put(out_geoms[0])); 1261 OK(scad_geometry_ref_put(out_geoms[1])); 1262 1263 OK(scad_scene_count(&c)); 1264 CHK(c == 0); 1265 1266 OK(scad_add_sphere(p1, 0.1, &geoms[0])); 1267 OK(scad_add_sphere(p3, 0.1, &geoms[1])); 1268 OK(scad_geometries_partition(geoms, 2, SCAD_ALLOW_OVERLAPPING, out_geoms)); 1269 OK(scad_geometries_swap(geoms, out_geoms, 2, SCAD_SWAP_GEOMETRY)); 1270 OK(scad_geometry_ref_put(out_geoms[0])); 1271 OK(scad_geometry_ref_put(out_geoms[1])); 1272 1273 1274 BAD(scad_geometries_common_boundaries(NULL, 0, NULL, 0, NULL, NULL)); 1275 BAD(scad_geometries_common_boundaries(NULL, 0, NULL, 0, NULL, &c)); 1276 BAD(scad_geometries_common_boundaries(NULL, 0, NULL, 0, &geom_array, NULL)); 1277 BAD(scad_geometries_common_boundaries(NULL, 0, NULL, 0, &geom_array, &c)); 1278 BAD(scad_geometries_common_boundaries(NULL, 0, NULL, 1, NULL, NULL)); 1279 BAD(scad_geometries_common_boundaries(NULL, 0, NULL, 1, NULL, &c)); 1280 BAD(scad_geometries_common_boundaries(NULL, 0, NULL, 1, &geom_array, NULL)); 1281 BAD(scad_geometries_common_boundaries(NULL, 0, NULL, 1, &geom_array, &c)); 1282 BAD(scad_geometries_common_boundaries(NULL, 0, geoms+1, 0, NULL, NULL)); 1283 BAD(scad_geometries_common_boundaries(NULL, 0, geoms+1, 0, NULL, &c)); 1284 BAD(scad_geometries_common_boundaries(NULL, 0, geoms+1, 0, &geom_array, NULL)); 1285 BAD(scad_geometries_common_boundaries(NULL, 0, geoms+1, 0, &geom_array, &c)); 1286 BAD(scad_geometries_common_boundaries(NULL, 0, geoms+1, 1, NULL, NULL)); 1287 BAD(scad_geometries_common_boundaries(NULL, 0, geoms+1, 1, NULL, &c)); 1288 BAD(scad_geometries_common_boundaries(NULL, 0, geoms+1, 1, &geom_array, NULL)); 1289 BAD(scad_geometries_common_boundaries(NULL, 0, geoms+1, 1, &geom_array, &c)); 1290 BAD(scad_geometries_common_boundaries(NULL, 1, NULL, 0, NULL, NULL)); 1291 BAD(scad_geometries_common_boundaries(NULL, 1, NULL, 0, NULL, &c)); 1292 BAD(scad_geometries_common_boundaries(NULL, 1, NULL, 0, &geom_array, NULL)); 1293 BAD(scad_geometries_common_boundaries(NULL, 1, NULL, 0, &geom_array, &c)); 1294 BAD(scad_geometries_common_boundaries(NULL, 1, NULL, 1, NULL, NULL)); 1295 BAD(scad_geometries_common_boundaries(NULL, 1, NULL, 1, NULL, &c)); 1296 BAD(scad_geometries_common_boundaries(NULL, 1, NULL, 1, &geom_array, NULL)); 1297 BAD(scad_geometries_common_boundaries(NULL, 1, NULL, 1, &geom_array, &c)); 1298 BAD(scad_geometries_common_boundaries(NULL, 1, geoms+1, 0, NULL, NULL)); 1299 BAD(scad_geometries_common_boundaries(NULL, 1, geoms+1, 0, NULL, &c)); 1300 BAD(scad_geometries_common_boundaries(NULL, 1, geoms+1, 0, &geom_array, NULL)); 1301 BAD(scad_geometries_common_boundaries(NULL, 1, geoms+1, 0, &geom_array, &c)); 1302 BAD(scad_geometries_common_boundaries(NULL, 1, geoms+1, 1, NULL, NULL)); 1303 BAD(scad_geometries_common_boundaries(NULL, 1, geoms+1, 1, NULL, &c)); 1304 BAD(scad_geometries_common_boundaries(NULL, 1, geoms+1, 1, &geom_array, NULL)); 1305 BAD(scad_geometries_common_boundaries(NULL, 1, geoms+1, 1, &geom_array, &c)); 1306 BAD(scad_geometries_common_boundaries(geoms, 0, NULL, 0, NULL, NULL)); 1307 BAD(scad_geometries_common_boundaries(geoms, 0, NULL, 0, NULL, &c)); 1308 BAD(scad_geometries_common_boundaries(geoms, 0, NULL, 0, &geom_array, NULL)); 1309 BAD(scad_geometries_common_boundaries(geoms, 0, NULL, 0, &geom_array, &c)); 1310 BAD(scad_geometries_common_boundaries(geoms, 0, NULL, 1, NULL, NULL)); 1311 BAD(scad_geometries_common_boundaries(geoms, 0, NULL, 1, NULL, &c)); 1312 BAD(scad_geometries_common_boundaries(geoms, 0, NULL, 1, &geom_array, NULL)); 1313 BAD(scad_geometries_common_boundaries(geoms, 0, NULL, 1, &geom_array, &c)); 1314 BAD(scad_geometries_common_boundaries(geoms, 0, geoms+1, 0, NULL, NULL)); 1315 BAD(scad_geometries_common_boundaries(geoms, 0, geoms+1, 0, NULL, &c)); 1316 BAD(scad_geometries_common_boundaries(geoms, 0, geoms+1, 0, &geom_array, NULL)); 1317 BAD(scad_geometries_common_boundaries(geoms, 0, geoms+1, 0, &geom_array, &c)); 1318 BAD(scad_geometries_common_boundaries(geoms, 0, geoms+1, 1, NULL, NULL)); 1319 BAD(scad_geometries_common_boundaries(geoms, 0, geoms+1, 1, NULL, &c)); 1320 BAD(scad_geometries_common_boundaries(geoms, 0, geoms+1, 1, &geom_array, NULL)); 1321 BAD(scad_geometries_common_boundaries(geoms, 0, geoms+1, 1, &geom_array, &c)); 1322 BAD(scad_geometries_common_boundaries(geoms, 1, NULL, 0, NULL, NULL)); 1323 BAD(scad_geometries_common_boundaries(geoms, 1, NULL, 0, NULL, &c)); 1324 BAD(scad_geometries_common_boundaries(geoms, 1, NULL, 0, &geom_array, NULL)); 1325 BAD(scad_geometries_common_boundaries(geoms, 1, NULL, 0, &geom_array, &c)); 1326 BAD(scad_geometries_common_boundaries(geoms, 1, NULL, 1, NULL, NULL)); 1327 BAD(scad_geometries_common_boundaries(geoms, 1, NULL, 1, NULL, &c)); 1328 BAD(scad_geometries_common_boundaries(geoms, 1, NULL, 1, &geom_array, NULL)); 1329 BAD(scad_geometries_common_boundaries(geoms, 1, NULL, 1, &geom_array, &c)); 1330 BAD(scad_geometries_common_boundaries(geoms, 1, geoms+1, 0, NULL, NULL)); 1331 BAD(scad_geometries_common_boundaries(geoms, 1, geoms+1, 0, NULL, &c)); 1332 BAD(scad_geometries_common_boundaries(geoms, 1, geoms+1, 0, &geom_array, NULL)); 1333 BAD(scad_geometries_common_boundaries(geoms, 1, geoms+1, 0, &geom_array, &c)); 1334 BAD(scad_geometries_common_boundaries(geoms, 1, geoms+1, 1, NULL, NULL)); 1335 BAD(scad_geometries_common_boundaries(geoms, 1, geoms+1, 1, NULL, &c)); 1336 BAD(scad_geometries_common_boundaries(geoms, 1, geoms+1, 1, &geom_array, NULL)); 1337 OK(scad_geometries_common_boundaries(geoms, 1, geoms+1, 1, &geom_array, &c)); 1338 CHK(c == 0); 1339 MEM_RM(&allocator, geom_array); 1340 OK(scad_geometry_ref_put(geoms[0])); 1341 OK(scad_geometry_ref_put(geoms[1])); 1342 1343 OK(scad_scene_count(&c)); 1344 CHK(c == 0); 1345 1346 OK(scad_add_box(p1, d1, &geoms[0])); 1347 OK(scad_add_box(p3, d1, &geoms[1])); 1348 OK(scad_geometries_partition(geoms, 2, SCAD_ALLOW_OVERLAPPING, out_geoms)); 1349 OK(scad_geometries_swap(geoms, out_geoms, 2, SCAD_SWAP_GEOMETRY)); 1350 OK(scad_geometry_ref_put(out_geoms[0])); 1351 OK(scad_geometry_ref_put(out_geoms[1])); 1352 OK(scad_geometries_common_boundaries(geoms+0, 1, geoms+1, 1, &geom_array, &c)); 1353 CHK(c == 4); 1354 for(i = 0; i < c; i++) { 1355 OK(scad_geometry_ref_put(geom_array[i])); 1356 } 1357 MEM_RM(&allocator, geom_array); 1358 OK(scad_geometry_ref_put(geoms[0])); 1359 OK(scad_geometry_ref_put(geoms[1])); 1360 1361 OK(scad_scene_count(&c)); 1362 CHK(c == 0); 1363 1364 OK(scad_add_box(p1, d1, &geoms[0])); 1365 OK(scad_add_box(p4, d1, &geoms[1])); 1366 OK(scad_geometries_partition(geoms, 2, SCAD_ALLOW_OVERLAPPING, out_geoms)); 1367 OK(scad_geometries_swap(geoms, out_geoms, 2, SCAD_SWAP_GEOMETRY)); 1368 OK(scad_geometry_ref_put(out_geoms[0])); 1369 OK(scad_geometry_ref_put(out_geoms[1])); 1370 OK(scad_geometries_common_boundaries(geoms+0, 1, geoms+1, 1, &geom_array, &c)); 1371 CHK(c == 1); 1372 for(i = 0; i < c; i++) { 1373 OK(scad_geometry_ref_put(geom_array[i])); 1374 } 1375 MEM_RM(&allocator, geom_array); 1376 OK(scad_geometry_ref_put(geoms[0])); 1377 OK(scad_geometry_ref_put(geoms[1])); 1378 1379 OK(scad_scene_count(&c)); 1380 CHK(c == 0); 1381 1382 OK(scad_add_sphere(p1, 0.1, &geoms[0])); 1383 OK(scad_add_sphere(p3, 0.1, &geoms[1])); 1384 OK(scad_geometries_partition(geoms, 2, SCAD_ALLOW_OVERLAPPING, out_geoms)); 1385 OK(scad_geometries_swap(geoms, out_geoms, 2, SCAD_SWAP_GEOMETRY)); 1386 OK(scad_geometry_ref_put(out_geoms[0])); 1387 OK(scad_geometry_ref_put(out_geoms[1])); 1388 BAD(scad_geometries_common_boundary(NULL, 0, NULL, 0, NULL)); 1389 BAD(scad_geometries_common_boundary(NULL, 0, NULL, 0, &geom)); 1390 BAD(scad_geometries_common_boundary(NULL, 0, NULL, 1, NULL)); 1391 BAD(scad_geometries_common_boundary(NULL, 0, NULL, 1, &geom)); 1392 BAD(scad_geometries_common_boundary(NULL, 0, geoms+1, 0, NULL)); 1393 BAD(scad_geometries_common_boundary(NULL, 0, geoms+1, 0, &geom)); 1394 BAD(scad_geometries_common_boundary(NULL, 0, geoms+1, 1, NULL)); 1395 BAD(scad_geometries_common_boundary(NULL, 0, geoms+1, 1, &geom)); 1396 BAD(scad_geometries_common_boundary(NULL, 1, NULL, 0, NULL)); 1397 BAD(scad_geometries_common_boundary(NULL, 1, NULL, 0, &geom)); 1398 BAD(scad_geometries_common_boundary(NULL, 1, NULL, 1, NULL)); 1399 BAD(scad_geometries_common_boundary(NULL, 1, NULL, 1, &geom)); 1400 BAD(scad_geometries_common_boundary(NULL, 1, geoms+1, 0, NULL)); 1401 BAD(scad_geometries_common_boundary(NULL, 1, geoms+1, 0, &geom)); 1402 BAD(scad_geometries_common_boundary(NULL, 1, geoms+1, 1, NULL)); 1403 BAD(scad_geometries_common_boundary(NULL, 1, geoms+1, 1, &geom)); 1404 BAD(scad_geometries_common_boundary(geoms, 0, NULL, 0, NULL)); 1405 BAD(scad_geometries_common_boundary(geoms, 0, NULL, 0, &geom)); 1406 BAD(scad_geometries_common_boundary(geoms, 0, NULL, 1, NULL)); 1407 BAD(scad_geometries_common_boundary(geoms, 0, NULL, 1, &geom)); 1408 BAD(scad_geometries_common_boundary(geoms, 0, geoms+1, 0, NULL)); 1409 BAD(scad_geometries_common_boundary(geoms, 0, geoms+1, 0, &geom)); 1410 BAD(scad_geometries_common_boundary(geoms, 0, geoms+1, 1, NULL)); 1411 BAD(scad_geometries_common_boundary(geoms, 0, geoms+1, 1, &geom)); 1412 BAD(scad_geometries_common_boundary(geoms, 1, NULL, 0, NULL)); 1413 BAD(scad_geometries_common_boundary(geoms, 1, NULL, 0, &geom)); 1414 BAD(scad_geometries_common_boundary(geoms, 1, NULL, 1, NULL)); 1415 BAD(scad_geometries_common_boundary(geoms, 1, NULL, 1, &geom)); 1416 BAD(scad_geometries_common_boundary(geoms, 1, geoms+1, 0, NULL)); 1417 BAD(scad_geometries_common_boundary(geoms, 1, geoms+1, 0, &geom)); 1418 BAD(scad_geometries_common_boundary(geoms, 1, geoms+1, 1, NULL)); 1419 OK(scad_geometries_common_boundary(geoms, 1, geoms+1, 1, &geom)); 1420 OK(scad_geometry_ref_put(geoms[0])); 1421 OK(scad_geometry_ref_put(geoms[1])); 1422 OK(scad_geometry_ref_put(geom)); 1423 1424 OK(scad_scene_count(&c)); 1425 CHK(c == 0); 1426 1427 OK(scad_add_sphere(p1, 0.1, &geom1)); 1428 BAD(scad_geometries_boundaries(NULL, 0, NULL, NULL)); 1429 BAD(scad_geometries_boundaries(NULL, 0, NULL, &c)); 1430 BAD(scad_geometries_boundaries(NULL, 0, &geom_array, NULL)); 1431 BAD(scad_geometries_boundaries(NULL, 1, NULL, NULL)); 1432 BAD(scad_geometries_boundaries(&geom1, 0, NULL, NULL)); 1433 BAD(scad_geometries_boundaries(NULL, 0, &geom_array, &c)); 1434 BAD(scad_geometries_boundaries(NULL, 1, NULL, &c)); 1435 BAD(scad_geometries_boundaries(&geom1, 0, NULL, &c)); 1436 BAD(scad_geometries_boundaries(NULL, 1, &geom_array, NULL)); 1437 BAD(scad_geometries_boundaries(&geom1, 0, &geom_array, NULL)); 1438 BAD(scad_geometries_boundaries(&geom1, 1, NULL, NULL)); 1439 BAD(scad_geometries_boundaries(&geom1, 1, &geom_array, NULL)); 1440 BAD(scad_geometries_boundaries(&geom1, 1, NULL, &c)); 1441 BAD(scad_geometries_boundaries(&geom1, 0, &geom_array, &c)); 1442 BAD(scad_geometries_boundaries(NULL, 1, &geom_array, &c)); 1443 OK(scad_geometries_boundaries(&geom1, 1, &geom_array, &c)); 1444 CHK(c == 1); 1445 for(i = 0; i < c; i++) { 1446 OK(scad_geometry_ref_put(geom_array[i])); 1447 } 1448 MEM_RM(&allocator, geom_array); 1449 OK(scad_geometry_ref_put(geom1)); 1450 1451 OK(scad_scene_count(&c)); 1452 CHK(c == 0); 1453 1454 OK(scad_add_sphere(p1, 0.1, &geom1)); 1455 BAD(scad_geometries_boundary(NULL, 0, NULL)); 1456 BAD(scad_geometries_boundary(NULL, 0, &geom)); 1457 BAD(scad_geometries_boundary(NULL, 1, NULL)); 1458 BAD(scad_geometries_boundary(&geom1, 0, NULL)); 1459 BAD(scad_geometries_boundary(NULL, 1, &geom)); 1460 BAD(scad_geometries_boundary(&geom1, 0, &geom)); 1461 BAD(scad_geometries_boundary(&geom1, 1, NULL)); 1462 OK(scad_geometries_boundary(&geom1, 1, &geom)); 1463 OK(scad_geometry_ref_put(geom1)); 1464 OK(scad_geometry_ref_put(geom)); 1465 1466 OK(scad_scene_count(&c)); 1467 CHK(c == 0); 1468 1469 OK(scad_add_sphere(p1, 0.1, &geom1)); 1470 BAD(scad_geometry_copy(NULL, &geom)); 1471 BAD(scad_geometry_copy(geom1, NULL)); 1472 OK(scad_geometry_copy(geom1, &geom)); 1473 OK(scad_geometry_ref_put(geom)); 1474 OK(scad_geometry_ref_put(geom1)); 1475 1476 OK(scad_scene_count(&c)); 1477 CHK(c == 0); 1478 1479 OK(scad_add_sphere(p1, 0.1, &geom)); 1480 BAD(scad_geometry_set_visibility(NULL, 1, 1)); 1481 OK(scad_geometry_set_visibility(geom, 1, 1)); 1482 OK(scad_geometry_ref_put(geom)); 1483 1484 OK(scad_scene_count(&c)); 1485 CHK(c == 0); 1486 1487 OK(scad_add_rectangle(p1, d2, &geom1)); 1488 OK(scad_add_rectangle(p2, d2, &geom2)); 1489 BAD(scad_geometries_set_periodic(NULL, 0, NULL, 0, NULL)); 1490 BAD(scad_geometries_set_periodic(NULL, 0, NULL, 1, NULL)); 1491 BAD(scad_geometries_set_periodic(NULL, 0, &geom2, 0, NULL)); 1492 BAD(scad_geometries_set_periodic(NULL, 1, NULL, 0, NULL)); 1493 BAD(scad_geometries_set_periodic(&geom1, 0, NULL, 0, NULL)); 1494 BAD(scad_geometries_set_periodic(NULL, 0, &geom2, 1, NULL)); 1495 BAD(scad_geometries_set_periodic(NULL, 1, NULL, 1, NULL)); 1496 BAD(scad_geometries_set_periodic(&geom1, 0, NULL, 1, NULL)); 1497 BAD(scad_geometries_set_periodic(NULL, 1, &geom2, 0, NULL)); 1498 BAD(scad_geometries_set_periodic(&geom1, 0, &geom2, 0, NULL)); 1499 BAD(scad_geometries_set_periodic(&geom1, 1, NULL, 0, NULL)); 1500 BAD(scad_geometries_set_periodic(&geom1, 1, &geom2, 0, NULL)); 1501 BAD(scad_geometries_set_periodic(&geom1, 1, NULL, 1, NULL)); 1502 BAD(scad_geometries_set_periodic(&geom1, 0, &geom2, 1, NULL)); 1503 BAD(scad_geometries_set_periodic(NULL, 1, &geom2, 1, NULL)); 1504 BAD(scad_geometries_set_periodic(&geom1, 1, &geom2, 1, NULL)); 1505 BAD(scad_geometries_set_periodic(NULL, 0, NULL, 0, affine)); 1506 BAD(scad_geometries_set_periodic(NULL, 0, NULL, 1, affine)); 1507 BAD(scad_geometries_set_periodic(NULL, 0, &geom2, 0, affine)); 1508 BAD(scad_geometries_set_periodic(NULL, 1, NULL, 0, affine)); 1509 BAD(scad_geometries_set_periodic(&geom1, 0, NULL, 0, affine)); 1510 BAD(scad_geometries_set_periodic(NULL, 0, &geom2, 1, affine)); 1511 BAD(scad_geometries_set_periodic(NULL, 1, NULL, 1, affine)); 1512 BAD(scad_geometries_set_periodic(&geom1, 0, NULL, 1, affine)); 1513 BAD(scad_geometries_set_periodic(NULL, 1, &geom2, 0, affine)); 1514 BAD(scad_geometries_set_periodic(&geom1, 0, &geom2, 0, affine)); 1515 BAD(scad_geometries_set_periodic(&geom1, 1, NULL, 0, affine)); 1516 BAD(scad_geometries_set_periodic(&geom1, 1, &geom2, 0, affine)); 1517 BAD(scad_geometries_set_periodic(&geom1, 1, NULL, 1, affine)); 1518 BAD(scad_geometries_set_periodic(&geom1, 0, &geom2, 1, affine)); 1519 BAD(scad_geometries_set_periodic(NULL, 1, &geom2, 1, affine)); 1520 OK(scad_geometries_set_periodic(&geom1, 1, &geom2, 1, affine)); 1521 OK(scad_geometry_ref_put(geom2)); 1522 OK(scad_add_rectangle(p4, d2, &geom2)); 1523 ERR(scad_geometries_set_periodic(&geom1, 1, &geom2, 1, affine)); 1524 OK(scad_geometry_ref_put(geom1)); 1525 OK(scad_geometry_ref_put(geom2)); 1526 1527 OK(scad_scene_count(&c)); 1528 CHK(c == 0); 1529 1530 OK(scad_add_sphere(p1, 0.1, &geom1)); 1531 BAD(scad_geometries_set_mesh_size_modifier(NULL, 0, 2, -1.5)); 1532 BAD(scad_geometries_set_mesh_size_modifier(NULL, 0, 2, 1.5)); 1533 BAD(scad_geometries_set_mesh_size_modifier(NULL, 0, SCAD_ABSOLUTE_SIZE, -1.5)); 1534 BAD(scad_geometries_set_mesh_size_modifier(NULL, 1, 2, -1.5)); 1535 BAD(scad_geometries_set_mesh_size_modifier(&geom1, 0, 2, -1.5)); 1536 BAD(scad_geometries_set_mesh_size_modifier(NULL, 0, SCAD_ABSOLUTE_SIZE, 1.5)); 1537 BAD(scad_geometries_set_mesh_size_modifier(NULL, 1, 2, 1.5)); 1538 BAD(scad_geometries_set_mesh_size_modifier(&geom1, 0, 2, 1.5)); 1539 BAD(scad_geometries_set_mesh_size_modifier(NULL, 1, SCAD_ABSOLUTE_SIZE, -1.5)); 1540 BAD(scad_geometries_set_mesh_size_modifier(&geom1, 0, SCAD_ABSOLUTE_SIZE, -1.5)); 1541 BAD(scad_geometries_set_mesh_size_modifier(&geom1, 1, 2, -1.5)); 1542 BAD(scad_geometries_set_mesh_size_modifier(&geom1, 1, SCAD_ABSOLUTE_SIZE, -1.5)); 1543 BAD(scad_geometries_set_mesh_size_modifier(&geom1, 1, 2, 1.5)); 1544 BAD(scad_geometries_set_mesh_size_modifier(&geom1, 0, SCAD_ABSOLUTE_SIZE, 1.5)); 1545 BAD(scad_geometries_set_mesh_size_modifier(NULL, 1, SCAD_ABSOLUTE_SIZE, 1.5)); 1546 OK(scad_geometries_set_mesh_size_modifier(&geom1, 1, SCAD_ABSOLUTE_SIZE, 1.5)); 1547 OK(scad_geometry_ref_put(geom1)); 1548 1549 OK(scad_scene_count(&c)); 1550 CHK(c == 0); 1551 1552 OK(scad_add_sphere(p1, 0.1, &geom1)); 1553 BAD(scad_geometries_set_mesh_algorithm(NULL, 0, 0)); 1554 BAD(scad_geometries_set_mesh_algorithm(NULL, 0, SCAD_AUTOMATIC)); 1555 BAD(scad_geometries_set_mesh_algorithm(NULL, 1, 0)); 1556 BAD(scad_geometries_set_mesh_algorithm(&geom1, 0, 0)); 1557 BAD(scad_geometries_set_mesh_algorithm(NULL, 1, SCAD_AUTOMATIC)); 1558 BAD(scad_geometries_set_mesh_algorithm(&geom1, 0, SCAD_AUTOMATIC)); 1559 BAD(scad_geometries_set_mesh_algorithm(&geom1, 1, 0)); 1560 OK(scad_geometries_set_mesh_algorithm(&geom1, 1, SCAD_AUTOMATIC)); 1561 OK(scad_geometry_ref_put(geom1)); 1562 1563 OK(scad_scene_count(&c)); 1564 CHK(c == 0); 1565 1566 options.Mesh.MeshSizeFromPoints = 1; 1567 options.Mesh.MeshSizeExtendFromBoundary = 1; 1568 OK(scad_set_options(&options)); 1569 1570 OK(scad_add_box(p1, d1, &geom)); 1571 OK(scad_scene_mesh()); 1572 darray_double_init(&allocator, &trg); 1573 OK(scad_stl_get_data(geom, &trg)); 1574 c = darray_double_size_get(&trg); 1575 darray_double_clear(&trg); 1576 BAD(scad_geometries_clear_mesh(NULL, 0)); 1577 BAD(scad_geometries_clear_mesh(NULL, 1)); 1578 BAD(scad_geometries_clear_mesh(&geom, 0)); 1579 OK(scad_geometries_clear_mesh(&geom, 1)); 1580 OK(scad_stl_get_data(geom, &trg)); 1581 CHK(0 == darray_double_size_get(&trg)); 1582 OK(scad_geometries_set_mesh_size_modifier(&geom, 1, SCAD_SIZE_FACTOR, 0.5)); 1583 OK(scad_scene_mesh()); 1584 OK(scad_stl_get_data(geom, &trg)); 1585 CHK(c < darray_double_size_get(&trg)); 1586 darray_double_release(&trg); 1587 OK(scad_geometry_ref_put(geom)); 1588 1589 options.Mesh.MeshSizeFromPoints = 0; 1590 options.Mesh.MeshSizeExtendFromBoundary = 0; 1591 OK(scad_set_options(&options)); 1592 1593 OK(scad_scene_count(&c)); 1594 CHK(c == 0); 1595 1596 OK(scad_add_box(p1, d1, &geoms[0])); 1597 OK(scad_add_box(p4, d1, &geoms[1])); 1598 name = "/tmp/test"LINE_STRING".step"; 1599 OK(scad_scene_write(name)); 1600 BAD(scad_step_import(NULL, NULL, NULL)); 1601 BAD(scad_step_import(NULL, NULL, &c)); 1602 BAD(scad_step_import(NULL, &geom_array, NULL)); 1603 BAD(scad_step_import("/tmp/test.step", NULL, NULL)); 1604 BAD(scad_step_import(NULL, &geom_array, &c)); 1605 BAD(scad_step_import("/tmp/test.step", NULL, &c)); 1606 BAD(scad_step_import("/tmp/test.step", &geom_array, NULL)); 1607 ERR(scad_step_import("dont_exist.step", &geom_array, &c)); 1608 OK(scad_step_import(name, &geom_array, &c)); 1609 CHK(c == 2); 1610 for(i = 0; i < 2; i++) { 1611 OK(scad_geometries_cut(geoms+i, 1, geom_array+i, 1, &geom)); 1612 OK(scad_geometry_is_empty(geom, &e)); 1613 OK(scad_geometry_ref_put(geom)); 1614 CHK(e == 1); 1615 } 1616 for(i = 0; i < c; i++) { 1617 OK(scad_geometry_ref_put(geom_array[i])); 1618 } 1619 MEM_RM(&allocator, geom_array); 1620 OK(scad_geometry_ref_put(geoms[0])); 1621 OK(scad_geometry_ref_put(geoms[1])); 1622 1623 OK(scad_scene_count(&c)); 1624 CHK(c == 0); 1625 1626 OK(scad_add_box(p1, d1, &geom)); 1627 BAD(scad_stl_export(NULL, NULL, 9, 0)); 1628 BAD(scad_stl_export(NULL, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0)); 1629 BAD(scad_stl_export(geom, NULL, 9, 0)); 1630 BAD(scad_stl_export(geom, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0)); 1631 OK(scad_stl_export(geom, "/tmp/test"LINE_STRING, SCAD_FORCE_NORMALS_OUTWARD, 1)); 1632 OK(scad_geometry_set_name(geom, "name")); 1633 BAD(scad_stl_export(NULL, NULL, 9, 0)); 1634 BAD(scad_stl_export(NULL, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0)); 1635 BAD(scad_stl_export(geom, NULL, 9, 0)); 1636 OK(scad_stl_export(geom, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0)); 1637 OK(scad_stl_export(geom, "/tmp/test"LINE_STRING, SCAD_FORCE_NORMALS_OUTWARD, 1)); 1638 OK(scad_geometry_ref_put(geom)); 1639 1640 OK(scad_scene_count(&c)); 1641 CHK(c == 0); 1642 1643 OK(scad_add_box(p1, d1, &geoms[0])); 1644 OK(scad_add_box(p4, d1, &geoms[1])); 1645 OK(scad_geometries_collect(geoms, 2, &geom)); 1646 BAD(scad_stl_export_partial(NULL, geoms, 1, NULL, 9, 0)); 1647 BAD(scad_stl_export_partial(NULL, geoms, 1, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0)); 1648 BAD(scad_stl_export_partial(geom, geoms, 1, NULL, 9, 0)); 1649 BAD(scad_stl_export_partial(geom, geoms, 1, NULL, SCAD_FORCE_NORMALS_INWARD, 0)); 1650 OK(scad_stl_export_partial(geom, geoms, 1, "/tmp/test"LINE_STRING, 1651 SCAD_FORCE_NORMALS_OUTWARD, 1)); 1652 OK(scad_geometry_set_name(geom, "name")); 1653 BAD(scad_stl_export_partial(NULL, geoms, 1, NULL, 9, 0)); 1654 BAD(scad_stl_export_partial(NULL, geoms, 1, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0)); 1655 BAD(scad_stl_export_partial(geom, geoms, 1, NULL, 9, 0)); 1656 OK(scad_stl_export_partial(geom, geoms, 1, NULL, SCAD_FORCE_NORMALS_INWARD, 0)); 1657 OK(scad_stl_export_partial(geom, geoms, 1, "/tmp/test"LINE_STRING, 1658 SCAD_FORCE_NORMALS_OUTWARD, 1)); 1659 OK(scad_stl_export_partial(geom, NULL, 0, "/tmp/test"LINE_STRING, 1660 SCAD_FORCE_NORMALS_OUTWARD, 1)); 1661 OK(scad_geometry_ref_put(geom)); 1662 OK(scad_geometry_ref_put(geoms[0])); 1663 OK(scad_geometry_ref_put(geoms[1])); 1664 1665 OK(scad_scene_count(&c)); 1666 CHK(c == 0); 1667 1668 OK(scad_add_box(p1, d1, &geom)); 1669 BAD(scad_stl_export_split(NULL, NULL, 9, 0)); 1670 BAD(scad_stl_export_split(NULL, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0)); 1671 BAD(scad_stl_export_split(geom, NULL, 9, 0)); 1672 BAD(scad_stl_export_split(geom, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0)); 1673 OK(scad_stl_export_split(geom, "/tmp/test"LINE_STRING, SCAD_FORCE_NORMALS_OUTWARD, 1)); 1674 OK(scad_geometry_set_name(geom, "name")); 1675 BAD(scad_stl_export_split(NULL, NULL, 9, 0)); 1676 BAD(scad_stl_export_split(NULL, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0)); 1677 BAD(scad_stl_export_split(geom, NULL, 9, 0)); 1678 OK(scad_stl_export_split(geom, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0)); 1679 OK(scad_stl_export_split(geom, "/tmp/test"LINE_STRING, SCAD_FORCE_NORMALS_OUTWARD, 1)); 1680 OK(scad_geometry_ref_put(geom)); 1681 1682 OK(scad_scene_count(&c)); 1683 CHK(c == 0); 1684 1685 OK(scad_add_box(p1, d1, &geom)); 1686 darray_double_init(&allocator, &trg); 1687 OK(scad_geometries_set_mesh_algorithm(&geom, 1, SCAD_INITIAL_MESH_ONLY)); 1688 OK(scad_scene_mesh()); 1689 BAD(scad_stl_get_data(NULL, NULL)); 1690 BAD(scad_stl_get_data(NULL, &trg)); 1691 BAD(scad_stl_get_data(geom, NULL)); 1692 OK(scad_stl_get_data(geom, &trg)); 1693 CHK(12 * 9 == darray_double_size_get(&trg)); 1694 darray_double_release(&trg); 1695 OK(scad_geometry_ref_put(geom)); 1696 1697 OK(scad_scene_count(&c)); 1698 CHK(c == 0); 1699 1700 OK(scad_add_box(p1, d1, &geoms[0])); 1701 OK(scad_add_box(p4, d1, &geoms[1])); 1702 OK(scad_geometries_collect(geoms, 2, &geom)); 1703 darray_double_init(&allocator, &trg); 1704 OK(scad_geometries_set_mesh_algorithm(geoms, 2, SCAD_INITIAL_MESH_ONLY)); 1705 OK(scad_scene_mesh()); 1706 BAD(scad_stl_get_data_partial(NULL, NULL, 0, NULL)); 1707 BAD(scad_stl_get_data_partial(NULL, NULL, 0, &trg)); 1708 BAD(scad_stl_get_data_partial(geom, NULL, 0, NULL)); 1709 OK(scad_stl_get_data_partial(geom, NULL, 0, &trg)); 1710 CHK(2 * 12 * 9 == darray_double_size_get(&trg)); 1711 darray_double_clear(&trg); 1712 OK(scad_stl_get_data_partial(geom, geoms, 1, &trg)); 1713 CHK(12 * 9 == darray_double_size_get(&trg)); 1714 darray_double_clear(&trg); 1715 OK(scad_stl_get_data_partial(geom, geoms, 2, &trg)); 1716 CHK(0 == darray_double_size_get(&trg)); 1717 darray_double_release(&trg); 1718 OK(scad_geometry_ref_put(geom)); 1719 OK(scad_geometry_ref_put(geoms[0])); 1720 OK(scad_geometry_ref_put(geoms[1])); 1721 1722 OK(scad_scene_count(&c)); 1723 CHK(c == 0); 1724 1725 OK(scad_add_box(p1, d1, &geom)); 1726 darray_double_init(&allocator, &trg); 1727 OK(scad_stl_get_data(geom, &trg)); 1728 CHK(0 == darray_double_size_get(&trg)); /* No call to mesh */ 1729 BAD(scad_stl_data_write(NULL, NULL, 9, 0)); 1730 BAD(scad_stl_data_write(NULL, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0)); 1731 BAD(scad_stl_data_write(&trg, NULL, 9, 0)); 1732 BAD(scad_stl_data_write(&trg, NULL, SCAD_KEEP_NORMALS_UNCHANGED, 0)); 1733 OK(scad_stl_data_write(&trg, "/tmp/test"LINE_STRING, SCAD_FORCE_NORMALS_OUTWARD, 1)); 1734 OK(scad_geometry_ref_put(geom)); 1735 1736 OK(scad_scene_count(&c)); 1737 CHK(c == 0); 1738 1739 options.Misc.LogRefCounting = SCAD_LOG_DIMTAGS_ONLY_UNDELETED; 1740 OK(scad_set_options(&options)); 1741 1742 OK(scad_finalize()); 1743 1744 check_memory_allocator(&allocator); 1745 mem_shutdown_proxy_allocator(&allocator); 1746 CHK(mem_allocated_size() == 0); 1747 1748 return (res == RES_OK) ? EXIT_SUCCESS : EXIT_FAILURE; 1749 }