mirror of
https://github.com/riegera2412/UVtools.git
synced 2026-07-08 17:42:31 +02:00
816898836b
- **File formats:** - (Add) File extension: .gktwo.ctb to `ChituboxFile` to be able to convert files for UniFormation GKtwo under special CTB format - (Add) UniFormation GKtwo compatibility under CTB format, if exporting JXS rename to CTB before open - (Fix) CTB, CBDDLP, PHOTON, FDG, PHZ: Read and write files larger then 4GB (#608) - **PCB Exposure:** - (Add) Offset X/Y to offset the PCB from it origin - (Add) Allow to toggle between "Show preview image cropped by it bounds" and "Show full preview image (The final result)" - (Improvement) Use rectangle instead of line for center line primitive (#607) - (Fix) Implement rotation to polygon and center line primitives (#607) - (Fix) Macros in a single line was not being parsed (#607) - (Fix) Invert color per file was not affecting primitives - **Network printers:** - (Add) Socket requests with TCP and UDP - (Add) AnyCubic printer preset (However it can't upload a file) - (Add) Scripts in request path to allow a first request to fetch data to the final request: - A script starts with **<\?** and ends with **?>** - First parameter is the first request to get response content from - Second parameter is the regex pattern to match content with - Third parameter is the final request that supports a parameter from regex matching group, eg: **{#1}** is match Group[1] value - **Example:** <\? getfiles > {0}\/(\d+\.[\da-zA-Z]+), > printfile,{#1} ?> - (Change) Allow to print a filename without send it when upload request path is empty - (Fix) Do not show printers with empty requests - (Change) Default layer compression to Lz4 instead of Png - (Improvement) Application is now culture aware but set part of `NumberFormat` to the `InvariantCulture.NumberFormat` - (Improvement) Material cost now show with the current culture currency symbol due previous change - (Improvement) Better submit of bug reports using sections and forms - (Improvement) Linux: AppImage now have a help manual with possible arguments and parameters - (Improvement) macOS: Codesign app on auto-installer and auto-upgrade to bypass arm64 run restriction (#431) - (Improvement) macOS: Rebuilt arm64 libcvextern.dylib to run with less dependencies (#431) - (Improvement) macOS: Try to show missing dependencies from openCV (if any) on the error message - (Fix) UI: layers sorted lexicographically instead of numerically in the issues list view (#611) - (Fix) PrusaSlicer printer parameters: UniFormation GKtwo
2180 lines
110 KiB
XML
2180 lines
110 KiB
XML
<controls:WindowEx xmlns="https://github.com/avaloniaui"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
xmlns:controls="clr-namespace:UVtools.WPF.Controls"
|
|
xmlns:i="clr-namespace:Projektanker.Icons.Avalonia;assembly=Projektanker.Icons.Avalonia"
|
|
mc:Ignorable="d" d:DesignWidth="700" d:DesignHeight="450"
|
|
x:Class="UVtools.WPF.Windows.SettingsWindow"
|
|
WindowStartupLocation="CenterOwner"
|
|
MinWidth="600"
|
|
Width="780"
|
|
SizeToContent="Height"
|
|
CanResize="False"
|
|
Title="UVtools - Settings"
|
|
Icon="/Assets/Icons/UVtools.ico">
|
|
<Grid RowDefinitions="*,84">
|
|
<TabControl SelectedIndex="{Binding SelectedTabIndex}">
|
|
<TabItem Header="General" VerticalContentAlignment="Center">
|
|
<ScrollViewer Name="ScrollViewer0">
|
|
<StackPanel Orientation="Vertical" Spacing="5">
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<TextBlock Classes="GroupBoxHeader" Text="Startup"/>
|
|
<StackPanel Margin="10" Orientation="Vertical" Spacing="10">
|
|
<StackPanel Orientation="Horizontal" Spacing="10">
|
|
<TextBlock VerticalAlignment="Center" Text="Theme:" />
|
|
<ComboBox
|
|
HorizontalAlignment="Stretch"
|
|
Width="150"
|
|
Items="{Binding Settings.General.Theme, Converter={StaticResource EnumToCollectionConverter}, Mode=OneTime}"
|
|
SelectedItem="{Binding Settings.General.Theme, Converter={StaticResource FromValueDescriptionToEnumConverter}}"/>
|
|
|
|
</StackPanel>
|
|
|
|
<StackPanel Orientation="Horizontal" Spacing="20">
|
|
<CheckBox IsChecked="{Binding Settings.General.StartMaximized}"
|
|
ToolTip.Tip="If enabled, the main window will show up maximized"
|
|
Content="Start maximized"/>
|
|
|
|
<CheckBox IsChecked="{Binding Settings.General.RestoreWindowLastPosition}"
|
|
IsEnabled="{Binding !Settings.General.StartMaximized}"
|
|
ToolTip.Tip="If enabled, it will restore the main window last known client position on startup"
|
|
Content="Restore window last position"/>
|
|
|
|
<CheckBox IsChecked="{Binding Settings.General.RestoreWindowLastSize}"
|
|
IsEnabled="{Binding !Settings.General.StartMaximized}"
|
|
ToolTip.Tip="If enabled, it will restore the main window last known client size on startup"
|
|
Content="Restore window last size"/>
|
|
</StackPanel>
|
|
<CheckBox IsChecked="{Binding Settings.General.CheckForUpdatesOnStartup}" Content="Check for updates on startup"/>
|
|
<CheckBox IsChecked="{Binding Settings.General.LoadDemoFileOnStartup}" Content="Loads a demo file on startup if no file was specified"/>
|
|
<CheckBox IsChecked="{Binding Settings.General.LoadLastRecentFileOnStartup}" Content="Loads the last recent file on startup if no file was specified"/>
|
|
</StackPanel>
|
|
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<TextBlock Classes="GroupBoxHeader" Text="Tasks"/>
|
|
<StackPanel Margin="10" Orientation="Vertical" Spacing="10">
|
|
<Grid RowDefinitions="Auto,10,Auto,10,Auto"
|
|
ColumnDefinitions="Auto,10,180,5,Auto,20,Auto,2,Auto,2,Auto,2,Auto,2,Auto,2,Auto,2,Auto">
|
|
|
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
ToolTip.Tip="Sets the maximum number of concurrent tasks/threads/operations enabled to run by parallel method calls.
|
|

If your computer lags and freeze during operations you can reduce this number to reduce the workload and keep some cores available to other tasks as well.
|
|

<= 0: Will utilize however many threads the underlying scheduler provides, mostly this is the processor core count.
|
|

1: Single thread."
|
|
Text="Max degree of parallelism:"/>
|
|
|
|
<NumericUpDown Grid.Row="0" Grid.Column="2"
|
|
VerticalAlignment="Center"
|
|
ToolTip.Tip="Sets the maximum number of concurrent tasks/threads/operations enabled to run by parallel method calls.
|
|

If your computer lags and freeze during operations you can reduce this number to reduce the workload and keep some cores available to other tasks as well.
|
|

<= 0: Will utilize however many threads the underlying scheduler provides, mostly this is the processor core count.
|
|

1: Single thread."
|
|
Minimum="-1"
|
|
Maximum="{Binding MaxProcessorCount}"
|
|
Increment="1"
|
|
Value="{Binding Settings.General.MaxDegreeOfParallelism}"/>
|
|
<TextBlock Grid.Row="0" Grid.Column="4"
|
|
VerticalAlignment="Center"
|
|
Text="{Binding MaxProcessorCount, StringFormat=/ {0} threads}"/>
|
|
|
|
<Button Grid.Row="0" Grid.Column="6"
|
|
VerticalAlignment="Center"
|
|
Content="Auto"
|
|
ToolTip.Tip="Will utilize however many threads the underlying scheduler provides (Full performance)"
|
|
Command="{Binding SetMaxDegreeOfParallelism}"
|
|
CommandParameter="-1"/>
|
|
|
|
<Button Grid.Row="0" Grid.Column="8"
|
|
VerticalAlignment="Center"
|
|
Content="1"
|
|
ToolTip.Tip="Single thread (Very slow performance)"
|
|
Command="{Binding SetMaxDegreeOfParallelism}"
|
|
CommandParameter="1"/>
|
|
|
|
<Button Grid.Row="0" Grid.Column="10"
|
|
VerticalAlignment="Center"
|
|
Content="¼"
|
|
ToolTip.Tip="A quarter of the available threads (Slow performance)"
|
|
Command="{Binding SetMaxDegreeOfParallelism}"
|
|
CommandParameter="0.25"/>
|
|
|
|
<Button Grid.Row="0" Grid.Column="12"
|
|
VerticalAlignment="Center"
|
|
Content="½"
|
|
ToolTip.Tip="Half of the available threads (Half performance)"
|
|
Command="{Binding SetMaxDegreeOfParallelism}"
|
|
CommandParameter="0.5"/>
|
|
|
|
<Button Grid.Row="0" Grid.Column="14"
|
|
VerticalAlignment="Center"
|
|
Content="¾"
|
|
ToolTip.Tip="Three quarters of the available threads (Fast performance)"
|
|
Command="{Binding SetMaxDegreeOfParallelism}"
|
|
CommandParameter="0.75"/>
|
|
|
|
<Button Grid.Row="0" Grid.Column="16"
|
|
VerticalAlignment="Center"
|
|
Content="!"
|
|
ToolTip.Tip="Optimal of the available threads, this is your thread count less 2 to relief the workload and leave 2 cores free for other running tasks (Optimal performance)"
|
|
Command="{Binding SetMaxDegreeOfParallelism}"
|
|
CommandParameter="!"/>
|
|
|
|
<Button Grid.Row="0" Grid.Column="18"
|
|
VerticalAlignment="Center"
|
|
Content="Max"
|
|
ToolTip.Tip="{Binding MaxProcessorCount, StringFormat=All of the available threads [{0}] (Full performance)}"
|
|
Command="{Binding SetMaxDegreeOfParallelism}"
|
|
CommandParameter="{Binding MaxProcessorCount}"/>
|
|
|
|
<TextBlock Grid.Row="2" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
ToolTip.Tip="Sets the compression codec used to store the layer image cache.
|
|

The selected method will impact RAM usage and operations speed."
|
|
Text="Layer compression codec:"/>
|
|
|
|
<ComboBox Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="17"
|
|
VerticalAlignment="Center"
|
|
HorizontalAlignment="Stretch"
|
|
Items="{Binding Settings.General.LayerCompressionCodec, Converter={StaticResource EnumToCollectionConverter}, Mode=OneTime}"
|
|
SelectedItem="{Binding Settings.General.LayerCompressionCodec, Converter={StaticResource FromValueDescriptionToEnumConverter}}"/>
|
|
|
|
<TextBlock Grid.Row="4" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
ToolTip.Tip="The average cost per one resin bottle of 1000ml.
|
|

Used to calculate the material cost when the file lacks that information.
|
|

Use 0 to disable this feature and only show the cost if file have that information.
|
|

If this value is changed, you need to reload the current file to update the cost."
|
|
Text="Average resin bottle cost:"/>
|
|
|
|
<NumericUpDown Grid.Row="4" Grid.Column="2"
|
|
Classes="ValueLabel ValueLabel_euro"
|
|
VerticalAlignment="Center"
|
|
ToolTip.Tip="The average cost per one resin bottle of 1000ml.
|
|

Used to calculate the material cost when the file lacks that information.
|
|

Use 0 to disable this feature and only show the cost if file have that information.
|
|

If this value is changed, you need to reload the current file to update the cost."
|
|
Minimum="0"
|
|
Maximum="10000"
|
|
Increment="1"
|
|
Value="{Binding Settings.General.AverageResin1000MlBottleCost}"/>
|
|
<TextBlock Grid.Row="4" Grid.Column="4" Grid.ColumnSpan="15"
|
|
VerticalAlignment="Center"
|
|
Text="/ 1000ml bottle"/>
|
|
</Grid>
|
|
</StackPanel>
|
|
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<TextBlock Classes="GroupBoxHeader" Text="Windows / dialogs"/>
|
|
<StackPanel Margin="10" Orientation="Vertical" Spacing="10">
|
|
|
|
<CheckBox IsChecked="{Binding Settings.General.WindowsCanResize}"
|
|
ToolTip.Tip="Check this option if you have problems with content being cut on some windows, down-size the height by a bit and then expand to fix the content."
|
|
Content="Allow to resize the tool windows"/>
|
|
|
|
<CheckBox IsChecked="{Binding Settings.General.WindowsTakeIntoAccountScreenScaling}"
|
|
Content="Take into account the screen scale factor to limit the dialogs windows maximum size"/>
|
|
|
|
|
|
<Grid RowDefinitions="Auto,10,Auto"
|
|
ColumnDefinitions="Auto,10,Auto">
|
|
|
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
ToolTip.Tip="Limits the windows and dialogs maximum width to the screen resolution less this margin"
|
|
Text="Horizontal limiting margin:"/>
|
|
|
|
<NumericUpDown Grid.Row="0" Grid.Column="2"
|
|
Classes="ValueLabel ValueLabel_px"
|
|
VerticalAlignment="Center"
|
|
ToolTip.Tip="Limits the windows and dialogs maximum width to the screen resolution less this margin"
|
|
Minimum="0"
|
|
Maximum="1000"
|
|
Increment="1"
|
|
Value="{Binding Settings.General.WindowsHorizontalMargin}"/>
|
|
|
|
<TextBlock Grid.Row="2" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
ToolTip.Tip="Limits windows and dialogs maximum height to the screen resolution less this margin"
|
|
Text="Vertical limiting margin:"/>
|
|
|
|
<NumericUpDown Grid.Row="2" Grid.Column="2"
|
|
Classes="ValueLabel ValueLabel_px"
|
|
VerticalAlignment="Center"
|
|
ToolTip.Tip="Limits windows and dialogs maximum height to the screen resolution less this margin"
|
|
Minimum="0"
|
|
Maximum="1000"
|
|
Increment="1"
|
|
Value="{Binding Settings.General.WindowsVerticalMargin}"/>
|
|
</Grid>
|
|
</StackPanel>
|
|
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<TextBlock Classes="GroupBoxHeader" Text="File dialog"/>
|
|
<Grid Margin="10"
|
|
RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto"
|
|
ColumnDefinitions="Auto,10,449,Auto,Auto">
|
|
<TextBlock
|
|
VerticalAlignment="Center"
|
|
Grid.Row="0" Grid.Column="0"
|
|
Text="File open dialog filters:"/>
|
|
<ComboBox Items="{Binding FileOpenDialogFilters}"
|
|
SelectedIndex="{Binding Settings.General.DefaultOpenFileExtensionIndex}"
|
|
HorizontalAlignment="Left"
|
|
Width="517"
|
|
MaxDropDownHeight="350"
|
|
Grid.ColumnSpan="3" Grid.Row="0" Grid.Column="2"/>
|
|
|
|
<TextBlock VerticalAlignment="Center"
|
|
Grid.Row="2" Grid.Column="0"
|
|
Text="File open default directory:"/>
|
|
<TextBox
|
|
Name="General.DefaultDirectoryOpenFile"
|
|
Text="{Binding Settings.General.DefaultDirectoryOpenFile}"
|
|
Grid.Row="2" Grid.Column="2" IsReadOnly="True"/>
|
|
<Button Grid.Row="2" Grid.Column="3"
|
|
VerticalAlignment="Stretch"
|
|
HorizontalAlignment="Stretch"
|
|
i:Attached.Icon="fa-solid fa-folder"
|
|
Command="{Binding GeneralOpenFolderField}"
|
|
CommandParameter="DefaultDirectoryOpenFile"/>
|
|
<Button Grid.Row="2" Grid.Column="4"
|
|
VerticalAlignment="Stretch"
|
|
HorizontalAlignment="Stretch"
|
|
i:Attached.Icon="fa-solid fa-xmark"
|
|
Command="{Binding GeneralClearField}"
|
|
CommandParameter="DefaultDirectoryOpenFile"/>
|
|
|
|
<TextBlock VerticalAlignment="Center"
|
|
Grid.Row="4" Grid.Column="0"
|
|
Text="File save as default directory:"/>
|
|
<TextBox
|
|
Name="General.DefaultDirectorySaveFile"
|
|
Text="{Binding Settings.General.DefaultDirectorySaveFile}"
|
|
Grid.Row="4" Grid.Column="2" IsReadOnly="True"/>
|
|
<Button Grid.Row="4" Grid.Column="3"
|
|
VerticalAlignment="Stretch"
|
|
HorizontalAlignment="Stretch"
|
|
i:Attached.Icon="fa-solid fa-folder"
|
|
Command="{Binding GeneralOpenFolderField}"
|
|
CommandParameter="DefaultDirectorySaveFile"/>
|
|
<Button Grid.Row="4" Grid.Column="4"
|
|
VerticalAlignment="Stretch"
|
|
HorizontalAlignment="Stretch"
|
|
i:Attached.Icon="fa-solid fa-xmark"
|
|
Command="{Binding GeneralClearField}"
|
|
CommandParameter="DefaultDirectorySaveFile"/>
|
|
|
|
|
|
<TextBlock VerticalAlignment="Center"
|
|
Grid.Row="6" Grid.Column="0"
|
|
Text="File extract default directory:"/>
|
|
<TextBox
|
|
Name="General.DefaultDirectoryExtractFile"
|
|
Text="{Binding Settings.General.DefaultDirectoryExtractFile}"
|
|
Grid.Row="6" Grid.Column="2" IsReadOnly="True"/>
|
|
<Button Grid.Row="6" Grid.Column="3"
|
|
VerticalAlignment="Stretch"
|
|
HorizontalAlignment="Stretch"
|
|
i:Attached.Icon="fa-solid fa-folder"
|
|
Command="{Binding GeneralOpenFolderField}"
|
|
CommandParameter="DefaultDirectoryExtractFile"/>
|
|
<Button Grid.Row="6" Grid.Column="4"
|
|
VerticalAlignment="Stretch"
|
|
HorizontalAlignment="Stretch"
|
|
i:Attached.Icon="fa-solid fa-xmark"
|
|
Command="{Binding GeneralClearField}"
|
|
CommandParameter="DefaultDirectoryExtractFile"/>
|
|
|
|
<TextBlock VerticalAlignment="Center"
|
|
Grid.Row="8" Grid.Column="0"
|
|
Text="File convert default directory:"/>
|
|
<TextBox
|
|
Name="General.DefaultDirectoryConvertFile"
|
|
Text="{Binding Settings.General.DefaultDirectoryConvertFile}"
|
|
Grid.Row="8" Grid.Column="2" IsReadOnly="True"/>
|
|
<Button Grid.Row="8" Grid.Column="3"
|
|
VerticalAlignment="Stretch"
|
|
HorizontalAlignment="Stretch"
|
|
i:Attached.Icon="fa-solid fa-folder"
|
|
Command="{Binding GeneralOpenFolderField}"
|
|
CommandParameter="DefaultDirectoryConvertFile"/>
|
|
<Button Grid.Row="8" Grid.Column="4"
|
|
Command="{Binding GeneralClearField}"
|
|
CommandParameter="DefaultDirectoryConvertFile"
|
|
VerticalAlignment="Stretch"
|
|
HorizontalAlignment="Stretch"
|
|
i:Attached.Icon="fa-solid fa-xmark"/>
|
|
|
|
<TextBlock VerticalAlignment="Center"
|
|
Grid.Row="10" Grid.Column="0"
|
|
Text="Scripts default directory:"/>
|
|
<TextBox
|
|
Name="General.DefaultDirectoryScripts"
|
|
Text="{Binding Settings.General.DefaultDirectoryScripts}"
|
|
Grid.Row="10" Grid.Column="2" IsReadOnly="True"/>
|
|
<Button Grid.Row="10" Grid.Column="3"
|
|
VerticalAlignment="Stretch"
|
|
HorizontalAlignment="Stretch"
|
|
i:Attached.Icon="fa-solid fa-folder"
|
|
Command="{Binding GeneralOpenFolderField}"
|
|
CommandParameter="DefaultDirectoryScripts"/>
|
|
<Button Grid.Row="10" Grid.Column="4"
|
|
Command="{Binding GeneralClearField}"
|
|
CommandParameter="DefaultDirectoryScripts"
|
|
VerticalAlignment="Stretch"
|
|
HorizontalAlignment="Stretch"
|
|
i:Attached.Icon="fa-solid fa-xmark"/>
|
|
|
|
</Grid>
|
|
<CheckBox IsChecked="{Binding Settings.General.PromptOverwriteFileSave}" Margin="10,0" Content="On file 'Save' prompt for file overwrite for the first time" />
|
|
|
|
<Grid Margin="10" ColumnDefinitions="Auto,*,Auto,*">
|
|
<TextBlock VerticalAlignment="Center" Grid.Column="0" Text="File 'Save as' prefix:"/>
|
|
<TextBox Text="{Binding Settings.General.FileSaveNamePrefix}"
|
|
Grid.Column="1" Margin="10,0,10,0"/>
|
|
<TextBlock VerticalAlignment="Center" Grid.Column="2" Text="Suffix:"/>
|
|
<TextBox Text="{Binding Settings.General.FileSaveNameSuffix}"
|
|
Grid.Column="3" Margin="10,0,0,0"/>
|
|
</Grid>
|
|
</StackPanel>
|
|
|
|
|
|
</Border>
|
|
|
|
<Border Classes="GroupBox" Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<Grid RowDefinitions="Auto" ColumnDefinitions="*,Auto" Classes="GroupBoxHeader">
|
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Padding="10" FontWeight="Bold" Text="Send to - Custom location"/>
|
|
|
|
<StackPanel Grid.Row="0" Grid.Column="1"
|
|
HorizontalAlignment="Right" Orientation="Horizontal" Spacing="2">
|
|
<Button ToolTip.Tip="Add location" VerticalAlignment="Center"
|
|
i:Attached.Icon="fa-solid fa-plus"
|
|
Command="{Binding SendToAddCustomLocation}"/>
|
|
|
|
<Button ToolTip.Tip="Remove selected locations" VerticalAlignment="Center"
|
|
IsEnabled="{Binding #SendToCustomLocationsGrid.SelectedItem, Converter={x:Static ObjectConverters.IsNotNull}}"
|
|
i:Attached.Icon="fa-solid fa-trash-alt"
|
|
Command="{Binding SendToRemoveCustomLocations}"/>
|
|
</StackPanel>
|
|
|
|
</Grid>
|
|
|
|
<StackPanel Margin="10" Orientation="Vertical" Spacing="10">
|
|
|
|
<CheckBox
|
|
IsChecked="{Binding Settings.General.SendToPromptForRemovableDeviceEject}"
|
|
Content="When send to a removable device, prompt for device ejection after copied [Windows only]"/>
|
|
|
|
<DataGrid
|
|
Name="SendToCustomLocationsGrid"
|
|
CanUserReorderColumns="True"
|
|
CanUserResizeColumns="True"
|
|
CanUserSortColumns="True"
|
|
GridLinesVisibility="Horizontal"
|
|
IsReadOnly="False"
|
|
MinHeight="100"
|
|
SelectionMode="Extended"
|
|
ClipboardCopyMode="IncludeHeader"
|
|
Items="{Binding Settings.General.SendToCustomLocations}">
|
|
<DataGrid.Columns>
|
|
<DataGridCheckBoxColumn Header="Enabled"
|
|
Binding="{Binding IsEnabled}"
|
|
IsReadOnly="False"
|
|
Width="Auto" />
|
|
<DataGridTextColumn Header="Path"
|
|
Binding="{Binding Path}"
|
|
IsReadOnly="True"
|
|
Width="*" />
|
|
<DataGridTextColumn Header="Alias name"
|
|
Binding="{Binding Name}"
|
|
IsReadOnly="False"
|
|
Width="200" />
|
|
<DataGridTextColumn Header="Extensions"
|
|
Binding="{Binding CompatibleExtensions}"
|
|
IsReadOnly="False"
|
|
Width="150" />
|
|
</DataGrid.Columns>
|
|
|
|
</DataGrid>
|
|
</StackPanel>
|
|
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<Grid RowDefinitions="Auto" ColumnDefinitions="*,Auto" Classes="GroupBoxHeader">
|
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
|
ToolTip.Tip="Allow to open a new process with arguments and pass the current file.

|
|

Wait exit: Interrupt the UI and wait for process completion/exit.
|
|

Arguments: Use "{0}" to indicate the current loaded file path, when empty, it will pass "{0}" by default."
|
|
VerticalAlignment="Center"
|
|
Padding="10" FontWeight="Bold" Text="Send to - Process"/>
|
|
|
|
<StackPanel Grid.Row="0" Grid.Column="1"
|
|
HorizontalAlignment="Right" Orientation="Horizontal" Spacing="2">
|
|
<Button ToolTip.Tip="Add location" VerticalAlignment="Center"
|
|
i:Attached.Icon="fa-solid fa-plus"
|
|
Command="{Binding SendToAddProcess}"/>
|
|
|
|
<Button ToolTip.Tip="Remove selected process(es)" VerticalAlignment="Center"
|
|
IsEnabled="{Binding #SendToProcessGrid.SelectedItem, Converter={x:Static ObjectConverters.IsNotNull}}"
|
|
i:Attached.Icon="fa-solid fa-trash-alt"
|
|
Command="{Binding SendToRemoveProcess}"/>
|
|
</StackPanel>
|
|
|
|
</Grid>
|
|
|
|
<StackPanel Margin="10" Orientation="Vertical" Spacing="10">
|
|
|
|
<DataGrid
|
|
Name="SendToProcessGrid"
|
|
CanUserReorderColumns="True"
|
|
CanUserResizeColumns="True"
|
|
CanUserSortColumns="True"
|
|
GridLinesVisibility="Horizontal"
|
|
IsReadOnly="False"
|
|
SelectionMode="Extended"
|
|
ClipboardCopyMode="IncludeHeader"
|
|
MinHeight="100"
|
|
Items="{Binding Settings.General.SendToProcess}">
|
|
<DataGrid.Columns>
|
|
<DataGridCheckBoxColumn Header="Enabled"
|
|
Binding="{Binding IsEnabled}"
|
|
IsReadOnly="False"
|
|
Width="Auto" />
|
|
<DataGridCheckBoxColumn Header="Wait exit"
|
|
Binding="{Binding WaitForExit}"
|
|
IsReadOnly="False"
|
|
Width="Auto" />
|
|
<DataGridTextColumn Header="Alias name"
|
|
Binding="{Binding Name}"
|
|
IsReadOnly="False"
|
|
Width="150" />
|
|
<DataGridTextColumn Header="Process path"
|
|
Binding="{Binding ApplicationPath}"
|
|
IsReadOnly="True"
|
|
Width="*" />
|
|
<DataGridTextColumn Header="Arguments"
|
|
Binding="{Binding Arguments}"
|
|
IsReadOnly="False"
|
|
Width="110" />
|
|
<DataGridTextColumn Header="Extensions"
|
|
Binding="{Binding CompatibleExtensions}"
|
|
IsReadOnly="False"
|
|
Width="150" />
|
|
</DataGrid.Columns>
|
|
|
|
</DataGrid>
|
|
</StackPanel>
|
|
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
</StackPanel>
|
|
</ScrollViewer>
|
|
|
|
</TabItem>
|
|
<TabItem Header="Layer preview" VerticalContentAlignment="Center">
|
|
<ScrollViewer Name="ScrollViewer1">
|
|
<StackPanel Orientation="Vertical" Spacing="5">
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<TextBlock Classes="GroupBoxHeader" Text="Layer colors"/>
|
|
|
|
<Grid Margin="10"
|
|
RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto"
|
|
ColumnDefinitions="Auto,Auto,Auto,Auto,*">
|
|
|
|
<!--Tooltip overlay-->
|
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Tooltip overlay:"/>
|
|
<Button Grid.Row="0" Grid.Column="1"
|
|
Margin="10,0,0,0"
|
|
Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
VerticalAlignment="Center"
|
|
Background="{Binding Settings.LayerPreview.TooltipOverlayBackgroundBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="TooltipOverlayBackgroundColor"/>
|
|
<CheckBox Grid.Row="0" Grid.Column="4"
|
|
Margin="10,0,0,0"
|
|
HorizontalAlignment="Right"
|
|
VerticalAlignment="Center"
|
|
Content="Show by default"
|
|
IsChecked="{Binding Settings.LayerPreview.TooltipOverlay}"/>
|
|
|
|
|
|
<!--Print volume boundary-->
|
|
<TextBlock Grid.Row="2" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Print volume boundary:"/>
|
|
|
|
<Button Grid.Row="2" Grid.Column="1"
|
|
Margin="10,0,0,0"
|
|
Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
VerticalAlignment="Center"
|
|
Background="{Binding Settings.LayerPreview.VolumeBoundsOutlineBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="VolumeBoundsOutlineColor"/>
|
|
<NumericUpDown Grid.Row="2" Grid.Column="2"
|
|
Margin="10,0,0,0"
|
|
VerticalAlignment="Center"
|
|
Minimum="1"
|
|
Maximum="50"
|
|
Value="{Binding Settings.LayerPreview.VolumeBoundsOutlineThickness}"/>
|
|
<TextBlock Grid.Row="2" Grid.Column="3"
|
|
Margin="5,0,0,0"
|
|
VerticalAlignment="Center"
|
|
Text="Line thickness"/>
|
|
<CheckBox Grid.Row="2" Grid.Column="4"
|
|
Margin="10,0,0,0"
|
|
HorizontalAlignment="Right"
|
|
VerticalAlignment="Center"
|
|
Content="Show by default"
|
|
IsChecked="{Binding Settings.LayerPreview.VolumeBoundsOutline}"/>
|
|
|
|
<!--Layer boundary-->
|
|
<TextBlock Grid.Row="4" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Layer boundary:"/>
|
|
<Button Grid.Row="4" Grid.Column="1"
|
|
Margin="10,0,0,0"
|
|
Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
VerticalAlignment="Center"
|
|
Background="{Binding Settings.LayerPreview.LayerBoundsOutlineBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="LayerBoundsOutlineColor"/>
|
|
<NumericUpDown Grid.Row="4" Grid.Column="2"
|
|
Margin="10,0,0,0"
|
|
VerticalAlignment="Center"
|
|
|
|
Minimum="1"
|
|
Maximum="50"
|
|
Value="{Binding Settings.LayerPreview.LayerBoundsOutlineThickness}"/>
|
|
<TextBlock Grid.Row="4" Grid.Column="3"
|
|
Margin="5,0,0,0"
|
|
VerticalAlignment="Center"
|
|
Text="Line thickness"/>
|
|
<CheckBox Grid.Row="4" Grid.Column="4"
|
|
Margin="10,0,0,0"
|
|
HorizontalAlignment="Right"
|
|
VerticalAlignment="Center"
|
|
Content="Show by default"
|
|
IsChecked="{Binding Settings.LayerPreview.LayerBoundsOutline}"/>
|
|
|
|
<!--Blob boundary-->
|
|
<TextBlock Grid.Row="6" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Blob boundary:"/>
|
|
<Button Grid.Row="6" Grid.Column="1"
|
|
Margin="10,0,0,0"
|
|
Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
VerticalAlignment="Center"
|
|
Background="{Binding Settings.LayerPreview.ContourBoundsOutlineBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="LayerBoundsOutlineColor"/>
|
|
<NumericUpDown Grid.Row="6" Grid.Column="2"
|
|
Margin="10,0,0,0"
|
|
VerticalAlignment="Center"
|
|
Minimum="1"
|
|
Maximum="50"
|
|
Value="{Binding Settings.LayerPreview.ContourBoundsOutlineThickness}"/>
|
|
<TextBlock Grid.Row="6" Grid.Column="3"
|
|
Margin="5,0,0,0"
|
|
VerticalAlignment="Center"
|
|
Text="Line thickness"/>
|
|
<CheckBox Grid.Row="6" Grid.Column="4"
|
|
Margin="10,0,0,0"
|
|
HorizontalAlignment="Right"
|
|
VerticalAlignment="Center"
|
|
Content="Show by default"
|
|
IsChecked="{Binding Settings.LayerPreview.ContourBoundsOutline}"/>
|
|
|
|
|
|
<!--Hollow area boundary-->
|
|
<TextBlock Grid.Row="8" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Hollow area outline:"/>
|
|
<Button Grid.Row="8" Grid.Column="1"
|
|
Margin="10,0,0,0"
|
|
Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
VerticalAlignment="Center"
|
|
Background="{Binding Settings.LayerPreview.HollowOutlineBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="HollowOutlineColor"/>
|
|
<NumericUpDown Grid.Row="8" Grid.Column="2"
|
|
Margin="10,0,0,0"
|
|
VerticalAlignment="Center"
|
|
Minimum="-1"
|
|
Maximum="127"
|
|
Value="{Binding Settings.LayerPreview.HollowOutlineLineThickness}"/>
|
|
<TextBlock Grid.Row="8" Grid.Column="3"
|
|
Margin="5,0,0,0"
|
|
VerticalAlignment="Center"
|
|
ToolTip.Tip="Set -1 to fill the area"
|
|
Text="Line thickness"/>
|
|
<CheckBox Grid.Row="8" Grid.Column="4"
|
|
Margin="10,0,0,0"
|
|
HorizontalAlignment="Right"
|
|
VerticalAlignment="Center"
|
|
Content="Show by default"
|
|
IsChecked="{Binding Settings.LayerPreview.HollowOutline}"/>
|
|
|
|
<!--Centroids boundary-->
|
|
<TextBlock Grid.Row="10" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Centroids:"/>
|
|
<Button Grid.Row="10" Grid.Column="1"
|
|
Margin="10,0,0,0"
|
|
Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
VerticalAlignment="Center"
|
|
Background="{Binding Settings.LayerPreview.CentroidOutlineBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="LayerBoundsOutlineColor"/>
|
|
<NumericUpDown Grid.Row="10" Grid.Column="2"
|
|
Margin="10,0,0,0"
|
|
VerticalAlignment="Center"
|
|
Minimum="1"
|
|
Maximum="50"
|
|
Value="{Binding Settings.LayerPreview.CentroidOutlineDiameter}"/>
|
|
<TextBlock Grid.Row="10" Grid.Column="3"
|
|
Margin="5,0,0,0"
|
|
VerticalAlignment="Center"
|
|
Text="Diameter"/>
|
|
|
|
<StackPanel
|
|
HorizontalAlignment="Right"
|
|
VerticalAlignment="Center"
|
|
Grid.Row="10" Grid.Column="3" Grid.ColumnSpan="2" Orientation="Horizontal" Spacing="10">
|
|
<CheckBox Content="Hollow centroids"
|
|
IsChecked="{Binding Settings.LayerPreview.CentroidOutlineHollow}"/>
|
|
|
|
<CheckBox Content="Show by default"
|
|
IsChecked="{Binding Settings.LayerPreview.CentroidOutline}"/>
|
|
</StackPanel>
|
|
|
|
<!-- Triangulate -->
|
|
<TextBlock Grid.Row="12" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Triangulate:"/>
|
|
<Button Grid.Row="12" Grid.Column="1"
|
|
Margin="10,0,0,0"
|
|
Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
VerticalAlignment="Center"
|
|
Background="{Binding Settings.LayerPreview.TriangulateOutlineBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="TriangulateOutlineColor"/>
|
|
<NumericUpDown Grid.Row="12" Grid.Column="2"
|
|
Margin="10,0,0,0"
|
|
VerticalAlignment="Center"
|
|
Minimum="1"
|
|
Maximum="50"
|
|
Value="{Binding Settings.LayerPreview.TriangulateOutlineLineThickness}"/>
|
|
<TextBlock Grid.Row="12" Grid.Column="3"
|
|
Margin="5,0,0,0"
|
|
VerticalAlignment="Center"
|
|
Text="Line thickness"/>
|
|
|
|
<StackPanel
|
|
HorizontalAlignment="Right"
|
|
VerticalAlignment="Center"
|
|
Grid.Row="12" Grid.Column="3" Grid.ColumnSpan="2" Orientation="Horizontal" Spacing="10">
|
|
<CheckBox Content="Show triangle count"
|
|
IsChecked="{Binding Settings.LayerPreview.TriangulateOutlineShowCount}"/>
|
|
</StackPanel>
|
|
|
|
<!--Masks-->
|
|
<TextBlock Grid.Row="14" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Mask area outline:"/>
|
|
<Button Grid.Row="14" Grid.Column="1"
|
|
Margin="10,0,0,0"
|
|
Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
VerticalAlignment="Center"
|
|
Background="{Binding Settings.LayerPreview.MaskOutlineBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="MaskOutlineColor"/>
|
|
<NumericUpDown Grid.Row="14" Grid.Column="2"
|
|
Margin="10,0,0,0"
|
|
VerticalAlignment="Center"
|
|
Minimum="-1"
|
|
Maximum="127"
|
|
Value="{Binding Settings.LayerPreview.MaskOutlineLineThickness}"/>
|
|
<TextBlock Grid.Row="14" Grid.Column="3"
|
|
Margin="5,0,0,0"
|
|
VerticalAlignment="Center"
|
|
ToolTip.Tip="Set -1 to fill the area"
|
|
Text="Line thickness"/>
|
|
<CheckBox Grid.Row="14" Grid.Column="4"
|
|
Margin="10,0,0,0"
|
|
HorizontalAlignment="Right"
|
|
VerticalAlignment="Center"
|
|
Content="Clear ROI when adding masks"
|
|
IsChecked="{Binding Settings.LayerPreview.MaskClearROIAfterSet}"/>
|
|
|
|
</Grid>
|
|
|
|
<Grid Margin="10,0,10,10"
|
|
RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto"
|
|
ColumnDefinitions="Auto,Auto,*,Auto,Auto">
|
|
|
|
<!--Previous layer difference & Island-->
|
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Previous layer difference:"/>
|
|
<Button Grid.Row="0" Grid.Column="1"
|
|
Margin="10,0,0,0"
|
|
Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
VerticalAlignment="Center"
|
|
Background="{Binding Settings.LayerPreview.PreviousLayerDifferenceBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="PreviousLayerDifferenceColor"/>
|
|
<TextBlock Grid.Row="0" Grid.Column="2"
|
|
Margin="10,0,0,0"
|
|
HorizontalAlignment="Right"
|
|
VerticalAlignment="Center"
|
|
Text="Island / Selected island:"/>
|
|
<Button Grid.Row="0" Grid.Column="3"
|
|
Margin="10,0,0,0"
|
|
Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
VerticalAlignment="Center"
|
|
Background="{Binding Settings.LayerPreview.IslandBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="IslandColor"/>
|
|
<Button Grid.Row="0" Grid.Column="4"
|
|
Margin="10,0,0,0"
|
|
Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
VerticalAlignment="Center"
|
|
Background="{Binding Settings.LayerPreview.IslandHighlightBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="IslandHighlightColor"/>
|
|
|
|
<!--Next layer difference & Overhang-->
|
|
<TextBlock Grid.Row="2" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Next layer difference:"/>
|
|
<Button Grid.Row="2" Grid.Column="1"
|
|
Margin="10,0,0,0"
|
|
Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
VerticalAlignment="Center"
|
|
Background="{Binding Settings.LayerPreview.NextLayerDifferenceBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="NextLayerDifferenceColor"/>
|
|
|
|
<TextBlock Grid.Row="2" Grid.Column="2"
|
|
Margin="10,0,0,0"
|
|
HorizontalAlignment="Right"
|
|
VerticalAlignment="Center"
|
|
Text="Overhang / Selected overhang:"/>
|
|
<Button Grid.Row="2" Grid.Column="3"
|
|
Margin="10,0,0,0"
|
|
Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
VerticalAlignment="Center"
|
|
Background="{Binding Settings.LayerPreview.OverhangBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="OverhangColor"/>
|
|
<Button Grid.Row="2" Grid.Column="4"
|
|
Margin="10,0,0,0"
|
|
Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
VerticalAlignment="Center"
|
|
Background="{Binding Settings.LayerPreview.OverhangHighlightBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="OverhangHighlightColor"
|
|
/>
|
|
|
|
<!--Next&prev layer difference & Resin traps-->
|
|
<TextBlock Grid.Row="4" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Prev & next layer difference:"/>
|
|
<Button Grid.Row="4" Grid.Column="1"
|
|
Margin="10,0,0,0"
|
|
Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
VerticalAlignment="Center"
|
|
Background="{Binding Settings.LayerPreview.BothLayerDifferenceBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="BothLayerDifferenceColor"/>
|
|
|
|
<TextBlock Grid.Row="4" Grid.Column="2"
|
|
Margin="10,0,0,0"
|
|
HorizontalAlignment="Right"
|
|
VerticalAlignment="Center"
|
|
Text="Resin trap / Selected Resin trap:"/>
|
|
<Button Grid.Row="4" Grid.Column="3"
|
|
Margin="10,0,0,0"
|
|
Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
VerticalAlignment="Center"
|
|
Background="{Binding Settings.LayerPreview.ResinTrapBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="ResinTrapColor"/>
|
|
<Button Grid.Row="4" Grid.Column="4"
|
|
Margin="10,0,0,0"
|
|
Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
VerticalAlignment="Center"
|
|
Background="{Binding Settings.LayerPreview.ResinTrapHighlightBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="ResinTrapHighlightColor"/>
|
|
|
|
<!--Diff & suction cups-->
|
|
<CheckBox Grid.Row="6" Grid.Column="0"
|
|
Grid.ColumnSpan="3"
|
|
Content="Show layer difference by default"
|
|
IsChecked="{Binding Settings.LayerPreview.ShowLayerDifference}"/>
|
|
|
|
<TextBlock Grid.Row="6" Grid.Column="2"
|
|
Margin="10,0,0,0"
|
|
HorizontalAlignment="Right"
|
|
VerticalAlignment="Center"
|
|
Text="Suction cup / Selected Suction cup:"/>
|
|
<Button Grid.Row="6" Grid.Column="3"
|
|
Margin="10,0,0,0"
|
|
Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
VerticalAlignment="Center"
|
|
Background="{Binding Settings.LayerPreview.SuctionCupBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="SuctionCupColor"/>
|
|
<Button Grid.Row="6" Grid.Column="4"
|
|
Margin="10,0,0,0"
|
|
Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
VerticalAlignment="Center"
|
|
Background="{Binding Settings.LayerPreview.SuctionCupHighlightBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="SuctionCupHighlightColor"/>
|
|
|
|
|
|
<!--Diff & Touching bounds-->
|
|
|
|
<CheckBox Grid.Row="8" Grid.Column="0"
|
|
Grid.ColumnSpan="3"
|
|
Content="Show layer similarity instead of difference"
|
|
ToolTip.Tip="If enabled, it will recolor the current layer pixels in common with the previous and next layer"
|
|
IsChecked="{Binding Settings.LayerPreview.LayerDifferenceHighlightSimilarityInstead}"/>
|
|
|
|
<TextBlock Grid.Row="8" Grid.Column="2"
|
|
Margin="10,0,0,0"
|
|
HorizontalAlignment="Right"
|
|
VerticalAlignment="Center"
|
|
Text="Touching boundary:"/>
|
|
<Button Grid.Row="8" Grid.Column="3"
|
|
Margin="10,0,0,0"
|
|
Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
VerticalAlignment="Center"
|
|
Background="{Binding Settings.LayerPreview.TouchingBoundsBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="TouchingBoundsColor"/>
|
|
|
|
|
|
<!-- Crosshair -->
|
|
<CheckBox Grid.Row="10" Grid.Column="0"
|
|
Grid.ColumnSpan="3"
|
|
Content="Colorize the issue tracker map with it own colors"
|
|
ToolTip.Tip="Issue color priority: Islands->Overhangs->Resin traps->Suction cups.
|
|

If disabled, red will be used to display each layer issue."
|
|
IsChecked="{Binding Settings.LayerPreview.UseIssueColorOnTracker}"/>
|
|
<TextBlock Grid.Row="10" Grid.Column="2"
|
|
Margin="10,0,0,0"
|
|
HorizontalAlignment="Right"
|
|
VerticalAlignment="Center"
|
|
Text="Crosshair:"/>
|
|
<Button Grid.Row="10" Grid.Column="3"
|
|
Margin="10,0,0,0"
|
|
Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
VerticalAlignment="Center"
|
|
Background="{Binding Settings.LayerPreview.CrosshairBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="CrosshairColor"/>
|
|
</Grid>
|
|
</StackPanel>
|
|
|
|
|
|
</Border>
|
|
|
|
<!--Zoom-->
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<TextBlock Classes="GroupBoxHeader" Text="Zoom"/>
|
|
<Grid Margin="10" RowDefinitions="Auto" ColumnDefinitions="Auto,250,*,100">
|
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Zoom out to fit:"/>
|
|
|
|
<ComboBox Grid.Row="0" Grid.Column="1"
|
|
Margin="10,0,0,0"
|
|
VerticalAlignment="Center"
|
|
SelectedIndex="{Binding Settings.LayerPreview.ZoomToFitPrintVolumeBounds}"
|
|
HorizontalAlignment="Stretch">
|
|
<ComboBox.Items>
|
|
<ComboBoxItem Content="Print Volume Boundary" />
|
|
<ComboBoxItem Content="Layer Boundary" />
|
|
</ComboBox.Items>
|
|
</ComboBox>
|
|
|
|
<TextBlock Grid.Row="0" Grid.Column="2"
|
|
Margin="10,0,0,0"
|
|
VerticalAlignment="Center"
|
|
HorizontalAlignment="Right"
|
|
Text="Zoom in factor:"
|
|
/>
|
|
|
|
<ComboBox Grid.Row="0" Grid.Column="3"
|
|
Margin="10,0,0,0"
|
|
VerticalAlignment="Center"
|
|
Items="{Binding ZoomRanges}"
|
|
SelectedIndex="{Binding Settings.LayerPreview.ZoomLockLevelIndex}"
|
|
HorizontalAlignment="Stretch"
|
|
/>
|
|
|
|
</Grid>
|
|
|
|
<CheckBox
|
|
Margin="10,0,10,10"
|
|
Content="Auto zoom & center issues on selection"
|
|
IsChecked="{Binding Settings.LayerPreview.ZoomIssues}"
|
|
/>
|
|
</StackPanel>
|
|
|
|
</Border>
|
|
|
|
<!--Crosshairs-->
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<TextBlock Classes="GroupBoxHeader" Text="Crosshairs"/>
|
|
<Grid Margin="10" RowDefinitions="Auto,10,Auto" ColumnDefinitions="Auto,150,*,Auto">
|
|
<CheckBox Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2"
|
|
VerticalAlignment="Center"
|
|
Content="Show crosshairs for selected issues only"
|
|
IsChecked="{Binding Settings.LayerPreview.CrosshairShowOnlyOnSelectedIssues}"/>
|
|
<TextBlock Grid.Row="0" Grid.Column="2"
|
|
HorizontalAlignment="Right"
|
|
VerticalAlignment="Center"
|
|
Text="Crosshair size:"/>
|
|
|
|
<NumericUpDown Grid.Row="0" Grid.Column="3"
|
|
Classes="ValueLabel ValueLabel_px"
|
|
Margin="10,0,0,0"
|
|
VerticalAlignment="Center"
|
|
Minimum="1"
|
|
Maximum="1000000"
|
|
Width="70"
|
|
Value="{Binding Settings.LayerPreview.CrosshairLength}"/>
|
|
|
|
<TextBlock Grid.Row="2" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Crosshair fade after:"/>
|
|
<ComboBox Grid.Row="2" Grid.Column="1"
|
|
VerticalAlignment="Center"
|
|
Margin="10,0,0,0"
|
|
Items="{Binding ZoomRanges}"
|
|
SelectedIndex="{Binding Settings.LayerPreview.CrosshairFadeLevelIndex}"/>
|
|
<TextBlock Grid.Row="2" Grid.Column="2"
|
|
HorizontalAlignment="Right"
|
|
VerticalAlignment="Center"
|
|
Text="Crosshair margin:"/>
|
|
|
|
<NumericUpDown Grid.Row="2" Grid.Column="3"
|
|
Classes="ValueLabel ValueLabel_px"
|
|
Margin="10,0,0,0"
|
|
VerticalAlignment="Center"
|
|
Minimum="1"
|
|
Maximum="255"
|
|
Width="70"
|
|
Value="{Binding Settings.LayerPreview.CrosshairMargin}"/>
|
|
|
|
</Grid>
|
|
</StackPanel>
|
|
|
|
</Border>
|
|
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<TextBlock Classes="GroupBoxHeader" Text="Miscellaneous"/>
|
|
|
|
<StackPanel Orientation="Horizontal">
|
|
<CheckBox
|
|
Margin="10,10"
|
|
ToolTip.Tip="Auto rotate the layer preview on file load for a landscape viewport."
|
|
Content="Auto rotate on load"
|
|
IsChecked="{Binding Settings.LayerPreview.AutoRotateLayerBestView}"/>
|
|
|
|
<CheckBox
|
|
Margin="0,0,10,0"
|
|
ToolTip.Tip="Auto flip the layer preview on file load if the file is marked to print mirrored on the printer LCD."
|
|
Content="Auto flip on load"
|
|
IsChecked="{Binding Settings.LayerPreview.AutoFlipLayerIfMirrored}"/>
|
|
|
|
<CheckBox
|
|
Content="Zoom to fit on load"
|
|
IsChecked="{Binding Settings.LayerPreview.LayerZoomToFitOnLoad}"/>
|
|
|
|
</StackPanel>
|
|
|
|
<CheckBox
|
|
Margin="10,0,10,10"
|
|
Content="Show square grid as background"
|
|
IsChecked="{Binding Settings.LayerPreview.ShowBackgroudGrid}"/>
|
|
|
|
<StackPanel Orientation="Horizontal" Spacing="10">
|
|
<NumericUpDown
|
|
Classes="ValueLabel ValueLabel_ms"
|
|
Margin="10,0,0,10"
|
|
VerticalAlignment="Center"
|
|
Minimum="0"
|
|
Maximum="1000"
|
|
Increment="5"
|
|
Value="{Binding Settings.LayerPreview.LayerSliderDebounce}"/>
|
|
|
|
<TextBlock
|
|
Margin="0,0,0,10"
|
|
VerticalAlignment="Center"
|
|
Text="Layer slider debounce time to render the image"
|
|
ToolTip.Tip="Time to wait in milliseconds to render the layer image after navigating on the layer slider while dragging.
|
|

The timer resets every time the slider changes value.
|
|

Use this option when layer images are heavy to load and you can't get a smooth navigation on the slider while dragging.
|
|

Use 0 to disable the delay and instant render the layer."/>
|
|
|
|
</StackPanel>
|
|
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
|
|
</StackPanel>
|
|
</ScrollViewer>
|
|
</TabItem>
|
|
<TabItem Header="Issues" VerticalContentAlignment="Center">
|
|
<Grid RowDefinitions="*">
|
|
<ScrollViewer Name="ScrollViewer2">
|
|
<StackPanel Orientation="Vertical">
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<TextBlock Classes="GroupBoxHeader" Text="Startup"/>
|
|
|
|
|
|
<StackPanel Orientation="Horizontal" Spacing="20">
|
|
<CheckBox Margin="10,10" Content="Compute issues on file load"
|
|
IsChecked="{Binding Settings.Issues.ComputeIssuesOnLoad}"/>
|
|
|
|
<CheckBox Margin="0,10" Content="Auto repair layers and issues on file load"
|
|
IsEnabled="{Binding Settings.Issues.ComputeIssuesOnLoad}"
|
|
IsChecked="{Binding Settings.Issues.AutoRepairIssuesOnLoad}"/>
|
|
</StackPanel>
|
|
|
|
<CheckBox Margin="10,0,10,0" Content="Auto compute issues when the Issues tab is opened for the first time"
|
|
IsChecked="{Binding Settings.Issues.ComputeIssuesOnClickTab}"
|
|
/>
|
|
|
|
<Grid
|
|
RowDefinitions="Auto"
|
|
ColumnDefinitions="Auto,10,Auto"
|
|
Margin="10">
|
|
<TextBlock
|
|
Grid.Row="0"
|
|
Grid.Column="0"
|
|
Text="Compute:" VerticalAlignment="Center"/>
|
|
<StackPanel
|
|
Grid.Row="0"
|
|
Grid.Column="2"
|
|
Orientation="Vertical" Spacing="10">
|
|
|
|
<StackPanel
|
|
Orientation="Horizontal" Spacing="10">
|
|
<CheckBox Content="Islands"
|
|
IsChecked="{Binding Settings.Issues.ComputeIslands}"/>
|
|
<CheckBox Content="Overhangs"
|
|
IsChecked="{Binding Settings.Issues.ComputeOverhangs}"/>
|
|
<CheckBox Content="Resin traps"
|
|
IsChecked="{Binding Settings.Issues.ComputeResinTraps}"/>
|
|
<CheckBox Content="Suction cups"
|
|
IsEnabled="{Binding Settings.Issues.ComputeResinTraps}"
|
|
IsChecked="{Binding Settings.Issues.ComputeSuctionCups}"/>
|
|
<CheckBox Content="Touching boundary"
|
|
IsChecked="{Binding Settings.Issues.ComputeTouchingBounds}"/>
|
|
</StackPanel>
|
|
|
|
<StackPanel Orientation="Horizontal" Spacing="10">
|
|
<CheckBox Content="Print height"
|
|
IsChecked="{Binding Settings.Issues.ComputePrintHeight}"/>
|
|
|
|
<CheckBox Content="Empty layers"
|
|
IsChecked="{Binding Settings.Issues.ComputeEmptyLayers}"/>
|
|
</StackPanel>
|
|
</StackPanel>
|
|
</Grid>
|
|
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<TextBlock Classes="GroupBoxHeader" Text="Issues list"/>
|
|
|
|
<Grid
|
|
RowDefinitions="Auto,10,Auto"
|
|
ColumnDefinitions="Auto,10,*"
|
|
Margin="10">
|
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
|
ToolTip.Tip="Sets the default order for the issue list"
|
|
Text="Order by:" VerticalAlignment="Center"/>
|
|
|
|
<ComboBox Grid.Row="0" Grid.Column="2"
|
|
HorizontalAlignment="Stretch"
|
|
Items="{Binding Settings.Issues.DataGridOrderBy, Converter={StaticResource EnumToCollectionConverter}, Mode=OneTime}"
|
|
SelectedItem="{Binding Settings.Issues.DataGridOrderBy, Converter={StaticResource FromValueDescriptionToEnumConverter}}"/>
|
|
|
|
|
|
<TextBlock Grid.Row="2" Grid.Column="0"
|
|
ToolTip.Tip="Sets how to group issues on the list"
|
|
Text="Group by:" VerticalAlignment="Center"/>
|
|
<StackPanel Grid.Row="2" Grid.Column="2"
|
|
Orientation="Vertical" Spacing="10">
|
|
|
|
<StackPanel
|
|
Orientation="Horizontal" Spacing="10">
|
|
<CheckBox Content="Type"
|
|
IsChecked="{Binding Settings.Issues.DataGridGroupByType}"/>
|
|
<CheckBox Content="Layer"
|
|
IsChecked="{Binding Settings.Issues.DataGridGroupByLayerIndex}"/>
|
|
</StackPanel>
|
|
</StackPanel>
|
|
</Grid>
|
|
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<TextBlock Classes="GroupBoxHeader"
|
|
ToolTip.Tip="Unsupported pixels"
|
|
Text="Islands"/>
|
|
|
|
<CheckBox Margin="10,10"
|
|
Content="Enhance island detection with a combined overhang check"
|
|
IsChecked="{Binding Settings.Issues.IslandEnhancedDetection}"
|
|
ToolTip.Tip="Combines the island and overhang detections for a better and more realistic detection, also to discard false-positives. (Slower)
|
|

If enabled, and when a island is found, it will check for overhangs on that same island, if no overhang found then the island will be discarded and considered safe, otherwise it will flag as an island issue.
|
|

Note: Overhangs settings will be used to configure the detection. Enabling Overhangs is not required for this procedure to work."/>
|
|
|
|
<CheckBox Margin="10,0,10,10"
|
|
Content="Allow diagonal bonds during island detection"
|
|
IsChecked="{Binding Settings.Issues.IslandAllowDiagonalBonds}"
|
|
ToolTip.Tip="If enabled, components touching by even a single diagonal bond will be considered a single component for the purposes of island detection.
|
|

Enabling this will result in faster island detection. but some potential islands with weak bonds to other components may not be detected."
|
|
/>
|
|
|
|
|
|
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
|
<NumericUpDown Width="150"
|
|
Classes="ValueLabel ValueLabel_sun"
|
|
Minimum="0"
|
|
Maximum="254"
|
|
Value="{Binding Settings.Issues.IslandBinaryThreshold}"
|
|
/>
|
|
<TextBlock
|
|
VerticalAlignment="Center"
|
|
Text="Pixel intensity threshold for island detection"
|
|
ToolTip.Tip="Pixels below this threshold will be considered black during island detection.
|
|

Pixels equal to or above this threshold will be considered white during island detection.
|
|

0 to disable."
|
|
/>
|
|
</StackPanel>
|
|
|
|
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
|
<NumericUpDown Width="150"
|
|
Classes="ValueLabel ValueLabel_px2"
|
|
Minimum="1"
|
|
Maximum="255"
|
|
Value="{Binding Settings.Issues.IslandRequiredAreaToProcessCheck}"
|
|
/>
|
|
<TextBlock
|
|
VerticalAlignment="Center"
|
|
Text="Bounding area required for an object to be considered an island"
|
|
ToolTip.Tip="Objects with bounding area smaller than this value will not be considered an island even if unsupported."
|
|
/>
|
|
</StackPanel>
|
|
|
|
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
|
<NumericUpDown Width="150"
|
|
Classes="ValueLabel ValueLabel_sun"
|
|
Minimum="1"
|
|
Maximum="255"
|
|
Value="{Binding Settings.Issues.IslandRequiredPixelBrightnessToProcessCheck}"
|
|
/>
|
|
<TextBlock
|
|
VerticalAlignment="Center"
|
|
Text="Minimum pixel intensity to consider a pixel part of an island"
|
|
ToolTip.Tip="Pixels with an intensity below this threshold will not be considerd as part of an island."
|
|
/>
|
|
</StackPanel>
|
|
|
|
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
|
<NumericUpDown Width="150"
|
|
Classes="ValueLabel ValueLabel_times"
|
|
Minimum="0.05"
|
|
Maximum="0.95"
|
|
Increment="0.05"
|
|
FormatString="F2"
|
|
Value="{Binding Settings.Issues.IslandRequiredPixelsToSupportMultiplier}"
|
|
/>
|
|
<TextBlock
|
|
VerticalAlignment="Center"
|
|
Text="Supporting safe pixels required over a multiplier on island pixels"
|
|
ToolTip.Tip="An island supported by at least it pixels multiplied by this value will always be considered supported.
|
|

Formula: Supporting pixels >= Island pixels * this value"
|
|
/>
|
|
</StackPanel>
|
|
|
|
|
|
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
|
<NumericUpDown Width="150"
|
|
Classes="ValueLabel ValueLabel_sun"
|
|
Minimum="50"
|
|
Maximum="255"
|
|
Value="{Binding Settings.Issues.IslandRequiredPixelBrightnessToSupport}"
|
|
/>
|
|
<TextBlock
|
|
VerticalAlignment="Center"
|
|
Text="Minimum intensity of a supporting pixel before it is considered safe"
|
|
ToolTip.Tip="Pixels below this threshold will not be considered when counting supporting pixels for an island."
|
|
/>
|
|
</StackPanel>
|
|
|
|
<!--
|
|
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
|
<NumericUpDown Width="60"
|
|
|
|
Minimum="1"
|
|
Maximum="255"
|
|
Value="{Binding Settings.Issues.IslandRequiredPixelsToSupport}"
|
|
/>
|
|
<TextBlock
|
|
VerticalAlignment="Center"
|
|
Text="Supporting safe pixels required to considerer an island supported"
|
|
ToolTip.Tip="An island supported by at least this number of safe pixels will always be considered supported.
|
|

An island supported by less than this number of pixels will only be considered supported if the number of supporting pixels is at least half the area of the island itself."
|
|
/>
|
|
</StackPanel>
|
|
|
|
|
|
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
|
<NumericUpDown Width="60"
|
|
|
|
Minimum="50"
|
|
Maximum="255"
|
|
Value="{Binding Settings.Issues.IslandRequiredPixelBrightnessToSupport}"
|
|
/>
|
|
<TextBlock
|
|
VerticalAlignment="Center"
|
|
Text="Minimum intensity of a supporting pixel before it is considered safe"
|
|
ToolTip.Tip="Pixels below this threshold will not be considered when counting supporting pixels for an island."
|
|
/>
|
|
</StackPanel>
|
|
-->
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<TextBlock Classes="GroupBoxHeader"
|
|
ToolTip.Tip="Unsupported pixels that goes beyond a certain angle/threshold"
|
|
Text="Overhangs"/>
|
|
|
|
<CheckBox
|
|
Margin="10,10"
|
|
Content="Include islands when detecting overhangs"
|
|
ToolTip.Tip="If enabled, overhangs will be computed everywhere, including on islands. An overhang on an island will always be detected and reported. (Faster)
|
|

If disabled, islands are disregarded when computing overhangs. An overhang that is on an island will never be detected or reported. (Slower)
|
|

When island detection is disabled and overhang detection is enabled, overhangs will always be computed everywhere."
|
|
IsChecked="{Binding Settings.Issues.OverhangIndependentFromIslands}"/>
|
|
|
|
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
|
<NumericUpDown Width="150"
|
|
Classes="ValueLabel ValueLabel_px"
|
|
Minimum="2"
|
|
Maximum="255"
|
|
Value="{Binding Settings.Issues.OverhangErodeIterations}"
|
|
/>
|
|
<TextBlock
|
|
VerticalAlignment="Center"
|
|
Text="Minimum overhang depth"
|
|
ToolTip.Tip="The number of pixels that an overhang can protrude from the previous layer before it is detected and reported as an overhang."
|
|
/>
|
|
</StackPanel>
|
|
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<TextBlock Classes="GroupBoxHeader"
|
|
ToolTip.Tip="Trapped resin inside hollow objects"
|
|
Text="Resin traps"/>
|
|
|
|
<StackPanel Orientation="Horizontal" Margin="10" Spacing="10">
|
|
<NumericUpDown Width="150"
|
|
Classes="ValueLabel ValueLabel_sun"
|
|
Minimum="0"
|
|
Maximum="254"
|
|
Value="{Binding Settings.Issues.ResinTrapBinaryThreshold}"/>
|
|
<TextBlock
|
|
VerticalAlignment="Center"
|
|
Text="Pixel intensity threshold for resin trap detection"
|
|
ToolTip.Tip="Pixels below this threshold will be considered black during resin trap detection.
|
|

Pixels equal to or above this theshold will be considred white during resin trap detection.
|
|

0 to disable."
|
|
/>
|
|
|
|
</StackPanel>
|
|
|
|
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
|
<NumericUpDown Width="150"
|
|
Classes="ValueLabel ValueLabel_px2"
|
|
Minimum="1"
|
|
Maximum="255"
|
|
Value="{Binding Settings.Issues.ResinTrapRequiredAreaToProcessCheck}"/>
|
|
<TextBlock
|
|
VerticalAlignment="Center"
|
|
Text="Bounding area required for an object to be processed during resin trap detection"
|
|
ToolTip.Tip="Objects with bounding area smaller than this value will not be processed during resin trip detection."/>
|
|
</StackPanel>
|
|
|
|
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
|
<NumericUpDown Width="150"
|
|
Classes="ValueLabel ValueLabel_px"
|
|
Minimum="1"
|
|
Maximum="255"
|
|
Value="{Binding Settings.Issues.ResinTrapRequiredBlackPixelsToDrain}"
|
|
/>
|
|
<TextBlock
|
|
VerticalAlignment="Center"
|
|
Text="Number of drain pixels required to disqualify a potential resin trap"
|
|
ToolTip.Tip="The drain pixel area required to consider a potential resin trap sufficiently drained (no longer a resin trap)."
|
|
/>
|
|
</StackPanel>
|
|
|
|
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
|
<NumericUpDown Width="150"
|
|
Classes="ValueLabel ValueLabel_sun"
|
|
Minimum="1"
|
|
Maximum="150"
|
|
Value="{Binding Settings.Issues.ResinTrapMaximumPixelBrightnessToDrain}"
|
|
/>
|
|
<TextBlock
|
|
VerticalAlignment="Center"
|
|
Text="Maximum pixel intensity for a pixel to be considered a drain pixel"
|
|
ToolTip.Tip="Pixels below this intensity threshold will not be counted when evaluating if a potential resin trap is sufficiently drained."
|
|
/>
|
|
</StackPanel>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<TextBlock Classes="GroupBoxHeader"
|
|
ToolTip.Tip="Hollow areas that aren't resin traps but lacks a venting hole at that level to prevent suction and pressure"
|
|
Text="Suction cups"/>
|
|
|
|
<StackPanel Orientation="Horizontal" Margin="10" Spacing="10">
|
|
<NumericUpDown Width="150"
|
|
Classes="ValueLabel ValueLabel_px2"
|
|
Minimum="1"
|
|
Maximum="4294967295"
|
|
Value="{Binding Settings.Issues.SuctionCupRequiredAreaToConsider}"/>
|
|
<TextBlock
|
|
VerticalAlignment="Center"
|
|
Text="Bounding area required for an object to be processed during suction cup detection"
|
|
ToolTip.Tip="Objects with bounding area smaller than this value will not be processed during suction cup detection."/>
|
|
</StackPanel>
|
|
<StackPanel Orientation="Horizontal" Margin="10" Spacing="10">
|
|
<NumericUpDown Width="150"
|
|
Classes="ValueLabel ValueLabel_mm"
|
|
Minimum="0.05"
|
|
Maximum="4294967295"
|
|
Increment="0.05"
|
|
FormatString="F2"
|
|
Value="{Binding Settings.Issues.SuctionCupRequiredHeightToConsider}"
|
|
/>
|
|
<TextBlock
|
|
VerticalAlignment="Center"
|
|
Text="Minimum height required for a suction cup detection to be reported"
|
|
ToolTip.Tip="Objects with a smaller height than this value will not be reported during suction cup detection."/>
|
|
</StackPanel>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<TextBlock Classes="GroupBoxHeader"
|
|
ToolTip.Tip="White pixels that nearly or touch the build plate edges"
|
|
Text="Touching boundary"/>
|
|
|
|
<StackPanel Orientation="Horizontal" Margin="10" Spacing="10">
|
|
<NumericUpDown Width="150"
|
|
Classes="ValueLabel ValueLabel_sun"
|
|
Minimum="1"
|
|
Maximum="255"
|
|
Value="{Binding Settings.Issues.TouchingBoundMinimumPixelBrightness}"
|
|
/>
|
|
<TextBlock
|
|
VerticalAlignment="Center"
|
|
Text="Minimum pixel intensity for a pixel to be considered a touching boundary"
|
|
ToolTip.Tip="Pixels below this values won't flag a issue when inside the dangerous boundary margin.
|
|

Pixels equal or above this values will flag a issue when inside the dangerous boundary margin."
|
|
/>
|
|
</StackPanel>
|
|
|
|
|
|
<Grid
|
|
ColumnDefinitions="Auto,Auto,Auto,Auto,Auto"
|
|
RowDefinitions="Auto,Auto,Auto,Auto,Auto"
|
|
Margin="10,0,10,10"
|
|
>
|
|
<TextBlock
|
|
VerticalAlignment="Center"
|
|
HorizontalAlignment="Center"
|
|
Grid.Row="1"
|
|
Grid.Column="1"
|
|
FontWeight="Bold"
|
|
Text="Margin" />
|
|
|
|
<TextBlock
|
|
VerticalAlignment="Center"
|
|
HorizontalAlignment="Center"
|
|
Grid.Row="3"
|
|
Grid.Column="1"
|
|
FontWeight="Bold"
|
|
Text="Margin" />
|
|
|
|
<TextBlock
|
|
VerticalAlignment="Center"
|
|
HorizontalAlignment="Center"
|
|
Grid.Row="1"
|
|
Grid.Column="3"
|
|
FontWeight="Bold"
|
|
Text="Margin" />
|
|
|
|
<TextBlock
|
|
VerticalAlignment="Center"
|
|
HorizontalAlignment="Center"
|
|
Grid.Row="3"
|
|
Grid.Column="3"
|
|
FontWeight="Bold"
|
|
Text="Margin" />
|
|
|
|
<TextBlock
|
|
Grid.Column="0"
|
|
Grid.Row="2"
|
|
VerticalAlignment="Center"
|
|
Text="Left " />
|
|
<NumericUpDown Grid.Column="1" Grid.Row="2"
|
|
Width="150"
|
|
Classes="ValueLabel ValueLabel_px"
|
|
Minimum="1"
|
|
Maximum="255"
|
|
Margin="0,0,5,0"
|
|
|
|
Value="{Binding Settings.Issues.TouchingBoundMarginLeft}" />
|
|
|
|
|
|
<TextBlock
|
|
Grid.Column="2"
|
|
Grid.Row="0"
|
|
VerticalAlignment="Center"
|
|
HorizontalAlignment="Center"
|
|
Margin="0,0,0,2"
|
|
Text="Top" />
|
|
<NumericUpDown Grid.Column="2" Grid.Row="1"
|
|
Width="150"
|
|
Classes="ValueLabel ValueLabel_px"
|
|
Minimum="1"
|
|
Maximum="255"
|
|
Margin="0,0,0,5"
|
|
|
|
Value="{Binding Settings.Issues.TouchingBoundMarginTop}" />
|
|
|
|
<TextBlock
|
|
Grid.Column="4"
|
|
Grid.Row="2"
|
|
VerticalAlignment="Center"
|
|
HorizontalAlignment="Center"
|
|
Text=" Right" />
|
|
<NumericUpDown Grid.Column="3" Grid.Row="2"
|
|
Width="150"
|
|
Classes="ValueLabel ValueLabel_px"
|
|
Minimum="1"
|
|
Maximum="255"
|
|
Margin="5,0,0,0"
|
|
|
|
Value="{Binding Settings.Issues.TouchingBoundMarginRight}" />
|
|
|
|
<TextBlock
|
|
Grid.Column="2"
|
|
Grid.Row="4"
|
|
VerticalAlignment="Center"
|
|
HorizontalAlignment="Center"
|
|
Margin="0,2,0,0"
|
|
Text="Bottom" />
|
|
<NumericUpDown Grid.Column="2" Grid.Row="3"
|
|
Width="150"
|
|
Classes="ValueLabel ValueLabel_px"
|
|
Minimum="1"
|
|
Maximum="255"
|
|
Margin="0,5,0,0"
|
|
|
|
Value="{Binding Settings.Issues.TouchingBoundMarginBottom}" />
|
|
|
|
<CheckBox
|
|
Grid.Row="2"
|
|
Grid.Column="2"
|
|
VerticalAlignment="Center"
|
|
HorizontalAlignment="Center"
|
|
IsChecked="{Binding Settings.Issues.TouchingBoundSyncMargins}"
|
|
Content="Sync"/>
|
|
</Grid>
|
|
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<TextBlock Classes="GroupBoxHeader"
|
|
ToolTip.Tip="Layers that surpass printer maximum height"
|
|
Text="Print height"/>
|
|
|
|
<StackPanel Orientation="Horizontal" Margin="10" Spacing="10">
|
|
<NumericUpDown Width="150"
|
|
Classes="ValueLabel ValueLabel_mm"
|
|
Minimum="-50"
|
|
Maximum="50"
|
|
Increment="0.1"
|
|
FormatString="F2"
|
|
Value="{Binding Settings.Issues.PrintHeightOffset}"/>
|
|
<TextBlock
|
|
VerticalAlignment="Center"
|
|
Text="Offset height from printer maximum Z height"
|
|
ToolTip.Tip="Layers height will be compared with printer maximum possible height + this offset, if a layer surpass this height, it will be marked as a issue.
|
|

Use negative values if you want to give some down margin from top most.
|
|

Note: Some file formats lacks of printer maximum height information, and in this cases the object final height will be used instead as printer maximum, in this cases use a Offset of 0 to not have false detected issues."/>
|
|
</StackPanel>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
</StackPanel>
|
|
</ScrollViewer>
|
|
</Grid>
|
|
</TabItem>
|
|
|
|
<TabItem Header="Pixel editor" VerticalContentAlignment="Center">
|
|
<ScrollViewer Name="ScrollViewer3">
|
|
<StackPanel Orientation="Vertical">
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<TextBlock Classes="GroupBoxHeader" Text="Colors & highlights"/>
|
|
|
|
<Grid Margin="10" RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto" ColumnDefinitions="Auto,Auto,Auto">
|
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Pixel add operation / (Selected):"/>
|
|
|
|
<Button Grid.Row="0" Grid.Column="1"
|
|
Margin="10,0,0,0" Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
Background="{Binding Settings.PixelEditor.AddPixelBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="AddPixelColor"
|
|
/>
|
|
<Button Grid.Row="0" Grid.Column="2"
|
|
Margin="10,0,0,0" Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
Background="{Binding Settings.PixelEditor.AddPixelHighlightBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="AddPixelHighlightColor"
|
|
/>
|
|
|
|
|
|
<TextBlock Grid.Row="2" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Pixel remove operation / (Selected):"/>
|
|
|
|
<Button Grid.Row="2" Grid.Column="1"
|
|
Margin="10,0,0,0" Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
Background="{Binding Settings.PixelEditor.RemovePixelBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="RemovePixelColor"
|
|
/>
|
|
<Button Grid.Row="2" Grid.Column="2"
|
|
Margin="10,0,0,0" Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
Background="{Binding Settings.PixelEditor.RemovePixelHighlightBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="RemovePixelHighlightColor"
|
|
/>
|
|
|
|
<TextBlock Grid.Row="4" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Support operation / (Selected):"/>
|
|
|
|
<Button Grid.Row="4" Grid.Column="1"
|
|
Margin="10,0,0,0" Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
Background="{Binding Settings.PixelEditor.SupportsBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="SupportsColor"
|
|
/>
|
|
<Button Grid.Row="4" Grid.Column="2"
|
|
Margin="10,0,0,0" Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
Background="{Binding Settings.PixelEditor.SupportsHighlightBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="SupportsHighlightColor"
|
|
/>
|
|
|
|
<TextBlock Grid.Row="6" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Drain hole operation / (Selected):"/>
|
|
|
|
<Button Grid.Row="6" Grid.Column="1"
|
|
Margin="10,0,0,0" Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
Background="{Binding Settings.PixelEditor.DrainHoleBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="DrainHoleColor"
|
|
/>
|
|
<Button Grid.Row="6" Grid.Column="2"
|
|
Margin="10,0,0,0" Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
Background="{Binding Settings.PixelEditor.DrainHoleHighlightBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="DrainHoleHighlightColor"
|
|
/>
|
|
|
|
<TextBlock Grid.Row="8" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Drawing cursor:"/>
|
|
|
|
<Button Grid.Row="8" Grid.Column="1"
|
|
Margin="10,0,0,0" Padding="10"
|
|
BorderBrush="Black"
|
|
BorderThickness="2"
|
|
Background="{Binding Settings.PixelEditor.CursorBrush}"
|
|
Command="{Binding SelectColor}"
|
|
CommandParameter="CursorColor"
|
|
/>
|
|
</Grid>
|
|
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<TextBlock Classes="GroupBoxHeader" Text="Actions"/>
|
|
|
|
<CheckBox
|
|
IsChecked="{Binding Settings.PixelEditor.PartialUpdateIslandsOnEditing}"
|
|
Margin="10"
|
|
Content="Refresh issues for modified layers"/>
|
|
<CheckBox
|
|
IsChecked="{Binding Settings.PixelEditor.CloseEditorOnApply}"
|
|
Margin="10,0,10,10"
|
|
Content="Close pixel editor after operations are applied"/>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
</StackPanel>
|
|
</ScrollViewer>
|
|
</TabItem>
|
|
|
|
<TabItem Header="Layer repair" VerticalContentAlignment="Center">
|
|
<ScrollViewer Name="ScrollViewer4">
|
|
<StackPanel Orientation="Vertical">
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical" Spacing="10">
|
|
<TextBlock Classes="GroupBoxHeader" Text="Default values"/>
|
|
|
|
<CheckBox IsChecked="{Binding Settings.LayerRepair.RepairIslands}"
|
|
Margin="10,0" Content="Attempt to repair islands by default"/>
|
|
<CheckBox IsChecked="{Binding Settings.LayerRepair.RepairResinTraps}"
|
|
Margin="10,0" Content="Attempt to repair resin traps by default"/>
|
|
<CheckBox IsChecked="{Binding Settings.LayerRepair.RepairSuctionCups}"
|
|
Margin="10,0" Content="Attempt to repair suction cups by default"/>
|
|
<CheckBox IsChecked="{Binding Settings.LayerRepair.RemoveEmptyLayers}"
|
|
Margin="10,0" Content="Remove empty layers by default"/>
|
|
|
|
<StackPanel Orientation="Horizontal" Margin="10,0" Spacing="10">
|
|
<NumericUpDown
|
|
Value="{Binding Settings.LayerRepair.RemoveIslandsBelowEqualPixels}"
|
|
Width="150"
|
|
Classes="ValueLabel ValueLabel_px2"
|
|
Minimum="0"
|
|
Maximum="255"/>
|
|
<TextBlock VerticalAlignment="Center" Text="Islands: Maximum pixel area for Island removal (0 = disable)"/>
|
|
</StackPanel>
|
|
|
|
<StackPanel Orientation="Horizontal" Margin="10,0" Spacing="10">
|
|
<NumericUpDown
|
|
Value="{Binding Settings.LayerRepair.RemoveIslandsRecursiveIterations}"
|
|
Width="150"
|
|
Classes="ValueLabel ValueLabel_layers"
|
|
Minimum="0"
|
|
Maximum="65535"/>
|
|
<TextBlock VerticalAlignment="Center" Text="Islands: Maximum layers for recursive island removal (0 = All)"/>
|
|
</StackPanel>
|
|
|
|
<StackPanel Orientation="Horizontal" Margin="10,0" Spacing="10">
|
|
<NumericUpDown
|
|
Value="{Binding Settings.LayerRepair.AttachIslandsBelowLayers}"
|
|
Width="150"
|
|
Classes="ValueLabel ValueLabel_layers"
|
|
Minimum="0"
|
|
Maximum="65535"/>
|
|
<TextBlock VerticalAlignment="Center" Text="Islands: Attempt to attach islands down to this layers (0 = Disabled)"/>
|
|
</StackPanel>
|
|
|
|
<StackPanel Orientation="Horizontal" Margin="10,0" Spacing="10">
|
|
<NumericUpDown
|
|
Value="{Binding Settings.LayerRepair.ResinTrapsOverlapBy}"
|
|
Width="150"
|
|
Classes="ValueLabel ValueLabel_px"
|
|
Minimum="0"
|
|
Maximum="255"/>
|
|
<TextBlock VerticalAlignment="Center" Text="Resin traps: Overlap and expand resin trap area by this value in pixels (0 = Disabled)"/>
|
|
</StackPanel>
|
|
|
|
<StackPanel Orientation="Horizontal" Margin="10,0" Spacing="10">
|
|
<NumericUpDown
|
|
Value="{Binding Settings.LayerRepair.SuctionCupsVentHole}"
|
|
Width="150"
|
|
Classes="ValueLabel ValueLabel_px2"
|
|
Minimum="4"
|
|
Maximum="255"/>
|
|
<TextBlock VerticalAlignment="Center" Text="Suction cups: Hole diameter to drill the layers with"/>
|
|
</StackPanel>
|
|
|
|
<StackPanel Orientation="Horizontal" Margin="10,0" Spacing="10">
|
|
<NumericUpDown
|
|
Value="{Binding Settings.LayerRepair.ClosingIterations}"
|
|
Width="150"
|
|
Classes="ValueLabel ValueLabel_px"
|
|
Minimum="0"
|
|
Maximum="255"/>
|
|
<TextBlock VerticalAlignment="Center" Text="'Gap Closing' iterations"/>
|
|
</StackPanel>
|
|
|
|
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
|
<NumericUpDown
|
|
Value="{Binding Settings.LayerRepair.OpeningIterations}"
|
|
Width="150"
|
|
Classes="ValueLabel ValueLabel_px"
|
|
Minimum="0"
|
|
Maximum="255"/>
|
|
<TextBlock VerticalAlignment="Center" Text="'Noise Removal' iterations"/>
|
|
</StackPanel>
|
|
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
</StackPanel>
|
|
</ScrollViewer>
|
|
</TabItem>
|
|
|
|
<TabItem Header="Tools" VerticalContentAlignment="Center">
|
|
<ScrollViewer Name="ScrollViewer5">
|
|
<StackPanel Orientation="Vertical" Spacing="5">
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<TextBlock Classes="GroupBoxHeader" Text="Common"/>
|
|
<StackPanel Margin="10" Orientation="Vertical" Spacing="10">
|
|
<CheckBox IsChecked="{Binding Settings.Tools.ExpandDescriptions}"
|
|
ToolTip.Tip="Disable this if you want to gain some vertical space for windows, you can still toggle the descriptions and read them if required."
|
|
Content="Expand and show descriptions by default"/>
|
|
|
|
<CheckBox IsChecked="{Binding Settings.Tools.PromptForConfirmation}"
|
|
Content="Always prompt for confirmation before execute the operation"/>
|
|
|
|
<CheckBox IsChecked="{Binding Settings.Tools.RestoreLastUsedSettings}"
|
|
Content="Keep and restore the last used settings on operations per user session/instance"/>
|
|
|
|
<ToggleSwitch IsChecked="{Binding Settings.Tools.LastUsedSettingsKeepOnCloseFile}"
|
|
OffContent="Discard the session when closing or loading files"
|
|
OnContent="Keep the session when closing or loading files"/>
|
|
|
|
<ToggleSwitch IsChecked="{Binding Settings.Tools.LastUsedSettingsPriorityOverDefaultProfile}"
|
|
IsEnabled="{Binding Settings.Tools.RestoreLastUsedSettings}"
|
|
OffContent="Default profile will priority over the session"
|
|
OnContent="Session will priority over the default profile"/>
|
|
</StackPanel>
|
|
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
</StackPanel>
|
|
</ScrollViewer>
|
|
</TabItem>
|
|
|
|
<TabItem Header="Automations" VerticalContentAlignment="Center">
|
|
<ScrollViewer Name="ScrollViewer6">
|
|
<StackPanel Orientation="Vertical" Spacing="5">
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<TextBlock Classes="GroupBoxHeader" Text="Common"/>
|
|
<StackPanel Margin="10" Orientation="Vertical" Spacing="10">
|
|
<CheckBox IsChecked="{Binding Settings.Automations.SaveFileAfterModifications}" Content="Automatically save the file after apply any automation(s)"/>
|
|
</StackPanel>
|
|
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<Border
|
|
Margin="5"
|
|
Classes="GroupBox">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<TextBlock Classes="GroupBoxHeader" Text="File convertion"/>
|
|
<StackPanel Margin="10" Orientation="Vertical" Spacing="10">
|
|
<CheckBox IsChecked="{Binding Settings.Automations.AutoConvertFiles}"
|
|
ToolTip.Tip="1) Converts the SL1 files to the format specified on 'PrusaSlicer - Printer - Notes' on 'FILEFORMAT_XXX' variable.
|
|

2) Converts the VDT files to the format specified on 'Voxeldance Tango - Printer settings - Notes' on 'FILEFORMAT_XXX' variable.
|
|

