Voltmeter layout WIP
This commit is contained in:
parent
2dc9513476
commit
e7e74cba44
@ -30,6 +30,10 @@ public class CONFIG {
|
|||||||
|
|
||||||
public static final int P75 = (int) round(0.75 * RASTER);
|
public static final int P75 = (int) round(0.75 * RASTER);
|
||||||
|
|
||||||
|
public static final int P70 = (int) round(0.7 * RASTER);
|
||||||
|
|
||||||
|
public static final int P80 = (int) round(0.8 * RASTER);
|
||||||
|
|
||||||
public static final int P90 = (int) round(0.9 * RASTER);
|
public static final int P90 = (int) round(0.9 * RASTER);
|
||||||
|
|
||||||
public static final int P95 = (int) round(0.95 * RASTER);
|
public static final int P95 = (int) round(0.95 * RASTER);
|
||||||
|
|||||||
@ -47,18 +47,18 @@ public class Render {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void circle(final Position center, final double radius, final Color border, final Stroke stroke, final Color fill) {
|
public void circle(final Position center, final double radius, final Color border, final Stroke stroke, final Color fill, final double startAngle, final double arcAngle) {
|
||||||
final int _x = (int) round(center.inside.x - radius);
|
final int _x = (int) round(center.inside.x - radius);
|
||||||
final int _y = (int) round(center.inside.y - radius);
|
final int _y = (int) round(center.inside.y - radius);
|
||||||
final int diameter = (int) round(radius * 2);
|
final int diameter = (int) round(radius * 2);
|
||||||
if (fill != null) {
|
if (fill != null) {
|
||||||
g.setColor(fill);
|
g.setColor(fill);
|
||||||
g.fillArc(_x, _y, diameter, diameter, 0, 360);
|
g.fillArc(_x, _y, diameter, diameter, (int) round(startAngle), (int) round(arcAngle));
|
||||||
}
|
}
|
||||||
if (border != null && stroke != null) {
|
if (border != null && stroke != null) {
|
||||||
g.setColor(border);
|
g.setColor(border);
|
||||||
g.setStroke(stroke);
|
g.setStroke(stroke);
|
||||||
g.drawArc(_x, _y, diameter, diameter, 0, 360);
|
g.drawArc(_x, _y, diameter, diameter, (int) round(startAngle), (int) round(arcAngle));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -66,7 +66,7 @@ public class Junction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void render(final Render render) {
|
public void render(final Render render) {
|
||||||
render.circle(position, JUNCTION_RADIUS, Color.BLACK, JUNCTION_STROKE, color);
|
render.circle(position, JUNCTION_RADIUS, Color.BLACK, JUNCTION_STROKE, color, 0, 360);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updatePosition() {
|
public void updatePosition() {
|
||||||
|
|||||||
@ -87,7 +87,7 @@ public class Light extends Part {
|
|||||||
@Override
|
@Override
|
||||||
protected void _render() {
|
protected void _render() {
|
||||||
render.line(a, b, Color.BLACK, SYMBOL_STROKE);
|
render.line(a, b, Color.BLACK, SYMBOL_STROKE);
|
||||||
render.circle(ABS(P50, P50), BULB_RADIUS, Color.BLACK, SYMBOL_STROKE, color);
|
render.circle(ABS(P50, P50), BULB_RADIUS, Color.BLACK, SYMBOL_STROKE, color, 0, 360);
|
||||||
|
|
||||||
final double diag = 0.33 * RASTER;
|
final double diag = 0.33 * RASTER;
|
||||||
render.line(ABS(diag, diag), ABS(RASTER - diag, RASTER - diag), Color.BLACK, SYMBOL_STROKE);
|
render.line(ABS(diag, diag), ABS(RASTER - diag, RASTER - diag), Color.BLACK, SYMBOL_STROKE);
|
||||||
|
|||||||
@ -20,15 +20,17 @@ import static de.ph87.electro.circuit.part.Position.ABS;
|
|||||||
@Getter
|
@Getter
|
||||||
public class Voltmeter extends Part {
|
public class Voltmeter extends Part {
|
||||||
|
|
||||||
private static final RealVector ANCHOR = new ArrayRealVector(new double[]{P50, P50});
|
private static final double FINGER_LENGTH = P70;
|
||||||
|
|
||||||
private static final RealVector FINGER = new ArrayRealVector(new double[]{P90, P50}).subtract(ANCHOR);
|
private static final RealVector ANCHOR = new ArrayRealVector(new double[]{P50, P80});
|
||||||
|
|
||||||
|
private static final RealVector FINGER = new ArrayRealVector(new double[]{ANCHOR.getEntry(0) + FINGER_LENGTH, P50}).subtract(ANCHOR);
|
||||||
|
|
||||||
private static final Stroke SCALE_STROKE = new BasicStroke(1);
|
private static final Stroke SCALE_STROKE = new BasicStroke(1);
|
||||||
|
|
||||||
private static final double DEGREES_TOTAL = 90.0;
|
private static final double DEGREES_RANGE = 90;
|
||||||
|
|
||||||
private static final double DEGREES_ROTATE = -135.0;
|
public static final double DEGREES_OFFSET = (180 - DEGREES_RANGE) / 2;
|
||||||
|
|
||||||
private final Junction a;
|
private final Junction a;
|
||||||
|
|
||||||
@ -44,15 +46,15 @@ public class Voltmeter extends Part {
|
|||||||
|
|
||||||
public Voltmeter(final Circuit circuit, final Position position) {
|
public Voltmeter(final Circuit circuit, final Position position) {
|
||||||
super(circuit, "Voltmeter", position);
|
super(circuit, "Voltmeter", position);
|
||||||
a = addJunction("A", P10, P50);
|
a = addJunction("A", P10, P90);
|
||||||
b = addJunction("B", P90, P50);
|
b = addJunction("B", P90, P90);
|
||||||
postCalculate(); // TODO remove
|
postCalculate(); // TODO remove
|
||||||
}
|
}
|
||||||
|
|
||||||
public Voltmeter(final Circuit circuit, final PartDto dto) {
|
public Voltmeter(final Circuit circuit, final PartDto dto) {
|
||||||
super(circuit, dto);
|
super(circuit, dto);
|
||||||
a = addJunction("A", P10, P50);
|
a = addJunction("A", P10, P90);
|
||||||
b = addJunction("B", P90, P50);
|
b = addJunction("B", P90, P90);
|
||||||
postCalculate(); // TODO remove
|
postCalculate(); // TODO remove
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,7 +72,7 @@ public class Voltmeter extends Part {
|
|||||||
public void postCalculate() {
|
public void postCalculate() {
|
||||||
voltage = !Double.isNaN(b.getVoltage()) && !Double.isNaN(a.getVoltage()) ? b.getVoltage() - a.getVoltage() : 0.0;
|
voltage = !Double.isNaN(b.getVoltage()) && !Double.isNaN(a.getVoltage()) ? b.getVoltage() - a.getVoltage() : 0.0;
|
||||||
final double ratio = (voltage - min) / (max - min);
|
final double ratio = (voltage - min) / (max - min);
|
||||||
final double degrees = DEGREES_TOTAL * ratio + DEGREES_ROTATE;
|
final double degrees = DEGREES_RANGE * ratio + DEGREES_OFFSET / 2;
|
||||||
final RealMatrix rotate = RotationMatrix.ofDegrees(degrees);
|
final RealMatrix rotate = RotationMatrix.ofDegrees(degrees);
|
||||||
final RealVector rotatedFinger = rotate.operate(FINGER);
|
final RealVector rotatedFinger = rotate.operate(FINGER);
|
||||||
tip = ANCHOR.add(rotatedFinger);
|
tip = ANCHOR.add(rotatedFinger);
|
||||||
@ -79,12 +81,13 @@ public class Voltmeter extends Part {
|
|||||||
@Override
|
@Override
|
||||||
public void _render() {
|
public void _render() {
|
||||||
render.clockwise(getOrientation());
|
render.clockwise(getOrientation());
|
||||||
|
render.circle(ABS(ANCHOR), FINGER_LENGTH, Color.BLACK, SCALE_STROKE, Color.white, DEGREES_OFFSET, DEGREES_RANGE);
|
||||||
render.line(ABS(ANCHOR), ABS(tip), Color.BLACK, SCALE_STROKE);
|
render.line(ABS(ANCHOR), ABS(tip), Color.BLACK, SCALE_STROKE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void _labels() {
|
protected void _labels() {
|
||||||
render.textCenter(LABEL_FONT, "%.2f V".formatted(voltage), P50, P75, Color.BLACK);
|
render.textCenter(LABEL_FONT, "%.2f V".formatted(voltage), P50, P90, Color.BLACK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user