;; Testing boolean operations between surfaces (use gts srfi-4) (define (compute-surfaces) (let ((s1 (sphere 2)) (s2 (cube))) (values s1 s2))) ;; Difference (let-values (((s1 s2) (compute-surfaces))) (let ((d (surface-difference (surface-scale s1 dx: 1.5 dy: 1.5 dz: 1.5) s2))) (let ((out1 (fopen "setops1.gts" "w+"))) (surface-write d out1) (fclose out1)) )) ;; Union (let-values (((s1 s2) (compute-surfaces))) (let ((u (surface-union s1 (surface-translate s2 dy: -1.1)))) (let ((out2 (fopen "setops2.gts" "w+"))) (surface-write u out2) (fclose out2)) )) ;; Intersection (let-values (((s1 s2) (compute-surfaces))) (let ((i (surface-intersection s1 (surface-translate s2 dy: 1.1)))) (let ((out3 (fopen "setops3.gts" "w+"))) (surface-write i out3) (fclose out3)) (for-each surface-destroy (list i s1 s2)) )) (define (compute-isosurfaces) (let ((s1 (cylinder 1.0 2)) (s2 (sphere 2))) (values s1 s2))) (let-values (((s1 s2) (compute-isosurfaces))) (let ((u (surface-union s1 (surface-translate s2 dz: 10.0)))) (let ((out2 (fopen "setops4.gts" "w+"))) (surface-write u out2) (fclose out2)) (for-each surface-destroy (list u s1 s2)) ))