]> git.jsancho.org Git - guile-assimp.git/blobdiff - src/assimp.scm
Refining node structure (name, transformation and parent fields)
[guile-assimp.git] / src / assimp.scm
index e4d8f8e6f1b78e342a74c5e10e6f68f0bc11123a..5de82f271b3220fd18cb9bcd67ec9ba51a9ce7c3 100644 (file)
@@ -16,6 +16,7 @@
 
 
 (define-module (assimp assimp)
+  #:use-module (ice-9 iconv)
   #:use-module (rnrs bytevectors)
   #:use-module (system foreign))
 
    (native-endianness)
    4))
 
+(define (get-aiString index)
+  (lambda (pointer)
+    (let* ((length (bv-uint-ref pointer index))
+          (data (pointer->bytevector pointer length (+ index 4))))
+      (bytevector->string data (fluid-ref %default-port-encoding)))))
+
+(define* (get-pointer index #:optional wrap-proc)
+  (lambda (pointer)
+    (let ((p (bv-uint-ref pointer index)))
+      (cond ((= p 0) '())
+           (else
+            (let ((p2 (make-pointer p)))
+              (list
+               (cond (wrap-proc (wrap-proc p2))
+                     (else p2)))))))))
+
 (define* (get-pointer-of-pointers-procedure num-index root-index #:optional wrap-proc)
   (lambda (pointer)
     (let* ((num (bv-uint-ref pointer num-index))
 ;;; Nodes
 
 (define-type node
-  (name (lambda (p) (bv-uint-ref p 0))) ;check, it's a struct
-  (transformation (lambda (p) (bv-uint-ref p 1028))) ;check, it's a struct
-  (parent (lambda (p) (bv-uint-ref p 1092)))
-  (children (get-pointer-of-pointers-procedure 1096 1100))
-  (meshes (get-pointer-of-pointers-procedure 1104 1108)))
+  (name (get-aiString 0))
+  (transformation (lambda (p) (array->list (pointer->bytevector p 16 1028 'f32))))
+  (parent (get-pointer 1092 wrap-node))
+  (children (get-pointer-of-pointers-procedure 1096 1100 wrap-node))
+  (meshes (get-pointer-of-pointers-procedure 1104 1108 wrap-mesh)))
 
 (export node?
        node-contents)