Skip to content

Commit 5044831

Browse files
committed
2 parents 31c99dd + 0e73f96 commit 5044831

File tree

19 files changed

+593
-200
lines changed

19 files changed

+593
-200
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ It pairs really well with [Marlin 3D printer firmware](https://github.com/Margin
1212
![screenshot](screenshot.jpg)
1313

1414
## Installing and running
15+
[Get the latest nightly build](https://github.com/MarginallyClever/Makelangelo-software/releases/tag/Nightly)
1516
[How to use Makelangelo Software 7.24.0+](https://mcr.dozuki.com/Guide/1.+How+to+use+Makelangelo+Software+7.24.*/5?lang=en)
1617

1718
## Where to go from here

pom.xml

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.marginallyclever</groupId>
88
<artifactId>Makelangelo</artifactId>
9-
<version>7.75.1</version>
9+
<version>7.75.5</version>
1010
<name>Makelangelo</name>
1111
<description>Makelangelo Software is a Java program that prepares art for CNC plotters. It is especially designed for the Makelangelo Robot.
1212
It pairs really well with Marlin-polargraph, the code in the brain of the robot that receives instructions and moves the motors.</description>
@@ -552,6 +552,22 @@ It pairs really well with Marlin-polargraph, the code in the brain of the robot
552552
<artifactId>janino</artifactId>
553553
<version>3.1.8</version>
554554
</dependency>
555+
<!-- logging -->
556+
<dependency>
557+
<groupId>org.slf4j</groupId>
558+
<artifactId>slf4j-api</artifactId>
559+
<version>2.0.17</version>
560+
</dependency>
561+
<dependency>
562+
<groupId>ch.qos.logback</groupId>
563+
<artifactId>logback-core</artifactId>
564+
<version>1.5.18</version>
565+
</dependency>
566+
<dependency>
567+
<groupId>ch.qos.logback</groupId>
568+
<artifactId>logback-classic</artifactId>
569+
<version>1.5.18</version>
570+
</dependency>
555571
<!-- donatello -->
556572
<dependency>
557573
<!--
@@ -577,22 +593,6 @@ It pairs really well with Marlin-polargraph, the code in the brain of the robot
577593
<artifactId>donatello</artifactId>
578594
<version>1.9.7</version>
579595
</dependency>
580-
<!-- logging -->
581-
<dependency>
582-
<groupId>org.slf4j</groupId>
583-
<artifactId>slf4j-api</artifactId>
584-
<version>2.0.17</version>
585-
</dependency>
586-
<dependency>
587-
<groupId>ch.qos.logback</groupId>
588-
<artifactId>logback-core</artifactId>
589-
<version>1.5.18</version>
590-
</dependency>
591-
<dependency>
592-
<groupId>ch.qos.logback</groupId>
593-
<artifactId>logback-classic</artifactId>
594-
<version>1.5.18</version>
595-
</dependency>
596596
</dependencies>
597597

598598
<properties>

src/main/java/com/marginallyclever/makelangelo/MainMenu.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,10 @@ private JMenu createToolsMenu() {
316316
menu.add(createMover(Translator.get("Scale"),"/com/marginallyclever/makelangelo/icons8-resize-16.png",(e)->runScalePanel()));
317317
menu.add(createMover(Translator.get("Rotate"),"/com/marginallyclever/makelangelo/icons8-rotate-16.png",(e)->runRotatePanel()));
318318

319+
menu.add(createMover(Translator.get("Crop"),"/com/marginallyclever/makelangelo/icons8-crop-16.png",(e)-> {
320+
CropTurtleAction act = new CropTurtleAction(frame.getPaper());
321+
frame.setTurtle(act.run(frame.getTurtle()));
322+
}));
319323
menu.addSeparator();
320324

321325
var a4 = new FlipTurtleAction(1,-1,Translator.get("FlipV"));
@@ -381,7 +385,7 @@ private void runScalePanel() {
381385
private void runTranslatePanel() {
382386
TranslateTurtlePanel.runAsDialog(SwingUtilities.getWindowAncestor(this), frame.getTurtle());
383387
}
384-
388+
385389
private JMenu createRobotMenu() {
386390
JMenu menu = new JMenu(Translator.get("Robot"));
387391
menu.setMnemonic('k');

src/main/java/com/marginallyclever/makelangelo/makeart/imageconverter/Converter_Pulse.java

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.marginallyclever.makelangelo.makeart.imageconverter;
22

33

4-
import com.marginallyclever.donatello.select.SelectDouble;
4+
import com.marginallyclever.donatello.select.SelectSlider;
55
import com.marginallyclever.makelangelo.Translator;
66
import com.marginallyclever.makelangelo.makeart.TransformedImage;
77
import com.marginallyclever.makelangelo.makeart.imagefilter.FilterDesaturate;
@@ -24,31 +24,38 @@
2424
public class Converter_Pulse extends ImageConverter {
2525
private static double blockScale = 6.0f;
2626
private static double angle = 0;
27-
private final String[] directionChoices = new String[]{Translator.get("horizontal"), Translator.get("vertical") };
27+
private static double zigDensity = 2.0f; // increase to tighten zigzags
2828
private int cutOff = 16;
2929
private double sampleRate = 0.1;
3030

3131
public Converter_Pulse() {
3232
super();
3333

34-
SelectDouble selectSize = new SelectDouble("size",Translator.get("HilbertCurveSize"),getScale());
34+
SelectSlider selectSize = new SelectSlider("size",Translator.get("HilbertCurveSize"),40,1,(int)blockScale);
3535
add(selectSize);
3636
selectSize.addSelectListener(evt->{
37-
setScale((double) evt.getNewValue());
37+
blockScale = (int)evt.getNewValue();
3838
fireRestart();
3939
});
4040

41-
SelectDouble selectAngle = new SelectDouble("angle",Translator.get("ConverterMultipassAngle"),angle);
41+
SelectSlider selectIntensity = new SelectSlider("intensity", Translator.get("Converter_SpiralPulse.intensity"),30,1,(int)(zigDensity*10));
42+
add(selectIntensity);
43+
selectIntensity.addSelectListener(evt->{
44+
zigDensity = (int)evt.getNewValue() / 10.0;
45+
fireRestart();
46+
});
47+
48+
SelectSlider selectAngle = new SelectSlider("angle", Translator.get("ConverterMultipassAngle"),90,0,(int)angle);
4249
add(selectAngle);
4350
selectAngle.addSelectListener(evt->{
44-
angle = (double)evt.getNewValue();
51+
angle = (int)evt.getNewValue();
4552
fireRestart();
4653
});
4754

48-
SelectDouble selectSampleRate = new SelectDouble("sampleRate",Translator.get("Converter_PulseCMYK.SampleRate"),sampleRate);
55+
SelectSlider selectSampleRate = new SelectSlider("sampleRate",Translator.get("Converter_PulseCMYK.SampleRate"),20,1,(int)(sampleRate*10));
4956
add(selectSampleRate);
5057
selectSampleRate.addSelectListener(evt->{
51-
sampleRate = (double) evt.getNewValue();
58+
sampleRate = (int) evt.getNewValue() / 10.0;
5259
fireRestart();
5360
});
5461
}
@@ -58,14 +65,6 @@ public String getName() {
5865
return Translator.get("PulseLineName");
5966
}
6067

61-
public double getScale() {
62-
return blockScale;
63-
}
64-
public void setScale(double value) {
65-
if(value<1) value=1;
66-
blockScale = value;
67-
}
68-
6968
/**
7069
* Converts images into zigzags in paper space instead of image space
7170
*/
@@ -94,7 +93,7 @@ protected void convertOneLayer(TransformedImage img) {
9493
turtle = new Turtle();
9594
turtle.setStroke(Color.BLACK,settings.getDouble(PlotterSettings.DIAMETER));
9695

97-
var wave = new WaveByIntensity(img,blockScale/2,sampleRate,2.0);
96+
var wave = new WaveByIntensity(img,blockScale/2,sampleRate,zigDensity);
9897

9998
Vector2d majorAxis = new Vector2d(
10099
Math.cos(Math.toRadians(angle)),

src/main/java/com/marginallyclever/makelangelo/makeart/imageconverter/Converter_PulseCMYK.java

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.marginallyclever.makelangelo.makeart.imageconverter;
22

33

4-
import com.marginallyclever.donatello.select.SelectDouble;
4+
import com.marginallyclever.donatello.select.SelectSlider;
55
import com.marginallyclever.makelangelo.Translator;
66
import com.marginallyclever.makelangelo.makeart.TransformedImage;
77
import com.marginallyclever.makelangelo.makeart.imagefilter.FilterCMYK;
@@ -23,30 +23,38 @@
2323
*/
2424
public class Converter_PulseCMYK extends ImageConverter {
2525
private static double blockScale = 4.0f;
26+
private static double zigDensity = 2.0f; // increase to tighten zigzags
2627
private static double angle = 0;
2728
private double sampleRate = 0.2;
2829

2930
public Converter_PulseCMYK() {
3031
super();
3132

32-
SelectDouble selectSize = new SelectDouble("size",Translator.get("HilbertCurveSize"),getScale());
33+
SelectSlider selectSize = new SelectSlider("size",Translator.get("HilbertCurveSize"),40,1,(int)blockScale);
3334
add(selectSize);
3435
selectSize.addSelectListener(evt->{
35-
setScale((double) evt.getNewValue());
36+
blockScale = (int)evt.getNewValue();
3637
fireRestart();
3738
});
3839

39-
SelectDouble selectAngle = new SelectDouble("angle",Translator.get("ConverterMultipassAngle"),angle);
40+
SelectSlider selectIntensity = new SelectSlider("intensity", Translator.get("Converter_SpiralPulse.intensity"),30,1,(int)(zigDensity*10));
41+
add(selectIntensity);
42+
selectIntensity.addSelectListener(evt->{
43+
zigDensity = (int)evt.getNewValue() / 10.0;
44+
fireRestart();
45+
});
46+
47+
SelectSlider selectAngle = new SelectSlider("angle", Translator.get("ConverterMultipassAngle"),90,0,(int)angle);
4048
add(selectAngle);
4149
selectAngle.addSelectListener(evt->{
42-
angle = (double)evt.getNewValue();
50+
angle = (int)evt.getNewValue();
4351
fireRestart();
4452
});
4553

46-
SelectDouble selectSampleRate = new SelectDouble("sampleRate",Translator.get("Converter_PulseCMYK.SampleRate"),sampleRate);
54+
SelectSlider selectSampleRate = new SelectSlider("sampleRate",Translator.get("Converter_PulseCMYK.SampleRate"),20,1,(int)(sampleRate*10));
4755
add(selectSampleRate);
4856
selectSampleRate.addSelectListener(evt->{
49-
sampleRate = (double) evt.getNewValue();
57+
sampleRate = (int) evt.getNewValue() / 10.0;
5058
fireRestart();
5159
});
5260
}
@@ -56,15 +64,6 @@ public String getName() {
5664
return Translator.get("Converter_PulseCMYK.Name");
5765
}
5866

59-
public double getScale() {
60-
return blockScale;
61-
}
62-
63-
public void setScale(double value) {
64-
if(value<1) value=1;
65-
blockScale = value;
66-
}
67-
6867
/**
6968
* Converts images into zigzags in paper space instead of image space
7069
*/
@@ -99,7 +98,7 @@ protected void outputChannel(TransformedImage img,Color channel) {
9998
Turtle newTurtle = new Turtle();
10099
newTurtle.setStroke(Color.BLACK,settings.getDouble(PlotterSettings.DIAMETER));
101100

102-
var wave = new WaveByIntensity(img,blockScale/2,sampleRate,2.0);
101+
var wave = new WaveByIntensity(img,blockScale/2,sampleRate,zigDensity);
103102

104103
Vector2d majorAxis = new Vector2d(
105104
Math.cos(Math.toRadians(angle)),
Lines changed: 20 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package com.marginallyclever.makelangelo.makeart.imageconverter;
22

33
import com.marginallyclever.donatello.select.SelectBoolean;
4+
import com.marginallyclever.donatello.select.SelectSlider;
45
import com.marginallyclever.makelangelo.Translator;
56
import com.marginallyclever.makelangelo.makeart.TransformedImage;
67
import com.marginallyclever.makelangelo.makeart.imagefilter.FilterDesaturate;
78
import com.marginallyclever.makelangelo.makeart.turtletool.CropTurtle;
89
import com.marginallyclever.makelangelo.makeart.turtletool.WaveByIntensity;
910
import com.marginallyclever.makelangelo.paper.Paper;
10-
import com.marginallyclever.donatello.select.SelectDouble;
1111
import com.marginallyclever.makelangelo.plotter.plottersettings.PlotterSettings;
1212
import com.marginallyclever.makelangelo.turtle.Turtle;
1313
import org.slf4j.Logger;
@@ -26,9 +26,9 @@
2626
public class Converter_SpiralPulse extends ImageConverter {
2727
private static final Logger logger = LoggerFactory.getLogger(Converter_SpiralPulse.class);
2828
private static boolean convertToCorners = false; // draw the spiral right out to the edges of the square bounds.
29-
private static double zigDensity = 1.2f; // increase to tighten zigzags
30-
private static double spacing = 2.5f;
31-
private static double height = 4.0f;
29+
private static double zigDensity = 2.0f; // increase to tighten zigzags
30+
private static int spacing = 2;
31+
private static int height = 4;
3232
private static double sampleRate = 0.1;
3333

3434
public Converter_SpiralPulse() {
@@ -41,24 +41,24 @@ public Converter_SpiralPulse() {
4141
});
4242
add(toCorners);
4343

44-
SelectDouble selectIntensity = new SelectDouble("intensity", Translator.get("Converter_SpiralPulse.intensity"),getIntensity());
44+
SelectSlider selectIntensity = new SelectSlider("intensity", Translator.get("Converter_SpiralPulse.intensity"),30,1,(int)(zigDensity*10));
4545
add(selectIntensity);
4646
selectIntensity.addSelectListener(evt->{
47-
setIntensity((double)evt.getNewValue());
47+
zigDensity = (int)evt.getNewValue() / 10.0;
4848
fireRestart();
4949
});
5050

51-
SelectDouble selectSpacing = new SelectDouble("spacing",Translator.get("Converter_SpiralPulse.spacing"),getSpacing());
51+
SelectSlider selectSpacing = new SelectSlider("spacing",Translator.get("Converter_SpiralPulse.spacing"),40,1,spacing);
5252
add(selectSpacing);
5353
selectSpacing.addSelectListener(evt->{
54-
setSpacing((double)evt.getNewValue());
54+
spacing = (int)evt.getNewValue();
5555
fireRestart();
5656
});
5757

58-
SelectDouble selectHeight = new SelectDouble("height",Translator.get("Converter_SpiralPulse.height"),getHeight());
58+
SelectSlider selectHeight = new SelectSlider("height",Translator.get("Converter_SpiralPulse.height"),40,1,height);
5959
add(selectHeight);
6060
selectHeight.addSelectListener(evt->{
61-
setHeight((double)evt.getNewValue());
61+
height = (int)evt.getNewValue();
6262
fireRestart();
6363
});
6464
}
@@ -95,74 +95,42 @@ public void start(Paper paper, TransformedImage image) {
9595
double h = rect.getHeight()/2.0f;
9696
maxr = Math.min(h, w);
9797
}
98-
99-
double r = maxr - toolDiameter*5.0f;
100-
int numRings = 0;
101-
double stepSize = toolDiameter * height;
102-
double halfStep = stepSize / 2.0f;
103-
int n=1;
104-
double ringSize = halfStep*spacing;
98+
99+
double r = maxr - toolDiameter * 5.0f;
100+
double stepSize = height - toolDiameter;
101+
double halfWaveHeight = stepSize / 2.0f;
102+
double ringSize = spacing;
105103

106104
turtle = new Turtle();
107105
turtle.setStroke(Color.BLACK,settings.getDouble(PlotterSettings.DIAMETER));
108106

109-
var wave = new WaveByIntensity(img,halfStep,sampleRate,2.0);
107+
var wave = new WaveByIntensity(img,halfWaveHeight,sampleRate,zigDensity);
110108

111109
Point2d a = new Point2d();
112110
Point2d b = new Point2d();
113111

114112
a.set(Math.cos(0) * r, Math.sin(0) * r);
115113

116-
while (r > toolDiameter) {
114+
while (r > toolDiameter*2.0) {
117115
// find circumference of current circle
118116
double circumference = Math.floor((2.0f * r - toolDiameter) * Math.PI)*toolDiameter;
119117
//if (circumference > 360.0f) circumference = 360.0f;
120-
118+
121119
for (int i = 0; i <= circumference; ++i) {
122120
// tweak the diameter to make it look like a spiral
123-
double r2 = r - ringSize * (float)i / circumference;
124-
125-
double f = Math.PI * 2.0f * (float)i / circumference;
121+
double r2 = r - ringSize * i / circumference;
122+
double f = Math.PI * 2.0f * i / circumference;
126123
b.set(Math.cos(f) * r2, Math.sin(f) * r2);
127124

128125
turtle.add(wave.lineToWave(a,b));
129126
a.set(b);
130127
}
131-
n = -n;
132128
r -= ringSize;
133-
++numRings;
134129
}
135130

136131
// clip to paper boundaries
137132
CropTurtle.run(turtle, myPaper.getMarginRectangle());
138133

139134
fireConversionFinished();
140135
}
141-
142-
public void setIntensity(double v) {
143-
if(v<0.1) v=0.1f;
144-
if(v>3.0) v=3.0f;
145-
zigDensity=v;
146-
}
147-
public double getIntensity() {
148-
return zigDensity;
149-
}
150-
151-
public void setSpacing(double v) {
152-
if(v<0.5f) v=0.5f;
153-
if(v>10) v=10;
154-
spacing=v;
155-
}
156-
public double getSpacing() {
157-
return spacing;
158-
}
159-
160-
public void setHeight(double v) {
161-
if(v<0.1) v=1;
162-
if(v>10) v=10;
163-
height = v;
164-
}
165-
public double getHeight() {
166-
return height;
167-
}
168136
}

0 commit comments

Comments
 (0)