imageSlicer.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. rectID = 0;
  2. colors = ["rgba(0,255,0,0.7)","rgba(255,0,0,0.7)","rgba(0,0,255,0.7)","rgba(0,255,255,0.7)","rgba(255,255,0,0.7)","rgba(255,0,255,0.7)","rgba(0,122,0,0.7)","rgba(122,0,0,0.7)","rgba(0,0,122,0.7)","rgba(0,122,122,0.7)","rgba(122,122,0,0.7)","rgba(122,0,122,0.7)"]
  3. abk = [];
  4. function addRectangle(){
  5. addRectangle1("", 0,0,1000,100)
  6. }
  7. function scalefactor(){
  8. return $('#sliceImg').innerWidth() / $('#sliceImg').prop('naturalWidth');
  9. }
  10. function refitRect(id){
  11. $('#Rect' + id).css('transform', 'scale(' + scalefactor() + ')');
  12. }
  13. function changeRectPosition(id, style, amount){
  14. $('#Rect' + id).css(style, amount + "px");
  15. refitRect(id);
  16. }
  17. function addRectangle1(id,x,y,w,h,pattern){
  18. //Show input fields
  19. var clone = document.importNode(document.querySelector('#RectanglesSetup').content,true);
  20. var localID = rectID
  21. if(id != "")
  22. localID = id;
  23. $('[data-class=RectID]',clone).text("" + localID);
  24. $('[data-class=mainDiv]',clone).hover(function(){
  25. $('#Rect' + localID).css("background", colors[localID % colors.length]);
  26. $('#FormRect' + localID).css("background", colors[localID % colors.length]);
  27. },
  28. function(){
  29. $('#Rect' + localID).css("background", "none");
  30. $('#FormRect' + localID).css("background", "none");
  31. });
  32. $('[data-class=mainDiv]',clone).attr('id', 'FormRect' + localID);
  33. $('[data-class=x]',clone).val(x);
  34. $('[data-class=x]',clone).on('input', function(e) {
  35. changeRectPosition(localID, "left", this.value * scalefactor() );
  36. });
  37. $('[data-class=y',clone).val(y);
  38. $('[data-class=y]',clone).on('input', function(e) {
  39. changeRectPosition(localID, "top", this.value * scalefactor());
  40. });
  41. $('[data-class=w',clone).val(w);
  42. $('[data-class=w]',clone).on('input', function(e) {
  43. changeRectPosition(localID, "width", this.value );
  44. });
  45. $('[data-class=h',clone).val(h);
  46. $('[data-class=h]',clone).on('input', function(e) {
  47. changeRectPosition(localID, "height", this.value );
  48. });
  49. //Alle Abkürzungen einfügen und prüfen ob im pattern angegeben
  50. abk.forEach(function(item){
  51. if(item == "Text"){
  52. var clonepattern = document.importNode(document.querySelector('#RectanglePatternText').content,true);
  53. if(typeof pattern !== 'undefined' && typeof pattern[item] !== 'undefined'){
  54. $('[data-class=input]',clonepattern).val(pattern[item]);
  55. }
  56. $('[data-class=RectanglePattern',clone).append(clonepattern);
  57. }
  58. else {
  59. var clonepattern = document.importNode(document.querySelector('#RectanglePattern').content,true);
  60. $('[data-class=abk]',clonepattern).text(item);
  61. $('[data-class=input]',clonepattern).prop('name', item);
  62. if(typeof pattern !== 'undefined' && pattern[item]){
  63. $('[data-class=input]',clonepattern).prop('checked', true);
  64. }
  65. $('[data-class=RectanglePattern',clone).append(clonepattern);
  66. }
  67. });
  68. $('#imgRectangles').append(clone);
  69. //add rectangle
  70. var clone = document.importNode(document.querySelector('#RectanglesImage').content,true);
  71. $('[data-class=RectID]',clone).attr("id","Rect" + localID);
  72. $('[data-class=RectID]',clone).text("Rect" + localID);
  73. $('[data-class=RectID]',clone).css("top", y * scalefactor() + "px");
  74. $('[data-class=RectID]',clone).css("left", x * scalefactor() + "px");
  75. $('[data-class=RectID]',clone).css("width", w + "px");
  76. $('[data-class=RectID]',clone).css("height", h + "px");
  77. $('[data-class=RectID]',clone).hover(function(){
  78. $('#FormRect' + localID).css("background", colors[localID % colors.length]);
  79. $('#Rect' + localID).css("background", colors[localID % colors.length]);
  80. $('#detailcolumn2').scrollTop( 0 );
  81. $('#detailcolumn2').scrollTop($('#FormRect' + localID).position().top - 50 );
  82. },
  83. function(){
  84. $("#detailcolumn2").stop();
  85. $('#FormRect' + localID).css("background", "none");
  86. $('#Rect' + localID).css("background", "none");
  87. });
  88. $('#imgrect').append(clone);
  89. refitRect(localID);
  90. ++rectID;
  91. }
  92. function createPatternForm(){
  93. /* Load pattern config */
  94. //Create form for WAS/Stations/Pattern and WAS/Slicer
  95. var populate = ["FormPattern","FormPattern2"]
  96. var first = true;
  97. populate.forEach(function(populate2){
  98. $.getJSON( "json/ProductCode.json", function( data ) {
  99. $.each( data["pattern"], function(i, item){
  100. var clone = document.importNode(document.querySelector('#PatternFormInit').content,true);
  101. $('[data-class=Name]',clone).text(item["name"]);
  102. $('[data-class=Abkürzung]',clone).text(item["abk"]);
  103. if(first)
  104. abk.push(item["abk"])
  105. $.each( item["types"], function(i, item){
  106. $('[data-class=Optionen]',clone).append('<option value="' + item +'">' + item +'</option>');
  107. });
  108. $('[data-class=Optionen]',clone).attr("id", populate2 + "_Form_" + item["abk"]);
  109. $('#' + populate2).append(clone);
  110. });
  111. //Add "Text" to abk to show it within rects
  112. if(first)
  113. abk.push("Text")
  114. first = false;
  115. });
  116. });
  117. abk.length = 0;
  118. console.log(abk);
  119. //get Save locations
  120. $.getJSON( "json/SlicerConfig.json", function( data ) {
  121. $.each( data["saveLocation"], function(i, item){
  122. $("#savelocation").append('<option value="' + item +'">' + item +'</option>');
  123. });
  124. });
  125. }
  126. function createRectForm(station){
  127. var imgsrc = $("#sliceImg").attr("src")
  128. rectID = 0;
  129. $('#imgRectangles').text("");
  130. $('#imgrect').html('<img class="image" id="sliceImg" src=' + imgsrc +' alt="Alt text" />');
  131. $.getJSON( "json/Rectangle.json", function( data ) {
  132. $.each( data["Configs"], function(i, item){
  133. if(item["name"] == station){
  134. $.each( item["rects"], function(i, item){
  135. addRectangle1(item["id"],item["X"],item["Y"],item["W"],item["H"],item["pattern"]);
  136. });
  137. }
  138. });
  139. });
  140. }
  141. function loadStationsForm(){
  142. $.getJSON( "json/Rectangle.json", function( data ) {
  143. $.each( data["Configs"], function(i, item){
  144. $("#loadconfig").append('<option value="' + item["name"] +'">' + item["name"] +'</option>');
  145. });
  146. $("#loadconfig").on('change', function() {
  147. createRectForm(this.value);
  148. });
  149. });
  150. }
  151. function createJson(){
  152. rects = []
  153. $(".singleRect").each(function() {
  154. var pats = {}
  155. $(this).find(".patternPart3").each(function() {
  156. $(this).find('.patternPart3Input:checked').each(function() {
  157. pats[$(this).attr('name')] = true;
  158. });
  159. });
  160. $(this).find(".patternPart3Text").each(function() {
  161. pats[$(this).children("span").text()] = $(this).children("input").val();
  162. });
  163. rect = {id: $( this ).find(".RectID").text(), X:$( this ).find('input[data-class="x"]').val(), Y:$( this ).find('input[data-class="y"]').val(), W:$( this ).find('input[data-class="w"]').val(), H:$( this ).find('input[data-class="h"]').val(), pattern: pats};
  164. rects.push(rect);
  165. });
  166. allrects = {name: $("#loadconfig").val(), rects: rects};
  167. return allrects;
  168. }
  169. function createJsonCutting(){
  170. var rects = createJson();
  171. rects.rects.forEach(function(value) {
  172. pattern = value.pattern;
  173. abk.forEach(function(item){
  174. if(typeof $("#FormPattern2_Form_" + item).val() !== 'undefined' && typeof $("#FormPattern2_Form_" + item).val() !== 'undefined' && $("#FormPattern2_Form_" + item).val() !== ''){
  175. if(pattern[item]){
  176. pattern[item] = $("#FormPattern2_Form_" + item).find(":selected").text();
  177. }
  178. //console.log($("#Form_" + item).val())
  179. }
  180. });
  181. });
  182. return rects;
  183. }
  184. function submitSlices(){
  185. //createJsonCutting();
  186. console.log(JSON.stringify(createJsonCutting()));
  187. request = $.ajax({
  188. type: "POST",
  189. url: "https://centurio.work/customers/evva/was/ui/images/imageSlicer.php",
  190. data: { url: $("#sliceImg").attr("src"), savelocation: $("#savelocation").val(), alldata: JSON.stringify(createJsonCutting()) },
  191. success: function(data){
  192. console.log(data);
  193. },
  194. error: function(xhr, status, error){
  195. console.error(xhr);
  196. }
  197. });
  198. /*
  199. imageurl,
  200. savelocation,
  201. code,
  202. rectangles,
  203. */
  204. }
  205. function showJson(){
  206. copy2Clipboard(JSON.stringify(createJson()))
  207. }
  208. function copy2Clipboard(datalink) {
  209. const el = document.createElement('textarea');
  210. el.value = datalink;
  211. document.body.appendChild(el);
  212. el.select();
  213. document.execCommand('copy');
  214. document.body.removeChild(el);
  215. }
  216. $(document).ready(function() {
  217. createPatternForm();
  218. loadStationsForm();
  219. $(document).on('submit', '#sliceform', function() { //prevent page reload on form submit
  220. return false;
  221. });
  222. $("#showJson").click(function() {
  223. showJson();
  224. });
  225. $('#pattern2').text("");
  226. var clone = document.importNode(document.querySelector('#patternClone').content,true);
  227. $('[data-class=part]',clone).limitkeypress({rexp: keypressRegex()});
  228. $("#pattern2").append(clone);
  229. });