diff --git a/build.gradle b/build.gradle index eb3e7f8..c7c139a 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ repositories { } dependencies { - compile 'com.fasterxml.jackson.core:jackson-databind:2.5.3' + compile "com.fasterxml.jackson.module:jackson-module-kotlin:2.8.7" compile 'com.neuronrobotics:nrjavaserial:3.11.0' compile 'com.pi4j:pi4j-core:1.0' compile 'commons-cli:commons-cli:1.3.1' diff --git a/src/main/java/com/easternedgerobotics/rov/Topside.java b/src/main/java/com/easternedgerobotics/rov/Topside.java index cb7bae9..4939e4e 100644 --- a/src/main/java/com/easternedgerobotics/rov/Topside.java +++ b/src/main/java/com/easternedgerobotics/rov/Topside.java @@ -2,6 +2,7 @@ import com.easternedgerobotics.rov.config.CameraCalibrationConfig; import com.easternedgerobotics.rov.config.Config; +import com.easternedgerobotics.rov.config.DistanceCalculatorConfig; import com.easternedgerobotics.rov.config.JoystickConfig; import com.easternedgerobotics.rov.config.LaunchConfig; import com.easternedgerobotics.rov.config.SliderConfig; @@ -23,6 +24,7 @@ import com.easternedgerobotics.rov.io.arduino.ArduinoPort; import com.easternedgerobotics.rov.io.joystick.JoystickController; import com.easternedgerobotics.rov.io.joystick.LogitechExtremeJoystickSource; +import com.easternedgerobotics.rov.math.DistanceCalculator; import com.easternedgerobotics.rov.value.CameraCalibrationValue; import com.easternedgerobotics.rov.value.MotionPowerValue; import com.easternedgerobotics.rov.video.CameraCalibration; @@ -115,16 +117,23 @@ public void init() throws SocketException, UnknownHostException { configSource.getConfig("videoDecoder", VideoDecoderConfig.class)); + final ValueStore cameraCalibrationStore = ValueStore.of( + CameraCalibrationValue.class, config.preferencesHome()); + cameraCalibration = new CameraCalibration( eventPublisher, configSource.getConfig("cameraCalibration", CameraCalibrationConfig.class), - ValueStore.of(CameraCalibrationValue.class, config.preferencesHome()), + cameraCalibrationStore, Schedulers.newThread()); fileReceiver = new TcpFileReceiver( launchConfig.fileReceiverPort(), launchConfig.fileReceiverSocketBacklog()); + final DistanceCalculator distanceCalculator = new DistanceCalculator( + configSource.getConfig("distanceCalculator", DistanceCalculatorConfig.class), + cameraCalibrationStore); + viewLoader = new ViewLoader(MainView.class, "Control Software", new HashMap, Object>() { { put(EventPublisher.class, eventPublisher); @@ -132,6 +141,7 @@ public void init() throws SocketException, UnknownHostException { put(EmergencyStopController.class, emergencyStopController); put(VideoDecoder.class, videoDecoder); put(CameraCalibration.class, cameraCalibration); + put(DistanceCalculator.class, distanceCalculator); } }); diff --git a/src/main/java/com/easternedgerobotics/rov/fx/DistanceCalculatorView.java b/src/main/java/com/easternedgerobotics/rov/fx/DistanceCalculatorView.java index 2c4f2f4..5d9f93f 100644 --- a/src/main/java/com/easternedgerobotics/rov/fx/DistanceCalculatorView.java +++ b/src/main/java/com/easternedgerobotics/rov/fx/DistanceCalculatorView.java @@ -1,8 +1,13 @@ package com.easternedgerobotics.rov.fx; +import com.easternedgerobotics.rov.fx.distance.AxisNode; +import com.easternedgerobotics.rov.fx.distance.TextNode; + import javafx.geometry.Insets; import javafx.scene.Parent; import javafx.scene.control.Button; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; import javafx.scene.layout.Border; import javafx.scene.layout.BorderPane; import javafx.scene.layout.BorderStroke; @@ -10,11 +15,14 @@ import javafx.scene.layout.BorderWidths; import javafx.scene.layout.CornerRadii; import javafx.scene.layout.HBox; +import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.concurrent.atomic.AtomicReference; import javax.inject.Inject; public final class DistanceCalculatorView implements View { @@ -24,11 +32,17 @@ public final class DistanceCalculatorView implements View { static final double RADIUS = 3; + static final int SELECTION_WIDTH = 300; + final BorderPane galleryBorderPane = new BorderPane(); + final BorderPane calculatorBorderPane = new BorderPane(); + + final HBox mainPanel = new HBox(); + final HBox buttonPanel = new HBox(); - final VBox mainPanel = new VBox(); + final VBox imageSelectionPanel = new VBox(); final BorderPane borderPane = new BorderPane(); @@ -36,6 +50,16 @@ public final class DistanceCalculatorView implements View { final Button captureB = new Button("Capture B"); + final Button calculateButton = new Button("Calculate"); + + final ImageView imageView = new ImageView(); + + final StackPane imageStack = new StackPane(); + + final AtomicReference axisNode = new AtomicReference<>(new AxisNode()); + + final List imagePoints = new ArrayList<>(); + @Inject public DistanceCalculatorView() { final List