Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 8 additions & 15 deletions Ports/DigSubAnalyzer/Controls/PhasorDiagramControl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -273,21 +273,14 @@ protected override void OnRender(DrawingContext dc)
}
dc.Pop();

// Numeric scale evidence comes from the SAME six vectors as arrows.
// This footer is a visual reference (per-family maximum), not a
// calibration claim or one shared physical voltage/current scale.
var voltageUnit = _visualItems.FirstOrDefault(item =>
item.Family == PhasorFamily.Voltage && IsRenderable(item))?.Unit ?? "counts";
var currentUnit = _visualItems.FirstOrDefault(item =>
item.Family == PhasorFamily.Current && IsRenderable(item))?.Unit ?? "counts";
var voltageScaleText = PhasorScaleCaption.Format(voltageUnit == "V" ? "U" : "A", voltageMax, voltageUnit);
var currentScaleText = PhasorScaleCaption.Format(currentUnit == "A" ? "I" : "B", currentMax, currentUnit);
DrawText(dc, $"{voltageScaleText} · {currentScaleText}",
10.0, new Point(6, height - 31), TextSecondaryBrush, BodyTypeface);
DrawText(dc, voltageUnit == "V" && currentUnit == "A"
? "9-2LE · U solid / I dashed · independent scales"
: "RAW A solid · RAW B dashed · independent count scales",
9.5, new Point(6, height - 15), TextMutedBrush, BodyTypeface);
// The six callouts already display magnitudes. Avoid two further
// lines repeating normalization/calibration explanations below them.
// Still distinguish the independently normalized vector families.
var mapped = _visualItems.Any(item => item.Unit is "V" or "A");
DrawText(dc, mapped
? "U solid · I dashed · separate scales"
: "RAW A solid · B dashed · separate scales",
9.8, new Point(6, height - 17), TextMutedBrush, BodyTypeface);
if (!IsStreamLive)
DrawText(dc, "STALE · last valid samples", 11, new Point(7, 5), StaleBrush, LabelTypeface);
}
Expand Down
26 changes: 19 additions & 7 deletions Ports/DigSubAnalyzer/Controls/WaveformPanelControl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -253,9 +253,9 @@ protected override void OnRender(DrawingContext dc)
if (nineTwoLe)
{
if (showCurrent)
visibleLanes.Add(new LaneDefinition("VOLTAGE · Ch5–8", "V", snapshot.CurrentSeries));
visibleLanes.Add(new LaneDefinition("VOLTAGE", "V", snapshot.CurrentSeries));
if (showVoltage)
visibleLanes.Add(new LaneDefinition("CURRENT · Ch1–4", "A", snapshot.VoltageSeries));
visibleLanes.Add(new LaneDefinition("CURRENT", "A", snapshot.VoltageSeries));
}
else
{
Expand Down Expand Up @@ -363,7 +363,8 @@ private void DrawLane(DrawingContext dc, Rect rect, LaneDefinition lane, Wavefor
if (MarkersEnabled && _cursorVisible && _cursorLane == laneIndex)
DrawCursor(dc, innerRect, plotSeries, amplitudeMax, stacked, snapshot);

DrawTimebaseLabel(dc, innerRect, snapshot);
if (laneIndex == 0)
DrawTimebaseLabel(dc, innerRect, snapshot);
}

private IReadOnlyList<WaveformSeriesModel> BuildVisibleSeries(
Expand Down Expand Up @@ -1158,10 +1159,21 @@ private void DrawMillisecondsAxis(DrawingContext dc, Rect plot, WaveformSnapshot

private static void DrawTimebaseLabel(DrawingContext dc, Rect rect, WaveformSnapshot snapshot)
{
var sampleRateText = snapshot.SampleRateHz > 0 ? $"{snapshot.SampleRateHz:0.#} Hz sample" : "Sample rate pending";
var frequencyText = snapshot.MeasuredFrequencyHz > 0 ? $"{snapshot.MeasuredFrequencyHz:0.###} Hz signal" : "Signal frequency pending";
dc.DrawText(CreateText(sampleRateText, 10.3, MutedBrush, LabelTypeface), new Point(rect.Left, rect.Bottom + 23));
dc.DrawText(CreateText(frequencyText, 10.3, MutedBrush, LabelTypeface), new Point(rect.Right - 106, rect.Bottom + 23));
// Share this technical caption once, never duplicate pending text.
if (snapshot.SampleRateHz > 0 && double.IsFinite(snapshot.SampleRateHz))
{
var rate = snapshot.SampleRateHz >= 1000
? (snapshot.SampleRateHz / 1000.0).ToString("0.###", CultureInfo.InvariantCulture) + " kS/s"
: snapshot.SampleRateHz.ToString("0.#", CultureInfo.InvariantCulture) + " S/s";
dc.DrawText(CreateText(rate, 10.3, MutedBrush, LabelTypeface),
new Point(rect.Left, rect.Bottom + 23));
}
if (snapshot.MeasuredFrequencyHz > 0 && double.IsFinite(snapshot.MeasuredFrequencyHz))
{
var label = CreateText(snapshot.MeasuredFrequencyHz.ToString("0.##",
CultureInfo.InvariantCulture) + " Hz", 10.3, MutedBrush, LabelTypeface);
dc.DrawText(label, new Point(rect.Right - label.Width, rect.Bottom + 23));
}
}

// Presentation only: no fade animations/timers or per-sample state.
Expand Down
57 changes: 32 additions & 25 deletions Views/SmvInlineViewer.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -295,12 +295,12 @@
BorderBrush="{StaticResource BorderSubtle}" BorderThickness="1"
CornerRadius="8">
<StackPanel>
<TextBlock Text="SELECTED PUBLISHER" FontSize="9"
<TextBlock Text="PUBLISHER" FontSize="9"
FontWeight="SemiBold" Foreground="{StaticResource Muted}"
Margin="0,0,0,4"/>
<TextBlock Text="{Binding StreamDetail}" FontSize="10"
Foreground="{StaticResource Ink}" TextWrapping="Wrap"
ToolTip="{Binding StreamDetail}" MaxHeight="95"/>
ToolTip="{Binding StreamTechnicalDetail}" MaxHeight="95"/>
</StackPanel>
</Border>
</Grid>
Expand All @@ -323,10 +323,18 @@
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="Waveforms" Style="{StaticResource SvHeading}"/>
<TextBlock Grid.Column="0" Text="Waveforms" Style="{StaticResource SvHeading}"
ToolTip="{Binding WaveformStatus}"/>
<StackPanel Grid.Column="2" Orientation="Horizontal" VerticalAlignment="Center">
<Border Background="{Binding SyncBackground}" CornerRadius="8"
Padding="8,3" Margin="0,0,9,0" ToolTip="{Binding SyncDetail}">
Padding="8,3" Margin="0,0,9,0">
<Border.ToolTip>
<ToolTip MaxWidth="330" Padding="9,7">
<TextBlock MaxWidth="310" TextWrapping="Wrap"
Text="{Binding PlacementTarget.DataContext.SyncDetail,
RelativeSource={RelativeSource AncestorType={x:Type ToolTip}}}"/>
</ToolTip>
</Border.ToolTip>
<TextBlock Text="{Binding SyncLabel}" Foreground="{Binding SyncForeground}"
FontSize="10.5" FontWeight="SemiBold"/>
</Border>
Expand Down Expand Up @@ -366,9 +374,10 @@
IsStreamLive="{Binding IsLiveSnapshot}" TimebaseMode="2 cycles"
VoltageScale="Auto Peak Hold" CurrentScale="Auto Peak Hold"
ShowMode="Both" LayoutMode="Overlay" MarkersEnabled="True"/>
<TextBlock Grid.Row="5" Text="{Binding WaveformStatus}" Style="{StaticResource SvCaption}"
Margin="3,5,3,0" FontSize="9.8" TextTrimming="CharacterEllipsis"
ToolTip="{Binding WaveformStatus}"/>
<!-- Diagnostic evidence lives on the heading hover, not duplicated
below the active waveform on every snapshot. -->
<TextBlock Grid.Row="5" Text="{Binding WaveformStatus}"
Visibility="Collapsed" ToolTip="{Binding WaveformStatus}"/>
</Grid>
</Border>

Expand Down Expand Up @@ -401,7 +410,8 @@
</Grid>
<dig:PhasorDiagramControl x:Name="PhasorView" Grid.Row="2"
ItemsSource="{Binding CurrentPhasors}"
IsStreamLive="{Binding IsLiveSnapshot}"/>
IsStreamLive="{Binding IsLiveSnapshot}"
ToolTip="Voltage/current (or RAW A/B) arrows use separate magnitude scales. Full measurement precision is shown below."/>
</Grid>
</Border>

Expand All @@ -423,9 +433,7 @@
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="Measurements" Style="{StaticResource SvHeading}"/>
<TextBlock Grid.Column="2" Text="RMS · phase"
Style="{StaticResource SvCaption}" Margin="12,0,0,0"
VerticalAlignment="Center"/>
<!-- RMS and angle already identify their columns. -->
</Grid>
<!-- The two views filter the same eight immutable measurement rows.
RAW group titles are presentation-only, not verified U/I metadata. -->
Expand Down Expand Up @@ -543,12 +551,11 @@
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="3φ POWER" FontSize="10.5"
FontWeight="SemiBold" Foreground="#234E80"/>
<TextBlock Grid.Column="1" Text="{Binding PowerStatusShort}"
FontSize="9.4" Foreground="#617D9A"
HorizontalAlignment="Right" TextTrimming="CharacterEllipsis"
Margin="10,0,0,0" ToolTip="{Binding PowerStatus}"/>
<TextBlock Grid.Column="0" Text="3φ Power" FontSize="10.5"
FontWeight="SemiBold" Foreground="#234E80"
ToolTip="{Binding PowerStatus}"/>
<!-- Computation methodology is available on hover.
Do not duplicate it beside the 3φ title. -->
</Grid>
<!-- Four equal-width instrument readouts, aligned
on a common baseline; no nested horizontal
Expand All @@ -565,7 +572,7 @@
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Text="ACTIVE · P" Foreground="#617D9A" FontSize="9.2"/>
<TextBlock Text="P" Foreground="#617D9A" FontSize="9.2"/>
<TextBlock Grid.Row="1" Text="{Binding PowerP}" Foreground="#183A65"
FontSize="11.5" FontWeight="SemiBold" TextTrimming="CharacterEllipsis"/>
</Grid>
Expand All @@ -574,7 +581,7 @@
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Text="REACTIVE · Q₁" Foreground="#617D9A" FontSize="9.2"/>
<TextBlock Text="Q₁" Foreground="#617D9A" FontSize="9.2"/>
<TextBlock Grid.Row="1" Text="{Binding PowerQ}" Foreground="#183A65"
FontSize="11.5" FontWeight="SemiBold" TextTrimming="CharacterEllipsis"/>
</Grid>
Expand All @@ -583,7 +590,7 @@
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Text="APPARENT · S" Foreground="#617D9A" FontSize="9.2"/>
<TextBlock Text="S" Foreground="#617D9A" FontSize="9.2"/>
<TextBlock Grid.Row="1" Text="{Binding PowerS}" Foreground="#183A65"
FontSize="11.5" FontWeight="SemiBold" TextTrimming="CharacterEllipsis"/>
</Grid>
Expand All @@ -592,16 +599,16 @@
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Text="POWER FACTOR" Foreground="#617D9A" FontSize="9.2"/>
<TextBlock Text="PF" Foreground="#617D9A" FontSize="9.2"/>
<TextBlock Grid.Row="1" Text="{Binding PowerPf}" Foreground="#183A65"
FontSize="11.5" FontWeight="SemiBold" TextTrimming="CharacterEllipsis"/>
</Grid>
</Grid>
</Grid>
</Border>
<TextBlock Grid.Row="6" Text="{Binding UnitStatus}"
Style="{StaticResource SvCaption}" FontSize="9.5"
Margin="3,1,0,0" TextTrimming="CharacterEllipsis"
<!-- Full profile/scale details remain available on
both group-heading tooltips, not as permanent noise. -->
<TextBlock Grid.Row="6" Text="{Binding UnitStatus}" Visibility="Collapsed"
ToolTip="{Binding UnitStatus}"/>
</Grid>
</Border>
Expand All @@ -613,7 +620,7 @@
<DockPanel>
<Ellipse Width="7" Height="7" Fill="#16A34A" VerticalAlignment="Center"
Margin="0,0,8,0" DockPanel.Dock="Left"/>
<TextBlock Text="{Binding CaptureStatus}" FontSize="10.5"
<TextBlock Text="{Binding CaptureBrief}" FontSize="10.5"
Foreground="#425F85" TextTrimming="CharacterEllipsis"
ToolTip="{Binding CaptureStatus}"/>
</DockPanel>
Expand Down
Loading
Loading