Mercurial > hg > jslab
view src/samer/j3d/MorphPoints.java @ 8:5e3cbbf173aa tip
Reorganise some more
author | samer |
---|---|
date | Fri, 05 Apr 2019 22:41:58 +0100 |
parents | bf79fb79ee13 |
children |
line wrap: on
line source
package samer.j3d; import samer.core.*; import samer.maths.*; import samer.tools.*; import java.io.*; import java.awt.event.*; import javax.media.j3d.*; import javax.vecmath.*; import java.util.Enumeration; public class MorphPoints extends Util implements Agent { Switch switcher; Morph morph; Matrix P1,P2; Appearance app=points(); Behavior morpher; public MorphPoints(Root root, Matrix P1, Matrix P2, VVector A) throws Exception { Shell.print("creating PointsMatrix"); this.P1=P1; this.P2=P2; GeometryArray geoms[] = { new Points3D(P2,A), new Points3D(P1,A) }; morph=new Morph(geoms,app); morph.setCapability(Morph.ALLOW_WEIGHTS_WRITE); morpher=new MorphBehavior(); morpher.setSchedulingBounds(getBounds()); switcher=new Switch(); switcher.addChild(new Shape3D(geoms[1], app)); switcher.addChild(morph); switcher.setCapability(Switch.ALLOW_SWITCH_WRITE); switcher.setWhichChild(0); // root.addChild(rotaterise(morph)); root.addChild(morpher); root.addChild(switcher); Shell.exposeCommands(this); } public void getCommands(Agent.Registry r) { r.add("switch").add("morph"); } public void execute(String cmd, Environment env) throws Exception { if (cmd.equals("switch")) { switcher.setWhichChild(X._int(env.datum(),0)); } else if (cmd.equals("morph")) { } } public class MorphBehavior extends Behavior { private WakeupCriterion nextframe; private WakeupCriterion trigger; private double t, weights[]; public MorphBehavior() { trigger = new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED); nextframe = new WakeupOnElapsedFrames(1); weights = new double[2]; } public void initialize() { Shell.print("behavior init"); t=0; this.wakeupOn(trigger); } public void processStimulus(Enumeration criteria) { if (criteria.nextElement().equals(trigger)){ Shell.print("morphing"); t=0; weights[0]=1; weights[1]=0; morph.setWeights(weights); wakeupOn(nextframe); } else { t += 0.01; if (t < 1){ weights[0]=1-t; weights[1]=t; morph.setWeights(weights); wakeupOn(nextframe); } else { weights[0]=0; weights[1]=1; morph.setWeights(weights); Shell.print("finished morphing"); wakeupOn(trigger); } } } } }