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.
249 lines
7.2 KiB
JavaScript
249 lines
7.2 KiB
JavaScript
import { CubeRefractionMapping } from "./lib/three.module.js";
|
|
import { saveWorldList } from "./save.js";
|
|
import http from "./http.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="${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) => {
|
|
let obj = {}
|
|
if(sceneDescList.code === 200){
|
|
sceneDescList.data.forEach(item=>{
|
|
obj[item.sceneName] = item.sceneId
|
|
})
|
|
}
|
|
this.updateSceneList(obj);
|
|
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);
|
|
};
|
|
this.ui.querySelector("#save-submit").onclick = () => {
|
|
let confirm = window.confirm("确认提交?")
|
|
const microData = window.microApp.getData()
|
|
if(confirm){
|
|
var xhr = new XMLHttpRequest();
|
|
xhr.onreadystatechange = function(){
|
|
if (this.status == 200){
|
|
console.log('提交成功')
|
|
window.microApp.dispatch({ type: 'pointCloudBack', time: new Date() })
|
|
}
|
|
}
|
|
xhr.open(
|
|
"POST",
|
|
`${http.requestHttp}/project/label`,
|
|
true
|
|
);
|
|
xhr.setRequestHeader('Content-Type', 'application/json');
|
|
xhr.setRequestHeader('authorization', http.token);
|
|
xhr.send(JSON.stringify({
|
|
dataId:microData.dataId,
|
|
type:1,
|
|
label:'',
|
|
taskId:microData.taskId,
|
|
}));
|
|
}
|
|
};
|
|
// 通过
|
|
this.ui.querySelector("#save-pass").onclick = () => {
|
|
qc(1)
|
|
};
|
|
// 打回
|
|
this.ui.querySelector("#save-reject").onclick = () => {
|
|
qc(0)
|
|
};
|
|
function qc(type){
|
|
const microData = window.microApp.getData()
|
|
var xhr = new XMLHttpRequest();
|
|
xhr.onreadystatechange = function(){
|
|
if (this.status == 200){
|
|
window.microApp.dispatch({ type: 'pointCloudBack', time: new Date() })
|
|
}
|
|
}
|
|
xhr.open(
|
|
"POST",
|
|
`${http.requestHttp}/project/qc?dataId=${microData.dataId}&type=${type}&taskId=${microData.taskId}`,
|
|
true
|
|
);
|
|
xhr.setRequestHeader('Content-Type', 'application/json');
|
|
xhr.setRequestHeader('authorization', http.token);
|
|
xhr.send();
|
|
}
|
|
this.ui.querySelector("#back").onclick = () => {
|
|
window.microApp.dispatch({ type: 'pointCloudBack', time: new Date() })
|
|
};
|
|
};
|
|
|
|
export { Header };
|