class Editor extends Page { HorizontalMenu menu; HorizontalMenu pocMenu, logMenu; PressVerticalMenu typeMenu, vTypeMenu; VerticalMenu sizeMenu, vSizeMenu; int overX; int overY; int prevX; int prevY; int state; int area; int type; int vType; int vArea; int[][] temp; void activate() { String[] menuItems = {"Reset", "Wczytaj", "Zapisz"}; String[] sizeItems = {"+", "-"}; String[] typeItems = {"okrąg", "kwadrat"}; String[] pocItems = {"ERO", "SKIZ", "SEG","DIL"}; String[] logItems = {"AND", "OR", "NOT", "SAVE", "LOAD"}; menu = new HorizontalMenu(20, 620, 300, 650, menuItems); sizeMenu = new VerticalMenu(385, 640, 415, 670, sizeItems); typeMenu = new PressVerticalMenu(310, 635, 380, 675, typeItems); pocMenu = new HorizontalMenu(20, 655, 300, 685, pocItems); logMenu = new HorizontalMenu(20, 690, 300, 720, logItems); vSizeMenu = new VerticalMenu(530, 640, 560, 670, sizeItems); vTypeMenu = new PressVerticalMenu(455, 635, 525, 675, typeItems); temp = new int[60][60]; typeMenu.select(1); vTypeMenu.select(0); state = -1; type = 1; vArea = 0; area = 1; vType = 0; } void frame() { background(255); rectMode(CORNER); displayFull(); //displayGrid(); //displayMap(); findOver(); if ((state > -1) && (overX > -1)) fakeDrag(); menu.display(); sizeMenu.display(); typeMenu.display(); pocMenu.display(); logMenu.display(); vTypeMenu.display(); vSizeMenu.display(); textAlign(TOP, LEFT); textSize(15); text(area, 430, 660); text(vArea, 575, 660); text("Element str.", 310, 630); text("Pędzel", 455, 630); } void displayGrid() { stroke(200); for (int i = 0; i <= 60; i++) { line(10 + i * 10, 10, 10 + i * 10, 610); line(10, 10 + i * 10, 610, 10 + i * 10); } } void displayMap() { for (int i = 0; i < 60; i++) for (int j = 0; j <60; j++) if (mapa[i][j] == 1) { fill(0,255,0); rect(10 + i * 10, 10 + j * 10, 10, 10); } } void displayTag() { for (int i = 0; i < 60; i++) for (int j = 0; j <60; j++) if (tag[i][j] >= 1) { fill(tag[i][j] * 10,0,0); rect(10 + i * 10, 10 + j * 10, 10, 10); } } void displayFull() { stroke(200); for (int i = 0; i < 60; i++) { line(10 + i * 10, 10, 10 + i * 10, 610); line(10, 10 + i * 10, 610, 10 + i * 10); for (int j = 0; j < 60; j++) { if (mapa[i][j] == 1) { fill(0,255,0); rect(10 + i * 10, 10 + j * 10, 10, 10); } if (tag[i][j] > 0) { //fill(int(float(tag[i][j])/float(maxTag)*200)); //rect(10 + i * 10, 10 + j * 10, 10, 10); fill(0); textAlign(TOP, LEFT); textSize(8); text(tag[i][j], 10 + i * 10, 20 + j * 10); } } } line(610, 10, 610, 610); line(10, 610, 610, 610); } void reset() { for (int i = 0; i < 60; i++) for (int j = 0; j <60; j++) { mapa[i][j] = 0; tag[i][j] = 0; } } void zapisz() { String savePath = selectOutput(); // Opens file chooser if (savePath == null) { // If a file was not selected println("No output file was selected..."); } else { // If a file was selected, print path to folder String[] lines = new String[60]; for (int i = 0; i < 60; i++) { lines[i] = ""; for (int j = 0; j < 60; j++) { lines[i] = lines[i] + mapa[i][j]; } } saveStrings(savePath, lines); } } /* String[] lines = new String[graph.lng+2]; lines[0]=nf(graph.first,0); lines[1]=nf(graph.lng,0); for (int i = 0; i < graph.lng; i++) lines[2+i] = graph.vertices[i].x + "\t" + graph.vertices[i].y; saveStrings(path, lines);*/ void wczytaj() { String loadPath = selectInput(); // Opens file chooser if (loadPath == null) { // If a file was not selected println("No input file was selected..."); } else { reset(); String[] lines = loadStrings(loadPath); for (int i = 0; i < 60; i++) { for (int j = 0; j < 60; j++) { mapa[i][j] = int(lines[i].charAt(j)) - 48; } } } } // If a file was selected, print path to folder /* String[] lines = loadStrings(path); if (lines!=null) { graph.first = int(lines[0]); graph.lng = int(lines[1]); for (int i = 2; i < 2+graph.lng; ++i) { String[] pieces = split(lines[i], '\t'); graph.vertices[i-2] = new PVector(float(pieces[0]),float(pieces[1])); } makeWeights(); }*/ void addNew() { Otoczenie el = chooseType(vArea,overX, overY, vType); for (int i = 0; i < el.it; ++i) { mapa[el.x[i]][el.y[i]] = 1; tag[el.x[i]][el.y[i]] = 0; } } void delete() { Otoczenie el = chooseType(vArea, overX, overY, vType); for (int i = 0; i < el.it; ++i) { mapa[el.x[i]][el.y[i]] = 0; tag[el.x[i]][el.y[i]] = 0; } } void press() { if (mouseButton == LEFT) state = 1; else if (mouseButton == RIGHT) state = 0; if (overX >= 0) { if (mouseButton == LEFT) { addNew(); } else if (mouseButton == RIGHT) { delete(); } } if (menu.over()) { switch (menu.which()) { case 0: reset(); break; case 1: wczytaj(); break; case 2: zapisz(); break; } } if (sizeMenu.over()) { switch (sizeMenu.which()) { case 0: area = zoom(area); break; case 1: area =zoomOut(area); break; } } if (typeMenu.over()) { switch (typeMenu.which()) { case 0: typeMenu.select(0); type = 0; break; case 1: typeMenu.select(1); type = 1; break; } } if (vSizeMenu.over()) { switch (vSizeMenu.which()) { case 0: vArea = zoom(vArea); break; case 1: vArea = zoomOut(vArea); break; } } if (vTypeMenu.over()) { switch (vTypeMenu.which()) { case 0: vTypeMenu.select(0); vType = 0; break; case 1: vTypeMenu.select(1); vType = 1; break; } } if (pocMenu.over()) { switch (pocMenu.which()) { case 0: mapa = maxErose(mapa, tag); break; case 1: mapa = separate(mapa, tag); break; case 2: maxTag = segment(mapa,tag); break; case 3: mapa = maxDilate(mapa,tag); break; } } if (logMenu.over()) { switch (logMenu.which()) { case 0: mapa = and(mapa, temp); break; case 1: mapa = or(mapa, temp); break; case 2: mapa = not(mapa); break; case 3: for (int i = 0; i < mapa.length; ++i) arrayCopy(mapa[i],temp[i]); break; case 4: for (int i = 0; i < mapa.length; ++i) arrayCopy(temp[i],mapa[i]); break; } } /* if (over!=-1) { if (mouseButton == LEFT) locked = over; else if (mouseButton == RIGHT) { int tmp = over; over = -1; remove(tmp); } else if (mouseButton == CENTER) graph.first = over; } else if (!collide()) { if (mouseButton == LEFT) add(mouseX-this.x,mouseY-this.y); }*/ } void findOver() { if ((mouseX > 10) && (mouseX < 610) && (mouseY > 10) && (mouseY < 610)) { overX = (mouseX - 10) / 10; overY = (mouseY - 10) / 10; Otoczenie el = chooseType(vArea, overX, overY, vType); textAlign(TOP, LEFT); textSize(8); fill(0); text("("+overX+";"+overY+")",560,620); colorOver(overX,overY); for (int i = 0; i < el.it; ++i) { colorOver(el.x[i], el.y[i]); } } else { overX = -1; overY = -1; } } void colorOver(int i, int j) { if (mapa[i][j] == 0) fill(0,255,0); else fill(255,0,0); rect(10 + i * 10, 10 + j * 10, 10, 10); } int zoom(int x) { if (x < 29) x++; return x; } int zoomOut(int x) { if (x > 0) x--; return x; } void fakeDrag() { if ((prevX != overX) || (prevY != overY)) { prevX = overX; prevY = overY; switch (state) { case 0: delete(); break; case 1: addNew(); break; } } } void release() { state = -1; } }