package org.myrobotlab.service;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JSlider;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import org.myrobotlab.framework.Service;
import org.myrobotlab.framework.ServiceType;
import org.myrobotlab.logging.Level;
import org.myrobotlab.logging.LoggerFactory;
import org.myrobotlab.logging.Logging;
import org.myrobotlab.logging.LoggingFactory;
import org.myrobotlab.service.Python.Script;
import org.slf4j.Logger;
/**
* InMoovGestureCreator - This is a helper service to create gestures for the
* InMoov It has a swing based gui that allows you to set servo angles on the
* InMoov to create new gestures.
*
* @author LunDev (github), Ma. Vo. (MyRobotlab)
*/
public class InMoovGestureCreator extends Service {
public static class FrameItemHolder {
int rthumb, rindex, rmajeure, rringfinger, rpinky, rwrist;
int rbicep, rrotate, rshoulder, romoplate;
int lthumb, lindex, lmajeure, lringfinger, lpinky, lwrist;
int lbicep, lrotate, lshoulder, lomoplate;
int neck, rothead, eyeX, eyeY, jaw;
int topStom, midStom, lowStom;
double rthumbspeed, rindexspeed, rmajeurespeed, rringfingerspeed, rpinkyspeed, rwristspeed;
double rbicepspeed, rrotatespeed, rshoulderspeed, romoplatespeed;
double lthumbspeed, lindexspeed, lmajeurespeed, lringfingerspeed, lpinkyspeed, lwristspeed;
double lbicepspeed, lrotatespeed, lshoulderspeed, lomoplatespeed;
double neckspeed, rotheadspeed, eyeXspeed, eyeYspeed, jawspeed;
double topStomspeed, midStomspeed, lowStomspeed;
int sleep;
String speech;
String name;
}
public static class PythonItemHolder {
String code;
boolean modifyable;
boolean function;
boolean notfunction;
}
public static class ServoItemHolder {
public JLabel fin;
public JLabel min;
public JLabel res;
public JLabel max;
public JSlider sli;
public JLabel akt;
public JTextField spe;
}
private static final long serialVersionUID = 1L;
public final static Logger log = LoggerFactory.getLogger(InMoovGestureCreator.class);
transient ServoItemHolder[][] servoitemholder;
transient ArrayList<FrameItemHolder> frameitemholder;
transient ArrayList<PythonItemHolder> pythonitemholder;
boolean[] tabs_main_checkbox_states;
boolean moverealtime = false;
InMoov i01;
String pythonscript;
String pythonname;
String referencename;
public static void main(String[] args) throws InterruptedException {
LoggingFactory.init(Level.INFO);
try {
Runtime.start("gui", "GUIService");
Runtime.start("inmoovgesturecreator", "InMoovGestureCreator");
} catch (Exception e) {
Logging.logError(e);
}
}
public InMoovGestureCreator(String n) {
super(n);
// intializing variables
servoitemholder = new ServoItemHolder[6][];
frameitemholder = new ArrayList<FrameItemHolder>();
pythonitemholder = new ArrayList<PythonItemHolder>();
tabs_main_checkbox_states = new boolean[6];
}
public void control_addgest(JList control_list, JTextField control_gestname, JTextField control_funcname) {
// Add the current gesture to the script (button bottom-left)
String defname = control_funcname.getText();
String gestname = control_gestname.getText();
String code = "";
for (FrameItemHolder fih : frameitemholder) {
String code1;
if (fih.sleep != -1) {
code1 = " sleep(" + fih.sleep + ")\n";
} else if (fih.speech != null) {
code1 = " " + pythonname + ".mouth.speakBlocking(\"" + fih.speech + "\")\n";
} else if (fih.name != null) {
String code11 = "";
String code12 = "";
String code13 = "";
String code14 = "";
String code15 = "";
String code16 = "";
if (tabs_main_checkbox_states[0]) {
code11 = " " + pythonname + ".moveHead(" + fih.neck + "," + fih.rothead + "," + fih.eyeX + "," + fih.eyeY + "," + fih.jaw + ")\n";
}
if (tabs_main_checkbox_states[1]) {
code12 = " " + pythonname + ".moveArm(\"left\"," + fih.lbicep + "," + fih.lrotate + "," + fih.lshoulder + "," + fih.lomoplate + ")\n";
}
if (tabs_main_checkbox_states[2]) {
code13 = " " + pythonname + ".moveArm(\"right\"," + fih.rbicep + "," + fih.rrotate + "," + fih.rshoulder + "," + fih.romoplate + ")\n";
}
if (tabs_main_checkbox_states[3]) {
code14 = " " + pythonname + ".moveHand(\"left\"," + fih.lthumb + "," + fih.lindex + "," + fih.lmajeure + "," + fih.lringfinger + "," + fih.lpinky + "," + fih.lwrist
+ ")\n";
}
if (tabs_main_checkbox_states[4]) {
code15 = " " + pythonname + ".moveHand(\"right\"," + fih.rthumb + "," + fih.rindex + "," + fih.rmajeure + "," + fih.rringfinger + "," + fih.rpinky + "," + fih.rwrist
+ ")\n";
}
if (tabs_main_checkbox_states[5]) {
code16 = " " + pythonname + ".moveTorso(" + fih.topStom + "," + fih.midStom + "," + fih.lowStom + ")\n";
}
code1 = code11 + code12 + code13 + code14 + code15 + code16;
} else {
String code11 = "";
String code12 = "";
String code13 = "";
String code14 = "";
String code15 = "";
String code16 = "";
if (tabs_main_checkbox_states[0]) {
code11 = " " + pythonname + ".setHeadSpeed(" + fih.neckspeed + "," + fih.rotheadspeed + "," + fih.eyeXspeed + "," + fih.eyeYspeed + "," + fih.jawspeed + ")\n";
}
if (tabs_main_checkbox_states[1]) {
code12 = " " + pythonname + ".setArmSpeed(\"left\"," + fih.lbicepspeed + "," + fih.lrotatespeed + "," + fih.lshoulderspeed + "," + fih.lomoplatespeed + ")\n";
}
if (tabs_main_checkbox_states[2]) {
code13 = " " + pythonname + ".setArmSpeed(\"right\"," + fih.rbicepspeed + "," + fih.rrotatespeed + "," + fih.rshoulderspeed + "," + fih.romoplatespeed + ")\n";
}
if (tabs_main_checkbox_states[3]) {
code14 = " " + pythonname + ".setHandSpeed(\"left\"," + fih.lthumbspeed + "," + fih.lindexspeed + "," + fih.lmajeurespeed + "," + fih.lringfingerspeed + ","
+ fih.lpinkyspeed + "," + fih.lwristspeed + ")\n";
}
if (tabs_main_checkbox_states[4]) {
code15 = " " + pythonname + ".setHandSpeed(\"right\"," + fih.rthumbspeed + "," + fih.rindexspeed + "," + fih.rmajeurespeed + "," + fih.rringfingerspeed + ","
+ fih.rpinkyspeed + "," + fih.rwristspeed + ")\n";
}
if (tabs_main_checkbox_states[5]) {
code16 = " " + pythonname + ".setTorsoSpeed(" + fih.topStomspeed + "," + fih.midStomspeed + "," + fih.lowStomspeed + ")\n";
}
code1 = code11 + code12 + code13 + code14 + code15 + code16;
}
code = code + code1;
}
String finalcode = "def " + defname + "():\n" + code;
String insert = "ear.addCommand(\"" + gestname + "\", \"python\", \"" + defname + "\")";
int posear = pythonscript.lastIndexOf("ear.addCommand");
int pos = pythonscript.indexOf("\n", posear);
pythonscript = pythonscript.substring(0, pos) + "\n" + insert + pythonscript.substring(pos, pythonscript.length());
pythonscript = pythonscript + "\n" + finalcode;
parsescript(control_list);
}
public void control_connect(JButton control_connect) {
// Connect / Disconnect to / from the InMoov service (button
// bottom-left)
if (control_connect.getText().equals("Connect")) {
if (referencename == null) {
referencename = "i01";
}
i01 = (InMoov) Runtime.getService(referencename);
control_connect.setText("Disconnect");
} else {
i01 = null;
control_connect.setText("Connect");
}
}
public void control_loadgest(JList control_list, JList framelist, JTextField control_gestname, JTextField control_funcname) {
// Load the current gesture from the script (button bottom-left)
int posl = control_list.getSelectedIndex();
if (posl != -1) {
if (pythonitemholder.get(posl).modifyable) {
frameitemholder.clear();
String defname = null;
String code = pythonitemholder.get(posl).code;
String[] codesplit = code.split("\n");
FrameItemHolder fih = null;
boolean ismove = false;
boolean isspeed = false;
boolean head = false;
boolean rhand = false;
boolean lhand = false;
boolean rarm = false;
boolean larm = false;
boolean torso = false;
boolean keepgoing = true;
int pos = 0;
while (keepgoing) {
if (fih == null) {
fih = new FrameItemHolder();
}
String line;
if (pos < codesplit.length) {
line = codesplit[pos];
} else {
line = "pweicmfh - only one run";
keepgoing = false;
}
String linewithoutspace = line.replace(" ", "");
if (linewithoutspace.equals("")) {
pos++;
continue;
}
String line2 = line.replace(" ", "");
if (!(ismove) && !(isspeed)) {
if (line2.startsWith("def")) {
String defn = line.substring(line.indexOf(" ") + 1, line.lastIndexOf("():"));
defname = defn;
pos++;
} else if (line2.startsWith("sleep")) {
String sleeptime = line.substring(line.indexOf("(") + 1, line.lastIndexOf(")"));
fih.sleep = Integer.parseInt(sleeptime);
fih.speech = null;
fih.name = null;
frameitemholder.add(fih);
fih = null;
pos++;
} else if (line2.startsWith(pythonname)) {
if (line2.startsWith(pythonname + ".mouth.speak")) {
fih.sleep = -1;
fih.speech = line.substring(line.indexOf("(") + 1, line.lastIndexOf(")"));
fih.name = null;
frameitemholder.add(fih);
fih = null;
pos++;
} else if (line2.startsWith(pythonname + ".move")) {
ismove = true;
String good = line2.substring(line2.indexOf("(") + 1, line2.lastIndexOf(")"));
String[] goodsplit = good.split(",");
if (line2.startsWith(pythonname + ".moveHead")) {
fih.neck = Integer.parseInt(goodsplit[0]);
fih.rothead = Integer.parseInt(goodsplit[1]);
if (goodsplit.length > 2) {
fih.eyeX = Integer.parseInt(goodsplit[2]);
fih.eyeY = Integer.parseInt(goodsplit[3]);
fih.jaw = Integer.parseInt(goodsplit[4]);
} else {
fih.eyeX = 90;
fih.eyeY = 90;
fih.jaw = 90;
}
head = true;
pos++;
} else if (line2.startsWith(pythonname + ".moveHand")) {
String gs = goodsplit[0];
String side = gs.substring(gs.indexOf("\"") + 1, gs.lastIndexOf("\""));
if (side.equals("right")) {
fih.rthumb = Integer.parseInt(goodsplit[1]);
fih.rindex = Integer.parseInt(goodsplit[2]);
fih.rmajeure = Integer.parseInt(goodsplit[3]);
fih.rringfinger = Integer.parseInt(goodsplit[4]);
fih.rpinky = Integer.parseInt(goodsplit[5]);
if (goodsplit.length > 6) {
fih.rwrist = Integer.parseInt(goodsplit[6]);
} else {
fih.rwrist = 90;
}
rhand = true;
pos++;
} else if (side.equals("left")) {
fih.lthumb = Integer.parseInt(goodsplit[1]);
fih.lindex = Integer.parseInt(goodsplit[2]);
fih.lmajeure = Integer.parseInt(goodsplit[3]);
fih.lringfinger = Integer.parseInt(goodsplit[4]);
fih.lpinky = Integer.parseInt(goodsplit[5]);
if (goodsplit.length > 6) {
fih.lwrist = Integer.parseInt(goodsplit[6]);
} else {
fih.lwrist = 90;
}
lhand = true;
pos++;
}
} else if (line2.startsWith(pythonname + ".moveArm")) {
String gs = goodsplit[0];
String side = gs.substring(gs.indexOf("\"") + 1, gs.lastIndexOf("\""));
if (side.equals("right")) {
fih.rbicep = Integer.parseInt(goodsplit[1]);
fih.rrotate = Integer.parseInt(goodsplit[2]);
fih.rshoulder = Integer.parseInt(goodsplit[3]);
fih.romoplate = Integer.parseInt(goodsplit[4]);
rarm = true;
pos++;
} else if (side.equals("left")) {
fih.lbicep = Integer.parseInt(goodsplit[1]);
fih.lrotate = Integer.parseInt(goodsplit[2]);
fih.lshoulder = Integer.parseInt(goodsplit[3]);
fih.lomoplate = Integer.parseInt(goodsplit[4]);
larm = true;
pos++;
}
} else if (line2.startsWith(pythonname + ".moveTorso")) {
fih.topStom = Integer.parseInt(goodsplit[0]);
fih.midStom = Integer.parseInt(goodsplit[1]);
fih.lowStom = Integer.parseInt(goodsplit[2]);
torso = true;
pos++;
}
} else if (line2.startsWith(pythonname + ".set")) {
isspeed = true;
String good = line2.substring(line2.indexOf("(") + 1, line2.lastIndexOf(")"));
String[] goodsplit = good.split(",");
if (line2.startsWith(pythonname + ".setHeadSpeed")) {
fih.neckspeed = Float.parseFloat(goodsplit[0]);
fih.rotheadspeed = Float.parseFloat(goodsplit[1]);
if (goodsplit.length > 2) {
fih.eyeXspeed = Float.parseFloat(goodsplit[2]);
fih.eyeYspeed = Float.parseFloat(goodsplit[3]);
fih.jawspeed = Float.parseFloat(goodsplit[4]);
} else {
fih.eyeXspeed = 1.0f;
fih.eyeYspeed = 1.0f;
fih.jawspeed = 1.0f;
}
head = true;
pos++;
} else if (line2.startsWith(pythonname + ".setHandSpeed")) {
String gs = goodsplit[0];
String side = gs.substring(gs.indexOf("\"") + 1, gs.lastIndexOf("\""));
if (side.equals("right")) {
fih.rthumbspeed = Float.parseFloat(goodsplit[1]);
fih.rindexspeed = Float.parseFloat(goodsplit[2]);
fih.rmajeurespeed = Float.parseFloat(goodsplit[3]);
fih.rringfingerspeed = Float.parseFloat(goodsplit[4]);
fih.rpinkyspeed = Float.parseFloat(goodsplit[5]);
if (goodsplit.length > 6) {
fih.rwristspeed = Float.parseFloat(goodsplit[6]);
} else {
fih.rwristspeed = 1.0f;
}
rhand = true;
pos++;
} else if (side.equals("left")) {
fih.lthumbspeed = Float.parseFloat(goodsplit[1]);
fih.lindexspeed = Float.parseFloat(goodsplit[2]);
fih.lmajeurespeed = Float.parseFloat(goodsplit[3]);
fih.lringfingerspeed = Float.parseFloat(goodsplit[4]);
fih.lpinkyspeed = Float.parseFloat(goodsplit[5]);
if (goodsplit.length > 6) {
fih.lwristspeed = Float.parseFloat(goodsplit[6]);
} else {
fih.lwristspeed = 1.0f;
}
lhand = true;
pos++;
}
} else if (line2.startsWith(pythonname + ".setArmSpeed")) {
String gs = goodsplit[0];
String side = gs.substring(gs.indexOf("\"") + 1, gs.lastIndexOf("\""));
if (side.equals("right")) {
fih.rbicepspeed = Float.parseFloat(goodsplit[1]);
fih.rrotatespeed = Float.parseFloat(goodsplit[2]);
fih.rshoulderspeed = Float.parseFloat(goodsplit[3]);
fih.romoplatespeed = Float.parseFloat(goodsplit[4]);
rarm = true;
pos++;
} else if (side.equals("left")) {
fih.lbicepspeed = Float.parseFloat(goodsplit[1]);
fih.lrotatespeed = Float.parseFloat(goodsplit[2]);
fih.lshoulderspeed = Float.parseFloat(goodsplit[3]);
fih.lomoplatespeed = Float.parseFloat(goodsplit[4]);
larm = true;
pos++;
}
} else if (line2.startsWith(pythonname + ".setTorsoSpeed")) {
fih.topStomspeed = Float.parseFloat(goodsplit[0]);
fih.midStomspeed = Float.parseFloat(goodsplit[1]);
fih.lowStomspeed = Float.parseFloat(goodsplit[2]);
torso = true;
pos++;
}
}
}
} else if (ismove && !(isspeed)) {
if (line2.startsWith(pythonname + ".move")) {
String good = line2.substring(line2.indexOf("(") + 1, line2.lastIndexOf(")"));
String[] goodsplit = good.split(",");
if (line2.startsWith(pythonname + ".moveHead")) {
fih.neck = Integer.parseInt(goodsplit[0]);
fih.rothead = Integer.parseInt(goodsplit[1]);
if (goodsplit.length > 2) {
fih.eyeX = Integer.parseInt(goodsplit[2]);
fih.eyeY = Integer.parseInt(goodsplit[3]);
fih.jaw = Integer.parseInt(goodsplit[4]);
} else {
fih.eyeX = 90;
fih.eyeY = 90;
fih.jaw = 90;
}
head = true;
pos++;
} else if (line2.startsWith(pythonname + ".moveHand")) {
String gs = goodsplit[0];
String side = gs.substring(gs.indexOf("\"") + 1, gs.lastIndexOf("\""));
if (side.equals("right")) {
fih.rthumb = Integer.parseInt(goodsplit[1]);
fih.rindex = Integer.parseInt(goodsplit[2]);
fih.rmajeure = Integer.parseInt(goodsplit[3]);
fih.rringfinger = Integer.parseInt(goodsplit[4]);
fih.rpinky = Integer.parseInt(goodsplit[5]);
if (goodsplit.length > 6) {
fih.rwrist = Integer.parseInt(goodsplit[6]);
} else {
fih.rwrist = 90;
}
rhand = true;
pos++;
} else if (side.equals("left")) {
fih.lthumb = Integer.parseInt(goodsplit[1]);
fih.lindex = Integer.parseInt(goodsplit[2]);
fih.lmajeure = Integer.parseInt(goodsplit[3]);
fih.lringfinger = Integer.parseInt(goodsplit[4]);
fih.lpinky = Integer.parseInt(goodsplit[5]);
if (goodsplit.length > 6) {
fih.lwrist = Integer.parseInt(goodsplit[6]);
} else {
fih.lwrist = 90;
}
lhand = true;
pos++;
}
} else if (line2.startsWith(pythonname + ".moveArm")) {
String gs = goodsplit[0];
String side = gs.substring(gs.indexOf("\"") + 1, gs.lastIndexOf("\""));
if (side.equals("right")) {
fih.rbicep = Integer.parseInt(goodsplit[1]);
fih.rrotate = Integer.parseInt(goodsplit[2]);
fih.rshoulder = Integer.parseInt(goodsplit[3]);
fih.romoplate = Integer.parseInt(goodsplit[4]);
rarm = true;
pos++;
} else if (side.equals("left")) {
fih.lbicep = Integer.parseInt(goodsplit[1]);
fih.lrotate = Integer.parseInt(goodsplit[2]);
fih.lshoulder = Integer.parseInt(goodsplit[3]);
fih.lomoplate = Integer.parseInt(goodsplit[4]);
larm = true;
pos++;
}
} else if (line2.startsWith(pythonname + ".moveTorso")) {
fih.topStom = Integer.parseInt(goodsplit[0]);
fih.midStom = Integer.parseInt(goodsplit[1]);
fih.lowStom = Integer.parseInt(goodsplit[2]);
torso = true;
pos++;
}
} else {
if (!head) {
fih.neck = 90;
fih.rothead = 90;
fih.eyeX = 90;
fih.eyeY = 90;
fih.jaw = 90;
}
if (!rhand) {
fih.rthumb = 90;
fih.rindex = 90;
fih.rmajeure = 90;
fih.rringfinger = 90;
fih.rpinky = 90;
fih.rwrist = 90;
}
if (!lhand) {
fih.lthumb = 90;
fih.lindex = 90;
fih.lmajeure = 90;
fih.lringfinger = 90;
fih.lpinky = 90;
fih.lwrist = 90;
}
if (!rarm) {
fih.rbicep = 90;
fih.rrotate = 90;
fih.rshoulder = 90;
fih.romoplate = 90;
}
if (!larm) {
fih.lbicep = 90;
fih.lrotate = 90;
fih.lshoulder = 90;
fih.lomoplate = 90;
}
if (!torso) {
fih.topStom = 90;
fih.midStom = 90;
fih.lowStom = 90;
}
fih.sleep = -1;
fih.speech = null;
fih.name = "SEQ";
frameitemholder.add(fih);
fih = null;
ismove = false;
head = false;
rhand = false;
lhand = false;
rarm = false;
larm = false;
torso = false;
}
} else if (!(ismove) && isspeed) {
if (line2.startsWith(pythonname + ".set")) {
String good = line2.substring(line2.indexOf("(") + 1, line2.lastIndexOf(")"));
String[] goodsplit = good.split(",");
if (line2.startsWith(pythonname + ".setHeadSpeed")) {
fih.neckspeed = Float.parseFloat(goodsplit[0]);
fih.rotheadspeed = Float.parseFloat(goodsplit[1]);
if (goodsplit.length > 2) {
fih.eyeXspeed = Float.parseFloat(goodsplit[2]);
fih.eyeYspeed = Float.parseFloat(goodsplit[3]);
fih.jawspeed = Float.parseFloat(goodsplit[4]);
} else {
fih.eyeXspeed = 1.0f;
fih.eyeYspeed = 1.0f;
fih.jawspeed = 1.0f;
}
head = true;
pos++;
} else if (line2.startsWith(pythonname + ".setHandSpeed")) {
String gs = goodsplit[0];
String side = gs.substring(gs.indexOf("\"") + 1, gs.lastIndexOf("\""));
if (side.equals("right")) {
fih.rthumbspeed = Float.parseFloat(goodsplit[1]);
fih.rindexspeed = Float.parseFloat(goodsplit[2]);
fih.rmajeurespeed = Float.parseFloat(goodsplit[3]);
fih.rringfingerspeed = Float.parseFloat(goodsplit[4]);
fih.rpinkyspeed = Float.parseFloat(goodsplit[5]);
if (goodsplit.length > 6) {
fih.rwristspeed = Float.parseFloat(goodsplit[6]);
} else {
fih.rwristspeed = 1.0f;
}
rhand = true;
pos++;
} else if (side.equals("left")) {
fih.lthumbspeed = Float.parseFloat(goodsplit[1]);
fih.lindexspeed = Float.parseFloat(goodsplit[2]);
fih.lmajeurespeed = Float.parseFloat(goodsplit[3]);
fih.lringfingerspeed = Float.parseFloat(goodsplit[4]);
fih.lpinkyspeed = Float.parseFloat(goodsplit[5]);
if (goodsplit.length > 6) {
fih.lwristspeed = Float.parseFloat(goodsplit[6]);
} else {
fih.lwristspeed = 1.0f;
}
lhand = true;
pos++;
}
} else if (line2.startsWith(pythonname + ".setArmSpeed")) {
String gs = goodsplit[0];
String side = gs.substring(gs.indexOf("\"") + 1, gs.lastIndexOf("\""));
if (side.equals("right")) {
fih.rbicepspeed = Float.parseFloat(goodsplit[1]);
fih.rrotatespeed = Float.parseFloat(goodsplit[2]);
fih.rshoulderspeed = Float.parseFloat(goodsplit[3]);
fih.romoplatespeed = Float.parseFloat(goodsplit[4]);
rarm = true;
pos++;
} else if (side.equals("left")) {
fih.lbicepspeed = Float.parseFloat(goodsplit[1]);
fih.lrotatespeed = Float.parseFloat(goodsplit[2]);
fih.lshoulderspeed = Float.parseFloat(goodsplit[3]);
fih.lomoplatespeed = Float.parseFloat(goodsplit[4]);
larm = true;
pos++;
}
} else if (line2.startsWith(pythonname + ".setTorsoSpeed")) {
fih.topStomspeed = Float.parseFloat(goodsplit[0]);
fih.midStomspeed = Float.parseFloat(goodsplit[1]);
fih.lowStomspeed = Float.parseFloat(goodsplit[2]);
torso = true;
pos++;
}
} else {
if (!head) {
fih.neckspeed = 1.0f;
fih.rotheadspeed = 1.0f;
fih.eyeXspeed = 1.0f;
fih.eyeYspeed = 1.0f;
fih.jawspeed = 1.0f;
}
if (!rhand) {
fih.rthumbspeed = 1.0f;
fih.rindexspeed = 1.0f;
fih.rmajeurespeed = 1.0f;
fih.rringfingerspeed = 1.0f;
fih.rpinkyspeed = 1.0f;
fih.rwristspeed = 1.0f;
}
if (!lhand) {
fih.lthumbspeed = 1.0f;
fih.lindexspeed = 1.0f;
fih.lmajeurespeed = 1.0f;
fih.lringfingerspeed = 1.0f;
fih.lpinkyspeed = 1.0f;
fih.lwristspeed = 1.0f;
}
if (!rarm) {
fih.rbicepspeed = 1.0f;
fih.rrotatespeed = 1.0f;
fih.rshoulderspeed = 1.0f;
fih.romoplatespeed = 1.0f;
}
if (!larm) {
fih.lbicepspeed = 1.0f;
fih.lrotatespeed = 1.0f;
fih.lshoulderspeed = 1.0f;
fih.lomoplatespeed = 1.0f;
}
if (!torso) {
fih.topStomspeed = 1.0f;
fih.midStomspeed = 1.0f;
fih.lowStomspeed = 1.0f;
}
fih.sleep = -1;
fih.speech = null;
fih.name = null;
frameitemholder.add(fih);
fih = null;
isspeed = false;
head = false;
rhand = false;
lhand = false;
rarm = false;
larm = false;
torso = false;
}
} else {
// this shouldn't be reached
// ismove & isspeed true
// wrong
}
}
framelistact(framelist);
int defnamepos = pythonscript.indexOf(defname);
int earpos1 = pythonscript.lastIndexOf("\n", defnamepos);
int earpos2 = pythonscript.indexOf("\n", defnamepos);
String earline = pythonscript.substring(earpos1 + 1, earpos2);
if (earline.startsWith("ear.addCommand")) {
String good = earline.substring(earline.indexOf("("), earline.lastIndexOf(")"));
String[] goodsplit = good.split(",");
String funcnamedirty = goodsplit[0];
String funcname = funcnamedirty.substring(funcnamedirty.indexOf("\"") + 1, funcnamedirty.lastIndexOf("\""));
control_gestname.setText(funcname);
control_funcname.setText(defname);
}
}
}
}
public void control_loadscri(JList control_list) {
// Load the Python-Script (out Python-Service) (button bottom-left)
Python python = (Python) Runtime.getService("python");
Script script = python.getScript();
pythonscript = script.getCode();
parsescript(control_list);
}
public void control_removegest(JList control_list) {
// Remove the selected gesture from the script (button bottom-left)
int posl = control_list.getSelectedIndex();
if (posl != -1) {
if (pythonitemholder.get(posl).function && !pythonitemholder.get(posl).notfunction) {
String codeold = pythonitemholder.get(posl).code;
String defnameold = codeold.substring(codeold.indexOf("def ") + 4, codeold.indexOf("():"));
int olddefpos = pythonscript.indexOf(defnameold);
int pos1 = pythonscript.lastIndexOf("\n", olddefpos);
int pos2 = pythonscript.indexOf("\n", olddefpos);
pythonscript = pythonscript.substring(0, pos1) + pythonscript.substring(pos2, pythonscript.length());
int posscript = pythonscript.lastIndexOf(defnameold);
int posscriptnextdef = pythonscript.indexOf("def", posscript);
if (posscriptnextdef == -1) {
posscriptnextdef = pythonscript.length();
}
pythonscript = pythonscript.substring(0, posscript - 4) + pythonscript.substring(posscriptnextdef - 1, pythonscript.length());
parsescript(control_list);
}
}
}
public void control_savescri() {
// Save the Python-Script (in Python-Service) (button bottom-left)
JFrame frame = new JFrame();
JTextArea textarea = new JTextArea();
textarea.setText(pythonscript);
textarea.setEditable(false);
textarea.setLineWrap(true);
JScrollPane scrollpane = new JScrollPane(textarea);
scrollpane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollpane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
frame.add(scrollpane);
frame.pack();
frame.setVisible(true);
}
public void control_testgest() {
// test (execute) the created gesture (button bottom-left)
if (i01 != null) {
for (FrameItemHolder fih : frameitemholder) {
if (fih.sleep != -1) {
sleep(fih.sleep);
} else if (fih.speech != null) {
try {
i01.mouth.speakBlocking(fih.speech);
} catch (Exception e) {
Logging.logError(e);
}
} else if (fih.name != null) {
if (tabs_main_checkbox_states[0]) {
i01.moveHead(fih.neck, fih.rothead, fih.eyeX, fih.eyeY, fih.jaw);
}
if (tabs_main_checkbox_states[1]) {
i01.moveArm("left", fih.lbicep, fih.lrotate, fih.lshoulder, fih.lomoplate);
}
if (tabs_main_checkbox_states[2]) {
i01.moveArm("right", fih.rbicep, fih.rrotate, fih.rshoulder, fih.romoplate);
}
if (tabs_main_checkbox_states[3]) {
i01.moveHand("left", fih.lthumb, fih.lindex, fih.lmajeure, fih.lringfinger, fih.lpinky, fih.lwrist);
}
if (tabs_main_checkbox_states[4]) {
i01.moveHand("right", fih.rthumb, fih.rindex, fih.rmajeure, fih.rringfinger, fih.rpinky, fih.rwrist);
}
if (tabs_main_checkbox_states[5]) {
i01.moveTorso(fih.topStom, fih.midStom, fih.lowStom);
}
} else {
if (tabs_main_checkbox_states[0]) {
i01.setHeadSpeed(fih.neckspeed, fih.rotheadspeed, fih.eyeXspeed, fih.eyeYspeed, fih.jawspeed);
}
if (tabs_main_checkbox_states[1]) {
i01.setArmSpeed("left", fih.lbicepspeed, fih.lrotatespeed, fih.lshoulderspeed, fih.lomoplatespeed);
}
if (tabs_main_checkbox_states[2]) {
i01.setArmSpeed("right", fih.rbicepspeed, fih.rrotatespeed, fih.rshoulderspeed, fih.romoplatespeed);
}
if (tabs_main_checkbox_states[3]) {
i01.setHandSpeed("left", fih.lthumbspeed, fih.lindexspeed, fih.lmajeurespeed, fih.lringfingerspeed, fih.lpinkyspeed, fih.lwristspeed);
}
if (tabs_main_checkbox_states[4]) {
i01.setHandSpeed("right", fih.rthumbspeed, fih.rindexspeed, fih.rmajeurespeed, fih.rringfingerspeed, fih.rpinkyspeed, fih.rwristspeed);
}
if (tabs_main_checkbox_states[5]) {
i01.setTorsoSpeed(fih.topStomspeed, fih.midStomspeed, fih.lowStomspeed);
}
}
}
}
}
public void control_updategest(JList control_list, JTextField control_gestname, JTextField control_funcname) {
// Update the current gesture in the script (button bottom-left)
int posl = control_list.getSelectedIndex();
if (posl != -1) {
if (pythonitemholder.get(posl).function && !pythonitemholder.get(posl).notfunction) {
String codeold = pythonitemholder.get(posl).code;
String defnameold = codeold.substring(codeold.indexOf("def ") + 4, codeold.indexOf("():"));
String defname = control_funcname.getText();
String gestname = control_gestname.getText();
String code = "";
for (FrameItemHolder fih : frameitemholder) {
String code1;
if (fih.sleep != -1) {
code1 = " sleep(" + fih.sleep + ")\n";
} else if (fih.speech != null) {
code1 = " " + pythonname + ".mouth.speakBlocking(\"" + fih.speech + "\")\n";
} else if (fih.name != null) {
String code11 = "";
String code12 = "";
String code13 = "";
String code14 = "";
String code15 = "";
String code16 = "";
if (tabs_main_checkbox_states[0]) {
code11 = " " + pythonname + ".moveHead(" + fih.neck + "," + fih.rothead + "," + fih.eyeX + "," + fih.eyeY + "," + fih.jaw + ")\n";
}
if (tabs_main_checkbox_states[1]) {
code12 = " " + pythonname + ".moveArm(\"left\"," + fih.lbicep + "," + fih.lrotate + "," + fih.lshoulder + "," + fih.lomoplate + ")\n";
}
if (tabs_main_checkbox_states[2]) {
code13 = " " + pythonname + ".moveArm(\"right\"," + fih.rbicep + "," + fih.rrotate + "," + fih.rshoulder + "," + fih.romoplate + ")\n";
}
if (tabs_main_checkbox_states[3]) {
code14 = " " + pythonname + ".moveHand(\"left\"," + fih.lthumb + "," + fih.lindex + "," + fih.lmajeure + "," + fih.lringfinger + "," + fih.lpinky + ","
+ fih.lwrist + ")\n";
}
if (tabs_main_checkbox_states[4]) {
code15 = " " + pythonname + ".moveHand(\"right\"," + fih.rthumb + "," + fih.rindex + "," + fih.rmajeure + "," + fih.rringfinger + "," + fih.rpinky + ","
+ fih.rwrist + ")\n";
}
if (tabs_main_checkbox_states[5]) {
code16 = " " + pythonname + ".moveTorso(" + fih.topStom + "," + fih.midStom + "," + fih.lowStom + ")\n";
}
code1 = code11 + code12 + code13 + code14 + code15 + code16;
} else {
String code11 = "";
String code12 = "";
String code13 = "";
String code14 = "";
String code15 = "";
String code16 = "";
if (tabs_main_checkbox_states[0]) {
code11 = " " + pythonname + ".setHeadSpeed(" + fih.neckspeed + "," + fih.rotheadspeed + "," + fih.eyeXspeed + "," + fih.eyeYspeed + "," + fih.jawspeed + ")\n";
}
if (tabs_main_checkbox_states[1]) {
code12 = " " + pythonname + ".setArmSpeed(\"left\"," + fih.lbicepspeed + "," + fih.lrotatespeed + "," + fih.lshoulderspeed + "," + fih.lomoplatespeed + ")\n";
}
if (tabs_main_checkbox_states[2]) {
code13 = " " + pythonname + ".setArmSpeed(\"right\"," + fih.rbicepspeed + "," + fih.rrotatespeed + "," + fih.rshoulderspeed + "," + fih.romoplatespeed + ")\n";
}
if (tabs_main_checkbox_states[3]) {
code14 = " " + pythonname + ".setHandSpeed(\"left\"," + fih.lthumbspeed + "," + fih.lindexspeed + "," + fih.lmajeurespeed + "," + fih.lringfingerspeed + ","
+ fih.lpinkyspeed + "," + fih.lwristspeed + ")\n";
}
if (tabs_main_checkbox_states[4]) {
code15 = " " + pythonname + ".setHandSpeed(\"right\"," + fih.rthumbspeed + "," + fih.rindexspeed + "," + fih.rmajeurespeed + "," + fih.rringfingerspeed + ","
+ fih.rpinkyspeed + "," + fih.rwristspeed + ")\n";
}
if (tabs_main_checkbox_states[5]) {
code16 = " " + pythonname + ".setTorsoSpeed(" + fih.topStomspeed + "," + fih.midStomspeed + "," + fih.lowStomspeed + ")\n";
}
code1 = code11 + code12 + code13 + code14 + code15 + code16;
}
code = code + code1;
}
String finalcode = "def " + defname + "():\n" + code;
String insert = "ear.addCommand(\"" + gestname + "\", \"python\", \"" + defname + "\")";
int olddefpos = pythonscript.indexOf(defnameold);
int pos1 = pythonscript.lastIndexOf("\n", olddefpos);
int pos2 = pythonscript.indexOf("\n", olddefpos);
pythonscript = pythonscript.substring(0, pos1) + "\n" + insert + pythonscript.substring(pos2, pythonscript.length());
int posscript = pythonscript.lastIndexOf(defnameold);
int posscriptnextdef = pythonscript.indexOf("def", posscript);
if (posscriptnextdef == -1) {
posscriptnextdef = pythonscript.length();
}
pythonscript = pythonscript.substring(0, posscript - 4) + "\n" + finalcode + pythonscript.substring(posscriptnextdef - 1, pythonscript.length());
parsescript(control_list);
}
}
}
public void controllistact(JList control_list) {
String[] listdata = new String[pythonitemholder.size()];
for (int i = 0; i < pythonitemholder.size(); i++) {
PythonItemHolder pih = pythonitemholder.get(i);
String pre;
if (!(pih.modifyable)) {
pre = "X ";
} else {
pre = " ";
}
int he = 21;
if (pih.code.length() < he) {
he = pih.code.length();
}
String des = pih.code.substring(0, he);
String displaytext = pre + des;
listdata[i] = displaytext;
}
control_list.setListData(listdata);
}
public void frame_add(JList framelist, JTextField frame_add_textfield) {
// Add a servo movement frame to the framelist (button bottom-right)
FrameItemHolder fih = new FrameItemHolder();
fih.rthumb = servoitemholder[0][0].sli.getValue();
fih.rindex = servoitemholder[0][1].sli.getValue();
fih.rmajeure = servoitemholder[0][2].sli.getValue();
fih.rringfinger = servoitemholder[0][3].sli.getValue();
fih.rpinky = servoitemholder[0][4].sli.getValue();
fih.rwrist = servoitemholder[0][5].sli.getValue();
fih.rbicep = servoitemholder[1][0].sli.getValue();
fih.rrotate = servoitemholder[1][1].sli.getValue();
fih.rshoulder = servoitemholder[1][2].sli.getValue();
fih.romoplate = servoitemholder[1][3].sli.getValue();
fih.lthumb = servoitemholder[2][0].sli.getValue();
fih.lindex = servoitemholder[2][1].sli.getValue();
fih.lmajeure = servoitemholder[2][2].sli.getValue();
fih.lringfinger = servoitemholder[2][3].sli.getValue();
fih.lpinky = servoitemholder[2][4].sli.getValue();
fih.lwrist = servoitemholder[2][5].sli.getValue();
fih.lbicep = servoitemholder[3][0].sli.getValue();
fih.lrotate = servoitemholder[3][1].sli.getValue();
fih.lshoulder = servoitemholder[3][2].sli.getValue();
fih.lomoplate = servoitemholder[3][3].sli.getValue();
fih.neck = servoitemholder[4][0].sli.getValue();
fih.rothead = servoitemholder[4][1].sli.getValue();
fih.eyeX = servoitemholder[4][2].sli.getValue();
fih.eyeY = servoitemholder[4][3].sli.getValue();
fih.jaw = servoitemholder[4][4].sli.getValue();
fih.topStom = servoitemholder[5][0].sli.getValue();
fih.midStom = servoitemholder[5][1].sli.getValue();
fih.lowStom = servoitemholder[5][2].sli.getValue();
fih.sleep = -1;
fih.speech = null;
fih.name = frame_add_textfield.getText();
frameitemholder.add(fih);
framelistact(framelist);
}
public void frame_addsleep(JList framelist, JTextField frame_addsleep_textfield) {
// Add a sleep frame to the framelist (button bottom-right)
FrameItemHolder fih = new FrameItemHolder();
fih.sleep = Integer.parseInt(frame_addsleep_textfield.getText());
fih.speech = null;
fih.name = null;
frameitemholder.add(fih);
framelistact(framelist);
}
public void frame_addspeech(JList framelist, JTextField frame_addspeech_textfield) {
// Add a speech frame to the framelist (button bottom-right)
FrameItemHolder fih = new FrameItemHolder();
fih.sleep = -1;
fih.speech = frame_addspeech_textfield.getText();
fih.name = null;
frameitemholder.add(fih);
framelistact(framelist);
}
public void frame_addspeed(JList framelist) {
// Add a speed setting frame to the framelist (button bottom-right)
FrameItemHolder fih = new FrameItemHolder();
fih.rthumbspeed = Float.parseFloat(servoitemholder[0][0].spe.getText());
fih.rindexspeed = Float.parseFloat(servoitemholder[0][1].spe.getText());
fih.rmajeurespeed = Float.parseFloat(servoitemholder[0][2].spe.getText());
fih.rringfingerspeed = Float.parseFloat(servoitemholder[0][3].spe.getText());
fih.rpinkyspeed = Float.parseFloat(servoitemholder[0][4].spe.getText());
fih.rwristspeed = Float.parseFloat(servoitemholder[0][5].spe.getText());
fih.rbicepspeed = Float.parseFloat(servoitemholder[1][0].spe.getText());
fih.rrotatespeed = Float.parseFloat(servoitemholder[1][1].spe.getText());
fih.rshoulderspeed = Float.parseFloat(servoitemholder[1][2].spe.getText());
fih.romoplatespeed = Float.parseFloat(servoitemholder[1][3].spe.getText());
fih.lthumbspeed = Float.parseFloat(servoitemholder[2][0].spe.getText());
fih.lindexspeed = Float.parseFloat(servoitemholder[2][1].spe.getText());
fih.lmajeurespeed = Float.parseFloat(servoitemholder[2][2].spe.getText());
fih.lringfingerspeed = Float.parseFloat(servoitemholder[2][3].spe.getText());
fih.lpinkyspeed = Float.parseFloat(servoitemholder[2][4].spe.getText());
fih.lwristspeed = Float.parseFloat(servoitemholder[2][5].spe.getText());
fih.lbicepspeed = Float.parseFloat(servoitemholder[3][0].spe.getText());
fih.lrotatespeed = Float.parseFloat(servoitemholder[3][1].spe.getText());
fih.lshoulderspeed = Float.parseFloat(servoitemholder[3][2].spe.getText());
fih.lomoplatespeed = Float.parseFloat(servoitemholder[3][3].spe.getText());
fih.neckspeed = Float.parseFloat(servoitemholder[4][0].spe.getText());
fih.rotheadspeed = Float.parseFloat(servoitemholder[4][1].spe.getText());
fih.eyeXspeed = Float.parseFloat(servoitemholder[4][2].spe.getText());
fih.eyeYspeed = Float.parseFloat(servoitemholder[4][3].spe.getText());
fih.jawspeed = Float.parseFloat(servoitemholder[4][4].spe.getText());
fih.topStomspeed = Float.parseFloat(servoitemholder[5][0].spe.getText());
fih.midStomspeed = Float.parseFloat(servoitemholder[5][1].spe.getText());
fih.lowStomspeed = Float.parseFloat(servoitemholder[5][2].spe.getText());
fih.sleep = -1;
fih.speech = null;
fih.name = null;
frameitemholder.add(fih);
framelistact(framelist);
}
public void frame_copy(JList framelist) {
// Copy this frame on the framelist (button bottom-right)
int pos = framelist.getSelectedIndex();
if (pos != -1) {
FrameItemHolder fih = frameitemholder.get(pos);
frameitemholder.add(fih);
framelistact(framelist);
}
}
public void frame_down(JList framelist) {
// Move this frame one down on the framelist (button bottom-right)
int pos = framelist.getSelectedIndex();
if (pos != -1) {
FrameItemHolder fih = frameitemholder.remove(pos);
frameitemholder.add(pos + 1, fih);
framelistact(framelist);
}
}
public void frame_importminresmax() {
// Import the Min- / Res- / Max- settings of your InMoov
if (i01 != null) {
for (int i1 = 0; i1 < servoitemholder.length; i1++) {
for (int i2 = 0; i2 < servoitemholder[i1].length; i2++) {
InMoovHand inmhand = null;
InMoovArm inmarm = null;
InMoovHead inmhead = null;
InMoovTorso inmtorso = null;
if (i1 == 0) {
inmhand = i01.rightHand;
} else if (i1 == 1) {
inmarm = i01.rightArm;
} else if (i1 == 2) {
inmhand = i01.leftHand;
} else if (i1 == 3) {
inmarm = i01.rightArm;
} else if (i1 == 4) {
inmhead = i01.head;
} else if (i1 == 5) {
inmtorso = i01.torso;
}
Servo servo = null;
if (i1 == 0 || i1 == 2) {
if (i2 == 0) {
servo = inmhand.thumb;
} else if (i2 == 1) {
servo = inmhand.index;
} else if (i2 == 2) {
servo = inmhand.majeure;
} else if (i2 == 3) {
servo = inmhand.ringFinger;
} else if (i2 == 4) {
servo = inmhand.pinky;
} else if (i2 == 5) {
servo = inmhand.wrist;
}
} else if (i1 == 1 || i1 == 3) {
if (i2 == 0) {
servo = inmarm.bicep;
} else if (i2 == 1) {
servo = inmarm.rotate;
} else if (i2 == 2) {
servo = inmarm.shoulder;
} else if (i2 == 3) {
servo = inmarm.omoplate;
}
} else if (i1 == 4) {
if (i2 == 0) {
servo = inmhead.neck;
} else if (i2 == 1) {
servo = inmhead.rothead;
} else if (i2 == 2) {
servo = inmhead.eyeX;
} else if (i2 == 3) {
servo = inmhead.eyeY;
} else if (i2 == 4) {
servo = inmhead.jaw;
}
} else if (i1 == 5) {
if (i2 == 0) {
servo = inmtorso.topStom;
} else if (i2 == 1) {
servo = inmtorso.midStom;
} else if (i2 == 2) {
servo = inmtorso.lowStom;
}
}
Double min = servo.getMin();
int res = servo.getRest();
Double max = servo.getMax();
servoitemholder[i1][i2].min.setText(min + "");
servoitemholder[i1][i2].res.setText(res + "");
servoitemholder[i1][i2].max.setText(max + "");
// servoitemholder[i1][i2].sli.setMinimum(min);
// servoitemholder[i1][i2].sli.setMaximum(max);
// servoitemholder[i1][i2].sli.setValue(res);
}
}
}
}
public void frame_load(JList framelist, JTextField frame_add_textfield, JTextField frame_addsleep_textfield, JTextField frame_addspeech_textfield) {
// Load this frame from the framelist (button bottom-right)
int pos = framelist.getSelectedIndex();
if (pos != -1) {
// sleep || speech || servo movement || speed setting
if (frameitemholder.get(pos).sleep != -1) {
frame_addsleep_textfield.setText(frameitemholder.get(pos).sleep + "");
} else if (frameitemholder.get(pos).speech != null) {
frame_addspeech_textfield.setText(frameitemholder.get(pos).speech);
} else if (frameitemholder.get(pos).name != null) {
servoitemholder[0][0].sli.setValue(frameitemholder.get(pos).rthumb);
servoitemholder[0][1].sli.setValue(frameitemholder.get(pos).rindex);
servoitemholder[0][2].sli.setValue(frameitemholder.get(pos).rmajeure);
servoitemholder[0][3].sli.setValue(frameitemholder.get(pos).rringfinger);
servoitemholder[0][4].sli.setValue(frameitemholder.get(pos).rpinky);
servoitemholder[0][5].sli.setValue(frameitemholder.get(pos).rwrist);
servoitemholder[1][0].sli.setValue(frameitemholder.get(pos).rbicep);
servoitemholder[1][1].sli.setValue(frameitemholder.get(pos).rrotate);
servoitemholder[1][2].sli.setValue(frameitemholder.get(pos).rshoulder);
servoitemholder[1][3].sli.setValue(frameitemholder.get(pos).romoplate);
servoitemholder[2][0].sli.setValue(frameitemholder.get(pos).lthumb);
servoitemholder[2][1].sli.setValue(frameitemholder.get(pos).lindex);
servoitemholder[2][2].sli.setValue(frameitemholder.get(pos).lmajeure);
servoitemholder[2][3].sli.setValue(frameitemholder.get(pos).lringfinger);
servoitemholder[2][4].sli.setValue(frameitemholder.get(pos).lpinky);
servoitemholder[2][5].sli.setValue(frameitemholder.get(pos).lwrist);
servoitemholder[3][0].sli.setValue(frameitemholder.get(pos).lbicep);
servoitemholder[3][1].sli.setValue(frameitemholder.get(pos).lrotate);
servoitemholder[3][2].sli.setValue(frameitemholder.get(pos).lshoulder);
servoitemholder[3][3].sli.setValue(frameitemholder.get(pos).lomoplate);
servoitemholder[4][0].sli.setValue(frameitemholder.get(pos).neck);
servoitemholder[4][1].sli.setValue(frameitemholder.get(pos).rothead);
servoitemholder[4][2].sli.setValue(frameitemholder.get(pos).eyeX);
servoitemholder[4][3].sli.setValue(frameitemholder.get(pos).eyeY);
servoitemholder[4][4].sli.setValue(frameitemholder.get(pos).jaw);
servoitemholder[5][0].sli.setValue(frameitemholder.get(pos).topStom);
servoitemholder[5][1].sli.setValue(frameitemholder.get(pos).midStom);
servoitemholder[5][2].sli.setValue(frameitemholder.get(pos).lowStom);
frame_add_textfield.setText(frameitemholder.get(pos).name);
} else {
servoitemholder[0][0].spe.setText(frameitemholder.get(pos).rthumbspeed + "");
servoitemholder[0][1].spe.setText(frameitemholder.get(pos).rindexspeed + "");
servoitemholder[0][2].spe.setText(frameitemholder.get(pos).rmajeurespeed + "");
servoitemholder[0][3].spe.setText(frameitemholder.get(pos).rringfingerspeed + "");
servoitemholder[0][4].spe.setText(frameitemholder.get(pos).rpinkyspeed + "");
servoitemholder[0][5].spe.setText(frameitemholder.get(pos).rwristspeed + "");
servoitemholder[1][0].spe.setText(frameitemholder.get(pos).rbicepspeed + "");
servoitemholder[1][1].spe.setText(frameitemholder.get(pos).rrotatespeed + "");
servoitemholder[1][2].spe.setText(frameitemholder.get(pos).rshoulderspeed + "");
servoitemholder[1][3].spe.setText(frameitemholder.get(pos).romoplatespeed + "");
servoitemholder[2][0].spe.setText(frameitemholder.get(pos).lthumbspeed + "");
servoitemholder[2][1].spe.setText(frameitemholder.get(pos).lindexspeed + "");
servoitemholder[2][2].spe.setText(frameitemholder.get(pos).lmajeurespeed + "");
servoitemholder[2][3].spe.setText(frameitemholder.get(pos).lringfingerspeed + "");
servoitemholder[2][4].spe.setText(frameitemholder.get(pos).lpinkyspeed + "");
servoitemholder[2][5].spe.setText(frameitemholder.get(pos).lwristspeed + "");
servoitemholder[3][0].spe.setText(frameitemholder.get(pos).lbicepspeed + "");
servoitemholder[3][1].spe.setText(frameitemholder.get(pos).lrotatespeed + "");
servoitemholder[3][2].spe.setText(frameitemholder.get(pos).lshoulderspeed + "");
servoitemholder[3][3].spe.setText(frameitemholder.get(pos).lomoplatespeed + "");
servoitemholder[4][0].spe.setText(frameitemholder.get(pos).neckspeed + "");
servoitemholder[4][1].spe.setText(frameitemholder.get(pos).rotheadspeed + "");
servoitemholder[4][2].spe.setText(frameitemholder.get(pos).eyeXspeed + "");
servoitemholder[4][3].spe.setText(frameitemholder.get(pos).eyeYspeed + "");
servoitemholder[4][4].spe.setText(frameitemholder.get(pos).jawspeed + "");
servoitemholder[5][0].spe.setText(frameitemholder.get(pos).topStomspeed + "");
servoitemholder[5][1].spe.setText(frameitemholder.get(pos).midStomspeed + "");
servoitemholder[5][2].spe.setText(frameitemholder.get(pos).lowStomspeed + "");
}
}
}
public void frame_moverealtime(JCheckBox frame_moverealtime) {
moverealtime = frame_moverealtime.isSelected();
}
public void frame_remove(JList framelist) {
// Remove this frame from the framelist (button bottom-right)
int pos = framelist.getSelectedIndex();
if (pos != -1) {
frameitemholder.remove(pos);
framelistact(framelist);
}
}
public void frame_test(JList framelist) {
// Test this frame (execute)
int pos = framelist.getSelectedIndex();
if (i01 != null && pos != -1) {
FrameItemHolder fih = frameitemholder.get(pos);
// sleep || speech || servo movement || speed setting
if (fih.sleep != -1) {
sleep(fih.sleep);
} else if (fih.speech != null) {
try {
i01.mouth.speakBlocking(fih.speech);
} catch (Exception e) {
Logging.logError(e);
}
} else if (fih.name != null) {
if (tabs_main_checkbox_states[0]) {
i01.moveHead(fih.neck, fih.rothead, fih.eyeX, fih.eyeY, fih.jaw);
}
if (tabs_main_checkbox_states[1]) {
i01.moveArm("left", fih.lbicep, fih.lrotate, fih.lshoulder, fih.lomoplate);
}
if (tabs_main_checkbox_states[2]) {
i01.moveArm("right", fih.rbicep, fih.rrotate, fih.rshoulder, fih.romoplate);
}
if (tabs_main_checkbox_states[3]) {
i01.moveHand("left", fih.lthumb, fih.lindex, fih.lmajeure, fih.lringfinger, fih.lpinky, fih.lwrist);
}
if (tabs_main_checkbox_states[4]) {
i01.moveHand("right", fih.rthumb, fih.rindex, fih.rmajeure, fih.rringfinger, fih.rpinky, fih.rwrist);
}
if (tabs_main_checkbox_states[5]) {
i01.moveTorso(fih.topStom, fih.midStom, fih.lowStom);
}
} else {
if (tabs_main_checkbox_states[0]) {
i01.setHeadSpeed(fih.neckspeed, fih.rotheadspeed, fih.eyeXspeed, fih.eyeYspeed, fih.jawspeed);
}
if (tabs_main_checkbox_states[1]) {
i01.setArmSpeed("left", fih.lbicepspeed, fih.lrotatespeed, fih.lshoulderspeed, fih.lomoplatespeed);
}
if (tabs_main_checkbox_states[2]) {
i01.setArmSpeed("right", fih.rbicepspeed, fih.rrotatespeed, fih.rshoulderspeed, fih.romoplatespeed);
}
if (tabs_main_checkbox_states[3]) {
i01.setHandSpeed("left", fih.lthumbspeed, fih.lindexspeed, fih.lmajeurespeed, fih.lringfingerspeed, fih.lpinkyspeed, fih.lwristspeed);
}
if (tabs_main_checkbox_states[4]) {
i01.setHandSpeed("right", fih.rthumbspeed, fih.rindexspeed, fih.rmajeurespeed, fih.rringfingerspeed, fih.rpinkyspeed, fih.rwristspeed);
}
if (tabs_main_checkbox_states[5]) {
i01.setTorsoSpeed(fih.topStomspeed, fih.midStomspeed, fih.lowStomspeed);
}
}
}
}
public void frame_up(JList framelist) {
// Move this frame one up on the framelist (button bottom-right)
int pos = framelist.getSelectedIndex();
if (pos != -1) {
FrameItemHolder fih = frameitemholder.remove(pos);
frameitemholder.add(pos - 1, fih);
framelistact(framelist);
}
}
public void frame_update(JList framelist, JTextField frame_add_textfield, JTextField frame_addsleep_textfield, JTextField frame_addspeech_textfield) {
// Update this frame on the framelist (button bottom-right)
int pos = framelist.getSelectedIndex();
if (pos != -1) {
FrameItemHolder fih = new FrameItemHolder();
// sleep || speech || servo movement || speed setting
if (frameitemholder.get(pos).sleep != -1) {
fih.sleep = Integer.parseInt(frame_addsleep_textfield.getText());
fih.speech = null;
fih.name = null;
} else if (frameitemholder.get(pos).speech != null) {
fih.sleep = -1;
fih.speech = frame_addspeech_textfield.getText();
fih.name = null;
} else if (frameitemholder.get(pos).name != null) {
fih.rthumb = servoitemholder[0][0].sli.getValue();
fih.rindex = servoitemholder[0][1].sli.getValue();
fih.rmajeure = servoitemholder[0][2].sli.getValue();
fih.rringfinger = servoitemholder[0][3].sli.getValue();
fih.rpinky = servoitemholder[0][4].sli.getValue();
fih.rwrist = servoitemholder[0][5].sli.getValue();
fih.rbicep = servoitemholder[1][0].sli.getValue();
fih.rrotate = servoitemholder[1][1].sli.getValue();
fih.rshoulder = servoitemholder[1][2].sli.getValue();
fih.romoplate = servoitemholder[1][3].sli.getValue();
fih.lthumb = servoitemholder[2][0].sli.getValue();
fih.lindex = servoitemholder[2][1].sli.getValue();
fih.lmajeure = servoitemholder[2][2].sli.getValue();
fih.lringfinger = servoitemholder[2][3].sli.getValue();
fih.lpinky = servoitemholder[2][4].sli.getValue();
fih.lwrist = servoitemholder[2][5].sli.getValue();
fih.lbicep = servoitemholder[3][0].sli.getValue();
fih.lrotate = servoitemholder[3][1].sli.getValue();
fih.lshoulder = servoitemholder[3][2].sli.getValue();
fih.lomoplate = servoitemholder[3][3].sli.getValue();
fih.neck = servoitemholder[4][0].sli.getValue();
fih.rothead = servoitemholder[4][1].sli.getValue();
fih.eyeX = servoitemholder[4][2].sli.getValue();
fih.eyeY = servoitemholder[4][3].sli.getValue();
fih.jaw = servoitemholder[4][4].sli.getValue();
fih.topStom = servoitemholder[5][0].sli.getValue();
fih.midStom = servoitemholder[5][1].sli.getValue();
fih.lowStom = servoitemholder[5][2].sli.getValue();
fih.sleep = -1;
fih.speech = null;
fih.name = frame_add_textfield.getText();
} else {
fih.rthumbspeed = Float.parseFloat(servoitemholder[0][0].spe.getText());
fih.rindexspeed = Float.parseFloat(servoitemholder[0][1].spe.getText());
fih.rmajeurespeed = Float.parseFloat(servoitemholder[0][2].spe.getText());
fih.rringfingerspeed = Float.parseFloat(servoitemholder[0][3].spe.getText());
fih.rpinkyspeed = Float.parseFloat(servoitemholder[0][4].spe.getText());
fih.rwristspeed = Float.parseFloat(servoitemholder[0][5].spe.getText());
fih.rbicepspeed = Float.parseFloat(servoitemholder[1][0].spe.getText());
fih.rrotatespeed = Float.parseFloat(servoitemholder[1][1].spe.getText());
fih.rshoulderspeed = Float.parseFloat(servoitemholder[1][2].spe.getText());
fih.romoplatespeed = Float.parseFloat(servoitemholder[1][3].spe.getText());
fih.lthumbspeed = Float.parseFloat(servoitemholder[2][0].spe.getText());
fih.lindexspeed = Float.parseFloat(servoitemholder[2][1].spe.getText());
fih.lmajeurespeed = Float.parseFloat(servoitemholder[2][2].spe.getText());
fih.lringfingerspeed = Float.parseFloat(servoitemholder[2][3].spe.getText());
fih.lpinkyspeed = Float.parseFloat(servoitemholder[2][4].spe.getText());
fih.lwristspeed = Float.parseFloat(servoitemholder[2][5].spe.getText());
fih.lbicepspeed = Float.parseFloat(servoitemholder[3][0].spe.getText());
fih.lrotatespeed = Float.parseFloat(servoitemholder[3][1].spe.getText());
fih.lshoulderspeed = Float.parseFloat(servoitemholder[3][2].spe.getText());
fih.lomoplatespeed = Float.parseFloat(servoitemholder[3][3].spe.getText());
fih.neckspeed = Float.parseFloat(servoitemholder[4][0].spe.getText());
fih.rotheadspeed = Float.parseFloat(servoitemholder[4][1].spe.getText());
fih.eyeXspeed = Float.parseFloat(servoitemholder[4][2].spe.getText());
fih.eyeYspeed = Float.parseFloat(servoitemholder[4][3].spe.getText());
fih.jawspeed = Float.parseFloat(servoitemholder[4][4].spe.getText());
fih.topStomspeed = Float.parseFloat(servoitemholder[5][0].spe.getText());
fih.midStomspeed = Float.parseFloat(servoitemholder[5][1].spe.getText());
fih.lowStomspeed = Float.parseFloat(servoitemholder[5][2].spe.getText());
fih.sleep = -1;
fih.speech = null;
fih.name = null;
}
frameitemholder.set(pos, fih);
framelistact(framelist);
}
}
public void framelistact(JList framelist) {
// Re-Build the framelist
String[] listdata = new String[frameitemholder.size()];
for (int i = 0; i < frameitemholder.size(); i++) {
FrameItemHolder fih = frameitemholder.get(i);
String displaytext = "";
// servo movement || sleep || speech || speed setting
if (fih.sleep != -1) {
displaytext = "SLEEP " + fih.sleep;
} else if (fih.speech != null) {
displaytext = "SPEECH " + fih.speech;
} else if (fih.name != null) {
String displaytext1 = "";
String displaytext2 = "";
String displaytext3 = "";
String displaytext4 = "";
String displaytext5 = "";
String displaytext6 = "";
if (tabs_main_checkbox_states[0]) {
displaytext1 = fih.rthumb + " " + fih.rindex + " " + fih.rmajeure + " " + fih.rringfinger + " " + fih.rpinky + " " + fih.rwrist;
}
if (tabs_main_checkbox_states[1]) {
displaytext2 = fih.rbicep + " " + fih.rrotate + " " + fih.rshoulder + " " + fih.romoplate;
}
if (tabs_main_checkbox_states[2]) {
displaytext3 = fih.lthumb + " " + fih.lindex + " " + fih.lmajeure + " " + fih.lringfinger + " " + fih.lpinky + " " + fih.lwrist;
}
if (tabs_main_checkbox_states[3]) {
displaytext4 = fih.lbicep + " " + fih.lrotate + " " + fih.lshoulder + " " + fih.lomoplate;
}
if (tabs_main_checkbox_states[4]) {
displaytext5 = fih.neck + " " + fih.rothead + " " + fih.eyeX + " " + fih.eyeY + " " + fih.jaw;
}
if (tabs_main_checkbox_states[5]) {
displaytext6 = fih.topStom + " " + fih.midStom + " " + fih.lowStom;
}
displaytext = fih.name + ": " + displaytext1 + " | " + displaytext2 + " | " + displaytext3 + " | " + displaytext4 + " | " + displaytext5 + " | " + displaytext6;
} else {
String displaytext1 = "";
String displaytext2 = "";
String displaytext3 = "";
String displaytext4 = "";
String displaytext5 = "";
String displaytext6 = "";
if (tabs_main_checkbox_states[0]) {
displaytext1 = fih.rthumbspeed + " " + fih.rindexspeed + " " + fih.rmajeurespeed + " " + fih.rringfingerspeed + " " + fih.rpinkyspeed + " " + fih.rwristspeed;
}
if (tabs_main_checkbox_states[1]) {
displaytext2 = fih.rbicepspeed + " " + fih.rrotatespeed + " " + fih.rshoulderspeed + " " + fih.romoplatespeed;
}
if (tabs_main_checkbox_states[2]) {
displaytext3 = fih.lthumbspeed + " " + fih.lindexspeed + " " + fih.lmajeurespeed + " " + fih.lringfingerspeed + " " + fih.lpinkyspeed + " " + fih.lwristspeed;
}
if (tabs_main_checkbox_states[3]) {
displaytext4 = fih.lbicepspeed + " " + fih.lrotatespeed + " " + fih.lshoulderspeed + " " + fih.lomoplatespeed;
}
if (tabs_main_checkbox_states[4]) {
displaytext5 = fih.neckspeed + " " + fih.rotheadspeed + " " + fih.eyeXspeed + " " + fih.eyeYspeed + " " + fih.jawspeed;
}
if (tabs_main_checkbox_states[5]) {
displaytext6 = fih.topStomspeed + " " + fih.midStomspeed + " " + fih.lowStomspeed;
}
displaytext = "SPEED " + displaytext1 + " | " + displaytext2 + " | " + displaytext3 + " | " + displaytext4 + " | " + displaytext5 + " | " + displaytext6;
}
listdata[i] = displaytext;
}
framelist.setListData(listdata);
}
public void parsescript(JList control_list) {
pythonitemholder.clear();
if (true) {
String pscript = pythonscript;
String[] pscriptsplit = pscript.split("\n");
// get the name of the InMoov-reference
for (String line : pscriptsplit) {
if (line.contains(" = Runtime.createAndStart(") || line.contains("Runtime.start(")) {
if (line.contains(", \"InMoov\")")) {
pythonname = line.substring(0, line.indexOf(" = "));
referencename = line.substring(line.indexOf("(\"") + 2, line.indexOf("\", \"InMoov\")"));
}
}
}
PythonItemHolder pih = null;
boolean keepgoing = true;
int pos = 0;
while (keepgoing) {
if (pih == null) {
pih = new PythonItemHolder();
}
if (pos >= pscriptsplit.length) {
keepgoing = false;
break;
}
String line = pscriptsplit[pos];
String linewithoutspace = line.replace(" ", "");
if (linewithoutspace.equals("")) {
pos++;
continue;
}
if (linewithoutspace.startsWith("#")) {
pih.code = pih.code + "\n" + line;
pos++;
continue;
}
line = line.replace(" ", " "); // 2 -> 4
line = line.replace(" ", " "); // 3 -> 4
line = line.replace(" ", " "); // 5 -> 4
line = line.replace(" ", " "); // 6 -> 4
if (!(pih.function) && !(pih.notfunction)) {
if (line.startsWith("def")) {
pih.function = true;
pih.notfunction = false;
pih.modifyable = false;
pih.code = line;
pos++;
} else {
pih.notfunction = true;
pih.function = false;
pih.modifyable = false;
pih.code = line;
pos++;
}
} else if (pih.function && !(pih.notfunction)) {
if (line.startsWith(" ")) {
pih.code = pih.code + "\n" + line;
pos++;
} else {
pythonitemholder.add(pih);
pih = null;
}
} else if (!(pih.function) && pih.notfunction) {
if (!(line.startsWith("def"))) {
pih.code = pih.code + "\n" + line;
pos++;
} else {
pythonitemholder.add(pih);
pih = null;
}
} else {
// it should never end here ...
// .function & .notfunction true ...
// would be wrong ...
}
}
pythonitemholder.add(pih);
}
if (true) {
ArrayList<PythonItemHolder> pythonitemholder1 = pythonitemholder;
pythonitemholder = new ArrayList<PythonItemHolder>();
for (PythonItemHolder pih : pythonitemholder1) {
if (pih.function && !(pih.notfunction)) {
String code = pih.code;
String[] codesplit = code.split("\n");
String code2 = "";
for (String line : codesplit) {
line = line.replace(" ", "");
if (line.startsWith("def")) {
line = "";
} else if (line.startsWith("sleep")) {
line = "";
} else if (line.startsWith(pythonname)) {
if (line.startsWith(pythonname + ".move")) {
if (line.startsWith(pythonname + ".moveHead")) {
line = "";
} else if (line.startsWith(pythonname + ".moveHand")) {
line = "";
} else if (line.startsWith(pythonname + ".moveArm")) {
line = "";
} else if (line.startsWith(pythonname + ".moveTorso")) {
line = "";
}
} else if (line.startsWith(pythonname + ".set")) {
if (line.startsWith(pythonname + ".setHeadSpeed")) {
line = "";
} else if (line.startsWith(pythonname + ".setHandSpeed")) {
line = "";
} else if (line.startsWith(pythonname + ".setArmSpeed")) {
line = "";
} else if (line.startsWith(pythonname + ".setTorsoSpeed")) {
line = "";
}
} else if (line.startsWith(pythonname + ".mouth.speak")) {
line = "";
}
}
code2 = code2 + line;
}
if (code2.length() > 0) {
pih.modifyable = false;
} else {
pih.modifyable = true;
}
} else if (!(pih.function) && pih.notfunction) {
pih.modifyable = false;
} else {
// shouldn't get here
// both true or both false
// wrong
}
pythonitemholder.add(pih);
}
}
controllistact(control_list);
}
public void servoitemholder_set_sih1(int i1, ServoItemHolder[] sih1) {
// Setting references
servoitemholder[i1] = sih1;
}
public void servoitemholder_slider_changed(int t1, int t2) {
// One slider were adjusted
servoitemholder[t1][t2].akt.setText(servoitemholder[t1][t2].sli.getValue() + "");
// Move the Servos in "Real-Time"
if (moverealtime && i01 != null) {
FrameItemHolder fih = new FrameItemHolder();
fih.rthumb = servoitemholder[0][0].sli.getValue();
fih.rindex = servoitemholder[0][1].sli.getValue();
fih.rmajeure = servoitemholder[0][2].sli.getValue();
fih.rringfinger = servoitemholder[0][3].sli.getValue();
fih.rpinky = servoitemholder[0][4].sli.getValue();
fih.rwrist = servoitemholder[0][5].sli.getValue();
fih.rbicep = servoitemholder[1][0].sli.getValue();
fih.rrotate = servoitemholder[1][1].sli.getValue();
fih.rshoulder = servoitemholder[1][2].sli.getValue();
fih.romoplate = servoitemholder[1][3].sli.getValue();
fih.lthumb = servoitemholder[2][0].sli.getValue();
fih.lindex = servoitemholder[2][1].sli.getValue();
fih.lmajeure = servoitemholder[2][2].sli.getValue();
fih.lringfinger = servoitemholder[2][3].sli.getValue();
fih.lpinky = servoitemholder[2][4].sli.getValue();
fih.lwrist = servoitemholder[2][5].sli.getValue();
fih.lbicep = servoitemholder[3][0].sli.getValue();
fih.lrotate = servoitemholder[3][1].sli.getValue();
fih.lshoulder = servoitemholder[3][2].sli.getValue();
fih.lomoplate = servoitemholder[3][3].sli.getValue();
fih.neck = servoitemholder[4][0].sli.getValue();
fih.rothead = servoitemholder[4][1].sli.getValue();
fih.eyeX = servoitemholder[4][2].sli.getValue();
fih.eyeY = servoitemholder[4][3].sli.getValue();
fih.jaw = servoitemholder[4][4].sli.getValue();
fih.topStom = servoitemholder[5][0].sli.getValue();
fih.midStom = servoitemholder[5][1].sli.getValue();
fih.lowStom = servoitemholder[5][2].sli.getValue();
if (tabs_main_checkbox_states[0]) {
i01.moveHead(fih.neck, fih.rothead, fih.eyeX, fih.eyeY, fih.jaw);
}
if (tabs_main_checkbox_states[1]) {
i01.moveArm("left", fih.lbicep, fih.lrotate, fih.lshoulder, fih.lomoplate);
}
if (tabs_main_checkbox_states[2]) {
i01.moveArm("right", fih.rbicep, fih.rrotate, fih.rshoulder, fih.romoplate);
}
if (tabs_main_checkbox_states[3]) {
i01.moveHand("left", fih.lthumb, fih.lindex, fih.lmajeure, fih.lringfinger, fih.lpinky, fih.lwrist);
}
if (tabs_main_checkbox_states[4]) {
i01.moveHand("right", fih.rthumb, fih.rindex, fih.rmajeure, fih.rringfinger, fih.rpinky, fih.rwrist);
}
if (tabs_main_checkbox_states[5]) {
i01.moveTorso(fih.topStom, fih.midStom, fih.lowStom);
}
}
}
public void tabs_main_checkbox_states_changed(boolean[] tabs_main_checkbox_states2) {
// checkbox states (on the main site) (for the services) changed
tabs_main_checkbox_states = tabs_main_checkbox_states2;
}
/**
* This static method returns all the details of the class without it having
* to be constructed. It has description, categories, dependencies, and peer
* definitions.
*
* @return ServiceType - returns all the data
*
*/
static public ServiceType getMetaData() {
ServiceType meta = new ServiceType(InMoovGestureCreator.class.getCanonicalName());
meta.addDescription("an easier way to create gestures for InMoov");
meta.addCategory("robot");
return meta;
}
}