44 lines
1 KiB
JavaScript
44 lines
1 KiB
JavaScript
const { BoxGeometry, Matrix4, MeshPhongMaterial, Quaternion, Vector3 } = THREE;
|
|
const boxes = [];
|
|
|
|
export function delbox(name) {
|
|
const old = boxes[name];
|
|
if (old) {
|
|
old.groupTo.remove(old);
|
|
}
|
|
}
|
|
|
|
export function addbox(point, color, name, dim = {x:1,y:1,z:1,rz:0}, opt = {}) {
|
|
delbox(name);
|
|
|
|
const box = boxes[name] = new Mesh(
|
|
new BoxGeometry(dim.x, dim.y, dim.z),
|
|
new MeshPhongMaterial({
|
|
transparent: true,
|
|
opacity: opt.opacity || 0.5,
|
|
color
|
|
})
|
|
);
|
|
|
|
box.position.x = point.x;
|
|
box.position.y = point.y;
|
|
box.position.z = point.z;
|
|
|
|
lastBox = { point, dim };
|
|
|
|
const group = opt.group || space.scene
|
|
group.add(box);
|
|
box.groupTo = group;
|
|
|
|
if (dim.rz) {
|
|
opt.rotate = new Quaternion().setFromAxisAngle(new Vector3(0,0,1), dim.rz);
|
|
}
|
|
if (opt.rotate) {
|
|
opt.matrix = new Matrix4().makeRotationFromQuaternion(opt.rotate);
|
|
}
|
|
if (opt.matrix) {
|
|
box.geometry.applyMatrix4(opt.matrix);
|
|
}
|
|
|
|
return box;
|
|
}
|