From dba8bb5b2a06efa59893c5c231e849aae81d08e6 Mon Sep 17 00:00:00 2001 From: Sandy Noble Date: Sun, 17 Jan 2016 22:37:24 +0000 Subject: [PATCH] Added the posterization feature into the density preview --- DisplayMachine.pde | 19 ++++++++++++------- DrawPixelsWindow.pde | 2 +- controlsActions.pde | 7 +++++++ controlsSetup.pde | 13 +++++++++++++ drawing.pde | 14 +++++++------- polargraphcontroller.pde | 14 +++++++++++--- 6 files changed, 51 insertions(+), 18 deletions(-) diff --git a/DisplayMachine.pde b/DisplayMachine.pde index a0d9582..2b77d16 100644 --- a/DisplayMachine.pde +++ b/DisplayMachine.pde @@ -535,7 +535,7 @@ class DisplayMachine extends Machine p = scaleToScreen(p); stroke(strokeColour); vertex(p.x, p.y); - //ellipse(p.x, p.y, 3, 3); +// ellipse(p.x, p.y, 3, 3); } else { @@ -719,7 +719,12 @@ class DisplayMachine extends Machine // scale em, danno. PVector scaledPos = scaleToScreen(cartesianPos); noStroke(); - fill(cartesianPos.z); + + // Posterize the density value + int reduced = int(map(cartesianPos.z, 1, 255, 1, densityPreviewPosterize)+0.5); + int brightness = int(map(reduced, 1, densityPreviewPosterize, 1, 255)); + + fill(brightness); switch (getDensityPreviewStyle()) { case DENSITY_PREVIEW_ROUND: @@ -727,20 +732,20 @@ class DisplayMachine extends Machine break; case DENSITY_PREVIEW_ROUND_SIZE: fill(0); - previewRoundPixel(scaledPos, map(cartesianPos.z, 1, 255, pixelSize, 1)); + previewRoundPixel(scaledPos, map(brightness, 1, densityPreviewPosterize, pixelSize, 1)); break; case DENSITY_PREVIEW_DIAMOND: - previewDiamondPixel(scaledPos, pixelSize, pixelSize, cartesianPos.z); + previewDiamondPixel(scaledPos, pixelSize, pixelSize, brightness); break; case DENSITY_PREVIEW_NATIVE: - previewNativePixel(scaledPos, pixelSize, cartesianPos.z); + previewNativePixel(scaledPos, pixelSize, brightness); break; case DENSITY_PREVIEW_NATIVE_SIZE: - previewNativePixel(scaledPos, map(cartesianPos.z, 1, 255, pixelSize, 1), 50); + previewNativePixel(scaledPos, map(brightness, 1, densityPreviewPosterize, pixelSize, 1), 50); break; case DENSITY_PREVIEW_NATIVE_ARC: previewRoundPixel(scaledPos, pixelSize*0.8); - previewNativeArcPixel(scaledPos, pixelSize, cartesianPos.z); + previewNativeArcPixel(scaledPos, pixelSize, brightness); break; default: previewRoundPixel(scaledPos, pixelSize); diff --git a/DrawPixelsWindow.pde b/DrawPixelsWindow.pde index 0b96807..dd7ce6c 100644 --- a/DrawPixelsWindow.pde +++ b/DrawPixelsWindow.pde @@ -21,7 +21,7 @@ ControlFrameSimple addDrawPixelsControlFrame(String theName, int theWidth, int t p.dispose(); f.dispose(); } - } + } ); f.setResizable( true ); f.setVisible( true ); diff --git a/controlsActions.pde b/controlsActions.pde index 87a241a..de5911a 100644 --- a/controlsActions.pde +++ b/controlsActions.pde @@ -738,4 +738,11 @@ void button_mode_cycleDensityPreviewStyle() } } +void numberbox_mode_changeDensityPreviewPosterize(int value) { + if (value < 1) value = 1; + else if (value > 255) value = 255; + + densityPreviewPosterize = value; +} + diff --git a/controlsSetup.pde b/controlsSetup.pde index d59d62a..dfd9462 100644 --- a/controlsSetup.pde +++ b/controlsSetup.pde @@ -521,6 +521,14 @@ Map initialiseNumberboxValues(Map map) { n.setValue(densityPreviewStyle); } + else if (MODE_CHANGE_DENSITY_PREVIEW_POSTERIZE.equals(key)) + { + n.setValue(densityPreviewPosterize); + n.setMin(1); + n.setMax(255); + n.setDecimalPrecision(1); + n.setMultiplier(0.1); + } } } return map; @@ -694,6 +702,7 @@ List getControlNamesForInputPanel() controlNames.add(MODE_CHANGE_SAMPLE_AREA); controlNames.add(MODE_CHOOSE_CHROMA_KEY_COLOUR); controlNames.add(MODE_CHANGE_PIXEL_SCALING); + controlNames.add(MODE_CHANGE_DENSITY_PREVIEW_POSTERIZE); controlNames.add(MODE_CYCLE_DENSITY_PREVIEW_STYLE); controlNames.add(MODE_RENDER_PIXEL_DIALOG); @@ -984,6 +993,8 @@ Map buildControlLabels() result.put(MODE_ADJUST_PREVIEW_CORD_OFFSET, "Cord offset"); result.put(MODE_CYCLE_DENSITY_PREVIEW_STYLE, "Cycle preview style"); + + result.put(MODE_CHANGE_DENSITY_PREVIEW_POSTERIZE, "Pixel posterize"); @@ -1132,6 +1143,8 @@ Set buildControlNames() result.add(MODE_ADJUST_PREVIEW_CORD_OFFSET); result.add(MODE_CYCLE_DENSITY_PREVIEW_STYLE); + result.add(MODE_CHANGE_DENSITY_PREVIEW_POSTERIZE); + return result; } diff --git a/drawing.pde b/drawing.pde index e7ce185..817d184 100644 --- a/drawing.pde +++ b/drawing.pde @@ -199,13 +199,13 @@ void sendTestPenWidth() StringBuilder sb = new StringBuilder(); sb.append(testPenWidthCommand) .append(int(gridSize)) - .append(",") - .append(df.format(testPenWidthStartSize)) - .append(",") - .append(df.format(testPenWidthEndSize)) - .append(",") - .append(df.format(testPenWidthIncrementSize)) - .append(",END"); + .append(",") + .append(df.format(testPenWidthStartSize)) + .append(",") + .append(df.format(testPenWidthEndSize)) + .append(",") + .append(df.format(testPenWidthIncrementSize)) + .append(",END"); addToCommandQueue(sb.toString()); } diff --git a/polargraphcontroller.pde b/polargraphcontroller.pde index 5de4188..dbf604e 100644 --- a/polargraphcontroller.pde +++ b/polargraphcontroller.pde @@ -57,7 +57,7 @@ import java.awt.BorderLayout; import java.lang.reflect.Method; int majorVersionNo = 2; -int minorVersionNo = 1; +int minorVersionNo = 2; int buildNo = 1; String programTitle = "Polargraph Controller v" + majorVersionNo + "." + minorVersionNo + " build " + buildNo; @@ -342,6 +342,8 @@ static final String MODE_ADJUST_PREVIEW_CORD_OFFSET = "numberbox_mode_previewCor static final String MODE_CYCLE_DENSITY_PREVIEW_STYLE = "button_mode_cycleDensityPreviewStyle"; +static final String MODE_CHANGE_DENSITY_PREVIEW_POSTERIZE = "numberbox_mode_changeDensityPreviewPosterize"; + PVector statusTextPosition = new PVector(300.0, 12.0); @@ -387,6 +389,7 @@ static final int DENSITY_PREVIEW_NATIVE_SIZE = 5; static final int DEFAULT_DENSITY_PREVIEW_STYLE = DENSITY_PREVIEW_NATIVE; int densityPreviewStyle = DEFAULT_DENSITY_PREVIEW_STYLE; +int densityPreviewPosterize = 255; static final byte COORD_MODE_NATIVE_STEPS = 0; static final byte COORD_MODE_NATIVE_MM = 1; @@ -537,7 +540,8 @@ void setup() parentPapplet = this; RG.init(this); - RG.setPolygonizer(RG.ADAPTATIVE); + RG.setPolygonizer(RG.UNIFORMLENGTH); +// RG.setPolygonizer(RG.ADAPTATIVE); try { @@ -600,6 +604,7 @@ void setup() addEventListeners(); frameRate(8); + noLoop(); } void fitDisplayMachineToWindow() { @@ -679,6 +684,7 @@ void windowResized() } void draw() { + if (getCurrentTab() == TAB_NAME_INPUT) { drawImagePage(); } @@ -1949,6 +1955,8 @@ void previewQueue(boolean forceRebuild) { println("regenerating preview queue."); previewCommandList.clear(); + + for (String command : commandQueue) { if (command.startsWith(CMD_CHANGELENGTHDIRECT) || command.startsWith(CMD_CHANGELENGTH) || command.startsWith(CMD_DRAWPIXEL)) @@ -1962,8 +1970,8 @@ void previewQueue(boolean forceRebuild) String bLenStr = splitted[2]; PVector endPoint = new PVector(Integer.parseInt(aLenStr)+previewCordOffset, Integer.parseInt(bLenStr)+previewCordOffset); - endPoint = getDisplayMachine().asCartesianCoords(endPoint); endPoint = getDisplayMachine().inMM(endPoint); + endPoint = getDisplayMachine().asCartesianCoords(endPoint); pv.x = endPoint.x; pv.y = endPoint.y;