Part.orientation in constructor

This commit is contained in:
Patrick Haßel 2024-12-12 08:16:07 +01:00
parent 04fe180334
commit 6bdd2ff20d
23 changed files with 93 additions and 72 deletions

View File

@ -2,13 +2,13 @@ package de.ph87.electro;
import de.ph87.electro.circuit.Circuit;
import de.ph87.electro.circuit.CircuitPanel;
import de.ph87.electro.circuit.demo.Demos;
import de.ph87.electro.sidebar.Sidebar;
import javax.swing.*;
import java.awt.*;
import static de.ph87.electro.CONFIG.RASTER;
import static de.ph87.electro.circuit.demo.Demos.poti;
public class Window extends JFrame {
@ -38,7 +38,7 @@ public class Window extends JFrame {
public static void main(String[] args) {
final Window window = new Window();
window.setCircuit(Demos.potiAndVoltmeter());
window.setCircuit(poti());
}
public void setCircuit(final Circuit circuit) {

View File

@ -1,5 +1,6 @@
package de.ph87.electro.circuit;
import de.ph87.electro.circuit.part.Orientation;
import de.ph87.electro.circuit.part.parts.*;
import de.ph87.electro.common.AbstractDropTarget;
@ -21,21 +22,21 @@ public class CircuitPanelDropTarget extends AbstractDropTarget {
protected boolean drop(final Point point, final String data) {
final Point aligned = ALIGN(point);
if (data.equals(Battery.class.getSimpleName())) {
circuitPanel.getCircuit().addPart(new Battery(aligned));
circuitPanel.getCircuit().addPart(new Battery(aligned, Orientation.R0));
} else if (data.equals(Light.class.getSimpleName())) {
circuitPanel.getCircuit().addPart(new Light(aligned));
circuitPanel.getCircuit().addPart(new Light(aligned, Orientation.R0));
} else if (data.equals(Switch1x1.class.getSimpleName())) {
circuitPanel.getCircuit().addPart(new Switch1x1(aligned));
circuitPanel.getCircuit().addPart(new Switch1x1(aligned, Orientation.R0));
} else if (data.equals(Switch1x2.class.getSimpleName())) {
circuitPanel.getCircuit().addPart(new Switch1x2(aligned));
circuitPanel.getCircuit().addPart(new Switch1x2(aligned, Orientation.R0));
} else if (data.equals(SwitchCross.class.getSimpleName())) {
circuitPanel.getCircuit().addPart(new SwitchCross(aligned));
circuitPanel.getCircuit().addPart(new SwitchCross(aligned, Orientation.R0));
} else if (data.equals(Poti.class.getSimpleName())) {
circuitPanel.getCircuit().addPart(new Poti(aligned));
circuitPanel.getCircuit().addPart(new Poti(aligned, Orientation.R0));
} else if (data.equals(Voltmeter.class.getSimpleName())) {
circuitPanel.getCircuit().addPart(new Voltmeter(aligned));
circuitPanel.getCircuit().addPart(new Voltmeter(aligned, Orientation.R0));
} else if (data.equals(Amperemeter.class.getSimpleName())) {
circuitPanel.getCircuit().addPart(new Amperemeter(aligned));
circuitPanel.getCircuit().addPart(new Amperemeter(aligned, Orientation.R0));
} else {
throw new RuntimeException();
}

View File

@ -1,5 +1,6 @@
package de.ph87.electro.circuit;
import de.ph87.electro.circuit.part.Orientation;
import de.ph87.electro.circuit.part.Part;
import de.ph87.electro.circuit.part.node.Node;
import de.ph87.electro.circuit.part.parts.Connector;
@ -191,7 +192,7 @@ class CircuitPanelMouseAdapter extends MouseAdapter {
}
private void wireBendToNewConnector() {
final Connector newConnector = circuitPanel.getCircuit().addPart(new Connector(draggingSub));
final Connector newConnector = circuitPanel.getCircuit().addPart(new Connector(draggingSub, Orientation.R0));
connectIntermediate(newConnector.getNode());
}

View File

@ -1,20 +1,21 @@
package de.ph87.electro.circuit.demo;
import de.ph87.electro.circuit.Circuit;
import de.ph87.electro.circuit.part.parts.Battery;
import de.ph87.electro.circuit.part.parts.Poti;
import de.ph87.electro.circuit.part.parts.Voltmeter;
import de.ph87.electro.circuit.part.Orientation;
import de.ph87.electro.circuit.part.parts.*;
import lombok.NonNull;
import static de.ph87.electro.CONFIG.RASTER;
@SuppressWarnings("unused")
public class Demos {
public static Circuit potiAndVoltmeter() {
@NonNull
public static Circuit poti() {
final Circuit circuit = new Circuit();
final Battery battery = circuit.addPart(new Battery(RASTER(1, 0)));
final Poti poti = circuit.addPart(new Poti(RASTER(1, 2)));
final Voltmeter voltmeter = circuit.addPart(new Voltmeter(RASTER(1, 4)));
final Battery battery = circuit.addPart(new Battery(RASTER(1, 0), Orientation.R270));
final Poti poti = circuit.addPart(new Poti(RASTER(1, 2), Orientation.R0));
final Voltmeter voltmeter = circuit.addPart(new Voltmeter(RASTER(1, 4), Orientation.R90));
circuit.connect(battery.getMinus(), poti.getCommon());
circuit.connect(battery.getPlus(), poti.getEnd());
circuit.connect(poti.getCommon(), voltmeter.a);

View File

@ -31,7 +31,7 @@ public abstract class Part {
private final List<Node> nodes = new ArrayList<>();
@NonNull
protected Orientation orientation = Orientation.R0;
protected Orientation orientation;
@NonNull
@Setter
@ -44,9 +44,10 @@ public abstract class Part {
@NonNull
private AffineTransform transform = new AffineTransform();
protected Part(@NonNull final String name, @NonNull final Point position) {
protected Part(@NonNull final String name, @NonNull final Point position, @NonNull final Orientation orientation) {
this.uuid = UUID.randomUUID().toString();
this.name = name;
this.orientation = orientation;
this.position = position;
updateTransform();
}

View File

@ -1,5 +1,6 @@
package de.ph87.electro.circuit.part.parts;
import de.ph87.electro.circuit.part.Orientation;
import lombok.Getter;
import lombok.NonNull;
@ -8,8 +9,8 @@ import java.awt.*;
@Getter
public class Amperemeter extends Meter {
public Amperemeter(@NonNull final Point position) {
super(MeterType.AMPERE, position);
public Amperemeter(@NonNull final Point position, @NonNull final Orientation orientation) {
super(MeterType.AMPERE, position, orientation);
}
public Amperemeter(@NonNull final MeterDto dto) {

View File

@ -1,6 +1,7 @@
package de.ph87.electro.circuit.part.parts;
import de.ph87.electro.circuit.Resistance;
import de.ph87.electro.circuit.part.Orientation;
import de.ph87.electro.circuit.part.Part;
import de.ph87.electro.circuit.part.node.Node;
import lombok.Getter;
@ -49,8 +50,8 @@ public class Battery extends Part {
@ToString.Include
private double voltage = DEFAULT_VOLTAGE;
public Battery(@NonNull final Point position) {
super("Batterie", position);
public Battery(@NonNull final Point position, @NonNull final Orientation orientation) {
super("Batterie", position, orientation);
minus = addNode("MINUS", P10, P50);
plus = addNode("PLUS", P90, P50);
innerResistance = new Resistance(minus, plus, DEFAULT_INNER_RESISTANCE);

View File

@ -1,5 +1,6 @@
package de.ph87.electro.circuit.part.parts;
import de.ph87.electro.circuit.part.Orientation;
import de.ph87.electro.circuit.part.Part;
import de.ph87.electro.circuit.part.node.Node;
import lombok.Getter;
@ -20,8 +21,8 @@ public class Connector extends Part {
@NonNull
private final Point size = new Point(SUB_RASTER, SUB_RASTER);
public Connector(@NonNull final Point position) {
super("", position);
public Connector(@NonNull final Point position, @NonNull final Orientation orientation) {
super("", position, orientation);
node = addNode("", SUB_RASTER / 2, SUB_RASTER / 2);
}

View File

@ -43,8 +43,8 @@ public class Light extends Part {
private Color color = BULB_OFF_COLOR;
public Light(@NonNull final Point position) {
super("Licht", position);
public Light(@NonNull final Point position, @NonNull final Orientation orientation) {
super("Licht", position, orientation);
a = addNode("A", P10, P50);
b = addNode("B", P90, P50);
innerResistance = new Resistance(a, b, DEFAULT_INNER_RESISTANCE);

View File

@ -1,6 +1,7 @@
package de.ph87.electro.circuit.part.parts;
import de.ph87.electro.circuit.Resistance;
import de.ph87.electro.circuit.part.Orientation;
import de.ph87.electro.circuit.part.Part;
import de.ph87.electro.circuit.part.node.Node;
import de.ph87.electro.common.RotationMatrix;
@ -17,6 +18,7 @@ import static de.ph87.electro.CONFIG.*;
import static de.ph87.electro.circuit.CircuitPainter.*;
import static java.lang.Math.round;
@Getter
public abstract class Meter extends Part {
private static final int FINGER_LENGTH = P65;
@ -31,7 +33,6 @@ public abstract class Meter extends Part {
public final MeterType type;
@Getter
public final Point size = new Point(RASTER, RASTER);
public final Node a;
@ -48,8 +49,8 @@ public abstract class Meter extends Part {
@Setter
public double max;
public Meter(@NonNull MeterType type, @NonNull final Point position) {
super(type.name, position);
public Meter(@NonNull MeterType type, @NonNull final Point position, @NonNull final Orientation orientation) {
super(type.name, position, orientation);
this.type = type;
this.unit = type.unit;
this.min = type.min;

View File

@ -1,6 +1,7 @@
package de.ph87.electro.circuit.part.parts;
import de.ph87.electro.circuit.Resistance;
import de.ph87.electro.circuit.part.Orientation;
import de.ph87.electro.circuit.part.Part;
import de.ph87.electro.circuit.part.node.Node;
import lombok.Getter;
@ -39,8 +40,8 @@ public class Poti extends Part {
private double ratio = 0.0;
public Poti(@NonNull final Point position) {
super("Poti", position);
public Poti(@NonNull final Point position, @NonNull final Orientation orientation) {
super("Poti", position, orientation);
common = addNode("C", P10, P50);
middle = addNode("M", P50, P10);
end = addNode("E", P90, P50);

View File

@ -1,6 +1,7 @@
package de.ph87.electro.circuit.part.parts;
import de.ph87.electro.circuit.Resistance;
import de.ph87.electro.circuit.part.Orientation;
import de.ph87.electro.circuit.part.Part;
import de.ph87.electro.circuit.part.node.Node;
import lombok.Getter;
@ -30,8 +31,8 @@ public class Switch1x1 extends Part {
private boolean state = false;
public Switch1x1(@NonNull final Point position) {
super("Ausschalter", position);
public Switch1x1(@NonNull final Point position, @NonNull final Orientation orientation) {
super("Ausschalter", position, orientation);
common = addNode("C", P10, P50);
output = addNode("O", P90, P50);
innerResistance = new Resistance(common, output, RESISTANCE_MIN);

View File

@ -1,6 +1,7 @@
package de.ph87.electro.circuit.part.parts;
import de.ph87.electro.circuit.Resistance;
import de.ph87.electro.circuit.part.Orientation;
import de.ph87.electro.circuit.part.Part;
import de.ph87.electro.circuit.part.node.Node;
import lombok.Getter;
@ -31,8 +32,8 @@ public class Switch1x2 extends Part {
private boolean state = false;
public Switch1x2(@NonNull final Point position) {
super("Wechselschalter", position);
public Switch1x2(@NonNull final Point position, @NonNull final Orientation orientation) {
super("Wechselschalter", position, orientation);
common = addNode("C", P10, P50);
output0 = addNode("O0", P90, P25);
output1 = addNode("O1", P90, P75);

View File

@ -1,6 +1,7 @@
package de.ph87.electro.circuit.part.parts;
import de.ph87.electro.circuit.Resistance;
import de.ph87.electro.circuit.part.Orientation;
import de.ph87.electro.circuit.part.Part;
import de.ph87.electro.circuit.part.node.Node;
import lombok.Getter;
@ -37,8 +38,8 @@ public class SwitchCross extends Part {
private boolean state = false;
public SwitchCross(final Point position) {
super("Kreuzschalter", position);
public SwitchCross(@NonNull final Point position, @NonNull final Orientation orientation) {
super("Kreuzschalter", position, orientation);
common0 = addNode("C0", P10, P25);
common1 = addNode("C1", P10, P75);
output0 = addNode("O0", P90, P25);

View File

@ -1,5 +1,6 @@
package de.ph87.electro.circuit.part.parts;
import de.ph87.electro.circuit.part.Orientation;
import lombok.Getter;
import lombok.NonNull;
@ -8,8 +9,8 @@ import java.awt.*;
@Getter
public class Voltmeter extends Meter {
public Voltmeter(@NonNull final Point position) {
super(MeterType.VOLT, position);
public Voltmeter(@NonNull final Point position, @NonNull final Orientation orientation) {
super(MeterType.VOLT, position, orientation);
}
public Voltmeter(@NonNull final MeterDto dto) {

View File

@ -1,5 +1,6 @@
package de.ph87.electro.sidebar;
import de.ph87.electro.circuit.part.Orientation;
import de.ph87.electro.circuit.part.Part;
import de.ph87.electro.circuit.part.parts.*;
@ -22,14 +23,14 @@ public class Sidebar extends JPanel {
addToggle("Spannungen", () -> SHOW_NODE_VOLTAGES, v -> SHOW_NODE_VOLTAGES = v);
final Point ZERO = new Point();
addPart(new Battery(ZERO));
addPart(new Light(ZERO));
addPart(new Switch1x1(ZERO));
addPart(new Switch1x2(ZERO));
addPart(new SwitchCross(ZERO));
addPart(new Poti(ZERO));
addPart(new Voltmeter(ZERO));
addPart(new Amperemeter(ZERO));
addPart(new Battery(ZERO, Orientation.R0));
addPart(new Light(ZERO, Orientation.R0));
addPart(new Switch1x1(ZERO, Orientation.R0));
addPart(new Switch1x2(ZERO, Orientation.R0));
addPart(new SwitchCross(ZERO, Orientation.R0));
addPart(new Poti(ZERO, Orientation.R0));
addPart(new Voltmeter(ZERO, Orientation.R0));
addPart(new Amperemeter(ZERO, Orientation.R0));
}
@SuppressWarnings("UnusedReturnValue")

View File

@ -1,6 +1,7 @@
package de.ph87.electro.circuit;
import de.ph87.electro.circuit.calculation.Calculation;
import de.ph87.electro.circuit.part.Orientation;
import de.ph87.electro.circuit.part.node.Node;
import de.ph87.electro.circuit.part.parts.Battery;
import de.ph87.electro.circuit.part.parts.Light;
@ -16,8 +17,8 @@ class CalculationServiceTest {
@Test
void test() {
final Circuit circuit = new Circuit();
final Battery battery = circuit.addPart(new Battery(RASTER(0, 0)));
final Light light = circuit.addPart(new Light(RASTER(0, 1)));
final Battery battery = circuit.addPart(new Battery(RASTER(0, 0), Orientation.R0));
final Light light = circuit.addPart(new Light(RASTER(0, 1), Orientation.R0));
circuit.connect(battery.getMinus(), light.getA());
circuit.connect(battery.getPlus(), light.getB());

View File

@ -2,8 +2,9 @@ package de.ph87.electro.circuit.io;
import de.ph87.electro.circuit.Circuit;
import de.ph87.electro.circuit.CircuitIOService;
import de.ph87.electro.circuit.part.node.Node;
import de.ph87.electro.circuit.part.Orientation;
import de.ph87.electro.circuit.part.Part;
import de.ph87.electro.circuit.part.node.Node;
import de.ph87.electro.circuit.part.parts.Battery;
import de.ph87.electro.circuit.part.parts.Light;
import org.junit.jupiter.api.Test;
@ -23,8 +24,8 @@ class CircuitIOServiceTest {
@Test
void serialization() throws IOException {
final Circuit circuit = new Circuit();
final Battery battery = circuit.addPart(new Battery(RASTER(0, 0)));
final Light light = circuit.addPart(new Light(RASTER(0, 1)));
final Battery battery = circuit.addPart(new Battery(RASTER(0, 0), Orientation.R0));
final Light light = circuit.addPart(new Light(RASTER(0, 1), Orientation.R0));
circuit.connect(battery.getPlus(), light.getB());
circuit.connect(light.getA(), battery.getMinus());
check(circuit);

View File

@ -1,6 +1,7 @@
package de.ph87.electro.circuit.part.parts;
import de.ph87.electro.circuit.Circuit;
import de.ph87.electro.circuit.part.Orientation;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
@ -14,9 +15,9 @@ public class BatteryLightTest {
private static final Circuit CIRCUIT = new Circuit();
private static final Battery battery = CIRCUIT.addPart(new Battery(RASTER(0, 0)));
private static final Battery battery = CIRCUIT.addPart(new Battery(RASTER(0, 0), Orientation.R0));
private static final Light light = CIRCUIT.addPart(new Light(RASTER(0, 1)));
private static final Light light = CIRCUIT.addPart(new Light(RASTER(0, 1), Orientation.R0));
@BeforeAll
public static void setUp() {

View File

@ -1,6 +1,7 @@
package de.ph87.electro.circuit.part.parts;
import de.ph87.electro.circuit.Circuit;
import de.ph87.electro.circuit.part.Orientation;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
@ -15,11 +16,11 @@ public class BatterySwitcher1x1Test {
private static final Circuit CIRCUIT = new Circuit();
private static final Battery battery = CIRCUIT.addPart(new Battery(RASTER(0, 0)));
private static final Battery battery = CIRCUIT.addPart(new Battery(RASTER(0, 0), Orientation.R0));
private static final Switch1x1 switcher = CIRCUIT.addPart(new Switch1x1(RASTER(0, 1)));
private static final Switch1x1 switcher = CIRCUIT.addPart(new Switch1x1(RASTER(0, 1), Orientation.R0));
private static final Light light = CIRCUIT.addPart(new Light(RASTER(1, 0)));
private static final Light light = CIRCUIT.addPart(new Light(RASTER(1, 0), Orientation.R0));
@BeforeAll
public static void setUp() {

View File

@ -1,6 +1,7 @@
package de.ph87.electro.circuit.part.parts;
import de.ph87.electro.circuit.Circuit;
import de.ph87.electro.circuit.part.Orientation;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
@ -15,13 +16,13 @@ public class BatterySwitcher1x2Test {
private static final Circuit CIRCUIT = new Circuit();
private static final Battery battery = CIRCUIT.addPart(new Battery(RASTER(0, 0)));
private static final Battery battery = CIRCUIT.addPart(new Battery(RASTER(0, 0), Orientation.R0));
private static final Switch1x2 switcher = CIRCUIT.addPart(new Switch1x2(RASTER(0, 2)));
private static final Switch1x2 switcher = CIRCUIT.addPart(new Switch1x2(RASTER(0, 2), Orientation.R0));
private static final Light light0 = CIRCUIT.addPart(new Light(RASTER(1, 1)));
private static final Light light0 = CIRCUIT.addPart(new Light(RASTER(1, 1), Orientation.R0));
private static final Light light1 = CIRCUIT.addPart(new Light(RASTER(1, 3)));
private static final Light light1 = CIRCUIT.addPart(new Light(RASTER(1, 3), Orientation.R0));
@BeforeAll
public static void setUp() {

View File

@ -1,6 +1,7 @@
package de.ph87.electro.circuit.part.parts;
import de.ph87.electro.circuit.Circuit;
import de.ph87.electro.circuit.part.Orientation;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
@ -15,13 +16,13 @@ public class BatterySwitcher2x2Test {
private static final Circuit CIRCUIT = new Circuit();
private static final Battery battery = CIRCUIT.addPart(new Battery(RASTER(0, 0)));
private static final Battery battery = CIRCUIT.addPart(new Battery(RASTER(0, 0), Orientation.R0));
private static final Switch1x2 switcher0 = CIRCUIT.addPart(new Switch1x2(RASTER(0, 1)));
private static final Switch1x2 switcher0 = CIRCUIT.addPart(new Switch1x2(RASTER(0, 1), Orientation.R0));
private static final Switch1x2 switcher1 = CIRCUIT.addPart(new Switch1x2(RASTER(1, 1)));
private static final Switch1x2 switcher1 = CIRCUIT.addPart(new Switch1x2(RASTER(1, 1), Orientation.R0));
private static final Light light = CIRCUIT.addPart(new Light(RASTER(1, 0)));
private static final Light light = CIRCUIT.addPart(new Light(RASTER(1, 0), Orientation.R0));
@BeforeAll
public static void setUp() {

View File

@ -1,6 +1,7 @@
package de.ph87.electro.circuit.part.parts;
import de.ph87.electro.circuit.Circuit;
import de.ph87.electro.circuit.part.Orientation;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
@ -15,15 +16,15 @@ public class BatterySwitcherCrossTest {
private static final Circuit CIRCUIT = new Circuit();
private static final Battery battery = CIRCUIT.addPart(new Battery(RASTER(0, 0)));
private static final Battery battery = CIRCUIT.addPart(new Battery(RASTER(0, 0), Orientation.R0));
private static final Switch1x2 switcher0 = CIRCUIT.addPart(new Switch1x2(RASTER(0, 1)));
private static final Switch1x2 switcher0 = CIRCUIT.addPart(new Switch1x2(RASTER(0, 1), Orientation.R0));
private static final SwitchCross switcherX = CIRCUIT.addPart(new SwitchCross(RASTER(1, 1)));
private static final SwitchCross switcherX = CIRCUIT.addPart(new SwitchCross(RASTER(1, 1), Orientation.R0));
private static final Switch1x2 switcher1 = CIRCUIT.addPart(new Switch1x2(RASTER(2, 1)));
private static final Switch1x2 switcher1 = CIRCUIT.addPart(new Switch1x2(RASTER(2, 1), Orientation.R0));
private static final Light light = CIRCUIT.addPart(new Light(RASTER(2, 0)));
private static final Light light = CIRCUIT.addPart(new Light(RASTER(2, 0), Orientation.R0));
@BeforeAll
public static void setUp() {