readconfig.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  1. function readconfig_Version(){
  2. return "1.0.0 - 20200910";
  3. }
  4. var config_gesamt;
  5. var config_split;
  6. var ref = new Array(2);
  7. var digit = new Array(0);
  8. var analog = new Array(0);
  9. var initalrotate = new Object();
  10. var analogEnabled = false;
  11. var posAnalogHeader;
  12. function MakeRefZW(zw, _basepath){
  13. url = _basepath + "/editflow.html?task=cutref&in=/config/reference.jpg&out=/img_tmp/ref_zw_org.jpg&x=" + zw["x"] + "&y=" + zw["y"] + "&dx=" + zw["dx"] + "&dy=" + zw["dy"];
  14. var xhttp = new XMLHttpRequest();
  15. try {
  16. xhttp.open("GET", url, false);
  17. xhttp.send(); }
  18. catch (error)
  19. {
  20. // alert("Deleting Config.ini failed");
  21. }
  22. FileCopyOnServer("/img_tmp/ref_zw_org.jpg", "/img_tmp/ref_zw.jpg", _basepath);
  23. }
  24. function GetCoordinates(index, _basepath){
  25. FileCopyOnServer(ref[index]["name"], "/img_tmp/ref_zw.jpg", _basepath);
  26. FileDeleteOnServer("/img_tmp/ref_zw_org.jpg", _basepath);
  27. var namezw = ref[index]["name"].replace(".jpg", "_org.jpg");
  28. FileCopyOnServer(namezw, "/img_tmp/ref_zw_org.jpg", _basepath);
  29. return ref[index];
  30. }
  31. function ParseConfigAlignment(_aktline){
  32. var akt_ref = 0;
  33. ++_aktline;
  34. while ((_aktline < config_split.length)
  35. && !(config_split[_aktline][0] == "[")
  36. && !((config_split[_aktline][0] == ";") && (config_split[_aktline][1] == "["))) {
  37. var linesplit = ZerlegeZeile(config_split[_aktline]);
  38. if ((linesplit[0].toUpperCase() == "INITIALMIRROR") && (linesplit.length > 1))
  39. {
  40. initalrotate["mirror"] = linesplit[1].toUpperCase().localeCompare("TRUE") == 0;
  41. initalrotate["pos_config_mirror"] = _aktline;
  42. }
  43. if (((linesplit[0].toUpperCase() == "INITALROTATE") || (linesplit[0].toUpperCase() == "INITIALROTATE")) && (linesplit.length > 1))
  44. {
  45. initalrotate["angle"] = parseInt(linesplit[1]);
  46. initalrotate["pos_config"] = _aktline;
  47. }
  48. if (linesplit.length == 3)
  49. {
  50. ref[akt_ref] = new Object();
  51. ref[akt_ref]["pos_ref"] = _aktline;
  52. ref[akt_ref]["name"] = linesplit[0];
  53. ref[akt_ref]["x"] = linesplit[1];
  54. ref[akt_ref]["y"] = linesplit[2];
  55. akt_ref++;
  56. }
  57. ++_aktline;
  58. }
  59. return _aktline;
  60. }
  61. function ParseConfigDigit(_aktline){
  62. ++_aktline;
  63. digit.length = 0;
  64. while ((_aktline < config_split.length)
  65. && !(config_split[_aktline][0] == "[")
  66. && !((config_split[_aktline][0] == ";") && (config_split[_aktline][1] == "["))) {
  67. var linesplit = ZerlegeZeile(config_split[_aktline]);
  68. if (linesplit.length >= 5)
  69. {
  70. zw = new Object();
  71. zw["pos_ref"] = _aktline;
  72. zw["name"] = linesplit[0];
  73. zw["x"] = linesplit[1];
  74. zw["y"] = linesplit[2];
  75. zw["dx"] = linesplit[3];
  76. zw["dy"] = linesplit[4];
  77. zw["ar"] = parseFloat(linesplit[3]) / parseFloat(linesplit[4]);
  78. digit.push(zw);
  79. }
  80. ++_aktline;
  81. }
  82. return _aktline;
  83. }
  84. function GetAnalogEnabled() {
  85. return analogEnabled;
  86. }
  87. function ParseConfigAnalog(_aktline){
  88. ++_aktline;
  89. analog.length = 0;
  90. while ((_aktline < config_split.length)
  91. && !(config_split[_aktline][0] == "[")
  92. && !((config_split[_aktline][0] == ";") && (config_split[_aktline][1] == "["))) {
  93. var linesplit = ZerlegeZeile(config_split[_aktline]);
  94. if (linesplit.length >= 5)
  95. {
  96. zw = new Object();
  97. zw["pos_ref"] = _aktline;
  98. zw["name"] = linesplit[0];
  99. zw["x"] = linesplit[1];
  100. zw["y"] = linesplit[2];
  101. zw["dx"] = linesplit[3];
  102. zw["dy"] = linesplit[4];
  103. zw["ar"] = parseFloat(linesplit[3]) / parseFloat(linesplit[4]);
  104. analog.push(zw);
  105. }
  106. ++_aktline;
  107. }
  108. return _aktline;
  109. }
  110. function getROIInfo(_typeROI){
  111. if (_typeROI == "[Digits]"){
  112. targetROI = digit;
  113. }
  114. if (_typeROI == "[Analog]"){
  115. targetROI = analog;
  116. }
  117. return targetROI.slice(); // Kopie senden, nicht orginal!!!
  118. }
  119. function SaveROIToConfig(_ROIInfo, _typeROI, _basepath, _enabled){
  120. if (_typeROI == "[Digits]"){
  121. targetROI = digit;
  122. }
  123. if (_typeROI == "[Analog]"){
  124. if (_enabled) {
  125. text = _typeROI;
  126. }
  127. else {
  128. text = ";" + _typeROI;
  129. }
  130. config_split[posAnalogHeader] = text;
  131. targetROI = analog;
  132. }
  133. // Abstimmen Anzahl ROIs:
  134. var _pos = targetROI[targetROI.length-1]["pos_ref"];
  135. for (var i = targetROI.length; i < _ROIInfo.length; ++i){
  136. var zw = config_split[config_split.length-1];
  137. config_split.push(zw);
  138. for (var j = config_split.length-2; j > _pos + 1; --j){
  139. config_split[j] = config_split[j-1];
  140. }
  141. }
  142. for (i = targetROI.length-1; i > _ROIInfo.length-1; --i){
  143. var _zwpos = targetROI[i]["pos_ref"];
  144. config_split.splice(_zwpos, 1);
  145. }
  146. var linewrite = 0;
  147. for (i = 0; i < _ROIInfo.length; ++i){
  148. if (i < targetROI.length){
  149. linewrite = targetROI[i]["pos_ref"];
  150. }
  151. else {
  152. linewrite++;
  153. }
  154. config_split[linewrite] = _ROIInfo[i]["name"] + " " + _ROIInfo[i]["x"] + " " + _ROIInfo[i]["y"] + " " + _ROIInfo[i]["dx"] + " " + _ROIInfo[i]["dy"];
  155. }
  156. SaveConfigToServer(_basepath);
  157. }
  158. function ParseConfig() {
  159. config_split = config_gesamt.split("\n");
  160. var aktline = 0;
  161. while (aktline < config_split.length){
  162. if ((config_split[aktline].trim().toUpperCase() == "[ALIGNMENT]") || (config_split[aktline].trim().toUpperCase() == ";[ALIGNMENT]")){
  163. aktline = ParseConfigAlignment(aktline);
  164. continue;
  165. }
  166. if ((config_split[aktline].trim().toUpperCase() == "[DIGITS]") || (config_split[aktline].trim().toUpperCase() == ";[DIGITS]")){
  167. aktline = ParseConfigDigit(aktline);
  168. continue;
  169. }
  170. if ((config_split[aktline].trim().toUpperCase() == "[ANALOG]") || (config_split[aktline].trim().toUpperCase() == ";[ANALOG]")) {
  171. if (config_split[aktline][0] == "[") {
  172. analogEnabled = true;
  173. posAnalogHeader = aktline;
  174. }
  175. aktline = ParseConfigAnalog(aktline);
  176. continue;
  177. }
  178. aktline++;
  179. }
  180. }
  181. function getPreRotate(){
  182. return initalrotate["angle"];
  183. }
  184. function setPreRotate(_prerotate){
  185. initalrotate["angle"] = _prerotate;
  186. }
  187. function getMirror(){
  188. if (initalrotate.hasOwnProperty("mirror")) {
  189. return initalrotate["mirror"];
  190. }
  191. return false;
  192. }
  193. function setMirror(_mirror){
  194. initalrotate["mirror"] = _mirror;
  195. }
  196. function SaveCanvasToImage(_canvas, _filename, _delete = true, _basepath = ""){
  197. var JPEG_QUALITY=0.8;
  198. var dataUrl = _canvas.toDataURL('image/jpeg', JPEG_QUALITY);
  199. var rtn = dataURLtoBlob(dataUrl);
  200. if (_delete) {
  201. FileDeleteOnServer(_filename, _basepath);
  202. }
  203. FileSendContent(rtn, _filename, _basepath);
  204. }
  205. function SaveConfigToServer(_basepath){
  206. // leere Zeilen am Ende löschen
  207. var zw = config_split.length - 1;
  208. while (config_split[zw] == "") {
  209. config_split.pop();
  210. }
  211. var config_gesamt = "";
  212. for (var i = 0; i < config_split.length; ++i)
  213. {
  214. config_gesamt = config_gesamt + config_split[i] + "\n";
  215. }
  216. FileDeleteOnServer("/config/config.ini", _basepath);
  217. FileSendContent(config_gesamt, "/config/config.ini", _basepath);
  218. }
  219. function UpdateConfigFileReferenceChange(_basepath){
  220. for (var _index = 0; _index < ref.length; ++_index){
  221. var zeile = ref[_index]["name"] + " " + ref[_index]["x"] + " " + ref[_index]["y"];
  222. var _pos = ref[_index]["pos_ref"];
  223. config_split[_pos] = zeile;
  224. }
  225. zeile = "InitialRotate = " + initalrotate["angle"];
  226. var _pos = initalrotate["pos_config"];
  227. config_split[_pos] = zeile;
  228. var mirror = false;
  229. if (initalrotate.hasOwnProperty("mirror")) {
  230. mirror = initalrotate["mirror"];
  231. }
  232. var mirror_pos = -1;
  233. if (initalrotate.hasOwnProperty("pos_config_mirror")) {
  234. mirror_pos = initalrotate["pos_config_mirror"];
  235. }
  236. if (mirror_pos > -1) {
  237. if (mirror) {
  238. config_split[mirror_pos] = "InitialMirror = true";
  239. }
  240. else {
  241. config_split[mirror_pos] = "InitialMirror = false";
  242. }
  243. }
  244. else {
  245. if (mirror) { // neue Zeile muss an der richtigen Stelle eingefügt werden - hier direct nach [Alignment]
  246. var aktline = 0;
  247. while (aktline < config_split.length){
  248. if (config_split[aktline].trim() == "[Alignment]") {
  249. break;
  250. }
  251. aktline++
  252. }
  253. // fuege neue Zeile in config_split ein
  254. var zw = config_split[config_split.length-1];
  255. config_split.push(zw);
  256. for (var j = config_split.length-2; j > aktline + 1; --j){
  257. config_split[j] = config_split[j-1];
  258. }
  259. config_split[aktline + 1] = "InitialMirror = True"
  260. }
  261. }
  262. SaveConfigToServer(_basepath);
  263. }
  264. function UpdateConfig(zw, _index, _enhance, _basepath){
  265. var zeile = zw["name"] + " " + zw["x"] + " " + zw["y"];
  266. var _pos = ref[_index]["pos_ref"];
  267. config_split[_pos] = zeile;
  268. SaveConfigToServer(_basepath);
  269. var namezw = zw["name"];
  270. FileCopyOnServer("/img_tmp/ref_zw.jpg", namezw, _basepath);
  271. var namezw = zw["name"].replace(".jpg", "_org.jpg");
  272. FileCopyOnServer("/img_tmp/ref_zw_org.jpg", namezw, _basepath);
  273. }
  274. function MakeContrastImageZW(zw, _enhance, _basepath){
  275. url = _basepath + "/editflow.html?task=cutref&in=/config/reference.jpg&out=/img_tmp/ref_zw.jpg" + "&x=" + zw["x"] + "&y=" + zw["y"] + "&dx=" + zw["dx"] + "&dy=" + zw["dy"];
  276. if (_enhance == true){
  277. url = url + "&enhance=true";
  278. }
  279. var xhttp = new XMLHttpRequest();
  280. try {
  281. xhttp.open("GET", url, false);
  282. xhttp.send(); }
  283. catch (error)
  284. {
  285. // alert("Deleting Config.ini failed");
  286. }
  287. }
  288. function GetReferenceSize(name){
  289. img = new Image();
  290. var xhttp = new XMLHttpRequest();
  291. url = "http://192.168.178.22/fileserver" + name;
  292. xhttp.open("GET", url, false);
  293. xhttp.send();
  294. var response = xhttp.responseText;
  295. var binary = ""
  296. for (var responseText = xhttp.responseText, responseTextLen = responseText.length, binary = "", i = 0; i < responseTextLen; ++i) {
  297. binary += String.fromCharCode(responseText.charCodeAt(i) & 255)
  298. }
  299. img.src = 'data:image/jpeg;base64,'+ window.btoa(binary);
  300. return [img.width, img.height];
  301. }
  302. function getConfig() {
  303. return config_gesamt;
  304. }
  305. function dataURLtoBlob(dataurl) {
  306. var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
  307. bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
  308. while(n--){
  309. u8arr[n] = bstr.charCodeAt(n);
  310. }
  311. return new Blob([u8arr], {type:mime});
  312. }
  313. function SaveReferenceImage(_id_canvas, _filename, _doDelete, _basepath = ""){
  314. if (_doDelete){
  315. FileDeleteOnServer(_filename, _basepath);
  316. }
  317. var canvas = document.getElementById(_id_canvas);
  318. var JPEG_QUALITY=0.8;
  319. var dataUrl = canvas.toDataURL('image/jpeg', JPEG_QUALITY);
  320. var rtn = dataURLtoBlob(dataUrl);
  321. if (!FileSendContent(rtn, _filename, _basepath)){
  322. alert("Error on saving reference image (" + _filename + ")!\nPlease retry.");
  323. location.reload();
  324. };
  325. }