Creating the new calibration pages
This commit is contained in:
parent
f318178a4e
commit
b404d052de
6 changed files with 175 additions and 37 deletions
|
|
@ -29,15 +29,16 @@ either expressed or implied, of the FreeBSD Project.
|
|||
|
||||
using System.Collections.Generic;
|
||||
using MatterHackers.Agg.UI;
|
||||
using MatterHackers.DataConverters3D;
|
||||
using MatterHackers.Localizations;
|
||||
using MatterHackers.MatterControl.SlicerConfiguration;
|
||||
using MatterHackers.VectorMath;
|
||||
|
||||
namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
|
||||
{
|
||||
public class NozzleXyCalibrationWizard : PrinterSetupWizard
|
||||
public class XyCalibrationWizard : PrinterSetupWizard
|
||||
{
|
||||
public NozzleXyCalibrationWizard(PrinterConfig printer)
|
||||
public XyCalibrationWizard(PrinterConfig printer)
|
||||
: base(printer)
|
||||
{
|
||||
this.WindowTitle = $"{ApplicationController.Instance.ProductName} - " + "Nozzle Calibration Wizard".Localize();
|
||||
|
|
@ -69,18 +70,17 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
|
|||
|
||||
private IEnumerator<WizardPage> GetPages()
|
||||
{
|
||||
yield return new WizardPage(
|
||||
this,
|
||||
"Nozzle Offset Calibration".Localize(),
|
||||
"Offset Calibration required. We'll now print a calibration guide on the printer to tune your nozzle offsets".Localize())
|
||||
{
|
||||
WindowTitle = WindowTitle
|
||||
};
|
||||
var xyCalibrationData = new XyCalibrationData();
|
||||
|
||||
var calibrationPage = new NozzleOffsetCalibrationPrintPage(this, printer);
|
||||
yield return calibrationPage;
|
||||
yield return new XyCalibrationSelectPage(this, printer, xyCalibrationData);
|
||||
|
||||
yield return new NozzleOffsetCalibrationResultsPage(this, printer, calibrationPage.XOffset, calibrationPage.YOffset);
|
||||
yield return new XyCalibrationStartPrintPage(this, printer, xyCalibrationData);
|
||||
}
|
||||
}
|
||||
|
||||
public class XyCalibrationData
|
||||
{
|
||||
public enum QualityType { Coarse, Normal, Fine }
|
||||
public QualityType Quality { get; set; } = QualityType.Normal;
|
||||
}
|
||||
}
|
||||
|
|
@ -71,26 +71,6 @@ namespace MatterHackers.MatterControl
|
|||
VAnchor = VAnchor.Center,
|
||||
Margin = new BorderDouble(right: 10)
|
||||
});
|
||||
|
||||
this.NextButton.Visible = false;
|
||||
|
||||
var nextButton = theme.CreateDialogButton("Finish".Localize());
|
||||
nextButton.Name = "FinishCalibration";
|
||||
nextButton.Click += (s, e) =>
|
||||
{
|
||||
// TODO: removed fixed index
|
||||
var hotendOffset = printer.Settings.Helpers.ExtruderOffset(1);
|
||||
hotendOffset.X += xOffset;
|
||||
hotendOffset.Y += yOffset;
|
||||
|
||||
printer.Settings.Helpers.SetExtruderOffset(1, hotendOffset);
|
||||
|
||||
this.DialogWindow.CloseOnIdle();
|
||||
};
|
||||
|
||||
theme.ApplyPrimaryActionStyle(nextButton);
|
||||
|
||||
this.AddPageAction(nextButton);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
154
MatterControlLib/CustomWidgets/XyCalibrationSelectPage.cs
Normal file
154
MatterControlLib/CustomWidgets/XyCalibrationSelectPage.cs
Normal file
|
|
@ -0,0 +1,154 @@
|
|||
/*
|
||||
Copyright (c) 2019, Lars Brubaker, John Lewin
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
The views and conclusions contained in the software and documentation are those
|
||||
of the authors and should not be interpreted as representing official policies,
|
||||
either expressed or implied, of the FreeBSD Project.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using MatterHackers.Agg.UI;
|
||||
using MatterHackers.DataConverters3D;
|
||||
using MatterHackers.Localizations;
|
||||
using MatterHackers.MatterControl.ConfigurationPage.PrintLeveling;
|
||||
using MatterHackers.MatterControl.DesignTools;
|
||||
using MatterHackers.MatterControl.SlicerConfiguration;
|
||||
using MatterHackers.VectorMath;
|
||||
|
||||
namespace MatterHackers.MatterControl
|
||||
{
|
||||
public class XyCalibrationSelectPage : WizardPage
|
||||
{
|
||||
private RadioButton coarseCalibration;
|
||||
private RadioButton normalCalibration;
|
||||
private RadioButton fineCalibration;
|
||||
|
||||
public XyCalibrationSelectPage(ISetupWizard setupWizard, PrinterConfig printer, XyCalibrationData xyCalibrationData)
|
||||
: base(setupWizard)
|
||||
{
|
||||
this.WindowTitle = "Nozzle Offset Calibration Wizard".Localize();
|
||||
this.HeaderText = "Nozzle Offset Calibration".Localize() + ":";
|
||||
this.Name = "Nozzle Offset Calibration Wizard";
|
||||
|
||||
contentRow.Padding = theme.DefaultContainerPadding;
|
||||
|
||||
contentRow.AddChild(new TextWidget("Choose the calibration you would like to perform.".Localize(), textColor: theme.TextColor, pointSize: theme.DefaultFontSize)
|
||||
{
|
||||
Margin = new Agg.BorderDouble(0, 15, 0, 0)
|
||||
});
|
||||
|
||||
contentRow.AddChild(coarseCalibration = new RadioButton("Coarse Calibration: If your printer is way off".Localize(), textColor: theme.TextColor, fontSize: theme.DefaultFontSize)
|
||||
{
|
||||
Checked = xyCalibrationData.Quality == XyCalibrationData.QualityType.Coarse
|
||||
});
|
||||
coarseCalibration.CheckedStateChanged += (s, e) => xyCalibrationData.Quality = XyCalibrationData.QualityType.Coarse;
|
||||
contentRow.AddChild(normalCalibration = new RadioButton("Normal Calibration: Start here".Localize(), textColor: theme.TextColor, fontSize: theme.DefaultFontSize)
|
||||
{
|
||||
Checked = xyCalibrationData.Quality == XyCalibrationData.QualityType.Normal
|
||||
});
|
||||
normalCalibration.CheckedStateChanged += (s, e) => xyCalibrationData.Quality = XyCalibrationData.QualityType.Normal;
|
||||
contentRow.AddChild(fineCalibration = new RadioButton("Fine Calibration: When you want that extra precision".Localize(), textColor: theme.TextColor, fontSize: theme.DefaultFontSize)
|
||||
{
|
||||
Checked = xyCalibrationData.Quality == XyCalibrationData.QualityType.Fine
|
||||
});
|
||||
fineCalibration.CheckedStateChanged += (s, e) => xyCalibrationData.Quality = XyCalibrationData.QualityType.Fine;
|
||||
}
|
||||
}
|
||||
|
||||
public class XyCalibrationStartPrintPage : WizardPage
|
||||
{
|
||||
public XyCalibrationStartPrintPage(ISetupWizard setupWizard, PrinterConfig printer, XyCalibrationData xyCalibrationData)
|
||||
: base(setupWizard)
|
||||
{
|
||||
this.WindowTitle = "Nozzle Offset Calibration Wizard".Localize();
|
||||
this.HeaderText = "Nozzle Offset Calibration".Localize();
|
||||
this.Name = "Nozzle Offset Calibration Wizard";
|
||||
|
||||
var content = "Here is what we are going to do:".Localize();
|
||||
content += "\n\n • " + "Stash your current bed".Localize();
|
||||
content += "\n • " + "Print the calibration object".Localize();
|
||||
content += "\n • " + "Collect data".Localize();
|
||||
content += "\n • " + "Restore your current bed, after all calibration is complete".Localize();
|
||||
|
||||
contentRow.AddChild(this.CreateTextField(content));
|
||||
|
||||
contentRow.Padding = theme.DefaultContainerPadding;
|
||||
|
||||
this.NextButton.Visible = false;
|
||||
|
||||
var startCalibrationPrint = theme.CreateDialogButton("Start Print".Localize());
|
||||
startCalibrationPrint.Name = "Start Calibration Print";
|
||||
startCalibrationPrint.Click += (s, e) =>
|
||||
{
|
||||
this.DialogWindow.CloseOnIdle();
|
||||
// stash the current bed
|
||||
var scene = printer.Bed.Scene;
|
||||
scene.Children.Modify((list) => list.Clear());
|
||||
IObject3D item = null;
|
||||
// add the calibration object to the bed
|
||||
switch(xyCalibrationData.Quality)
|
||||
{
|
||||
case XyCalibrationData.QualityType.Coarse:
|
||||
item = XyCalibrationTabObject3D.Create(1,
|
||||
Math.Max(printer.Settings.GetValue<double>(SettingsKey.first_layer_height) * 2, printer.Settings.GetValue<double>(SettingsKey.layer_height) * 2),
|
||||
.5,
|
||||
printer.Settings.GetValue<double>(SettingsKey.nozzle_diameter)).GetAwaiter().GetResult();
|
||||
break;
|
||||
|
||||
case XyCalibrationData.QualityType.Fine:
|
||||
item = XyCalibrationFaceObject3D.Create(1,
|
||||
printer.Settings.GetValue<double>(SettingsKey.first_layer_height) * 2,
|
||||
printer.Settings.GetValue<double>(SettingsKey.layer_height),
|
||||
.05,
|
||||
printer.Settings.GetValue<double>(SettingsKey.nozzle_diameter),
|
||||
printer.Settings.GetValue<double>(SettingsKey.wipe_tower_size),
|
||||
8).GetAwaiter().GetResult();
|
||||
break;
|
||||
|
||||
default:
|
||||
item = XyCalibrationFaceObject3D.Create(1,
|
||||
printer.Settings.GetValue<double>(SettingsKey.first_layer_height) * 2,
|
||||
printer.Settings.GetValue<double>(SettingsKey.layer_height),
|
||||
.1,
|
||||
printer.Settings.GetValue<double>(SettingsKey.nozzle_diameter),
|
||||
printer.Settings.GetValue<double>(SettingsKey.wipe_tower_size),
|
||||
8).GetAwaiter().GetResult();
|
||||
break;
|
||||
}
|
||||
|
||||
// move the part to the center of the bed
|
||||
var bedBounds = printer.Bed.Bounds;
|
||||
var aabb = item.GetAxisAlignedBoundingBox();
|
||||
item.Matrix *= Matrix4X4.CreateTranslation(bedBounds.Center.X - aabb.MinXYZ.X - aabb.XSize / 2, bedBounds.Center.Y - aabb.MinXYZ.Y - aabb.YSize / 2, -aabb.MinXYZ.Z);
|
||||
scene.Children.Add(item);
|
||||
// switch to 3D view
|
||||
// start the calibration print
|
||||
};
|
||||
|
||||
theme.ApplyPrimaryActionStyle(startCalibrationPrint);
|
||||
|
||||
this.AddPageAction(startCalibrationPrint);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -52,6 +52,7 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
[DisplayName("Material")]
|
||||
public int CalibrationMaterialIndex { get; set; } = 1;
|
||||
|
||||
public override bool CanFlatten => true;
|
||||
public double ChangingHeight { get; set; } = .4;
|
||||
public int Layers { get; set; } = 10;
|
||||
public double Offset { get; set; } = .5;
|
||||
|
|
@ -62,7 +63,7 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
private double TabWidth => NozzleWidth * TabScale * 3;
|
||||
|
||||
public static async Task<XyCalibrationFaceObject3D> Create(int calibrationMaterialIndex = 1,
|
||||
double baseHeight = 1, double changingHeight = .2, double offset = .5, double nozzleWidth = .4, double wipeTowerSize = 10, int layers = 10)
|
||||
double baseHeight = 1, double changingHeight = .2, double offset = .5, double nozzleWidth = .4, double wipeTowerSize = 10, int layers = 8)
|
||||
{
|
||||
var item = new XyCalibrationFaceObject3D()
|
||||
{
|
||||
|
|
@ -123,7 +124,7 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
this.Children.Add(new Object3D()
|
||||
{
|
||||
Mesh = PlatonicSolids.CreateCube(),
|
||||
Matrix = Matrix4X4.CreateTranslation(1 / 2.0, 1 / 2.0, 1 / 2.0)
|
||||
Matrix = Matrix4X4.CreateTranslation(1 / 2.0, 1 / 2.0, 1 / 2.0)
|
||||
* Matrix4X4.CreateScale(WipeTowerSize, WipeTowerSize, BaseHeight + Layers * ChangingHeight)
|
||||
* Matrix4X4.CreateTranslation(TabDepth * 1, TabDepth * 2, 0),
|
||||
OutputType = PrintOutputTypes.WipeTower
|
||||
|
|
|
|||
|
|
@ -40,6 +40,8 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
{
|
||||
public class XyCalibrationTabObject3D : Object3D
|
||||
{
|
||||
public double NozzleWidth = .4;
|
||||
|
||||
public XyCalibrationTabObject3D()
|
||||
{
|
||||
Name = "Calibration Tab".Localize();
|
||||
|
|
@ -47,16 +49,17 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
|
||||
[DisplayName("Material")]
|
||||
public int CalibrationMaterialIndex { get; set; } = 1;
|
||||
|
||||
public override bool CanFlatten => true;
|
||||
public double ChangeHeight { get; set; } = .4;
|
||||
public double Offset { get; set; } = .5;
|
||||
public double NozzleWidth = .4;
|
||||
public double WipeTowerSize { get; set; } = 10;
|
||||
|
||||
private double TabDepth => NozzleWidth * TabScale * 5;
|
||||
private double TabScale => 3;
|
||||
private double TabWidth => NozzleWidth * TabScale * 3;
|
||||
|
||||
public static async Task<XyCalibrationTabObject3D> Create(int calibrationMaterialIndex = 1,
|
||||
public static async Task<XyCalibrationTabObject3D> Create(int calibrationMaterialIndex = 1,
|
||||
double changeHeight = .4, double offset = .5, double nozzleWidth = .4)
|
||||
{
|
||||
var item = new XyCalibrationTabObject3D()
|
||||
|
|
|
|||
|
|
@ -163,7 +163,7 @@ namespace MatterHackers.MatterControl.PrinterControls
|
|||
|
||||
xyCalibrateButton.Click += (s, e) => UiThread.RunOnIdle(() =>
|
||||
{
|
||||
DialogWindow.Show(new NozzleXyCalibrationWizard(printer));
|
||||
DialogWindow.Show(new XyCalibrationWizard(printer));
|
||||
});
|
||||
|
||||
settingsRow.BorderColor = Color.Transparent;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue