Browse Source

Edge Creation

TomTroppmann 2 years ago
parent
commit
07881a7bf3

+ 3 - 4
build.gradle

@@ -17,12 +17,11 @@ dependencies {
     implementation 'org.apache.commons:commons-email:1.5'
     implementation 'org.wso2.orbit.org.apache.commons:commons-compress:1.18.0.wso2v1'
     implementation 'org.knowm.xchart:xchart:3.8.1'
-    implementation 'com.miglayout:miglayout-swing:5.0'
-    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.2'
-    testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.7.2'
+    implementation 'com.miglayout:miglayout-swing:11.0'
+    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
+    testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
 }
 
 test {
     useJUnitPlatform()
-    testLogging.showStandardStreams = true
 }

+ 45 - 42
src/holeg/ui/view/canvas/Canvas.java

@@ -1,8 +1,6 @@
 package holeg.ui.view.canvas;
 
-import holeg.model.AbstractCanvasObject;
-import holeg.model.GroupNode;
-import holeg.model.HolonSwitch;
+import holeg.model.*;
 import holeg.ui.controller.Control;
 import holeg.ui.model.GuiSettings;
 import holeg.utility.math.vector.Geometry;
@@ -18,11 +16,6 @@ import java.util.Optional;
 import java.util.Set;
 import java.util.logging.Logger;
 
