/* 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.core;
import vmm3d.functions.Variable;
/**
* A real-valued parameter whose value is also the value of a Variable, as defined in
* the class {@link vmm3d.functions.Variable}. When the value of the parameter is
* changed, the value of the variable is changed to match, and vice-versa.
* Parameters of this type are mostly for use in user-defined objects. The
* name of a VariableParam is shared with the associated variable and therefor should probably
* be of human-readable form, such as "a" or "b".
*/
public class VariableParam extends RealParam {
private Variable variable;
/**
* Creates a VariableParam that initially has no name and has value and default value equal to 0.
*/
public VariableParam() {
this(null,0);
}
/**
* Create a VariableParam with a specified name and initial value. A variable of the
* same name is created that will share the value of this parameter. The variable can
* be retrieved with the {@link #getVariable()} method.
* @param name The name of the Parameter, which can be null but ordinarily should not be.
* The name shoud identify the Parameter uniquely among parameters associated with a given
* Parameterizeable object. The name is for internal use in VMM. A human-readable name
* is returned by {@link Parameter#getTitle()}. The name also becomes the name of the associated
* variable.
* @param initialValue The initial value of the parameter. This also becomes its default value.
*/
public VariableParam(String name, double initialValue) {
super(name, initialValue);
variable = new Variable(name, initialValue);
}
/**
* Create a VariableParam with a specified name and initial value, where the initial value
* is given as a string. A variable of the same name is created that will share the value of
* this parameter. The variable can be retrieved with the {@link #getVariable()} method.
* @param name The name of the Parameter.
* @param value The initial value of the parameter, given as a constant expression
* that represents a legal value of type double. If this is not the case, a NumberFormatException is thrown.
* This also becomes its default value.
*/
public VariableParam(String name, String value) throws NumberFormatException {
super(name,value);
variable= new Variable(name, getValue());
}
/**
* Create a VariableParam that will share the value of the specified variable. The parameter's name and
* initial value are copied from the variable.
* @param v the non-null variable that will be associated with the VariableParam
*/
public VariableParam(Variable v) {
super(v.getName(),v.getVal());
variable = v;
}
/**
* Sets the name of this parameter and of the associated variable.
*/
public void setName(String name) {
super.setName(name);
variable.setName(name);
}
/**
* Sets the value of this parameter and of the associated variable.
*/
public void setValueObject(Object object) {
super.setValueObject(object);
if (variable != null) // it will be null when setValueObject() is called during the constructor.
variable.setVal(((Double)object).doubleValue());
}
/**
* Get the value object of this parameter. This is overriden here so that when the value
* object is requested, the value of the associated variable is checked. If the value of
* the variable is different from the value object, then the value object is first reset
* to match the variable's value. This makes it possible for the apparent values of the parameter
* and of the variable to be kept in sync when the variable's value is set using the variable's
* setVal method.
*/
public Object getValueObject() {
Double val = (Double)super.getValueObject();
if (val.doubleValue() != variable.getVal()) {
val = new Double(variable.getVal());
super.setValueObject(val);
}
return val;
}
/**
* Returns the non-null variable associated with this VariableParam.
*/
public Variable getVariable() {
return variable;
}
}
Ads help maintain this website.