Skip to content

Commit 83a7881

Browse files
authored
Merge pull request #322 from EasternEdgeRobotics/distance-tool-remove-node
Distance tool remove node and scale x axis
2 parents ffd6022 + af65f21 commit 83a7881

5 files changed

Lines changed: 41 additions & 7 deletions

File tree

src/main/java/com/easternedgerobotics/rov/fx/DistanceCalculatorView.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import javafx.geometry.Insets;
77
import javafx.scene.Parent;
88
import javafx.scene.control.Button;
9+
import javafx.scene.control.TextField;
910
import javafx.scene.image.Image;
1011
import javafx.scene.image.ImageView;
1112
import javafx.scene.layout.Border;
@@ -52,6 +53,8 @@ public final class DistanceCalculatorView implements View {
5253

5354
final Button calculateButton = new Button("Calculate");
5455

56+
final TextField xAxisLength = new TextField();
57+
5558
final ImageView imageView = new ImageView();
5659

5760
final StackPane imageStack = new StackPane();
@@ -70,6 +73,9 @@ public DistanceCalculatorView() {
7073
buttonPanel.getChildren().addAll(buttons);
7174
calculateButton.setPrefHeight(BUTTON_HEIGHT);
7275
calculateButton.prefWidthProperty().bind(buttonPanel.widthProperty());
76+
xAxisLength.setPrefHeight(BUTTON_HEIGHT);
77+
xAxisLength.prefWidthProperty().bind(buttonPanel.widthProperty());
78+
xAxisLength.setPromptText("X Axis Length");
7379

7480
galleryBorderPane.setBorder(new Border(new BorderStroke(Color.GRAY,
7581
BorderStrokeStyle.SOLID, new CornerRadii(RADIUS), BorderWidths.DEFAULT)));
@@ -78,7 +84,7 @@ public DistanceCalculatorView() {
7884

7985
imageSelectionPanel.setPadding(new Insets(PADDING, PADDING, PADDING, PADDING));
8086
imageSelectionPanel.setSpacing(PADDING);
81-
imageSelectionPanel.getChildren().addAll(buttonPanel, calculateButton, galleryBorderPane);
87+
imageSelectionPanel.getChildren().addAll(buttonPanel, xAxisLength, calculateButton, galleryBorderPane);
8288
imageSelectionPanel.setMaxWidth(SELECTION_WIDTH);
8389
imageSelectionPanel.setMinWidth(SELECTION_WIDTH);
8490

src/main/java/com/easternedgerobotics/rov/fx/DistanceCalculatorViewController.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -177,10 +177,17 @@ public void setImageFromPath(final Path path) {
177177
}
178178
final Observable<Boolean> calcPress = JavaFxObservable.valuesOf(view.calculateButton.pressedProperty());
179179
currentDistanceSubscriptions.add(calcPress.filter(x -> !x).skip(1).subscribe(x -> {
180+
final String scalarString = view.xAxisLength.getText();
181+
final float scalar;
182+
try {
183+
scalar = Float.parseFloat(scalarString);
184+
} catch (final NumberFormatException e) {
185+
return;
186+
}
180187
final AxisValue axis = view.axisNode.get().getAxis();
181188
final List<PointValue> pixelPoints = view.imagePoints
182189
.stream().map(TextNode::getPoint).collect(Collectors.toList());
183-
distanceCalculator.calculate(axis, pixelPoints, cameraName).ifPresent(objectPoints -> {
190+
distanceCalculator.calculate(axis, pixelPoints, cameraName, scalar).ifPresent(objectPoints -> {
184191
for (int i = 0; i < objectPoints.size(); i++) {
185192
view.imagePoints.get(i).setText(String.format("(%.2f, %.2f)",
186193
objectPoints.get(i).getX(), objectPoints.get(i).getY()));
@@ -214,17 +221,31 @@ public void setImageFromPath(final Path path) {
214221
.share();
215222

216223
currentDistanceSubscriptions.add(JavaFxObservable.actionEventsOf(axis).withLatestFrom(events, (a, e) -> e)
217-
.subscribe(event -> {
224+
.take(1).subscribe(event -> {
218225
final AxisNode axisNode = new AxisNode();
219226
view.axisNode.set(axisNode);
220227
shapeScene.add(axisNode, event.getX(), event.getY());
228+
contextMenu.getItems().remove(axis);
221229
}));
222230

223231
currentDistanceSubscriptions.add(JavaFxObservable.actionEventsOf(point).withLatestFrom(events, (a, e) -> e)
224232
.subscribe(event -> {
225-
final TextNode imagePoint = new TextNode(new Circle(7, Color.CHARTREUSE));
233+
final TextNode imagePoint = new TextNode(new Circle(7, Color.DEEPPINK));
226234
view.imagePoints.add(imagePoint);
227235
shapeScene.add(imagePoint, event.getX(), event.getY());
236+
final ContextMenu pointMenu = new ContextMenu();
237+
final MenuItem delete = new MenuItem("Delete");
238+
pointMenu.getItems().addAll(delete);
239+
currentDistanceSubscriptions.add(JavaFxObservable
240+
.eventsOf(imagePoint.getHandleShape(), EventType.ROOT)
241+
.filter(e -> e.getEventType().equals(MouseEvent.MOUSE_CLICKED))
242+
.cast(MouseEvent.class)
243+
.filter(e -> e.getButton().equals(MouseButton.SECONDARY))
244+
.subscribe(e -> pointMenu.show(imagePoint.getHandleShape(), e.getScreenX(), e.getScreenY())));
245+
currentDistanceSubscriptions.add(JavaFxObservable.actionEventsOf(delete).take(1).subscribe(e -> {
246+
view.imagePoints.remove(imagePoint);
247+
shapeScene.remove(imagePoint);
248+
}));
228249
}));
229250

230251
} catch (final IOException e) {

src/main/java/com/easternedgerobotics/rov/fx/MainViewController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ public final void onCreate() {
9595
JavaFxObservable.valuesOf(view.resetCameraButton.pressedProperty()).filter(x -> !x)
9696
.subscribe(v -> videoDecoder.restart());
9797
JavaFxObservable.valuesOf(view.distanceButton.pressedProperty()).filter(x -> !x)
98-
.subscribe(v -> viewLoader.load(DistanceCalculatorView.class, "Distance Calculator"));
98+
.subscribe(v -> viewLoader.load(DistanceCalculatorView.class, "Deep Pink Distance Tool"));
9999
JavaFxObservable.valuesOf(view.calibrationButton.pressedProperty()).filter(x -> !x)
100100
.subscribe(v -> viewLoader.load(CameraCalibrationView.class, "California Camera Calibration by Cal"));
101101
JavaFxObservable.valuesOf(view.bluetoothButton.pressedProperty()).filter(x -> !x)

src/main/java/com/easternedgerobotics/rov/fx/distance/ShapeScene.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@ public void add(final ShapeNode node, final double containerX, final double cont
6262
draw(node);
6363
}
6464

65+
public void remove(final ShapeNode node) {
66+
children.remove(node);
67+
stack.getChildren().removeAll(node.getDrawnShapes());
68+
draw();
69+
}
70+
6571
/**
6672
* Set up movement subscriptions for the node and add drawables to the scene.
6773
*

src/main/java/com/easternedgerobotics/rov/math/DistanceCalculator.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ public DistanceCalculator(
4545
public Optional<List<PointValue>> calculate(
4646
final AxisValue axis,
4747
final List<PointValue> points,
48-
final String cameraName
48+
final String cameraName,
49+
final float scalar
4950
) {
5051
return store.get(cameraName).map(calibration -> {
5152
/**
@@ -242,7 +243,7 @@ public Optional<List<PointValue>> calculate(
242243

243244
final DoubleIndexer objectPointIndexer = objectPoint.createIndexer();
244245

245-
return new PointValue(objectPointIndexer.get(0, 0), objectPointIndexer.get(1, 0));
246+
return new PointValue(objectPointIndexer.get(0, 0) * scalar, objectPointIndexer.get(1, 0) * scalar);
246247
}).collect(Collectors.toList());
247248
});
248249
}

0 commit comments

Comments
 (0)