csg 0.0.0 → 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/src/bsp.c +14 -8
 - data/src/bsp.h +11 -0
 - data/src/export.c +0 -1
 - metadata +2 -2
 
    
        data/src/bsp.c
    CHANGED
    
    | 
         @@ -307,7 +307,8 @@ klist_t(poly) *bsp_clip_polygon_array(bsp_node_t *node, poly_t **polygons, size_ 
     | 
|
| 
       307 
307 
     | 
    
         
             
            	poly_t *p = NULL;
         
     | 
| 
       308 
308 
     | 
    
         
             
            	int rc = -1;
         
     | 
| 
       309 
309 
     | 
    
         | 
| 
       310 
     | 
    
         
            -
            	poly_t  
     | 
| 
      
 310 
     | 
    
         
            +
            	poly_t *static_poly_buffer[STATIC_POLY_BUFFER_SIZE];
         
     | 
| 
      
 311 
     | 
    
         
            +
            	poly_t **poly_buffer = static_poly_buffer;
         
     | 
| 
       311 
312 
     | 
    
         
             
            	poly_t **front_array = NULL;
         
     | 
| 
       312 
313 
     | 
    
         
             
            	poly_t **back_array = NULL;
         
     | 
| 
       313 
314 
     | 
    
         
             
            	int n_front = 0;
         
     | 
| 
         @@ -317,7 +318,9 @@ klist_t(poly) *bsp_clip_polygon_array(bsp_node_t *node, poly_t **polygons, size_ 
     | 
|
| 
       317 
318 
     | 
    
         
             
            	if(n_polys == 0) return result;
         
     | 
| 
       318 
319 
     | 
    
         | 
| 
       319 
320 
     | 
    
         
             
            	if(node->divider != NULL) {
         
     | 
| 
       320 
     | 
    
         
            -
            		 
     | 
| 
      
 321 
     | 
    
         
            +
            		if((n_polys * 2) > STATIC_POLY_BUFFER_SIZE) {
         
     | 
| 
      
 322 
     | 
    
         
            +
            			check_mem(poly_buffer = malloc((sizeof(poly_t*) * n_polys) * 2));
         
     | 
| 
      
 323 
     | 
    
         
            +
            		}
         
     | 
| 
       321 
324 
     | 
    
         
             
            		front_array = poly_buffer;
         
     | 
| 
       322 
325 
     | 
    
         
             
            		back_array = poly_buffer + n_polys;
         
     | 
| 
       323 
326 
     | 
    
         
             
            		// Sort this node's polygons into the front or back
         
     | 
| 
         @@ -350,7 +353,7 @@ klist_t(poly) *bsp_clip_polygon_array(bsp_node_t *node, poly_t **polygons, size_ 
     | 
|
| 
       350 
353 
     | 
    
         
             
            			check(result != NULL, "Failed to clip back tree");
         
     | 
| 
       351 
354 
     | 
    
         
             
            		}
         
     | 
| 
       352 
355 
     | 
    
         | 
| 
       353 
     | 
    
         
            -
            		if(poly_buffer) free(poly_buffer);
         
     | 
| 
      
 356 
     | 
    
         
            +
            		if(poly_buffer != static_poly_buffer) free(poly_buffer);
         
     | 
| 
       354 
357 
     | 
    
         
             
            		// Clean up the result halves, now that they're copied into `result`
         
     | 
| 
       355 
358 
     | 
    
         
             
            	}
         
     | 
| 
       356 
359 
     | 
    
         
             
            	else {
         
     | 
| 
         @@ -363,7 +366,7 @@ klist_t(poly) *bsp_clip_polygon_array(bsp_node_t *node, poly_t **polygons, size_ 
     | 
|
| 
       363 
366 
     | 
    
         | 
| 
       364 
367 
     | 
    
         
             
            	return result;
         
     | 
| 
       365 
368 
     | 
    
         
             
            error:
         
     | 
| 
       366 
     | 
    
         
            -
            	if(poly_buffer) free(poly_buffer);
         
     | 
| 
      
 369 
     | 
    
         
            +
            	if(poly_buffer != static_poly_buffer) free(poly_buffer);
         
     | 
| 
       367 
370 
     | 
    
         
             
            	if(result) kl_destroy(poly, result);
         
     | 
| 
       368 
371 
     | 
    
         
             
            	return NULL;
         
     | 
| 
       369 
372 
     | 
    
         
             
            }
         
     | 
| 
         @@ -374,7 +377,8 @@ klist_t(poly) *bsp_clip_polygons(bsp_node_t *node, klist_t(poly) *polygons, klis 
     | 
|
| 
       374 
377 
     | 
    
         
             
            	poly_t *p = NULL;
         
     | 
| 
       375 
378 
     | 
    
         
             
            	int rc = -1;
         
     | 
| 
       376 
379 
     | 
    
         | 
| 
       377 
     | 
    
         
            -
            	poly_t  
     | 
| 
      
 380 
     | 
    
         
            +
            	poly_t *static_poly_buffer[STATIC_POLY_BUFFER_SIZE];
         
     | 
| 
      
 381 
     | 
    
         
            +
            	poly_t **poly_buffer = static_poly_buffer;
         
     | 
| 
       378 
382 
     | 
    
         
             
            	poly_t **front_array = NULL;
         
     | 
| 
       379 
383 
     | 
    
         
             
            	poly_t **back_array = NULL;
         
     | 
| 
       380 
384 
     | 
    
         
             
            	int n_front = 0;
         
     | 
| 
         @@ -384,7 +388,9 @@ klist_t(poly) *bsp_clip_polygons(bsp_node_t *node, klist_t(poly) *polygons, klis 
     | 
|
| 
       384 
388 
     | 
    
         
             
            	if(polygons->size == 0) return result;
         
     | 
| 
       385 
389 
     | 
    
         | 
| 
       386 
390 
     | 
    
         
             
            	if(node->divider != NULL) {
         
     | 
| 
       387 
     | 
    
         
            -
            		 
     | 
| 
      
 391 
     | 
    
         
            +
            		if((polygons->size * 2) > STATIC_POLY_BUFFER_SIZE) {
         
     | 
| 
      
 392 
     | 
    
         
            +
            			check_mem(poly_buffer = malloc(sizeof(poly_t*) * polygons->size * 2));
         
     | 
| 
      
 393 
     | 
    
         
            +
            		}
         
     | 
| 
       388 
394 
     | 
    
         
             
            		front_array = poly_buffer;
         
     | 
| 
       389 
395 
     | 
    
         
             
            		back_array = poly_buffer + polygons->size;
         
     | 
| 
       390 
396 
     | 
    
         
             
            		// Sort this node's polygons into the front or back
         
     | 
| 
         @@ -416,7 +422,7 @@ klist_t(poly) *bsp_clip_polygons(bsp_node_t *node, klist_t(poly) *polygons, klis 
     | 
|
| 
       416 
422 
     | 
    
         
             
            			check(result != NULL, "Failed to clip back tree");
         
     | 
| 
       417 
423 
     | 
    
         
             
            		}
         
     | 
| 
       418 
424 
     | 
    
         | 
| 
       419 
     | 
    
         
            -
            		if(poly_buffer) free(poly_buffer);
         
     | 
| 
      
 425 
     | 
    
         
            +
            		if(poly_buffer != static_poly_buffer) free(poly_buffer);
         
     | 
| 
       420 
426 
     | 
    
         
             
            		// Clean up the result halves, now that they're copied into `result`
         
     | 
| 
       421 
427 
     | 
    
         
             
            	}
         
     | 
| 
       422 
428 
     | 
    
         
             
            	else {
         
     | 
| 
         @@ -429,7 +435,7 @@ klist_t(poly) *bsp_clip_polygons(bsp_node_t *node, klist_t(poly) *polygons, klis 
     | 
|
| 
       429 
435 
     | 
    
         | 
| 
       430 
436 
     | 
    
         
             
            	return result;
         
     | 
| 
       431 
437 
     | 
    
         
             
            error:
         
     | 
| 
       432 
     | 
    
         
            -
            	if(poly_buffer) free(poly_buffer);
         
     | 
| 
      
 438 
     | 
    
         
            +
            	if(poly_buffer != static_poly_buffer) free(poly_buffer);
         
     | 
| 
       433 
439 
     | 
    
         
             
            	if(result) kl_destroy(poly, result);
         
     | 
| 
       434 
440 
     | 
    
         
             
            	return NULL;
         
     | 
| 
       435 
441 
     | 
    
         
             
            }
         
     | 
    
        data/src/bsp.h
    CHANGED
    
    | 
         @@ -4,6 +4,17 @@ 
     | 
|
| 
       4 
4 
     | 
    
         
             
            #ifndef __BSP_H
         
     | 
| 
       5 
5 
     | 
    
         
             
            #define __BSP_H
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
      
 7 
     | 
    
         
            +
            // This many polygon pointers are allocated
         
     | 
| 
      
 8 
     | 
    
         
            +
            // on the stack during bsp_clip_polygons and bsp_clip_polygon_array
         
     | 
| 
      
 9 
     | 
    
         
            +
            // Only when more than this is requested do we reach
         
     | 
| 
      
 10 
     | 
    
         
            +
            // into the heap for more polygon pointers.
         
     | 
| 
      
 11 
     | 
    
         
            +
            // Setting this to zero disables the optimization.
         
     | 
| 
      
 12 
     | 
    
         
            +
            // Exceptionally large values will limit the recursion
         
     | 
| 
      
 13 
     | 
    
         
            +
            // limit.
         
     | 
| 
      
 14 
     | 
    
         
            +
            #ifndef STATIC_POLY_BUFFER_SIZE
         
     | 
| 
      
 15 
     | 
    
         
            +
            #define STATIC_POLY_BUFFER_SIZE 200
         
     | 
| 
      
 16 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
       7 
18 
     | 
    
         
             
            typedef struct s_bsp_node {
         
     | 
| 
       8 
19 
     | 
    
         
             
            	klist_t(poly) *polygons;
         
     | 
| 
       9 
20 
     | 
    
         
             
            	poly_t *divider;
         
     | 
    
        data/src/export.c
    CHANGED
    
    | 
         @@ -26,7 +26,6 @@ stl_object *bsp_to_stl(bsp_node_t *tree) { 
     | 
|
| 
       26 
26 
     | 
    
         | 
| 
       27 
27 
     | 
    
         
             
            	polys = bsp_to_polygons(tree, 1, NULL);
         
     | 
| 
       28 
28 
     | 
    
         
             
            	check(polys != NULL, "Failed to generate polygons from bsp_node_t(%p)", tree);
         
     | 
| 
       29 
     | 
    
         
            -
            	check(polys->size > 0, "No polygons returned from tree(%p)", tree);
         
     | 
| 
       30 
29 
     | 
    
         | 
| 
       31 
30 
     | 
    
         
             
            	stl = stl_from_polys(polys);
         
     | 
| 
       32 
31 
     | 
    
         
             
            	check(stl != NULL, "Failed to build stl from %zd polygons", polys->size);
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: csg
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.1
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -10,7 +10,7 @@ authors: 
     | 
|
| 
       10 
10 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       11 
11 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       12 
12 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       13 
     | 
    
         
            -
            date: 2013- 
     | 
| 
      
 13 
     | 
    
         
            +
            date: 2013-07-05 00:00:00.000000000 Z
         
     | 
| 
       14 
14 
     | 
    
         
             
            dependencies:
         
     | 
| 
       15 
15 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       16 
16 
     | 
    
         
             
              name: ffi
         
     |