📄 parameterlist.java
字号:
package org.sunflow.core;
import org.sunflow.image.Color;
import org.sunflow.math.Matrix4;
import org.sunflow.math.Point2;
import org.sunflow.math.Point3;
import org.sunflow.math.Vector3;
import org.sunflow.system.UI;
import org.sunflow.system.UI.Module;
import org.sunflow.util.FastHashMap;
/**
* This class holds a list of "parameters". These are defined and then passed
* onto rendering objects through the API. They can hold arbitrary typed and
* named variables as a unified way of getting data into user objects.
*/
public class ParameterList {
protected final FastHashMap<String, Parameter> list;
private int numVerts, numFaces, numFaceVerts;
private enum ParameterType {
STRING, INT, BOOL, FLOAT, POINT, VECTOR, TEXCOORD, MATRIX, COLOR
}
public enum InterpolationType {
NONE, FACE, VERTEX, FACEVARYING
}
/**
* Creates an empty ParameterList.
*/
public ParameterList() {
list = new FastHashMap<String, Parameter>();
numVerts = numFaces = numFaceVerts = 0;
}
/**
* Clears the list of all its members. If some members were never used, a
* warning will be printed to remind the user something may be wrong.
*/
public void clear(boolean showUnused) {
if (showUnused) {
for (FastHashMap.Entry<String, Parameter> e : list) {
if (!e.getValue().checked)
UI.printWarning(Module.API, "Unused parameter: %s - %s", e.getKey(), e.getValue());
}
}
list.clear();
numVerts = numFaces = numFaceVerts = 0;
}
/**
* Setup how many faces should be used to check member count on "face"
* interpolated parameters.
*
* @param numFaces number of faces
*/
public void setFaceCount(int numFaces) {
this.numFaces = numFaces;
}
/**
* Setup how many vertices should be used to check member count of "vertex"
* interpolated parameters.
*
* @param numVerts number of vertices
*/
public void setVertexCount(int numVerts) {
this.numVerts = numVerts;
}
/**
* Setup how many "face-vertices" should be used to check member count of
* "facevarying" interpolated parameters. This should be equal to the sum of
* the number of vertices on each face.
*
* @param numFaceVerts number of "face-vertices"
*/
public void setFaceVertexCount(int numFaceVerts) {
this.numFaceVerts = numFaceVerts;
}
/**
* Add the specified string as a parameter. <code>null</code> values are
* not permitted.
*
* @param name parameter name
* @param value parameter value
*/
public void addString(String name, String value) {
add(name, new Parameter(value));
}
/**
* Add the specified integer as a parameter. <code>null</code> values are
* not permitted.
*
* @param name parameter name
* @param value parameter value
*/
public void addInteger(String name, int value) {
add(name, new Parameter(value));
}
/**
* Add the specified boolean as a parameter. <code>null</code> values are
* not permitted.
*
* @param name parameter name
* @param value parameter value
*/
public void addBoolean(String name, boolean value) {
add(name, new Parameter(value));
}
/**
* Add the specified float as a parameter. <code>null</code> values are
* not permitted.
*
* @param name parameter name
* @param value parameter value
*/
public void addFloat(String name, float value) {
add(name, new Parameter(value));
}
/**
* Add the specified color as a parameter. <code>null</code> values are
* not permitted.
*
* @param name parameter name
* @param value parameter value
*/
public void addColor(String name, Color value) {
if (value == null)
throw new NullPointerException();
add(name, new Parameter(value));
}
/**
* Add the specified array of integers as a parameter. <code>null</code>
* values are not permitted.
*
* @param name parameter name
* @param array parameter value
*/
public void addIntegerArray(String name, int[] array) {
if (array == null)
throw new NullPointerException();
add(name, new Parameter(array));
}
/**
* Add the specified array of integers as a parameter. <code>null</code>
* values are not permitted.
*
* @param name parameter name
* @param array parameter value
*/
public void addStringArray(String name, String[] array) {
if (array == null)
throw new NullPointerException();
add(name, new Parameter(array));
}
/**
* Add the specified floats as a parameter. <code>null</code> values are
* not permitted.
*
* @param name parameter name
* @param interp interpolation type
* @param data parameter value
*/
public void addFloats(String name, InterpolationType interp, float[] data) {
if (data == null) {
UI.printError(Module.API, "Cannot create float parameter %s -- invalid data length", name);
return;
}
add(name, new Parameter(ParameterType.FLOAT, interp, data));
}
/**
* Add the specified points as a parameter. <code>null</code> values are
* not permitted.
*
* @param name parameter name
* @param interp interpolation type
* @param data parameter value
*/
public void addPoints(String name, InterpolationType interp, float[] data) {
if (data == null || data.length % 3 != 0) {
UI.printError(Module.API, "Cannot create point parameter %s -- invalid data length", name);
return;
}
add(name, new Parameter(ParameterType.POINT, interp, data));
}
/**
* Add the specified vectors as a parameter. <code>null</code> values are
* not permitted.
*
* @param name parameter name
* @param interp interpolation type
* @param data parameter value
*/
public void addVectors(String name, InterpolationType interp, float[] data) {
if (data == null || data.length % 3 != 0) {
UI.printError(Module.API, "Cannot create vector parameter %s -- invalid data length", name);
return;
}
add(name, new Parameter(ParameterType.VECTOR, interp, data));
}
/**
* Add the specified texture coordinates as a parameter. <code>null</code>
* values are not permitted.
*
* @param name parameter name
* @param interp interpolation type
* @param data parameter value
*/
public void addTexCoords(String name, InterpolationType interp, float[] data) {
if (data == null || data.length % 2 != 0) {
UI.printError(Module.API, "Cannot create texcoord parameter %s -- invalid data length", name);
return;
}
add(name, new Parameter(ParameterType.TEXCOORD, interp, data));
}
/**
* Add the specified matrices as a parameter. <code>null</code> values are
* not permitted.
*
* @param name parameter name
* @param interp interpolation type
* @param data parameter value
*/
public void addMatrices(String name, InterpolationType interp, float[] data) {
if (data == null || data.length % 16 != 0) {
UI.printError(Module.API, "Cannot create matrix parameter %s -- invalid data length", name);
return;
}
add(name, new Parameter(ParameterType.MATRIX, interp, data));
}
private void add(String name, Parameter param) {
if (name == null)
UI.printError(Module.API, "Cannot declare parameter with null name");
else if (list.put(name, param) != null)
UI.printWarning(Module.API, "Parameter %s was already defined -- overwriting", name);
}
/**
* Get the specified string parameter from this list.
*
* @param name name of the parameter
* @param defaultValue value to return if not found
* @return the value of the parameter specified or default value if not
* found
*/
public String getString(String name, String defaultValue) {
Parameter p = list.get(name);
if (isValidParameter(name, ParameterType.STRING, InterpolationType.NONE, 1, p))
return p.getStringValue();
return defaultValue;
}
/**
* Get the specified string array parameter from this list.
*
* @param name name of the parameter
* @param defaultValue value to return if not found
* @return the value of the parameter specified or default value if not
* found
*/
public String[] getStringArray(String name, String[] defaultValue) {
Parameter p = list.get(name);
if (isValidParameter(name, ParameterType.STRING, InterpolationType.NONE, -1, p))
return p.getStrings();
return defaultValue;
}
/**
* Get the specified integer parameter from this list.
*
* @param name name of the parameter
* @param defaultValue value to return if not found
* @return the value of the parameter specified or default value if not
* found
*/
public int getInt(String name, int defaultValue) {
Parameter p = list.get(name);
if (isValidParameter(name, ParameterType.INT, InterpolationType.NONE, 1, p))
return p.getIntValue();
return defaultValue;
}
/**
* Get the specified integer array parameter from this list.
*
* @param name name of the parameter
* @return the value of the parameter specified or <code>null</code> if
* not found
*/
public int[] getIntArray(String name) {
Parameter p = list.get(name);
if (isValidParameter(name, ParameterType.INT, InterpolationType.NONE, -1, p))
return p.getInts();
return null;
}
/**
* Get the specified boolean parameter from this list.
*
* @param name name of the parameter
* @param defaultValue value to return if not found
* @return the value of the parameter specified or default value if not
* found
*/
public boolean getBoolean(String name, boolean defaultValue) {
Parameter p = list.get(name);
if (isValidParameter(name, ParameterType.BOOL, InterpolationType.NONE, 1, p))
return p.getBoolValue();
return defaultValue;
}
/**
* Get the specified float parameter from this list.
*
* @param name name of the parameter
* @param defaultValue value to return if not found
* @return the value of the parameter specified or default value if not
* found
*/
public float getFloat(String name, float defaultValue) {
Parameter p = list.get(name);
if (isValidParameter(name, ParameterType.FLOAT, InterpolationType.NONE, 1, p))
return p.getFloatValue();
return defaultValue;
}
/**
* Get the specified color parameter from this list.
*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -