⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parameterlist.java

📁 Sunflow是一个照片级的渲染系统
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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 + -