equidistant stamping fix
This commit is contained in:
parent
432160302e
commit
3bd07f30da
@ -26,24 +26,13 @@ public class DrawingPanel extends JPanel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void onPress(final MouseEvent e) {
|
private void onPress(final MouseEvent e) {
|
||||||
lastPoint = new Vector(e.getPoint());
|
|
||||||
drawing.getCurrent().newRevision();
|
drawing.getCurrent().newRevision();
|
||||||
toolBox.getTool().apply(drawing.getCurrent().getCurrent(), e.getX(), e.getY());
|
lastPoint = toolBox.getTool().apply(null, drawing.getCurrent().getCurrent(), new Vector(e.getPoint()));
|
||||||
repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onDrag(final MouseEvent e) {
|
private void onDrag(final MouseEvent e) {
|
||||||
final Vector vector = new Vector(lastPoint, e.getPoint());
|
lastPoint = toolBox.getTool().apply(lastPoint, drawing.getCurrent().getCurrent(), new Vector(e.getPoint()));
|
||||||
int i = 0;
|
|
||||||
for (int rest = (int) Math.floor(vector.length); rest >= 20; rest -= 20) {
|
|
||||||
System.out.println(rest);
|
|
||||||
toolBox.getTool().apply(drawing.getCurrent().getCurrent(), e.getX(), e.getY());
|
|
||||||
lastPoint = lastPoint.plus(vector.withLength(20));
|
|
||||||
i++;
|
|
||||||
if (i > 100) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -31,7 +31,10 @@ public class Layer {
|
|||||||
|
|
||||||
public void newRevision() {
|
public void newRevision() {
|
||||||
if (canRedo()) {
|
if (canRedo()) {
|
||||||
history = history.subList(0, index + 1);
|
final int old = history.size();
|
||||||
|
final int keep = index + 1;
|
||||||
|
history = history.subList(0, keep);
|
||||||
|
log.info("{} Revisions deleted", old - keep);
|
||||||
}
|
}
|
||||||
current = copy();
|
current = copy();
|
||||||
index = history.size();
|
index = history.size();
|
||||||
|
|||||||
@ -14,7 +14,7 @@ public class Vector {
|
|||||||
this(point.x, point.y);
|
this(point.x, point.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Vector(final Vector start, final Point end) {
|
public Vector(final Vector start, final Vector end) {
|
||||||
this(end.x - start.x, end.y - start.y);
|
this(end.x - start.x, end.y - start.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -26,11 +26,19 @@ public class Vector {
|
|||||||
|
|
||||||
public Vector withLength(final double newLength) {
|
public Vector withLength(final double newLength) {
|
||||||
final double factor = newLength / length;
|
final double factor = newLength / length;
|
||||||
return new Vector(x / factor, y / factor);
|
return new Vector(x * factor, y * factor);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Vector plus(final Vector other) {
|
public Vector plus(final Vector other) {
|
||||||
return new Vector(x + other.x, y + other.y);
|
return new Vector(x + other.x, y + other.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int intY() {
|
||||||
|
return (int) Math.round(y);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int intX() {
|
||||||
|
return (int) Math.round(x);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package de.ph87.kindermalen.tool;
|
package de.ph87.kindermalen.tool;
|
||||||
|
|
||||||
|
import de.ph87.kindermalen.drawing.Vector;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
@ -13,6 +14,6 @@ public abstract class Tool {
|
|||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract void apply(final BufferedImage image, final int x, final int y);
|
public abstract Vector apply(final Vector last, final BufferedImage image, final Vector point);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package de.ph87.kindermalen.tool.stamp;
|
package de.ph87.kindermalen.tool.stamp;
|
||||||
|
|
||||||
|
import de.ph87.kindermalen.drawing.Vector;
|
||||||
import de.ph87.kindermalen.tool.Tool;
|
import de.ph87.kindermalen.tool.Tool;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
@ -91,8 +92,22 @@ public class StampTool extends Tool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void apply(final BufferedImage destination, final int x, final int y) {
|
public Vector apply(Vector last, final BufferedImage destination, final Vector current) {
|
||||||
destination.getGraphics().drawImage(prepared, x - prepared.getWidth() / 2, y - prepared.getHeight() / 2, null);
|
if (last == null) {
|
||||||
|
apply(destination, current);
|
||||||
|
return current;
|
||||||
|
}
|
||||||
|
final Vector vector = new Vector(last, current);
|
||||||
|
for (int rest = (int) Math.floor(vector.length); rest >= 20; rest -= 20) {
|
||||||
|
final Vector point = last.plus(vector.withLength(20));
|
||||||
|
apply(destination, point);
|
||||||
|
last = point;
|
||||||
|
}
|
||||||
|
return last;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void apply(final BufferedImage destination, final Vector point) {
|
||||||
|
destination.getGraphics().drawImage(prepared, point.intX() - prepared.getWidth() / 2, point.intY() - prepared.getHeight() / 2, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user