You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

1022 lines
41 KiB

/* [radar_speed_share.js] Sections:
Initialization for shared variables
Radar View init
Radar tab UI
Draw radar points
Draw FoV section
Radar tab ruler ( a113n )
Unit functions
*/
// =======================================================================
// Initialization for shared variables
var radarViewWidth = 800;
var radarViewHeight = 600;
var json_world_camera_height;
var json_world_camera_degree;
var json_distance_format;
var json_distance_meter;
var json_world_radar_height;
var json_world_camera_distance;
var json_trial_life_time;
var json_radar_section_degree;
var json_camera_ip;
var json_camera_port;
var json_camera_username;
var json_camera_password;
var json_world_radar_height;
var json_target_x_axis;
var json_target_y_axis;
var json_radar_x_axis;
var json_radar_y_axis;
var json_calibration_radar;
var show_v1_radar = 1;
var show_v2_radar = 1;
var show_v3_radar = 1;
var radar_line = null;
var radar_circle = null;
var circle_radar = null;
var ruler_x_sign = null;
var ruler_y_sign = null;
var section_line1 = null;
var ptz_line
var circle_ptz;
// var ptz_degree_tmp = 0;
// var ptz_degree_offset = 0;
var speedThreshold = 0.1;
var canvasTripwire_radar;
var canvasTripwire_radarPTZ;
var canvasTripwire_speed;
var canvasTripwire_speedCamera;
var rulerRadar = null;
var rulerSpeed = null;
var radarShowImgInterval = "";
var speedShowImgInterval = "";
var g_getPtzImg = null;
var g_getCameraImg = null;
var enalbe_radar_xy_sync = 0;
// =======================================================================
// Radar View init
function func_getRadarData() {
$.ajax({
url: "/getradar",
type: "GET",
async: false,
beforeSend: function (xmlHttp) {
xmlHttp.setRequestHeader("If-Modified-Since", "0");
xmlHttp.setRequestHeader("Cache-Control", "no-cache");
//xmlHttp.setRequestHeader("Authorization", "Basic " + btoa("username:password"));
},
success: function (retdata) {
var jsonbuf = JSON.parse(retdata);
json_distance_format = jsonbuf["distance_format"];
json_distance_meter = jsonbuf["distance_meter"];
json_world_radar_height = jsonbuf["world_radar_height"];
json_trial_life_time = jsonbuf["trial_life_time"];
json_radar_section_degree = jsonbuf["radar_section_degree"];
json_target_x_axis = jsonbuf["target_x_axis"];
json_target_y_axis = jsonbuf["target_y_axis"];
json_radar_x_axis = jsonbuf["radar_x_axis"];
json_radar_y_axis = jsonbuf["radar_y_axis"];
json_calibration_radar = jsonbuf["calibration_radar"];
var jsoncamera = jsonbuf["camera"];
json_world_camera_height = jsoncamera["world_camera_height"];
json_world_camera_degree = jsoncamera["world_camera_degree"];
json_world_camera_distance = jsoncamera["world_camera_distance"];
json_camera_ip = jsoncamera["camera_ip"];
json_camera_port = jsoncamera["camera_port"];
json_camera_username = jsoncamera["camera_username"];
json_camera_password = jsoncamera["camera_password"];
// console.log(" sucess log radar data radar x,y", json_radar_x_axis, json_radar_y_axis, "target x,y", json_target_x_axis, json_target_y_axis);
},
error: function (retdata) {
console.warn(retdata);
}
});
}
function func_getradarjson() {//local storage for radar.html UI setting, need revise leo 10-12
$.ajax({
url: "/getradar",
type: "GET",
async: false,
beforeSend: function (xmlHttp) {
xmlHttp.setRequestHeader("If-Modified-Since", "0");
xmlHttp.setRequestHeader("Cache-Control", "no-cache");
//xmlHttp.setRequestHeader("Authorization", "Basic " + btoa("username:password"));
},
success: function (retdata) {
var jsonbuf = JSON.parse(retdata);
var jsoncamera = jsonbuf["camera"];
localStorage.setItem('world_camera_height', jsoncamera["world_camera_height"]);
localStorage.setItem("world_camera_degree", jsoncamera["world_camera_degree"]);
localStorage.setItem("distance_format", jsonbuf["distance_format"]);
localStorage.setItem("distance_meter", jsonbuf["distance_meter"]);
localStorage.setItem("world_radar_height", jsonbuf["world_radar_height"]);
localStorage.setItem("world_camera_distance", jsoncamera["world_camera_distance"]);
localStorage.setItem("trial_life_time", jsonbuf["trial_life_time"]);
localStorage.setItem("radar_section_degree", jsonbuf["radar_section_degree"]);
localStorage.setItem("camera_ip", jsoncamera["camera_ip"]);
localStorage.setItem("camera_port", jsoncamera["camera_port"]);
localStorage.setItem("camera_username", jsoncamera["camera_username"]);
localStorage.setItem("camera_password", jsoncamera["camera_password"]);
localStorage.setItem("world_radar_height", jsonbuf["world_radar_height"]);
localStorage.setItem("target_x_axis", jsonbuf["target_x_axis"]);
localStorage.setItem("target_y_axis", jsonbuf["target_y_axis"]);
localStorage.setItem("radar_x_axis", jsonbuf["radar_x_axis"]);
localStorage.setItem("radar_y_axis", jsonbuf["radar_y_axis"]);
localStorage.setItem("calibration_radar", jsonbuf["calibration_radar"]);
localStorage.setItem("enable_ptz", jsonbuf["enable_camera"]);
localStorage.setItem("enable_ip_setting", jsoncamera["ip_setting"]);
console.log('jsoncamera["ip_setting"]:', jsoncamera["ip_setting"]);
},
error: function (retdata) {
console.warn(retdata);
}
});
}
function createCanvas(canvasVar, canvasName) {
console.log("[radar_speed_share.js] createCanvas() - canvasName: '" + canvasName + "'");
canvasVar = new fabric.Canvas('CanvasTripwire_' + canvasName, {
height: radarViewHeight, // window.innerHeight
width: radarViewWidth // window.innerWidth
});
canvasVar.requestRenderAll();
return canvasVar;
}
// =======================================================================
// Radar tab UI
function change_show_radar_button_color() {
if (show_v1_radar == 1) {
btn_bg_border_color =
//document.getElementById("radar_v1").style.background = "#6c87d4";
document.getElementById("radar_v1").style.background = "#373d40";
//document.getElementById("radar_v1").style.borderColor = "#6c87d4";
document.getElementById("radar_v1").style.borderColor = "#373d40";
document.getElementById("radar_v1").style.color = "white";
} else {
document.getElementById("radar_v1").style.background = "#BABABA";
document.getElementById("radar_v1").style.borderColor = "#BABABA";
document.getElementById("radar_v1").style.color = "black";
}
if (show_v2_radar == 1) {
//document.getElementById("radar_v2").style.background = "#6c87d4";
document.getElementById("radar_v2").style.background = "#ffa321";
//document.getElementById("radar_v2").style.borderColor = "#6c87d4";
document.getElementById("radar_v2").style.borderColor = "#ffa321";
document.getElementById("radar_v2").style.color = "white";
//document.getElementById("radar_v2").style.color = "yellow";
} else {
document.getElementById("radar_v2").style.background = "#BABABA";
document.getElementById("radar_v2").style.borderColor = "#BABABA";
document.getElementById("radar_v2").style.color = "black";
}
if (show_v3_radar == 1) {
//document.getElementById("radar_v3").style.background = "#6c87d4";
document.getElementById("radar_v3").style.background = "#1445f7";
//document.getElementById("radar_v3").style.borderColor = "#6c87d4";
document.getElementById("radar_v3").style.borderColor = "#1445f7";
document.getElementById("radar_v3").style.color = "white";
//document.getElementById("radar_v3").style.color = "blue";
} else {
document.getElementById("radar_v3").style.background = "#BABABA";
document.getElementById("radar_v3").style.borderColor = "#BABABA";
document.getElementById("radar_v3").style.color = "black";
}
if (show_v1_radar == 1 && show_v2_radar == 1 && show_v3_radar == 1) {
document.getElementById("radar_vall").style.background = "#6c87d4";
document.getElementById("radar_vall").style.borderColor = "#6c87d4";
document.getElementById("radar_vall").style.color = "white";
} else {
document.getElementById("radar_vall").style.background = "#BABABA";
document.getElementById("radar_vall").style.borderColor = "#BABABA";
document.getElementById("radar_vall").style.color = "black";
}
}
function func_show_radar_point(btn) {
var show = btn.value;
if (show == 'V1') {
if (show_v1_radar == 0) {
show_v1_radar = 1;
} else {
show_v1_radar = 0;
}
}
if (show == "V2") {
if (show_v2_radar == 0) {
show_v2_radar = 1;
} else {
show_v2_radar = 0;
}
}
if (show == "V3") {
if (show_v3_radar == 0) {
show_v3_radar = 1;
} else {
show_v3_radar = 0;
}
}
if (show == 'All') {
if (show_v1_radar == 0 || show_v2_radar == 0 || show_v3_radar == 0) {
show_v1_radar = 1;
show_v2_radar = 1;
show_v3_radar = 1;
} else {
show_v1_radar = 0;
show_v2_radar = 0;
show_v3_radar = 0;
}
}
change_show_radar_button_color();
}
// =======================================================================
// Draw radar points
function func_drawRadarPoint(interval, canvas, tab) {
// console.log("[radar_speed_share.js] func_drawRadarPoint() - canvasName: '" + tab + "'");
clearInterval(interval);
interval = setInterval(function drawRadarDot() {
if (canvas.getObjects().indexOf(circle_ptz) == -1) {
RefreshradarDot(6, canvas);
if (tab === "speed") {
// RefreshradarDot_PTZ(0); // Merge issue
}
} else {
if (tab === "radar") {
RefreshradarDot(8, canvas);
canvas.remove(ptz_line);
console.log("ptz_degree_tmp", parseInt(localStorage.getItem("ptz_degree_tmp")));
// ptz_degree_tmp = radar_json.ptz_degree;
var r = 50;
var theta;
theta = parseInt(localStorage.getItem("ptz_degree_tmp"));
console.log("theta", theta);
ptz_line.set({ 'x1': circle_ptz.left + circle_ptz.radius, 'y1': circle_ptz.top + circle_ptz.radius });
ptz_line.set({ 'x2': circle_ptz.left + circle_ptz.radius - r * Math.cos(theta * Math.PI / 180), 'y2': circle_ptz.top + circle_ptz.radius - r * Math.sin(theta * Math.PI / 180) });
canvas.add(ptz_line);
} else {
// Ken issue
// speed tab
RefreshradarDot(7, canvas);
// RefreshradarDot_PTZ(0);
}
}
var d = new Date();
// console.log(d);
var getTime_tmp = d.getTime();
// console.log("getTime_tmp", getTime_tmp);
for (var key in trial_array) {
var rpi = trial_array[key]; // radar point info
var t = rpi.Type;
var x = rpi.world_radar_x;
var y = rpi.world_radar_y;
var csX = rpi.csX;
var csY = rpi.csY;
var c = rpi.C;
var pointColor = func_getPointColor(json_trial_life_time, t, c);
var textWidth = 50;
var textHeight = 50;
var text = "";
//console.log(key, t, x, y, c);
// Issue : =====================
// draw
// need add V1,V2,V3 show button
// draw radar dot & text
// =============================
if (t == 1 && show_v1_radar) {
radar_dot = makedot(
x,
y,
pointColor,
Math.round(
(c / json_trial_life_time) * 5
)
);
canvas.add(radar_dot);
if (c == json_trial_life_time)
text = "FN: " + rpi.FrameNum +
" V1 (" + parseInt(x) + "," + parseInt(y) + ")," +
" Pos (" + parseFloat(rpi.PosX).toFixed(1) + "," + parseFloat(rpi.PosY).toFixed(1) + "," + parseFloat(rpi.PosZ).toFixed(1) + ")";
canvas.add(
insertTextLabel_Color(
x + (radar_dot.radius * 2),
y + (radar_dot.radius * 2),
textWidth,
textHeight,
text,
pointColor
)
);
// canvas.add(insertTextLabel_Color(x + (radar_dot.radius * 2), y + (radar_dot.radius * 2), 50, 50, "FN: " + rpi.FrameNum + " V1 (" + parseInt(x) + "," + parseInt(y) + "), Pos (" + parseFloat(rpi.PosX).toFixed(1) + "," + parseFloat(rpi.PosY).toFixed(1) + "," + parseFloat(rpi.PosZ).toFixed(1) + "), json(" + parseInt(rpi.json_world_radar_x) + "," + parseInt(rpi.json_world_radar_y) + ")", pointColor));
} else if (t == 2 && show_v2_radar) {
radar_dot = makedot( x, y, pointColor, 5);
canvas.add(radar_dot);
if (c == json_trial_life_time) {
canvas.add(
makerect(
x,
y,
csX,
csY
)
);
text = "FN: " + rpi.FrameNum +
" [DEBUG] V2 (" + parseInt(x) + "," + parseInt(y) + ")," +
"Pos (" + parseFloat(rpi.PosX).toFixed(1) + "," + parseFloat(rpi.PosY).toFixed(1) + ")";
canvas.add(
insertTextLabel_Color(
x + (radar_dot.radius * 2),
y + (radar_dot.radius * 2),
textWidth,
textHeight,
text,
pointColor
)
);
// canvas.add(insertTextLabel_Color(x + (radar_dot.radius * 2), y + (radar_dot.radius * 2), 50, 50, "FN: " + rpi.FrameNum + " [DEBUG] V2 (" + parseInt(x) + "," + parseInt(y) + "), Pos (" + parseFloat(rpi.PosX).toFixed(1) + "," + parseFloat(rpi.PosY).toFixed(1) + "), json(" + parseInt(rpi.json_world_radar_x) + "," + parseInt(rpi.json_world_radar_y) + ")", pointColor));
}
} else if (t == 3 && show_v3_radar && Math.abs(rpi.Speed) > speedThreshold) {
radar_dot = makedot(
x,
y,
pointColor,
10
);
canvas.add(radar_dot);
if (c == json_trial_life_time)
if (localStorage.getItem("speed_unit") == "MPH") { // KPH to MPH
console.log("KPH : ", rpi.Speed);
rpi.Speed = Math.round(rpi.Speed * 0.6213712 * 10) / 10
console.log("MPH : ", rpi.Speed);
console.log("-----------------");
}
text = "FN: " + rpi.FrameNum +
" V3 (" + parseInt(x) + "," + parseInt(y) + ")," +
" Pos (" + parseFloat(rpi.PosX).toFixed(1) + "," + parseFloat(rpi.PosY).toFixed(1) + ")," +
" Speed: " + parseFloat(rpi.Speed).toFixed(1);
canvas.add(
insertTextLabel_Color(
x + (radar_dot.radius * 2),
y + (radar_dot.radius * 2),
textWidth,
textHeight,
text,
pointColor
)
);
// canvas.add(insertTextLabel_Color(x + (radar_dot.radius * 2), y + (radar_dot.radius * 2), 50, 50, "FN: " + rpi.FrameNum + " V3 (" + parseInt(x) + "," + parseInt(y) + "), Pos (" + parseFloat(rpi.PosX).toFixed(1) + "," + parseFloat(rpi.PosY).toFixed(1) + ") Speed: " + parseFloat(rpi.Speed).toFixed(1) + " , json(" + parseInt(rpi.json_world_radar_x) + "," + parseInt(rpi.json_world_radar_y) + ")", color_tmp));
}
//C-1
// var tmp_int = 128;
// console.log("HEX",tmp_int.toString(16));
//C-1
// console.log("pointColor", pointColor);
// c = c - 1;
// console.log("json_trial_life_time", json_trial_life_time, "getTime_tmp", getTime_tmp, "rpi.time", rpi.time);
// console.log((json_trial_life_time * 1000) - (getTime_tmp - rpi.time));
rpi.C = Math.round(((json_trial_life_time * 1000) - (getTime_tmp - rpi.time)) / 1000);
// console.log("c", c);
//console.log(key, x, y, c);
if (c < json_trial_life_time && t == 2) {
delete trial_array[key];
} else if (c <= 0) {
delete trial_array[key];
}
}
// console.log("getTime_tmp", getTime_tmp, "trial_array", trial_array);
}, 50);
}
function func_getPointColor(trial_life_time, point_type, c) {
var a; // alpha
var color = '#'; // HTML color index in hex
if (trial_life_time == 0) {
a = Math.round(((c + 0.9) / (trial_life_time + 0.9)) * 256) - 1;
} else {
a = Math.round(((c) / (trial_life_time)) * 256) - 1;
}
if (a > 255)
a = 255;
if (a < 0)
a = 0;
if (point_type == 3) {
color += '6c87d4'; // V3 color
} else if (point_type == 2) {
color += 'fd9600'; // V2 color
} else {
color += '5c5c5c'; // V1 color
}
return color + a.toString(16);
}
// =======================================================================
// Draw FoV section
function func_drawRadarSection(tab) {
// console.log("[radar_speed_share.js] func_drawRadarSection() - tab : '" + tab + "'");
// var radar_line = makeLine([395, 555, 395, 100]);
radar_line = makeLine([json_radar_x_axis, json_radar_y_axis, json_target_x_axis, json_target_y_axis]);
radar_circle = makeCircle(json_target_x_axis, json_target_y_axis, radar_line, 'gray', 12);
radar_circle.name = "radar_circle";
circle_radar = makeCircle(json_radar_x_axis, json_radar_y_axis, radar_line, 'red', 12);
circle_radar.name = "circle_radar";
// circle_radar = new fabric.Circle({
// radius: 20, fill: 'red', left: 380, top: 550, selectable: false,
// })
//ruler sign
ruler_x_sign = makeTriangle(100, 10, 'red', 20, 0);
ruler_x_sign.name = "ruler_x_sign";
ruler_y_sign = makeTriangle(20, 100, 'red', 20, 90);
ruler_y_sign.name = "ruler_y_sign";
//draw section//
section_line1 = new fabric.Path('M 100 200 Q 400, 50, 700, 200 L 400 550 L 100 200 z', { fill: '#f5f5f580', stroke: 'black', strokeWidth: 5, objectCaching: false, selectable: false, evented: false });
// var section_line1 = new fabric.Path('M 100 200', { fill: '', stroke: 'black', strokeWidth: 5, objectCaching: false, selectable: false });
//console.log("radar x,y", json_radar_x_axis, json_radar_y_axis, "target x,y", json_target_x_axis, json_target_y_axis);
// #6c87d4 opacity: 1
// var section_line1 = new fabric.Path('M 400 550 L 100 200 z', { fill: '', stroke: 'yellow', objectCaching: false, selectable: false });
// var section_line2 = new fabric.Path('M 400 550 L 700, 200 z', { fill: '', stroke: 'yellow', objectCaching: false, selectable: false });
// var section_line3 = new fabric.Path('M 100 200 Q 400, 50, 700, 200 z', { fill: '', stroke: 'yellow', objectCaching: false, selectable: false });
section_line1.path[2][1] = json_radar_x_axis;//localStorage.getItem("radar_x_axis");
section_line1.path[2][2] = json_radar_y_axis;//localStorage.getItem("radar_y_axis");
section_line1.path[1][1] = json_target_x_axis;//localStorage.getItem("target_x_axis");
section_line1.path[1][2] = json_target_y_axis;//localStorage.getItem("target_y_axis");
// console.log("ab_len:" + ab_len);
var theta = json_radar_section_degree;
var c_x = (Math.cos((-theta / 2) * Math.PI / 180) * (json_target_x_axis - json_radar_x_axis) - Math.sin((-theta / 2) * Math.PI / 180) * (json_target_y_axis - json_radar_y_axis)) + json_radar_x_axis;
var c_y = (Math.sin((-theta / 2) * Math.PI / 180) * (json_target_x_axis - json_radar_x_axis) + Math.cos((-theta / 2) * Math.PI / 180) * (json_target_y_axis - json_radar_y_axis)) + json_radar_y_axis;
//console.log("c_x,c_y:" + c_x + c_y);
section_line1.path[0][1] = c_x;
section_line1.path[0][2] = c_y;
section_line1.path[3][1] = c_x;
section_line1.path[3][2] = c_y;
var d_x = (Math.cos((theta / 2) * Math.PI / 180) * (json_target_x_axis - json_radar_x_axis) - Math.sin((theta / 2) * Math.PI / 180) * (json_target_y_axis - json_radar_y_axis)) + json_radar_x_axis;
var d_y = (Math.sin((theta / 2) * Math.PI / 180) * (json_target_x_axis - json_radar_x_axis) + Math.cos((theta / 2) * Math.PI / 180) * (json_target_y_axis - json_radar_y_axis)) + json_radar_y_axis;
//console.log("d_x,d_y:" + d_x + d_y);
section_line1.path[1][3] = d_x;
section_line1.path[1][4] = d_y;
radar_line.set({ 'x1': json_radar_x_axis, 'y1': json_radar_y_axis, 'x2': json_target_x_axis, 'y2': json_target_y_axis });
circle_radar.set({ 'left': json_radar_x_axis - 12, 'top': json_radar_y_axis - 14 });
radar_circle.set({ 'left': json_target_x_axis - 12, 'top': json_target_y_axis - 14 });
if (tab === "radar") {
ptz_line = new fabric.Line([100, 300, 150, 300], {
fill: '#ff1493',
stroke: '#ff1493',
strokeWidth: 5,
selectable: false,
evented: false,
});
ptz_line.name = "ptz_line";
// ptz_line = AddArrowObject(100, 300, 150, 300);
circle_ptz;
circle_ptz = makeCircle(ptz_line.get('x1') - 18, ptz_line.get('y1') - 20, ptz_line, 'yellow', 20);
circle_ptz.name = "circle_ptz";
circle_ptz.hasControls = circle_ptz.hasBorders = false;
}
}
// =======================================================================
// Ruler ( a113n )
function enable_xy_sync(e){
//$('#slider_distance_y').slider('setValue', 100);
//if ($('#enable_ptz').is(":checked")) {
if (e.checked) {
enalbe_radar_xy_sync = 1;
}
else {
enalbe_radar_xy_sync = 0;
}
if (enalbe_radar_xy_sync == 1) {
var distance_meter_x = document.getElementById("slider_distance").value;
$('#slider_distance_y').slider('setValue', distance_meter_x);
}
}
function set_ruler(rulerVar, tab) {
// console.log("[radar_speed_share.js] set_ruler() tab:", tab);
// console.log(document.getElementById("ruler_wrapper_" + tab));
rulerVar = new ruler({
container: document.getElementById("ruler_wrapper_" + tab), // reference to DOM element to apply rulers on
rulerHeight: 30, // thickness of ruler
fontFamily: 'arial',// font for points
fontSize: '15px',
strokeStyle: 'black',
lineWidth: 1,
enableMouseTracking: true,
enableToolTip: true
});
return rulerVar;
}
function rescale_ruler(rulerVar) {
var scale_factor = cal_ruler_scale();
//console.log("[rescale_ruler]" + document.getElementById("distance_format").value);
if (scale_factor > 0) {
rulerVar.api.setScale(scale_factor);
//rulerVar.api.setScale(scale_factor); //15=0.01875
}
else // some error msg maybe?
{
console.log("scale_factor is less than zero.");
rulerVar.api.setScale(1);
}
//draw section
rulerVar.api.setPos({ x: circle_radar.left - (circle_radar.radius / 2) - 12, y: circle_radar.top - (circle_radar.radius / 2) - 14 });
ruler_x_sign.set({ 'left': circle_radar.left + (circle_radar.radius / 2) + (ruler_x_sign.width / 2) - 14, 'top': 10 });
ruler_y_sign.set({ 'left': 20, 'top': circle_radar.top + (circle_radar.radius / 2) + (ruler_y_sign.width / 2) - 16 });
console.log("rescale_ruler()");
}
function cal_ruler_scale() {
var scale_factor = 1;
var distance = document.getElementById("slider_distance").value;
// if (document.getElementById("distance_format").value == "meter") {
if (localStorage.getItem("distance_format") == "meter") {
scale_factor = (distance / 150) * 0.1875; // 150/800 = 0.1875
}
// else if (document.getElementById("distance_format").value == "feet") {
else if (localStorage.getItem("distance_format") == "feet") {
scale_factor = (distance / 500) * 0.625; // 500/800 = 0.625
}
else {
scale_factor = -1;
}
return scale_factor;
}
function sent_ruler_scale_value() {
//Mark at 20230110 Steven
/*
// $("#IFRAME_RADAR").prop("scrolling", "no");
var delta = e.e.deltaY;
console.log("e:", e);
console.log("delta:", delta);
// var zoom = canvas.getZoom();
// var zoom;
// zoom = 0.999 ** delta;
// if (zoom > 20) zoom = 20;
// if (zoom < 0.01) zoom = 0.01;
// console.log("zoom:", zoom);
if (delta > 0) {
// console.log("document.getElementById(slider_distance).value:", parseInt(document.getElementById("slider_distance").value) + 5);
$('#slider_distance').slider('setValue', parseInt(document.getElementById("slider_distance").value) + 5);
} else if (delta < 0) {
// console.log("document.getElementById(slider_distance).value:", document.getElementById("slider_distance").value - 5);
$('#slider_distance').slider('setValue', document.getElementById("slider_distance").value - 5);
}
// canvas.setZoom(zoom);
// opt.e.preventDefault();
// opt.e.stopPropagation();
// $("#IFRAME_RADAR").prop("scrolling", "yes");
*/
rescale_ruler(rulerRadar);
func_setelement("distance_meter", document.getElementById("slider_distance").value);
func_setelement("distance_meter_y", document.getElementById("slider_distance_y").value);
}
// =======================================================================
// Unit functions
function insertTextLabel_Color(r_left, r_top, r_width, r_height, showtext, fill_color) {
var textcontent;
if ((r_left != null) && (r_top != null) && (r_width != null) && (r_height != null)) {
textcontent = new fabric.Text(showtext, {
left: r_left,
top: r_top,
width: r_width,
height: r_height,
fontFamily: 'helvetica',// 字型
fontSize: 15, // 字体大小
fontWeight: '',// 字体粗细
// shadow: { color: 'black', blur: 5 },
fill: fill_color
});
}
else {
textcontent = new fabric.Text(showtext, {
left: 50,
top: 50,
width: 50,
height: 50,
fontFamily: 'helvetica',// 字型
fontSize: 15, // 字体大小
fontWeight: '',// 字体粗细
// shadow: { color: 'black', blur: 5 },
fill: fill_color
});
}
textcontent.setControlsVisibility({
bl: true,
br: true,
tl: true,
tr: true,
mt: true,
mb: true,
ml: true,
mr: true,
});
disabelIteraction(textcontent);
return textcontent;
}
function makeCircle(left, top, radar_line, color) {
var c = new fabric.Circle({
left: left - 12,
top: top - 12,
strokeWidth: 2,
radius: 12,
fill: color,
stroke: '#FFFFFF'
});
c.hasControls = c.hasBorders = false;
c.radar_line = radar_line;
return c;
}
function makeTriangle(left, top, color, radius, angle) {
var c = new fabric.Triangle({
left: left,
top: top,
width: radius,
height: radius,
fill: color,
stroke: '#FFFFFF',
angle: angle
});
c.hasControls = c.hasBorders = false;
return c;
}
function makeLine(coords) {
return new fabric.Line(coords, {
fill: 'red',
stroke: 'red',
strokeWidth: 5,
selectable: false,
evented: false
});
}
function makedot(left, top, color, radius) {
var c = new fabric.Circle({
left: left - radius,
top: top - radius,
strokeWidth: 2,
radius: radius,
fill: color,
stroke: '#FFFFFF',
evented: false
});
c.hasControls = c.hasBorders = false;
return c;
}
function makerect(left, top, width, height) {
var c = new fabric.Rect({
top: parseInt(top - (Math.abs(height) / 2)),
left: parseInt(left - (Math.abs(width) / 2)),
width: parseInt(Math.abs(width)),
height: parseInt(Math.abs(height)),
strokeWidth: 2,
fill: '#00960000',//fd960000
stroke: '#009600',//fd9600
evented: false
});
c.hasControls = c.hasBorders = false;
return c;
}
function RefreshradarDot(protected_objects, canvas) {
while (canvas.getObjects().length > protected_objects) {
var items = canvas.getObjects();
if (items[canvas.getObjects().length - 1]) {
canvas.remove(items[canvas.getObjects().length - 1]);
}
}
}
// Merge issue
// function RefreshradarDot_PTZ(protected_objects) {
// while (canvasTripwire_speedCamera.getObjects().length > protected_objects) {
// var items = canvasTripwire_speedCamera.getObjects();
// if (items[canvasTripwire_speedCamera.getObjects().length - 1]) {
// canvasTripwire_speedCamera.remove(items[canvasTripwire_speedCamera.getObjects().length - 1]);
// }
// }
// }
// 2022-12-29 Merge issue : multible defined in all .js
function disabelIteraction(element) {
//https://github.com/fabricjs/fabric.js/wiki/Preventing-object-modification
element.lockMovementX = true; //Prevents horizontal movement
element.lockMovementY = true; //Prevents vertical movement
element.lockScalingX = true; //Prevents horizontal scaling
element.lockScalingY = true; //Prevents vertical scaling
element.lockUniScaling = true; //Prevents scaling in either X or Y direction but not in both. In other words, prevents non-proportional scaling of an object.
element.lockRotation = true; //Prevents rotation
element.selectable = false;
element.evented = false;
}
function func_getRadarInfo(tab, canvas, imgInterval) {
// 原 func_getradarinfo()
console.log("[radar_speed_share.js] func_getRadarInfo() TAB: ", tab);
$('#trial_life_time').val(localStorage.getItem("trial_life_time"));
$('#radar_height').val(localStorage.getItem("world_radar_height"));
$('#distance_format').val(localStorage.getItem("distance_format"));
$('#ptz_height').val(localStorage.getItem("world_camera_height"));
$('#slider_distance').slider('setValue', localStorage.getItem("distance_meter"));
$('#ptz_degree').slider('setValue', localStorage.getItem("world_camera_degree"));
document.getElementById("TEXT_DISTANCE_FORMAT1").innerHTML = TEXT_DISTANCE_FORMAT;
document.getElementById("TEXT_DISTANCE_FORMAT2").innerHTML = TEXT_DISTANCE_FORMAT;
if (tab == "radar") {
document.getElementById("TEXT_DISTANCE_FORMAT3").innerHTML = TEXT_DISTANCE_FORMAT;
}
$('#world_radar_degree').val(localStorage.getItem("world_radar_degree"));
if (tab == "radar") {
$('#radar_section_degree').val(localStorage.getItem("radar_section_degree"));
}
$('#camera_ip').val(localStorage.getItem("camera_ip"));
$('#camera_port').val(localStorage.getItem("camera_port"));
$('#camera_username').val(localStorage.getItem("camera_username"));
$('#camera_password').val(localStorage.getItem("camera_password"));
document.getElementById("calibration_radar").checked = true;
enable_calibration_radar_temp = "Yes";
// 11-16 memory enable ptz & ip setting
// console.log("localStorage.getItem(enable_ptz)",localStorage.getItem("enable_ptz"));
if(localStorage.getItem("enable_ptz") == "true")
{
document.getElementById("enable_ptz").checked = true;
enable_ptz_temp = "Yes";
document.getElementById("ptz_view").style.display = "block";
document.getElementById("radar_view").style.width = "50%";
document.getElementById("radar_settings").style.width = "25%";
document.getElementById("radar_settings2").style.width = "25%";
document.getElementById("ptz_setting_block").style.display = "block";
document.getElementById("ptz_setting_block2").style.display = "block";
document.getElementById("radar_settings0").style.display = "none";
// console.log("set .getItem(enable_ptz) YES",localStorage.getItem("enable_ptz"));
}else{
document.getElementById("enable_ptz").checked = false;
enable_ptz_temp = "No";
document.getElementById("ptz_view").style.display = "none";
document.getElementById("radar_view").style.width = "100%";
document.getElementById("radar_settings").style.width = "25%";
document.getElementById("radar_settings2").style.width = "25%";
document.getElementById("ptz_setting_block").style.display = "none";
document.getElementById("ptz_setting_block2").style.display = "none";
document.getElementById("radar_settings0").style.display = "block";
// console.log("set .getItem(enable_ptz) NO",localStorage.getItem("enable_ptz"));
}
// console.log("localStorage.getItem(ip_setting)",localStorage.getItem("enable_ip_setting"));
if(localStorage.getItem("enable_ip_setting") == "true"){
// console.log("set .getItem(enable_ip_setting) YES",localStorage.getItem("enable_ip_setting"));
enable_ip_setting_temp = "true";
localStorage.setItem("enable_ip_setting", "true");
document.getElementById("enable_ip_setting").checked = true;
// var ip = document.getElementById("camera_ip").value;
// var user = document.getElementById("camera_username").value;
// var pwd = document.getElementById("camera_password").value;
// if (tab === "radar") {
// showPTZimage(ip, user, pwd);
// } else if (tab === "speed") {
// showCameraImage(ip, user, pwd);
// }
canvas, imgInterval = showRGBimage(
canvas,
imgInterval,
document.getElementById("camera_ip").value, // remoteIP
document.getElementById("camera_username").value, // account
document.getElementById("camera_password").value // password
);
}
else {
enable_ip_setting_temp = "false";
localStorage.setItem("enable_ip_setting", "false");
document.getElementById("enable_ip_setting").checked = false;
// if (tab === "radar") {
// clearInterval(g_getPtzImg);
// } else if (tab === "speed") {
// clearInterval(g_getCameraImg);
// }
clearInterval(imgInterval);
var canvasSuffix = "";
if (tab === "radar") {
canvasSuffix = "radarPTZ";
} else if (tab === "speed") {
canvasSuffix = "speedCamera";
}
// console.log("canvasSuffix:", canvasSuffix);
var cxt = document.getElementById("CanvasTripwire_" + canvasSuffix).getContext("2d");
cxt.clearRect(0,0,canvas.width,canvas.height);
}
// Issue
// console.log('localStorage.getItem("calibration_radar").checked :',localStorage.getItem("calibration_radar"));
// console.log('document.getElementById(calibration_radar).checked',document.getElementById("calibration_radar").checked);
// if (localStorage.getItem("calibration_radar") == "true") {
// document.getElementById("enable_calibration_radar").checked = true;
// console.log('document.getElementById(enable_calibration_radar).checked',document.getElementById("enable_calibration_radar").checked);
// mix_scale_radar_visible();
// console.log('document.getElementById(enable_calibration_radar).checked',document.getElementById("enable_calibration_radar").checked);
// }else {
// document.getElementById("enable_calibration_radar").checked = false;
// console.log('document.getElementById(enable_calibration_radar).checked',document.getElementById("enable_calibration_radar").checked);
// mix_scale_radar_hidden();
// console.log('document.getElementById(enable_calibration_radar).checked',document.getElementById("enable_calibration_radar").checked);
// }
return canvas, imgInterval;
}
function showRGBimage(canvas, interval, remoteIP, account, password) {
clearInterval(interval);
interval = setInterval(function getRGBimgSetInterval(remoteIP, account, password, canvas) {
var remotesnapUrl = 'http://' + window.location.hostname + ":" + GetUrlPort() + '/remotesnap' + Math.random();
if (canvas) {
canvas.renderAll();
}
if (localStorage.getItem("enable_ip_setting") === "true") {
console.log("remoteIP: ", remoteIP, ", account: ", account, ", password: ", password);
try {
fabric.Image.fromURL(remotesnapUrl, function (img) {
if (img != null && img._element != null) {
img.set({
scaleX: radarViewWidth / img.width,
scaleY: radarViewHeight / img.height,
});
canvas.setBackgroundImage(img, () => canvas.renderAll.bind(canvas));
img = null;
}
});
}
catch (e) {
console.log(e);
}
}
remotesnapUrl = null;
}, g_time_canvas, remoteIP, account, password, canvas);
return canvas, interval;
}
// function showPTZimage(remoteIP, account, password) {
// clearInterval(g_getPtzImg);
// g_getPtzImg = setInterval(function GetPTZimg_set_interval(remoteIP, account, password) {
// console.log("[share.js] showPTZimage() - remoteIP: ", remoteIP, ", account: ", account, ", password: ", password);
// var remotesnapUrl = 'http://' + window.location.hostname + ":" + GetUrlPort() + '/remotesnap' + Math.random(); // TODO 要能夾帶上述變數進去
// if (canvasTripwire_radarPTZ) {
// canvasTripwire_radarPTZ.renderAll();
// }
// try {
// fabric.Image.fromURL(remotesnapUrl, function (img) {
// if (img != null && img._element != null) {
// img.set({
// scaleX: radarViewWidth / img.width,
// scaleY: radarViewHeight / img.height,
// });
// canvasTripwire_radarPTZ.setBackgroundImage(img, () => canvasTripwire_radarPTZ.renderAll.bind(canvasTripwire_radarPTZ));
// img = null;
// }
// });
// }
// catch (e) {
// console.log(e);
// }
// remotesnapUrl = null;
// // return "Success";
// }, g_time_canvas, remoteIP, account, password);
// }
// function showCameraImage(remoteIP, account, password) {
// clearInterval(g_getCameraImg);
// g_getCameraImg = setInterval(function GetPTZimg_set_interval(remoteIP, account, password) {
// // console.log("remoteIP: ", remoteIP, ", account: ", account, ", password: ", password);
// var remotesnapUrl = 'http://' + window.location.hostname + ":" + GetUrlPort() + '/remotesnap' + Math.random(); // TODO 要能夾帶上述變數進去
// if (canvasTripwire_speedCamera) {
// canvasTripwire_speedCamera.renderAll();
// }
// try {
// fabric.Image.fromURL(remotesnapUrl, function (img) {
// if (img != null && img._element != null) {
// img.set({
// scaleX: radarViewWidth / img.width,
// scaleY: radarViewHeight / img.height,
// });
// canvasTripwire_speedCamera.setBackgroundImage(img, () => canvasTripwire_speedCamera.renderAll.bind(canvasTripwire_speedCamera));
// img = null;
// }
// });
// }
// catch (e) {
// console.log(e);
// }
// remotesnapUrl = null;
// return "Success";
// }, g_time_canvas, remoteIP, account, password);
// }