package prefuse.util.force;
/**
* Interface for force functions in a force simulation.
*
* @author <a href="http://jheer.org">jeffrey heer</a>
*/
public interface Force {
/**
* Initialize this force function.
* @param fsim the encompassing ForceSimulator
*/
public void init(ForceSimulator fsim);
/**
* Returns the number of parameters (e.g., gravitational constant or
* spring force coefficient) affecting this force function.
* @return the number of parameters
*/
public int getParameterCount();
/**
* Returns the specified, numbered parameter.
* @param i the index of the parameter to return
* @return the parameter value
*/
public float getParameter(int i);
/**
* Get the suggested minimum value for a parameter. This value is not
* strictly enforced, but is used by interface components that allow force
* parameters to be varied.
* @param param the parameter index
* @return the suggested minimum value.
*/
public float getMinValue(int param);
/**
* Get the suggested maximum value for a parameter. This value is not
* strictly enforced, but is used by interface components that allow force
* parameters to be varied.
* @param param the parameter index
* @return the suggested maximum value.
*/
public float getMaxValue(int param);
/**
* Gets the text name of the requested parameter.
* @param i the index of the parameter
* @return a String containing the name of this parameter
*/
public String getParameterName(int i);
/**
* Sets the specified parameter value.
* @param i the index of the parameter
* @param val the new value of the parameter
*/
public void setParameter(int i, float val);
/**
* Set the suggested minimum value for a parameter. This value is not
* strictly enforced, but is used by interface components that allow force
* parameters to be varied.
* @param i the parameter index
* @param val the suggested minimum value to use
*/
public void setMinValue(int i, float val);
/**
* Set the suggested maximum value for a parameter. This value is not
* strictly enforced, but is used by interface components that allow force
* parameters to be varied.
* @param i the parameter index
* @return the suggested maximum value to use
*/
public void setMaxValue(int i, float val);
/**
* Indicates if this force function will compute forces
* on Spring instances.
* @return true if this force function processes Spring instances
*/
public boolean isSpringForce();
/**
* Indicates if this force function will compute forces
* on ForceItem instances
* @return true if this force function processes Force instances
*/
public boolean isItemForce();
/**
* Updates the force calculation on the given ForceItem
* @param item the ForceItem on which to compute updated forces
*/
public void getForce(ForceItem item);
/**
* Updates the force calculation on the given Spring. The ForceItems
* attached to Spring will have their force values updated appropriately.
* @param spring the Spring on which to compute updated forces
*/
public void getForce(Spring spring);
} // end of interface Force