/* * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Sun designates this * particular file as subject to the "Classpath" exception as provided * by Sun in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. * */ package javax.media.j3d; /** * The IndexedGeometryArray object contains separate integer arrays * that index into the arrays of positional coordinates, colors, * normals, texture coordinates, and vertex attributes. * These index arrays specify how * vertices are connected to form geometry primitives. This class is * extended to create the various indexed primitive types (e.g., * lines, triangle strips, etc.). */ public abstract class IndexedGeometryArray extends GeometryArray { // non-public, no parameter constructor IndexedGeometryArray() { // set default read capabilities setDefaultReadCapabilities(readCapabilities); } /** * Specifies that this IndexedGeometryArray allows reading the array of * coordinate indices. */ public static final int ALLOW_COORDINATE_INDEX_READ = CapabilityBits.INDEXED_GEOMETRY_ARRAY_ALLOW_COORDINATE_INDEX_READ; /** * Specifies that this IndexedGeometryArray allows writing the array of * coordinate indices. */ public static final int ALLOW_COORDINATE_INDEX_WRITE = CapabilityBits.INDEXED_GEOMETRY_ARRAY_ALLOW_COORDINATE_INDEX_WRITE; /** * Specifies that this IndexedGeometryArray allows reading the array of * color indices. */ public static final int ALLOW_COLOR_INDEX_READ = CapabilityBits.INDEXED_GEOMETRY_ARRAY_ALLOW_COLOR_INDEX_READ; /** * Specifies that this IndexedGeometryArray allows writing the array of * color indices. */ public static final int ALLOW_COLOR_INDEX_WRITE = CapabilityBits.INDEXED_GEOMETRY_ARRAY_ALLOW_COLOR_INDEX_WRITE; /** * Specifies that this IndexedGeometryArray allows reading the array of * normal indices. */ public static final int ALLOW_NORMAL_INDEX_READ = CapabilityBits.INDEXED_GEOMETRY_ARRAY_ALLOW_NORMAL_INDEX_READ; /** * Specifies that this IndexedGeometryArray allows writing the array of * normal indices. */ public static final int ALLOW_NORMAL_INDEX_WRITE = CapabilityBits.INDEXED_GEOMETRY_ARRAY_ALLOW_NORMAL_INDEX_WRITE; /** * Specifies that this IndexedGeometryArray allows reading the array of * texture coordinate indices. */ public static final int ALLOW_TEXCOORD_INDEX_READ = CapabilityBits.INDEXED_GEOMETRY_ARRAY_ALLOW_TEXCOORD_INDEX_READ; /** * Specifies that this IndexedGeometryArray allows writing the array of * texture coordinate indices. */ public static final int ALLOW_TEXCOORD_INDEX_WRITE = CapabilityBits.INDEXED_GEOMETRY_ARRAY_ALLOW_TEXCOORD_INDEX_WRITE; /** * Specifies that this IndexedGeometryArray allows reading the array of * vertex attribute indices. * * @since Java 3D 1.4 */ public static final int ALLOW_VERTEX_ATTR_INDEX_READ = CapabilityBits.INDEXED_GEOMETRY_ARRAY_ALLOW_VERTEX_ATTR_INDEX_READ; /** * Specifies that this IndexedGeometryArray allows writing the array of * vertex attribute indices. * * @since Java 3D 1.4 */ public static final int ALLOW_VERTEX_ATTR_INDEX_WRITE = CapabilityBits.INDEXED_GEOMETRY_ARRAY_ALLOW_VERTEX_ATTR_INDEX_WRITE; // Array for setting default read capabilities private static final int[] readCapabilities = { ALLOW_COLOR_INDEX_READ, ALLOW_COORDINATE_INDEX_READ, ALLOW_NORMAL_INDEX_READ, ALLOW_TEXCOORD_INDEX_READ, ALLOW_VERTEX_ATTR_INDEX_READ }; /** * Constructs an empty IndexedGeometryArray object with the specified * number of vertices, vertex format, and number of indices. * Defaults are used for all other parameters. The default values * are as follows: * * * * @param vertexCount * see {@link GeometryArray#GeometryArray(int,int)} * for a description of this parameter. * * @param vertexFormat * see {@link GeometryArray#GeometryArray(int,int)} * for a description of this parameter. * * @param indexCount the number of indices in this object. This * count is the maximum number of vertices that will be rendered. * * @exception IllegalArgumentException if indexCount < 0 * ;
* See {@link GeometryArray#GeometryArray(int,int)} * for more exceptions that can be thrown */ public IndexedGeometryArray(int vertexCount, int vertexFormat, int indexCount) { super(vertexCount, vertexFormat); // set default read capabilities setDefaultReadCapabilities(readCapabilities); ((IndexedGeometryArrayRetained)this.retained).createIndexedGeometryArrayData(indexCount); } /** * Constructs an empty IndexedGeometryArray object with the specified * number of vertices, vertex format, number of texture coordinate * sets, texture coordinate mapping array, and number of indices. * Defaults are used for all other parameters. * * @param vertexCount * see {@link GeometryArray#GeometryArray(int,int,int,int[])} * for a description of this parameter. * * @param vertexFormat * see {@link GeometryArray#GeometryArray(int,int,int,int[])} * for a description of this parameter. * * @param texCoordSetCount * see {@link GeometryArray#GeometryArray(int,int,int,int[])} * for a description of this parameter. * * @param texCoordSetMap * see {@link GeometryArray#GeometryArray(int,int,int,int[])} * for a description of this parameter. * * @param indexCount the number of indices in this object. This * count is the maximum number of vertices that will be rendered. * * @exception IllegalArgumentException if indexCount < 0 * ;
* See {@link GeometryArray#GeometryArray(int,int,int,int[])} * for more exceptions that can be thrown * * @since Java 3D 1.2 */ public IndexedGeometryArray(int vertexCount, int vertexFormat, int texCoordSetCount, int[] texCoordSetMap, int indexCount) { this(vertexCount, vertexFormat, texCoordSetCount, texCoordSetMap, 0, null, indexCount); } /** * Constructs an empty IndexedGeometryArray object with the * specified number of vertices, vertex format, number of texture * coordinate sets, texture coordinate mapping array, vertex * attribute count, vertex attribute sizes array, and number of * indices. * * @param vertexCount * see {@link GeometryArray#GeometryArray(int,int,int,int[],int,int[])} * for a description of this parameter. * * @param vertexFormat * see {@link GeometryArray#GeometryArray(int,int,int,int[],int,int[])} * for a description of this parameter. * * @param texCoordSetMap * see {@link GeometryArray#GeometryArray(int,int,int,int[],int,int[])} * for a description of this parameter. * * @param vertexAttrCount * see {@link GeometryArray#GeometryArray(int,int,int,int[],int,int[])} * for a description of this parameter. * * @param vertexAttrSizes * see {@link GeometryArray#GeometryArray(int,int,int,int[],int,int[])} * for a description of this parameter. * * @param indexCount the number of indices in this object. This * count is the maximum number of vertices that will be rendered. * * @exception IllegalArgumentException if indexCount < 0 * ;
* See {@link GeometryArray#GeometryArray(int,int,int,int[],int,int[])} * for more exceptions that can be thrown * * @since Java 3D 1.4 */ public IndexedGeometryArray(int vertexCount, int vertexFormat, int texCoordSetCount, int[] texCoordSetMap, int vertexAttrCount, int[] vertexAttrSizes, int indexCount) { super(vertexCount, vertexFormat, texCoordSetCount, texCoordSetMap, vertexAttrCount, vertexAttrSizes); // set default read capabilities setDefaultReadCapabilities(readCapabilities); ((IndexedGeometryArrayRetained)this.retained).createIndexedGeometryArrayData(indexCount); } /** * Gets number of indices for this IndexedGeometryArray. * @return indexCount the number of indices */ public int getIndexCount(){ if (isLiveOrCompiled()) if(!this.getCapability(GeometryArray.ALLOW_COUNT_READ)) throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray0")); return ((IndexedGeometryArrayRetained)this.retained).getIndexCount(); } /** * Sets the valid index count for this IndexedGeometryArray object. * This count specifies the number of indexed vertices actually used * in rendering or other operations such as picking and collision. * This attribute is initialized to indexCount. * * @param validIndexCount the new valid index count. * * @exception CapabilityNotSetException if the appropriate capability is * not set and this object is part of a live or compiled scene graph * * @exception IllegalArgumentException if either of the following is true: * * * @exception ArrayIndexOutOfBoundsException if any element in the range * [initialIndexIndex, initialIndexIndex+validIndexCount-1] * in the index array associated with any of the enabled vertex * components (coord, color, normal, texcoord) is out of range. * An element is out of range if it is less than 0 or is greater * than or equal to the number of vertices actually defined for * the particular component's array. * * @exception ArrayIndexOutOfBoundsException if the data mode for this geometry * array object is BY_REFERENCE_INDICES and * coordIndices.length < (initialIndexIndex + validIndexCount). * * @since Java 3D 1.3 */ public void setValidIndexCount(int validIndexCount) { if (isLiveOrCompiled()) if(!this.getCapability(ALLOW_COUNT_WRITE)) throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray16")); ((IndexedGeometryArrayRetained)this.retained).setValidIndexCount(validIndexCount); } /** * Gets the valid index count for this IndexedGeometryArray * object. For geometry strip primitives (subclasses of * IndexedGeometryStripArray), the valid index count is defined * to be the sum of the stripIndexCounts array. * * @return the current valid index count * * @exception CapabilityNotSetException if the appropriate capability is * not set and this object is part of a live or compiled scene graph * * @since Java 3D 1.3 */ public int getValidIndexCount() { if (isLiveOrCompiled()) if(!this.getCapability(ALLOW_COUNT_READ)) throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray17")); return ((IndexedGeometryArrayRetained)this.retained).getValidIndexCount(); } /** * Sets the initial index index for this IndexedGeometryArray object. * This index specifies the first index within this indexed geometry * array that is actually used in rendering or other operations * such as picking and collision. This attribute is initialized * to 0. * * @param initialIndexIndex the new initial index index. * @exception CapabilityNotSetException if the appropriate capability is * not set and this object is part of a live or compiled scene graph * @exception IllegalArgumentException if either of the following is true: * * * @exception ArrayIndexOutOfBoundsException if any element in the range * [initialIndexIndex, initialIndexIndex+validIndexCount-1] * in the index array associated with any of the enabled vertex * components (coord, color, normal, texcoord) is out of range. * An element is out of range if it is less than 0 or is greater * than or equal to the number of vertices actually defined for * the particular component's array. * * @exception ArrayIndexOutOfBoundsException if the data mode for this geometry * array object is BY_REFERENCE_INDICES and * coordIndices.length < (initialIndexIndex + validIndexCount). * * @since Java 3D 1.3 */ public void setInitialIndexIndex(int initialIndexIndex) { if (isLiveOrCompiled()) if(!this.getCapability(ALLOW_COUNT_WRITE)) throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray18")); if (initialIndexIndex < 0) throw new IllegalArgumentException(J3dI18N.getString("IndexedGeometryArray20")); ((IndexedGeometryArrayRetained)this.retained).setInitialIndexIndex(initialIndexIndex); } /** * Gets the initial index index for this IndexedGeometryArray object. * @return the current initial index index * @exception CapabilityNotSetException if the appropriate capability is * not set and this object is part of a live or compiled scene graph * * @since Java 3D 1.3 */ public int getInitialIndexIndex() { if (isLiveOrCompiled()) if(!this.getCapability(ALLOW_COUNT_READ)) throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray19")); return ((IndexedGeometryArrayRetained)this.retained).getInitialIndexIndex(); } /** * This method is not supported for indexed geometry arrays. * Indexed primitives use an array of indices to determine how * to access the vertex array. * The initialIndexIndex attribute can be used to set the starting * index within the index arrays. * * @exception UnsupportedOperationException this method is not supported * * @since Java 3D 1.3 */ @Override public void setInitialVertexIndex(int initialVertexIndex) { throw new UnsupportedOperationException(); } /** * This method is not supported for indexed geometry arrays. * Indexed primitives use an array of indices to determine how * to access the vertex array. * * @exception UnsupportedOperationException this method is not supported * * @since Java 3D 1.3 */ @Override public void setInitialCoordIndex(int initialCoordIndex) { throw new UnsupportedOperationException(); } /** * This method is not supported for indexed geometry arrays. * Indexed primitives use an array of indices to determine how * to access the vertex array. * * @exception UnsupportedOperationException this method is not supported * * @since Java 3D 1.3 */ @Override public void setInitialColorIndex(int initialColorIndex) { throw new UnsupportedOperationException(); } /** * This method is not supported for indexed geometry arrays. * Indexed primitives use an array of indices to determine how * to access the vertex array. * * @exception UnsupportedOperationException this method is not supported * * @since Java 3D 1.3 */ @Override public void setInitialNormalIndex(int initialNormalIndex) { throw new UnsupportedOperationException(); } /** * This method is not supported for indexed geometry arrays. * Indexed primitives use an array of indices to determine how * to access the vertex array. * * @exception UnsupportedOperationException this method is not supported * * @since Java 3D 1.3 */ @Override public void setInitialTexCoordIndex(int texCoordSet, int initialTexCoordIndex) { throw new UnsupportedOperationException(); } /** * This method is not supported for indexed geometry arrays. * Indexed primitives use an array of indices to determine how * to access the vertex array. * * @exception UnsupportedOperationException this method is not supported * * @since Java 3D 1.4 */ @Override public void setInitialVertexAttrIndex(int vertexAttrNum, int initialVertexAttrIndex) { throw new UnsupportedOperationException(); } /** * This method is not supported for indexed geometry arrays. * Indexed primitives use an array of indices to determine how * to access the vertex array. * The validIndexCount attribute can be used to set the number of * valid indexed vertices rendered. * * @exception UnsupportedOperationException this method is not supported * * @since Java 3D 1.3 */ @Override public void setValidVertexCount(int validVertexCount) { throw new UnsupportedOperationException(); } //NVaidya /** * Sets the coordinate index associated with the vertex at * the specified index for this object. * @param index the vertex index * @param coordinateIndex the new coordinate index * * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception ArrayIndexOutOfBoundsException if index is less than 0 * or is greater than or equal to indexCount * * @exception ArrayIndexOutOfBoundsException if index is in the range * [initialIndexIndex, initialIndexIndex+validIndexCount-1] * and the specified coordinateIndex is out of range. The * coordinateIndex is out of range if it is less than 0 or is * greater than or equal to the number of vertices actually * defined for the coordinate array. * * @exception IllegalStateException if the data mode for this geometry * array object is BY_REFERENCE_INDICES. */ public void setCoordinateIndex(int index, int coordinateIndex) { if (isLiveOrCompiled()) if(!this.getCapability(ALLOW_COORDINATE_INDEX_WRITE)) throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray1")); //NVaidya int format = ((IndexedGeometryArrayRetained)this.retained).vertexFormat; if ((format & BY_REFERENCE_INDICES) != 0) throw new IllegalStateException(J3dI18N.getString("IndexedGeometryArray31")); ((IndexedGeometryArrayRetained)this.retained).setCoordinateIndex(index, coordinateIndex); } //NVaidya /** * Sets the coordinate indices associated with the vertices starting at * the specified index for this object. * @param index the vertex index * @param coordinateIndices an array of coordinate indices * * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception ArrayIndexOutOfBoundsException if index is less than 0 * or is greater than or equal to indexCount * * @exception ArrayIndexOutOfBoundsException if any element of the * coordinateIndices array whose destination position is in the range * [initialIndexIndex, initialIndexIndex+validIndexCount-1] * is out of range. An element is out of range if it is less than 0 * or is greater than or equal to the number of vertices actually * defined for the coordinate array. * * @exception IllegalStateException if the data mode for this geometry * array object is BY_REFERENCE_INDICES. */ public void setCoordinateIndices(int index, int coordinateIndices[]) { if (isLiveOrCompiled()) if(!this.getCapability(ALLOW_COORDINATE_INDEX_WRITE)) throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray1")); //NVaidya int format = ((IndexedGeometryArrayRetained)this.retained).vertexFormat; if ((format & BY_REFERENCE_INDICES) != 0) throw new IllegalStateException(J3dI18N.getString("IndexedGeometryArray31")); ((IndexedGeometryArrayRetained)this.retained).setCoordinateIndices(index, coordinateIndices); } //NVaidya /** * Sets the coordinate indices array reference to the specified array. * If the coordinate indices array reference is null, the entire * geometry array object is treated as if it were null--any * Shape3D or Morph node that uses this geometry array will not be drawn. * * @param coordIndices an array of indices to which a reference * will be set. * * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception IllegalStateException if the data mode for this geometry * array object is not BY_REFERENCE_INDICES. * * @exception ArrayIndexOutOfBoundsException if any element of the * coordIndices array whose destination position is in the range * [initialIndexIndex, initialIndexIndex+validIndexCount-1] * is out of range. An element is out of range if it is less than 0 * or is greater than or equal to the number of vertices actually * defined for the coordinate array. * * @exception ArrayIndexOutOfBoundsException if * coordIndices.length < (initialIndexIndex + validIndexCount). * * @since Java 3D 1.5 */ public void setCoordIndicesRef(int coordIndices[]) { if (isLiveOrCompiled()) if (!this.getCapability(ALLOW_REF_DATA_WRITE)) throw new CapabilityNotSetException(J3dI18N.getString("GeometryArray86")); //NVaidya int format = ((IndexedGeometryArrayRetained)this.retained).vertexFormat; if ((format & BY_REFERENCE_INDICES) == 0) throw new IllegalStateException(J3dI18N.getString("IndexedGeometryArray32")); ((IndexedGeometryArrayRetained)this.retained).setCoordIndicesRef(coordIndices); } /** * Sets the color index associated with the vertex at * the specified index for this object. * @param index the vertex index * @param colorIndex the new color index * * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception ArrayIndexOutOfBoundsException if index is less than 0 * or is greater than or equal to indexCount * * @exception ArrayIndexOutOfBoundsException if index is in the range * [initialIndexIndex, initialIndexIndex+validIndexCount-1] * and the specified colorIndex is out of range. The * colorIndex is out of range if it is less than 0 or is * greater than or equal to the number of vertices actually * defined for the color array. * * @exception NullPointerException if the USE_COORD_INDEX_ONLY * bit is set in vertexFormat. */ public void setColorIndex(int index, int colorIndex) { if (isLiveOrCompiled()) if(!this.getCapability(ALLOW_COLOR_INDEX_WRITE)) throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray3")); ((IndexedGeometryArrayRetained)this.retained).setColorIndex(index, colorIndex); } /** * Sets the color indices associated with the vertices starting at * the specified index for this object. * @param index the vertex index * @param colorIndices an array of color indices * * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception ArrayIndexOutOfBoundsException if index is less than 0 * or is greater than or equal to indexCount * * @exception ArrayIndexOutOfBoundsException if any element of the * colorIndices array whose destination position is in the range * [initialIndexIndex, initialIndexIndex+validIndexCount-1] * is out of range. An element is out of range if it is less than 0 * or is greater than or equal to the number of vertices actually * defined for the color array. * * @exception NullPointerException if the USE_COORD_INDEX_ONLY * bit is set in vertexFormat. */ public void setColorIndices(int index, int colorIndices[]) { if (isLiveOrCompiled()) if(!this.getCapability(ALLOW_COLOR_INDEX_WRITE)) throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray3")); ((IndexedGeometryArrayRetained)this.retained).setColorIndices(index, colorIndices); } /** * Sets the normal index associated with the vertex at * the specified index for this object. * @param index the vertex index * @param normalIndex the new normal index * * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception ArrayIndexOutOfBoundsException if index is less than 0 * or is greater than or equal to indexCount * * @exception ArrayIndexOutOfBoundsException if index is in the range * [initialIndexIndex, initialIndexIndex+validIndexCount-1] * and the specified normalIndex is out of range. The * normalIndex is out of range if it is less than 0 or is * greater than or equal to the number of vertices actually * defined for the normal array. * * @exception NullPointerException if the USE_COORD_INDEX_ONLY * bit is set in vertexFormat. */ public void setNormalIndex(int index, int normalIndex) { if (isLiveOrCompiled()) if(!this.getCapability(ALLOW_NORMAL_INDEX_WRITE)) throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray5")); ((IndexedGeometryArrayRetained)this.retained).setNormalIndex(index, normalIndex); } /** * Sets the normal indices associated with the vertices starting at * the specified index for this object. * @param index the vertex index * @param normalIndices an array of normal indices * * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception ArrayIndexOutOfBoundsException if index is less than 0 * or is greater than or equal to indexCount * * @exception ArrayIndexOutOfBoundsException if any element of the * normalIndices array whose destination position is in the range * [initialIndexIndex, initialIndexIndex+validIndexCount-1] * is out of range. An element is out of range if it is less than 0 * or is greater than or equal to the number of vertices actually * defined for the normal array. * * @exception NullPointerException if the USE_COORD_INDEX_ONLY * bit is set in vertexFormat. */ public void setNormalIndices(int index, int normalIndices[]) { if (isLiveOrCompiled()) if(!this.getCapability(ALLOW_NORMAL_INDEX_WRITE)) throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray5")); ((IndexedGeometryArrayRetained)this.retained).setNormalIndices(index, normalIndices); } /** * @deprecated As of Java 3D version 1.2, replaced by * setTextureCoordinateIndex(int texCoordSet, ...) */ public void setTextureCoordinateIndex(int index, int texCoordIndex) { setTextureCoordinateIndex(0, index, texCoordIndex); } /** * Sets the texture coordinate index associated with the vertex at * the specified index in the specified texture coordinate set * for this object. * * @param texCoordSet texture coordinate set in this geometry array * @param index the vertex index * @param texCoordIndex the new texture coordinate index * * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception ArrayIndexOutOfBoundsException if neither of the * TEXTURE_COORDINATE bits are set in the * vertexFormat or if the index or * texCoordSet is out of range. * * @exception ArrayIndexOutOfBoundsException if index is in the range * [initialIndexIndex, initialIndexIndex+validIndexCount-1] * and the specified texCoordIndex is out of range. The * texCoordIndex is out of range if it is less than 0 or is * greater than or equal to the number of vertices actually * defined for the texture coordinate array. * * @exception NullPointerException if the USE_COORD_INDEX_ONLY * bit is set in vertexFormat. * * @since Java 3D 1.2 */ public void setTextureCoordinateIndex(int texCoordSet, int index, int texCoordIndex) { if (isLiveOrCompiled()) if(!this.getCapability(ALLOW_TEXCOORD_INDEX_WRITE)) throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray7")); ((IndexedGeometryArrayRetained)this.retained).setTextureCoordinateIndex(texCoordSet, index, texCoordIndex); } /** * @deprecated As of Java 3D version 1.2, replaced by * setTextureCoordinateIndices(int texCoordSet, ...) */ public void setTextureCoordinateIndices(int index, int texCoordIndices[]) { setTextureCoordinateIndices(0, index, texCoordIndices); } /** * Sets the texture coordinate indices associated with the vertices * starting at the specified index in the specified texture coordinate set * for this object. * * @param texCoordSet texture coordinate set in this geometry array * @param index the vertex index * @param texCoordIndices an array of texture coordinate indices * * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception ArrayIndexOutOfBoundsException if neither of the * TEXTURE_COORDINATE bits are set in the * vertexFormat or if the index or * texCoordSet is out of range. * * @exception ArrayIndexOutOfBoundsException if any element of the * texCoordIndices array whose destination position is in the range * [initialIndexIndex, initialIndexIndex+validIndexCount-1] * is out of range. An element is out of range if it is less than 0 * or is greater than or equal to the number of vertices actually * defined for the texture coordinate array. * * @exception NullPointerException if the USE_COORD_INDEX_ONLY * bit is set in vertexFormat. * * @since Java 3D 1.2 */ public void setTextureCoordinateIndices(int texCoordSet, int index, int texCoordIndices[]) { if (isLiveOrCompiled()) if(!this.getCapability(ALLOW_TEXCOORD_INDEX_WRITE)) throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray7")); ((IndexedGeometryArrayRetained)this.retained).setTextureCoordinateIndices(texCoordSet, index, texCoordIndices); } /** * Sets the vertex attribute index associated with the vertex at * the specified index for the specified vertex attribute number * for this object. * * @param vertexAttrNum vertex attribute number in this geometry array * @param index the vertex index * @param vertexAttrIndex the new vertex attribute index * * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception ArrayIndexOutOfBoundsException if the index or * vertexAttrNum is out of range. * * @exception ArrayIndexOutOfBoundsException if index is in the range * [initialIndexIndex, initialIndexIndex+validIndexCount-1] * and the specified vertexAttrIndex is out of range. The * vertexAttrIndex is out of range if it is less than 0 or is * greater than or equal to the number of vertices actually * defined for the vertex attribute array. * * @exception NullPointerException if the USE_COORD_INDEX_ONLY * bit is set in vertexFormat. * * @since Java 3D 1.4 */ public void setVertexAttrIndex(int vertexAttrNum, int index, int vertexAttrIndex) { if (isLiveOrCompiled()) { if(!this.getCapability(ALLOW_VERTEX_ATTR_INDEX_WRITE)) { throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray28")); } } ((IndexedGeometryArrayRetained)this.retained).setVertexAttrIndex(vertexAttrNum, index, vertexAttrIndex); } /** * Sets the vertex attribute indices associated with the vertices * starting at the specified index for the specified vertex attribute number * for this object. * * @param vertexAttrNum vertex attribute number in this geometry array * @param index the vertex index * @param vertexAttrIndices an array of vertex attribute indices * * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception ArrayIndexOutOfBoundsException if the index or * vertexAttrNum is out of range. * * @exception ArrayIndexOutOfBoundsException if any element of the * vertexAttrIndices array whose destination position is in the range * [initialIndexIndex, initialIndexIndex+validIndexCount-1] * is out of range. An element is out of range if it is less than 0 * or is greater than or equal to the number of vertices actually * defined for the vertex attribute array. * * @exception NullPointerException if the USE_COORD_INDEX_ONLY * bit is set in vertexFormat. * * @since Java 3D 1.4 */ public void setVertexAttrIndices(int vertexAttrNum, int index, int[] vertexAttrIndices) { if (isLiveOrCompiled()) { if(!this.getCapability(ALLOW_VERTEX_ATTR_INDEX_WRITE)) { throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray28")); } } ((IndexedGeometryArrayRetained)this.retained).setVertexAttrIndices(vertexAttrNum, index, vertexAttrIndices); } //NVaidya /** * Retrieves the coordinate index associated with the vertex at * the specified index for this object. * @param index the vertex index * @return the coordinate index * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception IllegalStateException if the data mode for this geometry * array object is BY_REFERENCE_INDICES. */ public int getCoordinateIndex(int index) { if (isLiveOrCompiled()) if(!this.getCapability(ALLOW_COORDINATE_INDEX_READ)) throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray9")); //NVaidya int format = ((IndexedGeometryArrayRetained)this.retained).vertexFormat; if ((format & BY_REFERENCE_INDICES) != 0) throw new IllegalStateException(J3dI18N.getString("IndexedGeometryArray31")); return ((IndexedGeometryArrayRetained)this.retained).getCoordinateIndex(index); } //NVaidya /** * Retrieves the coordinate indices associated with the vertices starting at * the specified index for this object. * @param index the vertex index * @param coordinateIndices array that will receive the coordinate indices * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception IllegalStateException if the data mode for this geometry * array object is BY_REFERENCE_INDICES. */ public void getCoordinateIndices(int index, int coordinateIndices[]) { if (isLiveOrCompiled()) if(!this.getCapability(ALLOW_COORDINATE_INDEX_READ)) throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray9")); //NVaidya int format = ((IndexedGeometryArrayRetained)this.retained).vertexFormat; if ((format & BY_REFERENCE_INDICES) != 0) throw new IllegalStateException(J3dI18N.getString("IndexedGeometryArray31")); ((IndexedGeometryArrayRetained)this.retained).getCoordinateIndices(index, coordinateIndices); } //NVaidya /** * Returns a reference to the coordinate indices associated with * the vertices * @return the coordinate indices array * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception IllegalStateException if the data mode for this geometry * array object is not BY_REFERENCE_INDICES. * * @since Java 3D 1.5 */ public int[] getCoordIndicesRef() { if (isLiveOrCompiled()) if (!this.getCapability(ALLOW_REF_DATA_READ)) throw new CapabilityNotSetException(J3dI18N.getString("GeometryArray87")); int format = ((IndexedGeometryArrayRetained)this.retained).vertexFormat; if ((format & BY_REFERENCE_INDICES) == 0) throw new IllegalStateException(J3dI18N.getString("IndexedGeometryArray32")); return ((IndexedGeometryArrayRetained)this.retained).getCoordIndicesRef(); } /** * Retrieves the color index associated with the vertex at * the specified index for this object. * @param index the vertex index * @return the color index * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception NullPointerException if the USE_COORD_INDEX_ONLY * bit is set in vertexFormat. */ public int getColorIndex(int index) { if (isLiveOrCompiled()) if(!this.getCapability(ALLOW_COLOR_INDEX_READ)) throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray11")); return ((IndexedGeometryArrayRetained)this.retained).getColorIndex(index); } /** * Retrieves the color indices associated with the vertices starting at * the specified index for this object. The color indicies are * copied into the specified array. The array must be large enough * to hold all of the indices. * @param index the vertex index * @param colorIndices array that will receive the color indices * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception NullPointerException if the USE_COORD_INDEX_ONLY * bit is set in vertexFormat. */ public void getColorIndices(int index, int colorIndices[]) { if (isLiveOrCompiled()) if(!this.getCapability(ALLOW_COLOR_INDEX_READ)) throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray11")); ((IndexedGeometryArrayRetained)this.retained).getColorIndices(index, colorIndices); } /** * Retrieves the normal index associated with the vertex at * the specified index for this object. * @param index the vertex index * @return the normal index * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception NullPointerException if the USE_COORD_INDEX_ONLY * bit is set in vertexFormat. */ public int getNormalIndex(int index) { if (isLiveOrCompiled()) if(!this.getCapability(ALLOW_NORMAL_INDEX_READ)) throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray13")); return ((IndexedGeometryArrayRetained)this.retained).getNormalIndex(index); } /** * Retrieves the normal indices associated with the vertices starting at * the specified index for this object. The normal indicies are * copied into the specified array. The array must be large enough * to hold all of the normal indicies. * * @param index the vertex index * @param normalIndices array that will receive the normal indices * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception NullPointerException if the USE_COORD_INDEX_ONLY * bit is set in vertexFormat. */ public void getNormalIndices(int index, int normalIndices[]) { if (isLiveOrCompiled()) if(!this.getCapability(ALLOW_NORMAL_INDEX_READ)) throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray13")); ((IndexedGeometryArrayRetained)this.retained).getNormalIndices(index, normalIndices); } /** * @deprecated As of Java 3D version 1.2, replaced by * getTextureCoordinateIndex(int texCoordSet, ...) */ public int getTextureCoordinateIndex(int index) { return (getTextureCoordinateIndex(0, index)); } /** * Retrieves the texture coordinate index associated with the vertex at * the specified index in the specified texture coordinate set * for this object. * * @param texCoordSet texture coordinate set in this geometry array * @param index the vertex index * * @return the texture coordinate index * * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception ArrayIndexOutOfBoundsException if neither of the * TEXTURE_COORDINATE bits are set in the * vertexFormat or if the index or * texCoordSet is out of range. * * @exception NullPointerException if the USE_COORD_INDEX_ONLY * bit is set in vertexFormat. * * @since Java 3D 1.2 */ public int getTextureCoordinateIndex(int texCoordSet, int index) { if (isLiveOrCompiled()) if(!this.getCapability(ALLOW_COORDINATE_INDEX_READ)) throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray15")); return ((IndexedGeometryArrayRetained)this.retained).getTextureCoordinateIndex(texCoordSet, index); } /** * @deprecated As of Java 3D version 1.2, replaced by * getTextureCoordinateIndices(int texCoordSet, ...) */ public void getTextureCoordinateIndices(int index, int texCoordIndices[]) { getTextureCoordinateIndices(0, index, texCoordIndices); } /** * Retrieves the texture coordinate indices associated with the vertices * starting at the specified index in the specified texture coordinate set * for this object. The texture * coordinate indices are copied into the specified array. The array * must be large enough to hold all of the indices. * * @param texCoordSet texture coordinate set in this geometry array * @param index the vertex index * @param texCoordIndices array that will receive the texture coordinate * indices * * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception ArrayIndexOutOfBoundsException if neither of the * TEXTURE_COORDINATE bits are set in the * vertexFormat or if the index or * texCoordSet is out of range. * * @exception NullPointerException if the USE_COORD_INDEX_ONLY * bit is set in vertexFormat. * * @since Java 3D 1.2 */ public void getTextureCoordinateIndices(int texCoordSet, int index, int texCoordIndices[]) { if (isLiveOrCompiled()) if(!this.getCapability(ALLOW_COORDINATE_INDEX_READ)) throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray15")); ((IndexedGeometryArrayRetained)this.retained).getTextureCoordinateIndices(texCoordSet, index, texCoordIndices); } /** * Retrieves the vertex attribute index associated with the vertex at * the specified index for the specified vertex attribute number * for this object. * * @param vertexAttrNum vertex attribute number in this geometry array * @param index the vertex index * * @return the vertex attribute index * * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception ArrayIndexOutOfBoundsException if the index or * vertexAttrNum is out of range. * * @exception NullPointerException if the USE_COORD_INDEX_ONLY * bit is set in vertexFormat. * * @since Java 3D 1.4 */ public int getVertexAttrIndex(int vertexAttrNum, int index) { if (isLiveOrCompiled()) { if(!this.getCapability(ALLOW_VERTEX_ATTR_INDEX_READ)) { throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray29")); } } return ((IndexedGeometryArrayRetained)this.retained).getVertexAttrIndex(vertexAttrNum, index); } /** * Retrieves the vertex attribute indices associated with the vertices * starting at the specified index for the specified vertex attribute number * for this object. The vertex attribute indices * are copied into the specified array. The array * must be large enough to hold all of the indices. * * @param vertexAttrNum vertex attribute number in this geometry array * @param index the vertex index * @param vertexAttrIndices array that will receive the vertex attribute indices * * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception ArrayIndexOutOfBoundsException if the index or * vertexAttrNum is out of range. * * @exception NullPointerException if the USE_COORD_INDEX_ONLY * bit is set in vertexFormat. * * @since Java 3D 1.4 */ public void getVertexAttrIndices(int vertexAttrNum, int index, int[] vertexAttrIndices) { if (isLiveOrCompiled()) { if(!this.getCapability(ALLOW_VERTEX_ATTR_INDEX_READ)) { throw new CapabilityNotSetException(J3dI18N.getString("IndexedGeometryArray29")); } } ((IndexedGeometryArrayRetained)this.retained).getVertexAttrIndices(vertexAttrNum, index, vertexAttrIndices); } /** * Copies all node information from originalNodeComponent into * the current node. This method is called from the * duplicateNode method. This routine does * the actual duplication of all "local data" (any data defined in * this object). * * @param originalNodeComponent the original node to duplicate. * @param forceDuplicate when set to true, causes the * duplicateOnCloneTree flag to be ignored. When * false, the value of each node's * duplicateOnCloneTree variable determines whether * NodeComponent data is duplicated or copied. * * @see Node#cloneTree * @see NodeComponent#setDuplicateOnCloneTree */ @Override void duplicateAttributes(NodeComponent originalNodeComponent, boolean forceDuplicate) { super.duplicateAttributes(originalNodeComponent, forceDuplicate); // vertexFormat, vertexCount and indexCount are copied in // subclass when constructor // public IndexedGeometryArray(int vertexCount, int vertexFormat, // int indexCount) // is used in cloneNodeComponent() IndexedGeometryArrayRetained ga = (IndexedGeometryArrayRetained) originalNodeComponent.retained; IndexedGeometryArrayRetained rt = (IndexedGeometryArrayRetained) retained; int vformat = ga.getVertexFormat(); int buffer[] = new int[ga.getIndexCount()]; if ((vformat & COORDINATES) != 0) { ga.getCoordinateIndices(0, buffer); rt.setCoordinateIndices(0, buffer); } if ((vformat & USE_COORD_INDEX_ONLY) == 0) { if ((vformat & NORMALS) != 0) { ga.getNormalIndices(0, buffer); rt.setNormalIndices(0, buffer); } if ((vformat & COLOR) != 0) { ga.getColorIndices(0, buffer); rt.setColorIndices(0, buffer); } if ((vformat & VERTEX_ATTRIBUTES) != 0) { for (int i = 0; i < ga.vertexAttrCount; i++) { ga.getVertexAttrIndices(i, 0, buffer); rt.setVertexAttrIndices(i, 0, buffer); } } if ((vformat & TEXTURE_COORDINATE) != 0) { for (int i = 0; i < ga.texCoordSetCount; i++) { ga.getTextureCoordinateIndices(i, 0, buffer); rt.setTextureCoordinateIndices(i, 0, buffer); } } } } }