|
89 | 89 | (transform (transpose (send self :worldrot))
|
90 | 90 | (scale (acos (v. a0 a1)) (normalize-vector (v* a0 a1))))))
|
91 | 91 | ((:xy :yx :yz :zy :zx :xz)
|
92 |
| - (setq a0 (send self :axis (case rotation-axis ((:xy :yx) :z) ((:yz :zy) :x) ((:zx :xz) :y))) |
93 |
| - a1 (send coords :axis (case rotation-axis ((:xy :yx) :z) ((:yz :zy) :x) ((:zx :xz) :y)))) |
94 |
| - (setq dif-rot |
95 |
| - (transform (transpose (send self :worldrot)) |
96 |
| - (scale (acos (v. a0 a1)) (normalize-vector (v* a0 a1))))) |
97 |
| - (let ((self-coords (send (send self :copy-worldcoords) :rotate (norm dif-rot) dif-rot))) |
98 |
| - (setq a0 (send self-coords :axis (case rotation-axis ((:xy :yx) :x) ((:yz :zy) :y) ((:zx :xz) :z))) |
99 |
| - a1 (send coords :axis (case rotation-axis ((:xy :yx) :x) ((:yz :zy) :y) ((:zx :xz) :z)))) |
| 92 | + (let ((ax1 (case rotation-axis ((:xy :yx) :z) ((:yz :zy) :x) ((:zx :xz) :y))) |
| 93 | + (ax2 (case rotation-axis ((:xy :yx) :x) ((:yz :zy) :y) ((:zx :xz) :z)))) |
| 94 | + (setq a0 (send self :axis ax1) |
| 95 | + a1 (send coords :axis ax1)) |
100 | 96 | (setq dif-rot
|
101 |
| - (transform (transpose (send self-coords :worldrot)) |
102 |
| - (scale (acos (v. a0 a1)) (normalize-vector (v* a0 a1)))))) |
103 |
| - ) |
| 97 | + (transform (transpose (send self :worldrot)) |
| 98 | + (scale (acos (v. a0 a1)) (normalize-vector (v* a0 a1))))) |
| 99 | + (let ((self-coords (if (= 0.0 (norm dif-rot)) |
| 100 | + self |
| 101 | + (send (send self :copy-worldcoords) :rotate (norm dif-rot) (normalize-vector dif-rot))))) |
| 102 | + (setq a0 (send self-coords :axis ax2) |
| 103 | + a1 (send coords :axis ax2)) |
| 104 | + (setq dif-rot |
| 105 | + (transform (transpose (send self-coords :worldrot)) |
| 106 | + (scale (acos (v. a0 a1)) (normalize-vector (v* a0 a1)))))))) |
104 | 107 | ((:xx :yy :zz)
|
105 | 108 | (let ((axis (case rotation-axis (:xx :x) (:yy :y) (:zz :z))) a0 a2)
|
106 | 109 | (setq a0 (send self :axis axis))
|
|
0 commit comments