-/**
- * This Class is the Canvas. All Objects will be visualized here
- *
- * @author Gruppe14
- */
 public class Canvas extends JPanel {
     private static final Logger log = Logger.getLogger(Canvas.class.getName());
     private final GroupNode groupNode;
@@ -59,13 +52,9 @@ public class Canvas extends JPanel {
     @Override
     public void paintComponent(java.awt.Graphics g) {
         super.paintComponent(g);
+        log.info("Draw");
         Graphics2D g2d = Rendering.initGraphics2D(g);
         Rendering.drawSelection(g2d);
-        log.info("Draw");
-        groupNode.getHolonObjects().forEach(hO -> Rendering.drawHolonObject(g2d, hO));
-        groupNode.getSwitches().forEach(hS -> Rendering.drawSwitchObject(g2d, hS));
-        groupNode.getGroupNodes().forEach(groupNode -> Rendering.drawGroupNode(g2d, groupNode));
-        groupNode.getNodes().forEach(node -> Rendering.drawNode(g2d, node));
         control.getModel().getEdgesOnCanvas().forEach(edge -> {
             boolean edgeAinside = edge.getA().getGroupNode().get() == groupNode;
             boolean edgeBinside = edge.getB().getGroupNode().get() == groupNode;
@@ -76,10 +65,16 @@ public class Canvas extends JPanel {
             //TODO(Tom2022-01-16): oneside
             //none
         });
-
-        if (listener.state == CanvasMouseListener.State.BoxSelection) {
-            Rendering.drawSelectionBox(g2d, listener.getRectangleOfSelectionBox());
+        groupNode.getHolonObjects().forEach(hO -> Rendering.drawHolonObject(g2d, hO));
+        groupNode.getSwitches().forEach(hS -> Rendering.drawSwitchObject(g2d, hS));
+        groupNode.getGroupNodes().forEach(groupNode -> Rendering.drawGroupNode(g2d, groupNode));
+        groupNode.getNodes().forEach(node -> Rendering.drawNode(g2d, node));
+        switch (listener.state) {
+            case BoxSelection -> Rendering.drawSelectionBox(g2d, listener.getRectangleOfSelectionBox());
+            case EdgeCreation -> Rendering.drawNewEdgeLine(g2d, listener.selectedOnPressed.getPosition(), listener.lastPosition);
         }
+
+
     }
 
     private Optional<AbstractCanvasObject> getObjectAtPosition(Vec2i pos) {
@@ -101,6 +96,7 @@ public class Canvas extends JPanel {
         private Vec2i pressedPosition = new Vec2i();
         private Set<AbstractCanvasObject> selectionBeforeBoxSelection = new HashSet<>();
         private State state = State.None;
+        private AbstractCanvasObject selectedOnPressed = null;
 
         @Override
         public void mousePressed(MouseEvent e) {
@@ -108,7 +104,7 @@ public class Canvas extends JPanel {
                 return;
             }
             log.info(state.toString());
-            if(!e.isControlDown()){
+            if (!e.isControlDown()) {
                 GuiSettings.getSelectedObjects().clear();
             }
             Vec2i pos = new Vec2i(e.getPoint());
@@ -117,6 +113,7 @@ public class Canvas extends JPanel {
                     state = State.Selection;
                     GuiSettings.getSelectedObjects().add(obj);
                 }
+                selectedOnPressed = obj;
             }, () -> {
                 state = State.BoxSelection;
                 selectionBeforeBoxSelection = Set.copyOf(GuiSettings.getSelectedObjects());
@@ -125,25 +122,6 @@ public class Canvas extends JPanel {
             lastPosition = pressedPosition = pos;
         }
 
-        @Override
-        public void mouseReleased(MouseEvent e) {
-            if (!enabled) {
-                return;
-            }
-            log.info(state.toString());
-            if (state == State.None) {
-                getObjectAtPosition(lastPosition).ifPresent(obj -> {
-                    if (GuiSettings.getSelectedObjects().contains(obj)) {
-                        control.removeObjectFromSelection(obj);
-                    } else {
-                        control.addSelectedObject(obj);
-                    }
-                });
-            }
-            state = State.None;
-            repaint();
-        }
-
         @Override
         public void mouseDragged(MouseEvent e) {
             if (!enabled) {
@@ -180,17 +158,38 @@ public class Canvas extends JPanel {
                     GuiSettings.getSelectedObjects().forEach(obj -> obj.getPosition().addAssign(delta));
                     repaint();
                 }
-                case EdgeCreation -> {
-                    log.info("Edge Creation");
-                    repaint();
-                }
+                case EdgeCreation -> repaint();
             }
             lastPosition = actualPos;
 
         }
 
-        Rectangle getRectangleOfSelectionBox() {
-            return Geometry.createRectangleFromCorners(lastPosition, pressedPosition);
+        @Override
+        public void mouseReleased(MouseEvent e) {
+            if (!enabled) {
+                return;
+            }
+            log.info(state.toString());
+            switch (state) {
+                case None -> {
+                    if (GuiSettings.getSelectedObjects().contains(selectedOnPressed)) {
+                        control.removeObjectFromSelection(selectedOnPressed);
+                    } else {
+                        control.addSelectedObject(selectedOnPressed);
+                    }
+                }
+                case EdgeCreation -> {
+                    getObjectAtPosition(lastPosition).ifPresentOrElse(obj -> control.addEdgeOnCanvas(new Edge(selectedOnPressed, obj, GuiSettings.maxCapacityForNewCreatedEdges)), () -> {
+                        Node node = new Node("Node");
+                        groupNode.add(node);
+                        node.setPosition(new Vec2i(lastPosition));
+                        control.addEdgeOnCanvas(new Edge(selectedOnPressed, node, GuiSettings.maxCapacityForNewCreatedEdges));
+                    });
+                    control.calculateStateAndVisualForCurrentTimeStep();
+                }
+            }
+            state = State.None;
+            repaint();
         }
 
         @Override
@@ -208,6 +207,10 @@ public class Canvas extends JPanel {
             }
         }
 
+        Rectangle getRectangleOfSelectionBox() {
+            return Geometry.createRectangleFromCorners(lastPosition, pressedPosition);
+        }
+
         @Override
         public void mouseEntered(MouseEvent e) {
         }

+ 8 - 0
src/holeg/ui/view/canvas/Rendering.java

@@ -90,6 +90,14 @@ class Rendering {
         g.drawString(currentEnergy + "/" + (unlimited ? "\u221E" : capacity), middle.getX(), middle.getY());
     }
 
+    static void drawNewEdgeLine(Graphics2D g, Vec2i start, Vec2i end){
+        g.setStroke(TwoPixelStroke);
+        g.setColor(ColorPreference.Edge.Working);
+        g.drawLine(start.getX(), start.getY(), end.getX(), end.getY());
+    }
+
+
+
     static void drawGroupNode(Graphics2D g, GroupNode groupNode) {
         Vec2i pos = groupNode.getPosition();
         g.setColor(Color.gray);

+ 2 - 2
src/holeg/utility/pooling/Pool.java

@@ -8,8 +8,8 @@ import java.util.stream.Stream;
 public abstract class Pool<T> {
 	int borrowedCount = 0;
 	private int poolCapacity = 1000;
-	private ArrayList<T> poolList = new ArrayList<T>(poolCapacity);
-	private ArrayList<T> borrowedList = new ArrayList<T>(poolCapacity);
+	private final ArrayList<T> poolList = new ArrayList<>(poolCapacity);
+	private final ArrayList<T> borrowedList = new ArrayList<>(poolCapacity);
 	
 	
 	public abstract T create();