package com.marginallyclever.makelangeloRobot.converters;
import java.io.IOException;
import java.io.Writer;
import javax.swing.JPanel;
import com.jogamp.opengl.GL2;
import com.marginallyclever.makelangeloRobot.TransformedImage;
import com.marginallyclever.makelangeloRobot.loadAndSave.LoadAndSaveImage;
import com.marginallyclever.makelangeloRobot.ImageManipulator;
import com.marginallyclever.makelangeloRobot.MakelangeloRobotDecorator;
import com.marginallyclever.makelangeloRobot.settings.MakelangeloRobotSettings;
/**
* Converts a BufferedImage to gcode
*
* Image converters have to be listed in
* src/main/resources/META-INF/services/com.marginallyclever.makelangeloRobot.generators.ImageConverter
* in order to be found by the ServiceLoader. This is so that you could write an independent plugin and
* drop it in the same folder as makelangelo software to be "found" by the software.
*
* Don't forget http://www.reverb-marketing.com/wiki/index.php/When_a_new_style_has_been_added_to_the_Makelangelo_software
* @author Dan Royer
*
*/
public abstract class ImageConverter extends ImageManipulator implements MakelangeloRobotDecorator {
TransformedImage sourceImage;
LoadAndSaveImage loadAndSave;
boolean keepIterating=false;
public void setLoadAndSave(LoadAndSaveImage arg0) {
loadAndSave = arg0;
}
/**
* set the image to be transformed.
* @param img the <code>java.awt.image.BufferedImage</code> this filter is using as source material.
*/
public void setImage(TransformedImage img) {
sourceImage=img;
}
/**
* iterative and non-iterative solvers use this method to restart the conversion process.
*/
public void reconvert() {
loadAndSave.reconvert();
}
/**
* run one "step" of an iterative image conversion process.
* @return true if conversion should iterate again.
*/
public boolean iterate() {
return false;
}
public void stopIterating() {
keepIterating=false;
}
/**
* for "run once" converters, return do the entire conversion and write to disk.
* for iterative solvers, the iteration is now done, write to disk.
* @param out the Writer to receive the generated gcode.
*/
public void finish(Writer out) throws IOException {}
/**
* @return the gui panel with options for this manipulator
*/
public JPanel getPanel() {
return null;
}
/**
* live preview as the system is converting pictures.
* draw the results as the calculation is being performed.
*/
public void render(GL2 gl2, MakelangeloRobotSettings settings) {}
}