2026-01-26 18:56:53 +09:00

391 lines
29 KiB
XML

<UserControl x:Class="MilUI.CameraView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
xmlns:local="clr-namespace:MilUI"
xmlns:view="clr-namespace:Aurora.View;assembly=Aurora"
IsVisibleChanged="UserControl_IsVisibleChanged"
Background="Transparent"
d:DataContext="{d:DesignInstance Type=local:CameraViewModel}"
mc:Ignorable="d">
<UserControl.Resources>
<ResourceDictionary>
<local:ViewTypeToVisibilityConverter x:Key="visibilityConverter"/>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.ThemeForeground}"/>
</Style>
</ResourceDictionary>
</UserControl.Resources>
<Border x:Name="bdCamView" BorderBrush="{DynamicResource AuroraVision.Brushes.Window.BorderBrush}" CornerRadius="8" Background="{DynamicResource AuroraVision.Brushes.Window.Background}"
BorderThickness="1" Margin="3">
<DockPanel Margin="5">
<DockPanel DockPanel.Dock="Top">
<Viewbox DockPanel.Dock="Right" Stretch="Uniform" MaxHeight="30" MinHeight="10" MaxWidth="30" MinWidth="10">
<Viewbox.Visibility>
<MultiBinding Converter="{StaticResource visibilityConverter}">
<Binding Path="IsCollapsed"/>
<Binding Path="ActualWidth" ElementName="bdCamView"/>
<Binding Path="Name" ElementName="ExpandBtn"/>
</MultiBinding>
</Viewbox.Visibility>
<Button Style="{StaticResource styleBtnNormalCamTool}" Name="ExpandBtn"
Command="{Binding ButtonCommandExpand}"
ToolTip="Button Stretch.">
<Image x:Name="imgStretch"
Style="{StaticResource styleImgCamTool}" Source="pack://application:,,,/VisionCommonUI;component/Icons/icon_expand.png"/>
</Button>
</Viewbox>
<Viewbox DockPanel.Dock="Right" Stretch="Uniform" MaxHeight="36" MinHeight="10" HorizontalAlignment="Right" Name="Buttons">
<Viewbox.Visibility>
<MultiBinding Converter="{StaticResource visibilityConverter}">
<Binding Path="IsCollapsed"/>
<Binding Path="ActualWidth" ElementName="bdCamView"/>
<Binding Path="Name" ElementName="Buttons"/>
</MultiBinding>
</Viewbox.Visibility>
<StackPanel x:Name="spButtonBar" Orientation="Horizontal" Margin="0,0,2,3">
<!--Camera Device Setting Button-->
<Button Style="{StaticResource styleBtnNormalCamTool}"
Command="{Binding ButtonCommandSetCamDevice}"
x:Name="btnCamDevice" ToolTip="Set camera device.">
<Image x:Name="imgCamDevice"
Style="{StaticResource styleImgCamTool}" Source="pack://application:,,,/VisionCommonUI;component/Icons/icon_setting.png"/>
</Button>
<!--Light Setting Button-->
<Button Style="{StaticResource styleBtnNormalCamTool}"
Command="{Binding ButtonCommandSetLight}"
x:Name="btnLight" ToolTip="Set light.">
<Image x:Name="imgLight"
Style="{StaticResource styleImgCamTool}" Source="pack://application:,,,/VisionCommonUI;component/Icons/icon_light.png"/>
</Button>
<!--Grab Button-->
<Button Style="{StaticResource styleBtnNormalCamTool}"
x:Name="btnGrab" Command="{Binding ButtonCommandGrab}" ToolTip="Grab image.">
<Image x:Name="imgGrab"
Style="{StaticResource styleImgCamTool}" Source="pack://application:,,,/VisionCommonUI;component/Icons/icon_grab.png"/>
</Button>
<!--Start Live Button-->
<Button Style="{StaticResource styleBtnNormalCamTool}"
Command="{Binding ButtonCommandStartLive}"
x:Name="btnLiveStart" ToolTip="Turn on camera live.">
<Image x:Name="imgLiveStart"
Style="{StaticResource styleImgCamTool}" Source="pack://application:,,,/VisionCommonUI;component/Icons/icon_live.png"/>
</Button>
<!--Stop Live Button-->
<Button Style="{StaticResource styleBtnGreenCamTool}"
Command="{Binding ButtonCommandStopLive}"
Visibility="Collapsed"
x:Name="btnLiveStop" ToolTip="Turn off camera live.">
<Image x:Name="imgLiveStop"
Margin="0,0,0,2" Style="{StaticResource styleImgCamTool}" Source="pack://application:,,,/VisionCommonUI;component/Icons/icon_live.png"/>
</Button>
<!--Grid Mode Button-->
<Button x:Name="btnGridModeStart"
Style="{StaticResource styleBtnNormalCamTool}" ToolTip="Load grid mode.">
<b:Interaction.Triggers>
<b:EventTrigger EventName="Click">
<b:ChangePropertyAction TargetName="gridContextMenu"
PropertyName="IsOpen"
Value="True"/>
</b:EventTrigger>
</b:Interaction.Triggers>
<Button.ContextMenu>
<ContextMenu x:Name="gridContextMenu">
<MenuItem Click="OnGridMode_Wide">
<MenuItem.Header>
<TextBlock>
<Run Text="{Binding [Grid], Source={StaticResource langTokens}, Mode=OneWay}"/>
<Run Text="{Binding [Wide], Source={StaticResource langTokens}, Mode=OneWay}"/>
</TextBlock>
</MenuItem.Header>
<MenuItem.Icon>
<Border x:Name="bdGrid_Wide" Background="White" CornerRadius="5" Margin="2">
<Image Style="{StaticResource styleImgContextMenuItemIcon}" Source="pack://application:,,,/VisionCommonUI;component/Icons/ColorIcons/img_grid_wide.png"/>
</Border>
</MenuItem.Icon>
</MenuItem>
<MenuItem Click="OnGridMode_Narrow">
<MenuItem.Header>
<TextBlock>
<Run Text="{Binding [Grid], Source={StaticResource langTokens}, Mode=OneWay}"/>
<Run Text="{Binding [Narrow], Source={StaticResource langTokens}, Mode=OneWay}"/>
</TextBlock>
</MenuItem.Header>
<MenuItem.Icon>
<Border x:Name="bdGrid_Narrow" Background="White" CornerRadius="5" Margin="2">
<Image Style="{StaticResource styleImgContextMenuItemIcon}" Source="pack://application:,,,/VisionCommonUI;component/Icons/ColorIcons/img_grid_narrow.png"/>
</Border>
</MenuItem.Icon>
</MenuItem>
<MenuItem Click="OnGridMode_Wide_ErrRotation">
<MenuItem.Header>
<TextBlock>
<Run Text="{Binding [Grid], Source={StaticResource langTokens}, Mode=OneWay}"/>
<Run Text="{Binding [Wide], Source={StaticResource langTokens}, Mode=OneWay}"/>
<Run Text="{Binding [ErrRotation], Source={StaticResource langTokens}, Mode=OneWay}"/>
</TextBlock>
</MenuItem.Header>
<MenuItem.Icon>
<Border x:Name="bdGrid_Wide_ErrRotation" Background="White" CornerRadius="5" Margin="2">
<Image Style="{StaticResource styleImgContextMenuItemIcon}" Source="pack://application:,,,/VisionCommonUI;component/Icons/ColorIcons/img_grid_wide.png"/>
</Border>
</MenuItem.Icon>
</MenuItem>
<MenuItem Click="OnGridMode_Narrow_ErrRotation">
<MenuItem.Header>
<TextBlock>
<Run Text="{Binding [Grid], Source={StaticResource langTokens}, Mode=OneWay}"/>
<Run Text="{Binding [Narrow], Source={StaticResource langTokens}, Mode=OneWay}"/>
<Run Text="{Binding [ErrRotation], Source={StaticResource langTokens}, Mode=OneWay}"/>
</TextBlock>
</MenuItem.Header>
<MenuItem.Icon>
<Border x:Name="bdGrid_Narrow_ErrRotation" Background="White" CornerRadius="5" Margin="2">
<Image Style="{StaticResource styleImgContextMenuItemIcon}" Source="pack://application:,,,/VisionCommonUI;component/Icons/ColorIcons/img_grid_narrow.png"/>
</Border>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</Button.ContextMenu>
<Image x:Name="imgGridModeStart" Height="21" Style="{StaticResource styleImgCamTool}" Source="pack://application:,,,/VisionCommonUI;component/Icons/icon_grid.png"/>
</Button>
<!--Ruler Mode Button-->
<Button x:Name="btnRulerModeStart"
Style="{StaticResource styleBtnNormalCamTool}" ToolTip="Load ruler mode.">
<b:Interaction.Triggers>
<b:EventTrigger EventName="Click">
<b:ChangePropertyAction TargetName="rulerContextMenu"
PropertyName="IsOpen"
Value="True"/>
</b:EventTrigger>
</b:Interaction.Triggers>
<Button.ContextMenu>
<ContextMenu x:Name="rulerContextMenu">
<MenuItem Click="OnRulerMode_DistanceAndAngle">
<MenuItem.Header>
<TextBlock>
<Run Text="{Binding [Distance], Source={StaticResource langTokens}, Mode=OneWay}"/>
<Run Text="&amp;"/>
<Run Text="{Binding [Angle], Source={StaticResource langTokens}, Mode=OneWay}"/>
</TextBlock>
</MenuItem.Header>
<MenuItem.Icon>
<Border x:Name="bdDistanceAndAngle" Background="White" CornerRadius="5" Margin="2">
<Image Style="{StaticResource styleImgContextMenuItemIcon}" Source="pack://application:,,,/VisionCommonUI;component/Icons/ColorIcons/img_ruler.png"/>
</Border>
</MenuItem.Icon>
</MenuItem>
<MenuItem Click="OnRulerMode_Position">
<MenuItem.Header>
<TextBlock>
<Run Text="{Binding [Position], Source={StaticResource langTokens}, Mode=OneWay}"/>
</TextBlock>
</MenuItem.Header>
<MenuItem.Icon>
<Border x:Name="bdPosition" Background="White" CornerRadius="5" Margin="2">
<Image Style="{StaticResource styleImgContextMenuItemIcon}" Source="pack://application:,,,/VisionCommonUI;component/Icons/ColorIcons/img_position.png"/>
</Border>
</MenuItem.Icon>
</MenuItem>
<MenuItem Click="OnRulerMode_Circle">
<MenuItem.Header>
<TextBlock>
<Run Text="{Binding [Circle], Source={StaticResource langTokens}, Mode=OneWay}"/>
</TextBlock>
</MenuItem.Header>
<MenuItem.Icon>
<Border x:Name="bdCircle" Background="White" CornerRadius="5" Margin="2">
<Image Style="{StaticResource styleImgContextMenuItemIcon}" Source="pack://application:,,,/VisionCommonUI;component/Icons/ColorIcons/img_circle_radius.png"/>
</Border>
</MenuItem.Icon>
</MenuItem>
<MenuItem Click="OnRulerMode_MovePosition">
<MenuItem.Header>
<TextBlock>
<Run Text="{Binding [Move], Source={StaticResource langTokens}, Mode=OneWay}"/>
<Run Text="{Binding [Position], Source={StaticResource langTokens}, Mode=OneWay}"/>
</TextBlock>
</MenuItem.Header>
<MenuItem.Icon>
<Border x:Name="bdMovePosition" Background="White" CornerRadius="5" Margin="2">
<Image Style="{StaticResource styleImgContextMenuItemIcon}" Source="pack://application:,,,/VisionCommonUI;component/Icons/ColorIcons/img_move_target.png"/>
</Border>
</MenuItem.Icon>
</MenuItem>
<MenuItem Click="OnRulerMode_Clear">
<MenuItem.Header>
<TextBlock>
<Run Text="{Binding [Clear], Source={StaticResource langTokens}, Mode=OneWay}"/>
</TextBlock>
</MenuItem.Header>
<MenuItem.Icon>
<Border x:Name="bdClear" Background="White" CornerRadius="5" Margin="2">
<Image Style="{StaticResource styleImgContextMenuItemIcon}" Source="pack://application:,,,/VisionCommonUI;component/Icons/ColorIcons/img_eraser.png"/>
</Border>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</Button.ContextMenu>
<Image x:Name="imgRulerModeStart" Height="21" Style="{StaticResource styleImgCamTool}" Source="pack://application:,,,/VisionCommonUI;component/Icons/icon_ruler.png"/>
</Button>
<!--Image Load & Save Mode Button-->
<Button x:Name="btnLoadAndSaveImage"
Style="{StaticResource styleBtnNormalCamTool}" ToolTip="Load and save image">
<b:Interaction.Triggers>
<b:EventTrigger EventName="Click">
<b:ChangePropertyAction TargetName="loadAndSaveImageContextMenu"
PropertyName="IsOpen"
Value="True"/>
</b:EventTrigger>
</b:Interaction.Triggers>
<Button.ContextMenu>
<ContextMenu x:Name="loadAndSaveImageContextMenu">
<MenuItem Click="OnLoadImage">
<MenuItem.Header>
<TextBlock>
<Run Text="{Binding [Load], Source={StaticResource langTokens}, Mode=OneWay}"/>
<Run Text="{Binding [Image], Source={StaticResource langTokens}, Mode=OneWay}"/>
</TextBlock>
</MenuItem.Header>
<MenuItem.Icon>
<Border x:Name="bdLoadImage" Background="White" CornerRadius="5" Margin="2">
<Image Style="{StaticResource styleImgContextMenuItemIcon}" Source="pack://application:,,,/VisionCommonUI;component/Icons/ColorIcons/img_upload.png"/>
</Border>
</MenuItem.Icon>
</MenuItem>
<MenuItem Click="OnSaveImage">
<MenuItem.Header>
<TextBlock>
<Run Text="{Binding [Save], Source={StaticResource langTokens}, Mode=OneWay}"/>
<Run Text="{Binding [Image], Source={StaticResource langTokens}, Mode=OneWay}"/>
</TextBlock>
</MenuItem.Header>
<MenuItem.Icon>
<Border x:Name="bdSaveImage" Background="White" CornerRadius="5" Margin="2">
<Image Style="{StaticResource styleImgContextMenuItemIcon}" Source="pack://application:,,,/VisionCommonUI;component/Icons/ColorIcons/img_download.png"/>
</Border>
</MenuItem.Icon>
</MenuItem>
<MenuItem Click="OnSaveOverlay">
<MenuItem.Header>
<TextBlock>
<Run Text="{Binding [Save], Source={StaticResource langTokens}, Mode=OneWay}"/>
<Run Text="{Binding [Overlay], Source={StaticResource langTokens}, Mode=OneWay}"/>
</TextBlock>
</MenuItem.Header>
<MenuItem.Icon>
<Border x:Name="bdSaveOverlay" Background="White" CornerRadius="5" Margin="2">
<Image Style="{StaticResource styleImgContextMenuItemIcon}" Source="pack://application:,,,/VisionCommonUI;component/Icons/ColorIcons/img_download.png"/>
</Border>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</Button.ContextMenu>
<Image x:Name="imgLoadAndSaveImage" Height="25" Style="{StaticResource styleImgCamTool}" Source="pack://application:,,,/VisionCommonUI;component/Icons/icon_photo.png"/>
</Button>
<!--Find Mark Button-->
<Button Style="{StaticResource styleBtnNormalCamTool}"
Command="{Binding ButtonCommandFindMark}"
x:Name="btnFindMark" ToolTip="Find mark position."
Visibility="Collapsed">
<Image x:Name="imgFindMark" Style="{StaticResource styleImgCamTool}" Source="pack://application:,,,/VisionCommonUI;component/Icons/icon_find.png"/>
</Button>
<!--Fit Image Button-->
<!--<Button Style="{StaticResource styleBtnNormalCamTool}"
Command="{Binding ButtonCommandFitImage}"
x:Name="btnFitImage" ToolTip="Fit image to display.">
<Image x:Name="imgFitImage" Height="21" Style="{StaticResource styleImgCamTool}" Source="pack://application:,,,/VisionCommonUI;component/Icons/icon_fit.png"/>
</Button>-->
<Button x:Name="btnFitImageAndShowCamWindow"
Style="{StaticResource styleBtnNormalCamTool}" ToolTip="Fit image or show cam window.">
<b:Interaction.Triggers>
<b:EventTrigger EventName="Click">
<b:ChangePropertyAction TargetName="fitImageAndShowCamWindowContextMenu"
PropertyName="IsOpen"
Value="True"/>
</b:EventTrigger>
</b:Interaction.Triggers>
<Button.ContextMenu>
<ContextMenu x:Name="fitImageAndShowCamWindowContextMenu">
<MenuItem Click="OnFitImage">
<MenuItem.Header>
<TextBlock>
<Run Text="{Binding [Fit], Source={StaticResource langTokens}, Mode=OneWay}"/>
<Run Text="{Binding [Image], Source={StaticResource langTokens}, Mode=OneWay}"/>
</TextBlock>
</MenuItem.Header>
<MenuItem.Icon>
<Border x:Name="bdFitImage" Background="White" CornerRadius="5" Margin="2">
<Image Style="{StaticResource styleImgContextMenuItemIcon}" Source="pack://application:,,,/VisionCommonUI;component/Icons/ColorIcons/img_fit_2.png"/>
</Border>
</MenuItem.Icon>
</MenuItem>
<MenuItem x:Name="menuShowCamWindow" Click="OnShowCamWindow">
<MenuItem.Header>
<TextBlock>
<Run Text="{Binding [Show], Source={StaticResource langTokens}, Mode=OneWay}"/>
<Run Text="{Binding [Cam], Source={StaticResource langTokens}, Mode=OneWay}"/>
<Run Text="{Binding [Window], Source={StaticResource langTokens}, Mode=OneWay}"/>
</TextBlock>
</MenuItem.Header>
<MenuItem.Icon>
<Border x:Name="bdShowCamWindow" Background="White" CornerRadius="5" Margin="2">
<Image Style="{StaticResource styleImgContextMenuItemIcon}" Source="pack://application:,,,/VisionCommonUI;component/Icons/ColorIcons/img_maximize.png"/>
</Border>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</Button.ContextMenu>
<Image x:Name="imgFitImage" Height="21" Style="{StaticResource styleImgCamTool}" Source="pack://application:,,,/VisionCommonUI;component/Icons/icon_fit.png"/>
</Button>
<!--Switch Cam View Button-->
<Button Style="{StaticResource styleBtnNormalCamTool}"
Command="{Binding ButtonCommandSwitchCamView}"
x:Name="btnSwitchCamView" ToolTip="Switch camera view.">
<Image x:Name="imgSwitchCamView" Width="23" Style="{StaticResource styleImgCamTool}" Source="pack://application:,,,/VisionCommonUI;component/Icons/img_arrow_right.png"/>
</Button>
<Button Style="{StaticResource styleBtnNormalCamTool}"
Command="{Binding ButtonCommandCollapse}"
x:Name="btnCollapse" ToolTip="Button Collapse.">
<Button.Visibility>
<MultiBinding Converter="{StaticResource visibilityConverter}">
<Binding Path="IsCollapsed"/>
<Binding Path="ActualWidth" ElementName="bdCamView"/>
<Binding Path="Name" ElementName="btnCollapse"/>
</MultiBinding>
</Button.Visibility>
<Image x:Name="imgCollapse"
Style="{StaticResource styleImgCamTool}" Source="pack://application:,,,/VisionCommonUI;component/Icons/icon_collapse.png"/>
</Button>
</StackPanel>
</Viewbox>
<Viewbox Stretch="Uniform" MaxHeight="21" MinHeight="10" Name="DisplayName">
<Viewbox.Visibility>
<MultiBinding Converter="{StaticResource visibilityConverter}">
<Binding Path="IsCollapsed"/>
<Binding Path="ActualWidth" ElementName="bdCamView"/>
<Binding Path="Name" ElementName="DisplayName"/>
</MultiBinding>
</Viewbox.Visibility>
<TextBlock x:Name="tbDisplayName" Text="{Binding DisplayName}"
FontSize="20" Margin="4,0,0,4"/>
</Viewbox>
</DockPanel>
<local:CameraDisplay x:Name="milCameraDisplay"/>
</DockPanel>
</Border>
</UserControl>