package org.jnect.demo.incquery; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.databinding.observable.Realm; import org.eclipse.core.databinding.observable.set.IObservableSet; import org.eclipse.core.databinding.observable.set.ISetChangeListener; import org.eclipse.core.databinding.observable.set.SetChangeEvent; import org.eclipse.incquery.databinding.runtime.api.IncQueryHeadlessRealm; import org.eclipse.incquery.databinding.runtime.api.IncQueryObservables; import org.eclipse.incquery.runtime.api.IncQueryEngine; import org.eclipse.incquery.runtime.exception.IncQueryException; import org.jnect.core.KinectManager; import bodymodel.RightHandAboveHeadMatch; import bodymodel.RightHandAboveHeadMatcher; //import bodymodel.jump.JumpMatcher; /** * * @author istvanrath * */ public class StartIncQueryDemoHandler extends AbstractHandler { @Override public Object execute(ExecutionEvent event) throws ExecutionException { if (KinectManager.INSTANCE.isSkeletonTrackingStarted()) { // move head to 0,0 // KinectManager.INSTANCE.getSkeletonModel().getHead().setX(0); // KinectManager.INSTANCE.getSkeletonModel().getHead().setY(0); try { IncQueryEngine e = IncQueryEngine.on(KinectManager.INSTANCE.getSkeletonModel()); RightHandAboveHeadMatcher matcher = RightHandAboveHeadMatcher.on(e); /* final DeltaMonitor<RightHandAboveHeadMatch> dm = matcher.newDeltaMonitor(true); matcher.addCallbackAfterUpdates(new Runnable() { @Override public void run() { for (RightHandAboveHeadMatch m : dm.matchFoundEvents) { System.out.println("New match found:" + m.toString()); // colorize head and right hand m.getH().setColor_r(255); m.getRH().setColor_r(255); } for (RightHandAboveHeadMatch m : dm.matchLostEvents) { System.out.println("Lost match found:" + m.toString()); // decolorize m.getH().setColor_r(0); m.getRH().setColor_r(0); } dm.clear(); } }); */ // if (Realm.getDefault()==null) { // make sure we work well in a headless / non-UI thread environment IncQueryHeadlessRealm realm = new IncQueryHeadlessRealm(); // } IObservableSet os = IncQueryObservables.observeMatchesAsSet(matcher); os.addSetChangeListener(new ISetChangeListener() { @Override public void handleSetChange(SetChangeEvent event) { for (Object _o : event.diff.getAdditions()) { RightHandAboveHeadMatch m = (RightHandAboveHeadMatch) _o; System.out.println("New match found:" + m.toString()); // colorize head and right hand m.getH().setColor_r(255); m.getRH().setColor_r(255); } for (Object _o : event.diff.getRemovals()) { RightHandAboveHeadMatch m = (RightHandAboveHeadMatch) _o; System.out.println("Lost match found:" + m.toString()); // decolorize m.getH().setColor_r(0); m.getRH().setColor_r(0); } } }); } catch (IncQueryException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { System.out.println("Start skeleton simulator first!"); } return null; } }