|
22 | 22 | </div> |
23 | 23 |
|
24 | 24 | <div v-else-if="widgetComponent && deviceData" class="widget-container h-full w-full"> |
25 | | - <component :is="widgetComponent" v-bind="widgetProps" class="h-full w-full bg-transparent" ref="widgetRef" /> |
| 25 | + <component :is="widgetComponent" v-bind="widgetProps" class="h-full w-full bg-transparent" ref="widgetRef" |
| 26 | + @settings-change="handleWidgetSettingsChange" /> |
26 | 27 | <SonarMask :width="dimensions.width" :height="dimensions.height" :type="widgetType" :polar_mode="polarMode" :isRecording="isRecording" |
27 | 28 | class="widget-mask" @button-click="handleMaskButtonClick" /> |
28 | 29 | <Ping360WidgetControls v-if="widgetType === 'ping360'" :is-recording="isRecording" |
| 30 | + :range="ping360Range" :gain="ping360Gain" :sector="ping360Sector" |
29 | 31 | @button-click="handleMaskButtonClick" /> |
30 | 32 | <Ping1DWidgetControls v-if="widgetType === 'ping1d'" :is-recording="isRecording" |
31 | | - :is-auto-gain="isAutoGain" @button-click="handleMaskButtonClick" /> |
| 33 | + :is-auto-gain="isAutoGain" :range="ping1DRange" :gain="ping1DGain" |
| 34 | + @button-click="handleMaskButtonClick" /> |
32 | 35 | </div> |
33 | 36 | </div> |
34 | 37 | </template> |
@@ -63,6 +66,15 @@ export default defineComponent({ |
63 | 66 | const dimensions = ref({ width: 0, height: 0 }); |
64 | 67 | const yawAngle = ref(0); |
65 | 68 | const isRecording = ref(false); |
| 69 | + const ping360WidgetSettings = ref({ |
| 70 | + range: null, |
| 71 | + gain: null, |
| 72 | + sector: null, |
| 73 | + }); |
| 74 | + const ping1DWidgetSettings = ref({ |
| 75 | + range: null, |
| 76 | + gain: null, |
| 77 | + }); |
66 | 78 |
|
67 | 79 | let resizeObserver = null; |
68 | 80 | let datalakeUnsubscribe = null; |
@@ -564,6 +576,62 @@ export default defineComponent({ |
564 | 576 | return settings?.mode_auto === 1; |
565 | 577 | }); |
566 | 578 |
|
| 579 | + const handleWidgetSettingsChange = (settings) => { |
| 580 | + if (widgetType.value === 'ping360') { |
| 581 | + ping360WidgetSettings.value = { |
| 582 | + ...ping360WidgetSettings.value, |
| 583 | + ...settings, |
| 584 | + }; |
| 585 | + return; |
| 586 | + } |
| 587 | +
|
| 588 | + if (widgetType.value === 'ping1d') { |
| 589 | + ping1DWidgetSettings.value = { |
| 590 | + ...ping1DWidgetSettings.value, |
| 591 | + ...settings, |
| 592 | + }; |
| 593 | + } |
| 594 | + }; |
| 595 | +
|
| 596 | + const ping1DRange = computed(() => { |
| 597 | + if (ping1DWidgetSettings.value.range != null) return ping1DWidgetSettings.value.range; |
| 598 | + const settings = deviceInstance.value?.data?.ping1DSettings?.value; |
| 599 | + return settings?.scan_length ?? null; |
| 600 | + }); |
| 601 | +
|
| 602 | + const ping1DGain = computed(() => { |
| 603 | + if (ping1DWidgetSettings.value.gain != null) return ping1DWidgetSettings.value.gain; |
| 604 | + const settings = deviceInstance.value?.data?.ping1DSettings?.value; |
| 605 | + return settings?.gain_setting ?? null; |
| 606 | + }); |
| 607 | +
|
| 608 | + const ping360Range = computed(() => { |
| 609 | + if (ping360WidgetSettings.value.range != null) return ping360WidgetSettings.value.range; |
| 610 | + const settings = deviceInstance.value?.data?.ping360Settings?.value; |
| 611 | + if (!settings || !deviceInstance.value?.ping360) return null; |
| 612 | + return deviceInstance.value.ping360.calculateRange(settings); |
| 613 | + }); |
| 614 | +
|
| 615 | + const ping360Gain = computed(() => { |
| 616 | + if (ping360WidgetSettings.value.gain != null) return ping360WidgetSettings.value.gain; |
| 617 | + const settings = deviceInstance.value?.data?.ping360Settings?.value; |
| 618 | + return settings?.gain_setting ?? null; |
| 619 | + }); |
| 620 | +
|
| 621 | + const ping360Sector = computed(() => { |
| 622 | + if (ping360WidgetSettings.value.sector != null) return ping360WidgetSettings.value.sector; |
| 623 | + const settings = deviceInstance.value?.data?.ping360Settings?.value; |
| 624 | + if (!settings) return null; |
| 625 | +
|
| 626 | + const isFullCircle = (settings.stop_angle + 1) % 400 === settings.start_angle % 400; |
| 627 | + if (isFullCircle) return 360; |
| 628 | +
|
| 629 | + const startDeg = settings.start_angle === 399 ? 360 : Math.round((settings.start_angle * 360) / 400); |
| 630 | + const stopDeg = settings.stop_angle === 399 ? 360 : Math.round((settings.stop_angle * 360) / 400); |
| 631 | + const sector = (((stopDeg - startDeg) % 360) + 360) % 360; |
| 632 | + return sector === 0 ? 360 : sector; |
| 633 | + }); |
| 634 | +
|
567 | 635 | const polarMode = computed(() => { |
568 | 636 | if (deviceInstance.value && widgetType.value === 'ping360') { |
569 | 637 | if (deviceInstance.value.data.polarMode) { |
@@ -781,6 +849,12 @@ export default defineComponent({ |
781 | 849 | polarMode, |
782 | 850 | isRecording, |
783 | 851 | isAutoGain, |
| 852 | + handleWidgetSettingsChange, |
| 853 | + ping1DRange, |
| 854 | + ping1DGain, |
| 855 | + ping360Range, |
| 856 | + ping360Gain, |
| 857 | + ping360Sector, |
784 | 858 | }; |
785 | 859 | }, |
786 | 860 | }); |
|
0 commit comments