You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
193 lines
5.4 KiB
JavaScript
193 lines
5.4 KiB
JavaScript
import { CubeRefractionMapping } from "./lib/three.module.js";
|
|
import { saveWorldList } from "./save.js";
|
|
|
|
var Header = function (
|
|
ui,
|
|
data,
|
|
cfg,
|
|
onSceneChanged,
|
|
onFrameChanged,
|
|
onObjectSelected,
|
|
onCameraChanged
|
|
) {
|
|
this.ui = ui;
|
|
this.data = data;
|
|
this.cfg = cfg;
|
|
this.boxUi = ui.querySelector("#box");
|
|
this.refObjUi = ui.querySelector("#ref-obj");
|
|
this.sceneSelectorUi = ui.querySelector("#scene-selector");
|
|
this.frameSelectorUi = ui.querySelector("#frame-selector");
|
|
this.objectSelectorUi = ui.querySelector("#object-selector");
|
|
this.cameraSelectorUi = ui.querySelector("#camera-selector");
|
|
this.changedMarkUi = ui.querySelector("#changed-mark");
|
|
|
|
this.onSceneChanged = onSceneChanged;
|
|
this.onFrameChanged = onFrameChanged;
|
|
this.onObjectSelected = onObjectSelected;
|
|
this.onCameraChanged = onCameraChanged;
|
|
|
|
if (cfg.disableSceneSelector) {
|
|
this.sceneSelectorUi.style.display = "none";
|
|
}
|
|
|
|
if (cfg.disableFrameSelector) {
|
|
this.frameSelectorUi.style.display = "none";
|
|
}
|
|
|
|
if (cfg.disableCameraSelector) {
|
|
this.cameraSelectorUi.style.display = "none";
|
|
}
|
|
|
|
// update scene selector ui
|
|
|
|
this.updateSceneList = function (sceneDescList) {
|
|
let scene_selector_str = "<option>场景</option>";
|
|
for (let scene in sceneDescList) {
|
|
if (data.sceneDescList[scene])
|
|
scene_selector_str +=
|
|
"<option value=" +
|
|
scene +
|
|
">" +
|
|
scene +
|
|
" - " +
|
|
data.sceneDescList[scene].scene +
|
|
"</option>";
|
|
else
|
|
scene_selector_str +=
|
|
"<option value=" + scene + ">" + scene + "</option>";
|
|
}
|
|
|
|
this.ui.querySelector("#scene-selector").innerHTML = scene_selector_str;
|
|
};
|
|
|
|
this.updateSceneList(this.data.sceneDescList);
|
|
|
|
this.ui.querySelector("#btn-reload-scene-list").onclick = (event) => {
|
|
let curentValue = this.sceneSelectorUi.value;
|
|
|
|
this.data.readSceneList().then((sceneDescList) => {
|
|
this.updateSceneList(sceneDescList);
|
|
this.sceneSelectorUi.value = curentValue;
|
|
});
|
|
};
|
|
|
|
this.sceneSelectorUi.onchange = (e) => {
|
|
this.onSceneChanged(e);
|
|
};
|
|
this.objectSelectorUi.onchange = (e) => {
|
|
this.onObjectSelected(e);
|
|
};
|
|
this.frameSelectorUi.onchange = (e) => {
|
|
this.onFrameChanged(e);
|
|
};
|
|
this.cameraSelectorUi.onchange = (e) => {
|
|
this.onCameraChanged(e);
|
|
};
|
|
|
|
this.setObject = function (id) {
|
|
this.objectSelectorUi.value = id;
|
|
};
|
|
|
|
this.clear_box_info = function () {
|
|
this.boxUi.innerHTML = "";
|
|
};
|
|
|
|
(this.update_box_info = function (box) {
|
|
var scale = box.scale;
|
|
var pos = box.position;
|
|
var rotation = box.rotation;
|
|
var points_number = box.world.lidar.get_box_points_number(box);
|
|
let distance = Math.sqrt(pos.x * pos.x + pos.y * pos.y).toFixed(2);
|
|
|
|
this.boxUi.innerHTML =
|
|
"<span>" +
|
|
box.obj_type +
|
|
"-" +
|
|
box.obj_track_id +
|
|
(box.annotator
|
|
? "</span> | <span title='annotator'>" + box.annotator
|
|
: "") +
|
|
"</span> | <span title='distance'>" +
|
|
distance +
|
|
"</span> | <span title='position'>" +
|
|
pos.x.toFixed(2) +
|
|
" " +
|
|
pos.y.toFixed(2) +
|
|
" " +
|
|
pos.z.toFixed(2) +
|
|
"</span> | <span title='scale'>" +
|
|
scale.x.toFixed(2) +
|
|
" " +
|
|
scale.y.toFixed(2) +
|
|
" " +
|
|
scale.z.toFixed(2) +
|
|
"</span> | <span title='rotation'>" +
|
|
((rotation.x * 180) / Math.PI).toFixed(2) +
|
|
" " +
|
|
((rotation.y * 180) / Math.PI).toFixed(2) +
|
|
" " +
|
|
((rotation.z * 180) / Math.PI).toFixed(2) +
|
|
"</span> | <span title = 'points'>" +
|
|
points_number +
|
|
"</span> ";
|
|
if (box.follows) {
|
|
this.boxUi.innerHTML += "| F:" + box.follows.obj_track_id;
|
|
}
|
|
}),
|
|
(this.set_ref_obj = function (marked_object) {
|
|
this.refObjUi.innerHTML =
|
|
"| Ref: " +
|
|
marked_object.scene +
|
|
"/" +
|
|
marked_object.frame +
|
|
": " +
|
|
marked_object.ann.obj_type +
|
|
"-" +
|
|
marked_object.ann.obj_id;
|
|
}),
|
|
(this.set_frame_info = function (scene, frame, on_scene_changed) {
|
|
if (this.sceneSelectorUi.value != scene) {
|
|
this.sceneSelectorUi.value = scene;
|
|
on_scene_changed(scene);
|
|
}
|
|
|
|
this.frameSelectorUi.value = frame;
|
|
}),
|
|
(this.clear_frame_info = function (scene, frame) {}),
|
|
(this.updateModifiedStatus = function () {
|
|
let frames = this.data.worldList.filter((w) => w.annotation.modified);
|
|
if (frames.length > 0) {
|
|
this.ui.querySelector("#changed-mark").className =
|
|
"ui-button alarm-mark";
|
|
} else {
|
|
this.ui.querySelector("#changed-mark").className = "ui-button";
|
|
}
|
|
});
|
|
|
|
this.ui.querySelector("#changed-mark").onmouseenter = () => {
|
|
let items = "";
|
|
let frames = this.data.worldList
|
|
.filter((w) => w.annotation.modified)
|
|
.map((w) => w.frameInfo);
|
|
frames.forEach((f) => {
|
|
items += "<div class='modified-world-item'>" + f.frame + "</div>";
|
|
});
|
|
|
|
if (frames.length > 0) {
|
|
this.ui.querySelector("#changed-world-list").innerHTML = items;
|
|
this.ui.querySelector("#changed-world-list-wrapper").style.display =
|
|
"inherit";
|
|
}
|
|
};
|
|
|
|
this.ui.querySelector("#changed-mark").onmouseleave = () => {
|
|
this.ui.querySelector("#changed-world-list-wrapper").style.display = "none";
|
|
};
|
|
|
|
this.ui.querySelector("#save-button").onclick = () => {
|
|
saveWorldList(this.data.worldList);
|
|
};
|
|
};
|
|
|
|
export { Header };
|