package mocap.gui; import java.awt.BorderLayout; import java.awt.GridLayout; import java.text.DecimalFormat; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; import javax.vecmath.Point3d; import mocap.figure.Bone; import mocap.figure.Figure; import mocap.player.PlayerFrameListener; /** * * @author Michael Kipp */ public class JointInspector extends JFrame implements PlayerFrameListener { private JLabel _rpos, _tpos, _hpos, _x, _y, _z; private DecimalFormat _fm = new DecimalFormat("##.##"); private Point3d _p = new Point3d(); private Bone _bone, _root, _thorax; public JointInspector(Figure figure, Bone bone) { _bone = bone; _root = figure.getSkeleton(); _thorax = figure.getSkeleton().findBone("thorax"); figure.getPlayer().addListener(this); setTitle("Inspect: " + bone.getName()); JLabel head = new JLabel("Joint: " + _bone.getName(), SwingConstants.CENTER); head.setBorder(BorderFactory.createEmptyBorder(10,10,5,10)); JPanel p = new JPanel(); p.setBorder(BorderFactory.createEmptyBorder(10,10,5,10)); _rpos = new JLabel("root: -- "); _tpos = new JLabel("thorax: -- "); _hpos = new JLabel("hand: -- "); _x = new JLabel("x: --"); _y = new JLabel("y: --"); _z = new JLabel("z: --"); p.setLayout(new GridLayout(0,1)); p.add(_rpos); p.add(_tpos); p.add(_hpos); p.add(_x); p.add(_y); p.add(_z); setLayout(new BorderLayout()); add(head, BorderLayout.NORTH); add(p, BorderLayout.CENTER); pack(); setVisible(true); } public void frameUpdate(int framenumber) { _bone.getWorldPosition(_p); Point3d rootpos = new Point3d(); Point3d rel = new Point3d(); Point3d tho = new Point3d(); Point3d thopos = new Point3d(); Point3d hpos = new Point3d(); _root.getWorldPosition(rootpos); _thorax.getWorldPosition(thopos); _bone.getRelativeTransPosition(_root, rel); _bone.getRelativeTransPosition(_thorax, tho); _bone.getWorldPosition(hpos); _rpos.setText("root: (" + _fm.format(rootpos.x) + ", " + _fm.format(rootpos.y) + ", " + _fm.format(rootpos.z) + ")"); _tpos.setText("thorax: (" + _fm.format(thopos.x) + ", " + _fm.format(thopos.y) + ", " + _fm.format(thopos.z) + ")"); _hpos.setText("hand: (" + _fm.format(hpos.x) + ", " + _fm.format(hpos.y) + ", " + _fm.format(hpos.z) + ")"); _x.setText("x: " + _fm.format(_p.x) + " rx: " + _fm.format(rel.x) + " tx: " + _fm.format(tho.x)); _y.setText("y: " + _fm.format(_p.y) + " ry: " + _fm.format(rel.y) + " ty: " + _fm.format(tho.y)); _z.setText("z: " +_fm.format(_p.z) + " rz: " + _fm.format(rel.z) + " txz " + _fm.format(tho.z)); } }