plugins.haesleinhuepf.Recorder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of clicy Show documentation
Show all versions of clicy Show documentation
CLIJ2 bridge to Icy sequences and protocols
The newest version!
package plugins.haesleinhuepf;
import gnu.trove.map.custom_hash.TObjectLongCustomHashMap;
import icy.main.Icy;
import icy.script.ScriptEditor;
import icy.sequence.Sequence;
import ij.IJ;
import net.haesleinhuepf.clicy.CLICY;
import net.haesleinhuepf.clicy.converters.SequenceToClearCLBufferConverter;
import net.haesleinhuepf.clij.clearcl.ClearCL;
import net.haesleinhuepf.clij.clearcl.ClearCLBuffer;
import net.haesleinhuepf.clij.coremem.enums.NativeTypeEnum;
import org.scijava.ui.swing.script.PromptPane;
import plugins.adufour.ezplug.*;
import plugins.tprovoost.scripteditor.main.ScriptEditorPlugin;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
public class Recorder extends EzPlug {
EzVarText commandList = new EzVarText("Commands");
static TextArea area = null;
public static String getBufferNameFromSequenceName(Sequence sequence) {
String sequenceName = niceName("sequence", sequence);
if (bufferNamesOfSequences.containsKey(sequenceName)) {
String bufferName = bufferNamesOfSequences.get(sequenceName);
//IJ.log("registering " + sequenceName + " with " + bufferName);
return bufferName;
} else {
return null;
}
}
@Override
public void clean() {
}
@Override
public void execute() {
ScriptEditorPlugin.openInScriptEditor(area.getText() + "\n\n//Clean up memory\nclij2.clear();", niceName("new ", new Object()));
}
@Override
protected void initialize() {
if (area == null) {
area = new TextArea();
}
addEzComponent(new EzComponent(""){
@Override
protected void addTo(Container container) {
container.add(area);
area.setPreferredSize(new Dimension(200, 150));
}
@Override
public void setToolTipText(String s) {
}
});
}
public static void recordCommand(String command, Object[] args) {
if (area != null) {
initRecorder();
String log = "clij2." + command.replace("CLIJx_", "").replace("CLIJ2_", "").replace("CLIJ_", "") + "(";
int count = 0;
for (Object arg : args) {
if (count > 0) {
log = log + ", ";
}
if (arg instanceof ClearCLBuffer) {
log = log + niceName("buffer", arg);
} else if (arg instanceof String) {
log = log + "\"" + ((String) arg).replace("\"", "\\\"") + "\"";
} else {
log = log + arg;
}
count++;
}
record(log + ");\n");
}
}
public static void recordPush(Sequence sequence, ClearCLBuffer buffer) {
initRecorder();
String sequenceName = niceName("sequence", sequence);
if (area != null) {
if (!area.getText().contains(sequenceName + " = clij2.pull" )) {
record("" + sequenceName + " = getSequence();\n");
}
String bufferName = niceName("buffer", buffer);
record("" + bufferName + " = clij2.pushSequence(" + sequenceName + ");\n");
//IJ.log("sequenceA " + sequenceName + bufferName);
bufferNamesOfSequences.put(sequenceName, bufferName);
}
}
public static void recordPull(Sequence sequence, ClearCLBuffer buffer) {
initRecorder();
String sequenceName = niceName("sequence", sequence);
String bufferName = niceName("buffer", buffer);
record("" + sequenceName + " = clij2.pullSequence(" + bufferName + ");\n");
record("Icy.addSequence(" + sequenceName + ");\n");
//IJ.log("sequenceB " + sequenceName + bufferName);
bufferNamesOfSequences.put(sequenceName, bufferName);
}
public static void recordCreate(ClearCLBuffer buffer) {
initRecorder();
String type = "Float";
if (buffer.getNativeType() == NativeTypeEnum.Byte) {
type = "Byte";
} else if (buffer.getNativeType() == NativeTypeEnum.UnsignedShort) {
type = "UnsignedShort";
}
if (buffer.getDimension() == 2) {
record(niceName("buffer", buffer) + " = clij2.create([" + buffer.getWidth() + ", " + buffer.getHeight() + "], clij2." + type + ");\n");
} else {
record(niceName("buffer", buffer) + " = clij2.create([" + buffer.getWidth() + ", " + buffer.getHeight() + ", " + buffer.getDepth() + "], clij2." + type + ");\n");
}
}
public static void recordRelease(ClearCLBuffer buffer) {
initRecorder();
if (area != null) {
record("clij2.release(" + niceName("buffer", buffer) + ");\n");
}
}
public static void initRecorder() {
if (area != null && !area.getText().contains("CLICY")) {
niceNames.clear();
bufferNamesOfSequences.clear();
record("importClass(net.haesleinhuepf.clicy.CLICY);\n" +
"importClass(Packages.icy.main.Icy);\n" +
"clij2 = CLICY.getInstance();\n");
}
}
private static HashMap bufferNamesOfSequences = new HashMap<>();
private static HashMap niceNames = new HashMap<>();
public static String niceName(String type, Object object) {
String key = object.toString();
String value = "";
if (niceNames.containsKey(key)) {
value = niceNames.get(key);
} else {
value = type + (niceNames.size() + 1);
niceNames.put(key, value);
}
return value;
}
public static void record(String text) {
if (area != null) {
area.append(text);
}
}
}