diff --git a/Aida/Icon/CarWithRim_Yellow_64x64px.png b/Aida/Icon/CarWithRim_Yellow_64x64px.png new file mode 100644 index 0000000..49384c8 Binary files /dev/null and b/Aida/Icon/CarWithRim_Yellow_64x64px.png differ diff --git a/Aida/Icon/Car_Green_64x64px.png b/Aida/Icon/Car_Green_64x64px.png new file mode 100644 index 0000000..0c10179 Binary files /dev/null and b/Aida/Icon/Car_Green_64x64px.png differ diff --git a/Aida/Icon/Counter_Green_64x64px.png b/Aida/Icon/Counter_Green_64x64px.png new file mode 100644 index 0000000..a2c106c Binary files /dev/null and b/Aida/Icon/Counter_Green_64x64px.png differ diff --git a/Aida/Icon/EUR.png b/Aida/Icon/EUR.png new file mode 100644 index 0000000..7691943 Binary files /dev/null and b/Aida/Icon/EUR.png differ diff --git a/Aida/Icon/FlowIn02_Green_64x64px.png b/Aida/Icon/FlowIn02_Green_64x64px.png new file mode 100644 index 0000000..50601a4 Binary files /dev/null and b/Aida/Icon/FlowIn02_Green_64x64px.png differ diff --git a/Aida/Icon/FlowIn_Green_64x64px.png b/Aida/Icon/FlowIn_Green_64x64px.png new file mode 100644 index 0000000..8060ae4 Binary files /dev/null and b/Aida/Icon/FlowIn_Green_64x64px.png differ diff --git a/Aida/Icon/FlowOut02_Green_64x64px.png b/Aida/Icon/FlowOut02_Green_64x64px.png new file mode 100644 index 0000000..daa5fc8 Binary files /dev/null and b/Aida/Icon/FlowOut02_Green_64x64px.png differ diff --git a/Aida/Icon/FlowOut_Green_64x64px.png b/Aida/Icon/FlowOut_Green_64x64px.png new file mode 100644 index 0000000..33275a9 Binary files /dev/null and b/Aida/Icon/FlowOut_Green_64x64px.png differ diff --git a/Aida/Icon/GoStraight_Green_64x64px.png b/Aida/Icon/GoStraight_Green_64x64px.png new file mode 100644 index 0000000..90b4417 Binary files /dev/null and b/Aida/Icon/GoStraight_Green_64x64px.png differ diff --git a/Aida/Icon/HardHat_Green_64x64px.png b/Aida/Icon/HardHat_Green_64x64px.png new file mode 100644 index 0000000..8aae1c7 Binary files /dev/null and b/Aida/Icon/HardHat_Green_64x64px.png differ diff --git a/Aida/Icon/LoiteringDetection_Green_64x64px.png b/Aida/Icon/LoiteringDetection_Green_64x64px.png new file mode 100644 index 0000000..72126fc Binary files /dev/null and b/Aida/Icon/LoiteringDetection_Green_64x64px.png differ diff --git a/Aida/Icon/Mask_Green_64x64px.png b/Aida/Icon/Mask_Green_64x64px.png new file mode 100644 index 0000000..fc380ba Binary files /dev/null and b/Aida/Icon/Mask_Green_64x64px.png differ diff --git a/Aida/Icon/MotorbikeWithRim_Yellow_64x64px.png b/Aida/Icon/MotorbikeWithRim_Yellow_64x64px.png new file mode 100644 index 0000000..4836a4d Binary files /dev/null and b/Aida/Icon/MotorbikeWithRim_Yellow_64x64px.png differ diff --git a/Aida/Icon/NoCar_Red_64x64px.png b/Aida/Icon/NoCar_Red_64x64px.png new file mode 100644 index 0000000..472fad1 Binary files /dev/null and b/Aida/Icon/NoCar_Red_64x64px.png differ diff --git a/Aida/Icon/NoCar_Red_64x64px_1.png b/Aida/Icon/NoCar_Red_64x64px_1.png new file mode 100644 index 0000000..472fad1 Binary files /dev/null and b/Aida/Icon/NoCar_Red_64x64px_1.png differ diff --git a/Aida/Icon/NoCar_Red_64x64px_2.png b/Aida/Icon/NoCar_Red_64x64px_2.png new file mode 100644 index 0000000..472fad1 Binary files /dev/null and b/Aida/Icon/NoCar_Red_64x64px_2.png differ diff --git a/Aida/Icon/NoCar_Red_64x64px_3.png b/Aida/Icon/NoCar_Red_64x64px_3.png new file mode 100644 index 0000000..472fad1 Binary files /dev/null and b/Aida/Icon/NoCar_Red_64x64px_3.png differ diff --git a/Aida/Icon/NoGoingStraight_Red_64x64px.png b/Aida/Icon/NoGoingStraight_Red_64x64px.png new file mode 100644 index 0000000..5270ff2 Binary files /dev/null and b/Aida/Icon/NoGoingStraight_Red_64x64px.png differ diff --git a/Aida/Icon/NoHardHat_Red_64x64px.png b/Aida/Icon/NoHardHat_Red_64x64px.png new file mode 100644 index 0000000..75f9505 Binary files /dev/null and b/Aida/Icon/NoHardHat_Red_64x64px.png differ diff --git a/Aida/Icon/NoLeftTurn_Red_64x64px.png b/Aida/Icon/NoLeftTurn_Red_64x64px.png new file mode 100644 index 0000000..e5445c0 Binary files /dev/null and b/Aida/Icon/NoLeftTurn_Red_64x64px.png differ diff --git a/Aida/Icon/NoMask_Red_64x64px.png b/Aida/Icon/NoMask_Red_64x64px.png new file mode 100644 index 0000000..fd608eb Binary files /dev/null and b/Aida/Icon/NoMask_Red_64x64px.png differ diff --git a/Aida/Icon/NoMotorbike_Red_64x64px.png b/Aida/Icon/NoMotorbike_Red_64x64px.png new file mode 100644 index 0000000..716d4e1 Binary files /dev/null and b/Aida/Icon/NoMotorbike_Red_64x64px.png differ diff --git a/Aida/Icon/NoParking_Red_64x64px.png b/Aida/Icon/NoParking_Red_64x64px.png new file mode 100644 index 0000000..d1ea96a Binary files /dev/null and b/Aida/Icon/NoParking_Red_64x64px.png differ diff --git a/Aida/Icon/NoPeople_Red_64x64px.png b/Aida/Icon/NoPeople_Red_64x64px.png new file mode 100644 index 0000000..0c93574 Binary files /dev/null and b/Aida/Icon/NoPeople_Red_64x64px.png differ diff --git a/Aida/Icon/NoRightTurn_Red_64x64px.png b/Aida/Icon/NoRightTurn_Red_64x64px.png new file mode 100644 index 0000000..1f55fa1 Binary files /dev/null and b/Aida/Icon/NoRightTurn_Red_64x64px.png differ diff --git a/Aida/Icon/NoTruck_Red_64x64px.png b/Aida/Icon/NoTruck_Red_64x64px.png new file mode 100644 index 0000000..1ef0a32 Binary files /dev/null and b/Aida/Icon/NoTruck_Red_64x64px.png differ diff --git a/Aida/Icon/NoUTurn_Red_64x64px.png b/Aida/Icon/NoUTurn_Red_64x64px.png new file mode 100644 index 0000000..bf978b4 Binary files /dev/null and b/Aida/Icon/NoUTurn_Red_64x64px.png differ diff --git a/Aida/Icon/NoWay_Red_64x64px.png b/Aida/Icon/NoWay_Red_64x64px.png new file mode 100644 index 0000000..99a61c4 Binary files /dev/null and b/Aida/Icon/NoWay_Red_64x64px.png differ diff --git a/Aida/Icon/ParkingSpot_Green_64x64px.png b/Aida/Icon/ParkingSpot_Green_64x64px.png new file mode 100644 index 0000000..9beb78c Binary files /dev/null and b/Aida/Icon/ParkingSpot_Green_64x64px.png differ diff --git a/Aida/Icon/Queue_Green_64x64px.png b/Aida/Icon/Queue_Green_64x64px.png new file mode 100644 index 0000000..c4199d2 Binary files /dev/null and b/Aida/Icon/Queue_Green_64x64px.png differ diff --git a/Aida/Icon/SpeedWithRim_Red_64x64px.png b/Aida/Icon/SpeedWithRim_Red_64x64px.png new file mode 100644 index 0000000..4d9aad6 Binary files /dev/null and b/Aida/Icon/SpeedWithRim_Red_64x64px.png differ diff --git a/Aida/Icon/SpeedWithRim_Yellow_64x64px.png b/Aida/Icon/SpeedWithRim_Yellow_64x64px.png new file mode 100644 index 0000000..f7a9e3c Binary files /dev/null and b/Aida/Icon/SpeedWithRim_Yellow_64x64px.png differ diff --git a/Aida/Icon/TWN.png b/Aida/Icon/TWN.png new file mode 100644 index 0000000..a43b677 Binary files /dev/null and b/Aida/Icon/TWN.png differ diff --git a/Aida/Icon/TruckWithRim_Yellow_64x64px.png b/Aida/Icon/TruckWithRim_Yellow_64x64px.png new file mode 100644 index 0000000..397dced Binary files /dev/null and b/Aida/Icon/TruckWithRim_Yellow_64x64px.png differ diff --git a/Aida/Icon/TurnLeft_Green_64x64px.png b/Aida/Icon/TurnLeft_Green_64x64px.png new file mode 100644 index 0000000..2be09de Binary files /dev/null and b/Aida/Icon/TurnLeft_Green_64x64px.png differ diff --git a/Aida/Icon/TurnRight_Green_64x64px.png b/Aida/Icon/TurnRight_Green_64x64px.png new file mode 100644 index 0000000..5d60fe6 Binary files /dev/null and b/Aida/Icon/TurnRight_Green_64x64px.png differ diff --git a/Aida/Icon/USA.png b/Aida/Icon/USA.png new file mode 100644 index 0000000..ca36373 Binary files /dev/null and b/Aida/Icon/USA.png differ diff --git a/Aida/Icon/WalkingManWithRim_Yellow_64x64px.png b/Aida/Icon/WalkingManWithRim_Yellow_64x64px.png new file mode 100644 index 0000000..d1edac7 Binary files /dev/null and b/Aida/Icon/WalkingManWithRim_Yellow_64x64px.png differ diff --git a/Aida/Icon/WalkingMan_Green_64x64px.png b/Aida/Icon/WalkingMan_Green_64x64px.png new file mode 100644 index 0000000..ee11e96 Binary files /dev/null and b/Aida/Icon/WalkingMan_Green_64x64px.png differ diff --git a/Aida/Icon/ZoneViolation_Red_64x64px.png b/Aida/Icon/ZoneViolation_Red_64x64px.png new file mode 100644 index 0000000..33a2662 Binary files /dev/null and b/Aida/Icon/ZoneViolation_Red_64x64px.png differ diff --git a/Aida/Icon/counter_icon/car_1_300X300_blue.png b/Aida/Icon/counter_icon/car_1_300X300_blue.png new file mode 100644 index 0000000..8ee5022 Binary files /dev/null and b/Aida/Icon/counter_icon/car_1_300X300_blue.png differ diff --git a/Aida/Icon/counter_icon/car_1_300X300_red.png b/Aida/Icon/counter_icon/car_1_300X300_red.png new file mode 100644 index 0000000..98023db Binary files /dev/null and b/Aida/Icon/counter_icon/car_1_300X300_red.png differ diff --git a/Aida/Icon/counter_icon/car_300X300_white.png b/Aida/Icon/counter_icon/car_300X300_white.png new file mode 100644 index 0000000..3a7243b Binary files /dev/null and b/Aida/Icon/counter_icon/car_300X300_white.png differ diff --git a/Aida/Icon/counter_icon/car_distance_1_300X300_blue.png b/Aida/Icon/counter_icon/car_distance_1_300X300_blue.png new file mode 100644 index 0000000..d22cb1f Binary files /dev/null and b/Aida/Icon/counter_icon/car_distance_1_300X300_blue.png differ diff --git a/Aida/Icon/counter_icon/car_distance_1_300X300_red.png b/Aida/Icon/counter_icon/car_distance_1_300X300_red.png new file mode 100644 index 0000000..49dfacd Binary files /dev/null and b/Aida/Icon/counter_icon/car_distance_1_300X300_red.png differ diff --git a/Aida/Icon/counter_icon/car_distance_300X300_white.png b/Aida/Icon/counter_icon/car_distance_300X300_white.png new file mode 100644 index 0000000..d404da8 Binary files /dev/null and b/Aida/Icon/counter_icon/car_distance_300X300_white.png differ diff --git a/Aida/Icon/counter_icon/container_1_300X300_blue.png b/Aida/Icon/counter_icon/container_1_300X300_blue.png new file mode 100644 index 0000000..8aa49ee Binary files /dev/null and b/Aida/Icon/counter_icon/container_1_300X300_blue.png differ diff --git a/Aida/Icon/counter_icon/container_1_300X300_red.png b/Aida/Icon/counter_icon/container_1_300X300_red.png new file mode 100644 index 0000000..bf290a0 Binary files /dev/null and b/Aida/Icon/counter_icon/container_1_300X300_red.png differ diff --git a/Aida/Icon/counter_icon/container_300X300_white.png b/Aida/Icon/counter_icon/container_300X300_white.png new file mode 100644 index 0000000..8e4966a Binary files /dev/null and b/Aida/Icon/counter_icon/container_300X300_white.png differ diff --git a/Aida/Icon/counter_icon/cruise_ship_1_300X300_blue.png b/Aida/Icon/counter_icon/cruise_ship_1_300X300_blue.png new file mode 100644 index 0000000..7552a3e Binary files /dev/null and b/Aida/Icon/counter_icon/cruise_ship_1_300X300_blue.png differ diff --git a/Aida/Icon/counter_icon/cruise_ship_1_300X300_red.png b/Aida/Icon/counter_icon/cruise_ship_1_300X300_red.png new file mode 100644 index 0000000..575524f Binary files /dev/null and b/Aida/Icon/counter_icon/cruise_ship_1_300X300_red.png differ diff --git a/Aida/Icon/counter_icon/cruise_ship_300X300_white.png b/Aida/Icon/counter_icon/cruise_ship_300X300_white.png new file mode 100644 index 0000000..ffc4284 Binary files /dev/null and b/Aida/Icon/counter_icon/cruise_ship_300X300_white.png differ diff --git a/Aida/Icon/counter_icon/dog_1_300X300_blue.png b/Aida/Icon/counter_icon/dog_1_300X300_blue.png new file mode 100644 index 0000000..8c9b914 Binary files /dev/null and b/Aida/Icon/counter_icon/dog_1_300X300_blue.png differ diff --git a/Aida/Icon/counter_icon/dog_1_300X300_red.png b/Aida/Icon/counter_icon/dog_1_300X300_red.png new file mode 100644 index 0000000..e5d8a0d Binary files /dev/null and b/Aida/Icon/counter_icon/dog_1_300X300_red.png differ diff --git a/Aida/Icon/counter_icon/dog_300X300_white.png b/Aida/Icon/counter_icon/dog_300X300_white.png new file mode 100644 index 0000000..4c1f929 Binary files /dev/null and b/Aida/Icon/counter_icon/dog_300X300_white.png differ diff --git a/Aida/Icon/counter_icon/facial_recognition_1_300X300_blue.png b/Aida/Icon/counter_icon/facial_recognition_1_300X300_blue.png new file mode 100644 index 0000000..105d79a Binary files /dev/null and b/Aida/Icon/counter_icon/facial_recognition_1_300X300_blue.png differ diff --git a/Aida/Icon/counter_icon/facial_recognition_1_300X300_red.png b/Aida/Icon/counter_icon/facial_recognition_1_300X300_red.png new file mode 100644 index 0000000..c1d7724 Binary files /dev/null and b/Aida/Icon/counter_icon/facial_recognition_1_300X300_red.png differ diff --git a/Aida/Icon/counter_icon/facial_recognition_300X300_white.png b/Aida/Icon/counter_icon/facial_recognition_300X300_white.png new file mode 100644 index 0000000..07bd8f6 Binary files /dev/null and b/Aida/Icon/counter_icon/facial_recognition_300X300_white.png differ diff --git a/Aida/Icon/counter_icon/fire_1_300X300_blue.png b/Aida/Icon/counter_icon/fire_1_300X300_blue.png new file mode 100644 index 0000000..885a6ed Binary files /dev/null and b/Aida/Icon/counter_icon/fire_1_300X300_blue.png differ diff --git a/Aida/Icon/counter_icon/fire_1_300X300_red.png b/Aida/Icon/counter_icon/fire_1_300X300_red.png new file mode 100644 index 0000000..800ef21 Binary files /dev/null and b/Aida/Icon/counter_icon/fire_1_300X300_red.png differ diff --git a/Aida/Icon/counter_icon/fire_300X300_white.png b/Aida/Icon/counter_icon/fire_300X300_white.png new file mode 100644 index 0000000..b6cbf6e Binary files /dev/null and b/Aida/Icon/counter_icon/fire_300X300_white.png differ diff --git a/Aida/Icon/counter_icon/helmet_1_300X300_blue.png b/Aida/Icon/counter_icon/helmet_1_300X300_blue.png new file mode 100644 index 0000000..a027729 Binary files /dev/null and b/Aida/Icon/counter_icon/helmet_1_300X300_blue.png differ diff --git a/Aida/Icon/counter_icon/helmet_1_300X300_red.png b/Aida/Icon/counter_icon/helmet_1_300X300_red.png new file mode 100644 index 0000000..00f15ac Binary files /dev/null and b/Aida/Icon/counter_icon/helmet_1_300X300_red.png differ diff --git a/Aida/Icon/counter_icon/helmet_300X300_white.png b/Aida/Icon/counter_icon/helmet_300X300_white.png new file mode 100644 index 0000000..bfa1ea7 Binary files /dev/null and b/Aida/Icon/counter_icon/helmet_300X300_white.png differ diff --git a/Aida/Icon/counter_icon/mask_1_300X300_blue.png b/Aida/Icon/counter_icon/mask_1_300X300_blue.png new file mode 100644 index 0000000..a7aaf07 Binary files /dev/null and b/Aida/Icon/counter_icon/mask_1_300X300_blue.png differ diff --git a/Aida/Icon/counter_icon/mask_1_300X300_red.png b/Aida/Icon/counter_icon/mask_1_300X300_red.png new file mode 100644 index 0000000..3958fcb Binary files /dev/null and b/Aida/Icon/counter_icon/mask_1_300X300_red.png differ diff --git a/Aida/Icon/counter_icon/mask_300X300_white.png b/Aida/Icon/counter_icon/mask_300X300_white.png new file mode 100644 index 0000000..e523520 Binary files /dev/null and b/Aida/Icon/counter_icon/mask_300X300_white.png differ diff --git a/Aida/Icon/counter_icon/motorbike_1_300X300_blue.png b/Aida/Icon/counter_icon/motorbike_1_300X300_blue.png new file mode 100644 index 0000000..daa3475 Binary files /dev/null and b/Aida/Icon/counter_icon/motorbike_1_300X300_blue.png differ diff --git a/Aida/Icon/counter_icon/motorbike_1_300X300_red.png b/Aida/Icon/counter_icon/motorbike_1_300X300_red.png new file mode 100644 index 0000000..b6ec0ba Binary files /dev/null and b/Aida/Icon/counter_icon/motorbike_1_300X300_red.png differ diff --git a/Aida/Icon/counter_icon/motorbike_300X300_white.png b/Aida/Icon/counter_icon/motorbike_300X300_white.png new file mode 100644 index 0000000..b8e8438 Binary files /dev/null and b/Aida/Icon/counter_icon/motorbike_300X300_white.png differ diff --git a/Aida/Icon/counter_icon/queue_1_300X300_blue.png b/Aida/Icon/counter_icon/queue_1_300X300_blue.png new file mode 100644 index 0000000..6d80d9c Binary files /dev/null and b/Aida/Icon/counter_icon/queue_1_300X300_blue.png differ diff --git a/Aida/Icon/counter_icon/queue_1_300X300_red.png b/Aida/Icon/counter_icon/queue_1_300X300_red.png new file mode 100644 index 0000000..bef95d1 Binary files /dev/null and b/Aida/Icon/counter_icon/queue_1_300X300_red.png differ diff --git a/Aida/Icon/counter_icon/queue_300X300_white.png b/Aida/Icon/counter_icon/queue_300X300_white.png new file mode 100644 index 0000000..e98be55 Binary files /dev/null and b/Aida/Icon/counter_icon/queue_300X300_white.png differ diff --git a/Aida/Icon/counter_icon/social_distance_1_300X300_blue.png b/Aida/Icon/counter_icon/social_distance_1_300X300_blue.png new file mode 100644 index 0000000..8158222 Binary files /dev/null and b/Aida/Icon/counter_icon/social_distance_1_300X300_blue.png differ diff --git a/Aida/Icon/counter_icon/social_distance_1_300X300_red.png b/Aida/Icon/counter_icon/social_distance_1_300X300_red.png new file mode 100644 index 0000000..c208fed Binary files /dev/null and b/Aida/Icon/counter_icon/social_distance_1_300X300_red.png differ diff --git a/Aida/Icon/counter_icon/social_distance_300X300_white.png b/Aida/Icon/counter_icon/social_distance_300X300_white.png new file mode 100644 index 0000000..a9f9d78 Binary files /dev/null and b/Aida/Icon/counter_icon/social_distance_300X300_white.png differ diff --git a/Aida/Icon/counter_icon/truck_1_300X300_blue.png b/Aida/Icon/counter_icon/truck_1_300X300_blue.png new file mode 100644 index 0000000..2d0535b Binary files /dev/null and b/Aida/Icon/counter_icon/truck_1_300X300_blue.png differ diff --git a/Aida/Icon/counter_icon/truck_1_300X300_red.png b/Aida/Icon/counter_icon/truck_1_300X300_red.png new file mode 100644 index 0000000..b73ef70 Binary files /dev/null and b/Aida/Icon/counter_icon/truck_1_300X300_red.png differ diff --git a/Aida/Icon/counter_icon/truck_300X300_white.png b/Aida/Icon/counter_icon/truck_300X300_white.png new file mode 100644 index 0000000..c127666 Binary files /dev/null and b/Aida/Icon/counter_icon/truck_300X300_white.png differ diff --git a/Aida/Icon/counter_icon/vest_1_300X300_blue.png b/Aida/Icon/counter_icon/vest_1_300X300_blue.png new file mode 100644 index 0000000..c10af7a Binary files /dev/null and b/Aida/Icon/counter_icon/vest_1_300X300_blue.png differ diff --git a/Aida/Icon/counter_icon/vest_1_300X300_red.png b/Aida/Icon/counter_icon/vest_1_300X300_red.png new file mode 100644 index 0000000..f12b593 Binary files /dev/null and b/Aida/Icon/counter_icon/vest_1_300X300_red.png differ diff --git a/Aida/Icon/counter_icon/vest_300X300_white.png b/Aida/Icon/counter_icon/vest_300X300_white.png new file mode 100644 index 0000000..4cdbe39 Binary files /dev/null and b/Aida/Icon/counter_icon/vest_300X300_white.png differ diff --git a/Aida/Icon/counter_icon/walking_man_1_300X300_blue.png b/Aida/Icon/counter_icon/walking_man_1_300X300_blue.png new file mode 100644 index 0000000..bdaef13 Binary files /dev/null and b/Aida/Icon/counter_icon/walking_man_1_300X300_blue.png differ diff --git a/Aida/Icon/counter_icon/walking_man_1_300X300_red.png b/Aida/Icon/counter_icon/walking_man_1_300X300_red.png new file mode 100644 index 0000000..ae65f48 Binary files /dev/null and b/Aida/Icon/counter_icon/walking_man_1_300X300_red.png differ diff --git a/Aida/Icon/counter_icon/walking_man_300X300_white.png b/Aida/Icon/counter_icon/walking_man_300X300_white.png new file mode 100644 index 0000000..6ec4446 Binary files /dev/null and b/Aida/Icon/counter_icon/walking_man_300X300_white.png differ diff --git a/Aida/aes.js b/Aida/aes.js new file mode 100644 index 0000000..1deebee --- /dev/null +++ b/Aida/aes.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports?module.exports=exports=e():"function"==typeof define&&define.amd?define([],e):t.CryptoJS=e()}(this,function(){var h,t,e,r,i,n,f,o,s,c,a,l,d,m,x,b,H,z,A,u,p,_,v,y,g,B,w,k,S,C,D,E,R,M,F,P,W,O,I,U,K,X,L,j,N,T,q,Z,V,G,J,$,Q,Y,tt,et,rt,it,nt,ot,st,ct,at,ht,lt,ft,dt,ut,pt,_t,vt,yt,gt,Bt,wt,kt,St,bt=bt||function(l){var t;if("undefined"!=typeof window&&window.crypto&&(t=window.crypto),!t&&"undefined"!=typeof window&&window.msCrypto&&(t=window.msCrypto),!t&&"undefined"!=typeof global&&global.crypto&&(t=global.crypto),!t&&"function"==typeof require)try{t=require("crypto")}catch(t){}function i(){if(t){if("function"==typeof t.getRandomValues)try{return t.getRandomValues(new Uint32Array(1))[0]}catch(t){}if("function"==typeof t.randomBytes)try{return t.randomBytes(4).readInt32LE()}catch(t){}}throw new Error("Native crypto module could not be used to get secure random number.")}var r=Object.create||function(t){var e;return n.prototype=t,e=new n,n.prototype=null,e};function n(){}var e={},o=e.lib={},s=o.Base={extend:function(t){var e=r(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),(e.init.prototype=e).$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}},f=o.WordArray=s.extend({init:function(t,e){t=this.words=t||[],this.sigBytes=null!=e?e:4*t.length},toString:function(t){return(t||a).stringify(this)},concat:function(t){var e=this.words,r=t.words,i=this.sigBytes,n=t.sigBytes;if(this.clamp(),i%4)for(var o=0;o>>2]>>>24-o%4*8&255;e[i+o>>>2]|=s<<24-(i+o)%4*8}else for(o=0;o>>2]=r[o>>>2];return this.sigBytes+=n,this},clamp:function(){var t=this.words,e=this.sigBytes;t[e>>>2]&=4294967295<<32-e%4*8,t.length=l.ceil(e/4)},clone:function(){var t=s.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],r=0;r>>2]>>>24-n%4*8&255;i.push((o>>>4).toString(16)),i.push((15&o).toString(16))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i>>3]|=parseInt(t.substr(i,2),16)<<24-i%8*4;return new f.init(r,e/2)}},h=c.Latin1={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n>>2]>>>24-n%4*8&255;i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i>>2]|=(255&t.charCodeAt(i))<<24-i%4*8;return new f.init(r,e)}},d=c.Utf8={stringify:function(t){try{return decodeURIComponent(escape(h.stringify(t)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function(t){return h.parse(unescape(encodeURIComponent(t)))}},u=o.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new f.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=d.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(t){var e,r=this._data,i=r.words,n=r.sigBytes,o=this.blockSize,s=n/(4*o),c=(s=t?l.ceil(s):l.max((0|s)-this._minBufferSize,0))*o,a=l.min(4*c,n);if(c){for(var h=0;h>>32-e}function Dt(t,e,r,i){var n,o=this._iv;o?(n=o.slice(0),this._iv=void 0):n=this._prevBlock,i.encryptBlock(n,0);for(var s=0;s>24&255)){var e=t>>16&255,r=t>>8&255,i=255&t;255===e?(e=0,255===r?(r=0,255===i?i=0:++i):++r):++e,t=0,t+=e<<16,t+=r<<8,t+=i}else t+=1<<24;return t}function Rt(){for(var t=this._X,e=this._C,r=0;r<8;r++)ft[r]=e[r];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(r=0;r<8;r++){var i=t[r]+e[r],n=65535&i,o=i>>>16,s=((n*n>>>17)+n*o>>>15)+o*o,c=((4294901760&i)*i|0)+((65535&i)*i|0);dt[r]=s^c}t[0]=dt[0]+(dt[7]<<16|dt[7]>>>16)+(dt[6]<<16|dt[6]>>>16)|0,t[1]=dt[1]+(dt[0]<<8|dt[0]>>>24)+dt[7]|0,t[2]=dt[2]+(dt[1]<<16|dt[1]>>>16)+(dt[0]<<16|dt[0]>>>16)|0,t[3]=dt[3]+(dt[2]<<8|dt[2]>>>24)+dt[1]|0,t[4]=dt[4]+(dt[3]<<16|dt[3]>>>16)+(dt[2]<<16|dt[2]>>>16)|0,t[5]=dt[5]+(dt[4]<<8|dt[4]>>>24)+dt[3]|0,t[6]=dt[6]+(dt[5]<<16|dt[5]>>>16)+(dt[4]<<16|dt[4]>>>16)|0,t[7]=dt[7]+(dt[6]<<8|dt[6]>>>24)+dt[5]|0}function Mt(){for(var t=this._X,e=this._C,r=0;r<8;r++)wt[r]=e[r];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(r=0;r<8;r++){var i=t[r]+e[r],n=65535&i,o=i>>>16,s=((n*n>>>17)+n*o>>>15)+o*o,c=((4294901760&i)*i|0)+((65535&i)*i|0);kt[r]=s^c}t[0]=kt[0]+(kt[7]<<16|kt[7]>>>16)+(kt[6]<<16|kt[6]>>>16)|0,t[1]=kt[1]+(kt[0]<<8|kt[0]>>>24)+kt[7]|0,t[2]=kt[2]+(kt[1]<<16|kt[1]>>>16)+(kt[0]<<16|kt[0]>>>16)|0,t[3]=kt[3]+(kt[2]<<8|kt[2]>>>24)+kt[1]|0,t[4]=kt[4]+(kt[3]<<16|kt[3]>>>16)+(kt[2]<<16|kt[2]>>>16)|0,t[5]=kt[5]+(kt[4]<<8|kt[4]>>>24)+kt[3]|0,t[6]=kt[6]+(kt[5]<<16|kt[5]>>>16)+(kt[4]<<16|kt[4]>>>16)|0,t[7]=kt[7]+(kt[6]<<8|kt[6]>>>24)+kt[5]|0}return h=bt.lib.WordArray,bt.enc.Base64={stringify:function(t){var e=t.words,r=t.sigBytes,i=this._map;t.clamp();for(var n=[],o=0;o>>2]>>>24-o%4*8&255)<<16|(e[o+1>>>2]>>>24-(o+1)%4*8&255)<<8|e[o+2>>>2]>>>24-(o+2)%4*8&255,c=0;c<4&&o+.75*c>>6*(3-c)&63));var a=i.charAt(64);if(a)for(;n.length%4;)n.push(a);return n.join("")},parse:function(t){var e=t.length,r=this._map,i=this._reverseMap;if(!i){i=this._reverseMap=[];for(var n=0;n>>6-o%4*2,a=s|c;i[n>>>2]|=a<<24-n%4*8,n++}return h.create(i,n)}(t,e,i)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},function(l){var t=bt,e=t.lib,r=e.WordArray,i=e.Hasher,n=t.algo,H=[];!function(){for(var t=0;t<64;t++)H[t]=4294967296*l.abs(l.sin(t+1))|0}();var o=n.MD5=i.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var i=e+r,n=t[i];t[i]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8)}var o=this._hash.words,s=t[e+0],c=t[e+1],a=t[e+2],h=t[e+3],l=t[e+4],f=t[e+5],d=t[e+6],u=t[e+7],p=t[e+8],_=t[e+9],v=t[e+10],y=t[e+11],g=t[e+12],B=t[e+13],w=t[e+14],k=t[e+15],S=o[0],m=o[1],x=o[2],b=o[3];S=z(S,m,x,b,s,7,H[0]),b=z(b,S,m,x,c,12,H[1]),x=z(x,b,S,m,a,17,H[2]),m=z(m,x,b,S,h,22,H[3]),S=z(S,m,x,b,l,7,H[4]),b=z(b,S,m,x,f,12,H[5]),x=z(x,b,S,m,d,17,H[6]),m=z(m,x,b,S,u,22,H[7]),S=z(S,m,x,b,p,7,H[8]),b=z(b,S,m,x,_,12,H[9]),x=z(x,b,S,m,v,17,H[10]),m=z(m,x,b,S,y,22,H[11]),S=z(S,m,x,b,g,7,H[12]),b=z(b,S,m,x,B,12,H[13]),x=z(x,b,S,m,w,17,H[14]),S=A(S,m=z(m,x,b,S,k,22,H[15]),x,b,c,5,H[16]),b=A(b,S,m,x,d,9,H[17]),x=A(x,b,S,m,y,14,H[18]),m=A(m,x,b,S,s,20,H[19]),S=A(S,m,x,b,f,5,H[20]),b=A(b,S,m,x,v,9,H[21]),x=A(x,b,S,m,k,14,H[22]),m=A(m,x,b,S,l,20,H[23]),S=A(S,m,x,b,_,5,H[24]),b=A(b,S,m,x,w,9,H[25]),x=A(x,b,S,m,h,14,H[26]),m=A(m,x,b,S,p,20,H[27]),S=A(S,m,x,b,B,5,H[28]),b=A(b,S,m,x,a,9,H[29]),x=A(x,b,S,m,u,14,H[30]),S=C(S,m=A(m,x,b,S,g,20,H[31]),x,b,f,4,H[32]),b=C(b,S,m,x,p,11,H[33]),x=C(x,b,S,m,y,16,H[34]),m=C(m,x,b,S,w,23,H[35]),S=C(S,m,x,b,c,4,H[36]),b=C(b,S,m,x,l,11,H[37]),x=C(x,b,S,m,u,16,H[38]),m=C(m,x,b,S,v,23,H[39]),S=C(S,m,x,b,B,4,H[40]),b=C(b,S,m,x,s,11,H[41]),x=C(x,b,S,m,h,16,H[42]),m=C(m,x,b,S,d,23,H[43]),S=C(S,m,x,b,_,4,H[44]),b=C(b,S,m,x,g,11,H[45]),x=C(x,b,S,m,k,16,H[46]),S=D(S,m=C(m,x,b,S,a,23,H[47]),x,b,s,6,H[48]),b=D(b,S,m,x,u,10,H[49]),x=D(x,b,S,m,w,15,H[50]),m=D(m,x,b,S,f,21,H[51]),S=D(S,m,x,b,g,6,H[52]),b=D(b,S,m,x,h,10,H[53]),x=D(x,b,S,m,v,15,H[54]),m=D(m,x,b,S,c,21,H[55]),S=D(S,m,x,b,p,6,H[56]),b=D(b,S,m,x,k,10,H[57]),x=D(x,b,S,m,d,15,H[58]),m=D(m,x,b,S,B,21,H[59]),S=D(S,m,x,b,l,6,H[60]),b=D(b,S,m,x,y,10,H[61]),x=D(x,b,S,m,a,15,H[62]),m=D(m,x,b,S,_,21,H[63]),o[0]=o[0]+S|0,o[1]=o[1]+m|0,o[2]=o[2]+x|0,o[3]=o[3]+b|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;e[i>>>5]|=128<<24-i%32;var n=l.floor(r/4294967296),o=r;e[15+(64+i>>>9<<4)]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8),e[14+(64+i>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),t.sigBytes=4*(e.length+1),this._process();for(var s=this._hash,c=s.words,a=0;a<4;a++){var h=c[a];c[a]=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8)}return s},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});function z(t,e,r,i,n,o,s){var c=t+(e&r|~e&i)+n+s;return(c<>>32-o)+e}function A(t,e,r,i,n,o,s){var c=t+(e&i|r&~i)+n+s;return(c<>>32-o)+e}function C(t,e,r,i,n,o,s){var c=t+(e^r^i)+n+s;return(c<>>32-o)+e}function D(t,e,r,i,n,o,s){var c=t+(r^(e|~i))+n+s;return(c<>>32-o)+e}t.MD5=i._createHelper(o),t.HmacMD5=i._createHmacHelper(o)}(Math),e=(t=bt).lib,r=e.WordArray,i=e.Hasher,n=t.algo,f=[],o=n.SHA1=i.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],c=r[4],a=0;a<80;a++){if(a<16)f[a]=0|t[e+a];else{var h=f[a-3]^f[a-8]^f[a-14]^f[a-16];f[a]=h<<1|h>>>31}var l=(i<<5|i>>>27)+c+f[a];l+=a<20?1518500249+(n&o|~n&s):a<40?1859775393+(n^o^s):a<60?(n&o|n&s|o&s)-1894007588:(n^o^s)-899497514,c=s,s=o,o=n<<30|n>>>2,n=i,i=l}r[0]=r[0]+i|0,r[1]=r[1]+n|0,r[2]=r[2]+o|0,r[3]=r[3]+s|0,r[4]=r[4]+c|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=Math.floor(r/4294967296),e[15+(64+i>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}}),t.SHA1=i._createHelper(o),t.HmacSHA1=i._createHmacHelper(o),function(n){var t=bt,e=t.lib,r=e.WordArray,i=e.Hasher,o=t.algo,s=[],B=[];!function(){function t(t){for(var e=n.sqrt(t),r=2;r<=e;r++)if(!(t%r))return;return 1}function e(t){return 4294967296*(t-(0|t))|0}for(var r=2,i=0;i<64;)t(r)&&(i<8&&(s[i]=e(n.pow(r,.5))),B[i]=e(n.pow(r,1/3)),i++),r++}();var w=[],c=o.SHA256=i.extend({_doReset:function(){this._hash=new r.init(s.slice(0))},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],c=r[4],a=r[5],h=r[6],l=r[7],f=0;f<64;f++){if(f<16)w[f]=0|t[e+f];else{var d=w[f-15],u=(d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3,p=w[f-2],_=(p<<15|p>>>17)^(p<<13|p>>>19)^p>>>10;w[f]=u+w[f-7]+_+w[f-16]}var v=i&n^i&o^n&o,y=(i<<30|i>>>2)^(i<<19|i>>>13)^(i<<10|i>>>22),g=l+((c<<26|c>>>6)^(c<<21|c>>>11)^(c<<7|c>>>25))+(c&a^~c&h)+B[f]+w[f];l=h,h=a,a=c,c=s+g|0,s=o,o=n,n=i,i=g+(y+v)|0}r[0]=r[0]+i|0,r[1]=r[1]+n|0,r[2]=r[2]+o|0,r[3]=r[3]+s|0,r[4]=r[4]+c|0,r[5]=r[5]+a|0,r[6]=r[6]+h|0,r[7]=r[7]+l|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=n.floor(r/4294967296),e[15+(64+i>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});t.SHA256=i._createHelper(c),t.HmacSHA256=i._createHmacHelper(c)}(Math),function(){var n=bt.lib.WordArray,t=bt.enc;t.Utf16=t.Utf16BE={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n>>2]>>>16-n%4*8&65535;i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i>>1]|=t.charCodeAt(i)<<16-i%2*16;return n.create(r,2*e)}};function s(t){return t<<8&4278255360|t>>>8&16711935}t.Utf16LE={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n>>2]>>>16-n%4*8&65535);i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i>>1]|=s(t.charCodeAt(i)<<16-i%2*16);return n.create(r,2*e)}}}(),function(){if("function"==typeof ArrayBuffer){var t=bt.lib.WordArray,n=t.init;(t.init=function(t){if(t instanceof ArrayBuffer&&(t=new Uint8Array(t)),(t instanceof Int8Array||"undefined"!=typeof Uint8ClampedArray&&t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array)&&(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),t instanceof Uint8Array){for(var e=t.byteLength,r=[],i=0;i>>2]|=t[i]<<24-i%4*8;n.call(this,r,e)}else n.apply(this,arguments)}).prototype=t}}(),Math,c=(s=bt).lib,a=c.WordArray,l=c.Hasher,d=s.algo,m=a.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),x=a.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),b=a.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),H=a.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),z=a.create([0,1518500249,1859775393,2400959708,2840853838]),A=a.create([1352829926,1548603684,1836072691,2053994217,0]),u=d.RIPEMD160=l.extend({_doReset:function(){this._hash=a.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var i=e+r,n=t[i];t[i]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8)}var o,s,c,a,h,l,f,d,u,p,_,v=this._hash.words,y=z.words,g=A.words,B=m.words,w=x.words,k=b.words,S=H.words;l=o=v[0],f=s=v[1],d=c=v[2],u=a=v[3],p=h=v[4];for(r=0;r<80;r+=1)_=o+t[e+B[r]]|0,_+=r<16?mt(s,c,a)+y[0]:r<32?xt(s,c,a)+y[1]:r<48?Ht(s,c,a)+y[2]:r<64?zt(s,c,a)+y[3]:At(s,c,a)+y[4],_=(_=Ct(_|=0,k[r]))+h|0,o=h,h=a,a=Ct(c,10),c=s,s=_,_=l+t[e+w[r]]|0,_+=r<16?At(f,d,u)+g[0]:r<32?zt(f,d,u)+g[1]:r<48?Ht(f,d,u)+g[2]:r<64?xt(f,d,u)+g[3]:mt(f,d,u)+g[4],_=(_=Ct(_|=0,S[r]))+p|0,l=p,p=u,u=Ct(d,10),d=f,f=_;_=v[1]+c+u|0,v[1]=v[2]+a+p|0,v[2]=v[3]+h+l|0,v[3]=v[4]+o+f|0,v[4]=v[0]+s+d|0,v[0]=_},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(e.length+1),this._process();for(var n=this._hash,o=n.words,s=0;s<5;s++){var c=o[s];o[s]=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8)}return n},clone:function(){var t=l.clone.call(this);return t._hash=this._hash.clone(),t}}),s.RIPEMD160=l._createHelper(u),s.HmacRIPEMD160=l._createHmacHelper(u),p=bt.lib.Base,_=bt.enc.Utf8,bt.algo.HMAC=p.extend({init:function(t,e){t=this._hasher=new t.init,"string"==typeof e&&(e=_.parse(e));var r=t.blockSize,i=4*r;e.sigBytes>i&&(e=t.finalize(e)),e.clamp();for(var n=this._oKey=e.clone(),o=this._iKey=e.clone(),s=n.words,c=o.words,a=0;a>>24)|4278255360&(o<<24|o>>>8),s=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),(x=r[n]).high^=s,x.low^=o}for(var c=0;c<24;c++){for(var a=0;a<5;a++){for(var h=0,l=0,f=0;f<5;f++){h^=(x=r[a+5*f]).high,l^=x.low}var d=R[a];d.high=h,d.low=l}for(a=0;a<5;a++){var u=R[(a+4)%5],p=R[(a+1)%5],_=p.high,v=p.low;for(h=u.high^(_<<1|v>>>31),l=u.low^(v<<1|_>>>31),f=0;f<5;f++){(x=r[a+5*f]).high^=h,x.low^=l}}for(var y=1;y<25;y++){var g=(x=r[y]).high,B=x.low,w=C[y];l=w<32?(h=g<>>32-w,B<>>32-w):(h=B<>>64-w,g<>>64-w);var k=R[D[y]];k.high=h,k.low=l}var S=R[0],m=r[0];S.high=m.high,S.low=m.low;for(a=0;a<5;a++)for(f=0;f<5;f++){var x=r[y=a+5*f],b=R[y],H=R[(a+1)%5+5*f],z=R[(a+2)%5+5*f];x.high=b.high^~H.high&z.high,x.low=b.low^~H.low&z.low}x=r[0];var A=E[c];x.high^=A.high,x.low^=A.low}},_doFinalize:function(){var t=this._data,e=t.words,r=(this._nDataBytes,8*t.sigBytes),i=32*this.blockSize;e[r>>>5]|=1<<24-r%32,e[(d.ceil((1+r)/i)*i>>>5)-1]|=128,t.sigBytes=4*e.length,this._process();for(var n=this._state,o=this.cfg.outputLength/8,s=o/8,c=[],a=0;a>>24)|4278255360&(l<<24|l>>>8),f=16711935&(f<<8|f>>>24)|4278255360&(f<<24|f>>>8),c.push(f),c.push(l)}return new u.init(c,o)},clone:function(){for(var t=i.clone.call(this),e=t._state=this._state.slice(0),r=0;r<25;r++)e[r]=e[r].clone();return t}});t.SHA3=i._createHelper(n),t.HmacSHA3=i._createHmacHelper(n)}(Math),function(){var t=bt,e=t.lib.Hasher,r=t.x64,i=r.Word,n=r.WordArray,o=t.algo;function s(){return i.create.apply(i,arguments)}var mt=[s(1116352408,3609767458),s(1899447441,602891725),s(3049323471,3964484399),s(3921009573,2173295548),s(961987163,4081628472),s(1508970993,3053834265),s(2453635748,2937671579),s(2870763221,3664609560),s(3624381080,2734883394),s(310598401,1164996542),s(607225278,1323610764),s(1426881987,3590304994),s(1925078388,4068182383),s(2162078206,991336113),s(2614888103,633803317),s(3248222580,3479774868),s(3835390401,2666613458),s(4022224774,944711139),s(264347078,2341262773),s(604807628,2007800933),s(770255983,1495990901),s(1249150122,1856431235),s(1555081692,3175218132),s(1996064986,2198950837),s(2554220882,3999719339),s(2821834349,766784016),s(2952996808,2566594879),s(3210313671,3203337956),s(3336571891,1034457026),s(3584528711,2466948901),s(113926993,3758326383),s(338241895,168717936),s(666307205,1188179964),s(773529912,1546045734),s(1294757372,1522805485),s(1396182291,2643833823),s(1695183700,2343527390),s(1986661051,1014477480),s(2177026350,1206759142),s(2456956037,344077627),s(2730485921,1290863460),s(2820302411,3158454273),s(3259730800,3505952657),s(3345764771,106217008),s(3516065817,3606008344),s(3600352804,1432725776),s(4094571909,1467031594),s(275423344,851169720),s(430227734,3100823752),s(506948616,1363258195),s(659060556,3750685593),s(883997877,3785050280),s(958139571,3318307427),s(1322822218,3812723403),s(1537002063,2003034995),s(1747873779,3602036899),s(1955562222,1575990012),s(2024104815,1125592928),s(2227730452,2716904306),s(2361852424,442776044),s(2428436474,593698344),s(2756734187,3733110249),s(3204031479,2999351573),s(3329325298,3815920427),s(3391569614,3928383900),s(3515267271,566280711),s(3940187606,3454069534),s(4118630271,4000239992),s(116418474,1914138554),s(174292421,2731055270),s(289380356,3203993006),s(460393269,320620315),s(685471733,587496836),s(852142971,1086792851),s(1017036298,365543100),s(1126000580,2618297676),s(1288033470,3409855158),s(1501505948,4234509866),s(1607167915,987167468),s(1816402316,1246189591)],xt=[];!function(){for(var t=0;t<80;t++)xt[t]=s()}();var c=o.SHA512=e.extend({_doReset:function(){this._hash=new n.init([new i.init(1779033703,4089235720),new i.init(3144134277,2227873595),new i.init(1013904242,4271175723),new i.init(2773480762,1595750129),new i.init(1359893119,2917565137),new i.init(2600822924,725511199),new i.init(528734635,4215389547),new i.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],c=r[4],a=r[5],h=r[6],l=r[7],f=i.high,d=i.low,u=n.high,p=n.low,_=o.high,v=o.low,y=s.high,g=s.low,B=c.high,w=c.low,k=a.high,S=a.low,m=h.high,x=h.low,b=l.high,H=l.low,z=f,A=d,C=u,D=p,E=_,R=v,M=y,F=g,P=B,W=w,O=k,I=S,U=m,K=x,X=b,L=H,j=0;j<80;j++){var N,T,q=xt[j];if(j<16)T=q.high=0|t[e+2*j],N=q.low=0|t[e+2*j+1];else{var Z=xt[j-15],V=Z.high,G=Z.low,J=(V>>>1|G<<31)^(V>>>8|G<<24)^V>>>7,$=(G>>>1|V<<31)^(G>>>8|V<<24)^(G>>>7|V<<25),Q=xt[j-2],Y=Q.high,tt=Q.low,et=(Y>>>19|tt<<13)^(Y<<3|tt>>>29)^Y>>>6,rt=(tt>>>19|Y<<13)^(tt<<3|Y>>>29)^(tt>>>6|Y<<26),it=xt[j-7],nt=it.high,ot=it.low,st=xt[j-16],ct=st.high,at=st.low;T=(T=(T=J+nt+((N=$+ot)>>>0<$>>>0?1:0))+et+((N+=rt)>>>0>>0?1:0))+ct+((N+=at)>>>0>>0?1:0),q.high=T,q.low=N}var ht,lt=P&O^~P&U,ft=W&I^~W&K,dt=z&C^z&E^C&E,ut=A&D^A&R^D&R,pt=(z>>>28|A<<4)^(z<<30|A>>>2)^(z<<25|A>>>7),_t=(A>>>28|z<<4)^(A<<30|z>>>2)^(A<<25|z>>>7),vt=(P>>>14|W<<18)^(P>>>18|W<<14)^(P<<23|W>>>9),yt=(W>>>14|P<<18)^(W>>>18|P<<14)^(W<<23|P>>>9),gt=mt[j],Bt=gt.high,wt=gt.low,kt=X+vt+((ht=L+yt)>>>0>>0?1:0),St=_t+ut;X=U,L=K,U=O,K=I,O=P,I=W,P=M+(kt=(kt=(kt=kt+lt+((ht=ht+ft)>>>0>>0?1:0))+Bt+((ht=ht+wt)>>>0>>0?1:0))+T+((ht=ht+N)>>>0>>0?1:0))+((W=F+ht|0)>>>0>>0?1:0)|0,M=E,F=R,E=C,R=D,C=z,D=A,z=kt+(pt+dt+(St>>>0<_t>>>0?1:0))+((A=ht+St|0)>>>0>>0?1:0)|0}d=i.low=d+A,i.high=f+z+(d>>>0>>0?1:0),p=n.low=p+D,n.high=u+C+(p>>>0>>0?1:0),v=o.low=v+R,o.high=_+E+(v>>>0>>0?1:0),g=s.low=g+F,s.high=y+M+(g>>>0>>0?1:0),w=c.low=w+W,c.high=B+P+(w>>>0>>0?1:0),S=a.low=S+I,a.high=k+O+(S>>>0>>0?1:0),x=h.low=x+K,h.high=m+U+(x>>>0>>0?1:0),H=l.low=H+L,l.high=b+X+(H>>>0>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[30+(128+i>>>10<<5)]=Math.floor(r/4294967296),e[31+(128+i>>>10<<5)]=r,t.sigBytes=4*e.length,this._process(),this._hash.toX32()},clone:function(){var t=e.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});t.SHA512=e._createHelper(c),t.HmacSHA512=e._createHmacHelper(c)}(),Z=(q=bt).x64,V=Z.Word,G=Z.WordArray,J=q.algo,$=J.SHA512,Q=J.SHA384=$.extend({_doReset:function(){this._hash=new G.init([new V.init(3418070365,3238371032),new V.init(1654270250,914150663),new V.init(2438529370,812702999),new V.init(355462360,4144912697),new V.init(1731405415,4290775857),new V.init(2394180231,1750603025),new V.init(3675008525,1694076839),new V.init(1203062813,3204075428)])},_doFinalize:function(){var t=$._doFinalize.call(this);return t.sigBytes-=16,t}}),q.SHA384=$._createHelper(Q),q.HmacSHA384=$._createHmacHelper(Q),bt.lib.Cipher||function(){var t=bt,e=t.lib,r=e.Base,a=e.WordArray,i=e.BufferedBlockAlgorithm,n=t.enc,o=(n.Utf8,n.Base64),s=t.algo.EvpKDF,c=e.Cipher=i.extend({cfg:r.extend(),createEncryptor:function(t,e){return this.create(this._ENC_XFORM_MODE,t,e)},createDecryptor:function(t,e){return this.create(this._DEC_XFORM_MODE,t,e)},init:function(t,e,r){this.cfg=this.cfg.extend(r),this._xformMode=t,this._key=e,this.reset()},reset:function(){i.reset.call(this),this._doReset()},process:function(t){return this._append(t),this._process()},finalize:function(t){return t&&this._append(t),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(i){return{encrypt:function(t,e,r){return h(e).encrypt(i,t,e,r)},decrypt:function(t,e,r){return h(e).decrypt(i,t,e,r)}}}});function h(t){return"string"==typeof t?w:g}e.StreamCipher=c.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var l,f=t.mode={},d=e.BlockCipherMode=r.extend({createEncryptor:function(t,e){return this.Encryptor.create(t,e)},createDecryptor:function(t,e){return this.Decryptor.create(t,e)},init:function(t,e){this._cipher=t,this._iv=e}}),u=f.CBC=((l=d.extend()).Encryptor=l.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize;p.call(this,t,e,i),r.encryptBlock(t,e),this._prevBlock=t.slice(e,e+i)}}),l.Decryptor=l.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=t.slice(e,e+i);r.decryptBlock(t,e),p.call(this,t,e,i),this._prevBlock=n}}),l);function p(t,e,r){var i,n=this._iv;n?(i=n,this._iv=void 0):i=this._prevBlock;for(var o=0;o>>2];t.sigBytes-=e}},v=(e.BlockCipher=c.extend({cfg:c.cfg.extend({mode:u,padding:_}),reset:function(){var t;c.reset.call(this);var e=this.cfg,r=e.iv,i=e.mode;this._xformMode==this._ENC_XFORM_MODE?t=i.createEncryptor:(t=i.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==t?this._mode.init(this,r&&r.words):(this._mode=t.call(i,this,r&&r.words),this._mode.__creator=t)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),e.CipherParams=r.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),y=(t.format={}).OpenSSL={stringify:function(t){var e=t.ciphertext,r=t.salt;return(r?a.create([1398893684,1701076831]).concat(r).concat(e):e).toString(o)},parse:function(t){var e,r=o.parse(t),i=r.words;return 1398893684==i[0]&&1701076831==i[1]&&(e=a.create(i.slice(2,4)),i.splice(0,4),r.sigBytes-=16),v.create({ciphertext:r,salt:e})}},g=e.SerializableCipher=r.extend({cfg:r.extend({format:y}),encrypt:function(t,e,r,i){i=this.cfg.extend(i);var n=t.createEncryptor(r,i),o=n.finalize(e),s=n.cfg;return v.create({ciphertext:o,key:r,iv:s.iv,algorithm:t,mode:s.mode,padding:s.padding,blockSize:t.blockSize,formatter:i.format})},decrypt:function(t,e,r,i){return i=this.cfg.extend(i),e=this._parse(e,i.format),t.createDecryptor(r,i).finalize(e.ciphertext)},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),B=(t.kdf={}).OpenSSL={execute:function(t,e,r,i){i=i||a.random(8);var n=s.create({keySize:e+r}).compute(t,i),o=a.create(n.words.slice(e),4*r);return n.sigBytes=4*e,v.create({key:n,iv:o,salt:i})}},w=e.PasswordBasedCipher=g.extend({cfg:g.cfg.extend({kdf:B}),encrypt:function(t,e,r,i){var n=(i=this.cfg.extend(i)).kdf.execute(r,t.keySize,t.ivSize);i.iv=n.iv;var o=g.encrypt.call(this,t,e,n.key,i);return o.mixIn(n),o},decrypt:function(t,e,r,i){i=this.cfg.extend(i),e=this._parse(e,i.format);var n=i.kdf.execute(r,t.keySize,t.ivSize,e.salt);return i.iv=n.iv,g.decrypt.call(this,t,e,n.key,i)}})}(),bt.mode.CFB=((Y=bt.lib.BlockCipherMode.extend()).Encryptor=Y.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize;Dt.call(this,t,e,i,r),this._prevBlock=t.slice(e,e+i)}}),Y.Decryptor=Y.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=t.slice(e,e+i);Dt.call(this,t,e,i,r),this._prevBlock=n}}),Y),bt.mode.ECB=((tt=bt.lib.BlockCipherMode.extend()).Encryptor=tt.extend({processBlock:function(t,e){this._cipher.encryptBlock(t,e)}}),tt.Decryptor=tt.extend({processBlock:function(t,e){this._cipher.decryptBlock(t,e)}}),tt),bt.pad.AnsiX923={pad:function(t,e){var r=t.sigBytes,i=4*e,n=i-r%i,o=r+n-1;t.clamp(),t.words[o>>>2]|=n<<24-o%4*8,t.sigBytes+=n},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},bt.pad.Iso10126={pad:function(t,e){var r=4*e,i=r-t.sigBytes%r;t.concat(bt.lib.WordArray.random(i-1)).concat(bt.lib.WordArray.create([i<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},bt.pad.Iso97971={pad:function(t,e){t.concat(bt.lib.WordArray.create([2147483648],1)),bt.pad.ZeroPadding.pad(t,e)},unpad:function(t){bt.pad.ZeroPadding.unpad(t),t.sigBytes--}},bt.mode.OFB=(et=bt.lib.BlockCipherMode.extend(),rt=et.Encryptor=et.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=this._iv,o=this._keystream;n&&(o=this._keystream=n.slice(0),this._iv=void 0),r.encryptBlock(o,0);for(var s=0;s>>8^255&n^99,h[r]=n;var o=t[l[n]=r],s=t[o],c=t[s],a=257*t[n]^16843008*n;f[r]=a<<24|a>>>8,d[r]=a<<16|a>>>16,u[r]=a<<8|a>>>24,p[r]=a;a=16843009*c^65537*s^257*o^16843008*r;_[n]=a<<24|a>>>8,v[n]=a<<16|a>>>16,y[n]=a<<8|a>>>24,g[n]=a,r?(r=o^t[t[t[c^o]]],i^=t[t[i]]):r=i=1}}();var B=[0,1,2,4,8,16,32,64,128,27,54],i=r.AES=e.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,r=t.sigBytes/4,i=4*(1+(this._nRounds=6+r)),n=this._keySchedule=[],o=0;o>>24]<<24|h[a>>>16&255]<<16|h[a>>>8&255]<<8|h[255&a]):(a=h[(a=a<<8|a>>>24)>>>24]<<24|h[a>>>16&255]<<16|h[a>>>8&255]<<8|h[255&a],a^=B[o/r|0]<<24),n[o]=n[o-r]^a);for(var s=this._invKeySchedule=[],c=0;c>>24]]^v[h[a>>>16&255]]^y[h[a>>>8&255]]^g[h[255&a]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,f,d,u,p,h)},decryptBlock:function(t,e){var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,_,v,y,g,l);r=t[e+1];t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,i,n,o,s,c){for(var a=this._nRounds,h=t[e]^r[0],l=t[e+1]^r[1],f=t[e+2]^r[2],d=t[e+3]^r[3],u=4,p=1;p>>24]^n[l>>>16&255]^o[f>>>8&255]^s[255&d]^r[u++],v=i[l>>>24]^n[f>>>16&255]^o[d>>>8&255]^s[255&h]^r[u++],y=i[f>>>24]^n[d>>>16&255]^o[h>>>8&255]^s[255&l]^r[u++],g=i[d>>>24]^n[h>>>16&255]^o[l>>>8&255]^s[255&f]^r[u++];h=_,l=v,f=y,d=g}_=(c[h>>>24]<<24|c[l>>>16&255]<<16|c[f>>>8&255]<<8|c[255&d])^r[u++],v=(c[l>>>24]<<24|c[f>>>16&255]<<16|c[d>>>8&255]<<8|c[255&h])^r[u++],y=(c[f>>>24]<<24|c[d>>>16&255]<<16|c[h>>>8&255]<<8|c[255&l])^r[u++],g=(c[d>>>24]<<24|c[h>>>16&255]<<16|c[l>>>8&255]<<8|c[255&f])^r[u++];t[e]=_,t[e+1]=v,t[e+2]=y,t[e+3]=g},keySize:8});t.AES=e._createHelper(i)}(),function(){var t=bt,e=t.lib,n=e.WordArray,r=e.BlockCipher,i=t.algo,h=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],l=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],f=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],d=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],u=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],o=i.DES=r.extend({_doReset:function(){for(var t=this._key.words,e=[],r=0;r<56;r++){var i=h[r]-1;e[r]=t[i>>>5]>>>31-i%32&1}for(var n=this._subKeys=[],o=0;o<16;o++){var s=n[o]=[],c=f[o];for(r=0;r<24;r++)s[r/6|0]|=e[(l[r]-1+c)%28]<<31-r%6,s[4+(r/6|0)]|=e[28+(l[r+24]-1+c)%28]<<31-r%6;s[0]=s[0]<<1|s[0]>>>31;for(r=1;r<7;r++)s[r]=s[r]>>>4*(r-1)+3;s[7]=s[7]<<5|s[7]>>>27}var a=this._invSubKeys=[];for(r=0;r<16;r++)a[r]=n[15-r]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,r){this._lBlock=t[e],this._rBlock=t[e+1],p.call(this,4,252645135),p.call(this,16,65535),_.call(this,2,858993459),_.call(this,8,16711935),p.call(this,1,1431655765);for(var i=0;i<16;i++){for(var n=r[i],o=this._lBlock,s=this._rBlock,c=0,a=0;a<8;a++)c|=d[a][((s^n[a])&u[a])>>>0];this._lBlock=s,this._rBlock=o^c}var h=this._lBlock;this._lBlock=this._rBlock,this._rBlock=h,p.call(this,1,1431655765),_.call(this,8,16711935),_.call(this,2,858993459),p.call(this,16,65535),p.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function p(t,e){var r=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=r,this._lBlock^=r<>>t^this._lBlock)&e;this._lBlock^=r,this._rBlock^=r<192.");var e=t.slice(0,2),r=t.length<4?t.slice(0,2):t.slice(2,4),i=t.length<6?t.slice(0,2):t.slice(4,6);this._des1=o.createEncryptor(n.create(e)),this._des2=o.createEncryptor(n.create(r)),this._des3=o.createEncryptor(n.create(i))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});t.TripleDES=r._createHelper(s)}(),function(){var t=bt,e=t.lib.StreamCipher,r=t.algo,i=r.RC4=e.extend({_doReset:function(){for(var t=this._key,e=t.words,r=t.sigBytes,i=this._S=[],n=0;n<256;n++)i[n]=n;n=0;for(var o=0;n<256;n++){var s=n%r,c=e[s>>>2]>>>24-s%4*8&255;o=(o+i[n]+c)%256;var a=i[n];i[n]=i[o],i[o]=a}this._i=this._j=0},_doProcessBlock:function(t,e){t[e]^=n.call(this)},keySize:8,ivSize:0});function n(){for(var t=this._S,e=this._i,r=this._j,i=0,n=0;n<4;n++){r=(r+t[e=(e+1)%256])%256;var o=t[e];t[e]=t[r],t[r]=o,i|=t[(t[e]+t[r])%256]<<24-8*n}return this._i=e,this._j=r,i}t.RC4=e._createHelper(i);var o=r.RC4Drop=i.extend({cfg:i.cfg.extend({drop:192}),_doReset:function(){i._doReset.call(this);for(var t=this.cfg.drop;0>>24)|4278255360&(t[r]<<24|t[r]>>>8);var i=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],n=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];for(r=this._b=0;r<4;r++)Rt.call(this);for(r=0;r<8;r++)n[r]^=i[r+4&7];if(e){var o=e.words,s=o[0],c=o[1],a=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),h=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),l=a>>>16|4294901760&h,f=h<<16|65535&a;n[0]^=a,n[1]^=l,n[2]^=h,n[3]^=f,n[4]^=a,n[5]^=l,n[6]^=h,n[7]^=f;for(r=0;r<4;r++)Rt.call(this)}},_doProcessBlock:function(t,e){var r=this._X;Rt.call(this),lt[0]=r[0]^r[5]>>>16^r[3]<<16,lt[1]=r[2]^r[7]>>>16^r[5]<<16,lt[2]=r[4]^r[1]>>>16^r[7]<<16,lt[3]=r[6]^r[3]>>>16^r[1]<<16;for(var i=0;i<4;i++)lt[i]=16711935&(lt[i]<<8|lt[i]>>>24)|4278255360&(lt[i]<<24|lt[i]>>>8),t[e+i]^=lt[i]},blockSize:4,ivSize:2}),ct.Rabbit=at._createHelper(ut),bt.mode.CTR=(pt=bt.lib.BlockCipherMode.extend(),_t=pt.Encryptor=pt.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=this._iv,o=this._counter;n&&(o=this._counter=n.slice(0),this._iv=void 0);var s=o.slice(0);r.encryptBlock(s,0),o[i-1]=o[i-1]+1|0;for(var c=0;c>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],i=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]],n=this._b=0;n<4;n++)Mt.call(this);for(n=0;n<8;n++)i[n]^=r[n+4&7];if(e){var o=e.words,s=o[0],c=o[1],a=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),h=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),l=a>>>16|4294901760&h,f=h<<16|65535&a;i[0]^=a,i[1]^=l,i[2]^=h,i[3]^=f,i[4]^=a,i[5]^=l,i[6]^=h,i[7]^=f;for(n=0;n<4;n++)Mt.call(this)}},_doProcessBlock:function(t,e){var r=this._X;Mt.call(this),Bt[0]=r[0]^r[5]>>>16^r[3]<<16,Bt[1]=r[2]^r[7]>>>16^r[5]<<16,Bt[2]=r[4]^r[1]>>>16^r[7]<<16,Bt[3]=r[6]^r[3]>>>16^r[1]<<16;for(var i=0;i<4;i++)Bt[i]=16711935&(Bt[i]<<8|Bt[i]>>>24)|4278255360&(Bt[i]<<24|Bt[i]>>>8),t[e+i]^=Bt[i]},blockSize:4,ivSize:2}),vt.RabbitLegacy=yt._createHelper(St),bt.pad.ZeroPadding={pad:function(t,e){var r=4*e;t.clamp(),t.sigBytes+=r-(t.sigBytes%r||r)},unpad:function(t){var e=t.words,r=t.sigBytes-1;for(r=t.sigBytes-1;0<=r;r--)if(e[r>>>2]>>>24-r%4*8&255){t.sigBytes=r+1;break}}},bt}); \ No newline at end of file diff --git a/Aida/ai_meta.html b/Aida/ai_meta.html new file mode 100644 index 0000000..7e90bae --- /dev/null +++ b/Aida/ai_meta.html @@ -0,0 +1,8770 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ + +
+ +
+
+ +
+
+
+ +   + +
+ +
+ + + + + + + +   + + + +
+ + +

+ +
+ + + + + + + + + + +
+
+
+ + + + +
+
+ + + +
+

+ +
+
+ + + + + Object +
+
+ +
+
+
+ +
+

+ +
+
+ + + +
+
+
+ + +
+
+
+ +
+

+ +
+
+
+ +
+ + +
+
+ +
+
+ +
+ + +
+
+ Behavior + +
+
+ +
+
+
+
+ + + +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ Sec +
+
+ +
+
+ +
+
+ + Sec +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + + + + +
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+ + + + +
+
+
+ +
+ Detection Position +
+ +
+
+ + + +
+ +
+
+ + (%) +
+
+ +
+ +
+
+
+
+ +
+
+
+ +
+
+ + +
+
+
+ +
+ + + +
+
+
+ + + +
+ + +
+ + + +
+ + + + +
+
+ + +   +
+ + + +   + + + +
+ +
+
+
+ +
+ +
+ + + + + \ No newline at end of file diff --git a/Aida/airelay_init.html b/Aida/airelay_init.html new file mode 100644 index 0000000..e253a71 --- /dev/null +++ b/Aida/airelay_init.html @@ -0,0 +1,649 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +

+ Loading ... 0% +

+ + + + + + + \ No newline at end of file diff --git a/Aida/alarm.html b/Aida/alarm.html new file mode 100644 index 0000000..4545814 --- /dev/null +++ b/Aida/alarm.html @@ -0,0 +1,7708 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+
+
+ +
+
+ + + + + + +
+

+ + +

+ + + +

+ + + + + +
+ +
+
+
    +
    + +   + +
    +
    + + +
    + +

    + + + +
    +
    +
      +
      + +
      +
      +
        +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + +
        +
        + +
        +
        + +
        +
        + +
        +
        + +
        +
        + +
        + +
        + +
        +
        + +
        +
        +
        + + + + +   + + + + + + + + +
        + + +   + + + + + +   + +   + +   + + +
        + + + + + + + + + + + +    + + +
        + + + + + + + + +
        + + +
        + +

        + +
        +
        +
        +
        +
        +
        +
        + +
        +
        +
        +
        +
        +
        +
        +
        + +
        +
        +

        + + +
        +
        +
        + + + +   + + +
        + + + +
        + + + + +
        +
        + + +   + + + + +   + + + +
        + +
        +
        +
        + +
        +
        + +
        +
        +
        + + +   + + + + + + +
        + + + + \ No newline at end of file diff --git a/Aida/alarm.js b/Aida/alarm.js new file mode 100644 index 0000000..f128f35 --- /dev/null +++ b/Aida/alarm.js @@ -0,0 +1,5322 @@ +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; + +var G_VIEW_CANVAS_X = 480; +var G_VIEW_CANVAS_Y = 320; +var G_CAM_VIDEO_RES_WIDTH = 1920; +var G_CAM_VIDEO_RES_HEIGHT = 1080; +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 = 1; +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; + +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 + ':' + GetUrlPort() + '/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(); + } +} + +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 { + 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; + + 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); + + 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(); + }*/ + 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); + + 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); + } + + var AI_fps = ai_json.AI_fps; + localStorage.setItem('AI_fps', AI_fps); + var red_light = ai_json.red_light; + 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) */ + { + //clear_count_2 = 0; + + RefreshCanvasObject(max_protected_objects); + } + + //console.log("bbox_count: " + bbox_count.toString()); + + if (ai_json != null && typeof ai_json.counter_count !== 'undefined') { + counter_count_msg = ""; + + for (var j = 0; j < 8; j++) { + counter_count_msg += (counter_cust_name[j] + ": " + ai_json.counter_count[j] + ", "); + if (j == 3) { + counter_count_msg += "
        "; + } + } + localStorage.setItem('counter_count_msg', counter_count_msg); + } + else { + counter_count_msg = ""; + for (var j = 0; j < 8; j++) { + counter_count_msg += (counter_cust_name[j] + ": " + " " + ", "); + if (j == 3) { + counter_count_msg += "
        "; + } + } + 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] * 0.25, coldobjects_Y[index_cold] * 0.3, coldobjects_W[index_cold] * 0.25, coldobjects_H[index_cold] * 0.3, 1, 1, 0, 0)); + canvasTripwire.add(insertTrafficLightRectangle_Blue(coldobjects_X[index_cold] * 0.25, coldobjects_Y[index_cold] * 0.3, coldobjects_W[index_cold] * 0.25, coldobjects_H[index_cold] * 0.3, 1, 1, 0, 0)); + canvasTripwire1.add(insertTrafficLightRectangle_Blue(coldobjects_X[index_cold] * 0.25, coldobjects_Y[index_cold] * 0.3, coldobjects_W[index_cold] * 0.25, coldobjects_H[index_cold] * 0.3, 1, 1, 0, 0)); + canvasTripwire2.add(insertTrafficLightRectangle_Blue(coldobjects_X[index_cold] * 0.25, coldobjects_Y[index_cold] * 0.3, coldobjects_W[index_cold] * 0.25, coldobjects_H[index_cold] * 0.3, 1, 1, 0, 0)); + canvasTripwire3.add(insertTrafficLightRectangle_Blue(coldobjects_X[index_cold] * 0.25, coldobjects_Y[index_cold] * 0.3, coldobjects_W[index_cold] * 0.25, coldobjects_H[index_cold] * 0.3, 1, 1, 0, 0)); + canvasTripwire4.add(insertTrafficLightRectangle_Blue(coldobjects_X[index_cold] * 0.25, coldobjects_Y[index_cold] * 0.3, coldobjects_W[index_cold] * 0.25, coldobjects_H[index_cold] * 0.3, 1, 1, 0, 0)); + canvasTripwire5.add(insertTrafficLightRectangle_Blue(coldobjects_X[index_cold] * 0.25, coldobjects_Y[index_cold] * 0.3, coldobjects_W[index_cold] * 0.25, coldobjects_H[index_cold] * 0.3, 1, 1, 0, 0)); + canvasTripwire6.add(insertTrafficLightRectangle_Blue(coldobjects_X[index_cold] * 0.25, coldobjects_Y[index_cold] * 0.3, coldobjects_W[index_cold] * 0.25, coldobjects_H[index_cold] * 0.3, 1, 1, 0, 0)); + canvasTripwire7.add(insertTrafficLightRectangle_Blue(coldobjects_X[index_cold] * 0.25, coldobjects_Y[index_cold] * 0.3, coldobjects_W[index_cold] * 0.25, coldobjects_H[index_cold] * 0.3, 1, 1, 0, 0)); + canvasTripwire8.add(insertTrafficLightRectangle_Blue(coldobjects_X[index_cold] * 0.25, coldobjects_Y[index_cold] * 0.3, coldobjects_W[index_cold] * 0.25, coldobjects_H[index_cold] * 0.3, 1, 1, 0, 0)); + + canvasTripwire_all.add(insertTextLabel_Blue(coldobjects_X[index_cold] * 0.25, coldobjects_Y[index_cold] * 0.3 - 18, 50, 50, translate_name)); + canvasTripwire.add(insertTextLabel_Blue(coldobjects_X[index_cold] * 0.25, coldobjects_Y[index_cold] * 0.3 - 18, 50, 50, translate_name)); + canvasTripwire1.add(insertTextLabel_Blue(coldobjects_X[index_cold] * 0.25, coldobjects_Y[index_cold] * 0.3 - 18, 50, 50, translate_name)); + canvasTripwire2.add(insertTextLabel_Blue(coldobjects_X[index_cold] * 0.25, coldobjects_Y[index_cold] * 0.3 - 18, 50, 50, translate_name)); + canvasTripwire3.add(insertTextLabel_Blue(coldobjects_X[index_cold] * 0.25, coldobjects_Y[index_cold] * 0.3 - 18, 50, 50, translate_name)); + canvasTripwire4.add(insertTextLabel_Blue(coldobjects_X[index_cold] * 0.25, coldobjects_Y[index_cold] * 0.3 - 18, 50, 50, translate_name)); + canvasTripwire5.add(insertTextLabel_Blue(coldobjects_X[index_cold] * 0.25, coldobjects_Y[index_cold] * 0.3 - 18, 50, 50, translate_name)); + canvasTripwire6.add(insertTextLabel_Blue(coldobjects_X[index_cold] * 0.25, coldobjects_Y[index_cold] * 0.3 - 18, 50, 50, translate_name)); + canvasTripwire7.add(insertTextLabel_Blue(coldobjects_X[index_cold] * 0.25, coldobjects_Y[index_cold] * 0.3 - 18, 50, 50, translate_name)); + canvasTripwire8.add(insertTextLabel_Blue(coldobjects_X[index_cold] * 0.25, coldobjects_Y[index_cold] * 0.3 - 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 (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() + ","; + } + + + 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++) { + if (ai_json.AiEngine[i]) { + + if (ai_json.AiEngine[i].parent_idx == -1) { + + 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") { + + if (typeof (ai_json.AiEngine[i].properties !== 'undefined')) { + if (typeof (ai_json.AiEngine[i].properties.plate !== 'undefined')) { + 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; + }*/ + + AssignPlateObject(ai_json, i, plate_name); + } + } + + } + 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); + + /*if (x == 0 || y == 0 || w == 0 || h == 0 || text_y == 0) + continue; + + if (x * 0.25 <= 20) { + x = 80; + } + else if (x * 0.25 >= 460) { + x = 1840; + } + + if (y * 0.3 <= 20) { + y = 66; + } + else if (y * 0.3 >= 300) { + y = 999; + } + + if (x * 0.25 + w * 0.25 >= 460) { + w = (460 - x * 0.25) * 4; + } + + if (y * 0.3 + h * 0.3 >= 300) { + h = (300 - y * 0.3) * 3.33; + }*/ + + text_y = y - 66; + + 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 * 0.25, y * 0.3)); + canvasTripwire.add(insertCircle_Green(x * 0.25, y * 0.3)); + canvasTripwire1.add(insertCircle_Green(x * 0.25, y * 0.3)); + canvasTripwire2.add(insertCircle_Green(x * 0.25, y * 0.3)); + canvasTripwire3.add(insertCircle_Green(x * 0.25, y * 0.3)); + canvasTripwire4.add(insertCircle_Green(x * 0.25, y * 0.3)); + canvasTripwire5.add(insertCircle_Green(x * 0.25, y * 0.3)); + canvasTripwire6.add(insertCircle_Green(x * 0.25, y * 0.3)); + canvasTripwire7.add(insertCircle_Green(x * 0.25, y * 0.3)); + canvasTripwire8.add(insertCircle_Green(x * 0.25, y * 0.3)); + } + else { + canvasTripwire_all.add(insertCircle_Red(x * 0.25, y * 0.3)); + canvasTripwire.add(insertCircle_Red(x * 0.25, y * 0.3)); + canvasTripwire1.add(insertCircle_Red(x * 0.25, y * 0.3)); + canvasTripwire2.add(insertCircle_Red(x * 0.25, y * 0.3)); + canvasTripwire3.add(insertCircle_Red(x * 0.25, y * 0.3)); + canvasTripwire4.add(insertCircle_Red(x * 0.25, y * 0.3)); + canvasTripwire5.add(insertCircle_Red(x * 0.25, y * 0.3)); + canvasTripwire6.add(insertCircle_Red(x * 0.25, y * 0.3)); + canvasTripwire7.add(insertCircle_Red(x * 0.25, y * 0.3)); + canvasTripwire8.add(insertCircle_Red(x * 0.25, y * 0.3)); + } + } + } + else { + if (behavior_id <= 0) { + canvasTripwire_all.add(insertTrafficLightRectangle(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, plate_name, number_row)); + canvasTripwire.add(insertTrafficLightRectangle(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, plate_name, number_row)); + canvasTripwire1.add(insertTrafficLightRectangle(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, plate_name, number_row)); + canvasTripwire2.add(insertTrafficLightRectangle(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, plate_name, number_row)); + canvasTripwire3.add(insertTrafficLightRectangle(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, plate_name, number_row)); + canvasTripwire4.add(insertTrafficLightRectangle(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, plate_name, number_row)); + canvasTripwire5.add(insertTrafficLightRectangle(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, plate_name, number_row)); + canvasTripwire6.add(insertTrafficLightRectangle(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, plate_name, number_row)); + canvasTripwire7.add(insertTrafficLightRectangle(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, plate_name, number_row)); + canvasTripwire8.add(insertTrafficLightRectangle(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, plate_name, number_row)); + } + else { + canvasTripwire_all.add(insertTrafficLightRectangle_Red(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, plate_name)); + canvasTripwire.add(insertTrafficLightRectangle_Red(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, plate_name)); + canvasTripwire1.add(insertTrafficLightRectangle_Red(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, plate_name)); + canvasTripwire2.add(insertTrafficLightRectangle_Red(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, plate_name)); + canvasTripwire3.add(insertTrafficLightRectangle_Red(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, plate_name)); + canvasTripwire4.add(insertTrafficLightRectangle_Red(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, plate_name)); + canvasTripwire5.add(insertTrafficLightRectangle_Red(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, plate_name)); + canvasTripwire6.add(insertTrafficLightRectangle_Red(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, plate_name)); + canvasTripwire7.add(insertTrafficLightRectangle_Red(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, plate_name)); + canvasTripwire8.add(insertTrafficLightRectangle_Red(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 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 * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire1.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire2.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire3.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire4.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire5.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire6.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire7.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire8.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 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 * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire1.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire2.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire3.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire4.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire5.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire6.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire7.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire8.add(insertTextLabel(x * 0.25, text_y * 0.3, 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 - 66; + 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 * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, 1, obj_tracking_id)); + canvasTripwire.add(insertTrafficLightRectangle_Blue(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, 1, obj_tracking_id)); + canvasTripwire1.add(insertTrafficLightRectangle_Blue(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, 1, obj_tracking_id)); + canvasTripwire2.add(insertTrafficLightRectangle_Blue(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, 1, obj_tracking_id)); + canvasTripwire3.add(insertTrafficLightRectangle_Blue(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, 1, obj_tracking_id)); + canvasTripwire4.add(insertTrafficLightRectangle_Blue(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, 1, obj_tracking_id)); + canvasTripwire5.add(insertTrafficLightRectangle_Blue(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, 1, obj_tracking_id)); + canvasTripwire6.add(insertTrafficLightRectangle_Blue(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, 1, obj_tracking_id)); + canvasTripwire7.add(insertTrafficLightRectangle_Blue(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, 1, obj_tracking_id)); + canvasTripwire8.add(insertTrafficLightRectangle_Blue(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, 1, obj_tracking_id)); + + if (label_word.length >= 1) { + canvasTripwire_all.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire1.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire2.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire3.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire4.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire5.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire6.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire7.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire8.add(insertTextLabel(x * 0.25, text_y * 0.3, 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 - 66; + 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 * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, 1, obj_tracking_id)); + canvasTripwire.add(insertTrafficLightRectangle_Blue(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, 1, obj_tracking_id)); + canvasTripwire1.add(insertTrafficLightRectangle_Blue(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, 1, obj_tracking_id)); + canvasTripwire2.add(insertTrafficLightRectangle_Blue(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, 1, obj_tracking_id)); + canvasTripwire3.add(insertTrafficLightRectangle_Blue(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, 1, obj_tracking_id)); + canvasTripwire4.add(insertTrafficLightRectangle_Blue(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, 1, obj_tracking_id)); + canvasTripwire5.add(insertTrafficLightRectangle_Blue(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, 1, obj_tracking_id)); + canvasTripwire6.add(insertTrafficLightRectangle_Blue(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, 1, obj_tracking_id)); + canvasTripwire7.add(insertTrafficLightRectangle_Blue(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, 1, obj_tracking_id)); + canvasTripwire8.add(insertTrafficLightRectangle_Blue(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, 1, obj_tracking_id)); + + if (label_word.length >= 1) { + canvasTripwire_all.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire1.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire2.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire3.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire4.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire5.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire6.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire7.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, label_word)); + canvasTripwire8.add(insertTextLabel(x * 0.25, text_y * 0.3, 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"; + } + + 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); + /*if (x * 0.25 <= 20) { + x = 80; + } + else if (x * 0.25 >= 460) { + x = 1840; + } + + if (y * 0.3 <= 20) { + y = 66; + } + else if (y * 0.3 >= 300) { + y = 999; + } + + if (x * 0.25 + w * 0.25 >= 460) { + w = parseInt((460 - x * 0.25) * 4, 10); + } + + if (y * 0.3 + h * 0.3 >= 300) { + h = parseInt((300 - y * 0.3) * 3.33, 10); + }*/ + + text_y = y - 66; + + 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 * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, "", 1)); + canvasTripwire1.add(insertTrafficLightRectangle(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, "", 1)); + canvasTripwire2.add(insertTrafficLightRectangle(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, "", 1)); + canvasTripwire3.add(insertTrafficLightRectangle(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, "", 1)); + canvasTripwire4.add(insertTrafficLightRectangle(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, "", 1)); + canvasTripwire5.add(insertTrafficLightRectangle(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, "", 1)); + canvasTripwire6.add(insertTrafficLightRectangle(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, "", 1)); + canvasTripwire7.add(insertTrafficLightRectangle(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 1, 1, "", 1)); + canvasTripwire8.add(insertTrafficLightRectangle(x * 0.25, y * 0.3, w * 0.25, h * 0.3, 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 * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire1.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire2.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire3.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire4.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire5.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire6.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire7.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire8.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, out_label)); + } + else { + canvasTripwire.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire1.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire2.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire3.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire4.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire5.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire6.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire7.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire8.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, out_label)); + } + } + else { + if (behavior_id >= 1) { + canvasTripwire.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire1.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire2.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire3.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire4.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire5.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire6.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire7.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire8.add(insertTextLabel_Red(x * 0.25, text_y * 0.3, 50, 50, out_label)); + } + else { + canvasTripwire.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire1.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire2.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire3.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire4.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire5.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire6.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire7.add(insertTextLabel(x * 0.25, text_y * 0.3, 50, 50, out_label)); + canvasTripwire8.add(insertTextLabel(x * 0.25, text_y * 0.3, 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 + while (canvasTripwire.getObjects().length > 0) { + var items = canvasTripwire.getObjects(); + if (items[canvasTripwire.getObjects().length - 1]) { + canvasTripwire.remove(items[canvasTripwire.getObjects().length - 1]); + } + } + } + + if (typeof canvasTripwire1 !== 'undefined') { + //Clear all objects + 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"; + } + + + if (typeof canvasTripwire2 !== 'undefined') { + //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"; + } + + + if (typeof canvasTripwire3 !== 'undefined') { + //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"; + } + + if (typeof canvasTripwire4 !== 'undefined') { + //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"; + } + + if (typeof canvasTripwire5 !== 'undefined') { + //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"; + } + + if (typeof canvasTripwire6 !== 'undefined') { + //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"; + } + + if (typeof canvasTripwire7 !== 'undefined') { + //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"; + } + + if (typeof canvasTripwire8 !== 'undefined') { + //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"; + } + + if (typeof canvasTripwire_all !== 'undefined') { + //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]); + } + } + + for (var index_click = 0; index_click < click_canvas_all; index_click++) { + canvasTripwire_all.getObjects()[index_click].stroke = "#ffff00"; + } + } +} + + +/* +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; + +function GetUrlPort() { + var url_href = window.location.href; + var arr_url = url_href.split(":")[2].split("/")[0]; + + return arr_url; +} +var ws = null; +var wait_data = 0; +//var last_performace_time = 0; +function GetRequest_WebSocket() { + 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 + ":" + GetUrlPort() + "/getalarmmotion?" + navigator.userAgent ); + else + ws = new WebSocket("ws://" + window.location.hostname + ":" + GetUrlPort() + "/getalarmmotion"); + + 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(data_temp); + 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); + } +} + +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 + ":" + GetUrlPort() + "/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) { + $.ajax({ + url: "/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: "/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: "/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('
        Too little, Min:' + minmeter.toString() + 'M ' + minft.toString() + 'Ft
        '); + //else if (minmeter > 7.4) + //$("#tof_current_min div:first").html('
        Too large, Min:' + minmeter.toString() + 'M ' + minft.toString() + 'Ft
        '); + //else + $("#tof_current_min div:first").html('
        Min:' + minmeter.toString() + 'M ' + minft.toString() + 'Ft
        '); + + //if (maxmeter < 0.3 ) + //$("#tof_current_max div:first").html('
        Too little, Max:' + maxmeter.toString() + 'M ' + maxft.toString() + 'Ft
        '); + //else if (maxmeter > 7.4) + //$("#tof_current_max div:first").html('
        Too large, Max:' + maxmeter.toString() + 'M ' + maxft.toString() + 'Ft
        '); + //else + $("#tof_current_max div:first").html('
        Max:' + maxmeter.toString() + 'M ' + maxft.toString() + 'Ft
        '); + + $("#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"); + } + +} diff --git a/Aida/alarm_on_airelay.html b/Aida/alarm_on_airelay.html new file mode 100644 index 0000000..1abf3e1 --- /dev/null +++ b/Aida/alarm_on_airelay.html @@ -0,0 +1,8621 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + +
        + +
        +
        + +
        + +
        + +
        +
        + +
        +
        + +
        +
        + +
        +
        + +
        +
        + +
        +
        + +
        +
        + +
        + +
        + +
        +
        + +
        +
        + +
        + +
        + + + + + +   + + + + + + + + + +   + + + +   + +   + + + + + + +
        + +
        + + + + + + + +   + + + + + + + + + + + +
        + + + + + + + +
        +
        +
        +
        +
        + +
        +
        + + + +
        + +
        + + +
        + +
        +
        + + + +
        +
        +

        + + +

        + + + +

        + + + + + +
        +
        +
        +
        +
          +
          + +   + +
          + + + + +
          + + + + + + +
          + + + + + + +
          + +
          +

          + + + +
          +
          +
            +
            + +
            +
            +
              +
              +
              + + +
              + + +
              + +
              +
              + +
              + + +
              + +
              + +
              + +
              +
              + +
              +
              + +
              + +
              + + +
              + +
              + +
              + + + +
              + + +
              + + +
              + + +
              + + +
              + + +
              + + +
              +
              + +
              + +
              + +
              + + +
              + +
              + +
              + +
              +
              + +
              +
              + +
              + + +
              + + + +
              + + +
              + +
              +
              + +
              +
              + + + + + + + + + + \ No newline at end of file diff --git a/Aida/alarm_on_airelay.js b/Aida/alarm_on_airelay.js new file mode 100644 index 0000000..9a3952d --- /dev/null +++ b/Aida/alarm_on_airelay.js @@ -0,0 +1,6076 @@ +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 = 1; +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 { + 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] + ": " + ai_json.counter_count[j] + " ," + spacing); + if (j == 3) { + counter_count_msg += "
              "; + } + } + 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] + ": " + " " + " ," + spacing); + if (j == 3) { + counter_count_msg += "
              "; + } + } + 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 (typeof (ai_json.AiEngine[i].properties !== 'undefined')) { + if (typeof (ai_json.AiEngine[i].properties.plate !== 'undefined')) { + 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; + } + + 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 { + 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"; + } + + 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 = "                "; +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] + ": 0 ," + spacing); + if (j == 3) { + counter_count_msg += "
              "; + } + } + 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 (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) +} + + + +function GetRequest_Http_80port_fetch() { + // console.log("[GetRequest_Http_80port_fetch] start"); + localStorage.setItem("fetchHttpGetalarm", "Yes"); + + 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 decoder = new TextDecoder('utf-8'); + function read() { + reader.read().then(({ done, value }) => { + // 08-24 以當前傳輸間隔換算1秒能傳的次數,沒物件資訊時,以 noJsonStringCounter 判斷是否須清除殘留物件 + var fetchIntervalTime = (Date.now() - g_getalarmmotion_last_fetch_time); + var refreshCounterThreshold = 1000 / fetchIntervalTime; + // console.log(`fetchIntervalTime : ${fetchIntervalTime} , refreshCounterThreshold : ${refreshCounterThreshold} , check noJsonStringCounter : ${noJsonStringCounter}`); + + // 紀錄最後收到資訊的時間,以供斷線重連檢查用 + g_getalarmmotion_last_fetch_time = Date.now(); + + if (done) { + // console.log('http getalarmmotion complete'); + return; + } + + // 處理收到的資料 + var chunk = decoder.decode(value, { stream: true }); + // console.log('Received chunk:', chunk); + + var lines = chunk.split(/\r?\n/); + var lastJsonString = ''; + var camTime = ''; + lines.forEach(line => { + if (line.startsWith('CamTime:')) { + camTime = line; + } else if (line.startsWith('{') && line.endsWith('}')) { + lastJsonString = line; + } + }); + + // 不論有無 Json 字串都可能用到 + var max_protected_objects = g_max_protected_objects; + if (g_enable_show_pixel === 1) { + max_protected_objects = g_max_protected_objects + 2; + } + + if (lastJsonString) { + // 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); + } else { + // 記錄沒傳 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 => { + // 發生錯誤後稍等一段時間再重試 + try { + setTimeout(GetRequest_Http_80port_fetch, 3000); + } catch (error) { + console.error(error); + } + }); + +} + + +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('
              Too little, Min:' + minmeter.toString() + 'M ' + minft.toString() + 'Ft
              '); + //else if (minmeter > 7.4) + //$("#tof_current_min div:first").html('
              Too large, Min:' + minmeter.toString() + 'M ' + minft.toString() + 'Ft
              '); + //else + $("#tof_current_min div:first").html('
              Min:' + minmeter.toString() + 'M ' + minft.toString() + 'Ft
              '); + + //if (maxmeter < 0.3 ) + //$("#tof_current_max div:first").html('
              Too little, Max:' + maxmeter.toString() + 'M ' + maxft.toString() + 'Ft
              '); + //else if (maxmeter > 7.4) + //$("#tof_current_max div:first").html('
              Too large, Max:' + maxmeter.toString() + 'M ' + maxft.toString() + 'Ft
              '); + //else + $("#tof_current_max div:first").html('
              Max:' + maxmeter.toString() + 'M ' + maxft.toString() + 'Ft
              '); + + $("#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"); + } + +} + +// JVC version +// function create_canvas_stream(specifyProfileNo) { +// console.log("[create_canvas_stream] init H264 streaming"); +// //var g_profileno = GetCookie('profileno'); + +// var ui_width = G_VIEW_CANVAS_X; +// var ui_height = G_VIEW_CANVAS_Y; + +// var l_cgi = "/websocket?"; +// var l_token = ""; + +// //var event_uri = l_cgi + 'eventstream=' + g_profileno + l_token; +// var event_uri = l_cgi + 'eventstream=0' + l_token; + +// var g_event_para = new _codec_para(); +// g_event_para.worker_num = 1; + +// //g_event_para.vc[0] = { width: g_setup_PROFILE_Width[g_profileno], height: g_setup_PROFILE_Height[g_profileno], id: "video_container", frameszie: 4096000 }; +// g_event_para.vc[0] = { width: '1920', height: '1080', 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('1', 5, '1920', '1080', '10', '8000', 16000); + +// console.log('[create_canvas_stream] start H264 streaming'); +// } + +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) { + $.ajax({ + url: '/' + g_tcp_tunnel_token + "/setconfigfile", + method: "POST", + async: false, + data: json_data, + contentType: false, + processData: false, + beforeSend: function (xmlHttp) { + xmlHttp.setRequestHeader("If-Modified-Since", "0"); + xmlHttp.setRequestHeader("Cache-Control", "no-cache"); + //xmlHttp.setRequestHeader("Authorization", "Basic " + btoa("username:password")); + }, + success: function () { + //console.info(); + }, + error: function () { + console.warn(); + k_count++; + + if (k_count <= 94) { + waitSeconds(500); + func_setconfigfile(json_data); + } + } + }); + return false; +} \ No newline at end of file diff --git a/Aida/alarm_on_nvr.html b/Aida/alarm_on_nvr.html new file mode 100644 index 0000000..3807a65 --- /dev/null +++ b/Aida/alarm_on_nvr.html @@ -0,0 +1,7810 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              + × +
              + + +
              + +
              + + +
              +
              +
              + +
              +
              + + + + + + +
              +

              + + +

              + + + +

              + + + + + +
              + +
              +
              +
                +
                + +   + +
                +
                + + +
                + +

                + + + +
                +
                +
                  +
                  + +
                  +
                  +
                    +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    + +
                    +
                    + +
                    +
                    + +
                    +
                    + +
                    +
                    + +
                    +
                    + +
                    +
                    + +
                    + +
                    + +
                    +
                    + +
                    +
                    +
                    + + + + +   + + + + + + + + +
                    + + +   + + + +   + +   + +   + + +
                    + + + + + + + + + + + +    + + +
                    + + + + + + + + +
                    + + +
                    + +

                    + +
                    +
                    +
                    +
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    + +
                    +
                    +

                    + + +
                    +
                    +
                    + + + +
                    + + +
                    + + + +
                    + + + + +
                    +
                    + + +   +
                    + + + +   + + + +
                    + +
                    +
                    +
                    + +
                    +
                    + +
                    +
                    +
                    + + +   + + + + + + +
                    + + + + \ No newline at end of file diff --git a/Aida/anpr_index.html b/Aida/anpr_index.html new file mode 100644 index 0000000..0bfa6d4 --- /dev/null +++ b/Aida/anpr_index.html @@ -0,0 +1,1258 @@ + + + + + + + + + + + + + + + + + + + AI Engine + + + + + + + + + + + + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +
                    +
                    + +
                    +   +      +   +
                    + +  

                    + + +  

                    + + +   +      + +   +
                    + +
                    +   +   +   +
                    + + +   + +
                    + +   +

                    + +
                    + + +   +
                    + + +
                    + +   +
                    + +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    + +   + +
                    +
                    + + + + + + + + \ No newline at end of file diff --git a/Aida/bootstrap.min.css b/Aida/bootstrap.min.css new file mode 100644 index 0000000..bd8f783 --- /dev/null +++ b/Aida/bootstrap.min.css @@ -0,0 +1,30 @@ +.progress { + display: -ms-flexbox; + display: flex; + height: 8px; + width: 98%; + overflow: hidden; + line-height: 0; + font-size: 1px; + background-color: #e9ecef; + border-radius: 1px; +} +.progress-bar { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-pack: center; + justify-content: center; + overflow: hidden; + color: #fff; + text-align: center; + white-space: nowrap; + background-color: #fd9600; + transition: width.6s ease; +} + +.progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25% , transparent 25% , transparent 50% , rgba(255, 255, 255, .15) 50% , rgba(255, 255, 255, .15) 75% , transparent 75% , transparent); + background-size: 1rem 1rem; +} \ No newline at end of file diff --git a/Aida/cgi.js b/Aida/cgi.js new file mode 100644 index 0000000..ab18cf9 --- /dev/null +++ b/Aida/cgi.js @@ -0,0 +1,275 @@ +var myport = "80"; +var g_check_if_airelay = 1; + +/* +var mymirror = "0"; +var myflip = "0"; +var myrotate = "0"; +*/ +/* +window.addEventListener("mousewheel", (e) => { + if (e.deltaY === 1) { + e.preventDefault(); + } +})*/ + +getIPCamSettings(); +// Restricts input for the given textbox to the given inputFilter. + +function getIPCamSettings() { + var urlStr; + if (g_check_if_airelay == 1) { + urlStr = '/airelay/getipcamsettings'; + } + else { + urlStr = '/getipcamsettings'; + } + + if (localStorage.getItem('IPCAM_PORT') == null) { + $.ajax({ + //url: "/airelay/getipcamsettings", + url: urlStr, + type: "GET", + async: false, + // timeout: 0, + beforeSend: function (xmlHttp) { + xmlHttp.setRequestHeader("If-Modified-Since", "0"); + xmlHttp.setRequestHeader("Cache-Control", "no-cache"); + //xmlHttp.setRequestHeader("Authorization", "Basic " + btoa("username:password")); + }, + success: function (retdata) { + var jsonbuf = JSON.parse(retdata); + + myport = jsonbuf["IPCAM_PORT"]; + localStorage.setItem("IPCAM_PORT", myport); + + /*mymirror = jsonbuf["IPCAM_MIRROR"]; + myflip = jsonbuf["IPCAM_FLIP"]; + myrotate = jsonbuf["IPCAM_ROTATE"]; + */ + //console.info(retdata); + }, + error: function (retdata) { + console.warn(retdata); + /* + if (localStorage.getItem('IPCAM_PORT') != null) { + myport = localStorage.getItem('IPCAM_PORT'); + }*/ + } + }); + } + else { + myport = localStorage.getItem('IPCAM_PORT'); + } +} + + +get_cgi = function () +{ + if (arguments.length == 0) + { + return; + } + var ajax = new Array; + var _timeout; + if(window.location.protocol == "http:") + { + ajax["port"] = myport; + if(arguments[0].port != null) + { + ajax["port"] = arguments[0].port; + if (ajax["port"] == myport) + ajax["url"] = "http://"+ (document.URL.split('//')[1]).split('/')[0].split(':')[0] + arguments[0].cmd; + else + ajax["url"] = "http://"+ (document.URL.split('//')[1]).split('/')[0].split(':')[0] + ":" + ajax["port"] + arguments[0].cmd; + }else{ + ajax["url"] = "http://"+ (document.URL.split('//')[1]).split('/')[0] + arguments[0].cmd; + } + + } + else + { + ajax["url"] = "https://"+ (document.URL.split('//')[1]).split('/')[0] + arguments[0].cmd; + } + + //console.log(ajax["url"]); + + ajax["async"] = true; + if (typeof arguments[0].async == "boolean") + { + ajax["async"] = arguments[0].async; + } + if(arguments[0].timeout != null) + { + _timeout = arguments[0].timeout; + }else{ + _timeout = 30000; + } + ajax["get_parser"] = arguments[0].get_parser; + ajax["get_response"] = arguments[0].get_response; + if(arguments[0].parameter != null) + { + ajax["parameter"] = arguments[0].parameter; + } + $.ajax({ + url: ajax["url"], + type: 'GET', + async: ajax["async"], + timeout: _timeout, + cache: false, + error: function (xhr) + { + if (typeof ajax["get_parser"] == "function") + { + ajax["get_parser"]("cgi_error"); + } + else if (typeof ajax["get_response"] == "function") + { + ajax["get_response"]("cgi_error"); + } + }, + success: function (response) + { + //console.info(response); + if (typeof ajax["get_parser"] == "function") + { + if(ajax["parameter"] != null) + { + ajax["get_parser"](parse_key_array_content(response),ajax["parameter"]); + } + else + { + ajax["get_parser"](parse_key_array_content(response)); + } + } + else if (typeof ajax["get_response"] == "function") + { + ajax["get_response"](response); + } + } + }); +} + +post_cgi = function() +{ + if (arguments.length == 0) + { + return; + } + var ajax = new Array; + var _timeout; + + if(window.location.protocol == "http:") + { + ajax["url"] = "http://"+ (document.URL.split('//')[1]).split('/')[0] + arguments[0].cmd; + } + else + { + ajax["url"] = "https://"+ (document.URL.split('//')[1]).split('/')[0] + arguments[0].cmd; + } + //console.log(ajax["url"]); + ajax["async"] = true; + if (typeof arguments[0].async == "boolean") + { + ajax["async"] = arguments[0].async; + } + if(arguments[0].timeout != null) + { + _timeout = arguments[0].timeout; + }else{ + _timeout = 1900; + } + + ajax["get_parser"] = arguments[0].get_parser; + ajax["post_data"] = arguments[0].post_data; + ajax["get_response"] = arguments[0].get_response; + + $.ajax({ + url: ajax["url"], + data: ajax["post_data"], + dataType: 'text', + type: 'POST', + async: ajax["async"], + timeout: _timeout, + cache: false, + error: function (xhr) + { + if (typeof ajax["get_parser"] == "function") + { + ajax["get_parser"]("cgi_error"); + } + else if (typeof ajax["get_response"] == "function") + { + ajax["get_response"]("cgi_error"); + } + }, + success: function (response) + { + if (typeof ajax["get_parser"] == "function") + { + ajax["get_parser"](parse_key_array_content(response)); + } + else if (typeof ajax["get_response"] == "function") + { + ajax["get_response"](response); + } + } + }); +} + +parse_key_array_content = function(content,options) +{ + var options = $.extend({spliter1: '=', spliter2: '\n'},options); + var result = { all: content }; + var place = content.split(options.spliter2); + var info=new Array; + for (var i=0;i; + o+='%3B'; + else if(v.charCodeAt(i)==0x5C)//-> \ + o+='%5C'; + else if(v.charCodeAt(i)==0x2F)// ->/ + o+='%2F'; + else if(v.charCodeAt(i)==0x26)//->& + o+='%26'; + else + o+=v.charAt(i); + } + return o; +}; \ No newline at end of file diff --git a/Aida/chirun_min.js b/Aida/chirun_min.js new file mode 100644 index 0000000..bbcec68 --- /dev/null +++ b/Aida/chirun_min.js @@ -0,0 +1,347 @@ +function GE(a) { return document.getElementById(a) } + +function GES(a) { return document.getElementsByName(a) } + +function GetValue(b) { + var a = ""; + var c = GE(b); + if (c != null) { + if (c.type.indexOf("select") >= 0) { + a = c.options[c.selectedIndex].value + } else { a = c.value } + } else { + alert(b + " Error") + } + return a +} + +function SetValue(a, c) { + var d = GE(a); + if (d != null) { + if (d.type.indexOf("select") >= 0) { + for (var b = 0; b < d.options.length; b++) { + if (d.options[b].value == c) { d.selectedIndex = b; break } + } + } else { + d.value = c + } + } else { alert(a + " Error") } +} + +function Ctrl_Text(a, l, e, c, g, d, h, j, b, f, k, i) { + this.type = "text"; + this.active = !(b == true); + this.id = a; + this.value = c; + this.setcmd = g; + this.checker = d; + this.html = CreateTextHtml(a, l, e, c, h, j, f, k, i); + this.GV = function () { return GetValue(this.id) }; + this.SV = function (m) { SetValue(this.id, m) } +} + +function CreateTextHtml(a, k, b, i, f, g, d, j, e) { + var h = "text"; + if (f) { h = "password"; } else { if (k == "0") { h = "hidden"; } } + var c = ""; + c += "' } aryOption = c.split(";"); + for (var b = 0; b < aryOption.length; b++) { + if (b == e) { + f += "