@realsee/dnalogel
Version:
99 lines (98 loc) • 3.23 kB
JavaScript
import { BaseEditorWithObjectHelper as m } from "../Objects/Base/Editor.js";
import * as r from "three";
class V extends m {
constructor(e) {
super(e, () => ({
positionFrom: () => e.worldCenter,
yAxis: () => new r.Vector3().subVectors(e.topPosition, e.bottomPositions[0]).normalize(),
zAxis: () => new r.Vector3().subVectors(e.bottomPositions[0], e.bottomPositions[1]).normalize(),
scaleHelper: {
enable: !0,
positions: () => {
const l = e.bottomPositions, c = e.topPosition, a = new r.Vector3().subVectors(c, l[0]), s = new r.Vector3().subVectors(l[1], l[0]), i = new r.Vector3().subVectors(l[2], l[1]), o = e.geometryInfo.center, f = o.clone().sub(a.clone().divideScalar(2)), d = o.clone().add(a.clone().divideScalar(2)), n = o.clone().sub(s.clone().divideScalar(2)), t = o.clone().add(s.clone().divideScalar(2)), P = o.clone().sub(i.clone().divideScalar(2)), b = o.clone().add(i.clone().divideScalar(2));
return [
{
id: "top",
handlePosition: d,
basePosition: f
},
{
id: "bottom",
handlePosition: f,
basePosition: d
},
{
id: "left",
handlePosition: n,
basePosition: t
},
{
id: "right",
handlePosition: t,
basePosition: n
},
{
id: "front",
handlePosition: P,
basePosition: b
},
{
id: "back",
handlePosition: b,
basePosition: P
}
];
},
scaleCallback: (l) => {
const { intersectPoint: c, scalePosition: a } = l, { id: s, basePosition: i } = a, o = e.bottomPositions, f = e.topPositions;
let d = new r.Vector3().subVectors(e.topPosition, o[0]), n;
if (s === "top")
d = c.clone().sub(i), n = o;
else if (s === "bottom") {
const t = c.clone().sub(i);
n = f.map((P) => P.clone().add(t)), d = void 0;
} else if (s === "left") {
const t = c.clone().sub(i);
n = [
o[1].clone().add(t),
o[1],
o[2],
o[2].clone().add(t)
];
} else if (s === "right") {
const t = c.clone().sub(i);
n = [
o[0],
o[0].clone().add(t),
o[3].clone().add(t),
o[3]
];
} else if (s === "front") {
const t = c.clone().sub(i);
n = [
o[3].clone().add(t),
o[2].clone().add(t),
o[2],
o[3]
];
} else if (s === "back") {
const t = c.clone().sub(i);
n = [
o[0],
o[1],
o[1].clone().add(t),
o[0].clone().add(t)
];
}
e.setPoints({
points: n,
heightPoint: d ? n[0].clone().add(d) : void 0
});
}
}
}));
}
}
export {
V as BoxMeshEditor
};