/* Copywrite 2016-2017 Will Winder This file is part of Universal Gcode Sender (UGS). UGS is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. UGS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with UGS. If not, see <http://www.gnu.org/licenses/>. */ package com.willwinder.universalgcodesender.services; import com.willwinder.universalgcodesender.model.BackendAPI; import com.willwinder.universalgcodesender.model.UnitUtils.Units; /** * * @author wwinder */ public class JogService { private double stepSizeXY = 1; private double stepSizeZ = 1; private double feedRate = 1; private Units units; private final BackendAPI backend; public JogService(BackendAPI backend) { this.backend = backend; // Init from settings. stepSizeXY = backend.getSettings().getManualModeStepSize(); stepSizeZ = backend.getSettings().getzJogStepSize(); feedRate = backend.getSettings().getJogFeedRate(); units = Units.getUnit(backend.getSettings().getDefaultUnits()); } public void increaseStepSize() { if (stepSizeXY >= 1) { stepSizeXY++; } else if (stepSizeXY >= 0.1) { stepSizeXY = stepSizeXY + 0.1; } else if (stepSizeXY >= 0.01) { stepSizeXY = stepSizeXY + 0.01; } else { stepSizeXY = 0.01; } setStepSize(stepSizeXY); } public void decreaseStepSize() { if (stepSizeXY > 1) { stepSizeXY--; } else if (stepSizeXY > 0.1) { stepSizeXY = stepSizeXY - 0.1; } else if (stepSizeXY > 0.01) { stepSizeXY = stepSizeXY - 0.01; } setStepSize(stepSizeXY); } public void divideStepSize() { if (stepSizeXY > 100) { stepSizeXY = 100; } else if (stepSizeXY <= 100 && stepSizeXY > 10) { stepSizeXY = 10; } else if (stepSizeXY <= 10 && stepSizeXY > 1) { stepSizeXY = 1; } else if (stepSizeXY <= 1 && stepSizeXY > 0.1) { stepSizeXY = 0.1; } else if (stepSizeXY <= 0.1 ) { stepSizeXY = 0.01; } setStepSize(stepSizeXY); } public void multiplyStepSize() { if (stepSizeXY < 0.01) { stepSizeXY = 0.01; } else if (stepSizeXY >= 0.01 && stepSizeXY < 0.1) { stepSizeXY = 0.1; } else if (stepSizeXY >= 0.1 && stepSizeXY < 1) { stepSizeXY = 1; } else if (stepSizeXY >= 1 && stepSizeXY < 10) { stepSizeXY = 10; } else if (stepSizeXY >= 10) { stepSizeXY = 100; } setStepSize(stepSizeXY); } public void setStepSize(double size) { this.stepSizeXY = size; backend.getSettings().setManualModeStepSize(stepSizeXY); } public void setStepSizeZ(double size) { this.stepSizeZ = size; backend.getSettings().setzJogStepSize(stepSizeZ); } public void setFeedRate(double rate) { this.feedRate = rate; backend.getSettings().setJogFeedRate(feedRate); } public void setUnits(Units units) { this.units = units; if (units != null) { backend.getSettings().setDefaultUnits(units.abbreviation); } } public Units getUnits() { return this.units; } /** * Adjusts the Z axis location. */ public void adjustManualLocation(int x, int y, int z, double stepSize) { try { this.backend.adjustManualLocation(x, y, z, stepSize, feedRate, units); } catch (Exception e) { //NotifyDescriptor nd = new NotifyDescriptor.Message(e.getMessage(), NotifyDescriptor.ERROR_MESSAGE); //DialogDisplayer.getDefault().notify(nd); } } /** * Adjusts the Z axis location. * @param z direction. */ public void adjustManualLocationZ(int z) { try { double stepSize = stepSizeZ; if (!this.backend.getSettings().useZStepSize()) { stepSize = stepSizeXY; } this.backend.adjustManualLocation(0, 0, z, stepSize, feedRate, units); } catch (Exception e) { //NotifyDescriptor nd = new NotifyDescriptor.Message(e.getMessage(), NotifyDescriptor.ERROR_MESSAGE); //DialogDisplayer.getDefault().notify(nd); } } /** * Adjusts the XY axis location. * @param z direction. */ public void adjustManualLocationXY(int x, int y) { try { this.backend.adjustManualLocation(x, y, 0, stepSizeXY, feedRate, units); } catch (Exception e) { //NotifyDescriptor nd = new NotifyDescriptor.Message(e.getMessage(), NotifyDescriptor.ERROR_MESSAGE); //DialogDisplayer.getDefault().notify(nd); } } public boolean canJog() { return backend.isConnected() && !backend.isSendingFile(); } }