fixes #334 ensure tab rotation quaternions are stored as arrays
This commit is contained in:
parent
6ead32637e
commit
e65c6e1d23
2 changed files with 8 additions and 4 deletions
|
|
@ -1258,16 +1258,20 @@ CAM.init = function(kiri, api) {
|
||||||
let tabs = API.widgets.annotate(widget.id).tab || [];
|
let tabs = API.widgets.annotate(widget.id).tab || [];
|
||||||
tabs.forEach(rec => {
|
tabs.forEach(rec => {
|
||||||
let { id, pos, rot } = rec;
|
let { id, pos, rot } = rec;
|
||||||
|
if (!Array.isArray(rot)) {
|
||||||
|
rot = rot.toArray();
|
||||||
|
}
|
||||||
let coff = widget.track.center;
|
let coff = widget.track.center;
|
||||||
let tab = widget.tabs[id];
|
let tab = widget.tabs[id];
|
||||||
let m4 = new THREE.Matrix4().makeRotationFromEuler(new THREE.Euler(x || 0, y || 0, z || 0));
|
let m4 = new THREE.Matrix4().makeRotationFromEuler(new THREE.Euler(x || 0, y || 0, z || 0));
|
||||||
// update position vector
|
// update position vector
|
||||||
let vc = new THREE.Vector3(pos.x, pos.y, pos.z).applyMatrix4(m4);
|
let vc = new THREE.Vector3(pos.x, pos.y, pos.z).applyMatrix4(m4);
|
||||||
// update rotation quaternion
|
// update rotation quaternion
|
||||||
|
let [ rx, ry, rz, rw ] = rot;
|
||||||
rec.rot = new THREE.Quaternion().multiplyQuaternions(
|
rec.rot = new THREE.Quaternion().multiplyQuaternions(
|
||||||
new THREE.Quaternion(rot._x, rot._y, rot._z, rot._w),
|
new THREE.Quaternion(rx, ry, rz, rw),
|
||||||
new THREE.Quaternion().setFromRotationMatrix(m4)
|
new THREE.Quaternion().setFromRotationMatrix(m4)
|
||||||
);
|
).toArray();
|
||||||
tab.box.geometry.applyMatrix4(m4);
|
tab.box.geometry.applyMatrix4(m4);
|
||||||
tab.box.position.x = pos.x = vc.x - coff.dx;
|
tab.box.position.x = pos.x = vc.x - coff.dx;
|
||||||
tab.box.position.y = pos.y = vc.y - coff.dy;
|
tab.box.position.y = pos.y = vc.y - coff.dy;
|
||||||
|
|
@ -1829,8 +1833,9 @@ function restoreTabs(widgets) {
|
||||||
widgets.forEach(widget => {
|
widgets.forEach(widget => {
|
||||||
const tabs = API.widgets.annotate(widget.id).tab || [];
|
const tabs = API.widgets.annotate(widget.id).tab || [];
|
||||||
tabs.forEach(rec => {
|
tabs.forEach(rec => {
|
||||||
|
let [ x, y, z, w ] = rec.rot;
|
||||||
rec = Object.clone(rec);
|
rec = Object.clone(rec);
|
||||||
rec.rot = new THREE.Quaternion(rec.rot._x ,rec.rot._y, rec.rot._z, rec.rot._w);
|
rec.rot = new THREE.Quaternion(x, y, z, w);
|
||||||
addWidgetTab(widget, rec);
|
addWidgetTab(widget, rec);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -643,7 +643,6 @@ function delbox(name) {
|
||||||
|
|
||||||
function addbox(point, color, name, dim = {x:1,y:1,z:1,rz:0}, opt = {}) {
|
function addbox(point, color, name, dim = {x:1,y:1,z:1,rz:0}, opt = {}) {
|
||||||
delbox(name);
|
delbox(name);
|
||||||
|
|
||||||
const box = boxes[name] = new Mesh(
|
const box = boxes[name] = new Mesh(
|
||||||
new BoxGeometry(dim.x, dim.y, dim.z),
|
new BoxGeometry(dim.x, dim.y, dim.z),
|
||||||
new MeshPhongMaterial({
|
new MeshPhongMaterial({
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue