]> git.jsancho.org Git - guile-irrlicht.git/blob - irrlicht/aabbox3d.scm
Tests for foreign records
[guile-irrlicht.git] / irrlicht / aabbox3d.scm
1 ;;; guile-irrlicht --- FFI bindings for Irrlicht Engine
2 ;;; Copyright (C) 2019 Javier Sancho <jsf@jsancho.org>
3 ;;;
4 ;;; This file is part of guile-irrlicht.
5 ;;;
6 ;;; Guile-irrlicht is free software; you can redistribute it and/or modify
7 ;;; it under the terms of the GNU Lesser General Public License as
8 ;;; published by the Free Software Foundation; either version 3 of the
9 ;;; License, or (at your option) any later version.
10 ;;;
11 ;;; Guile-irrlicht is distributed in the hope that it will be useful, but
12 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
13 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 ;;; General Public License for more details.
15 ;;;
16 ;;; You should have received a copy of the GNU Lesser General Public
17 ;;; License along with guile-irrlicht.  If not, see
18 ;;; <http://www.gnu.org/licenses/>.
19
20
21 (define-module (irrlicht aabbox3d)
22   #:use-module (srfi srfi-9)
23   #:use-module (srfi srfi-9 gnu)
24   #:use-module (system foreign)
25   #:use-module ((irrlicht bindings core) #:prefix ffi-core:)
26   #:export (make-aabbox3d
27             aabbox3d-min-edge
28             aabbox3d-max-edge
29             aabbox3d-reset!
30             aabbox3d-add-internal-point!))
31
32 (define-record-type <aabbox3d>
33   (make-raw-aabbox3d c-pointer)
34   aabbox3d?
35   (c-pointer aabbox3d-c-pointer))
36
37 (define* (make-aabbox3d #:optional (min-edge '(0 0 0)) (max-edge min-edge))
38   (make-raw-aabbox3d
39    (make-c-struct ffi-core:aabbox3d_f32 (append min-edge max-edge))))
40
41 (define (aabbox3d-min-edge box)
42   (let ((data (parse-c-struct (aabbox3d-c-pointer box) ffi-core:aabbox3d_f32)))
43     (list-head data 3)))
44
45 (define (aabbox3d-max-edge box)
46   (let ((data (parse-c-struct (aabbox3d-c-pointer box) ffi-core:aabbox3d_f32)))
47     (list-tail data 3)))
48
49 (define (aabbox3d-reset! box point)
50   (ffi-core:aabbox3d-reset
51    (aabbox3d-c-pointer box)
52    (make-c-struct ffi-core:vector3df point)))
53
54 (define (aabbox3d-add-internal-point! box point)
55   (ffi-core:aabbox3d-add-internal-point
56    (aabbox3d-c-pointer box)
57    (make-c-struct ffi-core:vector3df point)))
58
59 (set-record-type-printer! <aabbox3d>
60   (lambda (record port)
61     (let ((min (aabbox3d-min-edge record))
62           (max (aabbox3d-max-edge record)))
63       (format port "#<aabbox3d min: ~a max: ~a>" min max))))