A new file with same name but a new extension will be created and overwrite any previous file.
|
|

After a successful conversion the new file will automatically load in instead of the loaded SL1 file."
|
|
Content="Automatically convert SL1 and VDT files to the target format when possible and load it back"/>
|
|
|
|
<Grid RowDefinitions="Auto,10,Auto" ColumnDefinitions="Auto,10,*">
|
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Remove source file after automatic conversion:"/>
|
|
<ComboBox Grid.Row="0" Grid.Column="2"
|
|
HorizontalAlignment="Stretch"
|
|
Items="{Binding Settings.Automations.RemoveSourceFileAfterAutoConversion, Converter={StaticResource EnumToCollectionConverter}, Mode=OneTime}"
|
|
SelectedItem="{Binding Settings.Automations.RemoveSourceFileAfterAutoConversion, Converter={StaticResource FromValueDescriptionToEnumConverter}}"/>
|
|
|
|
<TextBlock Grid.Row="2" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Remove source file after manual conversion:"/>
|
|
<ComboBox Grid.Row="2" Grid.Column="2"
|
|
HorizontalAlignment="Stretch"
|
|
Items="{Binding Settings.Automations.RemoveSourceFileAfterManualConversion, Converter={StaticResource EnumToCollectionConverter}, Mode=OneTime}"
|
|
SelectedItem="{Binding Settings.Automations.RemoveSourceFileAfterManualConversion, Converter={StaticResource FromValueDescriptionToEnumConverter}}"/>
|
|
|
|
</Grid>
|
|
|
|
|
|
|
|
</StackPanel>
|
|
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
|
|
</StackPanel>
|
|
</ScrollViewer>
|
|
</TabItem>
|
|
|
|
|
|
<TabItem Header="Network" VerticalContentAlignment="Center">
|
|
<ScrollViewer Name="ScrollViewer7">
|
|
<StackPanel Orientation="Vertical" Spacing="5">
|
|
<Border
|
|
Classes="GroupBox"
|
|
Margin="5">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
<TextBlock Classes="GroupBoxHeader" Text="Remote printers"/>
|
|
<StackPanel Margin="10" Orientation="Vertical" Spacing="10">
|
|
|
|
<Grid RowDefinitions="Auto" ColumnDefinitions="*,2,Auto">
|
|
<ComboBox Grid.Column="0"
|
|
Name="NetworkRemotePrinterComboBox"
|
|
HorizontalAlignment="Stretch"
|
|
Items="{Binding Settings.Network.RemotePrinters}"/>
|
|
|
|
<StackPanel Grid.Column="2" Orientation="Horizontal" Spacing="2">
|
|
<Button
|
|
VerticalAlignment="Stretch"
|
|
i:Attached.Icon="fa-solid fa-plus"
|
|
Command="{Binding AddNetworkRemotePrinter}"/>
|
|
<Button
|
|
VerticalAlignment="Stretch"
|
|
IsEnabled="{Binding #NetworkRemotePrinterComboBox.SelectedItem, Converter={x:Static ObjectConverters.IsNotNull}}"
|
|
i:Attached.Icon="fa-solid fa-copy"
|
|
Command="{Binding DuplicateSelectedNetworkRemotePrinter}"/>
|
|
<Button
|
|
VerticalAlignment="Stretch"
|
|
IsEnabled="{Binding #NetworkRemotePrinterComboBox.SelectedItem, Converter={x:Static ObjectConverters.IsNotNull}}"
|
|
i:Attached.Icon="fa-solid fa-trash-alt"
|
|
Command="{Binding RemoveSelectedNetworkRemotePrinter}"/>
|
|
</StackPanel>
|
|
|
|
</Grid>
|
|
|
|
|
|
<Grid RowDefinitions="Auto,10,Auto,10,Auto,10,Auto"
|
|
ColumnDefinitions="Auto,10,200,30,Auto,10,150"
|
|
IsVisible="{Binding #NetworkRemotePrinterComboBox.SelectedItem, Converter={x:Static ObjectConverters.IsNotNull}}">
|
|
|
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Status:"/>
|
|
|
|
<ToggleSwitch Grid.Row="0" Grid.Column="2"
|
|
VerticalAlignment="Center"
|
|
OnContent="Enabled"
|
|
OffContent="Disabled"
|
|
IsChecked="{Binding #NetworkRemotePrinterComboBox.SelectedItem.IsEnabled}" />
|
|
|
|
<TextBlock Grid.Row="2" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Name:"/>
|
|
|
|
<TextBox Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="5"
|
|
HorizontalAlignment="Stretch"
|
|
VerticalAlignment="Center"
|
|
Text="{Binding #NetworkRemotePrinterComboBox.SelectedItem.Name}"/>
|
|
|
|
<TextBlock Grid.Row="4" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="Host:"/>
|
|
|
|
<TextBox Grid.Row="4" Grid.Column="2"
|
|
HorizontalAlignment="Stretch"
|
|
VerticalAlignment="Center"
|
|
Text="{Binding #NetworkRemotePrinterComboBox.SelectedItem.Host}"/>
|
|
|
|
<TextBlock Grid.Row="4" Grid.Column="4"
|
|
VerticalAlignment="Center"
|
|
ToolTip.Tip="Use 0 if not used"
|
|
Text="Port:"/>
|
|
|
|
<NumericUpDown Grid.Row="4" Grid.Column="6"
|
|
Minimum="0"
|
|
Maximum="65535"
|
|
Increment="1"
|
|
Value="{Binding #NetworkRemotePrinterComboBox.SelectedItem.Port}"/>
|
|
|
|
<TextBlock Grid.Row="6" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
ToolTip.Tip="Valid extensions for this device.
|
|

