package org.vorthmann.zome.app.impl; import java.io.File; import javax.vecmath.AxisAngle4f; import javax.vecmath.Quat4d; import javax.vecmath.Vector3f; import org.vorthmann.ui.Controller; import org.vorthmann.ui.DefaultController; import com.vzome.desktop.controller.CameraController; public class AnimationCaptureController extends DefaultController implements Controller { private static final int NUM_ITERATIONS = 80; public static final String TYPE = "png"; private static final String FILENAME_PATTERN = "frame%03d." + TYPE; private CameraController cameraController; private final Quat4d rotation; private final File parentDir; private int iteration; public AnimationCaptureController( CameraController cameraController, File directory ) { this .iteration = NUM_ITERATIONS; double rotationRadians = 2 * Math.PI / NUM_ITERATIONS; this.cameraController = cameraController; Vector3f viewRotAxis = new Vector3f( 0f, 1.618f, 1f ); this .cameraController .mapViewToWorld( viewRotAxis ); this .rotation = new Quat4d(); this .rotation .set( new AxisAngle4f( viewRotAxis, (float) rotationRadians ) ); this .parentDir = directory .isDirectory()? directory : directory .getParentFile(); } public int getImageSize() { return -1; } public void rotate() { this .cameraController .addViewpointRotation( this .rotation ); } public File nextFile() { String fileName = String .format( FILENAME_PATTERN, -- this .iteration ); return new File( this .parentDir, fileName ); } public boolean finished() { return this .iteration == 0; } }