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.

156 lines
5.5 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>--scene--</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}