diff options
author | Tiago Conceição <Tiago_caza@hotmail.com> | 2021-08-17 22:17:08 +0300 |
---|---|---|
committer | Tiago Conceição <Tiago_caza@hotmail.com> | 2021-08-17 22:17:08 +0300 |
commit | 95020ce2f103b781d65318059adc6768e16e4a6f (patch) | |
tree | 695a4f1cfeae946317ab8074d87b3de050362630 /UVtools.WPF | |
parent | 44de1f3bd8ce0910765f1f51807f3ff0bd2dfbd9 (diff) |
v2.19.0v2.19.0
- **File formats:**
- Add and remove some image types that can be open
- (Add) `CanProcess` method to know if a file can be read under a format and to allow diferent formats with same extension
- (Fix) `LiftHeightTotal` and `RetractHeight` was rounding to no decimals and returning wrong values
- (Improvement) Round all float setters on `Layer` class
- (Improvement) Decode/encode RAM usage and performance by processing in batch groups
- **Pixel Dimming:** (#262)
- (Add) Option "Lightening pixels" to add brightness/lightening instead of dimming/subtract pixels
- (Fix) "Dim walls only" would reset body brightness by increase pixel brightness two times it value
- **Pixel Arithmetic:**
- (Change) Transpose "Pixel Dimming" to "Pixel Arithmetic"
- (Improvement) New options and manipulations
- **(Fix) Exposure time finder:**
- Generate top staircase based on selected measure (px or mm)
- Zebra bars when used in mm measures, it was using X density instead Y to calculate the thickness
- Move 'Unit of measure' to 'Object configuration'
- Custom text with wrong Y position when using out of portion resolutions/LCDs
- **CTBv4:**
- (Fix) More Unknown fields discovered and implemented
- (Fix) Reserved table is 384 bytes instead of 420
- (Fix) When full encoding it was forcing to change to version 3. This also affected convertions. (#263)
- (Fix) `BottomRetractHeight2` was being set to `BottomRetractSpeed2`
- (Fix) `RetractHeight2` was being set to `RetracSpeed2`
- (Fix) The PrintParametersV4 table address
- (Fix) Generates invalid files to open with Chitubox and printers (#263)
- (Fix) Better progress report
- **(Add) PrusaSlicer printer notes variables:**
- BottomLiftHeight2
- BottomLiftSpeed2
- LiftHeight2
- LiftSpeed2
- BottomRetractSpeed
- BottomRetractSpeed2
- BottomRetractHeight2
- BottomRetractSpeed2
- RetractHeight2
- RetractSpeed2
- **UI:**
- (Add) File - Open current file folder (Ctrl+Shift+L): Locate and open the folder that contain the current loaded file
- (Improvement) Hide some virtual extensions from file open dialog filters
- (Improvement) UI: Refresh active thumbnail when changed
- (Change) Icon for File - Open and Open in a new file
- (Change) Rename File - Extract to: Extract file contents
- (Upgrade) AvaloniaUI from 0.10.6 to 0.10.7
- (Fix) PW0, PWM, PWMX, PWMO, PWMS: Unable to decode some files with AntiAliasing (#143)
Diffstat (limited to 'UVtools.WPF')
20 files changed, 1790 insertions, 1432 deletions
diff --git a/UVtools.WPF/App.axaml.cs b/UVtools.WPF/App.axaml.cs index c5199fe..badd7bf 100644 --- a/UVtools.WPF/App.axaml.cs +++ b/UVtools.WPF/App.axaml.cs @@ -127,6 +127,25 @@ namespace UVtools.WPF } } + public static bool SelectFileOnExplorer(string filePath) + { + if (!File.Exists(filePath)) + { + return false; + } + + if (OperatingSystem.IsWindows()) + { + StartProcess("explorer.exe", $"/select,\"{filePath}\""); + } + else + { + StartProcess(Path.GetDirectoryName(filePath)); + } + + return true; + } + public static void OpenBrowser(string url) { try diff --git a/UVtools.WPF/Assets/Icons/folder-open-16x16.png b/UVtools.WPF/Assets/Icons/folder-open-16x16.png Binary files differnew file mode 100644 index 0000000..f47b011 --- /dev/null +++ b/UVtools.WPF/Assets/Icons/folder-open-16x16.png diff --git a/UVtools.WPF/Controls/Calibrators/CalibrateElephantFootControl.axaml b/UVtools.WPF/Controls/Calibrators/CalibrateElephantFootControl.axaml index 82863cf..885987f 100644 --- a/UVtools.WPF/Controls/Calibrators/CalibrateElephantFootControl.axaml +++ b/UVtools.WPF/Controls/Calibrators/CalibrateElephantFootControl.axaml @@ -190,178 +190,175 @@ </Grid> - <Border BorderBrush="Black" BorderThickness="1" Padding="5"> - <Expander IsExpanded="True"> - <Expander.Header> - <TextBlock Text="{Binding Operation.ErodeObjects, StringFormat=Morph - Erode [\{0\} objects]}" - FontWeight="Bold" - Cursor="Hand"/> - </Expander.Header> - - <StackPanel> - <Grid - Margin="0,10,0,0" - RowDefinitions="Auto,10,Auto" - ColumnDefinitions="Auto,10,Auto,5,Auto,5,Auto,5,Auto,30,Auto,10,Auto" - > - - <CheckBox Grid.Row="0" Grid.Column="2" - VerticalAlignment="Center" - IsChecked="{Binding Operation.IsErodeEnabled}" - Content="Enable"/> - - - <TextBlock Grid.Row="2" Grid.Column="0" - VerticalAlignment="Center" - Text="Iterations range:"/> - - <NumericUpDown Grid.Row="2" Grid.Column="2" - - IsEnabled="{Binding Operation.IsErodeEnabled}" - Increment="1" - Minimum="1" - Maximum="30" - Value="{Binding Operation.ErodeStartIteration}"/> - - - <TextBlock Grid.Row="2" Grid.Column="4" - VerticalAlignment="Center" - Text="-"/> - - <NumericUpDown Grid.Row="2" Grid.Column="6" - - IsEnabled="{Binding Operation.IsErodeEnabled}" - Increment="1" - Minimum="1" - Maximum="30" - Value="{Binding Operation.ErodeEndIteration}"/> - - <TextBlock Grid.Row="2" Grid.Column="8" - VerticalAlignment="Center" - Text="px"/> - - <TextBlock Grid.Row="2" Grid.Column="10" - VerticalAlignment="Center" - Text="Step increment(s):"/> - - <NumericUpDown Grid.Row="2" Grid.Column="12" - - IsEnabled="{Binding Operation.IsErodeEnabled}" - Increment="1" - Minimum="1" - Maximum="20" - Value="{Binding Operation.ErodeIterationSteps}"/> - - </Grid> - - <Border - Margin="0,10,0,0"> - <Expander> - <Expander.Header> - <TextBlock Text="Kernel - Advanced options (Click to expand)" - FontWeight="Bold" - Cursor="Hand" - /> - </Expander.Header> - <controls:KernelControl - Name="KernelCtrl" - Margin="0,10,0,0" - /> - </Expander> - </Border> - - </StackPanel> - - </Expander> - </Border> - - <Border BorderBrush="Black" BorderThickness="1" Padding="5"> - <Expander IsExpanded="True"> - <Expander.Header> - <TextBlock Text="{Binding Operation.DimmingObjects, StringFormat=Wall dimming [\{0\} objects]}" - FontWeight="Bold" - Cursor="Hand"/> - </Expander.Header> - - <Grid - Margin="0,10,0,0" - RowDefinitions="Auto,10,Auto,10,Auto,5,Auto" - ColumnDefinitions="Auto,10,Auto,5,Auto,5,Auto,5,Auto,20,Auto,10,Auto" - > - - <CheckBox Grid.Row="0" Grid.Column="2" - Grid.ColumnSpan="11" + + <Expander IsExpanded="True"> + <Expander.Header> + <TextBlock Text="{Binding Operation.ErodeObjects, StringFormat=Morph - Erode [\{0\} objects]}" + FontWeight="Bold" + Cursor="Hand"/> + </Expander.Header> + + <StackPanel> + <Grid + + RowDefinitions="Auto,10,Auto" + ColumnDefinitions="Auto,10,Auto,5,Auto,5,Auto,5,Auto,30,Auto,10,Auto" + > + + <CheckBox Grid.Row="0" Grid.Column="2" + VerticalAlignment="Center" + IsChecked="{Binding Operation.IsErodeEnabled}" + Content="Enable"/> + + + <TextBlock Grid.Row="2" Grid.Column="0" VerticalAlignment="Center" - IsChecked="{Binding Operation.IsDimmingEnabled}" - Content="Enable - Requires a compatible anti-aliased file format and printer"/> + Text="Iterations range:"/> + + <NumericUpDown Grid.Row="2" Grid.Column="2" + + IsEnabled="{Binding Operation.IsErodeEnabled}" + Increment="1" + Minimum="1" + Maximum="30" + Value="{Binding Operation.ErodeStartIteration}"/> + + + <TextBlock Grid.Row="2" Grid.Column="4" + VerticalAlignment="Center" + Text="-"/> + + <NumericUpDown Grid.Row="2" Grid.Column="6" + + IsEnabled="{Binding Operation.IsErodeEnabled}" + Increment="1" + Minimum="1" + Maximum="30" + Value="{Binding Operation.ErodeEndIteration}"/> + + <TextBlock Grid.Row="2" Grid.Column="8" + VerticalAlignment="Center" + Text="px"/> + + <TextBlock Grid.Row="2" Grid.Column="10" + VerticalAlignment="Center" + Text="Step increment(s):"/> + + <NumericUpDown Grid.Row="2" Grid.Column="12" + + IsEnabled="{Binding Operation.IsErodeEnabled}" + Increment="1" + Minimum="1" + Maximum="20" + Value="{Binding Operation.ErodeIterationSteps}"/> + + </Grid> + + <Border + Margin="0,10,0,0"> + <Expander> + <Expander.Header> + <TextBlock Text="Kernel - Advanced options (Click to expand)" + FontWeight="Bold" + Cursor="Hand" + /> + </Expander.Header> + <controls:KernelControl + Name="KernelCtrl" + Margin="0,10,0,0" + /> + </Expander> + </Border> - <TextBlock Grid.Row="2" Grid.Column="0" - VerticalAlignment="Center" - Text="Wall thickness:"/> + </StackPanel> - <NumericUpDown Grid.Row="2" Grid.Column="2" - - IsEnabled="{Binding Operation.IsDimmingEnabled}" - Increment="1" - Minimum="1" - Maximum="255" - Value="{Binding Operation.DimmingWallThickness}"/> + </Expander> - <TextBlock Grid.Row="2" Grid.Column="4" - VerticalAlignment="Center" - Text="px"/> + + <Expander IsExpanded="True"> + <Expander.Header> + <TextBlock Text="{Binding Operation.DimmingObjects, StringFormat=Wall dimming [\{0\} objects]}" + FontWeight="Bold" + Cursor="Hand"/> + </Expander.Header> + <Grid + RowDefinitions="Auto,10,Auto,10,Auto,5,Auto" + ColumnDefinitions="Auto,10,Auto,5,Auto,5,Auto,5,Auto,20,Auto,10,Auto" + > - <TextBlock Grid.Row="4" Grid.Column="0" - VerticalAlignment="Center" - Text="Brightness range:"/> + <CheckBox Grid.Row="0" Grid.Column="2" + Grid.ColumnSpan="11" + VerticalAlignment="Center" + IsChecked="{Binding Operation.IsDimmingEnabled}" + Content="Enable - Requires a compatible anti-aliased file format and printer"/> - <NumericUpDown Grid.Row="4" Grid.Column="2" - - IsEnabled="{Binding Operation.IsDimmingEnabled}" - Increment="1" - Minimum="1" - Maximum="254" - Value="{Binding Operation.DimmingStartBrightness}"/> + <TextBlock Grid.Row="2" Grid.Column="0" + VerticalAlignment="Center" + Text="Wall thickness:"/> + <NumericUpDown Grid.Row="2" Grid.Column="2" + + IsEnabled="{Binding Operation.IsDimmingEnabled}" + Increment="1" + Minimum="1" + Maximum="255" + Value="{Binding Operation.DimmingWallThickness}"/> - <TextBlock Grid.Row="4" Grid.Column="4" - VerticalAlignment="Center" - HorizontalAlignment="Center" - Text="-"/> - - <NumericUpDown Grid.Row="4" Grid.Column="6" - - IsEnabled="{Binding Operation.IsDimmingEnabled}" - Increment="1" - Minimum="2" - Maximum="254" - Value="{Binding Operation.DimmingEndBrightness}"/> - - <TextBlock Grid.Row="4" Grid.Column="10" - VerticalAlignment="Center" - Text="Step increment(s):"/> + <TextBlock Grid.Row="2" Grid.Column="4" + VerticalAlignment="Center" + Text="px"/> - <NumericUpDown Grid.Row="4" Grid.Column="12" - - IsEnabled="{Binding Operation.IsDimmingEnabled}" - Increment="1" - Minimum="2" - Maximum="254" - Value="{Binding Operation.DimmingBrightnessSteps}"/> - <TextBlock Grid.Row="6" Grid.Column="2" - VerticalAlignment="Center" - HorizontalAlignment="Center" - Text="{Binding Operation.DimmingStartBrightnessPercent, StringFormat=(\{0\}%)}"/> - <TextBlock Grid.Row="6" Grid.Column="6" - VerticalAlignment="Center" - HorizontalAlignment="Center" - Text="{Binding Operation.DimmingEndBrightnessPercent, StringFormat=(\{0\}%)}"/> - </Grid> + <TextBlock Grid.Row="4" Grid.Column="0" + VerticalAlignment="Center" + Text="Brightness range:"/> + + <NumericUpDown Grid.Row="4" Grid.Column="2" + + IsEnabled="{Binding Operation.IsDimmingEnabled}" + Increment="1" + Minimum="1" + Maximum="254" + Value="{Binding Operation.DimmingStartBrightness}"/> + + + <TextBlock Grid.Row="4" Grid.Column="4" + VerticalAlignment="Center" + HorizontalAlignment="Center" + Text="-"/> + + <NumericUpDown Grid.Row="4" Grid.Column="6" + + IsEnabled="{Binding Operation.IsDimmingEnabled}" + Increment="1" + Minimum="2" + Maximum="254" + Value="{Binding Operation.DimmingEndBrightness}"/> + + <TextBlock Grid.Row="4" Grid.Column="10" + VerticalAlignment="Center" + Text="Step increment(s):"/> + + <NumericUpDown Grid.Row="4" Grid.Column="12" + + IsEnabled="{Binding Operation.IsDimmingEnabled}" + Increment="1" + Minimum="2" + Maximum="254" + Value="{Binding Operation.DimmingBrightnessSteps}"/> + + <TextBlock Grid.Row="6" Grid.Column="2" + VerticalAlignment="Center" + HorizontalAlignment="Center" + Text="{Binding Operation.DimmingStartBrightnessPercent, StringFormat=(\{0\}%)}"/> + <TextBlock Grid.Row="6" Grid.Column="6" + VerticalAlignment="Center" + HorizontalAlignment="Center" + Text="{Binding Operation.DimmingEndBrightnessPercent, StringFormat=(\{0\}%)}"/> + </Grid> - </Expander> - </Border> + </Expander> </StackPanel> diff --git a/UVtools.WPF/Controls/Calibrators/CalibrateExposureFinderControl.axaml b/UVtools.WPF/Controls/Calibrators/CalibrateExposureFinderControl.axaml index 2ffeb4b..7061e5d 100644 --- a/UVtools.WPF/Controls/Calibrators/CalibrateExposureFinderControl.axaml +++ b/UVtools.WPF/Controls/Calibrators/CalibrateExposureFinderControl.axaml @@ -7,811 +7,812 @@ <Grid ColumnDefinitions="Auto,10,380"> <StackPanel Spacing="10"> - <Border BorderBrush="Black" BorderThickness="1" Padding="5"> - <Expander IsExpanded="True"> - <Expander.Header> - <TextBlock Text="Common properties" - FontWeight="Bold" - Cursor="Hand"/> - </Expander.Header> - - <Grid - RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto" - ColumnDefinitions="Auto,10,170,5,Auto,20,Auto,10,170,5,Auto"> - - <TextBlock - Grid.Row="0" Grid.Column="0" - VerticalAlignment="Center" - ToolTip.Tip="The printer display width. Required to calculate the pixels per mm." - Text="Display width:"/> - <NumericUpDown Grid.Row="0" Grid.Column="2" - - Increment="0.1" - Minimum="0" - Maximum="10000" - FormatString="F2" - Value="{Binding Operation.DisplayWidth}"/> - <TextBlock Grid.Row="0" Grid.Column="4" - VerticalAlignment="Center" - Text="mm"/> - - <TextBlock Grid.Row="0" Grid.Column="6" - VerticalAlignment="Center" - ToolTip.Tip="The printer display height. Required to calculate the pixels per mm." - Text="Display height:"/> - <NumericUpDown Grid.Row="0" Grid.Column="8" - Increment="0.1" - Minimum="0" - Maximum="10000" - FormatString="F2" - Value="{Binding Operation.DisplayHeight}"/> - <TextBlock Grid.Row="0" Grid.Column="10" - VerticalAlignment="Center" - Text="mm"/> - - <TextBlock Grid.Row="2" Grid.Column="0" + <Expander IsExpanded="True"> + <Expander.Header> + <TextBlock Text="Common properties" + FontWeight="Bold" + Cursor="Hand"/> + </Expander.Header> + + <Grid + RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto" + ColumnDefinitions="Auto,10,170,5,Auto,20,Auto,10,170,5,Auto"> + + <TextBlock + Grid.Row="0" Grid.Column="0" + VerticalAlignment="Center" + ToolTip.Tip="The printer display width. Required to calculate the pixels per mm." + Text="Display width:"/> + <NumericUpDown Grid.Row="0" Grid.Column="2" + + Increment="0.1" + Minimum="0" + Maximum="10000" + FormatString="F2" + Value="{Binding Operation.DisplayWidth}"/> + <TextBlock Grid.Row="0" Grid.Column="4" + VerticalAlignment="Center" + Text="mm"/> + + <TextBlock Grid.Row="0" Grid.Column="6" + VerticalAlignment="Center" + ToolTip.Tip="The printer display height. Required to calculate the pixels per mm." + Text="Display height:"/> + <NumericUpDown Grid.Row="0" Grid.Column="8" + Increment="0.1" + Minimum="0" + Maximum="10000" + FormatString="F2" + Value="{Binding Operation.DisplayHeight}"/> + <TextBlock Grid.Row="0" Grid.Column="10" + VerticalAlignment="Center" + Text="mm"/> + + <TextBlock Grid.Row="2" Grid.Column="0" + IsEnabled="{Binding !Operation.PatternModel}" + VerticalAlignment="Center" + Text="Layer height:"/> + <NumericUpDown Grid.Row="2" Grid.Column="2" IsEnabled="{Binding !Operation.PatternModel}" - VerticalAlignment="Center" - Text="Layer height:"/> - <NumericUpDown Grid.Row="2" Grid.Column="2" - IsEnabled="{Binding !Operation.PatternModel}" - Increment="0.01" - Minimum="0.01" - Maximum="0.30" - FormatString="F3" - Value="{Binding Operation.LayerHeight}"/> - <TextBlock Grid.Row="2" Grid.Column="4" - IsEnabled="{Binding !Operation.PatternModel}" - VerticalAlignment="Center" - Text="mm"/> - - <TextBlock Grid.Row="2" Grid.Column="6" - VerticalAlignment="Center" - Text="Bottom layers:"/> - <NumericUpDown Grid.Row="2" Grid.Column="8" - - Increment="1" - Minimum="1" - Maximum="1000" - Value="{Binding Operation.BottomLayers}"/> - <TextBlock Grid.Row="2" Grid.Column="8" - VerticalAlignment="Center" - Text="{Binding Operation.BottomHeight, StringFormat=\{0:F3\}mm}"/> - - <TextBlock Grid.Row="4" Grid.Column="0" - VerticalAlignment="Center" - Text="Bottom exposure:"/> - <NumericUpDown Grid.Row="4" Grid.Column="2" - - Increment="0.5" - Minimum="0.1" - Maximum="200" - FormatString="F2" - Value="{Binding Operation.BottomExposure}"/> - <TextBlock Grid.Row="4" Grid.Column="4" - VerticalAlignment="Center" - Text="s"/> - - <TextBlock Grid.Row="4" Grid.Column="6" - VerticalAlignment="Center" - Text="Normal exposure:"/> - <NumericUpDown Grid.Row="4" Grid.Column="8" - - Increment="0.5" - Minimum="0.1" - Maximum="200" - FormatString="F2" - Value="{Binding Operation.NormalExposure}"/> - <TextBlock Grid.Row="4" Grid.Column="10" - VerticalAlignment="Center" - Text="s"/> - - <TextBlock Grid.Row="6" Grid.Column="0" - VerticalAlignment="Center" - Text="Top/bottom margin:"/> - <NumericUpDown Grid.Row="6" Grid.Column="2" - - Increment="0.5" - Minimum="0" - Maximum="1000" - Value="{Binding Operation.TopBottomMargin}"/> - <TextBlock Grid.Row="6" Grid.Column="4" - VerticalAlignment="Center" - Text="mm"/> - - <TextBlock Grid.Row="6" Grid.Column="6" - VerticalAlignment="Center" - Text="Left/right margin:"/> - <NumericUpDown Grid.Row="6" Grid.Column="8" - - Increment="0.5" - Minimum="0" - Maximum="1000" - Value="{Binding Operation.LeftRightMargin}"/> - <TextBlock Grid.Row="6" Grid.Column="10" - VerticalAlignment="Center" - Text="mm"/> - - <TextBlock Grid.Row="8" Grid.Column="0" - VerticalAlignment="Center" - Text="Part margin:"/> - <NumericUpDown Grid.Row="8" Grid.Column="2" - - Increment="1" - Minimum="0" - Maximum="10000" - Value="{Binding Operation.PartMargin}"/> - <TextBlock Grid.Row="8" Grid.Column="4" - VerticalAlignment="Center" - Text="mm"/> - - <TextBlock Grid.Row="10" Grid.Column="0" - VerticalAlignment="Center" - ToolTip.Tip="Chamfer the bottom and top layers" - Text="Chamfer layers:"/> - <NumericUpDown Grid.Row="10" Grid.Column="2" - - Increment="1" - Minimum="0" - Maximum="255" - IsEnabled="{Binding Operation.ChamferModel}" - Value="{Binding Operation.ChamferLayers}"/> - - <TextBlock Grid.Row="10" Grid.Column="6" - VerticalAlignment="Center" - ToolTip.Tip="Erode bottom iterations to counter the elephant foot" - Text="Erode bottom iter.:"/> - <NumericUpDown Grid.Row="10" Grid.Column="8" - - Increment="1" - Minimum="0" - Maximum="255" - Value="{Binding Operation.ErodeBottomIterations}"/> - - <CheckBox Grid.Row="12" Grid.Column="2" Grid.ColumnSpan="5" - VerticalAlignment="Center" - IsEnabled="{Binding !Operation.PatternModel}" - IsChecked="{Binding Operation.EnableAntiAliasing}" - Content="Enable Anti-Aliasing"/> - - <CheckBox Grid.Row="12" Grid.Column="8" - Grid.ColumnSpan="3" - IsEnabled="{Binding !Operation.PatternModel}" - ToolTip.Tip="Most of the printers requires a mirror output to print with the correct orientation" - IsChecked="{Binding Operation.MirrorOutput}" - Content="Mirror output" /> - - </Grid> - </Expander> - </Border> - - <Border BorderBrush="Black" BorderThickness="1" Padding="5" - IsVisible="{Binding !Operation.PatternModel}"> - <Expander IsExpanded="True"> - <Expander.Header> - <TextBlock Text="Object configuration" - FontWeight="Bold" - Cursor="Hand"/> - - </Expander.Header> - - <Grid RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto" - ColumnDefinitions="Auto,10,Auto,5,Auto,20,Auto,10,Auto,5,Auto,20,Auto,10,Auto,5,Auto"> - <TextBlock Grid.Row="0" Grid.Column="0" - Text="Base height:" - VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="0" Grid.Column="2" - - Increment="0.5" - Minimum="0.3" - Maximum="100" - FormatString="F2" - Value="{Binding Operation.BaseHeight}"/> - <TextBlock Grid.Row="0" Grid.Column="4" - VerticalAlignment="Center" - Text="mm"/> - - <TextBlock Grid.Row="0" Grid.Column="6" - Text="Features height:" - VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="0" Grid.Column="8" - - Increment="0.5" - Minimum="0.5" - Maximum="100" - FormatString="F2" - Value="{Binding Operation.FeaturesHeight}"/> - <TextBlock Grid.Row="0" Grid.Column="10" - VerticalAlignment="Center" - Text="mm"/> - - <TextBlock Grid.Row="0" Grid.Column="12" - Text="Features margin:" - VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="0" Grid.Column="14" - - Increment="0.5" - Minimum="0" - Maximum="100" - FormatString="F2" - Value="{Binding Operation.FeaturesMargin}"/> - <TextBlock Grid.Row="0" Grid.Column="16" - VerticalAlignment="Center" - Text="mm"/> - - <TextBlock Grid.Row="2" Grid.Column="0" - ToolTip.Tip="Creates an incremental stair at top from left to right that goes up to the top layer" - Text="Staircase:" - VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="2" Grid.Column="2" - - Increment="1" - Minimum="0" - Maximum="65535" - Value="{Binding Operation.StaircaseThickness}"/> - <TextBlock Grid.Row="2" Grid.Column="4" - VerticalAlignment="Center" - Text="px"/> - - <CheckBox Grid.Row="4" Grid.Column="0" - Grid.ColumnSpan="17" - FontWeight="Bold" - Content="Pin (positive) / holes (negative):" - VerticalAlignment="Center" - IsChecked="{Binding Operation.HolesEnabled}"/> - - <TextBlock Grid.Row="6" Grid.Column="0" - IsEnabled="{Binding Operation.HolesEnabled}" - Text="Shape:" - VerticalAlignment="Center"/> - - <ComboBox Grid.Row="6" Grid.Column="2" - IsEnabled="{Binding Operation.HolesEnabled}" - HorizontalAlignment="Stretch" - Items="{Binding Operation.ShapesItems}" - SelectedItem="{Binding Operation.HoleShape}"/> - - <TextBlock Grid.Row="6" Grid.Column="6" - Text="Unit of measure:" - VerticalAlignment="Center"/> - - <ComboBox Grid.Row="6" Grid.Column="8" - HorizontalAlignment="Stretch" - Items="{Binding Operation.MeasuresItems}" - SelectedItem="{Binding Operation.UnitOfMeasure}"/> - - - <TextBlock Grid.Row="8" Grid.Column="0" - IsEnabled="{Binding Operation.HolesEnabled}" - Text="Diameters:" - ToolTip.Tip="Diameters separated by a comma (,). + Increment="0.01" + Minimum="0.01" + Maximum="0.30" + FormatString="F3" + Value="{Binding Operation.LayerHeight}"/> + <TextBlock Grid.Row="2" Grid.Column="4" + IsEnabled="{Binding !Operation.PatternModel}" + VerticalAlignment="Center" + Text="mm"/> + + <TextBlock Grid.Row="2" Grid.Column="6" + VerticalAlignment="Center" + Text="Bottom layers:"/> + <NumericUpDown Grid.Row="2" Grid.Column="8" + + Increment="1" + Minimum="1" + Maximum="1000" + Value="{Binding Operation.BottomLayers}"/> + <TextBlock Grid.Row="2" Grid.Column="8" + VerticalAlignment="Center" + Text="{Binding Operation.BottomHeight, StringFormat=\{0:F3\}mm}"/> + + <TextBlock Grid.Row="4" Grid.Column="0" + VerticalAlignment="Center" + Text="Bottom exposure:"/> + <NumericUpDown Grid.Row="4" Grid.Column="2" + + Increment="0.5" + Minimum="0.1" + Maximum="200" + FormatString="F2" + Value="{Binding Operation.BottomExposure}"/> + <TextBlock Grid.Row="4" Grid.Column="4" + VerticalAlignment="Center" + Text="s"/> + + <TextBlock Grid.Row="4" Grid.Column="6" + VerticalAlignment="Center" + Text="Normal exposure:"/> + <NumericUpDown Grid.Row="4" Grid.Column="8" + + Increment="0.5" + Minimum="0.1" + Maximum="200" + FormatString="F2" + Value="{Binding Operation.NormalExposure}"/> + <TextBlock Grid.Row="4" Grid.Column="10" + VerticalAlignment="Center" + Text="s"/> + + <TextBlock Grid.Row="6" Grid.Column="0" + VerticalAlignment="Center" + Text="Top/bottom margin:"/> + <NumericUpDown Grid.Row="6" Grid.Column="2" + + Increment="0.5" + Minimum="0" + Maximum="1000" + Value="{Binding Operation.TopBottomMargin}"/> + <TextBlock Grid.Row="6" Grid.Column="4" + VerticalAlignment="Center" + Text="mm"/> + + <TextBlock Grid.Row="6" Grid.Column="6" + VerticalAlignment="Center" + Text="Left/right margin:"/> + <NumericUpDown Grid.Row="6" Grid.Column="8" + + Increment="0.5" + Minimum="0" + Maximum="1000" + Value="{Binding Operation.LeftRightMargin}"/> + <TextBlock Grid.Row="6" Grid.Column="10" + VerticalAlignment="Center" + Text="mm"/> + + <TextBlock Grid.Row="8" Grid.Column="0" + VerticalAlignment="Center" + Text="Part margin:"/> + <NumericUpDown Grid.Row="8" Grid.Column="2" + + Increment="1" + Minimum="0" + Maximum="10000" + Value="{Binding Operation.PartMargin}"/> + <TextBlock Grid.Row="8" Grid.Column="4" + VerticalAlignment="Center" + Text="mm"/> + + <TextBlock Grid.Row="10" Grid.Column="0" + VerticalAlignment="Center" + ToolTip.Tip="Chamfer the bottom and top layers" + Text="Chamfer layers:"/> + <NumericUpDown Grid.Row="10" Grid.Column="2" + + Increment="1" + Minimum="0" + Maximum="255" + IsEnabled="{Binding Operation.ChamferModel}" + Value="{Binding Operation.ChamferLayers}"/> + + <TextBlock Grid.Row="10" Grid.Column="6" + VerticalAlignment="Center" + ToolTip.Tip="Erode bottom iterations to counter the elephant foot" + Text="Erode bottom iter.:"/> + <NumericUpDown Grid.Row="10" Grid.Column="8" + + Increment="1" + Minimum="0" + Maximum="255" + Value="{Binding Operation.ErodeBottomIterations}"/> + + <CheckBox Grid.Row="12" Grid.Column="2" Grid.ColumnSpan="5" + VerticalAlignment="Center" + IsEnabled="{Binding !Operation.PatternModel}" + IsChecked="{Binding Operation.EnableAntiAliasing}" + Content="Enable Anti-Aliasing"/> + + <CheckBox Grid.Row="12" Grid.Column="8" + Grid.ColumnSpan="3" + IsEnabled="{Binding !Operation.PatternModel}" + ToolTip.Tip="Most of the printers requires a mirror output to print with the correct orientation" + IsChecked="{Binding Operation.MirrorOutput}" + Content="Mirror output" /> + + </Grid> + </Expander> + + <Expander IsExpanded="True" IsVisible="{Binding !Operation.PatternModel}"> + <Expander.Header> + <TextBlock Text="Object configuration" + FontWeight="Bold" + Cursor="Hand"/> + + </Expander.Header> + + <Grid RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto" + ColumnDefinitions="Auto,10,Auto,5,Auto,20,Auto,10,Auto,5,Auto,20,Auto,10,Auto,5,Auto"> + <TextBlock Grid.Row="0" Grid.Column="0" + Text="Base height:" + VerticalAlignment="Center"/> + <NumericUpDown Grid.Row="0" Grid.Column="2" + + Increment="0.5" + Minimum="0.3" + Maximum="100" + FormatString="F2" + Value="{Binding Operation.BaseHeight}"/> + <TextBlock Grid.Row="0" Grid.Column="4" + VerticalAlignment="Center" + Text="mm"/> + + <TextBlock Grid.Row="0" Grid.Column="6" + Text="Features height:" + VerticalAlignment="Center"/> + <NumericUpDown Grid.Row="0" Grid.Column="8" + + Increment="0.5" + Minimum="0.5" + Maximum="100" + FormatString="F2" + Value="{Binding Operation.FeaturesHeight}"/> + <TextBlock Grid.Row="0" Grid.Column="10" + VerticalAlignment="Center" + Text="mm"/> + + <TextBlock Grid.Row="0" Grid.Column="12" + Text="Features margin:" + VerticalAlignment="Center"/> + <NumericUpDown Grid.Row="0" Grid.Column="14" + + Increment="0.5" + Minimum="0" + Maximum="100" + FormatString="F2" + Value="{Binding Operation.FeaturesMargin}"/> + <TextBlock Grid.Row="0" Grid.Column="16" + VerticalAlignment="Center" + Text="mm"/> + + <TextBlock Grid.Row="2" Grid.Column="0" + ToolTip.Tip="Creates an incremental stair at top from left to right that goes up to the top layer" + Text="Staircase:" + VerticalAlignment="Center"/> + <NumericUpDown Grid.Row="2" Grid.Column="2" + IsVisible="{Binding !Operation.IsUnitOfMeasureMm}" + Increment="1" + Minimum="0" + Maximum="65535" + Value="{Binding Operation.StaircaseThicknessPx}"/> + <NumericUpDown Grid.Row="2" Grid.Column="2" + IsVisible="{Binding Operation.IsUnitOfMeasureMm}" + Increment="1" + Minimum="0" + Maximum="500" + Value="{Binding Operation.StaircaseThicknessMm}"/> + + <TextBlock Grid.Row="2" Grid.Column="4" + VerticalAlignment="Center" + IsVisible="{Binding !Operation.IsUnitOfMeasureMm}" + Text="px"/> + <TextBlock Grid.Row="2" Grid.Column="4" + VerticalAlignment="Center" + IsVisible="{Binding Operation.IsUnitOfMeasureMm}" + Text="mm"/> + + <TextBlock Grid.Row="2" Grid.Column="6" + Text="Unit of measure:" + VerticalAlignment="Center"/> + + <ComboBox Grid.Row="2" Grid.Column="8" + HorizontalAlignment="Stretch" + Items="{Binding Operation.MeasuresItems}" + SelectedItem="{Binding Operation.UnitOfMeasure}"/> + + <CheckBox Grid.Row="4" Grid.Column="0" + Grid.ColumnSpan="17" + FontWeight="Bold" + Content="Pin (positive) / holes (negative):" + VerticalAlignment="Center" + IsChecked="{Binding Operation.HolesEnabled}"/> + + <TextBlock Grid.Row="6" Grid.Column="0" + IsEnabled="{Binding Operation.HolesEnabled}" + Text="Shape:" + VerticalAlignment="Center"/> + + <ComboBox Grid.Row="6" Grid.Column="2" + IsEnabled="{Binding Operation.HolesEnabled}" + HorizontalAlignment="Stretch" + Items="{Binding Operation.ShapesItems}" + SelectedItem="{Binding Operation.HoleShape}"/> + + + <TextBlock Grid.Row="8" Grid.Column="0" + IsEnabled="{Binding Operation.HolesEnabled}" + Text="Diameters:" + ToolTip.Tip="Diameters separated by a comma (,). 
Order doesn't matter. 
Values are pixel square, eg: 3 = 3x3 = 9 pixel hole" - VerticalAlignment="Center"/> - - <TextBox Grid.Row="8" Grid.Column="2" - Grid.ColumnSpan="13" - IsEnabled="{Binding Operation.HolesEnabled}" - IsVisible="{Binding Operation.IsUnitOfMeasureMm}" - Text="{Binding Operation.HoleDiametersMm}"/> - - <TextBox Grid.Row="8" Grid.Column="2" - Grid.ColumnSpan="13" - IsEnabled="{Binding Operation.HolesEnabled}" - IsVisible="{Binding !Operation.IsUnitOfMeasureMm}" - Text="{Binding Operation.HoleDiametersPx}"/> - - <TextBlock Grid.Row="8" Grid.Column="16" - IsEnabled="{Binding Operation.HolesEnabled}" - IsVisible="{Binding Operation.IsUnitOfMeasureMm}" - VerticalAlignment="Center" - Text="mm"/> - - <TextBlock Grid.Row="8" Grid.Column="16" - IsEnabled="{Binding Operation.HolesEnabled}" - IsVisible="{Binding !Operation.IsUnitOfMeasureMm}" - VerticalAlignment="Center" - Text="px"/> - - <CheckBox Grid.Row="10" Grid.Column="0" - Grid.ColumnSpan="17" - FontWeight="Bold" - Content="Zebra bars:" - VerticalAlignment="Center" - IsChecked="{Binding Operation.BarsEnabled}"/> - - - <TextBlock Grid.Row="12" Grid.Column="0" - IsEnabled="{Binding Operation.BarsEnabled}" - Text="Bar spacing:" - VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="12" Grid.Column="2" - IsEnabled="{Binding Operation.BarsEnabled}" - Increment="0.5" - Minimum="0.01" - Maximum="100" - FormatString="F2" - Value="{Binding Operation.BarSpacing}"/> - <TextBlock Grid.Row="12" Grid.Column="4" + VerticalAlignment="Center"/> + + <TextBox Grid.Row="8" Grid.Column="2" + Grid.ColumnSpan="13" + IsEnabled="{Binding Operation.HolesEnabled}" + IsVisible="{Binding Operation.IsUnitOfMeasureMm}" + Text="{Binding Operation.HoleDiametersMm}"/> + + <TextBox Grid.Row="8" Grid.Column="2" + Grid.ColumnSpan="13" + IsEnabled="{Binding Operation.HolesEnabled}" + IsVisible="{Binding !Operation.IsUnitOfMeasureMm}" + Text="{Binding Operation.HoleDiametersPx}"/> + + <TextBlock Grid.Row="8" Grid.Column="16" + IsEnabled="{Binding Operation.HolesEnabled}" + IsVisible="{Binding Operation.IsUnitOfMeasureMm}" + VerticalAlignment="Center" + Text="mm"/> + + <TextBlock Grid.Row="8" Grid.Column="16" + IsEnabled="{Binding Operation.HolesEnabled}" + IsVisible="{Binding !Operation.IsUnitOfMeasureMm}" + VerticalAlignment="Center" + Text="px"/> + + <CheckBox Grid.Row="10" Grid.Column="0" + Grid.ColumnSpan="17" + FontWeight="Bold" + Content="Zebra bars:" + VerticalAlignment="Center" + IsChecked="{Binding Operation.BarsEnabled}"/> + + + <TextBlock Grid.Row="12" Grid.Column="0" + IsEnabled="{Binding Operation.BarsEnabled}" + Text="Bar spacing:" + VerticalAlignment="Center"/> + <NumericUpDown Grid.Row="12" Grid.Column="2" IsEnabled="{Binding Operation.BarsEnabled}" - VerticalAlignment="Center" - Text="mm"/> - - <TextBlock Grid.Row="12" Grid.Column="6" - IsEnabled="{Binding Operation.BarsEnabled}" - Text="Bar length:" - HorizontalAlignment="Right" - VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="12" Grid.Column="8" - IsEnabled="{Binding Operation.BarsEnabled}" - Increment="0.5" - Minimum="0.01" - Maximum="100" - FormatString="F2" - Value="{Binding Operation.BarLength}"/> - <TextBlock Grid.Row="12" Grid.Column="10" + Increment="0.5" + Minimum="0.01" + Maximum="100" + FormatString="F2" + Value="{Binding Operation.BarSpacing}"/> + <TextBlock Grid.Row="12" Grid.Column="4" + IsEnabled="{Binding Operation.BarsEnabled}" + VerticalAlignment="Center" + Text="mm"/> + + <TextBlock Grid.Row="12" Grid.Column="6" + IsEnabled="{Binding Operation.BarsEnabled}" + Text="Bar length:" + HorizontalAlignment="Right" + VerticalAlignment="Center"/> + <NumericUpDown Grid.Row="12" Grid.Column="8" IsEnabled="{Binding Operation.BarsEnabled}" - VerticalAlignment="Center" - Text="mm"/> - - <TextBlock Grid.Row="12" Grid.Column="12" + Increment="0.5" + Minimum="0.01" + Maximum="100" + FormatString="F2" + Value="{Binding Operation.BarLength}"/> + <TextBlock Grid.Row="12" Grid.Column="10" + IsEnabled="{Binding Operation.BarsEnabled}" + VerticalAlignment="Center" + Text="mm"/> + + <TextBlock Grid.Row="12" Grid.Column="12" + IsEnabled="{Binding Operation.BarsEnabled}" + Text="Vertical splitter:" + HorizontalAlignment="Right" + VerticalAlignment="Center"/> + <NumericUpDown Grid.Row="12" Grid.Column="14" IsEnabled="{Binding Operation.BarsEnabled}" - Text="Vertical splitter:" - HorizontalAlignment="Right" - VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="12" Grid.Column="14" - IsEnabled="{Binding Operation.BarsEnabled}" - Increment="1" - Minimum="-128" - Maximum="127" - Value="{Binding Operation.BarVerticalSplitter}"/> - <TextBlock Grid.Row="10" Grid.Column="16" + Increment="1" + Minimum="-128" + Maximum="127" + Value="{Binding Operation.BarVerticalSplitter}"/> + <TextBlock Grid.Row="10" Grid.Column="16" + IsEnabled="{Binding Operation.BarsEnabled}" + VerticalAlignment="Center" + Text="px"/> + + <TextBlock Grid.Row="14" Grid.Column="0" + IsEnabled="{Binding Operation.BarsEnabled}" + Text="Fence thick:" + VerticalAlignment="Center"/> + <NumericUpDown Grid.Row="14" Grid.Column="2" IsEnabled="{Binding Operation.BarsEnabled}" - VerticalAlignment="Center" - Text="px"/> - - <TextBlock Grid.Row="14" Grid.Column="0" - IsEnabled="{Binding Operation.BarsEnabled}" - Text="Fence thick:" - VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="14" Grid.Column="2" - IsEnabled="{Binding Operation.BarsEnabled}" - Increment="2" - Minimum="0" - Maximum="255" - Value="{Binding Operation.BarFenceThickness}"/> - <TextBlock Grid.Row="14" Grid.Column="4" - IsEnabled="{Binding Operation.BarsEnabled}" - VerticalAlignment="Center" - Text="px"/> - - <TextBlock Grid.Row="14" Grid.Column="6" - IsEnabled="{Binding Operation.BarsEnabled}" - Text="Fence offset:" - HorizontalAlignment="Right" - VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="14" Grid.Column="8" - IsEnabled="{Binding Operation.BarsEnabled}" - Increment="1" - Minimum="-128" - Maximum="127" - Value="{Binding Operation.BarFenceOffset}"/> - <TextBlock Grid.Row="14" Grid.Column="10" + Increment="2" + Minimum="0" + Maximum="255" + Value="{Binding Operation.BarFenceThickness}"/> + <TextBlock Grid.Row="14" Grid.Column="4" + IsEnabled="{Binding Operation.BarsEnabled}" + VerticalAlignment="Center" + Text="px"/> + + <TextBlock Grid.Row="14" Grid.Column="6" + IsEnabled="{Binding Operation.BarsEnabled}" + Text="Fence offset:" + HorizontalAlignment="Right" + VerticalAlignment="Center"/> + <NumericUpDown Grid.Row="14" Grid.Column="8" IsEnabled="{Binding Operation.BarsEnabled}" - VerticalAlignment="Center" - Text="px"/> - - <TextBlock Grid.Row="16" Grid.Column="0" - IsEnabled="{Binding Operation.BarsEnabled}" - Text="Thicknesses:" - VerticalAlignment="Center"/> - - <TextBox Grid.Row="16" Grid.Column="2" - Grid.ColumnSpan="13" - IsEnabled="{Binding Operation.BarsEnabled}" - IsVisible="{Binding Operation.IsUnitOfMeasureMm}" - Text="{Binding Operation.BarThicknessesMm}"/> - - <TextBox Grid.Row="16" Grid.Column="2" - Grid.ColumnSpan="13" - IsEnabled="{Binding Operation.BarsEnabled}" - IsVisible="{Binding !Operation.IsUnitOfMeasureMm}" - Text="{Binding Operation.BarThicknessesPx}"/> - <TextBlock Grid.Row="16" Grid.Column="16" - IsEnabled="{Binding Operation.BarsEnabled}" - IsVisible="{Binding Operation.IsUnitOfMeasureMm}" - VerticalAlignment="Center" - Text="mm"/> - <TextBlock Grid.Row="16" Grid.Column="16" - IsEnabled="{Binding Operation.BarsEnabled}" - IsVisible="{Binding !Operation.IsUnitOfMeasureMm}" - VerticalAlignment="Center" - Text="px"/> - - <CheckBox Grid.Row="18" Grid.Column="0" - Grid.ColumnSpan="17" - FontWeight="Bold" - Content="Text:" - VerticalAlignment="Center" - IsChecked="{Binding Operation.TextEnabled}"/> - - <TextBlock Grid.Row="20" Grid.Column="0" - IsEnabled="{Binding Operation.TextEnabled}" - Text="Font:" - VerticalAlignment="Center"/> - <ComboBox Grid.Row="20" Grid.Column="2" - IsEnabled="{Binding Operation.TextEnabled}" - Grid.ColumnSpan="3" - VerticalAlignment="Center" - HorizontalAlignment="Stretch" - Items="{Binding Operation.TextFonts}" - SelectedItem="{Binding Operation.TextFont}"/> - - <TextBlock Grid.Row="20" Grid.Column="6" + Increment="1" + Minimum="-128" + Maximum="127" + Value="{Binding Operation.BarFenceOffset}"/> + <TextBlock Grid.Row="14" Grid.Column="10" + IsEnabled="{Binding Operation.BarsEnabled}" + VerticalAlignment="Center" + Text="px"/> + + <TextBlock Grid.Row="16" Grid.Column="0" + IsEnabled="{Binding Operation.BarsEnabled}" + Text="Thicknesses:" + VerticalAlignment="Center"/> + + <TextBox Grid.Row="16" Grid.Column="2" + Grid.ColumnSpan="13" + IsEnabled="{Binding Operation.BarsEnabled}" + IsVisible="{Binding Operation.IsUnitOfMeasureMm}" + Text="{Binding Operation.BarThicknessesMm}"/> + + <TextBox Grid.Row="16" Grid.Column="2" + Grid.ColumnSpan="13" + IsEnabled="{Binding Operation.BarsEnabled}" + IsVisible="{Binding !Operation.IsUnitOfMeasureMm}" + Text="{Binding Operation.BarThicknessesPx}"/> + <TextBlock Grid.Row="16" Grid.Column="16" + IsEnabled="{Binding Operation.BarsEnabled}" + IsVisible="{Binding Operation.IsUnitOfMeasureMm}" + VerticalAlignment="Center" + Text="mm"/> + <TextBlock Grid.Row="16" Grid.Column="16" + IsEnabled="{Binding Operation.BarsEnabled}" + IsVisible="{Binding !Operation.IsUnitOfMeasureMm}" + VerticalAlignment="Center" + Text="px"/> + + <CheckBox Grid.Row="18" Grid.Column="0" + Grid.ColumnSpan="17" + FontWeight="Bold" + Content="Text:" + VerticalAlignment="Center" + IsChecked="{Binding Operation.TextEnabled}"/> + + <TextBlock Grid.Row="20" Grid.Column="0" + IsEnabled="{Binding Operation.TextEnabled}" + Text="Font:" + VerticalAlignment="Center"/> + <ComboBox Grid.Row="20" Grid.Column="2" + IsEnabled="{Binding Operation.TextEnabled}" + Grid.ColumnSpan="3" + VerticalAlignment="Center" + HorizontalAlignment="Stretch" + Items="{Binding Operation.TextFonts}" + SelectedItem="{Binding Operation.TextFont}"/> + + <TextBlock Grid.Row="20" Grid.Column="6" + IsEnabled="{Binding Operation.TextEnabled}" + Text="Text scale:" + HorizontalAlignment="Right" + VerticalAlignment="Center"/> + <NumericUpDown Grid.Row="20" Grid.Column="8" IsEnabled="{Binding Operation.TextEnabled}" - Text="Text scale:" - HorizontalAlignment="Right" - VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="20" Grid.Column="8" - IsEnabled="{Binding Operation.TextEnabled}" - Increment="0.5" - Minimum="0.1" - Maximum="100" - FormatString="F2" - Value="{Binding Operation.TextScale}"/> - <TextBlock Grid.Row="20" Grid.Column="10" - IsEnabled="{Binding Operation.TextEnabled}" - VerticalAlignment="Center" - Text="x"/> - - <TextBlock Grid.Row="20" Grid.Column="12" - IsEnabled="{Binding Operation.TextEnabled}" - Text="Text thickness:" - HorizontalAlignment="Right" - VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="20" Grid.Column="14" - IsEnabled="{Binding Operation.TextEnabled}" - Increment="1" - Minimum="1" - Maximum="255" - Value="{Binding Operation.TextThickness}"/> - <TextBlock Grid.Row="20" Grid.Column="16" + Increment="0.5" + Minimum="0.1" + Maximum="100" + FormatString="F2" + Value="{Binding Operation.TextScale}"/> + <TextBlock Grid.Row="20" Grid.Column="10" + IsEnabled="{Binding Operation.TextEnabled}" + VerticalAlignment="Center" + Text="x"/> + + <TextBlock Grid.Row="20" Grid.Column="12" + IsEnabled="{Binding Operation.TextEnabled}" + Text="Text thickness:" + HorizontalAlignment="Right" + VerticalAlignment="Center"/> + <NumericUpDown Grid.Row="20" Grid.Column="14" IsEnabled="{Binding Operation.TextEnabled}" - VerticalAlignment="Center" - Text="px"/> - - <TextBlock Grid.Row="22" Grid.Column="0" - IsEnabled="{Binding Operation.TextEnabled}" - Text="Text:" - VerticalAlignment="Center"/> - - <TextBox Grid.Row="22" Grid.Column="2" - IsEnabled="{Binding Operation.TextEnabled}" - Grid.ColumnSpan="13" - Text="{Binding Operation.Text}"/> - - <CheckBox Grid.Row="24" Grid.Column="0" - Grid.ColumnSpan="17" - FontWeight="Bold" - Content="Bullseye:" - VerticalAlignment="Center" - IsChecked="{Binding Operation.BullsEyeEnabled}"/> - - - <TextBlock Grid.Row="26" Grid.Column="0" - Text="Configuration:" + Increment="1" + Minimum="1" + Maximum="255" + Value="{Binding Operation.TextThickness}"/> + <TextBlock Grid.Row="20" Grid.Column="16" + IsEnabled="{Binding Operation.TextEnabled}" + VerticalAlignment="Center" + Text="px"/> + + <TextBlock Grid.Row="22" Grid.Column="0" + IsEnabled="{Binding Operation.TextEnabled}" + Text="Text:" + VerticalAlignment="Center"/> + + <TextBox Grid.Row="22" Grid.Column="2" + IsEnabled="{Binding Operation.TextEnabled}" + Grid.ColumnSpan="13" + Text="{Binding Operation.Text}"/> + + <CheckBox Grid.Row="24" Grid.Column="0" + Grid.ColumnSpan="17" + FontWeight="Bold" + Content="Bullseye:" + VerticalAlignment="Center" + IsChecked="{Binding Operation.BullsEyeEnabled}"/> + + + <TextBlock Grid.Row="26" Grid.Column="0" + Text="Configuration:" + IsEnabled="{Binding Operation.BullsEyeEnabled}" + ToolTip.Tip="Diameter:Thickness, ..." + VerticalAlignment="Center"/> + + <TextBox Grid.Row="26" Grid.Column="2" + Grid.ColumnSpan="13" + IsEnabled="{Binding Operation.BullsEyeEnabled}" + IsVisible="{Binding Operation.IsUnitOfMeasureMm}" + Text="{Binding Operation.BullsEyeConfigurationMm}"/> + + <TextBox Grid.Row="26" Grid.Column="2" + Grid.ColumnSpan="13" + IsEnabled="{Binding Operation.BullsEyeEnabled}" + IsVisible="{Binding !Operation.IsUnitOfMeasureMm}" + Text="{Binding Operation.BullsEyeConfigurationPx}"/> + <TextBlock Grid.Row="26" Grid.Column="16" + IsEnabled="{Binding Operation.BullsEyeEnabled}" + IsVisible="{Binding Operation.IsUnitOfMeasureMm}" + VerticalAlignment="Center" + Text="mm"/> + <TextBlock Grid.Row="26" Grid.Column="16" + IsEnabled="{Binding Operation.BullsEyeEnabled}" + IsVisible="{Binding !Operation.IsUnitOfMeasureMm}" + VerticalAlignment="Center" + Text="px"/> + + <TextBlock Grid.Row="28" Grid.Column="0" + IsEnabled="{Binding Operation.BullsEyeEnabled}" + Text="Fence thick:" + VerticalAlignment="Center"/> + <NumericUpDown Grid.Row="28" Grid.Column="2" IsEnabled="{Binding Operation.BullsEyeEnabled}" - ToolTip.Tip="Diameter:Thickness, ..." - VerticalAlignment="Center"/> - - <TextBox Grid.Row="26" Grid.Column="2" - Grid.ColumnSpan="13" - IsEnabled="{Binding Operation.BullsEyeEnabled}" - IsVisible="{Binding Operation.IsUnitOfMeasureMm}" - Text="{Binding Operation.BullsEyeConfigurationMm}"/> - - <TextBox Grid.Row="26" Grid.Column="2" - Grid.ColumnSpan="13" - IsEnabled="{Binding Operation.BullsEyeEnabled}" - IsVisible="{Binding !Operation.IsUnitOfMeasureMm}" - Text="{Binding Operation.BullsEyeConfigurationPx}"/> - <TextBlock Grid.Row="26" Grid.Column="16" + Increment="2" + Minimum="0" + Maximum="255" + Value="{Binding Operation.BullsEyeFenceThickness}"/> + <TextBlock Grid.Row="28" Grid.Column="4" + IsEnabled="{Binding Operation.BullsEyeEnabled}" + VerticalAlignment="Center" + Text="px"/> + + <TextBlock Grid.Row="28" Grid.Column="6" + IsEnabled="{Binding Operation.BullsEyeEnabled}" + Text="Fence offset:" + HorizontalAlignment="Right" + VerticalAlignment="Center"/> + <NumericUpDown Grid.Row="28" Grid.Column="8" IsEnabled="{Binding Operation.BullsEyeEnabled}" - IsVisible="{Binding Operation.IsUnitOfMeasureMm}" - VerticalAlignment="Center" - Text="mm"/> - <TextBlock Grid.Row="26" Grid.Column="16" - IsEnabled="{Binding Operation.BullsEyeEnabled}" - IsVisible="{Binding !Operation.IsUnitOfMeasureMm}" - VerticalAlignment="Center" - Text="px"/> - - <TextBlock Grid.Row="28" Grid.Column="0" - IsEnabled="{Binding Operation.BullsEyeEnabled}" - Text="Fence thick:" - VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="28" Grid.Column="2" - IsEnabled="{Binding Operation.BullsEyeEnabled}" - Increment="2" - Minimum="0" - Maximum="255" - Value="{Binding Operation.BullsEyeFenceThickness}"/> - <TextBlock Grid.Row="28" Grid.Column="4" - IsEnabled="{Binding Operation.BullsEyeEnabled}" - VerticalAlignment="Center" - Text="px"/> - - <TextBlock Grid.Row="28" Grid.Column="6" - IsEnabled="{Binding Operation.BullsEyeEnabled}" - Text="Fence offset:" - HorizontalAlignment="Right" - VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="28" Grid.Column="8" - IsEnabled="{Binding Operation.BullsEyeEnabled}" - Increment="1" - Minimum="-128" - Maximum="127" - Value="{Binding Operation.BullsEyeFenceOffset}"/> - <TextBlock Grid.Row="28" Grid.Column="10" - IsEnabled="{Binding Operation.BullsEyeEnabled}" - VerticalAlignment="Center" - Text="px"/> - - <CheckBox Grid.Row="28" Grid.Column="12" - Grid.ColumnSpan="5" - Content="Invert quadrants" - VerticalAlignment="Center" - IsEnabled="{Binding Operation.BullsEyeEnabled}" - IsChecked="{Binding Operation.BullsEyeInvertQuadrants}"/> - - - <CheckBox Grid.Row="30" Grid.Column="0" - Grid.ColumnSpan="17" - FontWeight="Bold" - Content="Counter triangles:" - VerticalAlignment="Center" - IsChecked="{Binding Operation.CounterTrianglesEnabled}"/> - - - <TextBlock Grid.Row="32" Grid.Column="0" - Text="Tip Offset:" + Increment="1" + Minimum="-128" + Maximum="127" + Value="{Binding Operation.BullsEyeFenceOffset}"/> + <TextBlock Grid.Row="28" Grid.Column="10" + IsEnabled="{Binding Operation.BullsEyeEnabled}" + VerticalAlignment="Center" + Text="px"/> + + <CheckBox Grid.Row="28" Grid.Column="12" + Grid.ColumnSpan="5" + Content="Invert quadrants" + VerticalAlignment="Center" + IsEnabled="{Binding Operation.BullsEyeEnabled}" + IsChecked="{Binding Operation.BullsEyeInvertQuadrants}"/> + + + <CheckBox Grid.Row="30" Grid.Column="0" + Grid.ColumnSpan="17" + FontWeight="Bold" + Content="Counter triangles:" + VerticalAlignment="Center" + IsChecked="{Binding Operation.CounterTrianglesEnabled}"/> + + + <TextBlock Grid.Row="32" Grid.Column="0" + Text="Tip Offset:" + IsEnabled="{Binding Operation.CounterTrianglesEnabled}" + VerticalAlignment="Center"/> + + <NumericUpDown Grid.Row="32" Grid.Column="2" IsEnabled="{Binding Operation.CounterTrianglesEnabled}" - VerticalAlignment="Center"/> + Increment="1" + Minimum="-128" + Maximum="127" + Value="{Binding Operation.CounterTrianglesTipOffset}"/> - <NumericUpDown Grid.Row="32" Grid.Column="2" - IsEnabled="{Binding Operation.CounterTrianglesEnabled}" - Increment="1" - Minimum="-128" - Maximum="127" - Value="{Binding Operation.CounterTrianglesTipOffset}"/> + <TextBlock Grid.Row="32" Grid.Column="4" + IsEnabled="{Binding Operation.CounterTrianglesEnabled}" + VerticalAlignment="Center" + Text="px"/> - <TextBlock Grid.Row="32" Grid.Column="4" - IsEnabled="{Binding Operation.CounterTrianglesEnabled}" - VerticalAlignment="Center" - Text="px"/> + <CheckBox Grid.Row="32" Grid.Column="6" + Grid.ColumnSpan="5" + IsEnabled="{Binding Operation.CounterTrianglesEnabled}" + Content="Fence the triangles" + VerticalAlignment="Center" + IsChecked="{Binding Operation.CounterTrianglesFence}"/> - <CheckBox Grid.Row="32" Grid.Column="6" - Grid.ColumnSpan="5" - IsEnabled="{Binding Operation.CounterTrianglesEnabled}" - Content="Fence the triangles" - VerticalAlignment="Center" - IsChecked="{Binding Operation.CounterTrianglesFence}"/> + </Grid> - </Grid> + </Expander> - </Expander> - </Border> - - <Border BorderBrush="Black" - BorderThickness="1" - Padding="5"> - <Expander IsExpanded="False"> - <Expander.Header> - <StackPanel Orientation="Horizontal" Cursor="Hand"> - <TextBlock Text="Multiple brightness" - IsVisible="{Binding !SlicerFile.IsAntiAliasingEmulated}" - FontWeight="Bold"/> - <TextBlock Text="Multiple brightness/exposures with emulated AntiAliasing and time fractions" - IsVisible="{Binding SlicerFile.IsAntiAliasingEmulated}" - FontWeight="Bold"/> - </StackPanel> - </Expander.Header> + <Expander IsExpanded="False"> + <Expander.Header> + <StackPanel Orientation="Horizontal" Cursor="Hand"> + <TextBlock Text="Multiple brightness" + IsVisible="{Binding !SlicerFile.IsAntiAliasingEmulated}" + FontWeight="Bold"/> + <TextBlock Text="Multiple brightness/exposures with emulated AntiAliasing and time fractions" + IsVisible="{Binding SlicerFile.IsAntiAliasingEmulated}" + FontWeight="Bold"/> + </StackPanel> - <StackPanel Spacing="10"> + </Expander.Header> + + <StackPanel Spacing="10"> - <TextBlock - Text="Only printers able to do Anti-Aliasing and enabled on file can support this. + <TextBlock + Text="Only printers able to do Anti-Aliasing and enabled on file can support this. 
Make sure your is supported or else it can print a full white or full black model. 
Also take into consideration some printers/formats have fixed usable AA levels and all in between will be threshold, study this first. 
When using this section, always set the exposure time to the highest time you want to test. 
If your printer is able to do 'Multiple exposures times per layer', please use that method instead of this (More accurate and AA threshold free)."/> - <TextBlock - IsVisible="{Binding SlicerFile.IsAntiAliasingEmulated}" - TextWrapping="Wrap" - FontWeight="Bold" - Text="Note: This file format uses time fractions to emulate AntiAliasing. + <TextBlock + IsVisible="{Binding SlicerFile.IsAntiAliasingEmulated}" + TextWrapping="Wrap" + FontWeight="Bold" + Text="Note: This file format uses time fractions to emulate AntiAliasing. 
This can be used to replace the 'Multiple exposures' sections and print multiple models at once at different timings. 
However you can't set the object time, instead fractions of the main exposure must be used. 
The brightness table will tell you the expected exposure time of each object."/> - <CheckBox - Content="Enable - For advanced users only!" - IsChecked="{Binding Operation.MultipleBrightness}"/> + <CheckBox + Content="Enable - For advanced users only!" + IsChecked="{Binding Operation.MultipleBrightness}"/> - <Grid RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto" - ColumnDefinitions="Auto,10,200,5,Auto,20,Auto,10,Auto,5,Auto,5,Auto" - IsEnabled="{Binding Operation.MultipleBrightness}"> + <Grid RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto" + ColumnDefinitions="Auto,10,200,5,Auto,20,Auto,10,Auto,5,Auto,5,Auto" + IsEnabled="{Binding Operation.MultipleBrightness}"> - <TextBlock Grid.Row="0" Grid.Column="0" - ToolTip.Tip="Do not change brightness from the selected layers. Full brightness of 255 is applied to the skip layers." - Text="Exclude from:" - VerticalAlignment="Center"/> - <ComboBox Grid.Row="0" Grid.Column="2" - VerticalAlignment="Center" - HorizontalAlignment="Stretch" - Items="{Binding Operation.MultipleBrightnessExcludeFromItems}" - SelectedItem="{Binding Operation.MultipleBrightnessExcludeFrom}"/> - <TextBlock Grid.Row="0" Grid.Column="4" - Text="layers" - VerticalAlignment="Center"/> + <TextBlock Grid.Row="0" Grid.Column="0" + ToolTip.Tip="Do not change brightness from the selected layers. Full brightness of 255 is applied to the skip layers." + Text="Exclude from:" + VerticalAlignment="Center"/> + <ComboBox Grid.Row="0" Grid.Column="2" + VerticalAlignment="Center" + HorizontalAlignment="Stretch" + Items="{Binding Operation.MultipleBrightnessExcludeFromItems}" + SelectedItem="{Binding Operation.MultipleBrightnessExcludeFrom}"/> + <TextBlock Grid.Row="0" Grid.Column="4" + Text="layers" + VerticalAlignment="Center"/> + + <TextBlock Grid.Row="0" Grid.Column="6" + IsVisible="{Binding !SlicerFile.IsAntiAliasingEmulated}" + ToolTip.Tip="Append a brightness level to the list by giving a desired exposure time. Supplied time must be lower than the common exposure time or you need to increase it on the common 'Normal Exposure'." + Text="Generate by exposure time:" + VerticalAlignment="Center"/> - <TextBlock Grid.Row="0" Grid.Column="6" + <NumericUpDown Grid.Row="0" Grid.Column="8" IsVisible="{Binding !SlicerFile.IsAntiAliasingEmulated}" - ToolTip.Tip="Append a brightness level to the list by giving a desired exposure time. Supplied time must be lower than the common exposure time or you need to increase it on the common 'Normal Exposure'." - Text="Generate by exposure time:" - VerticalAlignment="Center"/> + Increment="0.10" + Minimum="0.10" + Maximum="{Binding Operation.NormalExposure}" + FormatString="F2" + Value="{Binding Operation.MultipleBrightnessGenExposureTime}"/> - <NumericUpDown Grid.Row="0" Grid.Column="8" - IsVisible="{Binding !SlicerFile.IsAntiAliasingEmulated}" - Increment="0.10" - Minimum="0.10" - Maximum="{Binding Operation.NormalExposure}" - FormatString="F2" - Value="{Binding Operation.MultipleBrightnessGenExposureTime}"/> + <TextBlock Grid.Row="0" Grid.Column="10" + IsVisible="{Binding !SlicerFile.IsAntiAliasingEmulated}" + Text="s" + VerticalAlignment="Center"/> - <TextBlock Grid.Row="0" Grid.Column="10" - IsVisible="{Binding !SlicerFile.IsAntiAliasingEmulated}" - Text="s" - VerticalAlignment="Center"/> + <Button + Grid.Row="0" Grid.Column="12" VerticalContentAlignment="Center" + IsVisible="{Binding !SlicerFile.IsAntiAliasingEmulated}" + HorizontalContentAlignment="Center" + VerticalAlignment="Stretch" + Command="{Binding BrightnessExposureGenAdd}"> + <StackPanel Orientation="Horizontal" Spacing="10"> + <Image Source="/Assets/Icons/plus-16x16.png"/> + <TextBlock + VerticalAlignment="Center" + Text="Add"/> + </StackPanel> + </Button> - <Button - Grid.Row="0" Grid.Column="12" VerticalContentAlignment="Center" - IsVisible="{Binding !SlicerFile.IsAntiAliasingEmulated}" - HorizontalContentAlignment="Center" - VerticalAlignment="Stretch" - Command="{Binding BrightnessExposureGenAdd}"> - <StackPanel Orientation="Horizontal" Spacing="10"> - <Image Source="/Assets/Icons/plus-16x16.png"/> - <TextBlock - VerticalAlignment="Center" - Text="Add"/> - </StackPanel> - </Button> - - <TextBlock Grid.Row="2" Grid.Column="0" - Text="Brightnesses:" - ToolTip.Tip="From 1-255, where 1 is almost black and 255 is full white. No half numbers are allowed." - VerticalAlignment="Center"/> + <TextBlock Grid.Row="2" Grid.Column="0" + Text="Brightnesses:" + ToolTip.Tip="From 1-255, where 1 is almost black and 255 is full white. No half numbers are allowed." + VerticalAlignment="Center"/> - <TextBox Grid.Row="2" Grid.Column="2" - Grid.ColumnSpan="11" - Text="{Binding Operation.MultipleBrightnessValues}"/> + <TextBox Grid.Row="2" Grid.Column="2" + Grid.ColumnSpan="11" + Text="{Binding Operation.MultipleBrightnessValues}"/> - <!-- - <TextBlock Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="3" + <!-- + <TextBlock Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="3" + IsVisible="{Binding SlicerFile.IsAntiAliasingEmulated}" + FontWeight="Bold" + Text="Emulated AntiAliasing with time fractions" + VerticalAlignment="Center"/> + !--> + + <TextBlock Grid.Row="4" Grid.Column="0" IsVisible="{Binding SlicerFile.IsAntiAliasingEmulated}" - FontWeight="Bold" - Text="Emulated AntiAliasing with time fractions" + ToolTip.Tip="AntiAliasing level to set on file. +
This value is used to set the maximum available time fractions on the next field. +
Lower levels have larger time windows, while higher levels allow lower time windows (Recommended)." + Text="AntiAliasing:" VerticalAlignment="Center"/> - !--> - <TextBlock Grid.Row="4" Grid.Column="0" + <NumericUpDown Grid.Row="4" Grid.Column="2" IsVisible="{Binding SlicerFile.IsAntiAliasingEmulated}" - ToolTip.Tip="AntiAliasing level to set on file. -
This value is used to set the maximum available time fractions on the next field. -
Lower levels have larger time windows, while higher levels allow lower time windows (Recommended)." - Text="AntiAliasing:" - VerticalAlignment="Center"/> + Increment="2" + Minimum="2" + Maximum="{Binding Operation.MaximumAntiAliasing}" + Value="{Binding Operation.MultipleBrightnessGenEmulatedAALevel}"/> + + <TextBlock Grid.Row="4" Grid.Column="4" + IsVisible="{Binding SlicerFile.IsAntiAliasingEmulated}" + Text="x" + VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="4" Grid.Column="2" - IsVisible="{Binding SlicerFile.IsAntiAliasingEmulated}" - Increment="2" - Minimum="2" - Maximum="{Binding Operation.MaximumAntiAliasing}" - Value="{Binding Operation.MultipleBrightnessGenEmulatedAALevel}"/> - <TextBlock Grid.Row="4" Grid.Column="4" - IsVisible="{Binding SlicerFile.IsAntiAliasingEmulated}" - Text="x" - VerticalAlignment="Center"/> + <TextBlock Grid.Row="4" Grid.Column="6" + IsVisible="{Binding SlicerFile.IsAntiAliasingEmulated}" + ToolTip.Tip="Amount of fractions from the main exposure: 2 to 16" + Text="Generate by time fractions:" + VerticalAlignment="Center"/> + + <NumericUpDown Grid.Row="4" Grid.Column="8" + IsVisible="{Binding SlicerFile.IsAntiAliasingEmulated}" + Increment="1" + Minimum="2" + Maximum="{Binding Operation.MultipleBrightnessGenEmulatedAALevel}" + Value="{Binding Operation.MultipleBrightnessGenExposureFractions}"/> - <TextBlock Grid.Row="4" Grid.Column="6" + <TextBlock Grid.Row="4" Grid.Column="10" IsVisible="{Binding SlicerFile.IsAntiAliasingEmulated}" - ToolTip.Tip="Amount of fractions from the main exposure: 2 to 16" - Text="Generate by time fractions:" + Text="÷" VerticalAlignment="Center"/> - - <NumericUpDown Grid.Row="4" Grid.Column="8" - IsVisible="{Binding SlicerFile.IsAntiAliasingEmulated}" - Increment="1" - Minimum="2" - Maximum="{Binding Operation.MultipleBrightnessGenEmulatedAALevel}" - Value="{Binding Operation.MultipleBrightnessGenExposureFractions}"/> + <!--<Button + IsVisible="{Binding SlicerFile.IsAntiAliasingEmulated}" + Grid.Row="4" Grid.Column="12" VerticalContentAlignment="Center" + HorizontalContentAlignment="Center" + VerticalAlignment="Stretch" + Command="{Binding Operation.GenerateBrightnessExposureFractions}"> + <StackPanel Orientation="Horizontal" Spacing="10"> + <Image Source="/Assets/Icons/refresh-16x16.png"/> + <TextBlock + VerticalAlignment="Center" + Text="Gen"/> + </StackPanel> + </Button> + !--> + </Grid> - <TextBlock Grid.Row="4" Grid.Column="10" - IsVisible="{Binding SlicerFile.IsAntiAliasingEmulated}" - Text="÷" - VerticalAlignment="Center"/> + + <DataGrid + Name="BrightnessTable" + CanUserReorderColumns="True" + CanUserResizeColumns="True" + CanUserSortColumns="True" + GridLinesVisibility="Horizontal" + IsReadOnly="True" + ClipboardCopyMode="IncludeHeader" + VerticalAlignment="Stretch" + Margin="0,-10,0,0" + IsEnabled="{Binding Operation.MultipleBrightness}" + Items="{Binding Operation.MultipleBrightnessTable}"> + <DataGrid.Columns> + <DataGridTextColumn Header="Brightness" + Binding="{Binding Brightness}" + Width="Auto" /> + <DataGridTextColumn Header="Percent (%)" + Binding="{Binding BrightnessPercent}" + Width="Auto" /> + <DataGridTextColumn Header="Bottom exposure (s)" + Binding="{Binding BottomExposure}" + Width="Auto" /> + <DataGridTextColumn Header="Exposure (s)" + Binding="{Binding Exposure}" + Width="Auto" /> + </DataGrid.Columns> - <!--<Button - IsVisible="{Binding SlicerFile.IsAntiAliasingEmulated}" - Grid.Row="4" Grid.Column="12" VerticalContentAlignment="Center" - HorizontalContentAlignment="Center" - VerticalAlignment="Stretch" - Command="{Binding Operation.GenerateBrightnessExposureFractions}"> - <StackPanel Orientation="Horizontal" Spacing="10"> - <Image Source="/Assets/Icons/refresh-16x16.png"/> - <TextBlock - VerticalAlignment="Center" - Text="Gen"/> - </StackPanel> - </Button> - !--> - </Grid> + </DataGrid> + + + + </StackPanel> + </Expander> - - <DataGrid - Name="BrightnessTable" - CanUserReorderColumns="True" - CanUserResizeColumns="True" - CanUserSortColumns="True" - GridLinesVisibility="Horizontal" - IsReadOnly="True" - ClipboardCopyMode="IncludeHeader" - VerticalAlignment="Stretch" - Margin="0,-10,0,0" - IsEnabled="{Binding Operation.MultipleBrightness}" - Items="{Binding Operation.MultipleBrightnessTable}"> - <DataGrid.Columns> - <DataGridTextColumn Header="Brightness" - Binding="{Binding Brightness}" - Width="Auto" /> - <DataGridTextColumn Header="Percent (%)" - Binding="{Binding BrightnessPercent}" - Width="Auto" /> - <DataGridTextColumn Header="Bottom exposure (s)" - Binding="{Binding BottomExposure}" - Width="Auto" /> - <DataGridTextColumn Header="Exposure (s)" - Binding="{Binding Exposure}" - Width="Auto" /> - </DataGrid.Columns> - - </DataGrid> - - - - </StackPanel> - </Expander> - </Border> - - <Border BorderBrush="Black" - BorderThickness="1" - Padding="5"> - <Border.IsVisible> - <MultiBinding Converter="{x:Static BoolConverters.And}"> - <Binding Path="CanSupportPerLayerSettings"/> - <Binding Path="!Operation.PatternModel"/> - </MultiBinding> - </Border.IsVisible> <Expander IsExpanded="False"> - <Expander.Header> + <Expander.IsVisible> + <MultiBinding Converter="{x:Static BoolConverters.And}"> + <Binding Path="CanSupportPerLayerSettings"/> + <Binding Path="!Operation.PatternModel"/> + </MultiBinding> + </Expander.IsVisible> + <Expander.Header> <TextBlock Text="Multiple layer height" FontWeight="Bold" Cursor="Hand"/> @@ -821,7 +822,7 @@ <StackPanel Spacing="10"> <TextBlock Text="Only few printers support this, make sure your is supported or else it will print a malformed model. -
After this, do not apply any modification which reconstruct the z positions of the layers."/> + 
After this, do not apply any modification which reconstruct the z positions of the layers."/> <CheckBox Content="Enable - For advanced users only!" @@ -873,13 +874,8 @@ </StackPanel> </Expander> - </Border> - <Border BorderBrush="Black" - BorderThickness="1" - Padding="5" - IsVisible="{Binding CanSupportPerLayerSettings}"> - <Expander IsExpanded="True"> + <Expander IsExpanded="True" IsVisible="{Binding CanSupportPerLayerSettings}"> <Expander.Header> <TextBlock Text="Multiple exposures" FontWeight="Bold" @@ -1208,13 +1204,8 @@ </StackPanel> </Expander> - </Border> - <Border BorderBrush="Black" - BorderThickness="1" - Padding="5" - IsVisible="{Binding Operation.CanPatternModel}"> - <Expander IsExpanded="False"> + <Expander IsExpanded="False" IsVisible="{Binding Operation.CanPatternModel}"> <Expander.Header> <TextBlock Text="Pattern loaded model" FontWeight="Bold" @@ -1286,7 +1277,6 @@ </StackPanel> </Expander> - </Border> </StackPanel> diff --git a/UVtools.WPF/Controls/Calibrators/CalibrateExternalTestsControl.axaml b/UVtools.WPF/Controls/Calibrators/CalibrateExternalTestsControl.axaml index 64dd735..ef5ecdd 100644 --- a/UVtools.WPF/Controls/Calibrators/CalibrateExternalTestsControl.axaml +++ b/UVtools.WPF/Controls/Calibrators/CalibrateExternalTestsControl.axaml @@ -2,11 +2,11 @@ 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" - mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" + mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" Width="500" x:Class="UVtools.WPF.Controls.Calibrators.CalibrateExternalTestsControl"> <Grid RowDefinitions="Auto,Auto,Auto" - ColumnDefinitions="400"> + ColumnDefinitions="*"> <Button Grid.Row="0" Padding="5" diff --git a/UVtools.WPF/Controls/Calibrators/CalibrateGrayscaleControl.axaml b/UVtools.WPF/Controls/Calibrators/CalibrateGrayscaleControl.axaml index a8de317..f97755e 100644 --- a/UVtools.WPF/Controls/Calibrators/CalibrateGrayscaleControl.axaml +++ b/UVtools.WPF/Controls/Calibrators/CalibrateGrayscaleControl.axaml @@ -160,16 +160,17 @@ </Grid> - <Border BorderBrush="Black" BorderThickness="1" Padding="5"> - <StackPanel> - <TextBlock FontWeight="Bold"> - <TextBlock.Text> - <MultiBinding StringFormat="Pie settings [{0} divisions with {1:F2}º steps]"> - <Binding Path="Operation.Divisions"/> - <Binding Path="Operation.AngleStep"/> - </MultiBinding> - </TextBlock.Text> - </TextBlock> + <Expander IsExpanded="True"> + <Expander.Header> + <TextBlock FontWeight="Bold"> + <TextBlock.Text> + <MultiBinding StringFormat="Pie settings [{0} divisions with {1:F2}º steps]"> + <Binding Path="Operation.Divisions"/> + <Binding Path="Operation.AngleStep"/> + </MultiBinding> + </TextBlock.Text> + </TextBlock> + </Expander.Header> <Grid Margin="0,10,0,0" @@ -236,6 +237,7 @@ <CheckBox Grid.Row="4" Grid.Column="6" Grid.ColumnSpan="7" VerticalAlignment="Center" + Margin="10,0,0,0" Content="Enable center hole relief" IsChecked="{Binding Operation.EnableCenterHoleRelief}"/> @@ -309,8 +311,7 @@ VerticalAlignment="Center" Text="px"/> </Grid> - </StackPanel> - </Border> + </Expander> </StackPanel> diff --git a/UVtools.WPF/Controls/Calibrators/CalibrateStressTowerControl.axaml b/UVtools.WPF/Controls/Calibrators/CalibrateStressTowerControl.axaml index d93cbf8..ac36835 100644 --- a/UVtools.WPF/Controls/Calibrators/CalibrateStressTowerControl.axaml +++ b/UVtools.WPF/Controls/Calibrators/CalibrateStressTowerControl.axaml @@ -7,281 +7,277 @@ <StackPanel Spacing="10"> - <Border BorderBrush="Black" BorderThickness="1" Padding="5"> - <Expander IsExpanded="True"> - <Expander.Header> - <TextBlock Text="Step 1 - Common properties" - FontWeight="Bold" - Cursor="Hand"/> - </Expander.Header> + <Expander IsExpanded="True"> + <Expander.Header> + <TextBlock Text="Step 1 - Common properties" + FontWeight="Bold" + Cursor="Hand"/> + </Expander.Header> - <Grid - RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto" - ColumnDefinitions="Auto,10,170,5,Auto,20,Auto,10,170,5,Auto"> + <Grid + RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto" + ColumnDefinitions="Auto,10,170,5,Auto,20,Auto,10,170,5,Auto"> - <TextBlock - Grid.Row="0" Grid.Column="0" - VerticalAlignment="Center" - ToolTip.Tip="The printer display width. Required to calculate the pixels per mm." - Text="Display width:"/> - <NumericUpDown Grid.Row="0" Grid.Column="2" - - Increment="0.1" - Minimum="0" - Maximum="10000" - FormatString="F2" - Value="{Binding Operation.DisplayWidth}"/> - <TextBlock Grid.Row="0" Grid.Column="4" - VerticalAlignment="Center" - Text="mm"/> + <TextBlock + Grid.Row="0" Grid.Column="0" + VerticalAlignment="Center" + ToolTip.Tip="The printer display width. Required to calculate the pixels per mm." + Text="Display width:"/> + <NumericUpDown Grid.Row="0" Grid.Column="2" + + Increment="0.1" + Minimum="0" + Maximum="10000" + FormatString="F2" + Value="{Binding Operation.DisplayWidth}"/> + <TextBlock Grid.Row="0" Grid.Column="4" + VerticalAlignment="Center" + Text="mm"/> - <TextBlock Grid.Row="0" Grid.Column="6" - VerticalAlignment="Center" - ToolTip.Tip="The printer display height. Required to calculate the pixels per mm." - Text="Display height:"/> - <NumericUpDown Grid.Row="0" Grid.Column="8" - - Increment="0.1" - Minimum="0" - Maximum="10000" - FormatString="F2" - Value="{Binding Operation.DisplayHeight}"/> - <TextBlock Grid.Row="0" Grid.Column="10" - VerticalAlignment="Center" - Text="mm"/> + <TextBlock Grid.Row="0" Grid.Column="6" + VerticalAlignment="Center" + ToolTip.Tip="The printer display height. Required to calculate the pixels per mm." + Text="Display height:"/> + <NumericUpDown Grid.Row="0" Grid.Column="8" + + Increment="0.1" + Minimum="0" + Maximum="10000" + FormatString="F2" + Value="{Binding Operation.DisplayHeight}"/> + <TextBlock Grid.Row="0" Grid.Column="10" + VerticalAlignment="Center" + Text="mm"/> - <TextBlock Grid.Row="2" Grid.Column="0" - VerticalAlignment="Center" - Text="Layer height:"/> - <NumericUpDown Grid.Row="2" Grid.Column="2" - - Increment="0.01" - Minimum="0.01" - Maximum="0.30" - FormatString="F3" - Value="{Binding Operation.LayerHeight}" - /> - <TextBlock Grid.Row="2" Grid.Column="4" - VerticalAlignment="Center" - Text="mm"/> + <TextBlock Grid.Row="2" Grid.Column="0" + VerticalAlignment="Center" + Text="Layer height:"/> + <NumericUpDown Grid.Row="2" Grid.Column="2" + + Increment="0.01" + Minimum="0.01" + Maximum="0.30" + FormatString="F3" + Value="{Binding Operation.LayerHeight}" + /> + <TextBlock Grid.Row="2" Grid.Column="4" + VerticalAlignment="Center" + Text="mm"/> - <TextBlock Grid.Row="2" Grid.Column="6" - VerticalAlignment="Center" - Text="Bottom layers:"/> - <NumericUpDown Grid.Row="2" Grid.Column="8" - - Increment="1" - Minimum="1" - Maximum="1000" - Value="{Binding Operation.BottomLayers}"/> - <TextBlock Grid.Row="2" Grid.Column="8" - VerticalAlignment="Center" - Text="{Binding Operation.BottomHeight, StringFormat=\{0:F3\}mm}"/> + <TextBlock Grid.Row="2" Grid.Column="6" + VerticalAlignment="Center" + Text="Bottom layers:"/> + <NumericUpDown Grid.Row="2" Grid.Column="8" + + Increment="1" + Minimum="1" + Maximum="1000" + Value="{Binding Operation.BottomLayers}"/> + <TextBlock Grid.Row="2" Grid.Column="8" + VerticalAlignment="Center" + Text="{Binding Operation.BottomHeight, StringFormat=\{0:F3\}mm}"/> - <TextBlock Grid.Row="4" Grid.Column="0" - VerticalAlignment="Center" - Text="Bottom exposure:"/> - <NumericUpDown Grid.Row="4" Grid.Column="2" - - Increment="0.5" - Minimum="0.1" - Maximum="200" - FormatString="F2" - Value="{Binding Operation.BottomExposure}"/> - <TextBlock Grid.Row="4" Grid.Column="4" - VerticalAlignment="Center" - Text="s"/> + <TextBlock Grid.Row="4" Grid.Column="0" + VerticalAlignment="Center" + Text="Bottom exposure:"/> + <NumericUpDown Grid.Row="4" Grid.Column="2" + + Increment="0.5" + Minimum="0.1" + Maximum="200" + FormatString="F2" + Value="{Binding Operation.BottomExposure}"/> + <TextBlock Grid.Row="4" Grid.Column="4" + VerticalAlignment="Center" + Text="s"/> - <TextBlock Grid.Row="4" Grid.Column="6" - VerticalAlignment="Center" - Text="Normal exposure:"/> - <NumericUpDown Grid.Row="4" Grid.Column="8" - - Increment="0.5" - Minimum="0.1" - Maximum="200" - FormatString="F2" - Value="{Binding Operation.NormalExposure}"/> - <TextBlock Grid.Row="4" Grid.Column="10" - VerticalAlignment="Center" - Text="s"/> + <TextBlock Grid.Row="4" Grid.Column="6" + VerticalAlignment="Center" + Text="Normal exposure:"/> + <NumericUpDown Grid.Row="4" Grid.Column="8" + + Increment="0.5" + Minimum="0.1" + Maximum="200" + FormatString="F2" + Value="{Binding Operation.NormalExposure}"/> + <TextBlock Grid.Row="4" Grid.Column="10" + VerticalAlignment="Center" + Text="s"/> - <TextBlock Grid.Row="6" Grid.Column="0" - VerticalAlignment="Center" - Text="Base height:"/> - <NumericUpDown Grid.Row="6" Grid.Column="2" - - Increment="1" - Minimum="0" - Maximum="100" - FormatString="F2" - Value="{Binding Operation.BaseHeight}"/> - <TextBlock Grid.Row="6" Grid.Column="4" - VerticalAlignment="Center" - Text="mm"/> + <TextBlock Grid.Row="6" Grid.Column="0" + VerticalAlignment="Center" + Text="Base height:"/> + <NumericUpDown Grid.Row="6" Grid.Column="2" + + Increment="1" + Minimum="0" + Maximum="100" + FormatString="F2" + Value="{Binding Operation.BaseHeight}"/> + <TextBlock Grid.Row="6" Grid.Column="4" + VerticalAlignment="Center" + Text="mm"/> - <TextBlock Grid.Row="6" Grid.Column="6" - VerticalAlignment="Center" - Text="Base diameter:"/> - <NumericUpDown Grid.Row="6" Grid.Column="8" - - Increment="1" - Minimum="1" - Maximum="10000" - FormatString="F2" - Value="{Binding Operation.BaseDiameter}"/> - <TextBlock Grid.Row="6" Grid.Column="10" - VerticalAlignment="Center" - Text="mm"/> + <TextBlock Grid.Row="6" Grid.Column="6" + VerticalAlignment="Center" + Text="Base diameter:"/> + <NumericUpDown Grid.Row="6" Grid.Column="8" + + Increment="1" + Minimum="1" + Maximum="10000" + FormatString="F2" + Value="{Binding Operation.BaseDiameter}"/> + <TextBlock Grid.Row="6" Grid.Column="10" + VerticalAlignment="Center" + Text="mm"/> - <TextBlock Grid.Row="8" Grid.Column="0" - VerticalAlignment="Center" - Text="Ceil height:"/> - <NumericUpDown Grid.Row="8" Grid.Column="2" - - Increment="1" - Minimum="0" - Maximum="100" - FormatString="F2" - Value="{Binding Operation.CeilHeight}"/> - <TextBlock Grid.Row="8" Grid.Column="4" - VerticalAlignment="Center" - Text="mm"/> - - - <TextBlock Grid.Row="8" Grid.Column="6" - VerticalAlignment="Center" - Text="Body height:"/> - <NumericUpDown Grid.Row="8" Grid.Column="8" - - Increment="1" - Minimum="0" - Maximum="10000" - FormatString="F2" - Value="{Binding Operation.BodyHeight}"/> - <TextBlock Grid.Row="8" Grid.Column="10" - VerticalAlignment="Center" - Text="mm"/> + <TextBlock Grid.Row="8" Grid.Column="0" + VerticalAlignment="Center" + Text="Ceil height:"/> + <NumericUpDown Grid.Row="8" Grid.Column="2" + + Increment="1" + Minimum="0" + Maximum="100" + FormatString="F2" + Value="{Binding Operation.CeilHeight}"/> + <TextBlock Grid.Row="8" Grid.Column="4" + VerticalAlignment="Center" + Text="mm"/> + + + <TextBlock Grid.Row="8" Grid.Column="6" + VerticalAlignment="Center" + Text="Body height:"/> + <NumericUpDown Grid.Row="8" Grid.Column="8" + + Increment="1" + Minimum="0" + Maximum="10000" + FormatString="F2" + Value="{Binding Operation.BodyHeight}"/> + <TextBlock Grid.Row="8" Grid.Column="10" + VerticalAlignment="Center" + Text="mm"/> - <StackPanel Grid.Row="10" Grid.Column="6" - VerticalAlignment="Center" - Spacing="0"> - <TextBlock - FontWeight="Bold" - Text="Total layers:"/> - <TextBlock - FontWeight="Bold" - Text="Total height:"/> - </StackPanel> + <StackPanel Grid.Row="10" Grid.Column="6" + VerticalAlignment="Center" + Spacing="0"> + <TextBlock + FontWeight="Bold" + Text="Total layers:"/> + <TextBlock + FontWeight="Bold" + Text="Total height:"/> + </StackPanel> - <StackPanel Grid.Row="10" Grid.Column="8" - VerticalAlignment="Center" - Spacing="0"> - <TextBlock - FontWeight="Bold" - Text="{Binding Operation.LayerCount}"/> + <StackPanel Grid.Row="10" Grid.Column="8" + VerticalAlignment="Center" + Spacing="0"> + <TextBlock + FontWeight="Bold" + Text="{Binding Operation.LayerCount}"/> - <TextBlock - FontWeight="Bold" - Text="{Binding Operation.TotalHeight, StringFormat=\{0:F3\}mm}"/> + <TextBlock + FontWeight="Bold" + Text="{Binding Operation.TotalHeight, StringFormat=\{0:F3\}mm}"/> - </StackPanel> + </StackPanel> - + - <TextBlock Grid.Row="10" Grid.Column="0" - VerticalAlignment="Center" - ToolTip.Tip="Chamfer the bottom layers" - Text="Chamfer layers:"/> - <NumericUpDown Grid.Row="10" Grid.Column="2" - - Increment="1" - Minimum="0" - Maximum="255" - IsEnabled="{Binding Operation.ChamferModel}" - Value="{Binding Operation.ChamferLayers}"/> + <TextBlock Grid.Row="10" Grid.Column="0" + VerticalAlignment="Center" + ToolTip.Tip="Chamfer the bottom layers" + Text="Chamfer layers:"/> + <NumericUpDown Grid.Row="10" Grid.Column="2" + + Increment="1" + Minimum="0" + Maximum="255" + IsEnabled="{Binding Operation.ChamferModel}" + Value="{Binding Operation.ChamferLayers}"/> - <CheckBox Grid.Row="12" Grid.Column="2" Grid.ColumnSpan="5" - VerticalAlignment="Center" - IsChecked="{Binding Operation.EnableAntiAliasing}" - Content="Enable Anti-Aliasing"/> + <CheckBox Grid.Row="12" Grid.Column="2" Grid.ColumnSpan="5" + VerticalAlignment="Center" + IsChecked="{Binding Operation.EnableAntiAliasing}" + Content="Enable Anti-Aliasing"/> - <CheckBox Grid.Row="12" Grid.Column="8" - Grid.ColumnSpan="3" - ToolTip.Tip="Most of the printers requires a mirror output to print with the correct orientation" - IsChecked="{Binding Operation.MirrorOutput}" - Content="Mirror output" /> + <CheckBox Grid.Row="12" Grid.Column="8" + Grid.ColumnSpan="3" + ToolTip.Tip="Most of the printers requires a mirror output to print with the correct orientation" + IsChecked="{Binding Operation.MirrorOutput}" + Content="Mirror output" /> - </Grid> - </Expander> - </Border> + </Grid> + </Expander> - <Border BorderBrush="Black" BorderThickness="1" Padding="5"> - <Expander IsExpanded="True"> - <Expander.Header> - <TextBlock Text="Outer Spirals" - FontWeight="Bold" - Cursor="Hand"/> + <Expander IsExpanded="True"> + <Expander.Header> + <TextBlock Text="Outer Spirals" + FontWeight="Bold" + Cursor="Hand"/> - </Expander.Header> + </Expander.Header> - <Grid RowDefinitions="Auto,5,Auto" - ColumnDefinitions="Auto,10,170,5,Auto,20,Auto,10,170,5,Auto"> + <Grid RowDefinitions="Auto,5,Auto" + ColumnDefinitions="Auto,10,170,5,Auto,20,Auto,10,170,5,Auto"> - <TextBlock Grid.Row="0" Grid.Column="0" - Text="Number of spirals:" - VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="0" Grid.Column="2" - - Increment="1" - Minimum="1" - Maximum="10" - Value="{Binding Operation.Spirals}"/> + <TextBlock Grid.Row="0" Grid.Column="0" + Text="Number of spirals:" + VerticalAlignment="Center"/> + <NumericUpDown Grid.Row="0" Grid.Column="2" + + Increment="1" + Minimum="1" + Maximum="10" + Value="{Binding Operation.Spirals}"/> - <TextBlock Grid.Row="0" Grid.Column="6" - VerticalAlignment="Center" - ToolTip.Tip="Clockwise: All spirals turn clockwise. + <TextBlock Grid.Row="0" Grid.Column="6" + VerticalAlignment="Center" + ToolTip.Tip="Clockwise: All spirals turn clockwise. 
Alternate: Each spiral turn into opposite direction. 
Both: Each spiral will turn in both directions, clockwise and counter-clockwise." - Text="Spiral direction:"/> - <ComboBox Grid.Row="0" Grid.Column="8" - Items="{Binding Operation.SpiralDirectionsItems}" - SelectedItem="{Binding Operation.SpiralDirection}" - HorizontalAlignment="Stretch"/> + Text="Spiral direction:"/> + <ComboBox Grid.Row="0" Grid.Column="8" + Items="{Binding Operation.SpiralDirectionsItems}" + SelectedItem="{Binding Operation.SpiralDirection}" + HorizontalAlignment="Stretch"/> - <TextBlock Grid.Row="2" Grid.Column="0" - Text="Spiral diameter:" - VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="2" Grid.Column="2" - - Increment="1" - Minimum="0.1" - Maximum="10000" - FormatString="F2" - Value="{Binding Operation.SpiralDiameter}"/> - <TextBlock Grid.Row="2" Grid.Column="4" - Text="mm" - VerticalAlignment="Center"/> + <TextBlock Grid.Row="2" Grid.Column="0" + Text="Spiral diameter:" + VerticalAlignment="Center"/> + <NumericUpDown Grid.Row="2" Grid.Column="2" + + Increment="1" + Minimum="0.1" + Maximum="10000" + FormatString="F2" + Value="{Binding Operation.SpiralDiameter}"/> + <TextBlock Grid.Row="2" Grid.Column="4" + Text="mm" + VerticalAlignment="Center"/> - <TextBlock Grid.Row="2" Grid.Column="6" - Text="Step angle:" - ToolTip.Tip="Spirals will turn this angle per layer." - VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="2" Grid.Column="8" - - Increment="1" - Minimum="0.01" - Maximum="359.99" - FormatString="F2" - Value="{Binding Operation.SpiralAngleStepPerLayer}"/> - <TextBlock Grid.Row="2" Grid.Column="10" - Text="º/layer" - VerticalAlignment="Center"/> + <TextBlock Grid.Row="2" Grid.Column="6" + Text="Step angle:" + ToolTip.Tip="Spirals will turn this angle per layer." + VerticalAlignment="Center"/> + <NumericUpDown Grid.Row="2" Grid.Column="8" + + Increment="1" + Minimum="0.01" + Maximum="359.99" + FormatString="F2" + Value="{Binding Operation.SpiralAngleStepPerLayer}"/> + <TextBlock Grid.Row="2" Grid.Column="10" + Text="º/layer" + VerticalAlignment="Center"/> - </Grid> - </Expander> - </Border> + </Grid> + </Expander> </StackPanel> </UserControl> diff --git a/UVtools.WPF/Controls/Calibrators/CalibrateToleranceControl.axaml b/UVtools.WPF/Controls/Calibrators/CalibrateToleranceControl.axaml index 7e0c6ef..22516d2 100644 --- a/UVtools.WPF/Controls/Calibrators/CalibrateToleranceControl.axaml +++ b/UVtools.WPF/Controls/Calibrators/CalibrateToleranceControl.axaml @@ -7,7 +7,6 @@ <Grid ColumnDefinitions="Auto,10,380"> <StackPanel Spacing="10"> - <Border BorderBrush="Black" BorderThickness="1" Padding="5"> <Expander IsExpanded="True"> <Expander.Header> <TextBlock Text="Step 1 - Common properties" @@ -241,174 +240,164 @@ </Grid> </Expander> - </Border> - <Border BorderBrush="Black" BorderThickness="1" Padding="5"> - <Expander IsExpanded="True"> - <Expander.Header> - <TextBlock Text="Step 2 - Female part" - FontWeight="Bold" - Cursor="Hand"/> + <Expander IsExpanded="True"> + <Expander.Header> + <TextBlock Text="Step 2 - Female part" + FontWeight="Bold" + Cursor="Hand"/> + + </Expander.Header> + + <Grid RowDefinitions="Auto,5,Auto" + ColumnDefinitions="Auto,10,170,5,Auto,20,Auto,10,170,5,Auto"> + + + <TextBlock Grid.Row="0" Grid.Column="0" + Text="Diameter:" + VerticalAlignment="Center"/> + <NumericUpDown Grid.Row="0" Grid.Column="2" + + Increment="1.0" + Minimum="2" + Maximum="1000" + FormatString="F2" + Value="{Binding Operation.FemaleDiameter}"/> + <TextBlock Grid.Row="0" Grid.Column="4" + VerticalAlignment="Center" + Text="mm"/> + + <TextBlock Grid.Row="0" Grid.Column="6" + Text="Hole diameter:" + VerticalAlignment="Center"/> + <NumericUpDown Grid.Row="0" Grid.Column="8" + + Increment="1.0" + Minimum="2" + Maximum="1000" + FormatString="F2" + Value="{Binding Operation.FemaleHoleDiameter}"/> + <TextBlock Grid.Row="0" Grid.Column="10" + VerticalAlignment="Center" + Text="mm"/> - </Expander.Header> + <TextBlock Grid.Row="2" Grid.Column="0" + Text="Expected:" + FontWeight="Bold" + VerticalAlignment="Center"/> - <Grid RowDefinitions="Auto,5,Auto" - ColumnDefinitions="Auto,10,170,5,Auto,20,Auto,10,170,5,Auto"> + <TextBlock Grid.Row="2" Grid.Column="2" + Text="{Binding Operation.FemaleDiameterRealXSize, StringFormat=\{0:F2\}mm}" + FontWeight="Bold" + HorizontalAlignment="Center" + VerticalAlignment="Center"/> + + <TextBlock Grid.Row="2" Grid.Column="8" + Text="{Binding Operation.FemaleHoleDiameterRealXSize, StringFormat=\{0:F2\}mm}" + FontWeight="Bold" + HorizontalAlignment="Center" + VerticalAlignment="Center"/> + </Grid> + + </Expander> + + <Expander IsExpanded="True"> + <Expander.Header> + <TextBlock Text="Step 3 - Male parts" + FontWeight="Bold" + Cursor="Hand"/> + + </Expander.Header> + + <Grid RowDefinitions="Auto,10,Auto" + ColumnDefinitions="Auto,10,Auto,5,Auto,20,Auto,10,150,5,Auto,20,Auto,10,150,5,Auto"> <TextBlock Grid.Row="0" Grid.Column="0" - Text="Diameter:" + Text="Thinner models:" VerticalAlignment="Center"/> <NumericUpDown Grid.Row="0" Grid.Column="2" - - Increment="1.0" - Minimum="2" - Maximum="1000" - FormatString="F2" - Value="{Binding Operation.FemaleDiameter}"/> - <TextBlock Grid.Row="0" Grid.Column="4" - VerticalAlignment="Center" - Text="mm"/> - + + Increment="1" + Minimum="0" + Maximum="1000" + Value="{Binding Operation.MaleThinnerModels}"/> <TextBlock Grid.Row="0" Grid.Column="6" - Text="Hole diameter:" + Text="-Offset:" VerticalAlignment="Center"/> <NumericUpDown Grid.Row="0" Grid.Column="8" - Increment="1.0" - Minimum="2" - Maximum="1000" + Increment="0.01" + Minimum="-1000" + Maximum="0" FormatString="F2" - Value="{Binding Operation.FemaleHoleDiameter}"/> + Value="{Binding Operation.MaleThinnerOffset}"/> <TextBlock Grid.Row="0" Grid.Column="10" VerticalAlignment="Center" Text="mm"/> - <TextBlock Grid.Row="2" Grid.Column="0" - Text="Expected:" - FontWeight="Bold" + <TextBlock Grid.Row="0" Grid.Column="12" + Text="-Step:" VerticalAlignment="Center"/> + <NumericUpDown Grid.Row="0" Grid.Column="14" + + Increment="0.01" + Minimum="-1000" + Maximum="-0.01" + FormatString="F2" + Value="{Binding Operation.MaleThinnerStep}"/> + <TextBlock Grid.Row="0" Grid.Column="16" + VerticalAlignment="Center" + Text="mm"/> - <TextBlock Grid.Row="2" Grid.Column="2" - Text="{Binding Operation.FemaleDiameterRealXSize, StringFormat=\{0:F2\}mm}" - FontWeight="Bold" - HorizontalAlignment="Center" - VerticalAlignment="Center"/> - <TextBlock Grid.Row="2" Grid.Column="8" - Text="{Binding Operation.FemaleHoleDiameterRealXSize, StringFormat=\{0:F2\}mm}" - FontWeight="Bold" - HorizontalAlignment="Center" - VerticalAlignment="Center"/> - </Grid> - - </Expander> - </Border> - - <Border BorderBrush="Black" BorderThickness="1" Padding="5"> - <Expander IsExpanded="True"> - <Expander.Header> - <TextBlock Text="Step 3 - Male parts" - FontWeight="Bold" - Cursor="Hand"/> - - </Expander.Header> - - <Grid RowDefinitions="Auto,10,Auto" - ColumnDefinitions="Auto,10,Auto,5,Auto,20,Auto,10,150,5,Auto,20,Auto,10,150,5,Auto"> - - - <TextBlock Grid.Row="0" Grid.Column="0" - Text="Thinner models:" - VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="0" Grid.Column="2" - - Increment="1" - Minimum="0" - Maximum="1000" - Value="{Binding Operation.MaleThinnerModels}"/> - <TextBlock Grid.Row="0" Grid.Column="6" - Text="-Offset:" - VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="0" Grid.Column="8" - - Increment="0.01" - Minimum="-1000" - Maximum="0" - FormatString="F2" - Value="{Binding Operation.MaleThinnerOffset}"/> - <TextBlock Grid.Row="0" Grid.Column="10" - VerticalAlignment="Center" - Text="mm"/> - - <TextBlock Grid.Row="0" Grid.Column="12" - Text="-Step:" - VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="0" Grid.Column="14" - - Increment="0.01" - Minimum="-1000" - Maximum="-0.01" - FormatString="F2" - Value="{Binding Operation.MaleThinnerStep}"/> - <TextBlock Grid.Row="0" Grid.Column="16" - VerticalAlignment="Center" - Text="mm"/> - - - <TextBlock Grid.Row="2" Grid.Column="0" - Text="Thicker models:" - IsEnabled="{Binding !Operation.FuseParts}" - VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="2" Grid.Column="2" - - Increment="1" - Minimum="0" - Maximum="1000" - IsEnabled="{Binding !Operation.FuseParts}" - Value="{Binding Operation.MaleThickerModels}"/> - <TextBlock Grid.Row="2" Grid.Column="6" - Text="+Offset:" + <TextBlock Grid.Row="2" Grid.Column="0" + Text="Thicker models:" + IsEnabled="{Binding !Operation.FuseParts}" + VerticalAlignment="Center"/> + <NumericUpDown Grid.Row="2" Grid.Column="2" + + Increment="1" + Minimum="0" + Maximum="1000" IsEnabled="{Binding !Operation.FuseParts}" - VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="2" Grid.Column="8" - - Increment="0.01" - Minimum="0" - Maximum="1000" - FormatString="F2" - IsEnabled="{Binding !Operation.FuseParts}" - Value="{Binding Operation.MaleThickerOffset}"/> - <TextBlock Grid.Row="2" Grid.Column="10" - VerticalAlignment="Center" + Value="{Binding Operation.MaleThickerModels}"/> + <TextBlock Grid.Row="2" Grid.Column="6" + Text="+Offset:" + IsEnabled="{Binding !Operation.FuseParts}" + VerticalAlignment="Center"/> + <NumericUpDown Grid.Row="2" Grid.Column="8" + + Increment="0.01" + Minimum="0" + Maximum="1000" + FormatString="F2" IsEnabled="{Binding !Operation.FuseParts}" - Text="mm"/> - - <TextBlock Grid.Row="2" Grid.Column="12" - Text="+Step:" - IsEnabled="{Binding !Operation.FuseParts}" - VerticalAlignment="Center"/> - <NumericUpDown Grid.Row="2" Grid.Column="14" - - Increment="0.01" - Minimum="0.01" - Maximum="1000" - IsEnabled="{Binding !Operation.FuseParts}" - FormatString="F2" - Value="{Binding Operation.MaleThickerStep}"/> - <TextBlock Grid.Row="2" Grid.Column="16" - VerticalAlignment="Center" + Value="{Binding Operation.MaleThickerOffset}"/> + <TextBlock Grid.Row="2" Grid.Column="10" + VerticalAlignment="Center" + IsEnabled="{Binding !Operation.FuseParts}" + Text="mm"/> + + <TextBlock Grid.Row="2" Grid.Column="12" + Text="+Step:" + IsEnabled="{Binding !Operation.FuseParts}" + VerticalAlignment="Center"/> + <NumericUpDown Grid.Row="2" Grid.Column="14" + + Increment="0.01" + Minimum="0.01" + Maximum="1000" IsEnabled="{Binding !Operation.FuseParts}" - Text="mm"/> - - - - - </Grid> - - </Expander> - </Border> + FormatString="F2" + Value="{Binding Operation.MaleThickerStep}"/> + <TextBlock Grid.Row="2" Grid.Column="16" + VerticalAlignment="Center" + IsEnabled="{Binding !Operation.FuseParts}" + Text="mm"/> + </Grid> + </Expander> </StackPanel> diff --git a/UVtools.WPF/Controls/Calibrators/CalibrateXYZAccuracyControl.axaml b/UVtools.WPF/Controls/Calibrators/CalibrateXYZAccuracyControl.axaml index d95b166..c2ddb1a 100644 --- a/UVtools.WPF/Controls/Calibrators/CalibrateXYZAccuracyControl.axaml +++ b/UVtools.WPF/Controls/Calibrators/CalibrateXYZAccuracyControl.axaml @@ -7,13 +7,12 @@ <Grid ColumnDefinitions="Auto,10,380"> <StackPanel Spacing="10"> - <Border BorderBrush="Black" BorderThickness="1" Padding="5"> - <Expander IsExpanded="True"> - <Expander.Header> - <TextBlock Text="Step 1: Generate and print test model" - FontWeight="Bold" - Cursor="Hand"/> - </Expander.Header> + <Expander IsExpanded="True"> + <Expander.Header> + <TextBlock Text="Step 1: Generate and print test model" + FontWeight="Bold" + Cursor="Hand"/> + </Expander.Header> <Grid RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto" @@ -376,15 +375,13 @@ </Grid> </Expander> - </Border> - <Border BorderBrush="Black" BorderThickness="1" Padding="5"> - <Expander IsExpanded="True"> - <Expander.Header> - <TextBlock Text="Step 2: Validate the printed model with your measures" - FontWeight="Bold" - Cursor="Hand"/> - </Expander.Header> + <Expander IsExpanded="True"> + <Expander.Header> + <TextBlock Text="Step 2: Validate the printed model with your measures" + FontWeight="Bold" + Cursor="Hand"/> + </Expander.Header> <StackPanel Spacing="10"> @@ -482,17 +479,15 @@ </StackPanel> </Expander> - </Border> - <Border BorderBrush="Black" BorderThickness="1" Padding="5"> - <Expander IsExpanded="True"> - <Expander.Header> - <TextBlock Text="Step 3: Save a resize profile with the results" - FontWeight="Bold" - Cursor="Hand"/> - </Expander.Header> + <Expander IsExpanded="True"> + <Expander.Header> + <TextBlock Text="Step 3: Save a resize profile with the results" + FontWeight="Bold" + Cursor="Hand"/> + </Expander.Header> - <Grid ColumnDefinitions="Auto,10,*,5,Auto,5,Auto"> + <Grid ColumnDefinitions="Auto,10,440,5,Auto,5,Auto"> <TextBlock VerticalAlignment="Center" Text="Profile name:"/> <TextBox Grid.Column="2" VerticalAlignment="Center" @@ -511,7 +506,6 @@ </Button> </Grid> </Expander> - </Border> </StackPanel> diff --git a/UVtools.WPF/Controls/Helpers.cs b/UVtools.WPF/Controls/Helpers.cs index ed5d288..bcf5973 100644 --- a/UVtools.WPF/Controls/Helpers.cs +++ b/UVtools.WPF/Controls/Helpers.cs @@ -24,8 +24,11 @@ namespace UVtools.WPF.Controls "bmp", "jpeg", "jpg", + "jp2", "tif", "tiff", + "sr", + "ras", } }, }; diff --git a/UVtools.WPF/Controls/Tools/ToolMorphControl.axaml b/UVtools.WPF/Controls/Tools/ToolMorphControl.axaml index 868a47c..683b3f9 100644 --- a/UVtools.WPF/Controls/Tools/ToolMorphControl.axaml +++ b/UVtools.WPF/Controls/Tools/ToolMorphControl.axaml @@ -62,20 +62,18 @@ </Grid> - <Border - Margin="0,10,0,0" > - <Expander> - <Expander.Header> - <TextBlock Text="Kernel - Advanced options (Click to expand)" - FontWeight="Bold" - Cursor="Hand"/> - </Expander.Header> - <uc:KernelControl - Name="KernelCtrl" - Margin="0,10,0,0" - /> - </Expander> - </Border> + + <Expander Margin="0,10,0,0"> + <Expander.Header> + <TextBlock Text="Kernel - Advanced options (Click to expand)" + FontWeight="Bold" + Cursor="Hand"/> + </Expander.Header> + <uc:KernelControl + Name="KernelCtrl" + Margin="0,10,0,0" + /> + </Expander> </StackPanel> diff --git a/UVtools.WPF/Controls/Tools/ToolPixelArithmeticControl.axaml b/UVtools.WPF/Controls/Tools/ToolPixelArithmeticControl.axaml index c4ca28e..40788d1 100644 --- a/UVtools.WPF/Controls/Tools/ToolPixelArithmeticControl.axaml +++ b/UVtools.WPF/Controls/Tools/ToolPixelArithmeticControl.axaml @@ -6,7 +6,7 @@ x:Class="UVtools.WPF.Controls.Tools.ToolPixelArithmeticControl"> <StackPanel Spacing="10"> - <Grid RowDefinitions="Auto,10,Auto,10,Auto,10,Auto" + <Grid RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto" ColumnDefinitions="Auto,10,Auto,20,Auto,10,Auto,20,Auto,10,Auto"> <TextBlock Grid.Row="0" Grid.Column="0" @@ -21,11 +21,62 @@ <TextBlock Grid.Row="2" Grid.Column="0" VerticalAlignment="Center" + IsEnabled="{Binding Operation.IsApplyMethodEnabled}" + Text="Apply to:"/> + + <ComboBox Grid.Row="2" Grid.Column="2" + Grid.ColumnSpan="9" + Width="610" + IsEnabled="{Binding Operation.IsApplyMethodEnabled}" + Items="{Binding Operation.ApplyMethod, Converter={StaticResource EnumToCollectionConverter}, Mode=OneTime}" + SelectedItem="{Binding Operation.ApplyMethod, Converter={StaticResource FromValueDescriptionToEnumConverter}}"/> + + <TextBlock Grid.Row="4" Grid.Column="0" + VerticalAlignment="Center" + IsVisible="{Binding Operation.IsWallSettingVisible}" + Text="Wall thickness:"/> + + + <StackPanel Grid.Row="4" Grid.Column="2" Grid.ColumnSpan="9" + IsVisible="{Binding Operation.IsWallSettingVisible}" + Spacing="10" Orientation="Horizontal"> + <NumericUpDown + Minimum="0" + Maximum="1000" + Width="80" + Value="{Binding Operation.WallThicknessStart}"/> + + <TextBlock + VerticalAlignment="Center" + Text="To:" + IsEnabled="{Binding Operation.WallChamfer}"/> + + <NumericUpDown + Minimum="0" + Maximum="1000" + Width="80" + Value="{Binding Operation.WallThicknessEnd}" + IsEnabled="{Binding Operation.WallChamfer}"/> + + <TextBlock + VerticalAlignment="Center" + Text="px" + IsEnabled="{Binding Operation.WallChamfer}"/> + + <CheckBox + Margin="10,0,0,0" + Content="Chamfer walls" + ToolTip.Tip="Allow the number of walls pixels to be gradually varied as the operation progresses from the starting layer to the ending layer." + IsChecked="{Binding Operation.WallChamfer}"/> + </StackPanel> + + <TextBlock Grid.Row="6" Grid.Column="0" + VerticalAlignment="Center" IsVisible="{Binding Operation.ValueEnabled}" IsEnabled="{Binding Operation.ValueEnabled}" Text="Brightness:"/> - <StackPanel Grid.Row="2" Grid.Column="2" + <StackPanel Grid.Row="6" Grid.Column="2" VerticalAlignment="Center" Orientation="Horizontal" Spacing="5" IsVisible="{Binding Operation.ValueEnabled}" @@ -34,40 +85,43 @@ <NumericUpDown Minimum="0" Maximum="255" + IsEnabled="{Binding !Operation.UsePattern}" Value="{Binding Operation.Value}"/> <TextBlock VerticalAlignment="Center" + IsEnabled="{Binding !Operation.UsePattern}" Text="{Binding Operation.ValuePercent, StringFormat={}{0}%}"/> - </StackPanel> + <CheckBox + Margin="20,0,0,0" + IsVisible="{Binding Operation.IsUsePatternVisible}" + IsChecked="{Binding Operation.UsePattern}" + Content="Use a pattern instead of fixed brightness"/> - <CheckBox Grid.Row="2" Grid.Column="4" - Content="Affect empty/black pixels" - IsVisible="{Binding Operation.AffectBackPixelsEnabled}" - IsChecked="{Binding Operation.AffectBackPixels}"/> + </StackPanel> - <TextBlock Grid.Row="2" Grid.Column="4" + <TextBlock Grid.Row="6" Grid.Column="4" VerticalAlignment="Center" HorizontalAlignment="Right" IsVisible="{Binding Operation.ThresholdEnabled}" IsEnabled="{Binding Operation.ThresholdEnabled}" Text="Max.:"/> - <NumericUpDown Grid.Row="2" Grid.Column="6" + <NumericUpDown Grid.Row="6" Grid.Column="6" Minimum="0" Maximum="255" IsVisible="{Binding Operation.ThresholdEnabled}" IsEnabled="{Binding Operation.ThresholdEnabled}" Value="{Binding Operation.ThresholdMaxValue}"/> - <TextBlock Grid.Row="2" Grid.Column="8" + <TextBlock Grid.Row="6" Grid.Column="8" VerticalAlignment="Center" HorizontalAlignment="Right" IsVisible="{Binding Operation.ThresholdEnabled}" IsEnabled="{Binding Operation.ThresholdEnabled}" Text="Threshold:"/> - <ComboBox Grid.Row="2" Grid.Column="10" + <ComboBox Grid.Row="6" Grid.Column="10" Width="130" IsVisible="{Binding Operation.ThresholdEnabled}" IsEnabled="{Binding Operation.ThresholdEnabled}" @@ -75,14 +129,22 @@ SelectedItem="{Binding Operation.ThresholdType, Converter={StaticResource FromValueDescriptionToEnumConverter}}"/> - <TextBlock Grid.Row="4" Grid.Column="0" + <TextBlock Grid.Row="8" Grid.Column="0" VerticalAlignment="Center" Text="Presets:"/> - <StackPanel Grid.Row="4" Grid.Column="2" + <StackPanel Grid.Row="8" Grid.Column="2" Grid.ColumnSpan="9" VerticalAlignment="Center" Orientation="Horizontal" Spacing="5"> + <Button + Command="{Binding Operation.PresetPixelDimming}" + Content="Pixel dimming"/> + + <Button + Command="{Binding Operation.PresetPixelLightening}" + Content="Pixel lightening"/> + <Button Command="{Binding Operation.PresetStripAntiAliasing}" Content="Strip anti-aliasing"/> @@ -94,6 +156,271 @@ </StackPanel> </Grid> + + <Border> + <Border.IsVisible> + <MultiBinding Converter="{x:Static BoolConverters.And}"> + <Binding Path="Operation.IsUsePatternVisible" /> + <Binding Path="Operation.UsePattern"/> + </MultiBinding> + </Border.IsVisible> + + <StackPanel Spacing="10"> + + <TextBlock Text="Pattern:" FontWeight="Bold"/> + + <StackPanel Orientation="Horizontal" Spacing="10"> + <TextBlock + VerticalAlignment="Center" + Text="Alternate the pattern every:"/> + <NumericUpDown + Minimum="1" + Maximum="65535" + Width="150" + Value="{Binding Operation.PatternAlternatePerLayersNumber}"/> + <TextBlock + VerticalAlignment="Center" + Text="layers"/> + + <CheckBox + Margin="20,0,0,0" + IsChecked="{Binding Operation.PatternInvert}" + ToolTip.Tip="If enabled, it will invert the pattern before apply, that is: 255 - {value}" + Content="Invert the pattern when processing the pixels"/> + </StackPanel> + + + <Grid + RowDefinitions="Auto,200,10,Auto" + ColumnDefinitions="450,10,450"> + + <Button Grid.Row="0" Grid.Column="0" + Content="Load pattern from image" + HorizontalContentAlignment="Center" + VerticalAlignment="Stretch" + HorizontalAlignment="Stretch" + Command="{Binding LoadPatternFromImage}" + CommandParameter="False"/> + + <TextBox + Grid.Row="1" Grid.Column="0" + AcceptsReturn="True" + Watermark="Pattern" + UseFloatingWatermark="True" + TextWrapping="NoWrap" + Text="{Binding Operation.PatternText}"/> + + <Button Grid.Row="0" Grid.Column="2" + Content="Load alternate pattern from image" + HorizontalContentAlignment="Center" + VerticalAlignment="Stretch" + HorizontalAlignment="Stretch" + Command="{Binding LoadPatternFromImage}" + CommandParameter="True"/> + <TextBox + Grid.Row="1" Grid.Column="2" + AcceptsReturn="True" + Watermark="Alternate pattern (Optional)" + UseFloatingWatermark="True" + TextWrapping="NoWrap" + Text="{Binding Operation.PatternTextAlternate}"/> + + <Border + Grid.Row="3" Grid.Column="0" + BorderBrush="LightGray" + BorderThickness="1" + Padding="5"> + + <StackPanel Spacing="10"> + <TextBlock FontWeight="Bold" Text="Pattern generator"/> + + <StackPanel Orientation="Horizontal" Spacing="10"> + <TextBlock + VerticalAlignment="Center" + Text="Brightness:"/> + + <NumericUpDown + Minimum="0" + Maximum="255" + Value="{Binding Operation.PatternGenMinBrightness}"/> + + <TextBlock + VerticalAlignment="Center" + Text="-"/> + + <NumericUpDown + Minimum="0" + Maximum="255" + Value="{Binding Operation.PatternGenBrightness}"/> + + <TextBlock + VerticalAlignment="Center" + Text="{Binding Operation.PatternGenBrightnessPercent, StringFormat=(\{0\}%)}"/> + </StackPanel> + + <StackPanel Orientation="Horizontal" Spacing="10"> + <Button + Padding="10" + Content="Chessboard" + Width="100" + Command="{Binding Operation.GeneratePattern}" + CommandParameter="Chessboard" + /> + <Button + Padding="10" + Content="Sparse" + Width="100" + Command="{Binding Operation.GeneratePattern}" + CommandParameter="Sparse" + /> + <Button + Padding="10" + Content="Crosses" + Width="100" + Command="{Binding Operation.GeneratePattern}" + CommandParameter="Crosses" + /> + <Button + Padding="10" + Content="Strips" + Width="100" + Command="{Binding Operation.GeneratePattern}" + CommandParameter="Strips" + /> + </StackPanel> + + <StackPanel Orientation="Horizontal" Spacing="10"> + <Button + Padding="10" + Content="Pyramid" + Width="100" + Command="{Binding Operation.GeneratePattern}" + CommandParameter="Pyramid" + /> + + <Button + Padding="10" + Content="Rhombus" + Width="100" + Command="{Binding Operation.GeneratePattern}" + CommandParameter="Rhombus" + /> + <Button + Padding="10" + Content="Waves" + Width="100" + Command="{Binding Operation.GeneratePattern}" + CommandParameter="Waves" + /> + <Button + Padding="10" + Content="Slashes" + Width="100" + Command="{Binding Operation.GeneratePattern}" + CommandParameter="Slashes" + /> + </StackPanel> + + <StackPanel Orientation="Horizontal" Spacing="10"> + <Button + Padding="10" + Content="Hearts" + Width="100" + Command="{Binding Operation.GeneratePattern}" + CommandParameter="Hearts" + /> + <Button + Padding="10" + Content="Solid" + Width="100" + Command="{Binding Operation.GeneratePattern}" + CommandParameter="Solid" + /> + </StackPanel> + + </StackPanel> + </Border> + + <Border + Grid.Row="3" + Grid.Column="2" + BorderBrush="LightGray" + BorderThickness="1" + Padding="5" + > + + <StackPanel Spacing="10"> + <TextBlock FontWeight="Bold" Text="Infill generator"/> + + <TextBlock + TextWrapping="Wrap" + Text="Warning: This function can generate a large number of resin traps. (Use with caution)"/> + + <Grid RowDefinitions="Auto,10,Auto" + ColumnDefinitions="Auto,10,150,5,Auto"> + <TextBlock + VerticalAlignment="Center" + Text="Thickness:"/> + <NumericUpDown + Grid.Row="0" Grid.Column="2" + Minimum="5" + Maximum="10000" + Value="{Binding Operation.PatternGenInfillThickness}"/> + <TextBlock Grid.Row="0" Grid.Column="4" + VerticalAlignment="Center" + Text="px"/> + + <TextBlock Grid.Row="2" Grid.Column="0" + VerticalAlignment="Center" + Text="Spacing:"/> + <NumericUpDown Grid.Row="2" Grid.Column="2" + Minimum="5" + Maximum="10000" + Value="{Binding Operation.PatternGenInfillSpacing}"/> + <TextBlock Grid.Row="2" Grid.Column="4" + VerticalAlignment="Center" + Text="px"/> + + </Grid> + + <StackPanel Orientation="Horizontal" Spacing="10"> + <Button + Padding="10" + Content="Rectilinear" + Width="100" + Command="{Binding Operation.GenerateInfill}" + CommandParameter="Rectilinear" + /> + <Button + Padding="10" + Content="Square grid" + Width="100" + Command="{Binding Operation.GenerateInfill}" + CommandParameter="Square grid" + /> + <Button + Padding="10" + Content="Waves" + Width="100" + Command="{Binding Operation.GenerateInfill}" + CommandParameter="Waves" + /> + <Button + Padding="10" + Content="Lattice" + Width="100" + Command="{Binding Operation.GenerateInfill}" + CommandParameter="Lattice" + /> + </StackPanel> + </StackPanel> + </Border> + + </Grid> + + </StackPanel> + </Border> + </StackPanel> </UserControl> diff --git a/UVtools.WPF/Controls/Tools/ToolPixelArithmeticControl.axaml.cs b/UVtools.WPF/Controls/Tools/ToolPixelArithmeticControl.axaml.cs index bc151a4..84e1f68 100644 --- a/UVtools.WPF/Controls/Tools/ToolPixelArithmeticControl.axaml.cs +++ b/UVtools.WPF/Controls/Tools/ToolPixelArithmeticControl.axaml.cs @@ -1,3 +1,4 @@ +using Avalonia.Controls; using Avalonia.Markup.Xaml; using UVtools.Core.Operations; @@ -11,11 +12,25 @@ namespace UVtools.WPF.Controls.Tools BaseOperation = new OperationPixelArithmetic(SlicerFile); if (!ValidateSpawn()) return; InitializeComponent(); + + Operation.GeneratePattern("Chessboard"); } private void InitializeComponent() { AvaloniaXamlLoader.Load(this); } + + public async void LoadPatternFromImage(bool isAlternatePattern = false) + { + var dialog = new OpenFileDialog + { + AllowMultiple = false, + Filters = Helpers.ImagesFileFilter, + }; + var files = await dialog.ShowAsync(ParentWindow); + if (files is null || files.Length == 0) return; + Operation.LoadPatternFromImage(files[0], isAlternatePattern); + } } } diff --git a/UVtools.WPF/MainWindow.Information.cs b/UVtools.WPF/MainWindow.Information.cs index 60563ce..8082ea0 100644 --- a/UVtools.WPF/MainWindow.Information.cs +++ b/UVtools.WPF/MainWindow.Information.cs @@ -7,12 +7,9 @@ */ using System; using System.Collections; -using System.Collections.Generic; using System.Collections.ObjectModel; -using System.Diagnostics; using System.Globalization; using System.IO; -using System.Linq; using System.Reflection; using System.Text; using Avalonia; @@ -20,7 +17,6 @@ using Avalonia.Controls; using Avalonia.Input; using MessageBox.Avalonia.Enums; using UVtools.Core; -using UVtools.Core.FileFormats; using UVtools.Core.Objects; using UVtools.WPF.Extensions; using UVtools.WPF.Structures; @@ -137,8 +133,8 @@ namespace UVtools.WPF } } - public bool ThumbnailCanGoPrevious => SlicerFile is { } && _visibleThumbnailIndex > 1; - public bool ThumbnailCanGoNext => SlicerFile is { } && _visibleThumbnailIndex < SlicerFile.CreatedThumbnailsCount; + public bool ThumbnailCanGoPrevious => SlicerFile is not null && _visibleThumbnailIndex > 1; + public bool ThumbnailCanGoNext => SlicerFile is not null && _visibleThumbnailIndex < SlicerFile.CreatedThumbnailsCount; public void ThumbnailGoPrevious() { @@ -167,7 +163,7 @@ namespace UVtools.WPF public async void OnClickThumbnailSave() { if (SlicerFile is null) return; - if (ReferenceEquals(SlicerFile.Thumbnails[_visibleThumbnailIndex - 1], null)) + if (SlicerFile.Thumbnails[_visibleThumbnailIndex - 1] is null) { return; // This should never happen! } @@ -189,7 +185,7 @@ namespace UVtools.WPF public async void OnClickThumbnailImport() { if (_visibleThumbnailIndex <= 0) return; - if (ReferenceEquals(SlicerFile.Thumbnails[_visibleThumbnailIndex - 1], null)) + if (SlicerFile.Thumbnails[_visibleThumbnailIndex - 1] is null) { return; // This should never happen! } @@ -203,8 +199,21 @@ namespace UVtools.WPF var filepath = await dialog.ShowAsync(this); if (filepath is null || filepath.Length <= 0) return; - int i = (int)(_visibleThumbnailIndex - 1); - SlicerFile.SetThumbnail(i, filepath[0]); + uint i = _visibleThumbnailIndex - 1; + SlicerFile.SetThumbnail((int)i, filepath[0]); + //VisibleThumbnailImage = SlicerFile.Thumbnails[i].ToBitmap(); + SlicerFile.RequireFullEncode = true; + CanSave = true; + } + + public void RefreshThumbnail() + { + if (_visibleThumbnailIndex <= 0) return; + uint i = _visibleThumbnailIndex - 1; + if (SlicerFile.Thumbnails?[i] is null) + { + return; + } VisibleThumbnailImage = SlicerFile.Thumbnails[i].ToBitmap(); } #endregion @@ -228,32 +237,30 @@ namespace UVtools.WPF try { - using (TextWriter tw = new StreamWriter(file)) + using TextWriter tw = new StreamWriter(file); + foreach (var config in SlicerFile.Configs) { - foreach (var config in SlicerFile.Configs) + var type = config.GetType(); + tw.WriteLine($"[{type.Name}]"); + foreach (var property in type.GetProperties(BindingFlags.Public | BindingFlags.Instance)) { - var type = config.GetType(); - tw.WriteLine($"[{type.Name}]"); - foreach (var property in type.GetProperties(BindingFlags.Public | BindingFlags.Instance)) + if (property.Name.Equals("Item")) continue; + var value = property.GetValue(config); + switch (value) { - if (property.Name.Equals("Item")) continue; - var value = property.GetValue(config); - switch (value) - { - case null: - continue; - case IList list: - tw.WriteLine($"{property.Name} = {list.Count}"); - break; - default: - tw.WriteLine($"{property.Name} = {value}"); - break; - } + case null: + continue; + case IList list: + tw.WriteLine($"{property.Name} = {list.Count}"); + break; + default: + tw.WriteLine($"{property.Name} = {value}"); + break; } - tw.WriteLine(); } - tw.Close(); + tw.WriteLine(); } + tw.Close(); } catch (Exception e) { diff --git a/UVtools.WPF/MainWindow.axaml b/UVtools.WPF/MainWindow.axaml index e078ba6..0dadac8 100644 --- a/UVtools.WPF/MainWindow.axaml +++ b/UVtools.WPF/MainWindow.axaml @@ -22,12 +22,12 @@ HotKey="Ctrl+O" InputGesture="Ctrl+O" Command="{Binding MenuFileOpenClicked}"> <MenuItem.Icon> - <Image Source="\Assets\Icons\open-16x16.png"/> + <Image Source="\Assets\Icons\file-import-16x16.png"/> </MenuItem.Icon> </MenuItem> <MenuItem Name="MainMenu.File.OpenNewWindow" Header="Open in _new window" HotKey="Ctrl+Shift+O" InputGesture="Ctrl+Shift+O" Command="{Binding MenuFileOpenNewWindowClicked}"> <MenuItem.Icon> - <Image Source="\Assets\Icons\open-16x16.png"/> + <Image Source="\Assets\Icons\file-import-16x16.png"/> </MenuItem.Icon> </MenuItem> <MenuItem @@ -82,10 +82,16 @@ <Image Source="\Assets\Icons\flask-16x16.png"/> </MenuItem.Icon> </MenuItem> - + + <MenuItem Name="MainMenu.File.OpenCurrentFileFolder" Header="Open current file fo_lder" HotKey="Ctrl+Shift+L" InputGesture="Ctrl+Shift+L" IsEnabled="{Binding IsFileLoaded}" Command="{Binding MenuFileOpenCurrentFileFolderClicked}"> + <MenuItem.Icon> + <Image Source="\Assets\Icons\folder-open-16x16.png"/> + </MenuItem.Icon> + </MenuItem> + <MenuItem Name="MainMenu.File.Extract" - Header="_Extract" HotKey="Ctrl+E" InputGesture="Ctrl+E" + Header="_Extract file contents" HotKey="Ctrl+E" InputGesture="Ctrl+E" IsEnabled="{Binding IsFileLoaded}" Command="{Binding ExtractFile}"> <MenuItem.Icon> @@ -103,7 +109,7 @@ <Image Source="\Assets\Icons\convert-16x16.png"/> </MenuItem.Icon> </MenuItem> - + <Separator/> <MenuItem diff --git a/UVtools.WPF/MainWindow.axaml.cs b/UVtools.WPF/MainWindow.axaml.cs index e83107a..d195a4a 100644 --- a/UVtools.WPF/MainWindow.axaml.cs +++ b/UVtools.WPF/MainWindow.axaml.cs @@ -155,7 +155,7 @@ namespace UVtools.WPF Tag = new OperationPixelArithmetic(), Icon = new Avalonia.Controls.Image { - Source = new Bitmap(App.GetAsset("/Assets/Icons/square-root-16x16.png")) + Source = new Bitmap(App.GetAsset("/Assets/Icons/pixel-16x16.png")) } }, new() @@ -166,14 +166,14 @@ namespace UVtools.WPF Source = new Bitmap(App.GetAsset("/Assets/Icons/mask-16x16.png")) } }, - new() + /*new() { Tag = new OperationPixelDimming(), Icon = new Avalonia.Controls.Image { Source = new Bitmap(App.GetAsset("/Assets/Icons/pixel-16x16.png")) } - }, + },*/ new() { Tag = new OperationLightBleedCompensation(), @@ -745,6 +745,12 @@ namespace UVtools.WPF public void MenuFileOpenClicked() => OpenFile(); public void MenuFileOpenNewWindowClicked() => OpenFile(true); + public void MenuFileOpenCurrentFileFolderClicked() + { + if (!IsFileLoaded) return; + App.SelectFileOnExplorer(SlicerFile.FileFullPath); + } + public async void MenuFileSaveClicked() { if (!CanSave) return; @@ -1148,9 +1154,8 @@ namespace UVtools.WPF SlicerFile.CanUseBottomLightOffDelay && (Settings.Automations.ChangeOnlyLightOffDelayIfZero && SlicerFile.BottomLightOffDelay == 0 || !Settings.Automations.ChangeOnlyLightOffDelayIfZero)) { - if (SlicerFile is ChituboxFile chituboxFile && - chituboxFile.HeaderSettings.Version >= 4 && - (chituboxFile.WaitTimeBeforeCure > 0 || chituboxFile.WaitTimeAfterCure > 0 || chituboxFile.WaitTimeAfterLift > 0)) + if ((SlicerFile.CanUseAnyWaitTimeBeforeCure || SlicerFile.CanUseAnyWaitTimeAfterCure || SlicerFile.CanUseAnyWaitTimeAfterLift) && + (SlicerFile.BottomWaitTimeBeforeCure > 0 || SlicerFile.BottomWaitTimeAfterCure > 0 || SlicerFile.BottomWaitTimeAfterLift > 0)) { // Ignore this automation } @@ -1175,9 +1180,8 @@ namespace UVtools.WPF SlicerFile.CanUseLightOffDelay && (Settings.Automations.ChangeOnlyLightOffDelayIfZero && SlicerFile.LightOffDelay == 0 || !Settings.Automations.ChangeOnlyLightOffDelayIfZero)) { - if (SlicerFile is ChituboxFile chituboxFile && - chituboxFile.HeaderSettings.Version >= 4 && - (chituboxFile.WaitTimeBeforeCure > 0 || chituboxFile.WaitTimeAfterCure > 0 || chituboxFile.WaitTimeAfterLift > 0)) + if ((SlicerFile.CanUseAnyWaitTimeBeforeCure || SlicerFile.CanUseAnyWaitTimeAfterCure || SlicerFile.CanUseAnyWaitTimeAfterLift) && + (SlicerFile.WaitTimeBeforeCure > 0 || SlicerFile.WaitTimeAfterCure > 0 || SlicerFile.WaitTimeAfterLift > 0)) { // Ignore this automation } @@ -1218,6 +1222,8 @@ namespace UVtools.WPF if(fileFormat is ImageFile) continue; foreach (var fileExtension in fileFormat.FileExtensions) { + if(!fileExtension.IsVisibleOnConvertMenu) continue; + var menuItem = new MenuItem { Header = fileExtension.Description, @@ -1315,6 +1321,16 @@ namespace UVtools.WPF SelectedTabItem = TabIssues; } } + + SlicerFile.PropertyChanged += SlicerFileOnPropertyChanged; + } + + private void SlicerFileOnPropertyChanged(object? sender, PropertyChangedEventArgs e) + { + if (e.PropertyName == nameof(SlicerFile.Thumbnails)) + { + RefreshThumbnail(); + } } private async void ShowProgressWindow(string title, bool canCancel = true) diff --git a/UVtools.WPF/UVtools.WPF.csproj b/UVtools.WPF/UVtools.WPF.csproj index dc8e4e7..6d6bc26 100644 --- a/UVtools.WPF/UVtools.WPF.csproj +++ b/UVtools.WPF/UVtools.WPF.csproj @@ -12,7 +12,7 @@ <PackageLicenseFile>LICENSE</PackageLicenseFile> <RepositoryUrl>https://github.com/sn4k3/UVtools</RepositoryUrl> <RepositoryType>Git</RepositoryType> - <Version>2.18.1</Version> + <Version>2.19.0</Version> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> @@ -24,11 +24,11 @@ <NoWarn>1701;1702;</NoWarn> </PropertyGroup> <ItemGroup> - <PackageReference Include="Avalonia" Version="0.10.6" /> + <PackageReference Include="Avalonia" Version="0.10.7" /> <PackageReference Include="Avalonia.Angle.Windows.Natives" Version="2.1.0.2020091801" /> - <PackageReference Include="Avalonia.Controls.DataGrid" Version="0.10.6" /> - <PackageReference Include="Avalonia.Desktop" Version="0.10.6" /> - <PackageReference Include="Avalonia.Diagnostics" Version="0.10.6" /> + <PackageReference Include="Avalonia.Controls.DataGrid" Version="0.10.7" /> + <PackageReference Include="Avalonia.Desktop" Version="0.10.7" /> + <PackageReference Include="Avalonia.Diagnostics" Version="0.10.7" /> <PackageReference Include="Emgu.CV.runtime.windows" Version="4.5.3.4721" /> <PackageReference Include="MessageBox.Avalonia" Version="1.5.1" /> <PackageReference Include="ThemeEditor.Controls.ColorPicker" Version="0.10.6" /> diff --git a/UVtools.WPF/Windows/MaterialManagerWindow.axaml b/UVtools.WPF/Windows/MaterialManagerWindow.axaml index 52908af..30873e4 100644 --- a/UVtools.WPF/Windows/MaterialManagerWindow.axaml +++ b/UVtools.WPF/Windows/MaterialManagerWindow.axaml @@ -77,8 +77,7 @@ </Border> - <Border Grid.Row="1" BorderBrush="Black" BorderThickness="1" Padding="5"> - <Expander IsExpanded="False"> + <Expander Grid.Row="1" IsExpanded="False"> <Expander.Header> <TextBlock Text="Add new material" FontWeight="Bold" @@ -170,7 +169,6 @@ Text="units"/> </Grid> </Expander> - </Border> <TextBlock Grid.Row="2" VerticalAlignment="Center" FontWeight="Bold" diff --git a/UVtools.WPF/Windows/SettingsWindow.axaml.cs b/UVtools.WPF/Windows/SettingsWindow.axaml.cs index 80d1a66..b63f068 100644 --- a/UVtools.WPF/Windows/SettingsWindow.axaml.cs +++ b/UVtools.WPF/Windows/SettingsWindow.axaml.cs @@ -63,7 +63,7 @@ namespace UVtools.WPF.Windows { FileFormat.AllSlicerFiles.Replace("*", string.Empty) }; - fileFormats.AddRange(from format in FileFormat.AvailableFormats from extension in format.FileExtensions select $"{extension.Description} (.{extension.Extension})"); + fileFormats.AddRange(from format in FileFormat.AvailableFormats from extension in format.FileExtensions where extension.IsVisibleOnFileFilters select $"{extension.Description} (.{extension.Extension})"); FileOpenDialogFilters = fileFormats.ToArray(); diff --git a/UVtools.WPF/Windows/ToolWindow.axaml.cs b/UVtools.WPF/Windows/ToolWindow.axaml.cs index f7ffdfa..5d2438f 100644 --- a/UVtools.WPF/Windows/ToolWindow.axaml.cs +++ b/UVtools.WPF/Windows/ToolWindow.axaml.cs @@ -725,6 +725,8 @@ namespace UVtools.WPF.Windows }, TimeSpan.FromMilliseconds(1)); } + + public void FitToSize() { SizeToContent = SizeToContent.Manual; |