/*  This file is part of the source code for 3D-XplorMath-J, Version 1.0 (January 2008).
 *  Copyright (c) 2008 The 3D-XplorMath Consortium (http://3d-xplormath.org).
 *  This source code is released under a BSD License, which allows redistribution   
 *  in source and binary form, with or without modification, provided copyright
 *  and license information are included, and with no warranty or guarantee of
 *  any kind.  For details, see http://3d-xplormath.org/j/source/BSDLicense.txt
 */
 
 package vmm3d.planecurve.parametric;

import vmm3d.core.Decorateable;
import vmm3d.core.ThreadedAnimation;

/**
 * Shows a moving set of parallel curves to a PlaneCurveParametric curve.  Optionally,
 * it first shows the construction fo the normal bundle to the curve.
 * The evolute is also shown.  (The animation uses a NormalBundleDecoration for the actual work.)
 */
public class ParallelCurveAnimation extends ThreadedAnimation {
	
	private PlaneCurveParametric curve;
	private Decorateable owner;
	private double offsetMax = 10;
	private double offsetIncrement = 0.05;
	private boolean showNormals;
	
	/**
	 * Create an Animation that will show the animation on the specified curve.
	 * The curve should be non-null.  The NormalBundleDecoration is added to the
	 * curve itself.  
	 * 

A default offsetMax of 10 is used, meaning that parallel curves are drawn with * offsets ranging from 0 up to 10. A default offsetIncrement of 0.05 is used, meaning * that the increment of the offset from one parallel curve to the next is 0.05. */ public ParallelCurveAnimation(PlaneCurveParametric curve) { this(curve,curve); } /** * Create an animation that will show the animation on the specified curve. * The curve should be non-null. The NormalBundleDecoration is added to the * specified Decorateable owner, which should be either the curve itself or * a View containing the curve. *

A default offsetMax of 10 is used, meaning that parallel curves are drawn with * offsets ranging from 0 up to 10. A default offsetIncrement of 0.05 is used, meaning * that the increment of the offset from one parallel curve to the next is 0.05. * @param owner The Decorateable object to which the NormalBundleDecoration is to be added. * If the value is null, then the curve will be used as the owner. If the value * is not null, it should be equal to either the curve or to a View that is showing the curve. * @param curve The curve to which parallel curves are to be drawn. */ public ParallelCurveAnimation(Decorateable owner, PlaneCurveParametric curve) { this.owner = (owner != null)? owner : curve; this.curve = curve; } /** * Create an animation that will show the animation on the specified curve. * The curve should be non-null. The NormalBundleDecoration is added to the * specified Decorateable owner, which should be either the curve itself or * a View containing the curve. * @param owner The Decorateable object to which the NormalBundleDecoration is to be added. * If the value is null, then the curve will be used as the owner. If the value * is not null, it should be equal to either the curve or to a View that is showing the curve. * @param curve The curve to which parallel curves are to be drawn. * @param showNormals If set to true, then the animation will first add the normal vectors to the curve, before * drawing the parallel curves. * @param offsetMax Parallel curves are drawn with offsets ranging from 0 up to this value. * @param offsetIncrement This is the increment of the offset between one parallel curve and the next. */ public ParallelCurveAnimation(Decorateable owner, PlaneCurveParametric curve, boolean showNormals, double offsetMax, double offsetIncrement) { this.owner = (owner != null)? owner : curve; this.curve = curve; this.showNormals = showNormals; } /** * Run the paralleCurveAnimation. */ protected void runAnimation() { NormalBundleDecoration dec; dec = new NormalBundleDecoration(curve); dec.setLayer(2); owner.addDecoration(dec); try { int points = curve.getTResolution(); if (showNormals) { for (int i = 1; i <= points + 1; i++) { dec.setPointCount(i); pause(20); } pause(100); dec.setPointCount(0); } dec.setShowEvolute(true); pause(200); for (double offset = 0; offset <= offsetMax; offset += offsetIncrement) { dec.setParallelCurveOffset(offset); pause(50); } } finally { owner.removeDecoration(dec); } } }

Ads help maintain this website.