Example: ctb;zip
|
|

Empty to be compatible with every file format."
|
|
Text="Extensions:"/>
|
|
|
|
<TextBox Grid.Row="6" Grid.Column="2" Grid.ColumnSpan="5"
|
|
HorizontalAlignment="Stretch"
|
|
VerticalAlignment="Center"
|
|
Text="{Binding #NetworkRemotePrinterComboBox.SelectedItem.CompatibleExtensions}"/>
|
|
</Grid>
|
|
|
|
<DataGrid
|
|
Name="NetworkRemotePrintersGrid"
|
|
CanUserReorderColumns="True"
|
|
CanUserResizeColumns="True"
|
|
CanUserSortColumns="True"
|
|
GridLinesVisibility="Horizontal"
|
|
IsReadOnly="False"
|
|
SelectionMode="Extended"
|
|
ClipboardCopyMode="IncludeHeader"
|
|
Items="{Binding #NetworkRemotePrinterComboBox.SelectedItem.Requests}">
|
|
<DataGrid.Columns>
|
|
<DataGridTextColumn Header="Type"
|
|
Binding="{Binding Type}"
|
|
IsReadOnly="True"
|
|
Width="Auto" />
|
|
<DataGridTemplateColumn Header="Method"
|
|
IsReadOnly="False"
|
|
Width="130">
|
|
<DataGridTemplateColumn.CellTemplate>
|
|
<DataTemplate>
|
|
<ComboBox
|
|
HorizontalAlignment="Stretch"
|
|
Items="{Binding Method, Converter={StaticResource EnumToCollectionConverter}, Mode=OneTime}"
|
|
SelectedItem="{Binding Method, Converter={StaticResource FromValueDescriptionToEnumConverter}}"/>
|
|
</DataTemplate>
|
|
</DataGridTemplateColumn.CellTemplate>
|
|
</DataGridTemplateColumn>
|
|
<DataGridTextColumn Header="Request path"
|
|
Binding="{Binding Path}"
|
|
IsReadOnly="False"
|
|
Width="*" />
|
|
</DataGrid.Columns>
|
|
|
|
</DataGrid>
|
|
|
|
</StackPanel>
|
|
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
</StackPanel>
|
|
</ScrollViewer>
|
|
</TabItem>
|
|
|
|
|
|
|
|
</TabControl>
|
|
|
|
<Border Grid.Row="1" Classes="FooterActions">
|
|
<Grid RowDefinitions="Auto"
|
|
ColumnDefinitions="*,*">
|
|
|
|
<StackPanel Grid.Column="0" Orientation="Horizontal">
|
|
<controls:ButtonWithIcon Name="Actions.ResetAllSettings" Padding="10"
|
|
Icon="fa-solid fa-undo-alt"
|
|
Text="Reset all settings"
|
|
Command="{Binding OnClickResetAllDefaults}"/>
|
|
</StackPanel>
|
|
|
|
<StackPanel Grid.Column="1"
|
|
HorizontalAlignment="Right"
|
|
VerticalAlignment="Center"
|
|
Orientation="Horizontal">
|
|
<controls:ButtonWithIcon Name="Actions.Save" Margin="0,0,10,0" Padding="10" IsDefault="True"
|
|
Text="Save"
|
|
Icon="fa-solid fa-floppy-disk"
|
|
Command="{Binding OnClickSave}"/>
|
|
|
|
<controls:ButtonWithIcon Name="Actions.Cancel" Padding="10" IsCancel="True"
|
|
Icon="fa-solid fa-sign-out-alt"
|
|
Text="Cancel"
|
|
Command="{Binding Close}"/>
|
|
</StackPanel>
|
|
</Grid>
|
|
</Border>
|
|
|
|
</Grid>
|
|
|
|
</controls:WindowEx>
|