import java.io.IOException; import java.awt.*; import drop.*; import controlP5.*; SDrop drop; ControlP5 cp5; //SecondApplet gui; boolean passepartout, detail, framed, livingroom, bedroom; PGraphics renderer; PImage img, pacman; int maxImgLength = 900; String widthInput, heightInput; boolean imageLoaded, measuresKnown, detailAreaSet; String foldername, imagePath; void resetAll() { imageLoaded = false; measuresKnown = false; detailAreaSet = false; foldername = ""; imagePath = ""; } void dropEvent(DropEvent theDropEvent) { imagePath = theDropEvent.filePath(); img = loadImage(imagePath); imgw = img.width >= img.height ? maxImgLength : (int)map(img.width, 0, img.height, 0, maxImgLength); imgh = img.height >= img.width ? maxImgLength : (int)map(img.height, 0, img.width, 0, maxImgLength); foldername = day() + "." + month() + "." + year() + " " + hour() + "-" + minute() + "-" + second(); measuresKnown = false; widthInput = ""; heightInput = ""; cp5.get(Textfield.class, "width").show(); cp5.get(Textfield.class, "height").show(); cp5.get(Textfield.class, "width").setFocus(true); cp5.get(Toggle.class, "passepartout").show(); cp5.get(Toggle.class, "detail").show(); cp5.get(Toggle.class, "framed").show(); cp5.get(Toggle.class, "livingroom").show(); cp5.get(Toggle.class, "bedroom").show(); imageLoaded = true; } void settings() { size(200, 200); } void setup() { //size(200, 200); OS = osSetup(); println(OS); renderer = createGraphics(1024, 1024); detailGraphic = createGraphics(1024, 1024); pacman = loadImage(dataPath("pacman.png")); textSize(30); drop = new SDrop(this); cp5 = new ControlP5(this); Textfield wInput = cp5.addTextfield("width") .setPosition(20, 50) .setColorValue(color(0, 0, 0)) .setColorBackground(color(200, 200, 200)) .setSize(70, 30) .setFocus(true); wInput.getCaptionLabel().setColor(color(0, 0, 0)); Textfield hInput = cp5.addTextfield("height") .setPosition(110, 50) .setColorValue(color(0, 0, 0)) .setColorBackground(color(200, 200, 200)) .setSize(70, 30); hInput.getCaptionLabel().setColor(color(0, 0, 0)); Toggle renderPassepartout = cp5.addToggle("passepartout") .setColorValue(color(0, 0, 0)) .setColorBackground(color(200, 200, 200)) .setSize(20, 20) .setPosition(10, 110); renderPassepartout.getCaptionLabel().setColor(color(0, 0, 0)); Toggle renderDetail = cp5.addToggle("detail") .setColorValue(color(0, 0, 0)) .setColorBackground(color(200, 200, 200)) .setSize(20, 20) .setPosition(45, 120); renderDetail.getCaptionLabel().setColor(color(0, 0, 0)); Toggle renderPictureOnly = cp5.addToggle("framed") .setColorValue(color(0, 0, 0)) .setColorBackground(color(200, 200, 200)) .setSize(20, 20) .setPosition(80, 130); renderPictureOnly.getCaptionLabel().setColor(color(0, 0, 0)); Toggle renderLivingroom = cp5.addToggle("livingroom") .setColorValue(color(0, 0, 0)) .setColorBackground(color(200, 200, 200)) .setSize(20, 20) .setPosition(115, 140); renderLivingroom.getCaptionLabel().setColor(color(0, 0, 0)); Toggle renderBedroom = cp5.addToggle("bedroom") .setColorValue(color(0, 0, 0)) .setColorBackground(color(200, 200, 200)) .setSize(20, 20) .setPosition(150, 150); renderBedroom.getCaptionLabel().setColor(color(0, 0, 0)); cp5.get(Textfield.class, "width").hide(); cp5.get(Textfield.class, "height").hide(); cp5.get(Toggle.class, "passepartout").hide(); cp5.get(Toggle.class, "detail").hide(); cp5.get(Toggle.class, "framed").hide(); cp5.get(Toggle.class, "livingroom").hide(); cp5.get(Toggle.class, "bedroom").hide(); } int imgw, imgh; void draw() { background(255); if (imageLoaded && !measuresKnown) { text("SAG MAßE", 20, 30); widthInput = cp5.get(Textfield.class, "width").getText(); heightInput = cp5.get(Textfield.class, "height").getText(); } else if (imageLoaded && measuresKnown) { println(); renderer.noSmooth(); renderer.beginDraw(); renderer.imageMode(CENTER); //renderer.clear(); renderer.background(255); renderer.image(img, renderer.width/2, renderer.height/2, imgw, imgh); renderer.endDraw(); image(renderer, 0, 0, width, height); if (!detailAreaSet && detail) { noFill(); stroke(255, 0, 0); strokeWeight(2); rect(mouseX-detailAreaSize/5/2, mouseY-detailAreaSize/5/2, detailAreaSize/5, detailAreaSize/5); fill(0); noStroke(); text("ZEIG DETAIL", 20, 30); } if (renderNow) { renderNow = false; if (passepartout || detail || framed || livingroom || bedroom) { createOutput(dataPath("") + "/" + foldername + "/."); openRenderFolder(); } if (imageLoaded) { if (passepartout) { println("Saving passepartout image"); renderer.save(dataPath("") + "/" + foldername + "/passepartout.png"); } if (measuresKnown) { if (detail) { println("Saving detail image"); detailGraphic.noSmooth(); detailGraphic.beginDraw(); detailGraphic.image(temp, 0, 0, detailGraphic.width, detailGraphic.height); detailGraphic.save(dataPath("") + "/" + foldername + "/detail.png"); detailGraphic.endDraw(); } if (framed) { println("Rendering framed image in blender (picture only)"); String pictureonlycmd[] = {"blender -b \"" + dataPath("") + "/HEADLESS_PICTUREONLY.blend\" --python \"" + dataPath("") + "/render_pictureonly.py\" -- " + widthInput + " " + heightInput + " \"" + imagePath + "\" \"" + dataPath("") + "/" + foldername + "/pictureonly.png\""}; if (OS == "mac") { saveStrings(dataPath("") + "/pictureonly.command", pictureonlycmd); launch(dataPath("") + "/pictureonly.command"); } else if (OS == "windows") { saveStrings(dataPath("") + "/pictureonly.cmd", pictureonlycmd); launch(dataPath("") + "/pictureonly.cmd"); } } if (bedroom) { println("Rendering framed image in blender (bedroom)"); String bedroomcmd[] = {"blender -b \"" + dataPath("") + "/HEADLESS_BEDROOM.blend\" --python \"" + dataPath("") + "/render.py\" -- " + widthInput + " " + heightInput + " \"" + imagePath + "\" \"" + dataPath("") + "/" + foldername + "/bedroom.png\""}; if (OS == "mac") { saveStrings(dataPath("") + "/bedroom.command", bedroomcmd); launch(dataPath("") + "/bedroom.command"); } else if (OS == "windows") { saveStrings(dataPath("") + "/bedroom.cmd", bedroomcmd); launch(dataPath("") + "/bedroom.cmd"); } } if (livingroom) { println("Rendering framed image in blender (livingroom)"); String livingroomcmd[] = {"blender -b \"" + dataPath("") + "/HEADLESS_LIVINGROOM.blend\" --python \"" + dataPath("") + "/render.py\" -- " + widthInput + " " + heightInput + " \"" + imagePath + "\" \"" + dataPath("") + "/" + foldername + "/livingroom.png\""}; if (OS == "mac") { saveStrings(dataPath("") + "/livingroom.command", livingroomcmd); launch(dataPath("") + "/livingroom.command"); } else if (OS == "windows") { saveStrings(dataPath("") + "/livingroom.cmd", livingroomcmd); launch(dataPath("") + "/livingroom.cmd"); } } } } println("done"); resetAll(); } } else { image(pacman, 0, 0, width, height); fill(0); text("GIB BILD", 20, 30); } } int detailAreaSize = 256; int detailAreaX, detailAreaY; int imgClickX, imgClickY, imgBiggerFactor, imgDetailSize; PImage temp; PGraphics detailGraphic; void setDetailArea() { detailAreaSet = true; println("rendering detailed view"); imgClickX = (int)map(map(mouseX, 0, width, 0, 1024), 512-imgw/2, 512+imgw/2, 0, img.width); imgClickY = (int)map(map(mouseY, 0, height, 0, 1024), 512-imgh/2, 512+imgh/2, 0, img.height); imgBiggerFactor = max(img.width, img.height)/max(imgw, imgh); imgDetailSize = detailAreaSize * imgBiggerFactor; temp = img.get(imgClickX - imgDetailSize/2, imgClickY - imgDetailSize/2, imgDetailSize, imgDetailSize); } String OS; void mouseClicked() { if (mouseButton == LEFT && imageLoaded && measuresKnown && !detailAreaSet && detail) { setDetailArea(); renderNow = true; } } boolean renderNow; void openRenderFolder() { String folderpath = sketchPath("") + "data/" + foldername + "/"; Desktop desktop = Desktop.getDesktop(); File dirToOpen = null; try { dirToOpen = new File(folderpath); desktop.open(dirToOpen); } catch (IOException iae) { System.out.println("File Not Found"); } } String osSetup () { String os = System.getProperty("os.name"); if (os.contains("Windows")) { return "windows"; } else if (os.contains("Mac")) { return "mac"; } else if (os.contains("Linux")) { return "linux"; } else { return "other"; } } boolean focusHeight; void keyPressed() { if (key == ENTER) { println(widthInput, heightInput); if (imageLoaded && !measuresKnown && widthInput != "" && heightInput != "") { if (int(widthInput) < 10 || int(heightInput) < 10 || int(widthInput) > 120 || int(heightInput) > 120) { println("Nope"); } else { measuresKnown = true; cp5.get(Textfield.class, "width").hide(); cp5.get(Textfield.class, "height").hide(); cp5.get(Toggle.class, "passepartout").hide(); cp5.get(Toggle.class, "detail").hide(); cp5.get(Toggle.class, "framed").hide(); cp5.get(Toggle.class, "livingroom").hide(); cp5.get(Toggle.class, "bedroom").hide(); if (!detail) { renderNow = true; } } } } if (key == TAB) { if (!measuresKnown && imageLoaded) { if (!focusHeight) { cp5.get(Textfield.class, "height").setFocus(true); cp5.get(Textfield.class, "width").setFocus(false); } else { cp5.get(Textfield.class, "height").setFocus(false); cp5.get(Textfield.class, "width").setFocus(true); } focusHeight = !focusHeight; } } } //working: blender -b "HEADLESS.blend" --python "render.py" -- 80 80 "/Users/giers/Documents/Render Image for Webshop/55.png" "/Users/giers/Documents/Render Image for Webshop/"