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.
 
 
 
 

6208 lines
298 KiB

var canvasTripwire;
var canvasTripwire_all;
var click_canvas_all = 0;
var click_cold_set = 0;
var click_mouse_set = 0;
var canvasTripwire1;
var canvasTripwire2;
var canvasTripwire3;
var canvasTripwire4;
var canvasTripwire5;
var canvasTripwire6;
var canvasTripwire7;
var canvasTripwire8;
var canvasTripwire_default;
var TripwireTrafficMode = 0;//0:Traffic Light,1:Tripwire
var TrafficLineMode = 0;//0:Rect,1:Line
var g_Ctrl_InfoTrafficLight = [];//0:index,1:left,2:top,3:width,4:height,5:direct,6:Traffic Light
var MAX_SIZE_POINTS = 6;
var MAX_DETECTION_ZONE = 8;
var count_zone = 0;
var MAX_COLDOBJECTS = 8;
var ready_to_reboot = 0;
// 08-26 影像尺寸 ( 480x320 , 3:2 ) 改滿版 ( 720 : 480 )
var G_VIEW_CANVAS_X = 720; // 480
var G_VIEW_CANVAS_Y = 480; // 320
var G_CAM_VIDEO_RES_WIDTH = 1920;
var G_CAM_VIDEO_RES_HEIGHT = 1080;
var G_CANVAS_WIDTH_RATIO = (G_VIEW_CANVAS_X / G_CAM_VIDEO_RES_WIDTH).toFixed(3);
var G_CANVAS_HEIGHT_RATIO = (G_VIEW_CANVAS_Y / G_CAM_VIDEO_RES_HEIGHT).toFixed(3);
var g_canvas_text_y_offset = 20; // canvas px
var MAX_MOVE_RADIUS = 30;
var MAX_HEIGHT = G_VIEW_CANVAS_Y;
var MAX_WIDTH = G_VIEW_CANVAS_X;
var g_check_cross = 0;
var current_state_hide_or_open_label = 0;
var current_state_hide_or_open_direction = 0;
var current_state_hide_or_open_speed = 0;
var current_state_hide_or_open_getalarmmotion = 1;
var currentPointPosition1 = new Array(MAX_SIZE_POINTS);
var currentPointPosition2 = new Array(MAX_SIZE_POINTS);
var currentPointPosition3 = new Array(MAX_SIZE_POINTS);
var currentPointPosition4 = new Array(MAX_SIZE_POINTS);
var currentPointPosition5 = new Array(MAX_SIZE_POINTS);
var currentPointPosition6 = new Array(MAX_SIZE_POINTS);
var currentPointPosition7 = new Array(MAX_SIZE_POINTS);
var currentPointPosition8 = new Array(MAX_SIZE_POINTS);
var parking_space = new Array(MAX_DETECTION_ZONE);
var parking_line = new Array(MAX_DETECTION_ZONE);
var coldobjects_X = new Array(MAX_COLDOBJECTS);
var coldobjects_Y = new Array(MAX_COLDOBJECTS);
var coldobjects_W = new Array(MAX_COLDOBJECTS);
var coldobjects_H = new Array(MAX_COLDOBJECTS);
var coldobjects_Object = new Array(MAX_COLDOBJECTS);
var check_if_existing_coldobjects = 0;
var g_tof_enable_show_distance = 0;
var g_tof_enable_show_height = 0;
{
for (var i = 0; i < MAX_COLDOBJECTS; i++) {
coldobjects_X[i] = 0;
coldobjects_Y[i] = 0;
coldobjects_W[i] = 0;
coldobjects_H[i] = 0;
coldobjects_Object[i] = "";
}
}
var counter_count_msg = "";
var different_index = 0;
var g_drawing_canvas =
{
bounding_left: -1,
bounding_top: -1,
down_x: -1,
down_y: -1,
move_x: -1,
move_y: -1,
draw_x: -1,
draw_y: -1,
draw_w: -1,
draw_h: -1,
direct: 1
};
var g_max_protected_objects = 2;
var g_tcp_tunnel_token = "airelay";
// ------------------------------
// LPR 相關部分
var MAX_LPR_ARRAY = 18;
var MAX_LPR_SHIFT = 5;
var LPR_Array = Array(MAX_LPR_ARRAY);
var LPR_confidence_array = Array(MAX_LPR_ARRAY);
var LPR_area_array = Array(MAX_LPR_ARRAY);
var LPR_color_array = Array(MAX_LPR_ARRAY);
var LPR_sec_color_array = Array(MAX_LPR_ARRAY);
var LPR_car_type_name_array = Array(MAX_LPR_ARRAY);
var LPR_center_direction_array = Array(MAX_LPR_ARRAY);
var MAX_LPBMP_ARRAY = 18;
var LPBMP_Array = Array(MAX_LPBMP_ARRAY); // lpr img path
//var LPR_Array = Array(MAX_LPBMP_ARRAY); // lpr text
//var LPRC_Array = Array(MAX_LPBMP_ARRAY); // lpr contry
{
for (var i = 0; i < MAX_LPR_ARRAY; i++) {
LPR_Array[i] = "NULL";
LPR_confidence_array[i] = "NULL";
LPR_area_array[i] = "NULL";
LPR_color_array[i] = "NULL";
LPR_sec_color_array[i] = "NULL";
LPR_car_type_name_array[i] = "NULL";
LPR_center_direction_array[i] = "NULL";
}
}
{// LPBMP
for (var i = 0; i < MAX_LPBMP_ARRAY; i++) {
LPBMP_Array[i] = "NULL";
}
}
function push_lpr(mylpr, myarea, myconfidence, mycolor, myseccolor,mycartype,mycenter_direction) {
for (var i = 0; i < MAX_LPR_ARRAY; i++) {
if (LPR_Array[i] === "NULL") {
LPR_Array[i] = mylpr;
LPR_confidence_array[i] = myconfidence;
LPR_area_array[i] = myarea;
LPR_color_array[i] = mycolor;
LPR_sec_color_array[i] = myseccolor;
LPR_car_type_name_array[i] = mycartype;
LPR_center_direction_array[i] = mycenter_direction;
break;
}
else {
if (i === MAX_LPR_ARRAY - 1) {
var j = 0;
for (j = 0; j < MAX_LPR_ARRAY - 1; j++) {
LPR_Array[j] = LPR_Array[j + 1];
LPR_confidence_array[j] = LPR_confidence_array[j + 1];
LPR_area_array[j] = LPR_area_array[j + 1];
LPR_color_array[j] = LPR_color_array[j + 1];
LPR_sec_color_array[j] = LPR_sec_color_array[j + 1];
LPR_car_type_name_array[j] = LPR_car_type_name_array[j + 1];
LPR_center_direction_array[j] = LPR_center_direction_array[j + 1];
}
LPR_Array[j] = mylpr;
LPR_confidence_array[j] = myconfidence;
LPR_area_array[j] = myarea;
LPR_color_array[j] = mycolor;
LPR_sec_color_array[j] = myseccolor;
LPR_car_type_name_array[j] = mycartype;
LPR_center_direction_array[j] = mycenter_direction;
}
}
}
}
function push_LPBMP(jsonbuf){
var new_LPBMP_path = jsonbuf.LPR_BMP;
console.log("new_LPBMP_path:", new_LPBMP_path);
if (LPBMP_Array[MAX_LPBMP_ARRAY - 1] != "NULL") {
var j = 0;
for (j = 0; j < MAX_LPBMP_ARRAY - 1; j++) {
LPBMP_Array[j] = LPBMP_Array[j + 1];
}
LPBMP_Array[j] = new_LPBMP_path;
}
else
{
for (var i = 0; i < MAX_LPBMP_ARRAY; i++) {
if (LPBMP_Array[i] === "NULL") {
LPBMP_Array[i] = new_LPBMP_path;
break;
}
}
}
}
function get_lprimgpath(index) {
var imgpath = "";
if (LPBMP_Array[index] != "NULL") {
imgpath = LPBMP_Array[index];
// /emmc/plugin/Aida_data/storage/2024_9_11_10_18_16_140_9A0265_4.jpg
// imgpath = imgpath.replace("/emmc/plugin", "..");
// 09-11
imgpath = imgpath.replace("/emmc/plugin/Aida_data", `/${g_tcp_tunnel_token}`);
}
// console.log(imgpath + " = " + LPBMP_Array[index] + "?");
return imgpath;
}
function get_lprimgnum(){ //return the last index which is valid. -1 if all invalid.
var j = 0;
for(j=0; j< MAX_LPBMP_ARRAY; j++){
if(LPBMP_Array[j] == "NULL")
break;
}
//console.log("[get_lprimgnum] j = " + j);
return j; //return the last index which is valid. -1 if all invalid.
}
function checkURL(myURL) {
var str = myURL;
//判断URL地址的正则表达式为:http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
//下面的代码中应用了转义字符"\"输出一个字符"/"
var Expression = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/;
var objExp = new RegExp(Expression);
if (objExp.test(str) == true) {
return true;
} else {
return false;
}
}
function setup_lprimg_in_anprindex() {
set_lpr_content(get_lprimgnum());
}
var try_set_low_encoder = 0;
function set_lpr_content(img_num){
if(img_num > 0){ // img_num = -1 when there has no valid lpr imgs.
// remove old imgs
//var lprimglist = document.getElementById("lpr_jpg");
//while(lprimglist.hasChildNodes()){
//lprimglist.removeChild(lprimglist.firstChild);
//}
//var fragment = document.createDocumentFragment();
//add new imgs
for(var i = 0; i < img_num; i++) // img_num is from get_lprimgnum() which returns the last index of img in LPBMP_Array.
{
var index_lpr = img_num - i - 1;
//var imgdiv = document.createElement("div");
//var imgdiv = document.getElementById("lpr_jpg" + (i + 1).toString());
//while (imgdiv.hasChildNodes()) {
//imgdiv.removeChild(imgdiv.firstChild);
//}
var imgObj = document.createElement("img");
imgObj.setAttribute("src", get_lprimgpath(index_lpr));
imgObj.style.height = "80px";
imgObj.style.width = "auto";
imgObj.style.marginLeft = "auto";
imgObj.style.marginRight = "auto";
imgObj.style.display = "block";
var divObj = document.createElement("div");
var href_html;
var check_if_ok_href_html = 0;
var imgtext = document.createElement("h4");//LPR_Array[index_lpr] + ", " + LPR_confidence_array[index_lpr]
var lpr_text = "";
var temp_lpr_array = LPR_Array[index_lpr];
if (localStorage.getItem("barcode_qr") == "Yes") {
if (checkURL(LPR_Array[index_lpr])) {
imgtext.style.color = "#6c87d4";
href_html = document.createElement("a");
href_html.setAttribute("href", LPR_Array[index_lpr]);
href_html.setAttribute("target", "_blank");
check_if_ok_href_html = 1;
}
if (LPR_Array[index_lpr].length > 15) {
temp_lpr_array = LPR_Array[index_lpr].slice(0, 15) + "..";
}
lpr_text = temp_lpr_array;
}
else {
lpr_text = temp_lpr_array + ", " + LPR_confidence_array[index_lpr];
}
//lpr_text += ", \n";
imgtext.appendChild(document.createTextNode(lpr_text));
imgtext.style.display = "inline-block";
//imgtext.style.whiteSpace = "pre";
imgtext.style.lineHeight = "0px";
var imgCar = document.createElement("img");
var path_car_type = "";
if (LPR_car_type_name_array[index_lpr] == "NULL" || LPR_car_type_name_array[index_lpr].length == 0) {
path_car_type = "car";
}
else {
path_car_type = LPR_car_type_name_array[index_lpr];
}
// imgCar.setAttribute("src", "./labels/car_type/" + path_car_type + "-white.png"); // 08-14 不適用於 Landing page 白底
imgCar.setAttribute("src", "./labels/car_type/" + path_car_type + ".png");
imgCar.style.width = "18px";
imgCar.style.height = "15px";
imgCar.style.display = "inline-block";
divObj.appendChild(imgCar);
if (check_if_ok_href_html == 1) {
href_html.appendChild(imgtext);
divObj.appendChild(href_html);
}
else {
divObj.appendChild(imgtext);
}
var divObj2 = document.createElement("div");
var color_text = LPR_color_array[index_lpr];
var colorObj = document.createElement("input");
colorObj.type = "button";
colorObj.style.backgroundColor = color_text;
colorObj.style.width = "18px";
colorObj.style.height = "15px";
// colorObj.style.border = "0px";
colorObj.style.border = "1px solid gray";
colorObj.style.display = "inline-block";
colorObj.style.lineHeight = "0px";
divObj2.appendChild(colorObj);
if (LPR_sec_color_array[index_lpr] != LPR_color_array[index_lpr]) {
var sec_color_text = LPR_sec_color_array[index_lpr];
var sec_colorObj = document.createElement("input");
sec_colorObj.type = "button";
sec_colorObj.style.backgroundColor = sec_color_text;
sec_colorObj.style.width = "18px";
sec_colorObj.style.height = "15px";
// sec_colorObj.style.border = "0px";
sec_colorObj.style.border = "1px solid gray";
sec_colorObj.style.display = "inline-block";
sec_colorObj.style.lineHeight = "0px";
divObj2.appendChild(sec_colorObj);
}
var imgtext2 = document.createElement("h4");
if (LPR_area_array[index_lpr].length >= 1 && LPR_area_array[index_lpr] != "NULL") {
var area_text = LPR_area_array[index_lpr];
console.log("area_text: ", area_text);
imgtext2.appendChild(document.createTextNode(area_text));
}
imgtext2.style.display = "inline-block";
imgtext2.style.lineHeight = "0px";
divObj2.appendChild(imgtext2);
// 08-14 LPR_center_direction_array 需 getalarmmotion 有 center_direction
if (LPR_center_direction_array[index_lpr].length >= 1 && LPR_center_direction_array[index_lpr] != "NULL") {
var center_direction_text = "up_arrow";
if (parseInt(LPR_center_direction_array[index_lpr]) >= 0) {
center_direction_text = "down_arrow";
}
else {
center_direction_text = "up_arrow";
}
var img_direction = document.createElement("img");
img_direction.setAttribute("src", "./images/" + center_direction_text + ".png");
img_direction.style.width = "18px";
img_direction.style.height = "15px";
img_direction.style.display = "inline-block";
divObj2.appendChild(img_direction);
}
//var imgtext2 = document.createElement("h4");//LPR_Array[index_lpr] + ", " + LPR_confidence_array[index_lpr]
//var lpr_text2 = LPR_confidence_array[index_lpr];
//imgtext2.appendChild(document.createTextNode("hello"));
//imgdiv.appendChild(imgObj);
//fragment.appendChild(imgdiv);
var imgdiv = document.querySelector("#lpr_jpg_" + (i + 1).toString());
while (imgdiv.hasChildNodes()) {
imgdiv.removeChild(imgdiv.firstChild);
}
imgdiv.appendChild(imgObj);
imgdiv.appendChild(divObj);
imgdiv.appendChild(divObj2);
// imgdiv.style.width = "50px";
//imgdiv.appendChild(imgtext2);
//console.log("path:" + get_lprimgpath(i));
//document.getElementById("lpr_jpg_" + (i + 1).toString()).style.width = "auto";
}
var len = img_num;
var loadCounter = 0;
for (var i = 0; i < len; i++) {
var index_lpr = img_num - i - 1;
$(document.createElement("img")).attr('src', get_lprimgpath(index_lpr)).one("load", function () {
//alert(get_lprimgpath(index_lpr)+ 'is loaded');
loadCounter++;
}).each(function () {
if (this.complete) {
$(this).trigger("load");
}
else {
// this.src = '../Aida_data/storage/default.jpg';
// 09-11
this.src = `/${g_tcp_tunnel_token}/storage/default.jpg`;
//console.log(index_lpr);
//console.log(get_lprimgpath(index_lpr));
//console.log(this.src);
}
});
}
if (loadCounter < len-4) {
//console.log("At least two are not loaded");
console.log("try set low encoder");
if (try_set_low_encoder == 0) {
try_set_low_encoder = 1;
var json_data = '{"system_setting": { "getimage_encoder_id": "' + "4" + '","getimage_encoder_id_HD": "' + "4" + '"}';
json_data += '}';
func_setconfigfile(json_data);
}
}
else {
//console.log("OK");
//alert("all are loaded");
}
// lprimglist.appendChild(fragment);
}
}
// ------------------------------
function roundDown (num, decimal) { return Math.floor((num + Number.EPSILON) * Math.pow(10, decimal)) / Math.pow(10, decimal); }
function segmentsIntr(a, b, c, d) {
if ((a.x == c.x && a.y == c.y) ||
(a.x == d.x && a.y == d.y)) {
return { x: a.x, y: a.y};
}
else if ((b.x == c.x && b.y == c.y) ||
(b.x == d.x && b.y == d.y)) {
return { x: b.x, y: b.y };
}
// 三角形abc 面积的2倍
var area_abc = (a.x - c.x) * (b.y - c.y) - (a.y - c.y) * (b.x - c.x);
// 三角形abd 面积的2倍
var area_abd = (a.x - d.x) * (b.y - d.y) - (a.y - d.y) * (b.x - d.x);
if (area_abc == 0) {
return { x: c.x, y: c.y };
}
else if (area_abd == 0) {
return { x: d.x, y: d.y };
}
// 面积符号相同则两点在线段同侧,不相交 (对点在线段上的情况,本例当作不相交处理);
/*if (area_abc * area_abd >= 0) {
return false;
}*/
// 三角形cda 面积的2倍
var area_cda = (c.x - a.x) * (d.y - a.y) - (c.y - a.y) * (d.x - a.x);
// 三角形cdb 面积的2倍
// 注意: 这里有一个小优化.不需要再用公式计算面积,而是通过已知的三个面积加减得出.
var area_cdb = area_cda + area_abc - area_abd;
if (area_cdb == 0) {
return { x: b.x, y: b.y };
}
else if (area_cda == 0) {
return { x: a.x, y: a.y };
}
/*
if (area_cda * area_cdb >= 0) {
return false;
}*/
//计算交点坐标
var t = area_cda / (area_abd - area_abc);
var dx = t * (b.x - a.x),
dy = t * (b.y - a.y);
return { x: a.x + dx, y: a.y + dy };
}
//var data_alarm = "";
/**
* @ Update Objects Info in g_Ctrl_InfoTrafficLight
*
* @ Input :
* @ Return :
*/
var reconnect_websocket = null;
var request_live = null;
function getalarmmotion_value() {
var ipStr = '/getalarmmotion';
if (this.status == 404) {
//request_live = setInterval(function () {
//if (navigator.userAgent.match("MSIE") || (!!window.ActiveXObject || "ActiveXObject" in window))
//GetRequest_Http();
//else
// GetRequest_WebSocket();
var replaceUrl = 'http://' + window.location.hostname + '/' + g_tcp_tunnel_token + '/Aida/index.html';
//alert(replaceUrl);
parent.window.location.replace(replaceUrl);
//}, 5000);
}
else
{
/*
if (navigator.userAgent.match("MSIE") || (!!window.ActiveXObject || "ActiveXObject" in window))
GetRequest_Http();
else*/
// GetRequest_WebSocket(); // 原本寫法
// 08-05 因 landing page 位於 80 port,改用舊方法直接拿看看
// GetRequest_Http(); // 會有 SyntaxError: Unterminated string in JSON 的問題
// 08-15
GetRequest_Http_80port_fetch();
}
}
var len_alarm = 0;
var bbox_count = 0;
var plate_count = 0;
var plate_idx = 0;
var complete_flag = 0;
var content_len = 0;
var wait_count = 0;
var clear_count = 0; //sophia add 20201207
var clear_count_2 = 0; //檢查畫布畫久一點
var index_ = 0;
//var points_list = "";
var linelengths_list = "";
var points_array = new Array(MAX_SIZE_POINTS);
var g_zone_id = 0;
var g_enable_show_pixel = 0;
var g_enable_show_direction = 0;
var g_mydirection = new Array(MAX_DETECTION_ZONE);
var g_visible_arrow = 0;
{
for (var i = 0; i < MAX_DETECTION_ZONE; i++) {
g_mydirection[i] = 1;
}
}
function open_visible_arrow() {
g_visible_arrow = 1;
}
function hide_visible_arrow() {
g_visible_arrow = 0;
}
function enable_show_direction() {
g_enable_show_direction = 1;
Edit_Arrow();
}
function disable_show_direction() {
g_enable_show_direction = 0;
Edit_Arrow();
}
function updateObjects() {
g_Ctrl_InfoTrafficLight.length = 0;
var j = 0;
if (TripwireTrafficMode == 1) {
g_Ctrl_InfoTrafficLight[j] = [];
g_Ctrl_InfoTrafficLight[j][0] = j;
g_Ctrl_InfoTrafficLight[j][1] = 50;
g_Ctrl_InfoTrafficLight[j][2] = 50;
g_Ctrl_InfoTrafficLight[j][3] = 30;
g_Ctrl_InfoTrafficLight[j][4] = 30;
g_Ctrl_InfoTrafficLight[j][5] = 1;
g_Ctrl_InfoTrafficLight[j][6] = 1;
j++;
}
for (var i = 0; i < canvasTripwire.getObjects().length; i++) {
g_Ctrl_InfoTrafficLight[j] = [];
g_Ctrl_InfoTrafficLight[j][0] = j;
g_Ctrl_InfoTrafficLight[j][1] = canvasTripwire.item(i).left;
g_Ctrl_InfoTrafficLight[j][2] = canvasTripwire.item(i).top;
g_Ctrl_InfoTrafficLight[j][3] = canvasTripwire.item(i).width;
g_Ctrl_InfoTrafficLight[j][4] = canvasTripwire.item(i).height;
g_Ctrl_InfoTrafficLight[j][5] = canvasTripwire.item(i).direction;
g_Ctrl_InfoTrafficLight[j][6] = canvasTripwire.item(i).trafficlight;
j++;
}
}
/**
* @ create a rectangle object
*
* @ Input :
* :1.r_left:left
* :2.r_top:top
* :3.r_width:width
* :4.r_height:height
* :5.r_direct:direction
* :6.trafficlight:trafficlight
* @ Return : rectangle object
*/
function insertTrafficLightRectangle(r_left, r_top, r_width, r_height, r_direct, r_tlight, r_name, r_number_row) {
var rectangle;
var color_type = '#00FF00';
if (r_name != "object" &&
r_name != "L._Plate_USA" &&
r_name != "L._Plate_MAC/MYS" &&
r_name != "L._Plate_VNM" &&
r_name != "L._Plate_EUR" &&
r_name != "L._Plate_GBR" &&
r_name != "L._Plate_JPN" &&
r_name != "L._Plate_THA" &&
r_name != "L._Plate_IDN" &&
r_name != "L._Plate_IDN2" &&
r_name != "L._Plate_BGD" &&
r_name != "L._Plate_MEA" &&
r_name != "L._Plate_PHL" &&
r_name != "L._Plate_AUS" &&
r_name != "L._Plate_CNT_1LINE" &&
r_name != "L._Plate_CNT_2LINES" &&
r_name != "L._Plate_CNT_3LINES" &&
r_name != "L._Plate_CNT_VERTICAL" &&
r_name != "L._Plate_CNT_USDOT" &&
r_name != "ambulance" &&
r_name != "face" &&
r_name != "blank" &&
r_name != "stop_sign" &&
r_name != "qrcode" &&
r_name != "barcode" &&
r_name != "L._Plate_TWN" &&
r_name != "") {
if (r_name == "person") {
color_type = '#FF8C00';
}
else if(r_name == "car"){
color_type = '#800080';
}
}
else if (r_number_row == 2) {
color_type = '#FFFF00';
}
if ((r_left != null) && (r_top != null) && (r_width != null) && (r_height != null)) {
if (click_canvas_all >= 1 && click_cold_set >= 1) {
}
else {
if (r_name != "object" &&
r_name != "L._Plate_USA" &&
r_name != "L._Plate_MAC/MYS" &&
r_name != "L._Plate_VNM" &&
r_name != "L._Plate_EUR" &&
r_name != "L._Plate_GBR" &&
r_name != "L._Plate_JPN" &&
r_name != "L._Plate_THA" &&
r_name != "L._Plate_IDN" &&
r_name != "L._Plate_IDN2" &&
r_name != "L._Plate_BGD" &&
r_name != "L._Plate_MEA" &&
r_name != "L._Plate_PHL" &&
r_name != "L._Plate_AUS" &&
r_name != "L._Plate_CNT_1LINE" &&
r_name != "L._Plate_CNT_2LINES" &&
r_name != "L._Plate_CNT_3LINES" &&
r_name != "L._Plate_CNT_VERTICAL" &&
r_name != "L._Plate_CNT_USDOT" &&
r_name != "ambulance" &&
r_name != "face" &&
r_name != "blank" &&
r_name != "stop_sign" &&
r_name != "qrcode" &&
r_name != "barcode" &&
r_name != "L._Plate_TWN" &&
r_name != "") {
var temp_width = r_width;
var temp_height = r_height;
r_width = r_width * 1.095;
r_height = r_height * 1.095;
r_left = r_left - (r_width - temp_width) / 2;
r_top = r_top - (r_height - temp_height) / 2;
}
}
rectangle = new fabric.Rect({ objectCaching: false, trafficlight: r_tlight, direction: r_direct, left: r_left, top: r_top, stroke: color_type, strokeWidth: 1.5, fill: 'transparent', width: r_width, height: r_height, opacity: 1, hasRotatingPoint: false, transparentCorners: false, cornerStyle: 'circle', cornerSize: 10, cornerColor: '#BDB76B' });
}
else {
rectangle = new fabric.Rect({ objectCaching: false, trafficlight: 1, direction: 1, left: 50, top: 50, stroke: color_type, strokeWidth: 1.5, fill: 'transparent', width: 30, height: 30, opacity: 1, hasRotatingPoint: false, transparentCorners: false, cornerStyle: 'circle', cornerSize: 10, cornerColor: '#BDB76B' });
}
rectangle.setControlsVisibility({
bl: true,
br: true,
tl: true,
tr: true,
mt: true,
mb: true,
ml: true,
mr: true,
});
if (r_name.length >= 1 && click_canvas_all >= 1 && click_cold_set >= 1) {
rectangle.on('selected', function (e) {
var selected_left = r_left * G_CAM_VIDEO_RES_WIDTH / MAX_WIDTH-20;
var selected_top = r_top * G_CAM_VIDEO_RES_HEIGHT / MAX_HEIGHT-20;
var selected_width = r_width * G_CAM_VIDEO_RES_WIDTH / MAX_WIDTH+40;
var selected_height = r_height * G_CAM_VIDEO_RES_HEIGHT / MAX_HEIGHT+40;
if (selected_left < 10)
selected_left = 10;
if (selected_top < 10)
selected_top = 10;
if (selected_width > G_CAM_VIDEO_RES_WIDTH - 20)
selected_width = G_CAM_VIDEO_RES_WIDTH - 20;
if (selected_height > G_CAM_VIDEO_RES_HEIGHT - 20)
selected_height = G_CAM_VIDEO_RES_HEIGHT - 20;
func_set_coldobjects(selected_left, selected_top, selected_width, selected_height, r_name);
})
}
if (click_canvas_all >= 1 && click_cold_set >= 1) {
//disabelIteraction(rectangle);
}
else {
disabelIteraction(rectangle);
}
return rectangle;
}
function insertTrafficLightRectangle_Red(r_left, r_top, r_width, r_height, r_direct, r_tlight, r_name) {
var rectangle2;
if ((r_left != null) && (r_top != null) && (r_width != null) && (r_height != null)) {
if (click_canvas_all >= 1 && click_cold_set >= 1) {
}
else {
if (r_name != "object" &&
r_name != "L._Plate_USA" &&
r_name != "L._Plate_MAC/MYS" &&
r_name != "L._Plate_VNM" &&
r_name != "L._Plate_EUR" &&
r_name != "L._Plate_GBR" &&
r_name != "L._Plate_JPN" &&
r_name != "L._Plate_THA" &&
r_name != "L._Plate_IDN" &&
r_name != "L._Plate_IDN2" &&
r_name != "L._Plate_BGD" &&
r_name != "L._Plate_MEA" &&
r_name != "L._Plate_PHL" &&
r_name != "L._Plate_AUS" &&
r_name != "L._Plate_CNT_1LINE" &&
r_name != "L._Plate_CNT_2LINES" &&
r_name != "L._Plate_CNT_3LINES" &&
r_name != "L._Plate_CNT_VERTICAL" &&
r_name != "L._Plate_CNT_USDOT" &&
r_name != "ambulance" &&
r_name != "face" &&
r_name != "blank" &&
r_name != "stop_sign" &&
r_name != "qrcode" &&
r_name != "barcode" &&
r_name != "L._Plate_TWN" &&
r_name != "") {
var temp_width = r_width;
var temp_height = r_height;
r_width = r_width * 1.095;
r_height = r_height * 1.095;
r_left = r_left - (r_width - temp_width) / 2;
r_top = r_top - (r_height - temp_height) / 2;
}
}
rectangle2 = new fabric.Rect({ objectCaching: false,trafficlight: r_tlight, direction: r_direct, left: r_left, top: r_top, stroke: '#FF0000', strokeWidth: 1.5, fill: 'transparent', width: r_width, height: r_height, opacity: 1, hasRotatingPoint: false, transparentCorners: false, cornerStyle: 'circle', cornerSize: 10, cornerColor: '#BDB76B' });
}
else {
rectangle2 = new fabric.Rect({ objectCaching: false,trafficlight: 1, direction: 1, left: 50, top: 50, stroke: '#FF0000', strokeWidth: 1.5, fill: 'transparent', width: 30, height: 30, opacity: 1, hasRotatingPoint: false, transparentCorners: false, cornerStyle: 'circle', cornerSize: 10, cornerColor: '#BDB76B' });
}
rectangle2.setControlsVisibility({
bl: true,
br: true,
tl: true,
tr: true,
mt: true,
mb: true,
ml: true,
mr: true,
});
if (r_name.length >= 1 && click_canvas_all >= 1 && click_cold_set >= 1) {
rectangle2.on('selected', function (e) {
var selected_left = r_left * G_CAM_VIDEO_RES_WIDTH / MAX_WIDTH;
var selected_top = r_top * G_CAM_VIDEO_RES_HEIGHT / MAX_HEIGHT;
var selected_width = r_width * G_CAM_VIDEO_RES_WIDTH / MAX_WIDTH;
var selected_height = r_height * G_CAM_VIDEO_RES_HEIGHT / MAX_HEIGHT;
if (selected_left < 10)
selected_left = 10;
if (selected_top < 10)
selected_top = 10;
if (selected_width > G_CAM_VIDEO_RES_WIDTH - 20)
selected_width = G_CAM_VIDEO_RES_WIDTH - 20;
if (selected_height > G_CAM_VIDEO_RES_HEIGHT - 20)
selected_height = G_CAM_VIDEO_RES_HEIGHT - 20;
func_set_coldobjects(selected_left, selected_top, selected_width, selected_height, r_name);
})
}
if (click_canvas_all >= 1 && click_cold_set >= 1) {
//disabelIteraction(rectangle2);
}
else {
disabelIteraction(rectangle2);
}
return rectangle2;
}
function insertTrafficLightRectangle_Blue(r_left, r_top, r_width, r_height, r_direct, r_tlight,enable_random_color,random_id) {
var rectangle3;
var color_type = '#0000ff';
if (enable_random_color == 1) {
if (random_id % 8 == 0) {
color_type = '#f08902'
}
else if (random_id % 8 == 1) {
color_type = '#f0e402'
}
else if (random_id % 8 == 2) {
color_type = '#02f0b1'
}
else if (random_id % 8 == 3) {
color_type = '#0261f0'
}
else if (random_id % 8 == 4) {
color_type = '#0206f0'
}
else if (random_id % 8 == 5) {
color_type = '#3a02f0'
}
else if (random_id % 8 == 6) {
color_type = '#e402f0'
}
else if (random_id % 8 == 7) {
color_type = '#4f0938'
}
}
if ((r_left != null) && (r_top != null) && (r_width != null) && (r_height != null)) {
rectangle3 = new fabric.Rect({ objectCaching: false, trafficlight: r_tlight, direction: r_direct, left: r_left, top: r_top, stroke: color_type, strokeWidth: 1.5, fill: 'transparent', width: r_width, height: r_height, opacity: 1, hasRotatingPoint: false, transparentCorners: false, cornerStyle: 'circle', cornerSize: 10, cornerColor: '#BDB76B' });
}
else {
rectangle3 = new fabric.Rect({ objectCaching: false, trafficlight: 1, direction: 1, left: 50, top: 50, stroke: color_type, strokeWidth: 1.5, fill: 'transparent', width: 30, height: 30, opacity: 1, hasRotatingPoint: false, transparentCorners: false, cornerStyle: 'circle', cornerSize: 10, cornerColor: '#BDB76B' });
}
rectangle3.setControlsVisibility({
bl: true,
br: true,
tl: true,
tr: true,
mt: true,
mb: true,
ml: true,
mr: true,
});
disabelIteraction(rectangle3);
return rectangle3;
}
function insertCircle_Red(r_left, r_top) {
var rectangle2;
if ((r_left != null) && (r_top != null)) {
rectangle2 = new fabric.Circle({ objectCaching: false, left: r_left - 5.5, top: r_top - 5.5, stroke: '#FF0000', strokeWidth: 3, fill: 'transparent', radius: 5, opacity: 1, hasRotatingPoint: false, transparentCorners: false, cornerStyle: 'circle', cornerSize: 10, cornerColor: '#BDB76B' });
}
else {
rectangle2 = new fabric.Circle({ objectCaching: false, left: 50 - 5.5, top: 50 - 5.5, stroke: '#FF0000', strokeWidth: 3, fill: 'transparent', radius: 5, opacity: 1, hasRotatingPoint: false, transparentCorners: false, cornerStyle: 'circle', cornerSize: 10, cornerColor: '#BDB76B' });
}
rectangle2.setControlsVisibility({
bl: true,
br: true,
tl: true,
tr: true,
mt: true,
mb: true,
ml: true,
mr: true,
});
if (click_canvas_all >= 1 && click_cold_set >= 1) {
//disabelIteraction(rectangle2);
}
else {
disabelIteraction(rectangle2);
}
return rectangle2;
}
function insertCircle_Green(r_left, r_top) {
var rectangle2;
if ((r_left != null) && (r_top != null) ) {
rectangle2 = new fabric.Circle({ objectCaching: false, left: r_left-5.5, top: r_top-5.5, stroke: '#00FF00', strokeWidth: 3, fill: 'transparent', radius: 5, opacity: 1, hasRotatingPoint: false, transparentCorners: false, cornerStyle: 'circle', cornerSize: 10, cornerColor: '#BDB76B' });
}
else {
rectangle2 = new fabric.Circle({ objectCaching: false, left: 50-5.5, top: 50-5.5, stroke: '#00FF00', strokeWidth: 3, fill: 'transparent', radius: 5, opacity: 1, hasRotatingPoint: false, transparentCorners: false, cornerStyle: 'circle', cornerSize: 10, cornerColor: '#BDB76B' });
}
rectangle2.setControlsVisibility({
bl: true,
br: true,
tl: true,
tr: true,
mt: true,
mb: true,
ml: true,
mr: true,
});
if (click_canvas_all >= 1 && click_cold_set >= 1) {
//disabelIteraction(rectangle2);
}
else {
disabelIteraction(rectangle2);
}
return rectangle2;
}
/**
* @ create a text object
*
* @ Input :
* :1.r_left:left
* :2.r_top:top
* :3.r_width:width
* :4.r_height:height
* :5.r_direct:direction
* :6.trafficlight:trafficlight
* @ Return : text object
*/
function insertTextLabel(r_left, r_top, r_width, r_height, showtext) {
var textcontent;
if ((r_left != null) && (r_top != null) && (r_width != null) && (r_height != null)) {
textcontent = new fabric.Text(showtext, {
objectCaching: false,
left: r_left,
top: r_top,
width: r_width,
height: r_height,
fontFamily: 'helvetica',// 字型
fontSize: 15, // 字体大小
fontWeight: '',// 字体粗细
shadow: { color: 'black' ,blur: 5},
fill: '#CCFF33'
});
}
else {
textcontent = new fabric.Text(showtext, {
objectCaching: false,
left: 50,
top: 50,
width: 50,
height: 50,
fontFamily: 'helvetica',// 字型
fontSize: 15, // 字体大小
fontWeight: '',// 字体粗细
shadow: { color: 'black', blur: 5 },
fill: '#CCFF33'
});
}
//const text = new fabric.Text('Day 7 fabricjs')
//canvas.add(text)
/*
{
trafficlight: 1,
direction:1,
left: 50,
top: 50,
stroke: '#00FF00',
strokeWidth: 1.5,
fill: 'transparent',
width: 30,
height: 30,
opacity: 1,
hasRotatingPoint: false,
transparentCorners: false,
cornerStyle: 'circle',
cornerSize: 10,
cornerColor: '#BDB76B'
}
*/
textcontent.setControlsVisibility({
bl: true,
br: true,
tl: true,
tr: true,
mt: true,
mb: true,
ml: true,
mr: true,
});
disabelIteraction(textcontent);
return textcontent;
}
function insertTextLabel_Orange(r_left, r_top, r_width, r_height, showtext) {
var textcontent;
if ((r_left != null) && (r_top != null) && (r_width != null) && (r_height != null)) {
textcontent = new fabric.Text(showtext, {
objectCaching: false,
left: r_left,
top: r_top,
width: r_width,
height: r_height,
fontFamily: 'helvetica',// 字型
fontSize: 22, // 字体大小
fontWeight: '900',// 字体粗细
shadow: { color: 'black', blur: 5 },
fill: '#ff8c00'
});
}
else {
textcontent = new fabric.Text(showtext, {
objectCaching: false,
left: 50,
top: 50,
width: 50,
height: 50,
fontFamily: 'helvetica',// 字型
fontSize: 22, // 字体大小
fontWeight: '900',// 字体粗细
shadow: { color: 'black', blur: 5 },
fill: '#ff8c00'
});
}
//const text = new fabric.Text('Day 7 fabricjs')
//canvas.add(text)
/*
{
trafficlight: 1,
direction:1,
left: 50,
top: 50,
stroke: '#00FF00',
strokeWidth: 1.5,
fill: 'transparent',
width: 30,
height: 30,
opacity: 1,
hasRotatingPoint: false,
transparentCorners: false,
cornerStyle: 'circle',
cornerSize: 10,
cornerColor: '#BDB76B'
}
*/
textcontent.setControlsVisibility({
bl: true,
br: true,
tl: true,
tr: true,
mt: true,
mb: true,
ml: true,
mr: true,
});
disabelIteraction(textcontent);
return textcontent;
}
function insertTextLabel_Red(r_left, r_top, r_width, r_height, showtext) {
var textcontent;
if ((r_left != null) && (r_top != null) && (r_width != null) && (r_height != null)) {
textcontent = new fabric.Text(showtext, {
objectCaching: false,
left: r_left,
top: r_top,
width: r_width,
height: r_height,
fontFamily: 'helvetica',// 字型
fontSize: 15, // 字体大小
fontWeight: '',// 字体粗细
shadow: { color: 'black', blur: 5 },
fill: '#ff0000'
});
}
else {
textcontent = new fabric.Text(showtext, {
objectCaching: false,
left: 50,
top: 50,
width: 50,
height: 50,
fontFamily: 'helvetica',// 字型
fontSize: 15, // 字体大小
fontWeight: '',// 字体粗细
shadow: { color: 'black', blur: 5 },
fill: '#ff0000'
});
}
//const text = new fabric.Text('Day 7 fabricjs')
//canvas.add(text)
/*
{
trafficlight: 1,
direction:1,
left: 50,
top: 50,
stroke: '#00FF00',
strokeWidth: 1.5,
fill: 'transparent',
width: 30,
height: 30,
opacity: 1,
hasRotatingPoint: false,
transparentCorners: false,
cornerStyle: 'circle',
cornerSize: 10,
cornerColor: '#BDB76B'
}
*/
textcontent.setControlsVisibility({
bl: true,
br: true,
tl: true,
tr: true,
mt: true,
mb: true,
ml: true,
mr: true,
});
disabelIteraction(textcontent);
return textcontent;
}
function insertTextLabel_Blue(r_left, r_top, r_width, r_height, showtext) {
var textcontent;
if ((r_left != null) && (r_top != null) && (r_width != null) && (r_height != null)) {
textcontent = new fabric.Text(showtext, {
objectCaching: false,
left: r_left,
top: r_top,
width: r_width,
height: r_height,
fontFamily: 'helvetica',// 字型
fontSize: 15, // 字体大小
fontWeight: '',// 字体粗细
shadow: { color: 'black', blur: 5 },
fill: '#0000ff'
});
}
else {
textcontent = new fabric.Text(showtext, {
objectCaching: false,
left: 50,
top: 50,
width: 50,
height: 50,
fontFamily: 'helvetica',// 字型
fontSize: 15, // 字体大小
fontWeight: '',// 字体粗细
shadow: { color: 'black', blur: 5 },
fill: '#0000ff'
});
}
//const text = new fabric.Text('Day 7 fabricjs')
//canvas.add(text)
/*
{
trafficlight: 1,
direction:1,
left: 50,
top: 50,
stroke: '#00FF00',
strokeWidth: 1.5,
fill: 'transparent',
width: 30,
height: 30,
opacity: 1,
hasRotatingPoint: false,
transparentCorners: false,
cornerStyle: 'circle',
cornerSize: 10,
cornerColor: '#BDB76B'
}
*/
textcontent.setControlsVisibility({
bl: true,
br: true,
tl: true,
tr: true,
mt: true,
mb: true,
ml: true,
mr: true,
});
disabelIteraction(textcontent);
return textcontent;
}
//20201204 sophia add
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 enableIteraction(element) {
element.lockScalingX = false; //Prevents horizontal scaling
element.lockScalingY = false; //Prevents vertical scaling
element.lockUniScaling = false; //Prevents scaling in either X or Y direction but not in both. In other words, prevents non-proportional scaling of an object.
element.lockRotation = false; //Prevents rotation
element.evented = true;
element.selectable = true;
}
/**
* @ create a line object
*
* @ Input :
* :1.coords:coordinate
* :2.r_direct:direction
* @ Return : line object
*/
function TrafficLine(coords, r_direct) {
return new fabric.Line(coords, {
fill: 'transparent',
stroke: '#00FF00',
selectable: true,
hasRotatingPoint: false,
strokeWidth: 1.5, opacity: 1, transparentCorners: false, cornerStyle: 'circle', cornerSize: 10, cornerColor: '#BDB76B', direction: r_direct, trafficlight: 0
});
}
function cal_slope(p1_x,p1_y,p2_x,p2_y) {
return p1_y != p2_y ? (p1_x - p2_x) / (p1_y - p2_y) * (-1) : 99;
}
function angle(cx, cy, ex, ey) {
var dy = ey - cy;
var dx = ex - cx;
var theta = Math.atan2(dy, dx); // range (-PI, PI]
theta *= 180 / Math.PI; // rads to degs, range (-180, 180]
if (theta < 0) theta = 360 + theta; // range [0, 360)
return theta;
}
function AddArrowObject(p1x,p1y,p2x,p2y) {
var start_x = p1x;
var start_y = p1y;
var end_x = p2x;
var end_y = p2y;
var angle_temp = angle(start_x, start_y, end_x, end_y);
var left_temp = Math.abs(start_x + end_x) / 2;
var top_temp = Math.abs(start_y + end_y) / 2;
var strokeWidth_line = 5;
var line = new fabric.Line([start_x, start_y, end_x, end_y], {
strokeWidth: strokeWidth_line,
fill: 'red',
stroke: 'red',
originX: 'center',
originY: 'center'
});
var triangle = new fabric.Triangle({
width: 20, height: 20,
left: left_temp,
top: top_temp, fill: 'red',
angle: angle_temp,
originX: 'center',
originY: 'center'
});
var arrow_temp = [line, triangle];
var arrow = new fabric.Group(arrow_temp);
arrow.left = (start_x < end_x ? start_x : end_x) - strokeWidth_line / 2;
arrow.top = (start_y < end_y ? start_y : end_y) - strokeWidth_line / 2;
arrow.angle = 0;
if (g_enable_show_direction === 0 || g_visible_arrow == 0) {
arrow.visible = false;
}
else {
arrow.visible = true;
}
disabelIteraction(arrow);
return arrow;
}
function refresh_parking_info()
{
if (parseInt(parking_space[g_zone_id], 10) >= 1 && parseInt(parking_line[g_zone_id], 10) >= 1) {
var temp_current_point_position = new Array(MAX_SIZE_POINTS);
if (g_zone_id == 0) {
temp_current_point_position = currentPointPosition1;
}
else if (g_zone_id == 1) {
temp_current_point_position = currentPointPosition2;
}
else if (g_zone_id == 2) {
temp_current_point_position = currentPointPosition3;
}
else if (g_zone_id == 3) {
temp_current_point_position = currentPointPosition4;
}
else if (g_zone_id == 4) {
temp_current_point_position = currentPointPosition5;
}
else if (g_zone_id == 5) {
temp_current_point_position = currentPointPosition6;
}
else if (g_zone_id == 6) {
temp_current_point_position = currentPointPosition7;
}
else if (g_zone_id == 7) {
temp_current_point_position = currentPointPosition8;
}
///////////////////
var num_row = parseInt(parking_line[g_zone_id], 10);
var num_col = Math.ceil(parseInt(parking_space[g_zone_id], 10) / parseInt(parking_line[g_zone_id], 10));
////////////////////
var count_lot = 0;
var s_row_x = 0;
var s_row_y = 0;
var e_row_x = 0;
var e_row_y = 0;
var last_s_row_x = 0;
var last_s_row_y = 0;
var last_e_row_x = 0;
var last_e_row_y = 0;
var s_col_x = 0;
var s_col_y = 0;
var e_col_x = 0;
var e_col_y = 0;
var last_s_col_x = 0;
var last_s_col_y = 0;
var last_e_col_x = 0;
var last_e_col_y = 0;
for (var index_row = 0; index_row < num_row; index_row++) {
if (index_row == 0) {
last_s_row_x = temp_current_point_position[1].x;
last_s_row_y = temp_current_point_position[1].y;
last_e_row_x = temp_current_point_position[2].x;
last_e_row_y = temp_current_point_position[2].y;
s_row_x = (temp_current_point_position[1].x * (num_row - (index_row + 1)) + temp_current_point_position[0].x * (index_row + 1)) / num_row;
s_row_y = (temp_current_point_position[1].y * (num_row - (index_row + 1)) + temp_current_point_position[0].y * (index_row + 1)) / num_row;
e_row_x = (temp_current_point_position[2].x * (num_row - (index_row + 1)) + temp_current_point_position[3].x * (index_row + 1)) / num_row;
e_row_y = (temp_current_point_position[2].y * (num_row - (index_row + 1)) + temp_current_point_position[3].y * (index_row + 1)) / num_row;
}
else if (index_row == num_row - 1) {
last_s_row_x = s_row_x;
last_s_row_y = s_row_y;
last_e_row_x = e_row_x;
last_e_row_y = e_row_y;
s_row_x = temp_current_point_position[0].x;
s_row_y = temp_current_point_position[0].y;
e_row_x = temp_current_point_position[3].x;
e_row_y = temp_current_point_position[3].y;
}
else {
last_s_row_x = s_row_x;
last_s_row_y = s_row_y;
last_e_row_x = e_row_x;
last_e_row_y = e_row_y;
s_row_x = (temp_current_point_position[1].x * (num_row - (index_row + 1)) + temp_current_point_position[0].x * (index_row + 1)) / num_row;
s_row_y = (temp_current_point_position[1].y * (num_row - (index_row + 1)) + temp_current_point_position[0].y * (index_row + 1)) / num_row;
e_row_x = (temp_current_point_position[2].x * (num_row - (index_row + 1)) + temp_current_point_position[3].x * (index_row + 1)) / num_row;
e_row_y = (temp_current_point_position[2].y * (num_row - (index_row + 1)) + temp_current_point_position[3].y * (index_row + 1)) / num_row;
}
for (var index_col = 0; index_col < num_col; index_col++) {
if (count_lot < parseInt(parking_space[g_zone_id], 10)) {
if (index_col == 0) {
last_s_col_x = temp_current_point_position[1].x;
last_s_col_y = temp_current_point_position[1].y;
last_e_col_x = temp_current_point_position[0].x;
last_e_col_y = temp_current_point_position[0].y;
s_col_x = (temp_current_point_position[1].x * (num_col - (index_col + 1)) + temp_current_point_position[2].x * (index_col + 1)) / num_col;
s_col_y = (temp_current_point_position[1].y * (num_col - (index_col + 1)) + temp_current_point_position[2].y * (index_col + 1)) / num_col;
e_col_x = (temp_current_point_position[0].x * (num_col - (index_col + 1)) + temp_current_point_position[3].x * (index_col + 1)) / num_col;
e_col_y = (temp_current_point_position[0].y * (num_col - (index_col + 1)) + temp_current_point_position[3].y * (index_col + 1)) / num_col;
}
else if (index_col == num_col - 1) {
last_s_col_x = s_col_x;
last_s_col_y = s_col_y;
last_e_col_x = e_col_x;
last_e_col_y = e_col_y;
s_col_x = temp_current_point_position[2].x;
s_col_y = temp_current_point_position[2].y;
e_col_x = temp_current_point_position[3].x;
e_col_y = temp_current_point_position[3].y;
}
else {
last_s_col_x = s_col_x;
last_s_col_y = s_col_y;
last_e_col_x = e_col_x;
last_e_col_y = e_col_y;
s_col_x = (temp_current_point_position[1].x * (num_col - (index_col + 1)) + temp_current_point_position[2].x * (index_col + 1)) / num_col;
s_col_y = (temp_current_point_position[1].y * (num_col - (index_col + 1)) + temp_current_point_position[2].y * (index_col + 1)) / num_col;
e_col_x = (temp_current_point_position[0].x * (num_col - (index_col + 1)) + temp_current_point_position[3].x * (index_col + 1)) / num_col;
e_col_y = (temp_current_point_position[0].y * (num_col - (index_col + 1)) + temp_current_point_position[3].y * (index_col + 1)) / num_col;
}
var obj_point_0 = segmentsIntr(
{ x: last_s_row_x, y: last_s_row_y },
{ x: last_e_row_x, y: last_e_row_y },
{ x: last_s_col_x, y: last_s_col_y },
{ x: last_e_col_x, y: last_e_col_y });
var obj_point_1 = segmentsIntr(
{ x: last_s_row_x, y: last_s_row_y },
{ x: last_e_row_x, y: last_e_row_y },
{ x: s_col_x, y: s_col_y },
{ x: e_col_x, y: e_col_y });
var obj_point_2 = segmentsIntr(
{ x: s_row_x, y: s_row_y },
{ x: e_row_x, y: e_row_y },
{ x: last_s_col_x, y: last_s_col_y },
{ x: last_e_col_x, y: last_e_col_y });
var obj_point_3 = segmentsIntr(
{ x: s_row_x, y: s_row_y },
{ x: e_row_x, y: e_row_y },
{ x: s_col_x, y: s_col_y },
{ x: e_col_x, y: e_col_y });
if (obj_point_0 != false && obj_point_1 != false && obj_point_2 != false && obj_point_3 != false) {
var parking_lot_point_x = (obj_point_0.x + obj_point_1.x + obj_point_2.x + obj_point_3.x) / 4;
var parking_lot_point_y = (obj_point_0.y + obj_point_1.y + obj_point_2.y + obj_point_3.y) / 4;
if (g_zone_id == 0)
canvasTripwire1.add(insertCircle_Green(parking_lot_point_x, parking_lot_point_y));
if (g_zone_id == 1)
canvasTripwire2.add(insertCircle_Green(parking_lot_point_x, parking_lot_point_y));
if (g_zone_id == 2)
canvasTripwire3.add(insertCircle_Green(parking_lot_point_x, parking_lot_point_y));
if (g_zone_id == 3)
canvasTripwire4.add(insertCircle_Green(parking_lot_point_x, parking_lot_point_y));
if (g_zone_id == 4)
canvasTripwire5.add(insertCircle_Green(parking_lot_point_x, parking_lot_point_y));
if (g_zone_id == 5)
canvasTripwire6.add(insertCircle_Green(parking_lot_point_x, parking_lot_point_y));
if (g_zone_id == 6)
canvasTripwire7.add(insertCircle_Green(parking_lot_point_x, parking_lot_point_y));
if (g_zone_id == 7)
canvasTripwire8.add(insertCircle_Green(parking_lot_point_x, parking_lot_point_y));
if (g_zone_id == 0)
canvasTripwire1.add(insertTextLabel(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
if (g_zone_id == 1)
canvasTripwire2.add(insertTextLabel(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
if (g_zone_id == 2)
canvasTripwire3.add(insertTextLabel(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
if (g_zone_id == 3)
canvasTripwire4.add(insertTextLabel(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
if (g_zone_id == 4)
canvasTripwire5.add(insertTextLabel(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
if (g_zone_id == 5)
canvasTripwire6.add(insertTextLabel(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
if (g_zone_id == 6)
canvasTripwire7.add(insertTextLabel(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
if (g_zone_id == 7)
canvasTripwire8.add(insertTextLabel(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
count_lot++;
}
}
}
}
}
}
var polygon_zone1;
var polygon_zone2;
var polygon_zone3;
var polygon_zone4;
var polygon_zone5;
var polygon_zone6;
var polygon_zone7;
var polygon_zone8;
var red_light_zone1;
var red_light_zone2;
var red_light_zone3;
var red_light_zone4;
var red_light_zone5;
var red_light_zone6;
var red_light_zone7;
var red_light_zone8;
function createCanvasTrafficLight_alarm(mypoints1, mypoints2, mypoints3, mypoints4, mypoints5, mypoints6, mypoints7, mypoints8) {
currentPointPosition1 = mypoints1;
currentPointPosition2 = mypoints2;
currentPointPosition3 = mypoints3;
currentPointPosition4 = mypoints4;
currentPointPosition5 = mypoints5;
currentPointPosition6 = mypoints6;
currentPointPosition7 = mypoints7;
currentPointPosition8 = mypoints8;
var min_x1 = 10000;
var min_y1 = 10000;
for (var i = 0; i < MAX_SIZE_POINTS; i++) {
if (mypoints1[i].x < min_x1) {
min_x1 = mypoints1[i].x;
}
if (mypoints1[i].y < min_y1) {
min_y1 = mypoints1[i].y;
}
}
var min_x2 = 10000;
var min_y2 = 10000;
for (var i = 0; i < MAX_SIZE_POINTS; i++) {
if (mypoints2[i].x < min_x2) {
min_x2 = mypoints2[i].x;
}
if (mypoints2[i].y < min_y2) {
min_y2 = mypoints2[i].y;
}
}
var min_x3 = 10000;
var min_y3 = 10000;
for (var i = 0; i < MAX_SIZE_POINTS; i++) {
if (mypoints3[i].x < min_x3) {
min_x3 = mypoints3[i].x;
}
if (mypoints3[i].y < min_y3) {
min_y3 = mypoints3[i].y;
}
}
var min_x4 = 10000;
var min_y4 = 10000;
for (var i = 0; i < MAX_SIZE_POINTS; i++) {
if (mypoints4[i].x < min_x4) {
min_x4 = mypoints4[i].x;
}
if (mypoints4[i].y < min_y4) {
min_y4 = mypoints4[i].y;
}
}
var min_x5 = 10000;
var min_y5 = 10000;
for (var i = 0; i < MAX_SIZE_POINTS; i++) {
if (mypoints5[i].x < min_x5) {
min_x5 = mypoints5[i].x;
}
if (mypoints5[i].y < min_y5) {
min_y5 = mypoints5[i].y;
}
}
var min_x6 = 10000;
var min_y6 = 10000;
for (var i = 0; i < MAX_SIZE_POINTS; i++) {
if (mypoints6[i].x < min_x6) {
min_x6 = mypoints6[i].x;
}
if (mypoints6[i].y < min_y6) {
min_y6 = mypoints6[i].y;
}
}
var min_x7 = 10000;
var min_y7 = 10000;
for (var i = 0; i < MAX_SIZE_POINTS; i++) {
if (mypoints7[i].x < min_x7) {
min_x7 = mypoints7[i].x;
}
if (mypoints7[i].y < min_y7) {
min_y7 = mypoints7[i].y;
}
}
var min_x8 = 10000;
var min_y8 = 10000;
for (var i = 0; i < MAX_SIZE_POINTS; i++) {
if (mypoints8[i].x < min_x8) {
min_x8 = mypoints8[i].x;
}
if (mypoints8[i].y < min_y8) {
min_y8 = mypoints8[i].y;
}
}
canvasTripwire1 = new fabric.Canvas('CanvasTripwire1', {
height: G_VIEW_CANVAS_Y,//window.innerHeight
width: G_VIEW_CANVAS_X//window.innerWidth
});
canvasTripwire2 = new fabric.Canvas('CanvasTripwire2', {
height: G_VIEW_CANVAS_Y,//window.innerHeight
width: G_VIEW_CANVAS_X//window.innerWidth
});
canvasTripwire3 = new fabric.Canvas('CanvasTripwire3', {
height: G_VIEW_CANVAS_Y,//window.innerHeight
width: G_VIEW_CANVAS_X//window.innerWidth
});
canvasTripwire4 = new fabric.Canvas('CanvasTripwire4', {
height: G_VIEW_CANVAS_Y,//window.innerHeight
width: G_VIEW_CANVAS_X//window.innerWidth
});
canvasTripwire5 = new fabric.Canvas('CanvasTripwire5', {
height: G_VIEW_CANVAS_Y,//window.innerHeight
width: G_VIEW_CANVAS_X//window.innerWidth
});
canvasTripwire6 = new fabric.Canvas('CanvasTripwire6', {
height: G_VIEW_CANVAS_Y,//window.innerHeight
width: G_VIEW_CANVAS_X//window.innerWidth
});
canvasTripwire7 = new fabric.Canvas('CanvasTripwire7', {
height: G_VIEW_CANVAS_Y,//window.innerHeight
width: G_VIEW_CANVAS_X//window.innerWidth
});
canvasTripwire8 = new fabric.Canvas('CanvasTripwire8', {
height: G_VIEW_CANVAS_Y,//window.innerHeight
width: G_VIEW_CANVAS_X//window.innerWidth
});
canvasTripwire_default = new fabric.Canvas('CanvasTripwire_default', {
height: G_VIEW_CANVAS_Y,//window.innerHeight
width: G_VIEW_CANVAS_X//window.innerWidth
});
canvasTripwire_default.requestRenderAll();
canvasTripwire_all = new fabric.Canvas('CanvasTripwire_all', {
height: G_VIEW_CANVAS_Y,//window.innerHeight
width: G_VIEW_CANVAS_X//window.innerWidth
});
/*
var rectBox = new fabric.Rect({
width: 100,
height: 100,
top: 200,
left: 200,
fill: '#ff0000',
opacity: 0.5
})
*/
/*
var polBox = new fabric.Polygon([
{ x: 200, y: 50 },
{ x: 200, y: 0 },
{ x: 250, y: 50 },
{ x: 250, y: 100 },
{ x: 150, y: 100 },
{ x: 150, y: 50 }], {
left: 200,
top: 200,
angle: 0,
fill: '#ff0000',
opacity: 0.5
}
);
canvasTripwire.add(polBox);
*/
polygon_zone1 = new fabric.Polygon(mypoints1, {
left: min_x1,
top: min_y1,
fill: 'transparent',
strokeWidth: 2,
stroke: '#ffff00',
scaleX: 1,
scaleY: 1,
opacity: 0.7,
objectCaching: false,
transparentCorners: false,
//cornerColor: '#ff0000',
});
polygon_zone2 = new fabric.Polygon(mypoints2, {
left: min_x2,
top: min_y2,
fill: 'transparent',
strokeWidth: 2,
stroke: '#ffff00',
scaleX: 1,
scaleY: 1,
opacity: 0.7,
objectCaching: false,
transparentCorners: false,
//cornerColor: '#ff0000',
});
polygon_zone3 = new fabric.Polygon(mypoints3, {
left: min_x3,
top: min_y3,
fill: 'transparent',
strokeWidth: 2,
stroke: '#ffff00',
scaleX: 1,
scaleY: 1,
opacity: 0.7,
objectCaching: false,
transparentCorners: false,
//cornerColor: '#ff0000',
});
polygon_zone4 = new fabric.Polygon(mypoints4, {
left: min_x4,
top: min_y4,
fill: 'transparent',
strokeWidth: 2,
stroke: '#ffff00',
scaleX: 1,
scaleY: 1,
opacity: 0.7,
objectCaching: false,
transparentCorners: false,
//cornerColor: '#ff0000',
});
polygon_zone5 = new fabric.Polygon(mypoints5, {
left: min_x5,
top: min_y5,
fill: 'transparent',
strokeWidth: 2,
stroke: '#ffff00',
scaleX: 1,
scaleY: 1,
opacity: 0.7,
objectCaching: false,
transparentCorners: false,
//cornerColor: '#ff0000',
});
polygon_zone6 = new fabric.Polygon(mypoints6, {
left: min_x6,
top: min_y6,
fill: 'transparent',
strokeWidth: 2,
stroke: '#ffff00',
scaleX: 1,
scaleY: 1,
opacity: 0.7,
objectCaching: false,
transparentCorners: false,
//cornerColor: '#ff0000',
});
polygon_zone7 = new fabric.Polygon(mypoints7, {
left: min_x7,
top: min_y7,
fill: 'transparent',
strokeWidth: 2,
stroke: '#ffff00',
scaleX: 1,
scaleY: 1,
opacity: 0.7,
objectCaching: false,
transparentCorners: false,
//cornerColor: '#ff0000',
});
polygon_zone8 = new fabric.Polygon(mypoints8, {
left: min_x8,
top: min_y8,
fill: 'transparent',
strokeWidth: 2,
stroke: '#ffff00',
scaleX: 1,
scaleY: 1,
opacity: 0.7,
objectCaching: false,
transparentCorners: false,
//cornerColor: '#ff0000',
});
polygon_zone1.lockMovementX = true; //Prevents horizontal movement
polygon_zone1.lockMovementY = true; //Prevents vertical movement
polygon_zone2.lockMovementX = true; //Prevents horizontal movement
polygon_zone2.lockMovementY = true; //Prevents vertical movement
polygon_zone3.lockMovementX = true; //Prevents horizontal movement
polygon_zone3.lockMovementY = true; //Prevents vertical movement
polygon_zone4.lockMovementX = true; //Prevents horizontal movement
polygon_zone4.lockMovementY = true; //Prevents vertical movement
polygon_zone5.lockMovementX = true; //Prevents horizontal movement
polygon_zone5.lockMovementY = true; //Prevents vertical movement
polygon_zone6.lockMovementX = true; //Prevents horizontal movement
polygon_zone6.lockMovementY = true; //Prevents vertical movement
polygon_zone7.lockMovementX = true; //Prevents horizontal movement
polygon_zone7.lockMovementY = true; //Prevents vertical movement
polygon_zone8.lockMovementX = true; //Prevents horizontal movement
polygon_zone8.lockMovementY = true; //Prevents vertical movement
canvasTripwire1.add(polygon_zone1);
canvasTripwire2.add(polygon_zone2);
canvasTripwire3.add(polygon_zone3);
canvasTripwire4.add(polygon_zone4);
canvasTripwire5.add(polygon_zone5);
canvasTripwire6.add(polygon_zone6);
canvasTripwire7.add(polygon_zone7);
canvasTripwire8.add(polygon_zone8);
canvasTripwire1.add(AddArrowObject(mypoints1[3].x, mypoints1[3].y, mypoints1[2].x, mypoints1[2].y));
canvasTripwire2.add(AddArrowObject(mypoints2[3].x, mypoints2[3].y, mypoints2[2].x, mypoints2[2].y));
canvasTripwire3.add(AddArrowObject(mypoints3[3].x, mypoints3[3].y, mypoints3[2].x, mypoints3[2].y));
canvasTripwire4.add(AddArrowObject(mypoints4[3].x, mypoints4[3].y, mypoints4[2].x, mypoints4[2].y));
canvasTripwire5.add(AddArrowObject(mypoints5[3].x, mypoints5[3].y, mypoints5[2].x, mypoints5[2].y));
canvasTripwire6.add(AddArrowObject(mypoints6[3].x, mypoints6[3].y, mypoints6[2].x, mypoints6[2].y));
canvasTripwire7.add(AddArrowObject(mypoints7[3].x, mypoints7[3].y, mypoints7[2].x, mypoints7[2].y));
canvasTripwire8.add(AddArrowObject(mypoints8[3].x, mypoints8[3].y, mypoints8[2].x, mypoints8[2].y));
canvasTripwire1.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire1.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire1.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire2.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire2.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire2.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire3.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire3.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire3.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire4.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire4.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire4.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire5.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire5.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire5.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire6.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire6.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire6.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire7.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire7.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire7.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire8.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire8.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
canvasTripwire8.add(insertTextLabel_Orange(0, 0, 50, 50, ""));
//polygon_zone.visible = false;
refresh_parking_info();
}
function GetPointLocation(zone_id) {
if (zone_id === 0)
return currentPointPosition1;
else if (zone_id === 1)
return currentPointPosition2;
else if (zone_id === 2)
return currentPointPosition3;
else if (zone_id === 3)
return currentPointPosition4;
else if (zone_id === 4)
return currentPointPosition5;
else if (zone_id === 5)
return currentPointPosition6;
else if (zone_id === 6)
return currentPointPosition7;
else if (zone_id === 7)
return currentPointPosition8;
}
function polygonPositionHandler(dim, finalMatrix, fabricObject) {
var x = (fabricObject.points[this.pointIndex].x - fabricObject.pathOffset.x),
y = (fabricObject.points[this.pointIndex].y - fabricObject.pathOffset.y);
return fabric.util.transformPoint(
{ x: x, y: y },
fabric.util.multiplyTransformMatrices(
fabricObject.canvas.viewportTransform,
fabricObject.calcTransformMatrix()
)
);
}
function isPointInLine(point, point2, linePoint1, linePoint2) {
//判斷兩條線是否平行或者共線
var denominator = (point.y - point2.y) * (linePoint1.x - linePoint2.x) - (point2.x - point.x) * (linePoint2.y - linePoint1.y);
if (denominator == 0)
return false;
//獲取兩條線延伸後的交點座標
var x = ((point.x - point2.x) * (linePoint1.x - linePoint2.x) * (linePoint2.y - point2.y) +
(point.y - point2.y) * (linePoint1.x - linePoint2.x) * point2.x - (linePoint1.y - linePoint2.y) * (point.x - point2.x) * linePoint2.x) / denominator;
var y = -((point.y - point2.y) * (linePoint1.y - linePoint2.y) * (linePoint2.x - point2.x) +
(point.x - point2.x) * (linePoint1.y - linePoint2.y) * point2.y - (linePoint1.x - linePoint2.x) * (point.y - point2.y) * linePoint2.y) / denominator;
//判斷交點是否線上段上
if ((x - point2.x) * (x - point.x) <= 0 && (y - point2.y) * (y - point.y) <= 0 && (x - linePoint2.x) * (x - linePoint1.x) <= 0 && (y - linePoint2.y) * (y - linePoint1.y) <= 0)
return true;
return false;
}
// define a function that will define what the control does
// this function will be called on every mouse move after a control has been
// clicked and is being dragged.
// The function receive as argument the mouse event, the current trasnform object
// and the current position in canvas coordinate
// transform.target is a reference to the current object being transformed,
function func_actionHandler(eventData, transform, x, y) {
var polygon = transform.target,
currentControl = polygon.controls[polygon.__corner],
mouseLocalPosition = polygon.toLocalPoint(new fabric.Point(x, y), 'center', 'center'),
polygonBaseSize = polygon._getNonTransformedDimensions(),
size = polygon._getTransformedDimensions( 0, 0),
finalPointPosition = {
x: Math.round(mouseLocalPosition.x * polygonBaseSize.x / size.x + polygon.pathOffset.x),
y: Math.round(mouseLocalPosition.y * polygonBaseSize.y / size.y + polygon.pathOffset.y)
};
var check_cross = 0;
var check_move = 0;
var max_size_of_points = g_enable_show_direction == 1 ? 4 : 6;
var current_point_index = currentControl.pointIndex;
var next_point_index = currentControl.pointIndex + 1 < max_size_of_points ? currentControl.pointIndex + 1 : 0;
var last_point_index = currentControl.pointIndex - 1 >= 0 ? currentControl.pointIndex - 1 : max_size_of_points - 1;
for (var i = 0; i < max_size_of_points; i++) {
var current_index = i;
var next_index = i + 1 < max_size_of_points ? i + 1 : 0;
if (current_index != current_point_index && current_index != next_point_index && next_index != current_point_index && next_index != next_point_index) {
if (isPointInLine(finalPointPosition, polygon.points[next_point_index], polygon.points[current_index], polygon.points[next_index])) {
check_cross = 1;
}
if (isPointInLine(finalPointPosition, polygon.points[current_point_index], polygon.points[current_index], polygon.points[next_index])) {
check_cross = 1;
}
}
}
for (var i = 0; i < max_size_of_points; i++) {
var current_index = i;
var last_index = i - 1 >= 0 ? i - 1 : max_size_of_points-1;
if (current_index != current_point_index && current_index != last_point_index && last_index != current_point_index && last_index != last_point_index) {
if (isPointInLine(finalPointPosition, polygon.points[last_point_index], polygon.points[current_index], polygon.points[last_index])) {
check_cross = 1;
}
if (isPointInLine(finalPointPosition, polygon.points[current_point_index], polygon.points[current_index], polygon.points[last_index])) {
check_cross = 1;
}
}
}
if (Math.sqrt(Math.pow(finalPointPosition.x - polygon.points[current_point_index].x, 2) + Math.pow(finalPointPosition.y - polygon.points[current_point_index].y, 2)) >= MAX_MOVE_RADIUS) {
check_move = 1;
}
//console.log("polygon.pathOffset.x:" + polygon.pathOffset.x + "; polygon.pathOffset.y:" + polygon.pathOffset.y);
if (check_cross == 0 && check_move == 0) {
if (finalPointPosition.x < 10) {
finalPointPosition.x = 10;
}
if (finalPointPosition.x > MAX_WIDTH - 10) {
finalPointPosition.x = MAX_WIDTH - 10;
}
if (finalPointPosition.y < 10) {
finalPointPosition.y = 10;
}
if (finalPointPosition.y > MAX_HEIGHT - 10) {
finalPointPosition.y = MAX_HEIGHT - 10;
}
polygon.points[currentControl.pointIndex] = finalPointPosition;
}
g_check_cross = check_cross;
/*
for (var i = 0; i < 6; i++) {
console.log("(" + i.toString() + ")" + polygon.points[i].x + "," + polygon.points[i].y);
}*/
return true;
}
function GetMaxWidth() {
return MAX_WIDTH;
}
function GetMaxHeight() {
return MAX_HEIGHT;
}
// define a function that can keep the polygon in the same position when we change its
// width/height/top/left.
function anchorWrapper1(anchorIndex, fn) {
return function (eventData, transform, x, y) {
var fabricObject = transform.target,
absolutePoint = fabric.util.transformPoint({
x: (fabricObject.points[anchorIndex].x - fabricObject.pathOffset.x),
y: (fabricObject.points[anchorIndex].y - fabricObject.pathOffset.y),
}, fabricObject.calcTransformMatrix()),
actionPerformed = fn(eventData, transform, x, y),
newDim = fabricObject._setPositionDimensions({}),
polygonBaseSize = fabricObject._getNonTransformedDimensions(),
newX = (fabricObject.points[anchorIndex].x - fabricObject.pathOffset.x) / polygonBaseSize.x,
newY = (fabricObject.points[anchorIndex].y - fabricObject.pathOffset.y) / polygonBaseSize.y;
//fabricObject.setPositionByOrigin(absolutePoint, newX + 0.5, newY + 0.5);
fabricObject.setPositionByOrigin(absolutePoint, newX + 0.5, newY + 0.5);
for (var index_point = 0; index_point < MAX_SIZE_POINTS; index_point++)
currentPointPosition1[index_point] = fabricObject.points[index_point];
if (g_check_cross == 1) {
currentPointPosition1[0].x = 156;
currentPointPosition1[0].y = 64;
currentPointPosition1[1].x = 156;
currentPointPosition1[1].y = 160;
currentPointPosition1[2].x = 156;
currentPointPosition1[2].y = 256;
currentPointPosition1[3].x = 313;
currentPointPosition1[3].y = 256;
currentPointPosition1[4].x = 313;
currentPointPosition1[4].y = 160;
currentPointPosition1[5].x = 313;
currentPointPosition1[5].y = 64;
g_check_cross = 0;
}
if (g_enable_show_direction == 1 || (parseInt(parking_space[0], 10) >= 1 && parseInt(parking_line[0], 10) >= 1)) {
currentPointPosition1[4].x = (currentPointPosition1[0].x * 1 + currentPointPosition1[3].x * 2) / 3;
currentPointPosition1[4].y = (currentPointPosition1[0].y * 1 + currentPointPosition1[3].y * 2) / 3;
currentPointPosition1[5].x = (currentPointPosition1[0].x * 2 + currentPointPosition1[3].x * 1) / 3;
currentPointPosition1[5].y = (currentPointPosition1[0].y * 2 + currentPointPosition1[3].y * 1) / 3;
}
different_index = anchorIndex;
show_pixels_for_zone();
Edit_Arrow();
return actionPerformed;
}
}
function anchorWrapper2(anchorIndex, fn) {
return function (eventData, transform, x, y) {
var fabricObject = transform.target,
absolutePoint = fabric.util.transformPoint({
x: (fabricObject.points[anchorIndex].x - fabricObject.pathOffset.x),
y: (fabricObject.points[anchorIndex].y - fabricObject.pathOffset.y),
}, fabricObject.calcTransformMatrix()),
actionPerformed = fn(eventData, transform, x, y),
newDim = fabricObject._setPositionDimensions({}),
polygonBaseSize = fabricObject._getNonTransformedDimensions(),
newX = (fabricObject.points[anchorIndex].x - fabricObject.pathOffset.x) / polygonBaseSize.x,
newY = (fabricObject.points[anchorIndex].y - fabricObject.pathOffset.y) / polygonBaseSize.y;
fabricObject.setPositionByOrigin(absolutePoint, newX + 0.5, newY + 0.5);
for (var index_point = 0; index_point < MAX_SIZE_POINTS; index_point++)
currentPointPosition2[index_point] = fabricObject.points[index_point];
if (g_check_cross == 1) {
currentPointPosition2[0].x = 156;
currentPointPosition2[0].y = 64;
currentPointPosition2[1].x = 156;
currentPointPosition2[1].y = 160;
currentPointPosition2[2].x = 156;
currentPointPosition2[2].y = 256;
currentPointPosition2[3].x = 313;
currentPointPosition2[3].y = 256;
currentPointPosition2[4].x = 313;
currentPointPosition2[4].y = 160;
currentPointPosition2[5].x = 313;
currentPointPosition2[5].y = 64;
g_check_cross = 0;
}
if (g_enable_show_direction == 1 || (parseInt(parking_space[1], 10) >= 1 && parseInt(parking_line[1], 10) >= 1)) {
currentPointPosition2[4].x = (currentPointPosition2[0].x * 1 + currentPointPosition2[3].x * 2) / 3;
currentPointPosition2[4].y = (currentPointPosition2[0].y * 1 + currentPointPosition2[3].y * 2) / 3;
currentPointPosition2[5].x = (currentPointPosition2[0].x * 2 + currentPointPosition2[3].x * 1) / 3;
currentPointPosition2[5].y = (currentPointPosition2[0].y * 2 + currentPointPosition2[3].y * 1) / 3;
}
different_index = anchorIndex;
show_pixels_for_zone();
Edit_Arrow();
return actionPerformed;
}
}
function anchorWrapper3(anchorIndex, fn) {
return function (eventData, transform, x, y) {
var fabricObject = transform.target,
absolutePoint = fabric.util.transformPoint({
x: (fabricObject.points[anchorIndex].x - fabricObject.pathOffset.x),
y: (fabricObject.points[anchorIndex].y - fabricObject.pathOffset.y),
}, fabricObject.calcTransformMatrix()),
actionPerformed = fn(eventData, transform, x, y),
newDim = fabricObject._setPositionDimensions({}),
polygonBaseSize = fabricObject._getNonTransformedDimensions(),
newX = (fabricObject.points[anchorIndex].x - fabricObject.pathOffset.x) / polygonBaseSize.x,
newY = (fabricObject.points[anchorIndex].y - fabricObject.pathOffset.y) / polygonBaseSize.y;
fabricObject.setPositionByOrigin(absolutePoint, newX + 0.5, newY + 0.5);
for (var index_point = 0; index_point < MAX_SIZE_POINTS; index_point++)
currentPointPosition3[index_point] = fabricObject.points[index_point];
if (g_check_cross == 1) {
currentPointPosition3[0].x = 156;
currentPointPosition3[0].y = 64;
currentPointPosition3[1].x = 156;
currentPointPosition3[1].y = 160;
currentPointPosition3[2].x = 156;
currentPointPosition3[2].y = 256;
currentPointPosition3[3].x = 313;
currentPointPosition3[3].y = 256;
currentPointPosition3[4].x = 313;
currentPointPosition3[4].y = 160;
currentPointPosition3[5].x = 313;
currentPointPosition3[5].y = 64;
g_check_cross = 0;
}
if (g_enable_show_direction == 1 || (parseInt(parking_space[2], 10) >= 1 && parseInt(parking_line[2], 10) >= 1)) {
currentPointPosition3[4].x = (currentPointPosition3[0].x * 1 + currentPointPosition3[3].x * 2) / 3;
currentPointPosition3[4].y = (currentPointPosition3[0].y * 1 + currentPointPosition3[3].y * 2) / 3;
currentPointPosition3[5].x = (currentPointPosition3[0].x * 2 + currentPointPosition3[3].x * 1) / 3;
currentPointPosition3[5].y = (currentPointPosition3[0].y * 2 + currentPointPosition3[3].y * 1) / 3;
}
different_index = anchorIndex;
show_pixels_for_zone();
Edit_Arrow();
return actionPerformed;
}
}
function anchorWrapper4(anchorIndex, fn) {
return function (eventData, transform, x, y) {
var fabricObject = transform.target,
absolutePoint = fabric.util.transformPoint({
x: (fabricObject.points[anchorIndex].x - fabricObject.pathOffset.x),
y: (fabricObject.points[anchorIndex].y - fabricObject.pathOffset.y),
}, fabricObject.calcTransformMatrix()),
actionPerformed = fn(eventData, transform, x, y),
newDim = fabricObject._setPositionDimensions({}),
polygonBaseSize = fabricObject._getNonTransformedDimensions(),
newX = (fabricObject.points[anchorIndex].x - fabricObject.pathOffset.x) / polygonBaseSize.x,
newY = (fabricObject.points[anchorIndex].y - fabricObject.pathOffset.y) / polygonBaseSize.y;
fabricObject.setPositionByOrigin(absolutePoint, newX + 0.5, newY + 0.5);
for (var index_point = 0; index_point < MAX_SIZE_POINTS; index_point++)
currentPointPosition4[index_point] = fabricObject.points[index_point];
if (g_check_cross == 1) {
currentPointPosition4[0].x = 156;
currentPointPosition4[0].y = 64;
currentPointPosition4[1].x = 156;
currentPointPosition4[1].y = 160;
currentPointPosition4[2].x = 156;
currentPointPosition4[2].y = 256;
currentPointPosition4[3].x = 313;
currentPointPosition4[3].y = 256;
currentPointPosition4[4].x = 313;
currentPointPosition4[4].y = 160;
currentPointPosition4[5].x = 313;
currentPointPosition4[5].y = 64;
g_check_cross = 0;
}
if (g_enable_show_direction == 1 || (parseInt(parking_space[3], 10) >= 1 && parseInt(parking_line[3], 10) >= 1)) {
currentPointPosition4[4].x = (currentPointPosition4[0].x * 1 + currentPointPosition4[3].x * 2) / 3;
currentPointPosition4[4].y = (currentPointPosition4[0].y * 1 + currentPointPosition4[3].y * 2) / 3;
currentPointPosition4[5].x = (currentPointPosition4[0].x * 2 + currentPointPosition4[3].x * 1) / 3;
currentPointPosition4[5].y = (currentPointPosition4[0].y * 2 + currentPointPosition4[3].y * 1) / 3;
}
different_index = anchorIndex;
show_pixels_for_zone();
Edit_Arrow();
return actionPerformed;
}
}
function anchorWrapper5(anchorIndex, fn) {
return function (eventData, transform, x, y) {
var fabricObject = transform.target,
absolutePoint = fabric.util.transformPoint({
x: (fabricObject.points[anchorIndex].x - fabricObject.pathOffset.x),
y: (fabricObject.points[anchorIndex].y - fabricObject.pathOffset.y),
}, fabricObject.calcTransformMatrix()),
actionPerformed = fn(eventData, transform, x, y),
newDim = fabricObject._setPositionDimensions({}),
polygonBaseSize = fabricObject._getNonTransformedDimensions(),
newX = (fabricObject.points[anchorIndex].x - fabricObject.pathOffset.x) / polygonBaseSize.x,
newY = (fabricObject.points[anchorIndex].y - fabricObject.pathOffset.y) / polygonBaseSize.y;
fabricObject.setPositionByOrigin(absolutePoint, newX + 0.5, newY + 0.5);
for (var index_point = 0; index_point < MAX_SIZE_POINTS; index_point++)
currentPointPosition5[index_point] = fabricObject.points[index_point];
if (g_check_cross == 1) {
currentPointPosition5[0].x = 156;
currentPointPosition5[0].y = 64;
currentPointPosition5[1].x = 156;
currentPointPosition5[1].y = 160;
currentPointPosition5[2].x = 156;
currentPointPosition5[2].y = 256;
currentPointPosition5[3].x = 313;
currentPointPosition5[3].y = 256;
currentPointPosition5[4].x = 313;
currentPointPosition5[4].y = 160;
currentPointPosition5[5].x = 313;
currentPointPosition5[5].y = 64;
g_check_cross = 0;
}
if (g_enable_show_direction == 1 || (parseInt(parking_space[3], 10) >= 1 && parseInt(parking_line[3], 10) >= 1)) {
currentPointPosition5[4].x = (currentPointPosition5[0].x * 1 + currentPointPosition5[3].x * 2) / 3;
currentPointPosition5[4].y = (currentPointPosition5[0].y * 1 + currentPointPosition5[3].y * 2) / 3;
currentPointPosition5[5].x = (currentPointPosition5[0].x * 2 + currentPointPosition5[3].x * 1) / 3;
currentPointPosition5[5].y = (currentPointPosition5[0].y * 2 + currentPointPosition5[3].y * 1) / 3;
}
different_index = anchorIndex;
show_pixels_for_zone();
Edit_Arrow();
return actionPerformed;
}
}
function anchorWrapper6(anchorIndex, fn) {
return function (eventData, transform, x, y) {
var fabricObject = transform.target,
absolutePoint = fabric.util.transformPoint({
x: (fabricObject.points[anchorIndex].x - fabricObject.pathOffset.x),
y: (fabricObject.points[anchorIndex].y - fabricObject.pathOffset.y),
}, fabricObject.calcTransformMatrix()),
actionPerformed = fn(eventData, transform, x, y),
newDim = fabricObject._setPositionDimensions({}),
polygonBaseSize = fabricObject._getNonTransformedDimensions(),
newX = (fabricObject.points[anchorIndex].x - fabricObject.pathOffset.x) / polygonBaseSize.x,
newY = (fabricObject.points[anchorIndex].y - fabricObject.pathOffset.y) / polygonBaseSize.y;
fabricObject.setPositionByOrigin(absolutePoint, newX + 0.5, newY + 0.5);
for (var index_point = 0; index_point < MAX_SIZE_POINTS; index_point++)
currentPointPosition6[index_point] = fabricObject.points[index_point];
if (g_check_cross == 1) {
currentPointPosition6[0].x = 156;
currentPointPosition6[0].y = 64;
currentPointPosition6[1].x = 156;
currentPointPosition6[1].y = 160;
currentPointPosition6[2].x = 156;
currentPointPosition6[2].y = 256;
currentPointPosition6[3].x = 313;
currentPointPosition6[3].y = 256;
currentPointPosition6[4].x = 313;
currentPointPosition6[4].y = 160;
currentPointPosition6[5].x = 313;
currentPointPosition6[5].y = 64;
g_check_cross = 0;
}
if (g_enable_show_direction == 1 || (parseInt(parking_space[3], 10) >= 1 && parseInt(parking_line[3], 10) >= 1)) {
currentPointPosition6[4].x = (currentPointPosition6[0].x * 1 + currentPointPosition6[3].x * 2) / 3;
currentPointPosition6[4].y = (currentPointPosition6[0].y * 1 + currentPointPosition6[3].y * 2) / 3;
currentPointPosition6[5].x = (currentPointPosition6[0].x * 2 + currentPointPosition6[3].x * 1) / 3;
currentPointPosition6[5].y = (currentPointPosition6[0].y * 2 + currentPointPosition6[3].y * 1) / 3;
}
different_index = anchorIndex;
show_pixels_for_zone();
Edit_Arrow();
return actionPerformed;
}
}
function anchorWrapper7(anchorIndex, fn) {
return function (eventData, transform, x, y) {
var fabricObject = transform.target,
absolutePoint = fabric.util.transformPoint({
x: (fabricObject.points[anchorIndex].x - fabricObject.pathOffset.x),
y: (fabricObject.points[anchorIndex].y - fabricObject.pathOffset.y),
}, fabricObject.calcTransformMatrix()),
actionPerformed = fn(eventData, transform, x, y),
newDim = fabricObject._setPositionDimensions({}),
polygonBaseSize = fabricObject._getNonTransformedDimensions(),
newX = (fabricObject.points[anchorIndex].x - fabricObject.pathOffset.x) / polygonBaseSize.x,
newY = (fabricObject.points[anchorIndex].y - fabricObject.pathOffset.y) / polygonBaseSize.y;
fabricObject.setPositionByOrigin(absolutePoint, newX + 0.5, newY + 0.5);
for (var index_point = 0; index_point < MAX_SIZE_POINTS; index_point++)
currentPointPosition7[index_point] = fabricObject.points[index_point];
if (g_check_cross == 1) {
currentPointPosition7[0].x = 156;
currentPointPosition7[0].y = 64;
currentPointPosition7[1].x = 156;
currentPointPosition7[1].y = 160;
currentPointPosition7[2].x = 156;
currentPointPosition7[2].y = 256;
currentPointPosition7[3].x = 313;
currentPointPosition7[3].y = 256;
currentPointPosition7[4].x = 313;
currentPointPosition7[4].y = 160;
currentPointPosition7[5].x = 313;
currentPointPosition7[5].y = 64;
g_check_cross = 0;
}
if (g_enable_show_direction == 1 || (parseInt(parking_space[3], 10) >= 1 && parseInt(parking_line[3], 10) >= 1)) {
currentPointPosition7[4].x = (currentPointPosition7[0].x * 1 + currentPointPosition7[3].x * 2) / 3;
currentPointPosition7[4].y = (currentPointPosition7[0].y * 1 + currentPointPosition7[3].y * 2) / 3;
currentPointPosition7[5].x = (currentPointPosition7[0].x * 2 + currentPointPosition7[3].x * 1) / 3;
currentPointPosition7[5].y = (currentPointPosition7[0].y * 2 + currentPointPosition7[3].y * 1) / 3;
}
different_index = anchorIndex;
show_pixels_for_zone();
Edit_Arrow();
return actionPerformed;
}
}
function anchorWrapper8(anchorIndex, fn) {
return function (eventData, transform, x, y) {
var fabricObject = transform.target,
absolutePoint = fabric.util.transformPoint({
x: (fabricObject.points[anchorIndex].x - fabricObject.pathOffset.x),
y: (fabricObject.points[anchorIndex].y - fabricObject.pathOffset.y),
}, fabricObject.calcTransformMatrix()),
actionPerformed = fn(eventData, transform, x, y),
newDim = fabricObject._setPositionDimensions({}),
polygonBaseSize = fabricObject._getNonTransformedDimensions(),
newX = (fabricObject.points[anchorIndex].x - fabricObject.pathOffset.x) / polygonBaseSize.x,
newY = (fabricObject.points[anchorIndex].y - fabricObject.pathOffset.y) / polygonBaseSize.y;
fabricObject.setPositionByOrigin(absolutePoint, newX + 0.5, newY + 0.5);
for (var index_point = 0; index_point < MAX_SIZE_POINTS; index_point++)
currentPointPosition8[index_point] = fabricObject.points[index_point];
if (g_check_cross == 1) {
currentPointPosition8[0].x = 156;
currentPointPosition8[0].y = 64;
currentPointPosition8[1].x = 156;
currentPointPosition8[1].y = 160;
currentPointPosition8[2].x = 156;
currentPointPosition8[2].y = 256;
currentPointPosition8[3].x = 313;
currentPointPosition8[3].y = 256;
currentPointPosition8[4].x = 313;
currentPointPosition8[4].y = 160;
currentPointPosition8[5].x = 313;
currentPointPosition8[5].y = 64;
g_check_cross = 0;
}
if (g_enable_show_direction == 1 || (parseInt(parking_space[3], 10) >= 1 && parseInt(parking_line[3], 10) >= 1)) {
currentPointPosition8[4].x = (currentPointPosition8[0].x * 1 + currentPointPosition8[3].x * 2) / 3;
currentPointPosition8[4].y = (currentPointPosition8[0].y * 1 + currentPointPosition8[3].y * 2) / 3;
currentPointPosition8[5].x = (currentPointPosition8[0].x * 2 + currentPointPosition8[3].x * 1) / 3;
currentPointPosition8[5].y = (currentPointPosition8[0].y * 2 + currentPointPosition8[3].y * 1) / 3;
}
different_index = anchorIndex;
show_pixels_for_zone();
Edit_Arrow();
return actionPerformed;
}
}
var check_edit1 = 0;
var check_edit2 = 0;
var check_edit3 = 0;
var check_edit4 = 0;
var check_edit5 = 0;
var check_edit6 = 0;
var check_edit7 = 0;
var check_edit8 = 0;
function get_check_edit1() {
return check_edit1;
}
function get_check_edit2() {
return check_edit2;
}
function get_check_edit3() {
return check_edit3;
}
function get_check_edit4() {
return check_edit4;
}
function get_check_edit5() {
return check_edit5;
}
function get_check_edit6() {
return check_edit6;
}
function get_check_edit7() {
return check_edit7;
}
function get_check_edit8() {
return check_edit8;
}
function Edit1() {
// clone what are you copying since you
// may want copy and paste on different moment.
// and you do not want the changes happened
// later to reflect on the copy.
var poly1 = canvasTripwire1.getObjects()[0];
canvasTripwire1.setActiveObject(poly1);
poly1.edit = !poly1.edit;
if (poly1.edit) {
var lastControl1 = poly1.points.length - 1;
poly1.cornerStyle = 'circle';
poly1.cornerColor = "rgba(108, 135, 212, 0.8)";
poly1.cornerSize = 20;
poly1.controls = poly1.points.reduce(function (acc1, point1, index1) {
acc1['p' + index1] = new fabric.Control({
positionHandler: polygonPositionHandler,
actionHandler: anchorWrapper1(index1 > 0 ? index1 - 1 : lastControl1, func_actionHandler),
actionName: 'modifyPolygon1',
pointIndex: index1
});
return acc1;
}, {});
check_edit1 = 1;
} else {
//poly1.cornerColor = 'black';
//poly1.cornerStyle = 'rect';
//poly1.controls = fabric.Object.prototype.controls;
poly1.controls = null;
poly1.cornerColor = null;
poly1.cornerStyle = null;
check_edit1 = 0;
}
poly1.hasBorders = !poly1.edit;
canvasTripwire1.requestRenderAll();
}
function Edit2() {
// clone what are you copying since you
// may want copy and paste on different moment.
// and you do not want the changes happened
// later to reflect on the copy.
var poly2 = canvasTripwire2.getObjects()[0];
canvasTripwire2.setActiveObject(poly2);
poly2.edit = !poly2.edit;
if (poly2.edit) {
var lastControl2 = poly2.points.length - 1;
poly2.cornerStyle = 'circle';
poly2.cornerColor = "rgba(108, 135, 212, 0.8)";
poly2.cornerSize = 20;
poly2.controls = poly2.points.reduce(function (acc2, point2, index2) {
acc2['p' + index2] = new fabric.Control({
positionHandler: polygonPositionHandler,
actionHandler: anchorWrapper2(index2 > 0 ? index2 - 1 : lastControl2, func_actionHandler),
actionName: 'modifyPolygon2',
pointIndex: index2
});
return acc2;
}, {});
check_edit2 = 1;
} else {
//poly2.cornerColor = 'black';
//poly2.cornerStyle = 'rect';
//poly2.controls = fabric.Object.prototype.controls;
poly2.controls = null;
poly2.cornerColor = null;
poly2.cornerStyle = null;
check_edit2 = 0;
}
poly2.hasBorders = !poly2.edit;
canvasTripwire2.requestRenderAll();
}
function Edit3() {
// clone what are you copying since you
// may want copy and paste on different moment.
// and you do not want the changes happened
// later to reflect on the copy.
var poly3 = canvasTripwire3.getObjects()[0];
canvasTripwire3.setActiveObject(poly3);
poly3.edit = !poly3.edit;
if (poly3.edit) {
var lastControl3 = poly3.points.length - 1;
poly3.cornerStyle = 'circle';
poly3.cornerColor = "rgba(108, 135, 212, 0.8)";
poly3.cornerSize = 20;
poly3.controls = poly3.points.reduce(function (acc3, point3, index3) {
acc3['p' + index3] = new fabric.Control({
positionHandler: polygonPositionHandler,
actionHandler: anchorWrapper3(index3 > 0 ? index3 - 1 : lastControl3, func_actionHandler),
actionName: 'modifyPolygon3',
pointIndex: index3
});
return acc3;
}, {});
check_edit3 = 1;
} else {
//poly3.cornerColor = 'black';
//poly3.cornerStyle = 'rect';
//poly3.controls = fabric.Object.prototype.controls;
poly3.controls = null;
poly3.cornerColor = null;
poly3.cornerStyle = null;
check_edit3 = 0;
}
poly3.hasBorders = !poly3.edit;
canvasTripwire3.requestRenderAll();
}
function Edit4() {
// clone what are you copying since you
// may want copy and paste on different moment.
// and you do not want the changes happened
// later to reflect on the copy.
var poly4 = canvasTripwire4.getObjects()[0];
canvasTripwire4.setActiveObject(poly4);
poly4.edit = !poly4.edit;
if (poly4.edit) {
var lastControl4 = poly4.points.length - 1;
poly4.cornerStyle = 'circle';
poly4.cornerColor = "rgba(108, 135, 212, 0.8)";
poly4.cornerSize = 20;
poly4.controls = poly4.points.reduce(function (acc4, point4, index4) {
acc4['p' + index4] = new fabric.Control({
positionHandler: polygonPositionHandler,
actionHandler: anchorWrapper4(index4 > 0 ? index4 - 1 : lastControl4, func_actionHandler),
actionName: 'modifyPolygon4',
pointIndex: index4
});
return acc4;
}, {});
check_edit4 = 1;
} else {
//poly4.cornerColor = 'black';
//poly4.cornerStyle = 'rect';
//poly4.controls = fabric.Object.prototype.controls;
poly4.controls = null;
poly4.cornerColor = null;
poly4.cornerStyle = null;
check_edit4 = 0;
}
poly4.hasBorders = !poly4.edit;
canvasTripwire4.requestRenderAll();
}
function Edit5() {
// clone what are you copying since you
// may want copy and paste on different moment.
// and you do not want the changes happened
// later to reflect on the copy.
var poly5 = canvasTripwire5.getObjects()[0];
canvasTripwire5.setActiveObject(poly5);
poly5.edit = !poly5.edit;
if (poly5.edit) {
var lastControl5 = poly5.points.length - 1;
poly5.cornerStyle = 'circle';
poly5.cornerColor = "rgba(108, 135, 212, 0.8)";
poly5.cornerSize = 20;
poly5.controls = poly5.points.reduce(function (acc5, point5, index5) {
acc5['p' + index5] = new fabric.Control({
positionHandler: polygonPositionHandler,
actionHandler: anchorWrapper5(index5 > 0 ? index5 - 1 : lastControl5, func_actionHandler),
actionName: 'modifyPolygon5',
pointIndex: index5
});
return acc5;
}, {});
check_edit5 = 1;
} else {
//poly4.cornerColor = 'black';
//poly4.cornerStyle = 'rect';
//poly4.controls = fabric.Object.prototype.controls;
poly5.controls = null;
poly5.cornerColor = null;
poly5.cornerStyle = null;
check_edit5 = 0;
}
poly5.hasBorders = !poly5.edit;
canvasTripwire5.requestRenderAll();
}
function Edit6() {
// clone what are you copying since you
// may want copy and paste on different moment.
// and you do not want the changes happened
// later to reflect on the copy.
var poly6 = canvasTripwire6.getObjects()[0];
canvasTripwire6.setActiveObject(poly6);
poly6.edit = !poly6.edit;
if (poly6.edit) {
var lastControl6 = poly6.points.length - 1;
poly6.cornerStyle = 'circle';
poly6.cornerColor = "rgba(108, 135, 212, 0.8)";
poly6.cornerSize = 20;
poly6.controls = poly6.points.reduce(function (acc6, point6, index6) {
acc6['p' + index6] = new fabric.Control({
positionHandler: polygonPositionHandler,
actionHandler: anchorWrapper6(index6 > 0 ? index6 - 1 : lastControl6, func_actionHandler),
actionName: 'modifyPolygon6',
pointIndex: index6
});
return acc6;
}, {});
check_edit6 = 1;
} else {
//poly4.cornerColor = 'black';
//poly4.cornerStyle = 'rect';
//poly4.controls = fabric.Object.prototype.controls;
poly6.controls = null;
poly6.cornerColor = null;
poly6.cornerStyle = null;
check_edit6 = 0;
}
poly6.hasBorders = !poly6.edit;
canvasTripwire6.requestRenderAll();
}
function Edit7() {
// clone what are you copying since you
// may want copy and paste on different moment.
// and you do not want the changes happened
// later to reflect on the copy.
var poly7 = canvasTripwire7.getObjects()[0];
canvasTripwire7.setActiveObject(poly7);
poly7.edit = !poly7.edit;
if (poly7.edit) {
var lastControl7 = poly7.points.length - 1;
poly7.cornerStyle = 'circle';
poly7.cornerColor = "rgba(108, 135, 212, 0.8)";
poly7.cornerSize = 20;
poly7.controls = poly7.points.reduce(function (acc7, point7, index7) {
acc7['p' + index7] = new fabric.Control({
positionHandler: polygonPositionHandler,
actionHandler: anchorWrapper7(index7 > 0 ? index7 - 1 : lastControl7, func_actionHandler),
actionName: 'modifyPolygon7',
pointIndex: index7
});
return acc7;
}, {});
check_edit7 = 1;
} else {
//poly4.cornerColor = 'black';
//poly4.cornerStyle = 'rect';
//poly4.controls = fabric.Object.prototype.controls;
poly7.controls = null;
poly7.cornerColor = null;
poly7.cornerStyle = null;
check_edit7 = 0;
}
poly7.hasBorders = !poly7.edit;
canvasTripwire7.requestRenderAll();
}
function Edit8() {
// clone what are you copying since you
// may want copy and paste on different moment.
// and you do not want the changes happened
// later to reflect on the copy.
var poly8 = canvasTripwire8.getObjects()[0];
canvasTripwire8.setActiveObject(poly8);
poly8.edit = !poly8.edit;
if (poly8.edit) {
var lastControl8 = poly8.points.length - 1;
poly8.cornerStyle = 'circle';
poly8.cornerColor = "rgba(108, 135, 212, 0.8)";
poly8.cornerSize = 20;
poly8.controls = poly8.points.reduce(function (acc8, point8, index8) {
acc8['p' + index8] = new fabric.Control({
positionHandler: polygonPositionHandler,
actionHandler: anchorWrapper8(index8 > 0 ? index8 - 1 : lastControl8, func_actionHandler),
actionName: 'modifyPolygon8',
pointIndex: index8
});
return acc8;
}, {});
check_edit8 = 1;
} else {
//poly4.cornerColor = 'black';
//poly4.cornerStyle = 'rect';
//poly4.controls = fabric.Object.prototype.controls;
poly8.controls = null;
poly8.cornerColor = null;
poly8.cornerStyle = null;
check_edit8 = 0;
}
poly8.hasBorders = !poly8.edit;
canvasTripwire8.requestRenderAll();
}
function createCanvasTrafficLight() {
canvasTripwire = new fabric.Canvas('CanvasTripwire', {
height: G_VIEW_CANVAS_Y,//window.innerHeight
width: G_VIEW_CANVAS_X//window.innerWidth
});
canvasTripwire.requestRenderAll();
}
//-----------------------------------------------------------------------------------------------------------------
function polygonArea(points) {
var i, j;
var area = 0;
for (i = 0; i < points.length; i++) {
j = (i+1) % points.length;
area += points[i].x * points[j].y;
area -= points[i].y * points[j].x;
}
area /= 2;
return Math.abs(area);
}
function func_rotate_direction() {
g_mydirection[g_zone_id]++;
if (g_mydirection[g_zone_id] === 5) {
g_mydirection[g_zone_id] = 1;
}
Edit_Arrow();
}
function func_set_direction(temp_direction,temp_zone_id) {
if (temp_direction >= 1 && temp_direction <= 4) {
g_mydirection[temp_zone_id] = temp_direction;
}
}
function func_get_direction(temp_zone_id) {
return g_mydirection[temp_zone_id];
}
var g_first_edit_zone = 0;
function Edit_Zone(enable_zone_in_four_point) {
if (g_zone_id >= 0 && g_zone_id <= 7) {
g_first_edit_zone = 1;
MAX_SIZE_POINTS = 6;
points_array = GetPointLocation(g_zone_id);
if (enable_zone_in_four_point === 0)
MAX_SIZE_POINTS = 6;
else
MAX_SIZE_POINTS = 4;
var temp_points_array = [];
for (var i = 0; i < MAX_SIZE_POINTS; i++) {
temp_points_array.push({
x: 0,
y: 0
});
}
var min_x_temp = 10000;
var min_y_temp = 10000;
for (var i = 0; i < MAX_SIZE_POINTS; i++) {
temp_points_array[i].x = points_array[i].x;
temp_points_array[i].y = points_array[i].y;
if (temp_points_array[i].x < min_x_temp)
min_x_temp = temp_points_array[i].x;
if (temp_points_array[i].y < min_y_temp)
min_y_temp = temp_points_array[i].y;
}
var polygon_zone_temp = new fabric.Polygon(temp_points_array, {
left: min_x_temp,
top: min_y_temp,
fill: 'transparent',
strokeWidth: 2,
stroke: '#ffff00',
scaleX: 1,
scaleY: 1,
opacity: 0.7,
objectCaching: false,
transparentCorners: false,
//cornerColor: '#ff0000',
});
polygon_zone_temp.lockMovementX = true; //Prevents horizontal movement
polygon_zone_temp.lockMovementY = true; //Prevents vertical movement
if (g_zone_id === 0) {
canvasTripwire1.insertAt(polygon_zone_temp, 0, true);
disabelIteraction(canvasTripwire2.getObjects()[0]);
disabelIteraction(canvasTripwire3.getObjects()[0]);
disabelIteraction(canvasTripwire4.getObjects()[0]);
disabelIteraction(canvasTripwire5.getObjects()[0]);
disabelIteraction(canvasTripwire6.getObjects()[0]);
disabelIteraction(canvasTripwire7.getObjects()[0]);
disabelIteraction(canvasTripwire8.getObjects()[0]);
Edit1();
}
else if (g_zone_id === 1) {
canvasTripwire2.insertAt(polygon_zone_temp, 0, true);
disabelIteraction(canvasTripwire1.getObjects()[0]);
disabelIteraction(canvasTripwire3.getObjects()[0]);
disabelIteraction(canvasTripwire4.getObjects()[0]);
disabelIteraction(canvasTripwire5.getObjects()[0]);
disabelIteraction(canvasTripwire6.getObjects()[0]);
disabelIteraction(canvasTripwire7.getObjects()[0]);
disabelIteraction(canvasTripwire8.getObjects()[0]);
Edit2();
}
else if (g_zone_id === 2) {
canvasTripwire3.insertAt(polygon_zone_temp, 0, true);
disabelIteraction(canvasTripwire1.getObjects()[0]);
disabelIteraction(canvasTripwire2.getObjects()[0]);
disabelIteraction(canvasTripwire4.getObjects()[0]);
disabelIteraction(canvasTripwire5.getObjects()[0]);
disabelIteraction(canvasTripwire6.getObjects()[0]);
disabelIteraction(canvasTripwire7.getObjects()[0]);
disabelIteraction(canvasTripwire8.getObjects()[0]);
Edit3();
}
else if (g_zone_id === 3) {
canvasTripwire4.insertAt(polygon_zone_temp, 0, true);
disabelIteraction(canvasTripwire1.getObjects()[0]);
disabelIteraction(canvasTripwire2.getObjects()[0]);
disabelIteraction(canvasTripwire3.getObjects()[0]);
disabelIteraction(canvasTripwire5.getObjects()[0]);
disabelIteraction(canvasTripwire6.getObjects()[0]);
disabelIteraction(canvasTripwire7.getObjects()[0]);
disabelIteraction(canvasTripwire8.getObjects()[0]);
Edit4();
}
else if (g_zone_id === 4) {
canvasTripwire5.insertAt(polygon_zone_temp, 0, true);
disabelIteraction(canvasTripwire1.getObjects()[0]);
disabelIteraction(canvasTripwire2.getObjects()[0]);
disabelIteraction(canvasTripwire3.getObjects()[0]);
disabelIteraction(canvasTripwire4.getObjects()[0]);
disabelIteraction(canvasTripwire6.getObjects()[0]);
disabelIteraction(canvasTripwire7.getObjects()[0]);
disabelIteraction(canvasTripwire8.getObjects()[0]);
Edit5();
}
else if (g_zone_id === 5) {
canvasTripwire6.insertAt(polygon_zone_temp, 0, true);
disabelIteraction(canvasTripwire1.getObjects()[0]);
disabelIteraction(canvasTripwire2.getObjects()[0]);
disabelIteraction(canvasTripwire3.getObjects()[0]);
disabelIteraction(canvasTripwire4.getObjects()[0]);
disabelIteraction(canvasTripwire5.getObjects()[0]);
disabelIteraction(canvasTripwire7.getObjects()[0]);
disabelIteraction(canvasTripwire8.getObjects()[0]);
Edit6();
}
else if (g_zone_id === 6) {
canvasTripwire7.insertAt(polygon_zone_temp, 0, true);
disabelIteraction(canvasTripwire1.getObjects()[0]);
disabelIteraction(canvasTripwire2.getObjects()[0]);
disabelIteraction(canvasTripwire3.getObjects()[0]);
disabelIteraction(canvasTripwire4.getObjects()[0]);
disabelIteraction(canvasTripwire5.getObjects()[0]);
disabelIteraction(canvasTripwire6.getObjects()[0]);
disabelIteraction(canvasTripwire8.getObjects()[0]);
Edit7();
}
else if (g_zone_id === 7) {
canvasTripwire8.insertAt(polygon_zone_temp, 0, true);
disabelIteraction(canvasTripwire1.getObjects()[0]);
disabelIteraction(canvasTripwire2.getObjects()[0]);
disabelIteraction(canvasTripwire3.getObjects()[0]);
disabelIteraction(canvasTripwire4.getObjects()[0]);
disabelIteraction(canvasTripwire5.getObjects()[0]);
disabelIteraction(canvasTripwire6.getObjects()[0]);
disabelIteraction(canvasTripwire7.getObjects()[0]);
Edit8();
}
}
}
function Edit_Arrow() {
points_array = GetPointLocation(g_zone_id);
if (g_zone_id >= 0 && g_zone_id <= 7) {
var index_point = g_mydirection[g_zone_id] - 1;
var next_point = index_point + 1 >= 4 ? 0 : index_point + 1;
var start_x = points_array[next_point].x;
var start_y = points_array[next_point].y;
var end_x = points_array[index_point].x;
var end_y = points_array[index_point].y;
if (g_zone_id === 0)
canvasTripwire1.insertAt(AddArrowObject(start_x, start_y, end_x, end_y), 1, true);
else if (g_zone_id === 1)
canvasTripwire2.insertAt(AddArrowObject(start_x, start_y, end_x, end_y), 1, true);
else if (g_zone_id === 2)
canvasTripwire3.insertAt(AddArrowObject(start_x, start_y, end_x, end_y), 1, true);
else if (g_zone_id === 3)
canvasTripwire4.insertAt(AddArrowObject(start_x, start_y, end_x, end_y), 1, true);
else if (g_zone_id === 4)
canvasTripwire5.insertAt(AddArrowObject(start_x, start_y, end_x, end_y), 1, true);
else if (g_zone_id === 5)
canvasTripwire6.insertAt(AddArrowObject(start_x, start_y, end_x, end_y), 1, true);
else if (g_zone_id === 6)
canvasTripwire7.insertAt(AddArrowObject(start_x, start_y, end_x, end_y), 1, true);
else if (g_zone_id === 7)
canvasTripwire8.insertAt(AddArrowObject(start_x, start_y, end_x, end_y), 1, true);
}
}
function set_g_zone_id(zone_id) {
g_zone_id = zone_id;
}
function show_pixels_for_zone() {
linelengths_list = "";
var linelengths_list_2 = "";
var linelengths_list_3 = "";
points_array = GetPointLocation(g_zone_id);
var temp_different_index = different_index + 1 < MAX_SIZE_POINTS ? different_index + 1: 0;
var last_different_index = temp_different_index - 1 >= 0 ? temp_different_index - 1 : MAX_SIZE_POINTS - 1;
var next_different_index = temp_different_index + 1 < MAX_SIZE_POINTS ? temp_different_index + 1 : 0;
var current_x = points_array[temp_different_index].x * G_CAM_SENSOR_RES_WIDTH / G_VIEW_CANVAS_X;
var current_y = points_array[temp_different_index].y * G_CAM_SENSOR_RES_HEIGHT / G_VIEW_CANVAS_Y;
var last_x = points_array[last_different_index].x * G_CAM_SENSOR_RES_WIDTH / G_VIEW_CANVAS_X;
var last_y = points_array[last_different_index].y * G_CAM_SENSOR_RES_HEIGHT / G_VIEW_CANVAS_Y;
var next_x = points_array[next_different_index].x * G_CAM_SENSOR_RES_WIDTH / G_VIEW_CANVAS_X;
var next_y = points_array[next_different_index].y * G_CAM_SENSOR_RES_HEIGHT / G_VIEW_CANVAS_Y;
var linelength1 = Math.sqrt(Math.pow((current_x - last_x), 2) + Math.pow((current_y - last_y), 2));
var linelength2 = Math.sqrt(Math.pow((next_x - current_x), 2) + Math.pow((next_y - current_y), 2));
linelengths_list += linelength1.toFixed(2) + " px\n";
linelengths_list_2 += linelength2.toFixed(2) + " px\n";
linelengths_list_3 += "FOV: " + ((polygonArea(points_array) / (G_VIEW_CANVAS_X * G_VIEW_CANVAS_Y))*100).toFixed(0) + " %\n";
var max_protected_objects = g_max_protected_objects;
if (g_zone_id === 0) {
while (canvasTripwire1.getObjects().length > max_protected_objects) {
var items = canvasTripwire1.getObjects();
if (items[canvasTripwire1.getObjects().length - 1]) {
canvasTripwire1.remove(items[canvasTripwire1.getObjects().length - 1]);
}
}
canvasTripwire1.add(insertTextLabel_Orange((points_array[temp_different_index].x + points_array[last_different_index].x) / 2, (points_array[temp_different_index].y + points_array[last_different_index].y) / 2, 50, 50, linelengths_list));
canvasTripwire1.add(insertTextLabel_Orange((points_array[temp_different_index].x + points_array[next_different_index].x) / 2, (points_array[temp_different_index].y + points_array[next_different_index].y) / 2, 50, 50, linelengths_list_2));
canvasTripwire1.add(insertTextLabel_Orange(0, 0, 50, 50, linelengths_list_3));
g_enable_show_pixel = 1;
setTimeout(function () { g_enable_show_pixel = 0; },3000);
}
else if (g_zone_id === 1) {
while (canvasTripwire2.getObjects().length > max_protected_objects) {
var items = canvasTripwire2.getObjects();
if (items[canvasTripwire2.getObjects().length - 1]) {
canvasTripwire2.remove(items[canvasTripwire2.getObjects().length - 1]);
}
}
canvasTripwire2.add(insertTextLabel_Orange((points_array[temp_different_index].x + points_array[last_different_index].x) / 2, (points_array[temp_different_index].y + points_array[last_different_index].y) / 2, 50, 50, linelengths_list));
canvasTripwire2.add(insertTextLabel_Orange((points_array[temp_different_index].x + points_array[next_different_index].x) / 2, (points_array[temp_different_index].y + points_array[next_different_index].y) / 2, 50, 50, linelengths_list_2));
canvasTripwire2.add(insertTextLabel_Orange(0, 0, 50, 50, linelengths_list_3));
g_enable_show_pixel = 1;
setTimeout(function () { g_enable_show_pixel = 0; }, 3000);
}
else if (g_zone_id === 2) {
while (canvasTripwire3.getObjects().length > max_protected_objects) {
var items = canvasTripwire3.getObjects();
if (items[canvasTripwire3.getObjects().length - 1]) {
canvasTripwire3.remove(items[canvasTripwire3.getObjects().length - 1]);
}
}
canvasTripwire3.add(insertTextLabel_Orange((points_array[temp_different_index].x + points_array[last_different_index].x) / 2, (points_array[temp_different_index].y + points_array[last_different_index].y) / 2, 50, 50, linelengths_list));
canvasTripwire3.add(insertTextLabel_Orange((points_array[temp_different_index].x + points_array[next_different_index].x) / 2, (points_array[temp_different_index].y + points_array[next_different_index].y) / 2, 50, 50, linelengths_list_2));
canvasTripwire3.add(insertTextLabel_Orange(0, 0, 50, 50, linelengths_list_3));
g_enable_show_pixel = 1;
setTimeout(function () { g_enable_show_pixel = 0; }, 3000);
}
else if (g_zone_id === 3) {
while (canvasTripwire4.getObjects().length > max_protected_objects) {
var items = canvasTripwire4.getObjects();
if (items[canvasTripwire4.getObjects().length - 1]) {
canvasTripwire4.remove(items[canvasTripwire4.getObjects().length - 1]);
}
}
canvasTripwire4.add(insertTextLabel_Orange((points_array[temp_different_index].x + points_array[last_different_index].x) / 2, (points_array[temp_different_index].y + points_array[last_different_index].y) / 2, 50, 50, linelengths_list));
canvasTripwire4.add(insertTextLabel_Orange((points_array[temp_different_index].x + points_array[next_different_index].x) / 2, (points_array[temp_different_index].y + points_array[next_different_index].y) / 2, 50, 50, linelengths_list_2));
canvasTripwire4.add(insertTextLabel_Orange(0, 0, 50, 50, linelengths_list_3));
g_enable_show_pixel = 1;
setTimeout(function () { g_enable_show_pixel = 0; }, 3000);
}
else if (g_zone_id === 4) {
while (canvasTripwire5.getObjects().length > max_protected_objects) {
var items = canvasTripwire5.getObjects();
if (items[canvasTripwire5.getObjects().length - 1]) {
canvasTripwire5.remove(items[canvasTripwire5.getObjects().length - 1]);
}
}
canvasTripwire5.add(insertTextLabel_Orange((points_array[temp_different_index].x + points_array[last_different_index].x) / 2, (points_array[temp_different_index].y + points_array[last_different_index].y) / 2, 50, 50, linelengths_list));
canvasTripwire5.add(insertTextLabel_Orange((points_array[temp_different_index].x + points_array[next_different_index].x) / 2, (points_array[temp_different_index].y + points_array[next_different_index].y) / 2, 50, 50, linelengths_list_2));
canvasTripwire5.add(insertTextLabel_Orange(0, 0, 50, 50, linelengths_list_3));
g_enable_show_pixel = 1;
setTimeout(function () { g_enable_show_pixel = 0; }, 3000);
}
else if (g_zone_id === 5) {
while (canvasTripwire6.getObjects().length > max_protected_objects) {
var items = canvasTripwire6.getObjects();
if (items[canvasTripwire6.getObjects().length - 1]) {
canvasTripwire6.remove(items[canvasTripwire6.getObjects().length - 1]);
}
}
canvasTripwire6.add(insertTextLabel_Orange((points_array[temp_different_index].x + points_array[last_different_index].x) / 2, (points_array[temp_different_index].y + points_array[last_different_index].y) / 2, 50, 50, linelengths_list));
canvasTripwire6.add(insertTextLabel_Orange((points_array[temp_different_index].x + points_array[next_different_index].x) / 2, (points_array[temp_different_index].y + points_array[next_different_index].y) / 2, 50, 50, linelengths_list_2));
canvasTripwire6.add(insertTextLabel_Orange(0, 0, 50, 50, linelengths_list_3));
g_enable_show_pixel = 1;
setTimeout(function () { g_enable_show_pixel = 0; }, 3000);
}
else if (g_zone_id === 6) {
while (canvasTripwire7.getObjects().length > max_protected_objects) {
var items = canvasTripwire7.getObjects();
if (items[canvasTripwire7.getObjects().length - 1]) {
canvasTripwire7.remove(items[canvasTripwire7.getObjects().length - 1]);
}
}
canvasTripwire7.add(insertTextLabel_Orange((points_array[temp_different_index].x + points_array[last_different_index].x) / 2, (points_array[temp_different_index].y + points_array[last_different_index].y) / 2, 50, 50, linelengths_list));
canvasTripwire7.add(insertTextLabel_Orange((points_array[temp_different_index].x + points_array[next_different_index].x) / 2, (points_array[temp_different_index].y + points_array[next_different_index].y) / 2, 50, 50, linelengths_list_2));
canvasTripwire7.add(insertTextLabel_Orange(0, 0, 50, 50, linelengths_list_3));
g_enable_show_pixel = 1;
setTimeout(function () { g_enable_show_pixel = 0; }, 3000);
}
else if (g_zone_id === 7) {
while (canvasTripwire8.getObjects().length > max_protected_objects) {
var items = canvasTripwire8.getObjects();
if (items[canvasTripwire8.getObjects().length - 1]) {
canvasTripwire8.remove(items[canvasTripwire8.getObjects().length - 1]);
}
}
canvasTripwire8.add(insertTextLabel_Orange((points_array[temp_different_index].x + points_array[last_different_index].x) / 2, (points_array[temp_different_index].y + points_array[last_different_index].y) / 2, 50, 50, linelengths_list));
canvasTripwire8.add(insertTextLabel_Orange((points_array[temp_different_index].x + points_array[next_different_index].x) / 2, (points_array[temp_different_index].y + points_array[next_different_index].y) / 2, 50, 50, linelengths_list_2));
canvasTripwire8.add(insertTextLabel_Orange(0, 0, 50, 50, linelengths_list_3));
g_enable_show_pixel = 1;
setTimeout(function () { g_enable_show_pixel = 0; }, 3000);
}
refresh_parking_info();
}
function validatingJSON(json) {
var checkedjson;
try {
checkedjson = JSON.parse(json); //JSON parse only for try catch
//console.log("json OK");
//console.log(json);
} catch (e) {
checkedjson = null;
console.log(e);//the character would be drop sometimes, for example the label "class_id" may be "clas_id".
console.log(json);
}
return checkedjson;
}
//var last_cam_time = "";
//var count_the_same_cam_time = 0;
function get_counter_count_msg() {
return counter_count_msg;
}
var i_cold_times = 0;
var g_cold_times = 20;
function change_g_cold_times(temp_cold_times) {
g_cold_times = temp_cold_times;
}
function GetAlarm_radar_speed(alarm_data) {
// console.log(check_events_array);
for (var i = 0; i < check_events_array.length; i++) {
// console.log(document.getElementById(check_events_array[i]).checked);
if (document.getElementById(check_events_array[i]).checked === true) {
var behavior_input = document.getElementById(check_events_array[i]);
if ((i < 15) || (localStorage.getItem("Radar_recognition") != "Yes")){
// console.log("Pass in speed detection");
continue;
} else {
if (!!alarm_data) {
var datas;
var radar_json;
var complete_data = "";
var n1 = -1, n2 = -1, n2_temp = -1;
complete_data = complete_data.concat(alarm_data);
n1 = complete_data.indexOf('"AiRadar"');
n2_temp = complete_data.indexOf('"Speed"');
n2 = complete_data.indexOf('}]}', n2_temp);
if (n1 > 0 && n2_temp > 0 && n2 > 0 && (n1 + 7) < n2_temp && n2_temp < n2) {
wait_count = 0;
clear_count = 0;
// Ken 2022-09-22 將字串轉換成過去格式,以符合後續 split 並比對 AiRadar 字串的邏輯
complete_data = complete_data.replace(',"AiRadar"', ',\r\{"AiRadar"')
datas = complete_data.split(/\r\n|\r/);
complete_data = "";
//var check_cam_time = 0;
//var buffer_cam_time = "";
for (var j = datas.length - 1; j >= 0; j--) {
/*
if (datas[i].substring(0, 8) == 'CamTime:') {
buffer_cam_time = "";
buffer_cam_time = datas[i].slice();
}*/
if (datas[j].length > 11 && datas[j].substring(0, 11) == '{"AiRadar":' && datas[j].length < 8192 * 8) {
//datas[i].replace(/\\'/g, "'");
//datas[i].replace('\"', '"');
// console.log(datas[i]);
/*
datas[i].replace('\n', '');
datas[i].replace('\r', '');
datas[i].replace('\t', '');
datas[i].replace('\\', '');
*/
/*
var alarm_test = '{"AiEngine":[{"id":0,"channel_id":1,"camera_name":"","res_height":1080,"res_width":1920,"confidence":59,"engine_type":1,"label_name":"car","class_id":2,"obj_type":0,"obj_tracking_id":1,"obj_dwell_time":23,"color_id":0,"color":"","linked_plate":"","x":83,"y":136,"w":215,"h":168,"parent_idx":-1,"behavior_id":0},{"id":1,"channel_id":1,"camera_name":"","res_height":1080,"res_width":1920,"confidence":43,"engine_type":1,"label_name":"car","class_id":2,"obj_type":0,"obj_tracking_id":2,"obj_dwell_time":23,"color_id":0,"color":"","linked_plate":"","x":158,"y":538,"w":218,"h":144,"parent_idx":-1,"behavior_id":0},{"id":2,"channel_id":1,"camera_name":"","res_height":1080,"res_width":1920,"confidence":82,"engine_type":1,"label_name":"car","class_id":2,"obj_type":0,"obj_tracking_id":3,"obj_dwell_time":23,"color_id":0,"color":"","linked_plate":"","x":342,"y":175,"w":321,"h":196,"parent_idx":-1,"behavior_id":0},{"id":3,"channel_id":1,"camera_name":"","res_height":1080,"res_width":1920,"confidence":49,"engine_type":1,"label_name":"car","class_id":2,"obj_type":0,"obj_tracking_id":6,"obj_dwell_time":23,"color_id":0,"color":"","linked_plate":"","x":362,"y":578,"w":253,"h":132,"parent_idx":-1,"behavior_id":0},{"id":4,"channel_id":1,"camera_name":"","res_height":1080,"res_width":1920,"confidence":69,"engine_type":1,"label_name":"car","class_id":2,"obj_type":0,"obj_tracking_id":4,"obj_dwell_time":23,"color_id":0,"color":"","linked_plate":"","x":714,"y":608,"w":239,"h":130,"parent_idx":-1,"behavior_id":0},{"id":5,"channel_id":1,"camera_name":"","res_height":1080,"res_width":1920,"confidence":31,"engine_type":1,"label_name":"car","class_id":2,"obj_type":0,"obj_tracking_id":5,"obj_dwell_time":23,"color_id":0,"color":"","linked_plate":"","x":1035,"y":663,"w":340,"h":179,"parent_idx":-1,"behavior_id":0}],"Count":6}';
ai_json = JSON.parse(alarm_test);*/
/*
if (index_ == 0) {
index_ = 1;
alert(ai_json);
}*/
var temp = null;
temp = datas[j].slice();
radar_json = JSON.parse(temp);
//radar_json = validatingJSON(temp);
// console.log("radar_json", radar_json);
// radar_msg = radar_json;
datas[j] = null;
//check_cam_time = 1;
break;
}
}
radar_id_num = (Math.random() * 100 % 10) + 1;
if (radar_json != null) {
for (var id_index = 0; id_index <= radar_json.AiRadar.RadarArray.length - 1; id_index++) {
if (radar_json.AiRadar.RadarArray[id_index].Type == 1) {
console.log("V1 point pass");
} else if (radar_json.AiRadar.RadarArray[id_index].Type == 2) {
console.log("V2 point pass");
} else if (radar_json.AiRadar.RadarArray[id_index].Type == 3) {
// 速度偵測
var speed = radar_json.AiRadar.RadarArray[id_index].Speed;
console.log("Speed:", speed);
if (behavior_input.id == "High speed detection (RADAR)") {
console.log("need to get upper bound: ", speed_upper_bound);
if (speed > speed_upper_bound) {
console.log("!!! > upper bound");
// TODO: 看要怎麼處理警示的部分
}
} else if (behavior_input.id == "Low speed detection (RADAR)") {
console.log("need to get lower bound: ", speed_lower_bound);
if (speed < speed_lower_bound) {
console.log("!!! < lower bound");
// TODO: 看要怎麼處理警示的部分
}
}
} else {
console.log("radar_json.AiRadar.RadarArray[" + id_index + "].Type", radar_json.AiRadar.RadarArray[id_index].Type);
}
}
}
}
else {
wait_count++;
if (wait_count >= 3) {
wait_count = 0;
complete_data = "";
}
clear_count++;
if (clear_count >= 3) {
clear_count = 0;
}
}
}
}
}
}
}
function GetAlarm(alarm_data) {
if (canvasTripwire_all && canvasTripwire && canvasTripwire1 && canvasTripwire2 && canvasTripwire3 && canvasTripwire4 && canvasTripwire5 && canvasTripwire6 && canvasTripwire7 && canvasTripwire8 && click_mouse_set == 0) {
if (!!alarm_data) {
var datas;
var ai_json;
var complete_data = "";
var n1 = -1, n2 = -1, n2_temp = -1;
// console.log("[GetAlarm] localStorage fetchHttpGetalarm:", localStorage.getItem("fetchHttpGetalarm"));
// console.log("[GetAlarm] g_max_protected_objects:", g_max_protected_objects);
var max_protected_objects = g_max_protected_objects;
if (g_enable_show_pixel === 1) {
max_protected_objects = g_max_protected_objects + 2;
}
complete_data = complete_data.concat(alarm_data);
n1 = complete_data.indexOf('{"AiEngine"');
n2_temp = complete_data.indexOf('"Count"');
n2 = complete_data.indexOf('}', n2_temp);
// console.log(`[GetAlarm] n1:${n1} , n2_temp:${n2_temp} , n2:${n2}`);
if (n1 > 0 && n2_temp > 0 && n2 > 0 && (n1 + 7) < n2_temp && n2_temp < n2) {
wait_count = 0;
clear_count = 0;
datas = complete_data.split(/\r\n|\r/);
complete_data = "";
//var check_cam_time = 0;
//var buffer_cam_time = "";
for (var i = datas.length - 1; i >= 0; i--) {
/*
if (datas[i].substring(0, 8) == 'CamTime:') {
buffer_cam_time = "";
buffer_cam_time = datas[i].slice();
}*/
// console.log(`datas[${i}].length: ${datas[i].length}`);
if (datas[i].length > 12 && datas[i].substring(0, 12) == '{"AiEngine":' && datas[i].length < 8192 * 8) {
//datas[i].replace(/\\'/g, "'");
//datas[i].replace('\"', '"');
/*
datas[i].replace('\n', '');
datas[i].replace('\r', '');
datas[i].replace('\t', '');
datas[i].replace('\\', '');
*/
/*
var alarm_test = '{"AiEngine":[{"id":0,"channel_id":1,"camera_name":"","res_height":1080,"res_width":1920,"confidence":59,"engine_type":1,"label_name":"car","class_id":2,"obj_type":0,"obj_tracking_id":1,"obj_dwell_time":23,"color_id":0,"color":"","linked_plate":"","x":83,"y":136,"w":215,"h":168,"parent_idx":-1,"behavior_id":0},{"id":1,"channel_id":1,"camera_name":"","res_height":1080,"res_width":1920,"confidence":43,"engine_type":1,"label_name":"car","class_id":2,"obj_type":0,"obj_tracking_id":2,"obj_dwell_time":23,"color_id":0,"color":"","linked_plate":"","x":158,"y":538,"w":218,"h":144,"parent_idx":-1,"behavior_id":0},{"id":2,"channel_id":1,"camera_name":"","res_height":1080,"res_width":1920,"confidence":82,"engine_type":1,"label_name":"car","class_id":2,"obj_type":0,"obj_tracking_id":3,"obj_dwell_time":23,"color_id":0,"color":"","linked_plate":"","x":342,"y":175,"w":321,"h":196,"parent_idx":-1,"behavior_id":0},{"id":3,"channel_id":1,"camera_name":"","res_height":1080,"res_width":1920,"confidence":49,"engine_type":1,"label_name":"car","class_id":2,"obj_type":0,"obj_tracking_id":6,"obj_dwell_time":23,"color_id":0,"color":"","linked_plate":"","x":362,"y":578,"w":253,"h":132,"parent_idx":-1,"behavior_id":0},{"id":4,"channel_id":1,"camera_name":"","res_height":1080,"res_width":1920,"confidence":69,"engine_type":1,"label_name":"car","class_id":2,"obj_type":0,"obj_tracking_id":4,"obj_dwell_time":23,"color_id":0,"color":"","linked_plate":"","x":714,"y":608,"w":239,"h":130,"parent_idx":-1,"behavior_id":0},{"id":5,"channel_id":1,"camera_name":"","res_height":1080,"res_width":1920,"confidence":31,"engine_type":1,"label_name":"car","class_id":2,"obj_type":0,"obj_tracking_id":5,"obj_dwell_time":23,"color_id":0,"color":"","linked_plate":"","x":1035,"y":663,"w":340,"h":179,"parent_idx":-1,"behavior_id":0}],"Count":6}';
ai_json = JSON.parse(alarm_test);*/
/*
if (index_ == 0) {
index_ = 1;
alert(ai_json);
}*/
var temp = null;
temp = datas[i].slice();
ai_json = JSON.parse(temp);
//ai_json = validatingJSON(temp);
// console.log("ai_json:");
// console.log(ai_json);
datas[i] = null;
//check_cam_time = 1;
break;
}
}
/*
if (check_cam_time === 1) {
if (last_cam_time === "") {
last_cam_time = buffer_cam_time;
count_the_same_cam_time++;
}
else if (last_cam_time === buffer_cam_time) {
count_the_same_cam_time++;
}
else {
last_cam_time = buffer_cam_time;
console.log(count_the_same_cam_time);
count_the_same_cam_time = 0;
}
}*/
// console.log(ai_json);
if (localStorage.getItem("ToF_recognition") === "Yes"){
// console.log("ai_json.AIToF:");
// console.log(ai_json.AIToF);
func_changeColorBarMinMax(ai_json.AIToF);
}
// 08-05 80 port 拿 getalarmmotion 沒有這兩個值
if (localStorage.getItem("fetchHttpGetalarm") == "No") {
// WebSocket 才有 red_light 和 AI_fps
var AI_fps = ai_json.AI_fps;
localStorage.setItem('AI_fps', AI_fps);
var red_light = ai_json.red_light;
}
// console.log("ai_json.Count:");
// console.log(ai_json.Count);
if (ai_json != null) {
bbox_count = ai_json.Count;
}
else {
bbox_count = 0;
}
plate_count = 0;
plate_idx = 0;
/*
if (bbox_count == 0) {
clear_count_2++;
}
else {
clear_count_2 = 3;
}*/
/*if (clear_count_2 >= 3) */
if (localStorage.getItem("fetchHttpGetalarm") == "No")
{
//clear_count_2 = 0;
// console.log("[WebSocket] max_protected_objects: ", max_protected_objects);
RefreshCanvasObject(max_protected_objects);
}
//console.log("bbox_count: " + bbox_count.toString());
// console.log("ai_json.counter_count:", ai_json.counter_count);
if (ai_json != null && typeof ai_json.counter_count !== 'undefined') {
counter_count_msg = "";
for (var j = 0; j < 8; j++) {
var spacing = (j == 3 || j == 7) ? "" : normal_spacing;
counter_count_msg += (counter_cust_name[j] + ":&nbsp;" + ai_json.counter_count[j] + "&nbsp;," + spacing);
if (j == 3) {
counter_count_msg += "</br>";
}
}
localStorage.setItem('counter_count_msg', counter_count_msg);
}
else {
counter_count_msg = "";
for (var j = 0; j < 8; j++) {
var spacing = (j == 3 || j == 7) ? "" : normal_spacing;
counter_count_msg += (counter_cust_name[j] + ":&nbsp;" + "&nbsp" + "&nbsp;," + spacing);
if (j == 3) {
counter_count_msg += "</br>";
}
}
localStorage.setItem('counter_count_msg', counter_count_msg);
}
if (check_if_existing_coldobjects == 1) {
for (var index_cold = 0; index_cold < MAX_COLDOBJECTS; index_cold++) {
if (coldobjects_X[index_cold] >= 1 && coldobjects_Y[index_cold] >= 1 && coldobjects_W[index_cold] >= 1 && coldobjects_H[index_cold] >= 1
&& coldobjects_Object[index_cold].length >= 1) {
var translate_name = func_translate_name(coldobjects_Object[index_cold]);
canvasTripwire_all.add(insertTrafficLightRectangle_Blue(coldobjects_X[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_Y[index_cold] * G_CANVAS_HEIGHT_RATIO, coldobjects_W[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_H[index_cold] * G_CANVAS_HEIGHT_RATIO, 1, 1, 0, 0));
canvasTripwire.add(insertTrafficLightRectangle_Blue(coldobjects_X[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_Y[index_cold] * G_CANVAS_HEIGHT_RATIO, coldobjects_W[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_H[index_cold] * G_CANVAS_HEIGHT_RATIO, 1, 1, 0, 0));
canvasTripwire1.add(insertTrafficLightRectangle_Blue(coldobjects_X[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_Y[index_cold] * G_CANVAS_HEIGHT_RATIO, coldobjects_W[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_H[index_cold] * G_CANVAS_HEIGHT_RATIO, 1, 1, 0, 0));
canvasTripwire2.add(insertTrafficLightRectangle_Blue(coldobjects_X[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_Y[index_cold] * G_CANVAS_HEIGHT_RATIO, coldobjects_W[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_H[index_cold] * G_CANVAS_HEIGHT_RATIO, 1, 1, 0, 0));
canvasTripwire3.add(insertTrafficLightRectangle_Blue(coldobjects_X[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_Y[index_cold] * G_CANVAS_HEIGHT_RATIO, coldobjects_W[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_H[index_cold] * G_CANVAS_HEIGHT_RATIO, 1, 1, 0, 0));
canvasTripwire4.add(insertTrafficLightRectangle_Blue(coldobjects_X[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_Y[index_cold] * G_CANVAS_HEIGHT_RATIO, coldobjects_W[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_H[index_cold] * G_CANVAS_HEIGHT_RATIO, 1, 1, 0, 0));
canvasTripwire5.add(insertTrafficLightRectangle_Blue(coldobjects_X[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_Y[index_cold] * G_CANVAS_HEIGHT_RATIO, coldobjects_W[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_H[index_cold] * G_CANVAS_HEIGHT_RATIO, 1, 1, 0, 0));
canvasTripwire6.add(insertTrafficLightRectangle_Blue(coldobjects_X[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_Y[index_cold] * G_CANVAS_HEIGHT_RATIO, coldobjects_W[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_H[index_cold] * G_CANVAS_HEIGHT_RATIO, 1, 1, 0, 0));
canvasTripwire7.add(insertTrafficLightRectangle_Blue(coldobjects_X[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_Y[index_cold] * G_CANVAS_HEIGHT_RATIO, coldobjects_W[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_H[index_cold] * G_CANVAS_HEIGHT_RATIO, 1, 1, 0, 0));
canvasTripwire8.add(insertTrafficLightRectangle_Blue(coldobjects_X[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_Y[index_cold] * G_CANVAS_HEIGHT_RATIO, coldobjects_W[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_H[index_cold] * G_CANVAS_HEIGHT_RATIO, 1, 1, 0, 0));
canvasTripwire_all.add(insertTextLabel_Blue(coldobjects_X[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_Y[index_cold] * G_CANVAS_HEIGHT_RATIO - 18, 50, 50, translate_name));
canvasTripwire.add(insertTextLabel_Blue(coldobjects_X[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_Y[index_cold] * G_CANVAS_HEIGHT_RATIO - 18, 50, 50, translate_name));
canvasTripwire1.add(insertTextLabel_Blue(coldobjects_X[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_Y[index_cold] * G_CANVAS_HEIGHT_RATIO - 18, 50, 50, translate_name));
canvasTripwire2.add(insertTextLabel_Blue(coldobjects_X[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_Y[index_cold] * G_CANVAS_HEIGHT_RATIO - 18, 50, 50, translate_name));
canvasTripwire3.add(insertTextLabel_Blue(coldobjects_X[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_Y[index_cold] * G_CANVAS_HEIGHT_RATIO - 18, 50, 50, translate_name));
canvasTripwire4.add(insertTextLabel_Blue(coldobjects_X[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_Y[index_cold] * G_CANVAS_HEIGHT_RATIO - 18, 50, 50, translate_name));
canvasTripwire5.add(insertTextLabel_Blue(coldobjects_X[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_Y[index_cold] * G_CANVAS_HEIGHT_RATIO - 18, 50, 50, translate_name));
canvasTripwire6.add(insertTextLabel_Blue(coldobjects_X[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_Y[index_cold] * G_CANVAS_HEIGHT_RATIO - 18, 50, 50, translate_name));
canvasTripwire7.add(insertTextLabel_Blue(coldobjects_X[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_Y[index_cold] * G_CANVAS_HEIGHT_RATIO - 18, 50, 50, translate_name));
canvasTripwire8.add(insertTextLabel_Blue(coldobjects_X[index_cold] * G_CANVAS_WIDTH_RATIO, coldobjects_Y[index_cold] * G_CANVAS_HEIGHT_RATIO - 18, 50, 50, translate_name));
}
}
//i_cold_times++;
//if (i_cold_times >= g_cold_times) {
//check_if_existing_coldobjects = 0;
//i_cold_times = 0;
//}
}
var insert_red_text = "";
if (localStorage.getItem("fetchHttpGetalarm") == "No") {
// WebSocket 才有 red_light 和 AI_fps
if (red_light == 1 && enable_cloud == "Yes") {
insert_red_text = "FPS:" + AI_fps.toString() + ",Red:" + red_light.toString() + ",";
}
else if (red_light == 0 && enable_cloud == "Yes") {
insert_red_text = "FPS:" + AI_fps.toString() + ",Red:" + red_light.toString() + ",";
}
else {
insert_red_text = "FPS:" + AI_fps.toString() + ",";
}
}
// 08-05 80 port getalarmmotion 缺少 red_light 和 AI_fps 就不用這段前綴
var insert_red_text_max = "";
var insert_red_text_min = "";
if (current_state_hide_or_open_getalarmmotion == 1) {
for (var i = 0; i < bbox_count /*&& i <= 10*/; i++) {
// console.log(ai_json.AiEngine[i]);
if (ai_json.AiEngine[i]) {
// 08-05 80 port getalarmmotion 沒定義 parent_idx
// console.log((typeof ai_json.AiEngine[i].parent_idx == 'undefined'));
// 針對 Landingpage 連線方式繞過既有過濾條件
if ((ai_json.AiEngine[i].parent_idx == -1) || (localStorage.getItem("fetchHttpGetalarm") == "Yes")) {
if (ai_json.AiEngine[i].label_name == "L._Plate_USA" ||
ai_json.AiEngine[i].label_name == "L._Plate_MAC/MYS" ||
ai_json.AiEngine[i].label_name == "L._Plate_VNM" ||
ai_json.AiEngine[i].label_name == "L._Plate_EUR" ||
ai_json.AiEngine[i].label_name == "L._Plate_GBR" ||
ai_json.AiEngine[i].label_name == "L._Plate_JPN" ||
ai_json.AiEngine[i].label_name == "L._Plate_THA" ||
ai_json.AiEngine[i].label_name == "L._Plate_IDN" ||
ai_json.AiEngine[i].label_name == "L._Plate_IDN2" ||
ai_json.AiEngine[i].label_name == "L._Plate_BGD" ||
ai_json.AiEngine[i].label_name == "L._Plate_MEA" ||
ai_json.AiEngine[i].label_name == "L._Plate_PHL" ||
ai_json.AiEngine[i].label_name == "L._Plate_AUS" ||
ai_json.AiEngine[i].label_name == "L._Plate_CNT_1LINE" ||
ai_json.AiEngine[i].label_name == "L._Plate_CNT_2LINES" ||
ai_json.AiEngine[i].label_name == "L._Plate_CNT_3LINES" ||
ai_json.AiEngine[i].label_name == "L._Plate_CNT_VERTICAL" ||
ai_json.AiEngine[i].label_name == "L._Plate_CNT_USDOT" ||
ai_json.AiEngine[i].label_name == "ambulance" ||
ai_json.AiEngine[i].label_name == "face" ||
ai_json.AiEngine[i].label_name == "blank" ||
ai_json.AiEngine[i].label_name == "stop_sign" ||
ai_json.AiEngine[i].label_name == "qrcode" ||
ai_json.AiEngine[i].label_name == "barcode" ||
ai_json.AiEngine[i].label_name == "L._Plate_TWN") {
try {
if (ai_json.AiEngine[i].properties) {
if (ai_json.AiEngine[i].properties.plate) {
var plate_name = "";
if (ai_json.AiEngine[i].label_name == "ambulance")
plate_name = plate_name.concat(ai_json.AiEngine[i].label_name);
else if (ai_json.AiEngine[i].label_name == "blank")
plate_name = plate_name.concat(ai_json.AiEngine[i].label_name);
else if (ai_json.AiEngine[i].label_name == "stop_sign")
plate_name = plate_name.concat(ai_json.AiEngine[i].label_name);
else
plate_name = plate_name.concat(ai_json.AiEngine[i].properties.plate);
/*
plate_name = plate_name.replace(/[「」‘’']/g, '');
if (plate_name === '' || plate_name === '0') {
continue;
}*/
// -------------
// 08-09 嵌入輪播 Block
// 因 Landing page 缺少 ANPR TAB localStorage 才有的 enable_only_once_to_post 這邊省略過濾條件
push_lpr(
plate_name,
ai_json.AiEngine[i].properties.area,
ai_json.AiEngine[i].confidence.toString() + "%",
COLOR_ARRAY[ai_json.AiEngine[i].color_id],
COLOR_ARRAY[ai_json.AiEngine[i].sec_color_id],
ai_json.AiEngine[i].car_type_name,
ai_json.AiEngine[i].center_direction
);
if (("LPR_BMP" in ai_json.AiEngine[i])) {
push_LPBMP(ai_json.AiEngine[i]);
set_lpr_content(get_lprimgnum()); // get_lprimgnum() returns the last index of img in LPBMP_Array
}
// -------------
AssignPlateObject(ai_json, i, plate_name);
}
}
} catch (error) {
console.log(error);
}
}
else {
var x = parseInt(ai_json.AiEngine[i].x, 10);
var y = parseInt(ai_json.AiEngine[i].y, 10);
var w = parseInt(ai_json.AiEngine[i].w, 10);
var h = parseInt(ai_json.AiEngine[i].h, 10);
var obj_tracking_id = parseInt(ai_json.AiEngine[i].obj_tracking_id, 10);
var number_row = ai_json.AiEngine[i].number_row;
var text_y = parseInt((ai_json.AiEngine[i].y + ai_json.AiEngine[i].h), 10);
text_y = y - (g_canvas_text_y_offset * (G_CAM_VIDEO_RES_HEIGHT / G_VIEW_CANVAS_Y));
var plate_name = "";
plate_name = plate_name.concat(ai_json.AiEngine[i].label_name);
plate_name = plate_name.replace(/[「」‘’']/g, '');
if (plate_name === '' || plate_name === '0') {
continue;
}
if (canvasTripwire_all && canvasTripwire && canvasTripwire1 && canvasTripwire2 && canvasTripwire3 && canvasTripwire4 && canvasTripwire5 && canvasTripwire6 && canvasTripwire7 && canvasTripwire8) {
var translate_name = func_translate_name(plate_name);
var behavior_id = ai_json.AiEngine[i].behavior_id;
var detection_zone_id = ai_json.AiEngine[i].detection_zone_id;
var obj_dwell_time = ai_json.AiEngine[i].obj_dwell_time;
var color = ai_json.AiEngine[i].color;
var center_direction = ai_json.AiEngine[i].center_direction;
var center_stability = ai_json.AiEngine[i].center_stability;
//var center_speed = ai_json.AiEngine[i].center_speed;
var progress_bar = ai_json.AiEngine[i].progress_bar;
var tof_distance = ai_json.AiEngine[i].tof_distance;
var tof_height = ai_json.AiEngine[i].tof_height;
var code_content = ai_json.AiEngine[i].code_content;
var label_word = "";
if (plate_name == "bg_learning") {
if (current_state_hide_or_open_label == 1) {
label_word = "Bg_learning, prg: " + progress_bar.toString() + "%" + ", ID: " + obj_tracking_id + Concat_obj_dwell_time(obj_dwell_time);
}
}
else if (plate_name == "tof_point") {
//if (current_state_hide_or_open_label == 1)
{
if (ai_json.AiEngine[i].max_distance != 0 && ai_json.AiEngine[i].max_height != 0) {
label_word = "Max";
var meterToft = 3.2808
var maxmeter = Math.floor((ai_json.AiEngine[i].max_distance / 1000) * 1000) / 1000;
var maxft = Math.floor((ai_json.AiEngine[i].max_distance / 1000) * meterToft * 1000) / 1000;
var maxmeter_h = Math.floor((ai_json.AiEngine[i].max_height / 1000) * 1000) / 1000;
var maxft_h = Math.floor((ai_json.AiEngine[i].max_height / 1000) * meterToft * 1000) / 1000;
insert_red_text_max = "Max,";
if (g_tof_enable_show_distance == 1)
insert_red_text_max += "Dist: " + maxmeter.toString() + "M " + maxft.toString() + "Ft,";
if (g_tof_enable_show_height == 1)
insert_red_text_max += "Ht: " + maxmeter_h.toString() + "M " + maxft_h.toString() + "Ft,";
if (g_tof_enable_show_distance == 0 && g_tof_enable_show_height == 0) {
insert_red_text_max += "Dist: " + maxmeter.toString() + "M " + maxft.toString() + "Ft,";
insert_red_text_max += "Ht: " + maxmeter_h.toString() + "M " + maxft_h.toString() + "Ft,";
}
}
else if (ai_json.AiEngine[i].min_distance != 0 && ai_json.AiEngine[i].min_height != 0) {
label_word = "Min";
var meterToft = 3.2808
var minmeter = Math.floor((ai_json.AiEngine[i].min_distance / 1000) * 1000) / 1000;
var minft = Math.floor((ai_json.AiEngine[i].min_distance / 1000) * meterToft * 1000) / 1000;
var minmeter_h = Math.floor((ai_json.AiEngine[i].min_height / 1000) * 1000) / 1000;
var minft_h = Math.floor((ai_json.AiEngine[i].min_height / 1000) * meterToft * 1000) / 1000;
insert_red_text_min = "Min,";
if (g_tof_enable_show_distance == 1)
insert_red_text_min += "Dist: " + minmeter.toString() + "M " + minft.toString() + "Ft,";
if (g_tof_enable_show_height == 1)
insert_red_text_min += "Ht: " + minmeter_h.toString() + "M " + minft_h.toString() + "Ft,";
if (g_tof_enable_show_distance == 0 && g_tof_enable_show_height == 0) {
insert_red_text_min += "Dist: " + minmeter.toString() + "M " + minft.toString() + "Ft,";
insert_red_text_min += "Ht: " + minmeter_h.toString() + "M " + minft_h.toString() + "Ft,";
}
}
}
}
else {
if (plate_name == "object") {
if (current_state_hide_or_open_direction == 1) {
label_word = translate_name + ", N:" + ai_json.AiEngine[i].confidence.toString() + "%" + ", L:" + ai_json.AiEngine[i].confidence2.toString() + "%";
}
if (current_state_hide_or_open_speed == 1) {
if (label_word.length >= 1) {
label_word += ", ID: " + obj_tracking_id + Concat_obj_dwell_time(obj_dwell_time);
}
else {
label_word = "ID: " + obj_tracking_id + Concat_obj_dwell_time(obj_dwell_time);
}
}
}
else {
if (current_state_hide_or_open_label == 1) {
if (code_content.length == 0) {
if (localStorage.getItem("events_default_version") != null && localStorage.getItem("events_default_version") == "4") {
label_word = translate_name;
}
else {
label_word = translate_name + ", " + ai_json.AiEngine[i].confidence.toString() + "%";
}
}
else
label_word = translate_name + ", " + code_content;
}
if (current_state_hide_or_open_direction == 1) {
if (center_direction.length == 0) {
if (label_word.length >= 1) {
label_word += ", ID: " + obj_tracking_id + Concat_obj_dwell_time(obj_dwell_time);
}
else {
label_word = "ID: " + obj_tracking_id + Concat_obj_dwell_time(obj_dwell_time);
}
}
else {
if (label_word.length >= 1) {
label_word += ", ID: " + obj_tracking_id + Concat_obj_dwell_time(obj_dwell_time) + ", D:" + center_direction;
}
else {
label_word = "ID: " + obj_tracking_id + Concat_obj_dwell_time(obj_dwell_time) + ", D:" + center_direction;
}
}
if (typeof center_stability !== 'undefined') {
if (center_stability.length == 0) {
}
else {
if (label_word.length >= 1) {
label_word += ", St:" + center_stability;
}
else {
label_word = "St:" + center_stability;
}
}
}
}
//if (current_state_hide_or_open_speed == 1 && center_speed.length >= 1) {
//if (label_word.length >= 1) {
//label_word += ", S:" + center_speed;
//}
//else {
//label_word = "S:" + center_speed;
//}
//}
if (localStorage.getItem("events_default_version") != null && localStorage.getItem("events_default_version") == "4") {
if (current_state_hide_or_open_speed == 1) {
if (label_word.length >= 1) {
label_word += ", " + ai_json.AiEngine[i].confidence.toString() + "%";
}
else {
label_word = ai_json.AiEngine[i].confidence.toString() + "%";
}
}
}
var tof_distance = ai_json.AiEngine[i].tof_distance;
var tof_height = ai_json.AiEngine[i].tof_height;
if (tof_distance && tof_height) {
var meterToft = 3.2808
var tof_meter = roundDown(tof_distance, 3);
var tof_ft = roundDown(Math.floor(tof_distance * meterToft * 1000) / 1000, 3);
var tof_meter_h = roundDown(tof_height, 3);
var tof_ft_h = roundDown(Math.floor(tof_height * meterToft * 1000) / 1000, 3);
if (g_tof_enable_show_distance == 1) {
if (label_word.length >= 1) {
label_word += ", Dist: " + tof_meter.toString() + "M " + tof_ft.toString() + "Ft,";
}
else {
label_word = "Dist: " + tof_meter.toString() + "M " + tof_ft.toString() + "Ft,";
}
}
if (g_tof_enable_show_height == 1) {
if (label_word.length >= 1) {
label_word += ", Ht: " + tof_meter_h.toString() + "M " + tof_ft_h.toString() + "Ft,";
}
else {
label_word = "Ht: " + tof_meter_h.toString() + "M " + tof_ft_h.toString() + "Ft,";
}
}
if (g_tof_enable_show_distance == 0 && g_tof_enable_show_height == 0) {
if (label_word.length >= 1) {
label_word += ", Dist: " + tof_meter.toString() + "M " + tof_ft.toString() + "Ft,";
label_word += "Ht: " + tof_meter_h.toString() + "M " + tof_ft_h.toString() + "Ft,";
}
else {
label_word = "Dist: " + tof_meter.toString() + "M " + tof_ft.toString() + "Ft,";
label_word += "Ht: " + tof_meter_h.toString() + "M " + tof_ft_h.toString() + "Ft,";
}
}
}
}
}
if (label_word.length >= 1) {
label_word += ", " + color;
}
else {
label_word = color;
}
//console.log(label_word);
if (plate_name == "tof_point") {
if ((ai_json.AiEngine[i].max_distance != 0 && ai_json.AiEngine[i].max_height != 0) ||
(ai_json.AiEngine[i].min_distance != 0 && ai_json.AiEngine[i].min_height != 0)
) {
if (behavior_id <= 0) {
canvasTripwire_all.add(insertCircle_Green(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO));
canvasTripwire.add(insertCircle_Green(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO));
canvasTripwire1.add(insertCircle_Green(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO));
canvasTripwire2.add(insertCircle_Green(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO));
canvasTripwire3.add(insertCircle_Green(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO));
canvasTripwire4.add(insertCircle_Green(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO));
canvasTripwire5.add(insertCircle_Green(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO));
canvasTripwire6.add(insertCircle_Green(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO));
canvasTripwire7.add(insertCircle_Green(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO));
canvasTripwire8.add(insertCircle_Green(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO));
}
else {
canvasTripwire_all.add(insertCircle_Red(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO));
canvasTripwire.add(insertCircle_Red(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO));
canvasTripwire1.add(insertCircle_Red(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO));
canvasTripwire2.add(insertCircle_Red(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO));
canvasTripwire3.add(insertCircle_Red(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO));
canvasTripwire4.add(insertCircle_Red(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO));
canvasTripwire5.add(insertCircle_Red(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO));
canvasTripwire6.add(insertCircle_Red(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO));
canvasTripwire7.add(insertCircle_Red(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO));
canvasTripwire8.add(insertCircle_Red(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO));
}
}
}
else {
if (behavior_id <= 0) {
canvasTripwire_all.add(insertTrafficLightRectangle(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, plate_name, number_row));
canvasTripwire.add(insertTrafficLightRectangle(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, plate_name, number_row));
canvasTripwire1.add(insertTrafficLightRectangle(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, plate_name, number_row));
canvasTripwire2.add(insertTrafficLightRectangle(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, plate_name, number_row));
canvasTripwire3.add(insertTrafficLightRectangle(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, plate_name, number_row));
canvasTripwire4.add(insertTrafficLightRectangle(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, plate_name, number_row));
canvasTripwire5.add(insertTrafficLightRectangle(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, plate_name, number_row));
canvasTripwire6.add(insertTrafficLightRectangle(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, plate_name, number_row));
canvasTripwire7.add(insertTrafficLightRectangle(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, plate_name, number_row));
canvasTripwire8.add(insertTrafficLightRectangle(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, plate_name, number_row));
}
else {
// 11-01
// console.log("trigger any events... , behavior_id: ", behavior_id); // 禁區 0 , 久留 4, 警戒線 8
// console.log(ai_json.AiEngine[i]); // 沒有和 zone index 相關的資訊
// console.log("detection_zone_id: ", detection_zone_id); // undefined
func_checkTriggerZoneStatus(behavior_id); // 為了連動 zone polygon 變顏色
canvasTripwire_all.add(insertTrafficLightRectangle_Red(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, plate_name));
canvasTripwire.add(insertTrafficLightRectangle_Red(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, plate_name));
canvasTripwire1.add(insertTrafficLightRectangle_Red(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, plate_name));
canvasTripwire2.add(insertTrafficLightRectangle_Red(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, plate_name));
canvasTripwire3.add(insertTrafficLightRectangle_Red(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, plate_name));
canvasTripwire4.add(insertTrafficLightRectangle_Red(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, plate_name));
canvasTripwire5.add(insertTrafficLightRectangle_Red(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, plate_name));
canvasTripwire6.add(insertTrafficLightRectangle_Red(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, plate_name));
canvasTripwire7.add(insertTrafficLightRectangle_Red(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, plate_name));
canvasTripwire8.add(insertTrafficLightRectangle_Red(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, plate_name));
}
}
if (behavior_id >= 1) {
if (label_word.length >= 1) {
//console.log("Behavior occured: " + behavior_id.toString() + "; ID: " + obj_tracking_id.toString() + "; zone: " + detection_zone_id.toString());
canvasTripwire_all.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire1.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire2.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire3.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire4.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire5.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire6.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire7.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire8.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
}
/*
for (var index_click = 0; index_click < click_canvas_all; index_click++) {
canvasTripwire_all.getObjects()[index_click].stroke = "#ff0000";
}
canvasTripwire1.getObjects()[0].stroke = "#ff0000";
canvasTripwire2.getObjects()[0].stroke = "#ff0000";
canvasTripwire3.getObjects()[0].stroke = "#ff0000";
canvasTripwire4.getObjects()[0].stroke = "#ff0000";
canvasTripwire5.getObjects()[0].stroke = "#ff0000";
canvasTripwire6.getObjects()[0].stroke = "#ff0000";
canvasTripwire7.getObjects()[0].stroke = "#ff0000";
canvasTripwire8.getObjects()[0].stroke = "#ff0000";
*/
}
else {
if (label_word.length >= 1) {
canvasTripwire_all.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire1.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire2.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire3.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire4.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire5.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire6.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire7.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire8.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
}
}
}
}
plate_count++;
plate_idx++;
}
}
}
var bbox_count_short = 0;
var bbox_count_long = 0;
if (ai_json != null && ai_json.short != null && ai_json.long != null) {
bbox_count_short = ai_json.short.count_short;
bbox_count_long = ai_json.long.count_long;
}
for (var i = 0; i < bbox_count_short; i++) {
if (ai_json.short.ShortPostRecorder[i]) {
var x = ai_json.short.ShortPostRecorder[i].x;
var y = ai_json.short.ShortPostRecorder[i].y;
var w = ai_json.short.ShortPostRecorder[i].w;
var h = ai_json.short.ShortPostRecorder[i].h;
var obj_tracking_id = ai_json.short.ShortPostRecorder[i].obj_tracking_id.toString();
text_y = y - (g_canvas_text_y_offset * (G_CAM_VIDEO_RES_HEIGHT / G_VIEW_CANVAS_Y));
var plate_name = ai_json.short.ShortPostRecorder[i].name;
var updatetime = ai_json.short.ShortPostRecorder[i].updatetime.toString();
var i_bbox = ai_json.short.ShortPostRecorder[i].i.toString();
var zone_idx = (ai_json.short.ShortPostRecorder[i].zone_idx + 1).toString();
var firstgettime = ai_json.short.ShortPostRecorder[i].firstgettime.toString();
var count_interval = ai_json.short.ShortPostRecorder[i].count_interval.toString();
var totaltime = ai_json.short.ShortPostRecorder[i].totaltime.toString();
var label_word = "";
if (canvasTripwire_all && canvasTripwire && canvasTripwire1 && canvasTripwire2 && canvasTripwire3 && canvasTripwire4 && canvasTripwire5 && canvasTripwire6 && canvasTripwire7 && canvasTripwire8) {
var translate_name = func_translate_name(plate_name);
if (current_state_hide_or_open_label == 1 && current_state_hide_or_open_direction == 1) {
label_word = translate_name;
if (label_word.length >= 1) {
label_word += ", idx: " + i_bbox + "; dwell: " + totaltime + "(" + updatetime + "," + firstgettime + ")";
}
else {
label_word = "idx: " + i_bbox + "; dwell: " + totaltime + "(" + updatetime + "," + firstgettime + ")";
}
}
if (current_state_hide_or_open_speed == 1) {
if (label_word.length >= 1) {
label_word += ", ID: " + obj_tracking_id + ", zone:" + zone_idx + ", interval:" + count_interval;;
}
else {
label_word = "ID: " + obj_tracking_id + ", zone:" + zone_idx + ", interval:" + count_interval;
}
}
canvasTripwire_all.add(insertTrafficLightRectangle_Blue(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, 1, obj_tracking_id));
canvasTripwire.add(insertTrafficLightRectangle_Blue(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, 1, obj_tracking_id));
canvasTripwire1.add(insertTrafficLightRectangle_Blue(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, 1, obj_tracking_id));
canvasTripwire2.add(insertTrafficLightRectangle_Blue(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, 1, obj_tracking_id));
canvasTripwire3.add(insertTrafficLightRectangle_Blue(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, 1, obj_tracking_id));
canvasTripwire4.add(insertTrafficLightRectangle_Blue(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, 1, obj_tracking_id));
canvasTripwire5.add(insertTrafficLightRectangle_Blue(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, 1, obj_tracking_id));
canvasTripwire6.add(insertTrafficLightRectangle_Blue(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, 1, obj_tracking_id));
canvasTripwire7.add(insertTrafficLightRectangle_Blue(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, 1, obj_tracking_id));
canvasTripwire8.add(insertTrafficLightRectangle_Blue(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, 1, obj_tracking_id));
if (label_word.length >= 1) {
canvasTripwire_all.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire1.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire2.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire3.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire4.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire5.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire6.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire7.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire8.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
}
}
}
}
for (var i = 0; i < bbox_count_long; i++) {
if (ai_json.long.LongPostRecorder[i]) {
var x = ai_json.long.LongPostRecorder[i].x;
var y = ai_json.long.LongPostRecorder[i].y;
var w = ai_json.long.LongPostRecorder[i].w;
var h = ai_json.long.LongPostRecorder[i].h;
var obj_tracking_id = ai_json.long.LongPostRecorder[i].obj_tracking_id.toString();
text_y = y - (g_canvas_text_y_offset * (G_CAM_VIDEO_RES_HEIGHT / G_VIEW_CANVAS_Y));
var plate_name = ai_json.long.LongPostRecorder[i].name;
var updatetime = ai_json.long.LongPostRecorder[i].updatetime.toString();
var i_bbox = ai_json.long.LongPostRecorder[i].i.toString();
var zone_idx = (ai_json.long.LongPostRecorder[i].zone_idx + 1).toString();
var firstgettime = ai_json.long.LongPostRecorder[i].firstgettime.toString();
var count_interval = ai_json.long.LongPostRecorder[i].count_interval.toString();
var totaltime = ai_json.long.LongPostRecorder[i].totaltime.toString();
var label_word = "";
if (canvasTripwire_all && canvasTripwire && canvasTripwire1 && canvasTripwire2 && canvasTripwire3 && canvasTripwire4 && canvasTripwire5 && canvasTripwire6 && canvasTripwire7 && canvasTripwire8) {
var translate_name = func_translate_name(plate_name);
if (current_state_hide_or_open_label == 1 && current_state_hide_or_open_direction == 1) {
label_word = translate_name + ", L";
if (label_word.length >= 1) {
label_word += ", idx: " + i_bbox + "; dwell: " + totaltime + "(" + updatetime + "," + firstgettime + ")";
}
else {
label_word = "idx: " + i_bbox + "; dwell: " + totaltime + "(" + updatetime + "," + firstgettime + ")";
}
}
if (current_state_hide_or_open_speed == 1) {
if (label_word.length >= 1) {
label_word += ", ID: " + obj_tracking_id + ", zone:" + zone_idx + ", interval:" + count_interval;;
}
else {
label_word = "ID: " + obj_tracking_id + ", zone:" + zone_idx + ", interval:" + count_interval;
}
}
canvasTripwire_all.add(insertTrafficLightRectangle_Blue(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, 1, obj_tracking_id));
canvasTripwire.add(insertTrafficLightRectangle_Blue(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, 1, obj_tracking_id));
canvasTripwire1.add(insertTrafficLightRectangle_Blue(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, 1, obj_tracking_id));
canvasTripwire2.add(insertTrafficLightRectangle_Blue(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, 1, obj_tracking_id));
canvasTripwire3.add(insertTrafficLightRectangle_Blue(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, 1, obj_tracking_id));
canvasTripwire4.add(insertTrafficLightRectangle_Blue(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, 1, obj_tracking_id));
canvasTripwire5.add(insertTrafficLightRectangle_Blue(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, 1, obj_tracking_id));
canvasTripwire6.add(insertTrafficLightRectangle_Blue(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, 1, obj_tracking_id));
canvasTripwire7.add(insertTrafficLightRectangle_Blue(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, 1, obj_tracking_id));
canvasTripwire8.add(insertTrafficLightRectangle_Blue(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, 1, obj_tracking_id));
if (label_word.length >= 1) {
canvasTripwire_all.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire1.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire2.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire3.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire4.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire5.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire6.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire7.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
canvasTripwire8.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, label_word));
}
}
}
}
if (insert_red_text_min.length >= 1 && insert_red_text_max.length >= 1) {
insert_red_text += insert_red_text_min + '\n';
insert_red_text += insert_red_text_max;
if (canvasTripwire_all && canvasTripwire && canvasTripwire1 && canvasTripwire2 && canvasTripwire3 && canvasTripwire4 && canvasTripwire5 && canvasTripwire6 && canvasTripwire7 && canvasTripwire8) {
canvasTripwire_all.add(insertTextLabel_Red(10, MAX_HEIGHT - 50, 50, 50, insert_red_text));
canvasTripwire.add(insertTextLabel_Red(10, MAX_HEIGHT - 50, 50, 50, insert_red_text));
canvasTripwire1.add(insertTextLabel_Red(10, MAX_HEIGHT - 50, 50, 50, insert_red_text));
canvasTripwire2.add(insertTextLabel_Red(10, MAX_HEIGHT - 50, 50, 50, insert_red_text));
canvasTripwire3.add(insertTextLabel_Red(10, MAX_HEIGHT - 50, 50, 50, insert_red_text));
canvasTripwire4.add(insertTextLabel_Red(10, MAX_HEIGHT - 50, 50, 50, insert_red_text));
canvasTripwire5.add(insertTextLabel_Red(10, MAX_HEIGHT - 50, 50, 50, insert_red_text));
canvasTripwire6.add(insertTextLabel_Red(10, MAX_HEIGHT - 50, 50, 50, insert_red_text));
canvasTripwire7.add(insertTextLabel_Red(10, MAX_HEIGHT - 50, 50, 50, insert_red_text));
canvasTripwire8.add(insertTextLabel_Red(10, MAX_HEIGHT - 50, 50, 50, insert_red_text));
}
}
else {
insert_red_text += insert_red_text_min;
insert_red_text += insert_red_text_max;
if (canvasTripwire_all && canvasTripwire && canvasTripwire1 && canvasTripwire2 && canvasTripwire3 && canvasTripwire4 && canvasTripwire5 && canvasTripwire6 && canvasTripwire7 && canvasTripwire8) {
canvasTripwire_all.add(insertTextLabel_Red(10, MAX_HEIGHT - 25, 50, 50, insert_red_text));
canvasTripwire.add(insertTextLabel_Red(10, MAX_HEIGHT - 25, 50, 50, insert_red_text));
canvasTripwire1.add(insertTextLabel_Red(10, MAX_HEIGHT - 25, 50, 50, insert_red_text));
canvasTripwire2.add(insertTextLabel_Red(10, MAX_HEIGHT - 25, 50, 50, insert_red_text));
canvasTripwire3.add(insertTextLabel_Red(10, MAX_HEIGHT - 25, 50, 50, insert_red_text));
canvasTripwire4.add(insertTextLabel_Red(10, MAX_HEIGHT - 25, 50, 50, insert_red_text));
canvasTripwire5.add(insertTextLabel_Red(10, MAX_HEIGHT - 25, 50, 50, insert_red_text));
canvasTripwire6.add(insertTextLabel_Red(10, MAX_HEIGHT - 25, 50, 50, insert_red_text));
canvasTripwire7.add(insertTextLabel_Red(10, MAX_HEIGHT - 25, 50, 50, insert_red_text));
canvasTripwire8.add(insertTextLabel_Red(10, MAX_HEIGHT - 25, 50, 50, insert_red_text));
}
}
if (ai_json != null && typeof ai_json.counter_zone !== 'undefined') {
for (var index_counter = 0; index_counter < 8; index_counter++) {
var counter_zone = ai_json.counter_zone[index_counter];
for (var index_try = 0; index_try < 8; index_try++) {
var index_zone = -1;
if (counter_zone >= 128) {
counter_zone -= 128;
index_zone = 7;
}
else if (counter_zone >= 64) {
counter_zone -= 64;
index_zone = 6;
}
else if (counter_zone >= 32) {
counter_zone -= 32;
index_zone = 5;
}
else if (counter_zone >= 16) {
counter_zone -= 16;
index_zone = 4;
}
else if (counter_zone >= 8) {
counter_zone -= 8;
index_zone = 3;
}
else if (counter_zone >= 4) {
counter_zone -= 4;
index_zone = 2;
}
else if (counter_zone >= 2) {
counter_zone -= 2;
index_zone = 1;
}
else if (counter_zone >= 1) {
counter_zone -= 1;
index_zone = 0;
}
else {
break;
}
if (typeof ai_json.counter_count !== 'undefined') {
var text_counter_count = "Count:" + ai_json.counter_count[index_zone].toString();
if (canvasTripwire1 && canvasTripwire2 && canvasTripwire3 && canvasTripwire4 && canvasTripwire5 && canvasTripwire6 && canvasTripwire7 && canvasTripwire8) {
if (index_zone == 0)
canvasTripwire1.add(insertTextLabel_Red(MAX_WIDTH / 2, MAX_HEIGHT - 25, 50, 50, text_counter_count));
if (index_zone == 1)
canvasTripwire2.add(insertTextLabel_Red(MAX_WIDTH / 2, MAX_HEIGHT - 25, 50, 50, text_counter_count));
if (index_zone == 2)
canvasTripwire3.add(insertTextLabel_Red(MAX_WIDTH / 2, MAX_HEIGHT - 25, 50, 50, text_counter_count));
if (index_zone == 3)
canvasTripwire4.add(insertTextLabel_Red(MAX_WIDTH / 2, MAX_HEIGHT - 25, 50, 50, text_counter_count));
if (index_zone == 4)
canvasTripwire5.add(insertTextLabel_Red(MAX_WIDTH / 2, MAX_HEIGHT - 25, 50, 50, text_counter_count));
if (index_zone == 5)
canvasTripwire6.add(insertTextLabel_Red(MAX_WIDTH / 2, MAX_HEIGHT - 25, 50, 50, text_counter_count));
if (index_zone == 6)
canvasTripwire7.add(insertTextLabel_Red(MAX_WIDTH / 2, MAX_HEIGHT - 25, 50, 50, text_counter_count));
if (index_zone == 7)
canvasTripwire8.add(insertTextLabel_Red(MAX_WIDTH / 2, MAX_HEIGHT - 25, 50, 50, text_counter_count));
}
}
}
}
}
if (ai_json != null) {
if (ai_json.vz1 == "Yes")
canvasTripwire1.getObjects()[0].stroke = "#ff0000";
if (ai_json.vz2 == "Yes")
canvasTripwire2.getObjects()[0].stroke = "#ff0000";
if (ai_json.vz3 == "Yes")
canvasTripwire3.getObjects()[0].stroke = "#ff0000";
if (ai_json.vz4 == "Yes")
canvasTripwire4.getObjects()[0].stroke = "#ff0000";
if (ai_json.vz5 == "Yes")
canvasTripwire5.getObjects()[0].stroke = "#ff0000";
if (ai_json.vz6 == "Yes")
canvasTripwire6.getObjects()[0].stroke = "#ff0000";
if (ai_json.vz7 == "Yes")
canvasTripwire7.getObjects()[0].stroke = "#ff0000";
if (ai_json.vz8 == "Yes")
canvasTripwire8.getObjects()[0].stroke = "#ff0000";
}
// 11-01
func_checkZoneColor();
if (canvasTripwire_all && canvasTripwire && canvasTripwire1 && canvasTripwire2 && canvasTripwire3 && canvasTripwire4 && canvasTripwire5 && canvasTripwire6 && canvasTripwire7 && canvasTripwire8) {
for (var index_zone = 0; index_zone < count_zone; index_zone++) {
if (parseInt(parking_space[index_zone], 10) >= 1 && parseInt(parking_line[index_zone], 10) >= 1) {
var temp_current_point_position = new Array(MAX_SIZE_POINTS);
if (index_zone == 0) {
temp_current_point_position = currentPointPosition1;
}
else if (index_zone == 1) {
temp_current_point_position = currentPointPosition2;
}
else if (index_zone == 2) {
temp_current_point_position = currentPointPosition3;
}
else if (index_zone == 3) {
temp_current_point_position = currentPointPosition4;
}
else if (index_zone == 4) {
temp_current_point_position = currentPointPosition5;
}
else if (index_zone == 5) {
temp_current_point_position = currentPointPosition6;
}
else if (index_zone == 6) {
temp_current_point_position = currentPointPosition7;
}
else if (index_zone == 7) {
temp_current_point_position = currentPointPosition8;
}
///////////////////
var num_row = parseInt(parking_line[index_zone], 10);
var num_col = Math.ceil(parseInt(parking_space[index_zone], 10) / parseInt(parking_line[index_zone], 10));
////////////////////
var count_lot = 0;
var s_row_x = 0;
var s_row_y = 0;
var e_row_x = 0;
var e_row_y = 0;
var last_s_row_x = 0;
var last_s_row_y = 0;
var last_e_row_x = 0;
var last_e_row_y = 0;
var s_col_x = 0;
var s_col_y = 0;
var e_col_x = 0;
var e_col_y = 0;
var last_s_col_x = 0;
var last_s_col_y = 0;
var last_e_col_x = 0;
var last_e_col_y = 0;
for (var index_row = 0; index_row < num_row; index_row++) {
if (index_row == 0) {
last_s_row_x = temp_current_point_position[1].x;
last_s_row_y = temp_current_point_position[1].y;
last_e_row_x = temp_current_point_position[2].x;
last_e_row_y = temp_current_point_position[2].y;
s_row_x = (temp_current_point_position[1].x * (num_row - (index_row + 1)) + temp_current_point_position[0].x * (index_row + 1)) / num_row;
s_row_y = (temp_current_point_position[1].y * (num_row - (index_row + 1)) + temp_current_point_position[0].y * (index_row + 1)) / num_row;
e_row_x = (temp_current_point_position[2].x * (num_row - (index_row + 1)) + temp_current_point_position[3].x * (index_row + 1)) / num_row;
e_row_y = (temp_current_point_position[2].y * (num_row - (index_row + 1)) + temp_current_point_position[3].y * (index_row + 1)) / num_row;
}
else if (index_row == num_row - 1) {
last_s_row_x = s_row_x;
last_s_row_y = s_row_y;
last_e_row_x = e_row_x;
last_e_row_y = e_row_y;
s_row_x = temp_current_point_position[0].x;
s_row_y = temp_current_point_position[0].y;
e_row_x = temp_current_point_position[3].x;
e_row_y = temp_current_point_position[3].y;
}
else {
last_s_row_x = s_row_x;
last_s_row_y = s_row_y;
last_e_row_x = e_row_x;
last_e_row_y = e_row_y;
s_row_x = (temp_current_point_position[1].x * (num_row - (index_row + 1)) + temp_current_point_position[0].x * (index_row + 1)) / num_row;
s_row_y = (temp_current_point_position[1].y * (num_row - (index_row + 1)) + temp_current_point_position[0].y * (index_row + 1)) / num_row;
e_row_x = (temp_current_point_position[2].x * (num_row - (index_row + 1)) + temp_current_point_position[3].x * (index_row + 1)) / num_row;
e_row_y = (temp_current_point_position[2].y * (num_row - (index_row + 1)) + temp_current_point_position[3].y * (index_row + 1)) / num_row;
}
for (var index_col = 0; index_col < num_col; index_col++) {
if (count_lot < parseInt(parking_space[index_zone], 10)) {
if (index_col == 0) {
last_s_col_x = temp_current_point_position[1].x;
last_s_col_y = temp_current_point_position[1].y;
last_e_col_x = temp_current_point_position[0].x;
last_e_col_y = temp_current_point_position[0].y;
s_col_x = (temp_current_point_position[1].x * (num_col - (index_col + 1)) + temp_current_point_position[2].x * (index_col + 1)) / num_col;
s_col_y = (temp_current_point_position[1].y * (num_col - (index_col + 1)) + temp_current_point_position[2].y * (index_col + 1)) / num_col;
e_col_x = (temp_current_point_position[0].x * (num_col - (index_col + 1)) + temp_current_point_position[3].x * (index_col + 1)) / num_col;
e_col_y = (temp_current_point_position[0].y * (num_col - (index_col + 1)) + temp_current_point_position[3].y * (index_col + 1)) / num_col;
}
else if (index_col == num_col - 1) {
last_s_col_x = s_col_x;
last_s_col_y = s_col_y;
last_e_col_x = e_col_x;
last_e_col_y = e_col_y;
s_col_x = temp_current_point_position[2].x;
s_col_y = temp_current_point_position[2].y;
e_col_x = temp_current_point_position[3].x;
e_col_y = temp_current_point_position[3].y;
}
else {
last_s_col_x = s_col_x;
last_s_col_y = s_col_y;
last_e_col_x = e_col_x;
last_e_col_y = e_col_y;
s_col_x = (temp_current_point_position[1].x * (num_col - (index_col + 1)) + temp_current_point_position[2].x * (index_col + 1)) / num_col;
s_col_y = (temp_current_point_position[1].y * (num_col - (index_col + 1)) + temp_current_point_position[2].y * (index_col + 1)) / num_col;
e_col_x = (temp_current_point_position[0].x * (num_col - (index_col + 1)) + temp_current_point_position[3].x * (index_col + 1)) / num_col;
e_col_y = (temp_current_point_position[0].y * (num_col - (index_col + 1)) + temp_current_point_position[3].y * (index_col + 1)) / num_col;
}
var obj_point_0 = segmentsIntr(
{ x: last_s_row_x, y: last_s_row_y},
{ x: last_e_row_x, y: last_e_row_y},
{ x: last_s_col_x, y: last_s_col_y },
{ x: last_e_col_x, y: last_e_col_y });
var obj_point_1 = segmentsIntr(
{ x: last_s_row_x, y: last_s_row_y },
{ x: last_e_row_x, y: last_e_row_y },
{ x: s_col_x, y: s_col_y },
{ x: e_col_x, y: e_col_y });
var obj_point_2 = segmentsIntr(
{ x: s_row_x, y: s_row_y },
{ x: e_row_x, y: e_row_y },
{ x: last_s_col_x, y: last_s_col_y },
{ x: last_e_col_x, y: last_e_col_y });
var obj_point_3 = segmentsIntr(
{ x: s_row_x, y: s_row_y },
{ x: e_row_x, y: e_row_y },
{ x: s_col_x, y: s_col_y },
{ x: e_col_x, y: e_col_y });
/*
console.log("CCCCCC");
console.log(s_row_x);
console.log(s_row_y);
console.log(e_row_x);
console.log(e_row_y);
console.log(s_col_x);
console.log(s_col_y);
console.log(e_col_x);
console.log(e_col_y);
console.log("DDDDDDD");
console.log("AAAAAAA");
console.log(obj_point_0);
console.log(obj_point_1);
console.log(obj_point_2);
console.log(obj_point_3);
console.log("BBBBBBBBBB");*/
if (obj_point_0 != false && obj_point_1 != false && obj_point_2 != false && obj_point_3 != false) {
var parking_lot_point_x = (obj_point_0.x + obj_point_1.x + obj_point_2.x + obj_point_3.x) / 4;
var parking_lot_point_y = (obj_point_0.y + obj_point_1.y + obj_point_2.y + obj_point_3.y) / 4;
if (ai_json.parking_space_check_table[index_zone][count_lot] == 1) {
canvasTripwire_all.add(insertCircle_Red(parking_lot_point_x, parking_lot_point_y));
canvasTripwire.add(insertCircle_Red(parking_lot_point_x, parking_lot_point_y));
canvasTripwire1.add(insertCircle_Red(parking_lot_point_x, parking_lot_point_y));
canvasTripwire2.add(insertCircle_Red(parking_lot_point_x, parking_lot_point_y));
canvasTripwire3.add(insertCircle_Red(parking_lot_point_x, parking_lot_point_y));
canvasTripwire4.add(insertCircle_Red(parking_lot_point_x, parking_lot_point_y));
canvasTripwire5.add(insertCircle_Red(parking_lot_point_x, parking_lot_point_y));
canvasTripwire6.add(insertCircle_Red(parking_lot_point_x, parking_lot_point_y));
canvasTripwire7.add(insertCircle_Red(parking_lot_point_x, parking_lot_point_y));
canvasTripwire8.add(insertCircle_Red(parking_lot_point_x, parking_lot_point_y));
canvasTripwire_all.add(insertTextLabel_Red(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
canvasTripwire.add(insertTextLabel_Red(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
canvasTripwire1.add(insertTextLabel_Red(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
canvasTripwire2.add(insertTextLabel_Red(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
canvasTripwire3.add(insertTextLabel_Red(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
canvasTripwire4.add(insertTextLabel_Red(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
canvasTripwire5.add(insertTextLabel_Red(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
canvasTripwire6.add(insertTextLabel_Red(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
canvasTripwire7.add(insertTextLabel_Red(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
canvasTripwire8.add(insertTextLabel_Red(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
}
else {
canvasTripwire_all.add(insertCircle_Green(parking_lot_point_x, parking_lot_point_y));
canvasTripwire.add(insertCircle_Green(parking_lot_point_x, parking_lot_point_y));
canvasTripwire1.add(insertCircle_Green(parking_lot_point_x, parking_lot_point_y));
canvasTripwire2.add(insertCircle_Green(parking_lot_point_x, parking_lot_point_y));
canvasTripwire3.add(insertCircle_Green(parking_lot_point_x, parking_lot_point_y));
canvasTripwire4.add(insertCircle_Green(parking_lot_point_x, parking_lot_point_y));
canvasTripwire5.add(insertCircle_Green(parking_lot_point_x, parking_lot_point_y));
canvasTripwire6.add(insertCircle_Green(parking_lot_point_x, parking_lot_point_y));
canvasTripwire7.add(insertCircle_Green(parking_lot_point_x, parking_lot_point_y));
canvasTripwire8.add(insertCircle_Green(parking_lot_point_x, parking_lot_point_y));
canvasTripwire_all.add(insertTextLabel(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
canvasTripwire.add(insertTextLabel(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
canvasTripwire1.add(insertTextLabel(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
canvasTripwire2.add(insertTextLabel(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
canvasTripwire3.add(insertTextLabel(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
canvasTripwire4.add(insertTextLabel(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
canvasTripwire5.add(insertTextLabel(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
canvasTripwire6.add(insertTextLabel(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
canvasTripwire7.add(insertTextLabel(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
canvasTripwire8.add(insertTextLabel(parking_lot_point_x - 5.5, parking_lot_point_y - 22.5, 50, 50, (count_lot + 1).toString()));
}
count_lot++;
}
}
}
}
}
}
}
}
RenderAllCanvas();
ai_json = null;
}
else {
wait_count++;
if (wait_count >= 3) {
wait_count = 0;
complete_data = "";
}
clear_count++;
if (clear_count >= 3) {
clear_count = 0;
RefreshCanvasObject(max_protected_objects);
}
}
}
}
}
function Concat_obj_dwell_time(obj_dwell_time) {
if (parseInt(obj_dwell_time, 10) >= 1) {
return "; dwell: " + obj_dwell_time;
}
else
return "";
}
function AssignPlateObject(ai_json,i_index,plate_name) {
var x = parseInt(ai_json.AiEngine[i_index].x, 10);
var y = parseInt(ai_json.AiEngine[i_index].y, 10);
var w = parseInt(ai_json.AiEngine[i_index].w, 10);
var h = parseInt(ai_json.AiEngine[i_index].h, 10);
var text_y = parseInt((ai_json.AiEngine[i_index].y + ai_json.AiEngine[i_index].h), 10);
//console.log(text_y);
text_y = y - (g_canvas_text_y_offset * (G_CAM_VIDEO_RES_HEIGHT / G_VIEW_CANVAS_Y));
var area_name = "";
var country_name = "";
var out_label = "";
var center_direction = ai_json.AiEngine[i_index].center_direction;
var center_stability = ai_json.AiEngine[i_index].center_stability;
//var center_speed = ai_json.AiEngine[i_index].center_speed;
if (ai_json.AiEngine[i_index].label_name == "L._Plate_USA" ||
ai_json.AiEngine[i_index].label_name == "L._Plate_THA" ||
ai_json.AiEngine[i_index].label_name == "L._Plate_BGD" ||
ai_json.AiEngine[i_index].label_name == "L._Plate_MEA" ||
ai_json.AiEngine[i_index].label_name == "L._Plate_AUS" ||
ai_json.AiEngine[i_index].label_name == "L._Plate_EUR" ||
ai_json.AiEngine[i_index].label_name == "L._Plate_JPN") {
area_name = area_name.concat(ai_json.AiEngine[i_index].properties.area);
country_name = country_name.concat(ai_json.AiEngine[i_index].properties.country);
var obj_dwell_time = ai_json.AiEngine[i_index].obj_dwell_time;
var obj_tracking_id = parseInt(ai_json.AiEngine[i_index].obj_tracking_id, 10);
if (current_state_hide_or_open_label == 1) {
out_label = plate_name + ", " + area_name + " " + country_name + ", " + ai_json.AiEngine[i_index].confidence.toString() + "%";
}
}
else {
var obj_dwell_time = ai_json.AiEngine[i_index].obj_dwell_time;
var obj_tracking_id = parseInt(ai_json.AiEngine[i_index].obj_tracking_id, 10);
if (current_state_hide_or_open_label == 1) {
out_label = plate_name + ", " + ai_json.AiEngine[i_index].confidence.toString() + "%";
}
}
if (current_state_hide_or_open_direction == 1) {
if (center_direction.length == 0) {
if (out_label.length >= 1) {
out_label += ", ID: " + obj_tracking_id + Concat_obj_dwell_time(obj_dwell_time);
}
else {
out_label += "ID: " + obj_tracking_id + Concat_obj_dwell_time(obj_dwell_time);
}
}
else {
if (out_label.length >= 1) {
out_label += ", ID: " + obj_tracking_id + Concat_obj_dwell_time(obj_dwell_time) + ", D:" + center_direction;
}
else {
out_label = "ID: " + obj_tracking_id + Concat_obj_dwell_time(obj_dwell_time) + ", D:" + center_direction;
}
}
if (typeof center_stability !== 'undefined') {
if (center_stability.length == 0) {
}
else {
if (out_label.length >= 1) {
out_label += ", St:" + center_stability;
}
else {
out_label = "St:" + center_stability;
}
}
}
}
//if (current_state_hide_or_open_speed == 1 && center_speed.length >= 1) {
//if (out_label.length >= 1) {
//out_label += ", S:" + center_speed;
//}
//else {
//out_label = "S:" + center_speed;
//}
//}
if (canvasTripwire && canvasTripwire1 && canvasTripwire2 && canvasTripwire3 && canvasTripwire4 && canvasTripwire5 && canvasTripwire6 && canvasTripwire7 && canvasTripwire8) {
canvasTripwire.add(insertTrafficLightRectangle(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, "", 1));
canvasTripwire1.add(insertTrafficLightRectangle(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, "", 1));
canvasTripwire2.add(insertTrafficLightRectangle(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, "", 1));
canvasTripwire3.add(insertTrafficLightRectangle(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, "", 1));
canvasTripwire4.add(insertTrafficLightRectangle(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, "", 1));
canvasTripwire5.add(insertTrafficLightRectangle(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, "", 1));
canvasTripwire6.add(insertTrafficLightRectangle(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, "", 1));
canvasTripwire7.add(insertTrafficLightRectangle(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, "", 1));
canvasTripwire8.add(insertTrafficLightRectangle(x * G_CANVAS_WIDTH_RATIO, y * G_CANVAS_HEIGHT_RATIO, w * G_CANVAS_WIDTH_RATIO, h * G_CANVAS_HEIGHT_RATIO, 1, 1, "", 1));
var behavior_id = ai_json.AiEngine[i_index].behavior_id;
if (ai_json.AiEngine[i_index].label_name == "L._Plate_USA" ||
ai_json.AiEngine[i_index].label_name == "L._Plate_THA" ||
ai_json.AiEngine[i_index].label_name == "L._Plate_BGD" ||
ai_json.AiEngine[i_index].label_name == "L._Plate_MEA" ||
ai_json.AiEngine[i_index].label_name == "L._Plate_AUS" ||
ai_json.AiEngine[i_index].label_name == "L._Plate_EUR" ||
ai_json.AiEngine[i_index].label_name == "L._Plate_JPN") {
if (behavior_id >= 1) {
canvasTripwire.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire1.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire2.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire3.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire4.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire5.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire6.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire7.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire8.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
}
else {
canvasTripwire.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire1.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire2.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire3.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire4.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire5.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire6.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire7.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire8.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
}
}
else {
if (behavior_id >= 1) {
canvasTripwire.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire1.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire2.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire3.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire4.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire5.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire6.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire7.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire8.add(insertTextLabel_Red(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
}
else {
canvasTripwire.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire1.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire2.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire3.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire4.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire5.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire6.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire7.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
canvasTripwire8.add(insertTextLabel(x * G_CANVAS_WIDTH_RATIO, text_y * G_CANVAS_HEIGHT_RATIO, 50, 50, out_label));
}
}
}
}
function RenderAllCanvas() {
if (canvasTripwire) {
canvasTripwire.renderAll();
}
if (canvasTripwire1) {
canvasTripwire1.renderAll();
}
if (canvasTripwire2) {
canvasTripwire2.renderAll();
}
if (canvasTripwire3) {
canvasTripwire3.renderAll();
}
if (canvasTripwire4) {
canvasTripwire4.renderAll();
}
if (canvasTripwire5) {
canvasTripwire5.renderAll();
}
if (canvasTripwire6) {
canvasTripwire6.renderAll();
}
if (canvasTripwire7) {
canvasTripwire7.renderAll();
}
if (canvasTripwire8) {
canvasTripwire8.renderAll();
}
if (canvasTripwire_all) {
canvasTripwire_all.renderAll();
}
}
function RefreshCanvasObject(max_protected_objects) {
if (typeof canvasTripwire !== 'undefined') {
//Clear all objects
// console.log(canvasTripwire.getObjects());
while (canvasTripwire.getObjects().length > 0) {
var items = canvasTripwire.getObjects();
if (items[canvasTripwire.getObjects().length - 1]) {
canvasTripwire.remove(items[canvasTripwire.getObjects().length - 1]);
}
// canvasTripwire.remove(items[canvasTripwire.getObjects().length - 1]);
}
// console.log(canvasTripwire.getObjects());
// console.log("--------------------------");
}
if (typeof canvasTripwire1 !== 'undefined') {
//Clear all objects
// console.log(canvasTripwire1.getObjects());
while (canvasTripwire1.getObjects().length > max_protected_objects) {
var items = canvasTripwire1.getObjects();
if (items[canvasTripwire1.getObjects().length - 1]) {
canvasTripwire1.remove(items[canvasTripwire1.getObjects().length - 1]);
}
}
canvasTripwire1.getObjects()[0].stroke = "#ffff00";
// console.log(canvasTripwire1.getObjects());
// console.log("--------------------------");
}
if (typeof canvasTripwire2 !== 'undefined') {
// console.log(canvasTripwire2.getObjects());
//Clear all objects
while (canvasTripwire2.getObjects().length > max_protected_objects) {
var items = canvasTripwire2.getObjects();
if (items[canvasTripwire2.getObjects().length - 1]) {
canvasTripwire2.remove(items[canvasTripwire2.getObjects().length - 1]);
}
}
canvasTripwire2.getObjects()[0].stroke = "#ffff00";
// console.log(canvasTripwire2.getObjects());
// console.log("--------------------------");
}
if (typeof canvasTripwire3 !== 'undefined') {
// console.log(canvasTripwire3.getObjects());
//Clear all objects
while (canvasTripwire3.getObjects().length > max_protected_objects) {
var items = canvasTripwire3.getObjects();
if (items[canvasTripwire3.getObjects().length - 1]) {
canvasTripwire3.remove(items[canvasTripwire3.getObjects().length - 1]);
}
}
canvasTripwire3.getObjects()[0].stroke = "#ffff00";
// console.log(canvasTripwire3.getObjects());
// console.log("--------------------------");
}
if (typeof canvasTripwire4 !== 'undefined') {
// console.log(canvasTripwire4.getObjects());
//Clear all objects
while (canvasTripwire4.getObjects().length > max_protected_objects) {
var items = canvasTripwire4.getObjects();
if (items[canvasTripwire4.getObjects().length - 1]) {
canvasTripwire4.remove(items[canvasTripwire4.getObjects().length - 1]);
}
}
canvasTripwire4.getObjects()[0].stroke = "#ffff00";
// console.log(canvasTripwire4.getObjects());
// console.log("--------------------------");
}
if (typeof canvasTripwire5 !== 'undefined') {
// console.log(canvasTripwire5.getObjects());
//Clear all objects
while (canvasTripwire5.getObjects().length > max_protected_objects) {
var items = canvasTripwire5.getObjects();
if (items[canvasTripwire5.getObjects().length - 1]) {
canvasTripwire5.remove(items[canvasTripwire5.getObjects().length - 1]);
}
}
canvasTripwire5.getObjects()[0].stroke = "#ffff00";
// console.log(canvasTripwire5.getObjects());
// console.log("--------------------------");
}
if (typeof canvasTripwire6 !== 'undefined') {
// console.log(canvasTripwire6.getObjects());
//Clear all objects
while (canvasTripwire6.getObjects().length > max_protected_objects) {
var items = canvasTripwire6.getObjects();
if (items[canvasTripwire6.getObjects().length - 1]) {
canvasTripwire6.remove(items[canvasTripwire6.getObjects().length - 1]);
}
}
canvasTripwire6.getObjects()[0].stroke = "#ffff00";
// console.log(canvasTripwire6.getObjects());
// console.log("--------------------------");
}
if (typeof canvasTripwire7 !== 'undefined') {
// console.log(canvasTripwire7.getObjects());
//Clear all objects
while (canvasTripwire7.getObjects().length > max_protected_objects) {
var items = canvasTripwire7.getObjects();
if (items[canvasTripwire7.getObjects().length - 1]) {
canvasTripwire7.remove(items[canvasTripwire7.getObjects().length - 1]);
}
}
canvasTripwire7.getObjects()[0].stroke = "#ffff00";
// console.log(canvasTripwire7.getObjects());
// console.log("--------------------------");
}
if (typeof canvasTripwire8 !== 'undefined') {
// console.log(canvasTripwire8.getObjects());
//Clear all objects
while (canvasTripwire8.getObjects().length > max_protected_objects) {
var items = canvasTripwire8.getObjects();
if (items[canvasTripwire8.getObjects().length - 1]) {
canvasTripwire8.remove(items[canvasTripwire8.getObjects().length - 1]);
}
}
canvasTripwire8.getObjects()[0].stroke = "#ffff00";
// console.log(canvasTripwire8.getObjects());
// console.log("--------------------------");
}
if (typeof canvasTripwire_all !== 'undefined') {
// console.log("click_canvas_all:", click_canvas_all);
// console.log(canvasTripwire_all.getObjects());
//Clear all objects
while (canvasTripwire_all.getObjects().length > click_canvas_all) {
var items = canvasTripwire_all.getObjects();
if (items[canvasTripwire_all.getObjects().length - 1]) {
canvasTripwire_all.remove(items[canvasTripwire_all.getObjects().length - 1]);
}
// canvasTripwire_all.remove(items[canvasTripwire_all.getObjects().length - 1]);
}
for (var index_click = 0; index_click < click_canvas_all; index_click++) {
canvasTripwire_all.getObjects()[index_click].stroke = "#ffff00";
}
// console.log(canvasTripwire_all.getObjects());
// console.log("--------------------------");
}
}
/*
function GetRequest(url) {
sessionStorage.setItem('getalarmmotion_data', "");
var data_temp = "";
var data_buffer = "";
var i_found = 0;
var m1 = 0;
var m2 = 0;
var m2_temp = 0;
var complete_data_m = "";
var alarm_data = "";
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
if (this.status === 200) {
clearInterval(request_live);
data_temp = "";
data_temp = this.responseText.substring(data_temp, this.responseText.length - 1);
//console.log("this.responseText.length: " + this.responseText.length.toString());
//console.log("readyState " + this.readyState.toString());
sessionStorage.setItem('getalarmmotion_data', data_temp);
GetAlarm(data_temp);
alarm_data = "";
data_buffer = "";
i_found = 0;
this.responseText = "";
//console.log("[clear]this.responseText.length: " + this.responseText.length.toString());
//}
if (this.responseText.length >= 500000) {
xhttp.abort();
xhttp.open("GET", url, true);
xhttp.timeout = 300 * 1000; // time in milliseconds
xhttp.setRequestHeader("Cache-Control", "no-cache");
xhttp.setRequestHeader("Pragma", "no-cache");
xhttp.send(null);
}
}
};
xhttp.open("GET", url, true);
xhttp.timeout = 300*1000; // time in milliseconds
xhttp.setRequestHeader("Cache-Control", "no-cache");
xhttp.setRequestHeader("Pragma", "no-cache");
xhttp.send(null);
}*/
var websocket_reconnect_flag = 0;
var ws = null;
var wait_data = 0;
//var last_performace_time = 0;
function GetRequest_WebSocket() {
localStorage.setItem("fetchHttpGetalarm", "No");
sessionStorage.setItem('getalarmmotion_data', "");
var data_temp = "";
wait_data = 0;
// console.log("GetRequest_WebSocket");
if ("WebSocket" in window) {
//console.log("WebSocket is supported by your Browser!");
//console.log(navigator.userAgent);
// Let us open a web socket
if ( navigator.userAgent.indexOf( "nvr_auth=" ) != -1 )
ws = new WebSocket("ws://" + window.location.hostname + '/' + g_tcp_tunnel_token + "/getalarmmotion?" + navigator.userAgent );
else
ws = new WebSocket("ws://" + window.location.hostname + '/' + g_tcp_tunnel_token + "/getalarmmotion");
// 08-05 嘗試從 80 port 直接拿,但會出現 Connection error
// if ( navigator.userAgent.indexOf( "nvr_auth=" ) != -1 )
// ws = new WebSocket("ws://" + window.location.hostname + "/getalarmmotion?" + navigator.userAgent );
// else
// ws = new WebSocket("ws://" + window.location.hostname + "/getalarmmotion");
// console.log(ws);
keepAlive();
ws.onopen = function () {
// Web Socket is connected, send data using send()
//ws.send("Message to send");
console.log("ws.onopen...");
clearInterval(request_live);
//clearInterval(reconnect_websocket);
//websocket_reconnect_flag = 0;
};
ws.onmessage = function (evt) {
//var current_performace_time = window.performance.now();
//if (last_performace_time != 0) {
//量測websocket時間
//console.log("GetRequest WebSocket time:" + (current_performace_time - last_performace_time) + "ms");
//}
var received_msg = evt.data;
//console.log("websocket:");
//console.log(received_msg);
/*
clearInterval(request_live);
clearInterval(reconnect_websocket);
websocket_reconnect_flag = 0;*/
data_temp = "";
data_temp = received_msg;
//console.log("this.responseText.length: " + this.responseText.length.toString());
//console.log("readyState " + this.readyState.toString());
console.log("[WebSocket] /getalarmmotion : ");
console.log(data_temp);
// 這邊 data_temp 會自動依照 myboundry 裁成一段一段,但是帶有 CamTime: 2024-08-05 18:23:25 ms:322\r\n\r\n
sessionStorage.setItem('getalarmmotion_data', data_temp);
//last_performace_time = current_performace_time;
var current_page = localStorage.getItem('current_page');
if (current_page === 'alarm' || current_page === 'alarm_nvr') {
GetAlarm(data_temp);
}
//console.log("websocket here");
wait_data = 0;
};
ws.onclose = function () {
// websocket is closed.
console.log("Connection is closed...");
cancelKeepAlive();
ws = null;
setTimeout(function () {
GetRequest_WebSocket();
}, 1000);
//websocket_reconnect_flag = 1;
//reConnect();
};
ws.onerror = function (e) {
// websocket is error.
console.log("Connection is error");
console.log(e);
//cancelKeepAlive();
//websocket_reconnect_flag = 1;
//reConnect();
ws.close();
}
} else {
// The browser doesn't support WebSocket
//console.log("WebSocket NOT supported by your Browser!");
}
}
/*
function reConnect() {
//console.log("socket 連線斷開,正在嘗試重新建立連線");
if (websocket_reconnect_flag == 1)
{
reconnect_websocket = setInterval(function () {
GetRequest_WebSocket();
}, 5000);
}
}*/
var timerID = 0;
function keepAlive() {
var timeout = 5000;
//console.log("keepAlive:" + ws.readyState);
//console.log("wait_data:" + wait_data.toString());
if (ws.readyState != 2)//fail receive
wait_data++;
if (wait_data >= 20)
ws.close();
else
timerID = setTimeout(keepAlive, timeout);
}
function cancelKeepAlive() {
if (timerID) {
clearTimeout(timerID);
}
}
var normal_spacing = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
function func_initCounterMsg() {
counter_count_msg = "";
for (var j = 0; j < 8; j++) {
var spacing = (j == 3 || j == 7) ? "" : normal_spacing;
counter_count_msg += (counter_cust_name[j] + ":&nbsp;0&nbsp;," + spacing);
if (j == 3) {
counter_count_msg += "</br>";
}
}
localStorage.setItem('counter_count_msg', counter_count_msg);
}
var g_getalarmmotion_last_fetch_time = null;
var checkIntervalID = null;
function func_checkGetRequest() {
var checkIntervalTime = 200;
var fetch_time_out = 1000;
var counter = 0;
var max_retry_time = 20;
if (g_getalarmmotion_last_fetch_time == null) {
g_getalarmmotion_last_fetch_time = Date.now();
}
if (checkIntervalID) {
clearInterval(checkIntervalID);
}
checkIntervalID = setInterval(function () {
var time_diff = (Date.now() - g_getalarmmotion_last_fetch_time);
// console.log(`[func_checkGetRequest][${checkIntervalID}] checking last fetch time: ${g_getalarmmotion_last_fetch_time} , time_diff: ${time_diff} , counter: ${counter}`);
if ( time_diff > fetch_time_out ) {
GetRequest_Http_80port_fetch();
clearInterval(checkIntervalID);
}
counter++;
if (counter > max_retry_time) {
clearInterval(checkIntervalID);
}
}, checkIntervalTime)
}
var g_decoder = new TextDecoder('utf-8');
function GetRequest_Http_80port_fetch() {
// console.log("[GetRequest_Http_80port_fetch] start");
localStorage.setItem("fetchHttpGetalarm", "Yes");
if (g_getalarmmotion_last_fetch_time == null) {
g_getalarmmotion_last_fetch_time = Date.now();
}
func_initCounterMsg();
var port = localStorage.getItem('landing_page_port');
// console.log("[GetRequest_Http_80port_fetch] getalarmmotion port : ", port);
var noJsonStringCounter = 0;
// 2.response.body.getReader()
fetch("http://" + window.location.hostname + ":" + port + "/getalarmmotion", {
method: 'GET',
})
.then(response => {
// console.log(response);
var reader = response.body.getReader();
var lastJsonString = '';
var camTime = '';
var check_if_start_to_receive_aiengine = 0;
var count_end = 0;
var check_if_receive_ok = 0;
//var g_fetchIntervalTime = 50;
function read()
{
//console.log("Date:" + Date.now());
reader.read().then(({ done, value }) => {
if (done) {
// console.log('http getalarmmotion complete');
//return;
}
else {
// 08-24 以當前傳輸間隔換算1秒能傳的次數,沒物件資訊時,以 noJsonStringCounter 判斷是否須清除殘留物件
var fetchIntervalTime = (Date.now() - g_getalarmmotion_last_fetch_time);
//g_fetchIntervalTime = fetchIntervalTime;
var refreshCounterThreshold = 1000 / fetchIntervalTime;
// console.log(`fetchIntervalTime : ${fetchIntervalTime} , refreshCounterThreshold : ${refreshCounterThreshold} , check noJsonStringCounter : ${noJsonStringCounter}`);
g_getalarmmotion_last_fetch_time = Date.now();
// 紀錄最後收到資訊的時間,以供斷線重連檢查用
// 處理收到的資料
var chunk = g_decoder.decode(value, { stream: true });
// console.log('Received chunk:', chunk);
var lines = chunk.split(/\r?\n/);
lines.forEach(line => {
if (line.startsWith('CamTime:')) {
lastJsonString = '';
check_if_start_to_receive_aiengine = 0;
count_end = 0;
camTime = line;
check_if_receive_ok = 0;
}
else if (line.startsWith('{"AiEngine"')) {
lastJsonString = line;
check_if_start_to_receive_aiengine = 1;
}
else if (line.length >= 2 && check_if_start_to_receive_aiengine == 1) {
lastJsonString += line;
}
else if (check_if_start_to_receive_aiengine == 1) {
count_end++;
}
});
if (count_end == 2) {
check_if_receive_ok = 1;
}
// 不論有無 Json 字串都可能用到
var max_protected_objects = g_max_protected_objects;
if (g_enable_show_pixel === 1) {
max_protected_objects = g_max_protected_objects + 2;
}
if (check_if_receive_ok == 1) {
// 80 port getalarmmotion 有物件才會有JSON字串,清理 canvas 要提早到這邊
// 加入 click_mouse_set 條件,避免導致 Cold zone 設定過程取不到座標
if (localStorage.getItem("fetchHttpGetalarm") == "Yes" && click_mouse_set == 0) {
// console.log("g_max_protected_objects:", g_max_protected_objects);
RefreshCanvasObject(max_protected_objects);
noJsonStringCounter = 0;
// console.log(`--- RefreshCanvasObject for normal getalarmmotion procedure and reset noJsonStringCounter : ${noJsonStringCounter}`);
}
var data = `${camTime}\r\n\r\n${lastJsonString}`; // 銜接原 WebSocket 傳 GetAlarm 格式
// console.log('data:\n', data);
GetAlarm(data);
lastJsonString = '';
camTime = '';
check_if_start_to_receive_aiengine = 0;
count_end = 0;
check_if_receive_ok = 0;
} else {
if (localStorage.getItem("events_default_version") != "4")
{
// 非 Live View 版本的 udp 傳輸機制不同,要偵測沒物件情況清理 canvas
// 記錄沒傳 Json 字串的次數,判斷是否滿足約1秒能傳的次數,做 refresh 清除殘留物件
noJsonStringCounter++;
if (noJsonStringCounter > refreshCounterThreshold && localStorage.getItem("fetchHttpGetalarm") == "Yes" && click_mouse_set == 0) {
RefreshCanvasObject(max_protected_objects);
noJsonStringCounter = 0;
console.log(`=== RefreshCanvasObject for residual boxes and reset noJsonStringCounter : ${noJsonStringCounter}`);
}
}
}
}
read();
});
}
read();
})
.catch(error => {
// 發生錯誤後稍等一段時間再重試
console.error("Fetch error:", error);
setTimeout(GetRequest_Http_80port_fetch, 2000);
});
}
function GetRequest_Http() {
var xhttp = new XMLHttpRequest();
var data = "Null";
xhttp.onreadystatechange = function () {
if (this.status == 200) {
clearInterval(request_live);
data = this.responseText.substring(data, this.responseText.length - 1);
sessionStorage.setItem('getalarmmotion_data', data);
GetAlarm(data);
}
};
xhttp.open("GET", "http://" + window.location.hostname + '/' + g_tcp_tunnel_token + "/getalarmmotion", true);
xhttp.setRequestHeader("Cache-Control", "no-cache");
xhttp.setRequestHeader("Pragma", "no-cache");
//xhttp.setRequestHeader("Authorization", "Basic " + btoa("username:password"));
xhttp.addEventListener("load", function (e) {
//console.log(xhttp.responseText);
}, false)
xhttp.send(null);
}
function func_set_coldobjects(object_x, object_y, object_w, object_h, object_name) {
console.log(`[func_set_coldobjects] obj x:${object_x} , y:${object_y} , w:${object_w} , h:${object_h} , name:${object_name}`);
$.ajax({
url: '/' + g_tcp_tunnel_token + "/setconfig?coldobjects&x=" + object_x + "&y=" + object_y + "&w=" + object_w + "&h=" + object_h + "&Object=" + object_name,
method: "GET",
async: true,
beforeSend: function (xmlHttp) {
xmlHttp.setRequestHeader("If-Modified-Since", "0");
xmlHttp.setRequestHeader("Cache-Control", "no-cache");
//xmlHttp.setRequestHeader("Authorization", "Basic " + btoa("username:password"));
},
success: function () {
//console.info();
},
error: function () {
setTimeout(func_set_coldobjects(object_x, object_y, object_w, object_h, object_name), 3000);
console.warn();
}
});
return false;
}
function func_get_coldobjects() {
$.ajax({
url: '/' + g_tcp_tunnel_token + "/getconfig?coldobjects=all",
method: "GET",
async: true,
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) {
//console.log(retdata);
var data_cold = validatingJSON(retdata);
check_if_existing_coldobjects = 0;
var temp_check_if_existing_coldobjects = 0;
if (data_cold != null) {
for (var i = 0; i < MAX_COLDOBJECTS; i++) {
coldobjects_X[i] = data_cold.cold_objects[i].X;
coldobjects_Y[i] = data_cold.cold_objects[i].Y;
coldobjects_W[i] = data_cold.cold_objects[i].W;
coldobjects_H[i] = data_cold.cold_objects[i].H;
coldobjects_Object[i] = data_cold.cold_objects[i].Object;
if (coldobjects_Object[i] == "ban_zone") {
if (G_LANG == "zh_tw")
coldobjects_Object[i] = "排除區域";
else if (G_LANG == "ja_jp")
coldobjects_Object[i] = "排他的ゾーン";
else if (G_LANG == "it_it")
coldobjects_Object[i] = "zona_esclusiva";
else
coldobjects_Object[i] = "exclusive_zone";
}
if (coldobjects_X[i] >= 1 && coldobjects_Y[i] >= 1 && coldobjects_W[i] >= 1 && coldobjects_H[i] >= 1 && coldobjects_Object[i].length >= 1) {
temp_check_if_existing_coldobjects = 1;
}
}
}
check_if_existing_coldobjects = temp_check_if_existing_coldobjects;
//console.info();
},
error: function () {
setTimeout(func_get_coldobjects(), 3000);
console.warn();
}
});
return false;
}
function func_clean_coldobjects() {
$.ajax({
url: '/' + g_tcp_tunnel_token + "/getconfig?coldobjects=clean",
method: "GET",
async: true,
beforeSend: function (xmlHttp) {
xmlHttp.setRequestHeader("If-Modified-Since", "0");
xmlHttp.setRequestHeader("Cache-Control", "no-cache");
//xmlHttp.setRequestHeader("Authorization", "Basic " + btoa("username:password"));
},
success: function () {
//console.info();
},
error: function () {
setTimeout(func_clean_coldobjects(), 3000);
console.warn();
}
});
return false;
}
function func_translate_name(translate_name) {
var json_label_names = JSON.parse(LABEL_NAMES);
var json_label_names_zh_tw = JSON.parse(LABEL_NAMES_zh_tw);
var json_label_names_ja_jp = JSON.parse(LABEL_NAMES_ja_jp);
var json_label_names_it_it = JSON.parse(LABEL_NAMES_it_it);
if (localStorage.getItem("dataset_ver").search("RAFFIC") >= 1) {
var data = json_label_names.Tiny_Traffic[0];
var data_zh_tw = json_label_names_zh_tw.Tiny_Traffic[0];
var data_ja_jp = json_label_names_ja_jp.Tiny_Traffic[0];
var data_it_it = json_label_names_it_it.Tiny_Traffic[0];
for (var key in data) {
if (data.hasOwnProperty(key)) {
if (data[key] != "_s") {
var label_names = data[key];
if (label_names == translate_name) {
var label_names_zh_tw = data_zh_tw[key];
var label_names_ja_jp = data_ja_jp[key];
var label_names_it_it = data_it_it[key];
if (localStorage.getItem("events_default_version") != null && localStorage.getItem("events_default_version") == "4") {
if (translate_name == "person") {
if (G_LANG == "zh_tw")
translate_name = "人";
else if (G_LANG == "ja_jp")
translate_name = "人";
else if (G_LANG == "it_it")
translate_name = "Umana";
else
translate_name = "Human";
}
else if (translate_name == "car") {
if (G_LANG == "zh_tw")
translate_name = "車";
else if (G_LANG == "ja_jp")
translate_name = "車";
else if (G_LANG == "it_it")
translate_name = "Veicolo";
else
translate_name = "Vehicle";
}
else {
if (G_LANG == "zh_tw")
translate_name = label_names_zh_tw;
else if (G_LANG == "ja_jp")
translate_name = label_names_ja_jp;
else if (G_LANG == "it_it")
translate_name = label_names_it_it;
}
}
else {
if (G_LANG == "zh_tw")
translate_name = label_names_zh_tw;
else if (G_LANG == "ja_jp")
translate_name = label_names_ja_jp;
else if (G_LANG == "it_it")
translate_name = label_names_it_it;
}
break;
}
}
}
}
}
if (localStorage.getItem("dataset_ver").search("IFIRE") >= 1) {
var data = json_label_names.AIFIRE[0];
var data_zh_tw = json_label_names_zh_tw.AIFIRE[0];
var data_ja_jp = json_label_names_ja_jp.AIFIRE[0];
var data_it_it = json_label_names_it_it.AIFIRE[0];
for (var key in data) {
if (data.hasOwnProperty(key)) {
if (data[key] != "_s") {
var label_names = data[key];
if (label_names == translate_name) {
var label_names_zh_tw = data_zh_tw[key];
var label_names_ja_jp = data_ja_jp[key];
var label_names_it_it = data_it_it[key];
if (G_LANG == "zh_tw")
translate_name = label_names_zh_tw;
else if (G_LANG == "ja_jp")
translate_name = label_names_ja_jp;
else if (G_LANG == "it_it")
translate_name = label_names_it_it;
break;
}
}
}
}
}
if (localStorage.getItem("dataset_ver").search("IAERO") >= 1) {
var data = json_label_names.AIAERO[0];
var data_zh_tw = json_label_names_zh_tw.AIAERO[0];
var data_ja_jp = json_label_names_ja_jp.AIAERO[0];
var data_it_it = json_label_names_it_it.AIAERO[0];
for (var key in data) {
if (data.hasOwnProperty(key)) {
if (data[key] != "_s") {
var label_names = data[key];
if (label_names == translate_name) {
var label_names_zh_tw = data_zh_tw[key];
var label_names_ja_jp = data_ja_jp[key];
var label_names_it_it = data_it_it[key];
if (G_LANG == "zh_tw")
translate_name = label_names_zh_tw;
else if (G_LANG == "ja_jp")
translate_name = label_names_ja_jp;
else if (G_LANG == "it_it")
translate_name = label_names_it_it;
break;
}
}
}
}
}
if (localStorage.getItem("dataset_ver").search("ITOF") >= 1) {
var data = json_label_names.AITOF[0];
var data_zh_tw = json_label_names_zh_tw.AITOF[0];
var data_ja_jp = json_label_names_ja_jp.AITOF[0];
var data_it_it = json_label_names_it_it.AITOF[0];
for (var key in data) {
if (data.hasOwnProperty(key)) {
if (data[key] != "_s") {
var label_names = data[key];
if (label_names == translate_name) {
var label_names_zh_tw = data_zh_tw[key];
var label_names_ja_jp = data_ja_jp[key];
var label_names_it_it = data_it_it[key];
if (G_LANG == "zh_tw")
translate_name = label_names_zh_tw;
else if (G_LANG == "ja_jp")
translate_name = label_names_ja_jp;
else if (G_LANG == "it_it")
translate_name = label_names_it_it;
break;
}
}
}
}
}
if (localStorage.getItem("dataset_ver").search("UMAN") >= 1) {
var data = json_label_names.AIHUMAN[0];
var data_zh_tw = json_label_names_zh_tw.AIHUMAN[0];
var data_ja_jp = json_label_names_ja_jp.AIHUMAN[0];
var data_it_it = json_label_names_it_it.AIHUMAN[0];
for (var key in data) {
if (data.hasOwnProperty(key)) {
if (data[key] != "_s") {
var label_names = data[key];
if (label_names == translate_name) {
var label_names_zh_tw = data_zh_tw[key];
var label_names_ja_jp = data_ja_jp[key];
var label_names_it_it = data_it_it[key];
if (G_LANG == "zh_tw")
translate_name = label_names_zh_tw;
else if (G_LANG == "ja_jp")
translate_name = label_names_ja_jp;
else if (G_LANG == "it_it")
translate_name = label_names_it_it;
break;
}
}
}
}
}
if (localStorage.getItem("dataset_ver").search("ISAFTY") >= 1) {
var data = json_label_names.AISAFETY[0];
var data_zh_tw = json_label_names_zh_tw.AISAFETY[0];
var data_ja_jp = json_label_names_ja_jp.AISAFETY[0];
var data_it_it = json_label_names_it_it.AISAFETY[0];
for (var key in data) {
if (data.hasOwnProperty(key)) {
if (data[key] != "_s") {
var label_names = data[key];
if (label_names == translate_name) {
var label_names_zh_tw = data_zh_tw[key];
var label_names_ja_jp = data_ja_jp[key];
var label_names_it_it = data_it_it[key];
if (G_LANG == "zh_tw")
translate_name = label_names_zh_tw;
else if (G_LANG == "ja_jp")
translate_name = label_names_ja_jp;
else if (G_LANG == "it_it")
translate_name = label_names_it_it;
break;
}
}
}
}
}
if (localStorage.getItem("dataset_ver").search("IPRODUCTION") >= 1) {
var data = json_label_names.AIPRODUCTION[0];
var data_zh_tw = json_label_names_zh_tw.AIPRODUCTION[0];
var data_ja_jp = json_label_names_ja_jp.AIPRODUCTION[0];
var data_it_it = json_label_names_it_it.AIPRODUCTION[0];
for (var key in data) {
if (data.hasOwnProperty(key)) {
if (data[key] != "_s") {
var label_names = data[key];
if (label_names == translate_name) {
var label_names_zh_tw = data_zh_tw[key];
var label_names_ja_jp = data_ja_jp[key];
var label_names_it_it = data_it_it[key];
if (G_LANG == "zh_tw")
translate_name = label_names_zh_tw;
else if (G_LANG == "ja_jp")
translate_name = label_names_ja_jp;
else if (G_LANG == "it_it")
translate_name = label_names_it_it;
break;
}
}
}
}
}
if (localStorage.getItem("dataset_ver").search("ISHIP") >= 1) {
var data = json_label_names.AISHIP[0];
var data_zh_tw = json_label_names_zh_tw.AISHIP[0];
var data_ja_jp = json_label_names_ja_jp.AISHIP[0];
var data_it_it = json_label_names_it_it.AISHIP[0];
for (var key in data) {
if (data.hasOwnProperty(key)) {
if (data[key] != "_s") {
var label_names = data[key];
if (label_names == translate_name) {
var label_names_zh_tw = data_zh_tw[key];
var label_names_ja_jp = data_ja_jp[key];
var label_names_it_it = data_it_it[key];
if (G_LANG == "zh_tw")
translate_name = label_names_zh_tw;
else if (G_LANG == "ja_jp")
translate_name = label_names_ja_jp;
else if (G_LANG == "it_it")
translate_name = label_names_it_it;
break;
}
}
}
}
}
if (localStorage.getItem("license_type").search("LPR") >= 1) {
var data = json_label_names.AIANPR[0];
var data_zh_tw = json_label_names_zh_tw.AIANPR[0];
var data_ja_jp = json_label_names_ja_jp.AIANPR[0];
var data_it_it = json_label_names_it_it.AIANPR[0];
for (var key in data) {
if (data.hasOwnProperty(key)) {
if (data[key] != "_s") {
var label_names = data[key];
if (label_names == translate_name) {
var label_names_zh_tw = data_zh_tw[key];
var label_names_ja_jp = data_ja_jp[key];
var label_names_it_it = data_it_it[key];
if (G_LANG == "zh_tw")
translate_name = label_names_zh_tw;
else if (G_LANG == "ja_jp")
translate_name = label_names_ja_jp;
else if (G_LANG == "it_it")
translate_name = label_names_it_it;
break;
}
}
}
}
}
if (localStorage.getItem("dataset_ver").search("IAML") >= 1) {
var data = json_label_names.AIAML[0];
var data_zh_tw = json_label_names_zh_tw.AIAML[0];
var data_ja_jp = json_label_names_ja_jp.AIAML[0];
var data_it_it = json_label_names_it_it.AIAML[0];
for (var key in data) {
if (data.hasOwnProperty(key)) {
if (data[key] != "_s") {
var label_names = data[key];
if (label_names == translate_name) {
var label_names_zh_tw = data_zh_tw[key];
var label_names_ja_jp = data_ja_jp[key];
var label_names_it_it = data_it_it[key];
if (G_LANG == "zh_tw")
translate_name = label_names_zh_tw;
else if (G_LANG == "ja_jp")
translate_name = label_names_ja_jp;
else if (G_LANG == "it_it")
translate_name = label_names_it_it;
break;
}
}
}
}
}
if (localStorage.getItem("dataset_ver").search("IFRONTBACK") >= 1) {
var data = json_label_names.AIFRONTBACK[0];
var data_zh_tw = json_label_names_zh_tw.AIFRONTBACK[0];
var data_ja_jp = json_label_names_ja_jp.AIFRONTBACK[0];
var data_it_it = json_label_names_it_it.AIFRONTBACK[0];
for (var key in data) {
if (data.hasOwnProperty(key)) {
if (data[key] != "_s") {
var label_names = data[key];
if (label_names == translate_name) {
var label_names_zh_tw = data_zh_tw[key];
var label_names_ja_jp = data_ja_jp[key];
var label_names_it_it = data_it_it[key];
if (G_LANG == "zh_tw")
translate_name = label_names_zh_tw;
else if (G_LANG == "ja_jp")
translate_name = label_names_ja_jp;
else if (G_LANG == "it_it")
translate_name = label_names_it_it;
break;
}
}
}
}
}
if (localStorage.getItem("dataset_ver").search("IRAIL") >= 1) {
var data = json_label_names.AIRAILWAY[0];
var data_zh_tw = json_label_names_zh_tw.AIRAILWAY[0];
var data_ja_jp = json_label_names_ja_jp.AIRAILWAY[0];
var data_it_it = json_label_names_it_it.AIRAILWAY[0];
for (var key in data) {
if (data.hasOwnProperty(key)) {
if (data[key] != "_s") {
var label_names = data[key];
if (label_names == translate_name) {
var label_names_zh_tw = data_zh_tw[key];
var label_names_ja_jp = data_ja_jp[key];
var label_names_it_it = data_it_it[key];
if (G_LANG == "zh_tw")
translate_name = label_names_zh_tw;
else if (G_LANG == "ja_jp")
translate_name = label_names_ja_jp;
else if (G_LANG == "it_it")
translate_name = label_names_it_it;
break;
}
}
}
}
}
if (localStorage.getItem("dataset_ver").search("ISPORTS") >= 1) {
var data = json_label_names.AISPORTS[0];
var data_zh_tw = json_label_names_zh_tw.AISPORTS[0];
var data_ja_jp = json_label_names_ja_jp.AISPORTS[0];
var data_it_it = json_label_names_it_it.AISPORTS[0];
for (var key in data) {
if (data.hasOwnProperty(key)) {
if (data[key] != "_s") {
var label_names = data[key];
if (label_names == translate_name) {
var label_names_zh_tw = data_zh_tw[key];
var label_names_ja_jp = data_ja_jp[key];
var label_names_it_it = data_it_it[key];
if (G_LANG == "zh_tw")
translate_name = label_names_zh_tw;
else if (G_LANG == "ja_jp")
translate_name = label_names_ja_jp;
else if (G_LANG == "it_it")
translate_name = label_names_it_it;
break;
}
}
}
}
}
if (localStorage.getItem("dataset_ver").search("IFACE") >= 1) {
var data = json_label_names.AIFACE[0];
var data_zh_tw = json_label_names_zh_tw.AIFACE[0];
var data_ja_jp = json_label_names_ja_jp.AIFACE[0];
var data_it_it = json_label_names_it_it.AIFACE[0];
for (var key in data) {
if (data.hasOwnProperty(key)) {
if (data[key] != "_s") {
var label_names = data[key];
if (label_names == translate_name) {
var label_names_zh_tw = data_zh_tw[key];
var label_names_ja_jp = data_ja_jp[key];
var label_names_it_it = data_it_it[key];
if (G_LANG == "zh_tw")
translate_name = label_names_zh_tw;
else if (G_LANG == "ja_jp")
translate_name = label_names_ja_jp;
else if (G_LANG == "it_it")
translate_name = label_names_it_it;
break;
}
}
}
}
}
if (localStorage.getItem("dataset_ver").search("IGARBAGE") >= 1) {
var data = json_label_names.AIGARBAGE[0];
var data_zh_tw = json_label_names_zh_tw.AIGARBAGE[0];
var data_ja_jp = json_label_names_ja_jp.AIGARBAGE[0];
var data_it_it = json_label_names_it_it.AIGARBAGE[0];
for (var key in data) {
if (data.hasOwnProperty(key)) {
if (data[key] != "_s") {
var label_names = data[key];
if (label_names == translate_name) {
var label_names_zh_tw = data_zh_tw[key];
var label_names_ja_jp = data_ja_jp[key];
var label_names_it_it = data_it_it[key];
if (G_LANG == "zh_tw")
translate_name = label_names_zh_tw;
else if (G_LANG == "ja_jp")
translate_name = label_names_ja_jp;
else if (G_LANG == "it_it")
translate_name = label_names_it_it;
break;
}
}
}
}
}
if (localStorage.getItem("dataset_ver").search("IGENDER") >= 1) {
var data = json_label_names.AIGENDER[0];
var data_zh_tw = json_label_names_zh_tw.AIGENDER[0];
var data_ja_jp = json_label_names_ja_jp.AIGENDER[0];
var data_it_it = json_label_names_it_it.AIGENDER[0];
for (var key in data) {
if (data.hasOwnProperty(key)) {
if (data[key] != "_s") {
var label_names = data[key];
if (label_names == translate_name) {
var label_names_zh_tw = data_zh_tw[key];
var label_names_ja_jp = data_ja_jp[key];
var label_names_it_it = data_it_it[key];
if (G_LANG == "zh_tw")
translate_name = label_names_zh_tw;
else if (G_LANG == "ja_jp")
translate_name = label_names_ja_jp;
else if (G_LANG == "it_it")
translate_name = label_names_it_it;
break;
}
}
}
}
}
return translate_name;
}
// ---------------------------------------------------------------
// ToF min max
function func_changeColorBarMinMax(tofInfo) {
//console.log("[alarm.js] /getalarmmotion min_tof_range", tofInfo.min_tof_range);
//console.log("[alarm.js] /getalarmmotion max_tof_range", tofInfo.max_tof_range);
//console.log("----------------------------------------");
// convert "Meter" to "CM" & "inch"
//var cmToInchRatio = 0.3937;
var meterToft = 3.2808
var minmeter = Math.floor(tofInfo.min_tof_range * 1000) / 1000;
var minft = Math.floor(tofInfo.min_tof_range * meterToft * 1000) / 1000;
var maxmeter = Math.floor(tofInfo.max_tof_range * 1000) / 1000;
var maxft = Math.floor(tofInfo.max_tof_range * meterToft * 1000) / 1000;
var canvasDiv = $("#CanvasTripwire1").parent().parent().parent();
var canvasH = canvasDiv.height();
var tofMinMaxTextHeight = 16;
var color_map_height = canvasH - (tofMinMaxTextHeight * 2);
var ratio_current_min = minmeter / 7.4;
var ratio_current_max = maxmeter / 7.4 - ratio_current_min;
var ratio_max = 1 - ratio_current_min - ratio_current_max;
//if (minmeter < 0.3)
//$("#tof_current_min div:first").html('<div>Too little, Min:' + minmeter.toString() + 'M&ensp;' + minft.toString() + 'Ft</div>');
//else if (minmeter > 7.4)
//$("#tof_current_min div:first").html('<div>Too large, Min:' + minmeter.toString() + 'M&ensp;' + minft.toString() + 'Ft</div>');
//else
$("#tof_current_min div:first").html('<div>Min:' + minmeter.toString() + 'M&ensp;' + minft.toString() + 'Ft</div>');
//if (maxmeter < 0.3 )
//$("#tof_current_max div:first").html('<div>Too little, Max:' + maxmeter.toString() + 'M&ensp;' + maxft.toString() + 'Ft</div>');
//else if (maxmeter > 7.4)
//$("#tof_current_max div:first").html('<div>Too large, Max:' + maxmeter.toString() + 'M&ensp;' + maxft.toString() + 'Ft</div>');
//else
$("#tof_current_max div:first").html('<div>Max:' + maxmeter.toString() + 'M&ensp;' + maxft.toString() + 'Ft</div>');
$("#tof_current_min").css("margin-top", Math.round(color_map_height * ratio_current_min - 10).toString() + "px");
$("#tof_current_max").css("margin-top", Math.round(color_map_height * ratio_current_max - 10).toString() + "px");
$("#tofMax").css("margin-top", Math.round(color_map_height * ratio_max - 10).toString() + "px");
if (minmeter >= maxmeter) {
$("#tof_current_min").css("display", "none");
$("#tof_current_max").css("display", "none");
$("#tofMax").css("margin-top", Math.round(color_map_height - 14).toString() + "px");
}
else {
$("#tof_current_min").css("display", "block");
$("#tof_current_max").css("display", "block");
}
}
var g_event_stream = null;
function create_canvas_stream1() {
var ui_width = G_VIEW_CANVAS_X;
var ui_height = G_VIEW_CANVAS_Y;
var l_cgi = "/websocket?";
var l_token = "";
var streamIndex = 1; // 預設 LILIN version 拿 Encoder 2
var g_event_para = new _codec_para();
// 09-10 依據不同版本切換串流
// 共用
var decoder_PROFILE_ETYPE_Array = '1';
var decoder_AD_TYPE = 5;
var decoder_AD_RATE = '8000'
// 差異部分
var decoder_PROFILE_W = '720';
var decoder_PROFILE_H = '480';
var decoder_PROFILE_FPS = '15';
if (localStorage.getItem("events_default_version") != null && localStorage.getItem("events_default_version") == "4")
{
streamIndex = 2; // 針對 Live View 版本的雙模機器改拿 Encoder 3
}
var event_uri = l_cgi + 'eventstream=' + streamIndex.toString() + l_token;
// 取得 ipcam service video 設定
$.ajax({
url: '/get_sencode_info', // 替換為實際 API URL
method: 'GET',
async: false,
dataType: 'xml',
success: function(data) {
// console.log(data);
// 根據指定索引檢索 stream 節點
var stream = $(data).find('stream').eq(streamIndex);
if (stream.length) {
decoder_PROFILE_W = stream.find('width').text();
decoder_PROFILE_H = stream.find('height').text();
decoder_PROFILE_FPS = stream.find('fps').text();
console.log('H264 Stream Index:', streamIndex, 'Width:', decoder_PROFILE_W, 'Height:', decoder_PROFILE_H, 'FPS:' , decoder_PROFILE_FPS);
} else {
console.error('Stream with index', streamIndex, 'not found.');
}
},
error: function(xhr, status, error) {
console.error('Error fetching data:', error);
}
});
g_event_para.worker_num = 1;
g_event_para.vc[0] = { width: decoder_PROFILE_W, height: decoder_PROFILE_H, id: "CanvasBgContainer", frameszie: 4096000 };
g_event_para.droplatencydecoded = true;
g_event_stream = new _codec(g_event_para);
g_event_stream.streamType = WS_WR;
var node = document.getElementById(g_event_para.vc[0].id);
node.appendChild(g_event_stream.get_vc_element(0));
g_event_stream.set_vc_element_size(0, ui_width, ui_height); //display size
g_event_stream.init_event(0, 0, event_uri);
g_event_stream.DecodeInit(decoder_PROFILE_ETYPE_Array, decoder_AD_TYPE, decoder_PROFILE_W, decoder_PROFILE_H, decoder_PROFILE_FPS, decoder_AD_RATE, 16000);
return g_event_stream;
}
function openAida() {
var port = localStorage.getItem('plugin_wan_port');
var url = 'http://' + window.location.hostname + ':' + port + '/Aida/index.html';
window.open(url, '_blank');
}
function openIVSsettins() {
var port = localStorage.getItem('plugin_wan_port');
var url = 'http://' + window.location.hostname + ':' + port + '/Aida/object_index.html';
window.open(url, '_blank', 'resizable=yes,top=0,left=0,width=900,height=400');
}
var k_count = -1;
function func_setconfigfile(json_data) {
waitSeconds(100);
$.ajax({
url: '/' + g_tcp_tunnel_token + "/setconfigfile",
method: "POST",
async: false,
data: json_data,
//contentType: false,
processData: false,
timeout: 5000,
cache: false,
xhrFields: {
withCredentials: true // 設置為 true 如果需要帶上 Cookies 或其他認證
},
contentType: 'text/plain', // 傳送純文本
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) {
//console.info();
},
error: function (retdata) {
console.warn(retdata);
k_count++;
if (k_count <= 94) {
waitSeconds(1000);
func_setconfigfile(json_data);
}
}
});
return false;
}
// 11-01
var defaultPolygonColor = "#ffff00"; // 預設色號 亮黃色的 Zone
var alarmColor = "#ff0000"; // 觸發 禁區、違停、警戒線 事件時,顯示紅色的 Zone ( Polygon )
var defaultZoneAlarmStatus = {'behavior_id': 0, 'red_zone': 0, 'time_stamp': 0};
var g_zoneAlarmStatus = func_initZoneAlarmStatus(defaultZoneAlarmStatus);
var g_zoneAlarmColorDisplayTime = 2; // Unit : second
function func_checkZoneColor()
{
// console.log("g_zoneAlarmStatus: ", g_zoneAlarmStatus);
var currentTimeDiff = null;
var zoneColor = defaultPolygonColor;
for (var zoneIndex = 0; zoneIndex < MAX_DETECTION_ZONE; zoneIndex++)
{
zoneColor = defaultPolygonColor;
if (g_zoneAlarmStatus[zoneIndex]['time_stamp'] > 0)
{
currentTimeDiff = new Date().getTime() - g_zoneAlarmStatus[zoneIndex]['time_stamp'];
if (currentTimeDiff > (g_zoneAlarmColorDisplayTime * 1000))
{
// console.log(`[func_checkZoneColor] reset g_zoneAlarmStatus[${zoneIndex}]`);
g_zoneAlarmStatus[zoneIndex]['behavior_id'] = 0;
g_zoneAlarmStatus[zoneIndex]['red_zone'] = 0;
g_zoneAlarmStatus[zoneIndex]['time_stamp'] = 0;
} // else 的 zone 仍在顯示時間內,仰賴 red_zone 賦予警報顏色
if (g_zoneAlarmStatus[zoneIndex]['red_zone'] == 1)
{
zoneColor = alarmColor;
} // else 的 zone 應是剛被 reset 狀態值的,以預設顏色顯示
} // else 是 時間戳被歸零的 以預設顏色顯示
// console.log(`[func_checkZoneColor] check zone ${(zoneIndex+1)} color:${zoneColor}`);
// check all zone
// console.log("check show_all_zone: ", show_all_zone);
if (show_all_zone == 0)
{
// check which canvas is active
try
{
window["canvasTripwire"+(zoneIndex+1)].getObjects()[0].stroke = zoneColor;
}
catch (error)
{
console.log(error);
}
}
else
{
if (zoneIndex < count_zone) {
// console.log(`[func_checkZoneColor] activeZoneIndex: ${zoneIndex}`);
canvasTripwire_all.getObjects()[zoneIndex].stroke = zoneColor;
}
}
}
}
function func_checkTriggerZoneStatus(behavior_id)
{
// console.log("checked_trigger_events:");
// console.log(checked_trigger_events);
//var trigger_index = null;
/*if (behavior_id == 1) // 禁區
{
trigger_index = 0;
}
else if (behavior_id == 4) // 違停
{
trigger_index = 1;
}
else if (behavior_id == 8) // 警戒線
{
trigger_index = 4;
}*/
for (var zoneIndex = 0; zoneIndex < MAX_DETECTION_ZONE; zoneIndex++) {
for (var trigger_index = 0; trigger_index < MAX_SIZE_IDC_LIST_TRIGGER_EVENTS; trigger_index++) {
if (checked_trigger_events[zoneIndex][trigger_index] == 1) {
if (g_zoneAlarmStatus[zoneIndex]['time_stamp'] == 0) {
g_zoneAlarmStatus[zoneIndex]['behavior_id'] = behavior_id;
g_zoneAlarmStatus[zoneIndex]['time_stamp'] = new Date().getTime();
// console.log(`[func_checkTriggerZoneStatus] init g_zoneAlarmStatus[${zoneIndex}]['time_stamp']:${g_zoneAlarmStatus[zoneIndex]['time_stamp']}`);
g_zoneAlarmStatus[zoneIndex]['red_zone'] = 1;
}
break;
}
}
}
// console.log("[func_checkTriggerZoneStatus] check g_zoneAlarmStatus:");
// console.log(g_zoneAlarmStatus);
}
function func_initZoneAlarmStatus(defaultValue)
{
var array = [];
for (var i = 0; i < MAX_DETECTION_ZONE; i++)
{
// 確保每個元素都是一個新的副本,避免不同 Zone 紀載不同行為時互相干擾狀態值
array.push(JSON.parse(JSON.stringify(defaultValue)));
}
return array;
}