diff --git a/DisplayMachine.pde b/DisplayMachine.pde index a2e5424..b56a368 100644 --- a/DisplayMachine.pde +++ b/DisplayMachine.pde @@ -346,30 +346,23 @@ class DisplayMachine extends Machine } } - public void drawForWebcam() + public void drawForTrace() { // work out the scaling factor. noStroke(); // draw machine outline -// liveImage = webcam_buildLiveImage(); +// liveImage = trace_buildLiveImage(); // draw actual image - if (displayingImage && imageIsReady() && webcamShape != null) - { - processedLiveImage = webcam_processImageForTrace(getImage()); - - colourSeparations = webcam_buildSeps(processedLiveImage, sepKeyColour); - webcamShape = webcam_traceImage(colourSeparations); - } // if (drawingLiveVideo) // { // displayLiveVideo(); // } - if (drawingWebcamShape && webcamShape != null) + if (drawingTraceShape && traceShape != null) { - displayWebcamShape(); + displaytraceShape(); } else { @@ -377,74 +370,74 @@ class DisplayMachine extends Machine } } - public void displayLiveVideo() - { - // draw actual image, maximum size - if (processedLiveImage != null) - { - // origin - top left of the corner - float ox = getPanel(PANEL_NAME_WEBCAM).getOutline().getRight()+7; - float oy = getPanel(PANEL_NAME_GENERAL).getOutline().getTop(); - - // calculate size to display at. - float aspectRatio = (rotateWebcamImage) ? 480.0/640.0 : 640.0/480.0; // rotated, remember - float h = height - getPanel(PANEL_NAME_GENERAL).getOutline().getTop() -10; - float w = h * (480.0/640.0); -// println("height: " + h + ", width: " + w); -// println("origin x: " + ox + ", y: " + oy); - - if (rotateWebcamImage) - { - float t = h; - h = w; - w = t; - } - - //stroke(255); - rect(ox,oy,w,h); - - tint(255, getImageTransparency()); - if (rotateWebcamImage) - { - translate(ox, oy); - rotate(radians(270)); - image(processedLiveImage, -w, 0, w, h); - image(liveImage, -w, (w-(w/4))+10, w/4, h/4); -// stroke(0,255,0); -// ellipse(0,0,80,40); -// stroke(0,0,255); -// ellipse(-w,0,80,40); - rotate(radians(-270)); - translate(-ox, -oy); - } - else - { - translate(ox, oy); - image(processedLiveImage, 0, 0, h, w); - image(liveImage, h-(h/4), w+10, h/4, w/4); - translate(-ox, -oy); - } - noTint(); - noFill(); - } - } +// public void displayLiveVideo() +// { +// // draw actual image, maximum size +// if (processedLiveImage != null) +// { +// // origin - top left of the corner +// float ox = getPanel(PANEL_NAME_WEBCAM).getOutline().getRight()+7; +// float oy = getPanel(PANEL_NAME_GENERAL).getOutline().getTop(); +// +// // calculate size to display at. +// float aspectRatio = (rotateWebcamImage) ? 480.0/640.0 : 640.0/480.0; // rotated, remember +// float h = height - getPanel(PANEL_NAME_GENERAL).getOutline().getTop() -10; +// float w = h * (480.0/640.0); +//// println("height: " + h + ", width: " + w); +//// println("origin x: " + ox + ", y: " + oy); +// +// if (rotateWebcamImage) +// { +// float t = h; +// h = w; +// w = t; +// } +// +// //stroke(255); +// rect(ox,oy,w,h); +// +// tint(255, getImageTransparency()); +// if (rotateWebcamImage) +// { +// translate(ox, oy); +// rotate(radians(270)); +// image(processedLiveImage, -w, 0, w, h); +// image(liveImage, -w, (w-(w/4))+10, w/4, h/4); +//// stroke(0,255,0); +//// ellipse(0,0,80,40); +//// stroke(0,0,255); +//// ellipse(-w,0,80,40); +// rotate(radians(-270)); +// translate(-ox, -oy); +// } +// else +// { +// translate(ox, oy); +// image(processedLiveImage, 0, 0, h, w); +// image(liveImage, h-(h/4), w+10, h/4, w/4); +// translate(-ox, -oy); +// } +// noTint(); +// noFill(); +// } +// } - public void displayWebcamShape() + public void displaytraceShape() { strokeWeight(1); if (captureShape != null) { - //displayWebcamShapeAtFullSize(webcamShape, false, color(150,150,150)); - displayWebcamShapeAtFullSize(captureShape, true, color(0,0,0)); + //displaytraceShapeAtFullSize(traceShape, false, color(150,150,150)); + displaytraceShapeAtFullSize(captureShape, true, color(0,0,0)); } else { - displayWebcamShapeAtFullSize(webcamShape, false, color(255,255,255)); + displaytraceShapeAtFullSize(traceShape, false, color(255,255,255)); } } - public void displayWebcamShapeAtFullSize(RShape vec, boolean illustrateSequence, Integer colour) + public void displaytraceShapeAtFullSize(RShape vec, boolean illustrateSequence, Integer colour) { RG.ignoreStyles(); // work out scaling to make it full size on the screen @@ -454,7 +447,7 @@ class DisplayMachine extends Machine float scaler = h / vec.getWidth(); if (rotateWebcamImage) scaler = h / vec.getHeight(); - PVector position = new PVector(getPanel(PANEL_NAME_WEBCAM).getOutline().getRight()+7, getPanel(PANEL_NAME_GENERAL).getOutline().getTop()); + PVector position = new PVector(getPanel(PANEL_NAME_TRACE).getOutline().getRight()+7, getPanel(PANEL_NAME_GENERAL).getOutline().getTop()); noFill(); RPoint[][] pointPaths = vec.getPointsInPaths(); diff --git a/Machine.pde b/Machine.pde index 04ca5da..1a0f008 100644 --- a/Machine.pde +++ b/Machine.pde @@ -525,6 +525,7 @@ class Machine { this.imageBitmap = loadImage(filename); this.imageFilename = filename; + trace_initTrace(this.imageBitmap); } catch (Exception e) { diff --git a/controlsActions.pde b/controlsActions.pde index ace3a09..ebcc4d4 100644 --- a/controlsActions.pde +++ b/controlsActions.pde @@ -114,19 +114,31 @@ void button_mode_sendPenliftRangePersist() void numberbox_mode_liveBlurValue(int value) { - blurValue = value; + if (value != blurValue) + { + blurValue = value; + retraceShape = true; + } } void numberbox_mode_liveSimplificationValue(int value) { - liveSimplification = value; + if (value != liveSimplification) + { + liveSimplification = value; + retraceShape = true; + } } void numberbox_mode_livePosteriseValue(int value) { - posterizeValue = value; + if (value != posterizeValue) + { + posterizeValue = value; + retraceShape = true; + } } void button_mode_liveCaptureFromLive() { - webcam_captureCurrentImage(); + trace_captureCurrentImage(); } void button_mode_liveClearCapture() { @@ -148,20 +160,20 @@ void button_mode_liveConfirmDraw() confirmedDraw = true; // work out scaling and position - float scaling = getDisplayMachine().inMM(getDisplayMachine().getPictureFrame().getWidth()) / captureShape.getWidth(); - PVector position = new PVector(getDisplayMachine().inMM(getDisplayMachine().getPictureFrame().getPosition().x), - getDisplayMachine().inMM(getDisplayMachine().getPictureFrame().getPosition().y)); + float scaling = getDisplayMachine().inMM(getDisplayMachine().getImageFrame().getWidth()) / captureShape.getWidth(); + PVector position = new PVector(getDisplayMachine().inMM(getDisplayMachine().getImageFrame().getPosition().x), + getDisplayMachine().inMM(getDisplayMachine().getImageFrame().getPosition().y)); sendVectorShapes(captureShape, scaling, position, PATH_SORT_CENTRE_FIRST); button_mode_penUp(); // save shape as SVG - webcam_saveShape(captureShape); + trace_saveShape(captureShape); } } void toggle_mode_showWebcamRawVideo(boolean flag) { - drawingLiveVideo = flag; +// drawingLiveVideo = flag; } void toggle_mode_flipWebcam(boolean flag) { diff --git a/controlsSetup.pde b/controlsSetup.pde index 164363b..412046e 100644 --- a/controlsSetup.pde +++ b/controlsSetup.pde @@ -130,15 +130,15 @@ Map buildPanels() rovingPanel.setControlSizes(buildControlSizesForPanel(rovingPanel)); panels.put(PANEL_NAME_ROVING, rovingPanel); - Panel webcamPanel = new Panel(PANEL_NAME_WEBCAM, panelOutline); - webcamPanel.setOutlineColour(color(200,200,200)); + Panel tracePanel = new Panel(PANEL_NAME_TRACE, panelOutline); + tracePanel.setOutlineColour(color(200,200,200)); // get controls - webcamPanel.setResizable(true); - webcamPanel.setControls(getControlsForPanels().get(PANEL_NAME_WEBCAM)); + tracePanel.setResizable(true); + tracePanel.setControls(getControlsForPanels().get(PANEL_NAME_TRACE)); // get control positions - webcamPanel.setControlPositions(buildControlPositionsForPanel(webcamPanel)); - webcamPanel.setControlSizes(buildControlSizesForPanel(webcamPanel)); - panels.put(PANEL_NAME_WEBCAM, webcamPanel); + tracePanel.setControlPositions(buildControlPositionsForPanel(tracePanel)); + tracePanel.setControlSizes(buildControlSizesForPanel(tracePanel)); + panels.put(PANEL_NAME_TRACE, tracePanel); Panel detailsPanel = new Panel(PANEL_NAME_DETAILS, panelOutline); detailsPanel.setOutlineColour(color(200, 200, 200)); @@ -538,7 +538,7 @@ Map initialiseToggleValues(Map map) else if (MODE_SHOW_WEBCAM_RAW_VIDEO.equals(key)) { Toggle t = (Toggle) map.get(key); - t.setValue((drawingLiveVideo) ? 1 : 0); +// t.setValue((drawingLiveVideo) ? 1 : 0); } else if (MODE_FLIP_WEBCAM_INPUT.equals(key)) { @@ -635,7 +635,7 @@ Map> buildControlsForPanels() map.put(PANEL_NAME_DETAILS, getControllersForControllerNames(getControlNamesForDetailPanel())); map.put(PANEL_NAME_QUEUE, getControllersForControllerNames(getControlNamesForQueuePanel())); map.put(PANEL_NAME_GENERAL, getControllersForControllerNames(getControlNamesForGeneralPanel())); - map.put(PANEL_NAME_WEBCAM, getControllersForControllerNames(getControlNamesForWebcamPanel())); + map.put(PANEL_NAME_TRACE, getControllersForControllerNames(getControlNamesForTracePanel())); return map; } @@ -724,7 +724,7 @@ List getControlNamesForRovingPanel() return controlNames; } -List getControlNamesForWebcamPanel() +List getControlNamesForTracePanel() { List controlNames = new ArrayList(); controlNames.add(MODE_LIVE_BLUR_VALUE); @@ -736,9 +736,9 @@ List getControlNamesForWebcamPanel() controlNames.add(MODE_LIVE_CONFIRM_DRAW); // controlNames.add(MODE_VECTOR_PATH_LENGTH_HIGHPASS_CUTOFF); - controlNames.add(MODE_SHOW_WEBCAM_RAW_VIDEO); - controlNames.add(MODE_FLIP_WEBCAM_INPUT); - controlNames.add(MODE_ROTATE_WEBCAM_INPUT); +// controlNames.add(MODE_SHOW_WEBCAM_RAW_VIDEO); +// controlNames.add(MODE_FLIP_WEBCAM_INPUT); +// controlNames.add(MODE_ROTATE_WEBCAM_INPUT); return controlNames; } diff --git a/polargraphcontroller.pde b/polargraphcontroller.pde index 3544d82..f22712e 100644 --- a/polargraphcontroller.pde +++ b/polargraphcontroller.pde @@ -406,8 +406,8 @@ public static final String TAB_NAME_DETAILS = "tab_details"; public static final String TAB_LABEL_DETAILS = "Setup"; public static final String TAB_NAME_QUEUE = "tab_queue"; public static final String TAB_LABEL_QUEUE = "Queue"; -public static final String TAB_NAME_WEBCAM = "tab_webcam"; -public static final String TAB_LABEL_WEBCAM = "Camera"; +public static final String TAB_NAME_TRACE = "tab_trace"; +public static final String TAB_LABEL_TRACE = "Trace"; // Page states public String currentTab = TAB_NAME_INPUT; @@ -417,7 +417,7 @@ public static final String PANEL_NAME_INPUT = "panel_input"; public static final String PANEL_NAME_ROVING = "panel_roving"; public static final String PANEL_NAME_DETAILS = "panel_details"; public static final String PANEL_NAME_QUEUE = "panel_queue"; -public static final String PANEL_NAME_WEBCAM = "panel_webcam"; +public static final String PANEL_NAME_TRACE = "panel_trace"; public static final String PANEL_NAME_GENERAL = "panel_general"; @@ -460,9 +460,8 @@ boolean overwriteExistingStoreFile = true; public static Console console; public boolean useWindowedConsole = false; -static boolean webcamEnabled = false; -static boolean drawingLiveVideo = false; -static boolean drawingWebcamShape = true; +static boolean drawingTraceShape = true; +static boolean retraceShape = true; static boolean flipWebcamImage = false; static boolean rotateWebcamImage = false; static boolean confirmedDraw = false; @@ -488,7 +487,7 @@ int posterizeValue = 5; int sepKeyColour = color(0, 0, 255); Map colourSeparations = null; -RShape webcamShape = null; +RShape traceShape = null; RShape captureShape = null; String shapeSavePath = "../../savedcaptures/"; @@ -576,7 +575,6 @@ void setup() addEventListeners(); //gamepad_init(); - webcam_initCamera(); } void addEventListeners() { @@ -638,9 +636,9 @@ void draw() { drawRovingPage(); } - else if (getCurrentTab() == TAB_NAME_WEBCAM) + else if (getCurrentTab() == TAB_NAME_TRACE) { - drawWebcamPage(); + drawTracePage(); } else { @@ -817,7 +815,7 @@ void drawRovingPage() showCommandQueue((int) getDisplayMachine().getOutline().getRight()+6, 20); } -void drawWebcamPage() +void drawTracePage() { strokeWeight(1); background(100); @@ -826,26 +824,30 @@ void drawWebcamPage() strokeWeight(3); stroke(150); noFill(); - if (webcamEnabled) + getDisplayMachine().drawForTrace(); + if (displayingImage && getDisplayMachine().imageIsReady() && retraceShape) { - getDisplayMachine().drawForWebcam(); - stroke(255, 0, 0); - - for (Panel panel : getPanelsForTab(TAB_NAME_WEBCAM)) - { - panel.draw(); - } + processedLiveImage = trace_processImageForTrace(getDisplayMachine().getImage()); + colourSeparations = trace_buildSeps(processedLiveImage, sepKeyColour); + traceShape = trace_traceImage(colourSeparations); + drawingTraceShape = true; } - else + + stroke(255, 0, 0); + + for (Panel panel : getPanelsForTab(TAB_NAME_TRACE)) { - text("No camera attached.", 250, 100); + panel.draw(); } + text(propertiesFilename, getPanel(PANEL_NAME_GENERAL).getOutline().getLeft(), getPanel(PANEL_NAME_GENERAL).getOutline().getTop()-7); + if (displayingInfoTextOnInputPage) showText(250,45); drawStatusText((int)statusTextPosition.x, (int)statusTextPosition.y); showCommandQueue((int) width-200, 20); + // processGamepadInput(); // // if (displayGamepadOverlay) diff --git a/tabSetup.pde b/tabSetup.pde index 56194ae..67f6ac6 100644 --- a/tabSetup.pde +++ b/tabSetup.pde @@ -49,9 +49,9 @@ Map> buildPanelsForTabs() rovingPanels.add(getPanel(PANEL_NAME_ROVING)); rovingPanels.add(getPanel(PANEL_NAME_GENERAL)); - Set webcamPanels = new HashSet(2); - webcamPanels.add(getPanel(PANEL_NAME_WEBCAM)); - webcamPanels.add(getPanel(PANEL_NAME_WEBCAM)); + Set tracePanels = new HashSet(2); + tracePanels.add(getPanel(PANEL_NAME_TRACE)); + tracePanels.add(getPanel(PANEL_NAME_GENERAL)); Set detailsPanels = new HashSet(2); detailsPanels.add(getPanel(PANEL_NAME_DETAILS)); @@ -63,7 +63,7 @@ Map> buildPanelsForTabs() map.put(TAB_NAME_INPUT, inputPanels); map.put(TAB_NAME_ROVING, rovingPanels); - map.put(TAB_NAME_WEBCAM, webcamPanels); + map.put(TAB_NAME_TRACE, tracePanels); map.put(TAB_NAME_DETAILS, detailsPanels); map.put(TAB_NAME_QUEUE, queuePanels); @@ -75,7 +75,7 @@ List buildTabNames() List list = new ArrayList(5); list.add(TAB_NAME_INPUT); list.add(TAB_NAME_ROVING); - list.add(TAB_NAME_WEBCAM); + list.add(TAB_NAME_TRACE); list.add(TAB_NAME_DETAILS); list.add(TAB_NAME_QUEUE); return list; @@ -95,9 +95,9 @@ void initTabs() cp5.tab(TAB_NAME_ROVING).activateEvent(true); cp5.tab(TAB_NAME_ROVING).setId(3); - cp5.tab(TAB_NAME_WEBCAM).setLabel(TAB_LABEL_WEBCAM); - cp5.tab(TAB_NAME_WEBCAM).activateEvent(true); - cp5.tab(TAB_NAME_WEBCAM).setId(4); + cp5.tab(TAB_NAME_TRACE).setLabel(TAB_LABEL_TRACE); + cp5.tab(TAB_NAME_TRACE).activateEvent(true); + cp5.tab(TAB_NAME_TRACE).setId(4); cp5.tab(TAB_NAME_QUEUE).setLabel(TAB_LABEL_QUEUE); cp5.tab(TAB_NAME_QUEUE).activateEvent(true); @@ -109,7 +109,7 @@ public Set buildPanelNames() Set set = new HashSet(6); set.add(PANEL_NAME_INPUT); set.add(PANEL_NAME_ROVING); - set.add(PANEL_NAME_WEBCAM); + set.add(PANEL_NAME_TRACE); set.add(PANEL_NAME_DETAILS); set.add(PANEL_NAME_QUEUE); set.add(PANEL_NAME_GENERAL); diff --git a/webcam.pde b/trace.pde similarity index 81% rename from webcam.pde rename to trace.pde index 750a122..9675fb3 100644 --- a/webcam.pde +++ b/trace.pde @@ -1,17 +1,18 @@ -public void webcam_initCamera() +public void trace_initTrace(PImage img) { // dummy initCamera(), does nothing - webcamEnabled = true; - blob_detector = new BlobDetector( 640, 480); + // tracetraceEnabled = true; + img.loadPixels(); + blob_detector = new BlobDetector(img.width, img.height); blob_detector.setResolution(1); blob_detector.computeContours(true); blob_detector.computeBlobPixels(true); - blob_detector.setMinMaxPixels(10*10, 640*480); + blob_detector.setMinMaxPixels(10*10, img.width * img.height); blob_detector.setBLOBable(new BLOBable_blueBlobs(liveImage)); } -public void webcam_initCameraProcCam() +public void trace_initCameraProcCam() { // try // { @@ -19,17 +20,17 @@ public void webcam_initCameraProcCam() // if (cameras.length > 0) { // liveCamera = new Capture(this, 640, 480, cameras[0]); // //liveCamera.start(); -// webcamEnabled = true; +// traceEnabled = true; // } // } // catch (Exception e) // { // println("Exception occurred trying to look for attached webcams. Webcam will not be used. " + e.getMessage()); -// webcamEnabled = false; +// traceEnabled = false; // } } -//public PImage webcam_buildLiveImage() +//public PImage trace_buildLiveImage() //{ // //liveCamera.start(); // PImage pimg = createImage(640, 480, RGB); @@ -69,7 +70,7 @@ public void webcam_initCameraProcCam() // return pimg; //} -public PImage webcam_processImageForTrace(PImage in) +public PImage trace_processImageForTrace(PImage in) { PImage out = createImage(in.width, in.height, RGB); out.loadPixels(); @@ -83,7 +84,7 @@ public PImage webcam_processImageForTrace(PImage in) return out; } -public RShape webcam_traceImage(Map seps) +public RShape trace_traceImage(Map seps) { RShape allShapes = null; if (seps != null) @@ -119,7 +120,7 @@ public RShape webcam_traceImage(Map seps) for (int simple_cnt = 0; simple_cnt < liveSimplification; simple_cnt++) { contour_simple= Polyline.SIMPLIFY(contour_simple, 2, simple_cnt); } - RShape shp = webcam_convertDiewaldToRShape(contour_simple); + RShape shp = trace_convertDiewaldToRShape(contour_simple); if (shp != null) { shapeNo++; @@ -129,7 +130,7 @@ public RShape webcam_traceImage(Map seps) } else { - RShape shp = webcam_convertDiewaldToRShape(contour.getPixels()); + RShape shp = trace_convertDiewaldToRShape(contour.getPixels()); if (shp != null) allShapes.addChild(shp); } @@ -148,7 +149,7 @@ public RShape webcam_traceImage(Map seps) return allShapes; } -Map webcam_buildSeps(PImage img, Integer keyColour) +Map trace_buildSeps(PImage img, Integer keyColour) { // create separations // pull out number of colours @@ -176,7 +177,7 @@ Map webcam_buildSeps(PImage img, Integer keyColour) return seps; } -RShape webcam_convertDiewaldToRShape(List points) +RShape trace_convertDiewaldToRShape(List points) { RShape shp = null; if (points.size() > 2) { @@ -193,25 +194,23 @@ RShape webcam_convertDiewaldToRShape(List points) } -public void webcam_captureCurrentImage(PImage inImage) +public void trace_captureCurrentImage(PImage inImage) { - processedCapturedImage = webcam_processImageForTrace(inImage); - colourSeparations = webcam_buildSeps(processedCapturedImage, sepKeyColour); - captureShape = webcam_traceImage(colourSeparations); + captureShape = traceShape; } -public void webcam_captureCurrentImage() +public void trace_captureCurrentImage() { -// capturedImage = webcam_buildLiveImage(); -// webcam_captureCurrentImage(capturedImage); +// capturedImage = trace_buildLiveImage(); + trace_captureCurrentImage(getDisplayMachine().getImage()); } -public void webcam_processLoadedImage() +public void trace_processLoadedImage() { - webcam_captureCurrentImage(getDisplayMachine().getImage()); + trace_captureCurrentImage(getDisplayMachine().getImage()); } -public void webcam_saveShape(RShape sh) +public void trace_saveShape(RShape sh) { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss"); String dateCode = sdf.format(new java.util.Date());