From 96006fc50165ac216ce153bd51e0f3e7c718523a Mon Sep 17 00:00:00 2001 From: Chris Gerth Date: Sat, 24 Dec 2022 18:57:26 -0600 Subject: [PATCH] Fix misplaced crosshair when rotated +-90 degrees (#646) --- .../vision/pipe/impl/Draw2dCrosshairPipe.java | 18 ++++++++++++++++-- .../vision/pipeline/ColoredShapePipeline.java | 3 ++- .../vision/pipeline/DriverModePipeline.java | 2 +- .../vision/pipeline/OutputStreamPipeline.java | 3 ++- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/photon-core/src/main/java/org/photonvision/vision/pipe/impl/Draw2dCrosshairPipe.java b/photon-core/src/main/java/org/photonvision/vision/pipe/impl/Draw2dCrosshairPipe.java index 02f8755c1..913ad5dd2 100644 --- a/photon-core/src/main/java/org/photonvision/vision/pipe/impl/Draw2dCrosshairPipe.java +++ b/photon-core/src/main/java/org/photonvision/vision/pipe/impl/Draw2dCrosshairPipe.java @@ -27,6 +27,7 @@ import org.photonvision.common.util.ColorHelper; import org.photonvision.vision.frame.FrameDivisor; import org.photonvision.vision.frame.FrameStaticProperties; import org.photonvision.vision.opencv.DualOffsetValues; +import org.photonvision.vision.opencv.ImageRotationMode; import org.photonvision.vision.pipe.MutatingPipe; import org.photonvision.vision.target.RobotOffsetPointMode; import org.photonvision.vision.target.TargetCalculations; @@ -46,6 +47,13 @@ public class Draw2dCrosshairPipe double y = params.frameStaticProperties.centerY; double scale = params.frameStaticProperties.imageWidth / (double) params.divisor.value / 32.0; + if (this.params.rotMode == ImageRotationMode.DEG_270 + || this.params.rotMode == ImageRotationMode.DEG_90) { + var tmp = x; + x = y; + y = tmp; + } + switch (params.robotOffsetPointMode) { case Single: if (params.singleOffsetPoint.x != 0 && params.singleOffsetPoint.y != 0) { @@ -87,15 +95,19 @@ public class Draw2dCrosshairPipe public final boolean shouldDraw; public final FrameStaticProperties frameStaticProperties; + public final ImageRotationMode rotMode; public final RobotOffsetPointMode robotOffsetPointMode; public final Point singleOffsetPoint; public final DualOffsetValues dualOffsetValues; private final FrameDivisor divisor; public Draw2dCrosshairParams( - FrameStaticProperties frameStaticProperties, FrameDivisor divisor) { + FrameStaticProperties frameStaticProperties, + FrameDivisor divisor, + ImageRotationMode rotMode) { shouldDraw = true; this.frameStaticProperties = frameStaticProperties; + this.rotMode = rotMode; robotOffsetPointMode = RobotOffsetPointMode.None; singleOffsetPoint = new Point(); dualOffsetValues = new DualOffsetValues(); @@ -108,13 +120,15 @@ public class Draw2dCrosshairPipe Point singleOffsetPoint, DualOffsetValues dualOffsetValues, FrameStaticProperties frameStaticProperties, - FrameDivisor divisor) { + FrameDivisor divisor, + ImageRotationMode rotMode) { this.shouldDraw = shouldDraw; this.frameStaticProperties = frameStaticProperties; this.robotOffsetPointMode = robotOffsetPointMode; this.singleOffsetPoint = singleOffsetPoint; this.dualOffsetValues = dualOffsetValues; this.divisor = divisor; + this.rotMode = rotMode; } } } diff --git a/photon-core/src/main/java/org/photonvision/vision/pipeline/ColoredShapePipeline.java b/photon-core/src/main/java/org/photonvision/vision/pipeline/ColoredShapePipeline.java index 84d3e8224..e58cfd775 100644 --- a/photon-core/src/main/java/org/photonvision/vision/pipeline/ColoredShapePipeline.java +++ b/photon-core/src/main/java/org/photonvision/vision/pipeline/ColoredShapePipeline.java @@ -182,7 +182,8 @@ public class ColoredShapePipeline settings.offsetSinglePoint, dualOffsetValues, frameStaticProperties, - settings.streamingFrameDivisor); + settings.streamingFrameDivisor, + settings.inputImageRotationMode); draw2dCrosshairPipe.setParams(draw2dCrosshairParams); var draw3dTargetsParams = diff --git a/photon-core/src/main/java/org/photonvision/vision/pipeline/DriverModePipeline.java b/photon-core/src/main/java/org/photonvision/vision/pipeline/DriverModePipeline.java index c87fd1608..844f6db86 100644 --- a/photon-core/src/main/java/org/photonvision/vision/pipeline/DriverModePipeline.java +++ b/photon-core/src/main/java/org/photonvision/vision/pipeline/DriverModePipeline.java @@ -50,7 +50,7 @@ public class DriverModePipeline Draw2dCrosshairPipe.Draw2dCrosshairParams draw2dCrosshairParams = new Draw2dCrosshairPipe.Draw2dCrosshairParams( - frameStaticProperties, settings.streamingFrameDivisor); + frameStaticProperties, settings.streamingFrameDivisor, settings.inputImageRotationMode); draw2dCrosshairPipe.setParams(draw2dCrosshairParams); resizeImagePipe.setParams( diff --git a/photon-core/src/main/java/org/photonvision/vision/pipeline/OutputStreamPipeline.java b/photon-core/src/main/java/org/photonvision/vision/pipeline/OutputStreamPipeline.java index 1a9eacdab..5c0d9849f 100644 --- a/photon-core/src/main/java/org/photonvision/vision/pipeline/OutputStreamPipeline.java +++ b/photon-core/src/main/java/org/photonvision/vision/pipeline/OutputStreamPipeline.java @@ -74,7 +74,8 @@ public class OutputStreamPipeline { settings.offsetSinglePoint, dualOffsetValues, frameStaticProperties, - settings.streamingFrameDivisor); + settings.streamingFrameDivisor, + settings.inputImageRotationMode); draw2dCrosshairPipe.setParams(draw2dCrosshairParams); var draw3dTargetsParams =