From 00b8e7d1c5c74b0bc6f9846dd5f24ac09479f9ed Mon Sep 17 00:00:00 2001 From: Matt Date: Fri, 3 Sep 2021 19:20:55 -0700 Subject: [PATCH] Add colored shape to the UI (#258) * Fixup colored shape backend code * More colored shape stuff * Start adding shape change to drawing * Mostly works! * Add powercell image for shape test mode * Make super-duper-sure to release stuff Fixes colored shape leak * Move approx poly dp into Contour * Adjust epsilon threshold * Add dialog to change pipeline type * Run spotless * Make yes red :> * Move "no" button * Fix duplication/deletion name logic and switching * Fix compilation errors from rebase * Update VisionSourceManager.java * Update type dialog, remove duplicate popup The dropdown still switches even if the user says "no" tho Co-authored-by: Banks Troutman --- .../src/components/common/cv-range-slider.vue | 7 +- .../pipeline/CameraAndPipelineSelect.vue | 419 ++++++++++-------- photon-client/src/main.js | 4 +- photon-client/src/mixins/global/stateMixin.js | 10 + photon-client/src/store/index.js | 3 +- .../src/views/PipelineViews/ContoursTab.vue | 404 +++++++++++------ .../src/views/PipelineViews/ThresholdTab.vue | 328 ++++++++------ .../vision/camera/FileVisionSource.java | 6 +- .../org/photonvision/vision/opencv/CVMat.java | 2 +- .../photonvision/vision/opencv/CVShape.java | 51 +-- .../photonvision/vision/opencv/Contour.java | 16 + .../vision/opencv/ContourShape.java | 2 +- .../pipe/impl/Collect2dTargetsPipe.java | 2 +- .../vision/pipe/impl/Draw2dTargetsPipe.java | 36 +- .../vision/pipe/impl/FilterShapesPipe.java | 43 +- .../vision/pipe/impl/FindCirclesPipe.java | 33 +- .../vision/pipe/impl/FindPolygonPipe.java | 27 +- .../vision/pipe/impl/SpeckleRejectPipe.java | 2 + .../vision/pipeline/ColoredShapePipeline.java | 122 +++-- .../ColoredShapePipelineSettings.java | 63 ++- .../pipeline/DriverModePipelineSettings.java | 2 - .../vision/pipeline/OutputStreamPipeline.java | 6 +- .../vision/pipeline/PipelineType.java | 2 +- .../vision/processes/PipelineManager.java | 121 ++++- .../vision/processes/VisionModule.java | 8 +- .../VisionModuleChangeSubscriber.java | 14 +- .../vision/processes/VisionSourceManager.java | 6 + .../vision/target/PotentialTarget.java | 15 +- .../vision/target/TrackedTarget.java | 24 +- .../common/ShapeBenchmarkTest.java | 16 +- .../vision/pipeline/CirclePNPTest.java | 80 ++-- .../pipeline/ColoredShapePipelineTest.java | 66 ++- .../vision/processes/PipelineManagerTest.java | 62 +++ .../vision/target/TrackedTargetTest.java | 3 +- .../src/main/java/org/photonvision/Main.java | 11 + .../photonvision/server/SocketHandler.java | 18 +- .../server/SocketMessageType.java | 3 +- .../polygons/powercells/powercell_test_1.png | Bin 0 -> 269828 bytes 38 files changed, 1252 insertions(+), 785 deletions(-) create mode 100644 photon-client/src/mixins/global/stateMixin.js create mode 100644 photon-core/src/test/java/org/photonvision/vision/processes/PipelineManagerTest.java create mode 100644 photon-server/src/main/resources/testimages/polygons/powercells/powercell_test_1.png diff --git a/photon-client/src/components/common/cv-range-slider.vue b/photon-client/src/components/common/cv-range-slider.vue index f0f11398f..1d25962a2 100644 --- a/photon-client/src/components/common/cv-range-slider.vue +++ b/photon-client/src/components/common/cv-range-slider.vue @@ -15,6 +15,7 @@ :value="localValue" :max="max" :min="min" + :disabled="disabled" hide-details class="align-center" dark @@ -34,7 +35,7 @@ hide-details single-line type="number" - style="width: 50px" + style="width: 60px" :step="step" @input="handleChange" @focus="prependFocused = true" @@ -53,7 +54,7 @@ hide-details single-line type="number" - style="width: 50px" + style="width: 60px" :step="step" @input="handleChange" @focus="appendFocused = true" @@ -75,7 +76,7 @@ export default { TooltippedLabel, }, // eslint-disable-next-line vue/require-prop-types - props: ["name", "min", "max", "value", "step", "tooltip"], + props: ["name", "min", "max", "value", "step", "tooltip", "disabled"], data() { return { prependFocused: false, diff --git a/photon-client/src/components/pipeline/CameraAndPipelineSelect.vue b/photon-client/src/components/pipeline/CameraAndPipelineSelect.vue index 865cad801..78e5b9553 100644 --- a/photon-client/src/components/pipeline/CameraAndPipelineSelect.vue +++ b/photon-client/src/components/pipeline/CameraAndPipelineSelect.vue @@ -88,7 +88,11 @@ menu - + - + + + + - - - - - Duplicate Pipeline - - - - - - - - - Duplicate - - - Cancel - - - - + - + - Pipeline Name + {{ isPipelineNameEdit ? "Edit Pipeline Name" : "Create Pipeline" }} + @@ -213,161 +202,205 @@ + + + Change Pipeline Type + + Changing the type of this pipeline will erase the current pipeline's settings and replace it with a new {{ ['Reflective', 'Shape'][proposedPipelineType] }} pipeline. You will lose all settings for the pipeline + "{{ ($store.getters.isDriverMode ? ['Driver Mode'] : []).concat($store.getters.pipelineList)[currentPipelineIndex] }}." Are you sure you want to do this? + + + Yes, replace this pipeline + + + No, take me back + + + + +