|
@@ -15,13 +15,12 @@ import java.util.HashSet;
|
|
import java.util.Optional;
|
|
import java.util.Optional;
|
|
import java.util.Set;
|
|
import java.util.Set;
|
|
import java.util.logging.Logger;
|
|
import java.util.logging.Logger;
|
|
-import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
public class Canvas extends JPanel {
|
|
public class Canvas extends JPanel {
|
|
private static final Logger log = Logger.getLogger(Canvas.class.getName());
|
|
private static final Logger log = Logger.getLogger(Canvas.class.getName());
|
|
- private GroupNode groupNode;
|
|
|
|
private final Control control;
|
|
private final Control control;
|
|
private final CanvasMouseListener canvasMouseListener = new CanvasMouseListener();
|
|
private final CanvasMouseListener canvasMouseListener = new CanvasMouseListener();
|
|
|
|
+ private GroupNode groupNode;
|
|
private boolean enabled = true;
|
|
private boolean enabled = true;
|
|
|
|
|
|
|
|
|
|
@@ -38,10 +37,6 @@ public class Canvas extends JPanel {
|
|
this.addMouseMotionListener(canvasMouseListener);
|
|
this.addMouseMotionListener(canvasMouseListener);
|
|
}
|
|
}
|
|
|
|
|
|
- public void setGroupNode(GroupNode groupNode){
|
|
|
|
- this.groupNode = groupNode;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
public static Rectangle getBoundsOfObject(AbstractCanvasObject obj) {
|
|
public static Rectangle getBoundsOfObject(AbstractCanvasObject obj) {
|
|
int pictureScale = GuiSettings.getPictureScale();
|
|
int pictureScale = GuiSettings.getPictureScale();
|
|
int pictureScaleDiv2 = GuiSettings.getPictureScaleDiv2();
|
|
int pictureScaleDiv2 = GuiSettings.getPictureScaleDiv2();
|
|
@@ -57,24 +52,16 @@ public class Canvas extends JPanel {
|
|
return this.groupNode;
|
|
return this.groupNode;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public void setGroupNode(GroupNode groupNode) {
|
|
|
|
+ this.groupNode = groupNode;
|
|
|
|
+ }
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public void paintComponent(java.awt.Graphics g) {
|
|
public void paintComponent(java.awt.Graphics g) {
|
|
super.paintComponent(g);
|
|
super.paintComponent(g);
|
|
Graphics2D g2d = Rendering.initGraphics2D(g);
|
|
Graphics2D g2d = Rendering.initGraphics2D(g);
|
|
Rendering.drawSelection(g2d);
|
|
Rendering.drawSelection(g2d);
|
|
- control.getModel().getEdgesOnCanvas().forEach(edge -> {
|
|
|
|
- if (edge.getA().getGroupNode().isEmpty() || edge.getB().getGroupNode().isEmpty()){
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- boolean edgeAinside = edge.getA().getGroupNode().get() == groupNode;
|
|
|
|
- boolean edgeBinside = edge.getB().getGroupNode().get() == groupNode;
|
|
|
|
- //both
|
|
|
|
- if (edgeAinside && edgeBinside) {
|
|
|
|
- Rendering.drawEdge(g2d, edge);
|
|
|
|
- }
|
|
|
|
- //TODO(Tom2022-01-16): oneside
|
|
|
|
- //none
|
|
|
|
- });
|
|
|
|
|
|
+ paintEdges(g2d);
|
|
groupNode.getHolonObjects().forEach(hO -> Rendering.drawHolonObject(g2d, hO));
|
|
groupNode.getHolonObjects().forEach(hO -> Rendering.drawHolonObject(g2d, hO));
|
|
groupNode.getSwitches().forEach(hS -> Rendering.drawSwitchObject(g2d, hS));
|
|
groupNode.getSwitches().forEach(hS -> Rendering.drawSwitchObject(g2d, hS));
|
|
groupNode.getGroupNodes().forEach(groupNode -> Rendering.drawGroupNode(g2d, groupNode));
|
|
groupNode.getGroupNodes().forEach(groupNode -> Rendering.drawGroupNode(g2d, groupNode));
|
|
@@ -83,8 +70,47 @@ public class Canvas extends JPanel {
|
|
case BoxSelection -> Rendering.drawSelectionBox(g2d, canvasMouseListener.getRectangleOfSelectionBox());
|
|
case BoxSelection -> Rendering.drawSelectionBox(g2d, canvasMouseListener.getRectangleOfSelectionBox());
|
|
case EdgeCreation -> Rendering.drawNewEdgeLine(g2d, canvasMouseListener.selectedOnPressed.getPosition(), canvasMouseListener.lastPosition);
|
|
case EdgeCreation -> Rendering.drawNewEdgeLine(g2d, canvasMouseListener.selectedOnPressed.getPosition(), canvasMouseListener.lastPosition);
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
|
|
+ private void paintEdges(Graphics2D g2d) {
|
|
|
|
+ control.getModel().getEdgesOnCanvas().forEach(edge -> {
|
|
|
|
+ if (edge.getA().getGroupNode().isEmpty() || edge.getB().getGroupNode().isEmpty()) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ boolean aInside = edge.getA().getGroupNode().get() == groupNode;
|
|
|
|
+ boolean bInside = edge.getB().getGroupNode().get() == groupNode;
|
|
|
|
+ //both
|
|
|
|
+ if (aInside && bInside) {
|
|
|
|
+ Rendering.drawEdge(g2d, edge, edge.getA(), edge.getB());
|
|
|
|
+ } else if (aInside) {
|
|
|
|
+ SearchObjectIfParentOfGroupNode(edge.getB()).ifPresentOrElse(
|
|
|
|
+ alternative -> Rendering.drawEdge(g2d, edge, edge.getA(), alternative),
|
|
|
|
+ () -> Rendering.drawExternConnection(g2d, edge.getA()));
|
|
|
|
+ } else if (bInside) {
|
|
|
|
+ SearchObjectIfParentOfGroupNode(edge.getA()).ifPresentOrElse(
|
|
|
|
+ alternative -> Rendering.drawEdge(g2d, edge, alternative, edge.getB()),
|
|
|
|
+ () -> Rendering.drawExternConnection(g2d, edge.getB()));
|
|
|
|
+ } else {
|
|
|
|
+ Optional<AbstractCanvasObject> alternativeA = SearchObjectIfParentOfGroupNode(edge.getA());
|
|
|
|
+ Optional<AbstractCanvasObject> alternativeB = SearchObjectIfParentOfGroupNode(edge.getB());
|
|
|
|
+ if (alternativeA.isPresent() && alternativeB.isPresent() && !alternativeA.equals(alternativeB)) {
|
|
|
|
+ Rendering.drawEdge(g2d, edge, alternativeA.get(), alternativeB.get());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //none
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private Optional<AbstractCanvasObject> SearchObjectIfParentOfGroupNode(AbstractCanvasObject current) {
|
|
|
|
+ while (current.getGroupNode().isPresent()) {
|
|
|
|
+ if (current.getGroupNode().get() == this.groupNode) {
|
|
|
|
+ return Optional.of(current);
|
|
|
|
+ }
|
|
|
|
+ ;
|
|
|
|
+ current = current.getGroupNode().get();
|
|
|
|
+ }
|
|
|
|
+ return Optional.empty();
|
|
}
|
|
}
|
|
|
|
|
|
private Optional<AbstractCanvasObject> getObjectAtPosition(Vec2i pos) {
|
|
private Optional<AbstractCanvasObject> getObjectAtPosition(Vec2i pos) {
|
|
@@ -189,9 +215,9 @@ public class Canvas extends JPanel {
|
|
}
|
|
}
|
|
case EdgeCreation -> {
|
|
case EdgeCreation -> {
|
|
getObjectAtPosition(lastPosition).ifPresentOrElse(obj -> {
|
|
getObjectAtPosition(lastPosition).ifPresentOrElse(obj -> {
|
|
- if(control.addEdgeOnCanvas(new Edge(selectedOnPressed, obj, GuiSettings.maxCapacityForNewCreatedEdges))){
|
|
|
|
- control.calculateStateAndVisualForCurrentTimeStep();
|
|
|
|
- }
|
|
|
|
|
|
+ if (control.addEdgeOnCanvas(new Edge(selectedOnPressed, obj, GuiSettings.maxCapacityForNewCreatedEdges))) {
|
|
|
|
+ control.calculateStateAndVisualForCurrentTimeStep();
|
|
|
|
+ }
|
|
}, () -> {
|
|
}, () -> {
|
|
Node node = new Node("Node");
|
|
Node node = new Node("Node");
|
|
groupNode.add(node);
|
|
groupNode.add(node);
|
|
@@ -215,7 +241,7 @@ public class Canvas extends JPanel {
|
|
sw.setMode(HolonSwitch.SwitchMode.Manual);
|
|
sw.setMode(HolonSwitch.SwitchMode.Manual);
|
|
sw.flipManualState();
|
|
sw.flipManualState();
|
|
control.calculateStateAndVisualForCurrentTimeStep();
|
|
control.calculateStateAndVisualForCurrentTimeStep();
|
|
- } else if(obj instanceof GroupNode gNode){
|
|
|
|
|
|
+ } else if (obj instanceof GroupNode gNode) {
|
|
control.showGroupNode(gNode);
|
|
control.showGroupNode(gNode);
|
|
}
|
|
}
|
|
});
|
|
});
|