Skip to content

Commit 0543c2b

Browse files
authored
Merge branch 'master' into PR-so3
2 parents e4d3b5b + 8993298 commit 0543c2b

File tree

2 files changed

+107
-5
lines changed

2 files changed

+107
-5
lines changed

irteus/irtcollada.l

+5-5
Original file line numberDiff line numberDiff line change
@@ -211,13 +211,13 @@
211211
(cons :origin ;parent -> child transformation
212212
(let ((parent (send link :parent)))
213213
(send parent :transformation link)))
214-
(cons :mesh (eusmodel-mesh-spec link))
214+
(cons :mesh (eusmodel-mesh-spec link rt-cds))
215215
(cons :mass_frame mframe)
216216
(cons :mass (/ (send link :weight) 1000.0))
217217
(cons :inertia inertia)
218218
)))
219219

220-
(defun eusmodel-mesh-spec (link)
220+
(defun eusmodel-mesh-spec (link rt-cds)
221221
;; right?
222222
(let ((bs (send link :bodies)))
223223
(mapcar #'(lambda (b)
@@ -227,10 +227,10 @@
227227
(send (geo::body-to-triangles b nil)
228228
:faces))))
229229
(send trimesh :set-color (get b :face-color))
230-
;; move trimesh to origin...
230+
;; move trimesh to origin(root) relative coordinates
231231
(send trimesh
232-
:move-to (send (send b :copy-worldcoords)
233-
:inverse-transformation))
232+
:move-to (send rt-cds :inverse-transformation))
233+
(send trimesh :worldcoords)
234234
trimesh))
235235
bs)))
236236

irteus/test/test-collada.l

+102
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
(require :unittest "lib/llib/unittest.l")
2+
3+
(defclass testrobot
4+
:super cascaded-link
5+
:slots (j0 j1))
6+
(defmethod testrobot
7+
(:init
8+
(&key (name "testrobot") (move-root))
9+
(send-super :init)
10+
(let ((b (instance bodyset-link :init (make-cascoords) :name 'body
11+
:bodies (list (make-cube 100 100 100))))
12+
(l0 (instance bodyset-link :init (make-cascoords) :name 'l0
13+
:bodies (list (make-cube 100 100 100))))
14+
(l1 (instance bodyset-link :init (make-cascoords) :name 'l1
15+
:bodies (list (make-cube 100 100 100))))
16+
)
17+
(send self :assoc b)
18+
19+
(send l0 :locate (float-vector 0 0 100))
20+
(send l1 :locate (float-vector 0 100 100))
21+
22+
(send b :assoc l0)
23+
(send l0 :assoc l1)
24+
25+
(if move-root (send b :translate (float-vector 0 0 500)))
26+
27+
(setq j0 (instance rotational-joint :init :name 'j0
28+
:parent-link b :child-link l0 :axis :x))
29+
(setq j1 (instance rotational-joint :init :name 'j1
30+
:parent-link l0 :child-link l1 :axis :x))
31+
32+
(setq links (list b l0 l1))
33+
(setq joint-list (list j0 j1))
34+
35+
(send self :init-ending)
36+
)
37+
self)
38+
)
39+
40+
(init-unit-test)
41+
42+
(deftest test-link-offset ()
43+
(setq *normal-model* (instance testrobot :init :move-root nil))
44+
(setq *moved-model* (instance testrobot :init :move-root t))
45+
;;
46+
(let* ((desc (collada::eusmodel-description *normal-model*))
47+
(c0 (send (cdr (assoc :origin (elt (car desc) 0))) :copy-worldcoords))
48+
(c1 (send (cdr (assoc :origin (elt (car desc) 1))) :copy-worldcoords))
49+
(c2 (send (cdr (assoc :origin (elt (car desc) 2))) :copy-worldcoords)))
50+
(send c0 :transform c1)
51+
(send c0 :transform c2)
52+
(assert (eps-coords= c0
53+
(make-coords :pos (float-vector 0 100 100)))
54+
(format nil "normal-model / coords ~A is not correct" c0))
55+
56+
)
57+
;;
58+
(let* ((desc (collada::eusmodel-description *moved-model*))
59+
(c0 (send (cdr (assoc :origin (elt (car desc) 0))) :copy-worldcoords))
60+
(c1 (send (cdr (assoc :origin (elt (car desc) 1))) :copy-worldcoords))
61+
(c2 (send (cdr (assoc :origin (elt (car desc) 2))) :copy-worldcoords)))
62+
(send c0 :transform c1)
63+
(send c0 :transform c2)
64+
(assert (eps-coords= c0
65+
(make-coords :pos (float-vector 0 100 600)))
66+
(format nil "moved-model / coords ~A is not correct" c0))
67+
68+
)
69+
)
70+
71+
(deftest test-mesh-offset ()
72+
(setq *normal-model* (instance testrobot :init :move-root nil))
73+
(setq *moved-model* (instance testrobot :init :move-root t))
74+
;;
75+
(let* ((desc (collada::eusmodel-description *normal-model*))
76+
(mesh0 (make-bounding-box (send (cadr (assoc :mesh (elt (car desc) 0))) :vertices) 0.0))
77+
(mesh2 (make-bounding-box (send (cadr (assoc :mesh (elt (car desc) 2))) :vertices) 0.0))
78+
)
79+
(assert (eps-v= (send mesh0 :center) (float-vector 0 0 0))
80+
(format nil "normal / mesh0 (~A) is not equal #f(0 0 0)"
81+
(send mesh0 :center)))
82+
(assert (eps-v= (send mesh2 :center) (float-vector 0 100 100))
83+
(format nil "normal / mesh2 (~A) is not equal #f(0 100 100)"
84+
(send mesh2 :center)))
85+
)
86+
;;
87+
(let* ((desc (collada::eusmodel-description *moved-model*))
88+
(mesh0 (make-bounding-box (send (cadr (assoc :mesh (elt (car desc) 0))) :vertices) 0.0))
89+
(mesh2 (make-bounding-box (send (cadr (assoc :mesh (elt (car desc) 2))) :vertices) 0.0))
90+
)
91+
(assert (eps-v= (send mesh0 :center) (float-vector 0 0 0))
92+
(format nil "moved / mesh0 (~A) is not equal #f(0 0 0)"
93+
(send mesh0 :center)))
94+
(assert (eps-v= (send mesh2 :center) (float-vector 0 100 100))
95+
(format nil "moved / mesh2 (~A) is not equal #f(0 100 100)"
96+
(send mesh2 :center)))
97+
)
98+
)
99+
100+
(eval-when (load eval)
101+
(run-all-tests)
102+
(exit))

0 commit comments

Comments
 (0)