/* * GNU AFFERO GENERAL PUBLIC LICENSE * Version 3, 19 November 2007 * Copyright (C) 2007 Free Software Foundation, Inc. * Everyone is permitted to copy and distribute verbatim copies * of this license document, but changing it is not allowed. */ using System; using UVtools.Core.Scripting; using System.IO; using UVtools.Core; using UVtools.Core.Extensions; using UVtools.Core.FileFormats; namespace UVtools.ScriptSample { /// /// Change layer properties to random values /// public class ScriptCustomGCode : ScriptGlobals { /// /// Set configurations here, this function trigger just after load a script /// public void ScriptInit() { Script.Name = "Custo gcode generator"; Script.Description = "Generates custom gcode and saves the file"; Script.Author = "Tiago Conceição"; Script.Version = new Version(0, 1); } /// /// Validate user inputs here, this function trigger when user click on execute /// /// A error message, empty or null if validation passes. public string ScriptValidate() { return SlicerFile.SupportsGCode ? null : "GCode is not supported on this file"; } /// /// Execute the script, this function trigger when when user click on execute and validation passes /// /// True if executes successfully to the end, otherwise false. public bool ScriptExecute() { var gcode = SlicerFile.GCode; gcode.Clear(); float pos = 1; float layerHeight = 0.025f; float liftHeight = 4.5f; float feedrate = gcode.ConvertFromMillimetersPerMinute(150); float lightoff = gcode.ConvertFromSeconds(1f); gcode.AppendStartGCode(); //gcode.AppendShowImageM6054(gcode.GetShowImageString(0)); //gcode.AppendWaitG4(gcode.ConvertFromSeconds(2)); //gcode.AppendTurnLightM106(255); gcode.AppendWaitG4(gcode.ConvertFromSeconds(1)); //gcode.AppendTurnLightM106(0); gcode.AppendLiftMoveG0(20, feedrate, pos, feedrate); gcode.AppendWaitG4(gcode.ConvertFromSeconds(5)); // 0.025 test /*gcode.AppendComment("0.025 layer height simulated print test"); for (int i = 0; i < 50; i++) { pos = Layer.RoundHeight(pos + layerHeight); var liftPos = Layer.RoundHeight(pos + liftHeight); gcode.AppendLiftMoveG0(liftPos, feedrate, pos, feedrate, lightoff); }*/ // 0.01 test /*gcode.AppendComment("0.01 layer height simulated print test"); pos = 1; layerHeight = 0.01f; gcode.AppendMoveG0(pos, feedrate); gcode.AppendWaitG4(gcode.ConvertFromSeconds(5)); for (int i = 0; i < 50; i++) { pos = Layer.RoundHeight(pos + layerHeight); var liftPos = Layer.RoundHeight(pos + liftHeight); gcode.AppendLiftMoveG0(liftPos, feedrate, pos, feedrate, lightoff); }*/ // 0.001 test /*gcode.AppendComment("0.001 layer height simulated print test"); pos = 1; layerHeight = 0.001f; liftHeight = 1; gcode.AppendMoveG0(pos, feedrate); gcode.AppendWaitG4(gcode.ConvertFromSeconds(5)); for (int i = 0; i < 50; i++) { pos = Layer.RoundHeight(pos + layerHeight); var liftPos = Layer.RoundHeight(pos + liftHeight); gcode.AppendLiftMoveG0(liftPos, feedrate, pos, feedrate, lightoff); }*/ /*// 0.05 backlash test gcode.AppendComment("0.05 backlash test"); pos = 1; layerHeight = 0.02f; gcode.AppendMoveG0(pos, feedrate); //gcode.AppendWaitG4(gcode.ConvertFromSeconds(5)); for (int i = 0; i < 50; i++) { var liftPos = Layer.RoundHeight(pos + layerHeight); gcode.AppendMoveG0(liftPos, feedrate); gcode.AppendWaitG4(lightoff); gcode.AppendMoveG0(pos, feedrate); gcode.AppendWaitG4(lightoff); } */ gcode.AppendLiftMoveG0(20, gcode.ConvertFromMillimetersPerMinute(150), 1, gcode.ConvertFromMillimetersPerMinute(150)); gcode.AppendWaitG4(lightoff); gcode.AppendLiftMoveG0(20, gcode.ConvertFromMillimetersPerMinute(180), 1.5f, gcode.ConvertFromMillimetersPerMinute(180)); gcode.AppendWaitG4(lightoff); gcode.AppendLiftMoveG0(20, gcode.ConvertFromMillimetersPerMinute(195), 2, gcode.ConvertFromMillimetersPerMinute(195)); gcode.AppendWaitG4(lightoff); gcode.AppendLiftMoveG0(20, gcode.ConvertFromMillimetersPerMinute(200), 2.5f, gcode.ConvertFromMillimetersPerMinute(200)); gcode.AppendWaitG4(lightoff); gcode.AppendLiftMoveG0(20, gcode.ConvertFromMillimetersPerMinute(250), 3f, gcode.ConvertFromMillimetersPerMinute(250)); gcode.AppendWaitG4(lightoff); gcode.AppendLiftMoveG0(20, gcode.ConvertFromMillimetersPerMinute(300), 3.5f, gcode.ConvertFromMillimetersPerMinute(300)); gcode.AppendWaitG4(lightoff); gcode.AppendMoveG0(100, feedrate); //gcode.AppendTurnMotors(false); SlicerFile.SuppressRebuildGCode = true; SlicerFile.Save(Progress); SlicerFile.SuppressRebuildGCode = false; // return true if not cancelled by user return !Progress.Token.IsCancellationRequested; } } }