j3d.org Aviatrix3D

org.j3d.aviatrix3d
Class VertexGeometry

java.lang.Object
  extended byorg.j3d.aviatrix3d.SceneGraphObject
      extended byorg.j3d.aviatrix3d.NodeComponent
          extended byorg.j3d.aviatrix3d.Geometry
              extended byorg.j3d.aviatrix3d.VertexGeometry
All Implemented Interfaces:
PickableObject
Direct Known Subclasses:
IndexedVertexGeometry, LineArray, LineStripArray, PointArray, QuadArray, QuadStripArray, TriangleArray, TriangleFanArray, TriangleStripArray

public abstract class VertexGeometry
extends Geometry

Common representation of all vertex-based geometry.

This class represents the raw values of the geometry. How these are turned into a rendered primitive by OpenGL is dependent on the derived class. Internally all the geometry is stored by reference to the user provided array of data, but a copy is made and placed in an instance of a FloatBuffer. The buffer is used as it is an optimisation step used at the OpenGL level for faster rendering. If the user changes the values in their array, we won't know about it unless the user calls the appropriate setter method, at which point we'll update our array.

Currently the class does not take any sort of optimisation hints. This is a design task in the future. For example, we would like to hint that the class should use interleaved geometry instead of a single array for each data type.

For the alpha flag setting, the current approach is pretty dumb. If you have hasAlpha as true in the setColor() method call then we blindly assume that you really do have some values that have non-one transparency, and thus it will get put into the list of transparent objects during transparency sorting. If you really want to avoid this, then only set 3-component colour values.

Reading Values

The data stored here is kept by reference as well as the copy to the internal buffers. The getter methods provided here copy the referenced array into the user provided array. This can be a significant performance hit. If you need to access the data and the user application is keeping references to the provided arrays, there is no need to use the getter methods here - just read the array directly. We make no changes, so what you put in is what you would get out too.

Version:
$Revision: 1.27 $
Author:
Justin Couch

Field Summary
protected static int COLOR_3
          RGB colour values are supplied in the data
protected static int COLOR_4
          RGBA colour values are supplied in the data
protected static int COLOR_CLEAR
          Mask to clear the per-vertex colour setting
protected static int COLOR_MASK
          Mask to work out if colours are used
protected static int COLOR2
          Secondary color values are supplied in the data
protected static int COLOR2_CLEAR
          Mask to clear the per-vertex secondary colour setting
protected static int COLOR2_MASK
          Mask to work out if secondary colours are used
protected  java.nio.FloatBuffer color2Buffer
          Buffer for holding secondary color data
protected  float[] color2s
          Reference to the user array of secondary colors used
protected  java.nio.FloatBuffer colorBuffer
          Buffer for holding colour data
protected  float[] colors
          Reference to the user array of colors used
static int COORDINATE_2
          2D Coordinate information is included in the vertex values
static int COORDINATE_3
          3D Coordinate information is included in the vertex values
static int COORDINATE_4
          4D Coordinate information is included in the vertex values
protected static int COORDINATE_CLEAR
          Mask to clear the coordinate setting
protected static int COORDINATE_MASK
          Mask to work out what coordinates are used
protected  float[] coordinates
          Reference to the user array of coordinates used
protected static int EDGE_CLEAR
          Mask to clear the edge flag setting
protected static int EDGE_MASK
          Mask to work out if edge flags are used
protected static int EDGES
          Edge values are supplied in the data
protected static int FOG
          Fog coordinate values are supplied in the data
protected static int FOG_CLEAR
          Mask to clear the fog coordinate setting
protected static int FOG_MASK
          Mask to work out if fog coordinates are used
protected  java.nio.FloatBuffer fogBuffer
          Buffer for holding fog coordinate data
protected  float[] fogCoords
          Reference to the user array of fog coordinates used
protected static int NORMAL_CLEAR
          Mask to clear the normal setting
protected  java.nio.FloatBuffer normalBuffer
          Buffer for holding normal data
protected  float[] normals
          Reference to the user array of normals used
protected static int NORMALS
          Normal information is included in the vertex values
protected  int numCoords
          Number of valid entries in the coordinate array
protected  int numTextureArrays
          The number of valid texture arrays in the textures variable
protected  int numTextureSets
          List of offsets into the texture array /** The number of texture sets to use from the textureSet array
protected static int TEXTURE_CLEAR
          Mask to clear the texture coordinate setting
static int TEXTURE_COORDINATE_1
          1D texture coordinates are included in the vertex values
static int TEXTURE_COORDINATE_2
          2D texture coordinates are included in the vertex values
static int TEXTURE_COORDINATE_3
          3D texture coordinates are included in the vertex values
static int TEXTURE_COORDINATE_4
          4D texture coordinates are included in the vertex values
protected static int TEXTURE_COORDINATE_MULTI
          Multiple sets of texture coordinates are included in the vertex values
protected static int TEXTURE_COORDINATE_SINGLE
          Single set of texture coordinates are included in the vertex values
protected static int TEXTURE_MASK
          Mask to work out if texture coordinates are used
protected static int TEXTURE_SET_AVAILABLE
          Has a valid texture set provided
protected static int TEXTURE_SET_CLEAR
          Has a valid texture set provided
protected  java.nio.FloatBuffer[] textureBuffer
          Buffer for holding texture coordinate data
protected  float[][] textures
          Reference to the user array of textures used, indexed by set
protected  int[] textureSets
          The texture set map array that describes how to map the arrays
protected  int[] textureTypes
          Flags for the texture type for each array.
protected  java.nio.FloatBuffer vertexBuffer
          Buffer for holding vertex data
protected  int vertexFormat
          The format of the geometry used
protected  float[] wkPolygon
          Working places for a single quad/triangle
 
Fields inherited from class org.j3d.aviatrix3d.Geometry
bounds, implicitBounds, internalUpdater, lastParentList, parentList, pickFlags, validAlpha
 
Fields inherited from class org.j3d.aviatrix3d.NodeComponent
liveCount
 
Fields inherited from class org.j3d.aviatrix3d.SceneGraphObject
alive, updateHandler, WRITE_TIMING_MSG
 
Fields inherited from interface org.j3d.aviatrix3d.PickableObject
COLLIDABLE_OBJECT, GENERAL_OBJECT, PROXIMITY_OBJECT, VISIBLE_OBJECT
 
Constructor Summary
protected VertexGeometry()
          Constructs an instance with pre-defined values with default values.
 
Method Summary
 int getValidVertexCount()
          Get the number of vertices that are valid in the geometry arrays.
 int getVertexType()
          Get the current vertex format type - 2D, 3D, or 4D.
 void getVertices(float[] vertices)
          Retrieve the vertices that are currently set.
protected  void initPolygonDetails(int numCoords)
          Initialize the internal arrays to a given size for the picking.
protected  void markBoundsDirty()
          Mark this node as having dirty bounds due to it's geometry having changed.
 boolean pickLineRay(float[] origin, float[] direction, boolean findAny, float[] dataOut, int dataOutFlags)
          Check for all intersections against this geometry using a line ray and return the exact distance away of the closest picking point.
 boolean pickLineSegment(float[] start, float[] end, boolean findAny, float[] dataOut, int dataOutFlags)
          Check for all intersections against this geometry using a line segment and return the exact distance away of the closest picking point.
protected  boolean ray3DQuadChecked(float[] origin, float[] direction, float length, float[] dataOut)
          Private version of the ray - Polygon intersection test that does not do any bounds checking on arrays and assumes everything is correct.
protected  boolean ray3DTriangleChecked(float[] origin, float[] direction, float length, float[] dataOut)
          Private version of the ray - Polygon intersection test that does not do any bounds checking on arrays and assumes everything is correct.
protected  void recomputeBounds()
          Internal method to recalculate the implicit bounds of this Node.
 void setColors(boolean hasAlpha, float[] colors)
          Set the color array reference to the new array.
 void setFogCoordinates(float[] coords)
          Set the fog coordinate reference to the new array.
protected  void setLive(boolean state)
          Notification that this object is live now.
 void setNormals(float[] normals)
          Set the normal array reference to the new array.
 void setSecondaryColors(float[] colors)
          Set the secondary color reference to the new array.
 void setTextureCoordinates(int[] types, float[][] texCoords)
          Replace all the texture array reference with the new array.
 void setTextureCoordinates(int[] types, float[][] texCoords, int numSets)
          Replace all the texture array reference to the new array.
 void setTextureCoordinates(int type, int textureSet, float[] texCoords)
          Set a single texture array reference to the new array.
 void setTextureSetMap(int[] set)
          Set the texture set map to the new mapping.
 void setTextureSetMap(int[] set, int numValid)
          Set the texture set map to the new mapping.
 void setValidVertexCount(int count)
          Set the number of vertices to the new number.
 void setVertices(int type, float[] vertices)
          Set the vertex array reference to the new array.
 void setVertices(int type, float[] vertices, int numValid)
          Set the vertex array reference to the new array.
protected  void updateBounds()
          Update this node's bounds and then call the parent to update it's bounds.
 
Methods inherited from class org.j3d.aviatrix3d.Geometry
addParent, boundsChanged, getBounds, getPickMask, hasTransparency, pickBatch, pickSingle, removeParent, setBounds, setPickMask
 
Methods inherited from class org.j3d.aviatrix3d.NodeComponent
addParent, getParents, hasChanged, numParents, removeParent, renderState, restoreState
 
Methods inherited from class org.j3d.aviatrix3d.SceneGraphObject
checkForCyclicChild, checkForCyclicParent, dataChanged, getUserData, isLive, setUpdateHandler, setUserData
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

COORDINATE_2

public static final int COORDINATE_2
2D Coordinate information is included in the vertex values

See Also:
Constant Field Values

COORDINATE_3

public static final int COORDINATE_3
3D Coordinate information is included in the vertex values

See Also:
Constant Field Values

COORDINATE_4

public static final int COORDINATE_4
4D Coordinate information is included in the vertex values

See Also:
Constant Field Values

COORDINATE_MASK

protected static final int COORDINATE_MASK
Mask to work out what coordinates are used

See Also:
Constant Field Values

COORDINATE_CLEAR

protected static final int COORDINATE_CLEAR
Mask to clear the coordinate setting

See Also:
Constant Field Values

NORMALS

protected static final int NORMALS
Normal information is included in the vertex values

See Also:
Constant Field Values

NORMAL_CLEAR

protected static final int NORMAL_CLEAR
Mask to clear the normal setting

See Also:
Constant Field Values

TEXTURE_MASK

protected static final int TEXTURE_MASK
Mask to work out if texture coordinates are used

See Also:
Constant Field Values

TEXTURE_CLEAR

protected static final int TEXTURE_CLEAR
Mask to clear the texture coordinate setting

See Also:
Constant Field Values

TEXTURE_COORDINATE_SINGLE

protected static final int TEXTURE_COORDINATE_SINGLE
Single set of texture coordinates are included in the vertex values

See Also:
Constant Field Values

TEXTURE_COORDINATE_MULTI

protected static final int TEXTURE_COORDINATE_MULTI
Multiple sets of texture coordinates are included in the vertex values

See Also:
Constant Field Values

TEXTURE_SET_AVAILABLE

protected static final int TEXTURE_SET_AVAILABLE
Has a valid texture set provided

See Also:
Constant Field Values

TEXTURE_SET_CLEAR

protected static final int TEXTURE_SET_CLEAR
Has a valid texture set provided

See Also:
Constant Field Values

COLOR_MASK

protected static final int COLOR_MASK
Mask to work out if colours are used

See Also:
Constant Field Values

COLOR_CLEAR

protected static final int COLOR_CLEAR
Mask to clear the per-vertex colour setting

See Also:
Constant Field Values

COLOR_3

protected static final int COLOR_3
RGB colour values are supplied in the data

See Also:
Constant Field Values

COLOR_4

protected static final int COLOR_4
RGBA colour values are supplied in the data

See Also:
Constant Field Values

EDGE_MASK

protected static final int EDGE_MASK
Mask to work out if edge flags are used

See Also:
Constant Field Values

EDGE_CLEAR

protected static final int EDGE_CLEAR
Mask to clear the edge flag setting

See Also:
Constant Field Values

EDGES

protected static final int EDGES
Edge values are supplied in the data

See Also:
Constant Field Values

COLOR2_MASK

protected static final int COLOR2_MASK
Mask to work out if secondary colours are used

See Also:
Constant Field Values

COLOR2_CLEAR

protected static final int COLOR2_CLEAR
Mask to clear the per-vertex secondary colour setting

See Also:
Constant Field Values

COLOR2

protected static final int COLOR2
Secondary color values are supplied in the data

See Also:
Constant Field Values

FOG_MASK

protected static final int FOG_MASK
Mask to work out if fog coordinates are used

See Also:
Constant Field Values

FOG_CLEAR

protected static final int FOG_CLEAR
Mask to clear the fog coordinate setting

See Also:
Constant Field Values

FOG

protected static final int FOG
Fog coordinate values are supplied in the data

See Also:
Constant Field Values

TEXTURE_COORDINATE_1

public static final int TEXTURE_COORDINATE_1
1D texture coordinates are included in the vertex values

See Also:
Constant Field Values

TEXTURE_COORDINATE_2

public static final int TEXTURE_COORDINATE_2
2D texture coordinates are included in the vertex values

See Also:
Constant Field Values

TEXTURE_COORDINATE_3

public static final int TEXTURE_COORDINATE_3
3D texture coordinates are included in the vertex values

See Also:
Constant Field Values

TEXTURE_COORDINATE_4

public static final int TEXTURE_COORDINATE_4
4D texture coordinates are included in the vertex values

See Also:
Constant Field Values

wkPolygon

protected float[] wkPolygon
Working places for a single quad/triangle


vertexBuffer

protected java.nio.FloatBuffer vertexBuffer
Buffer for holding vertex data


colorBuffer

protected java.nio.FloatBuffer colorBuffer
Buffer for holding colour data


normalBuffer

protected java.nio.FloatBuffer normalBuffer
Buffer for holding normal data


fogBuffer

protected java.nio.FloatBuffer fogBuffer
Buffer for holding fog coordinate data


color2Buffer

protected java.nio.FloatBuffer color2Buffer
Buffer for holding secondary color data


textureBuffer

protected java.nio.FloatBuffer[] textureBuffer
Buffer for holding texture coordinate data


coordinates

protected float[] coordinates
Reference to the user array of coordinates used


numCoords

protected int numCoords
Number of valid entries in the coordinate array


normals

protected float[] normals
Reference to the user array of normals used


textures

protected float[][] textures
Reference to the user array of textures used, indexed by set


numTextureArrays

protected int numTextureArrays
The number of valid texture arrays in the textures variable


textureSets

protected int[] textureSets
The texture set map array that describes how to map the arrays


textureTypes

protected int[] textureTypes
Flags for the texture type for each array.


numTextureSets

protected int numTextureSets
List of offsets into the texture array /** The number of texture sets to use from the textureSet array


colors

protected float[] colors
Reference to the user array of colors used


color2s

protected float[] color2s
Reference to the user array of secondary colors used


fogCoords

protected float[] fogCoords
Reference to the user array of fog coordinates used


vertexFormat

protected int vertexFormat
The format of the geometry used

Constructor Detail

VertexGeometry

protected VertexGeometry()
Constructs an instance with pre-defined values with default values.

Method Detail

setLive

protected void setLive(boolean state)
Notification that this object is live now. Overridden to make sure that the live state of the nodes represents the same state as the parent scene graph.

Overrides:
setLive in class SceneGraphObject
Parameters:
state - true if this should be marked as live now

getVertexType

public int getVertexType()
Get the current vertex format type - 2D, 3D, or 4D.

Returns:
The number of dimensions to the coordinates - 2D, 3D or 4D

getValidVertexCount

public int getValidVertexCount()
Get the number of vertices that are valid in the geometry arrays.

Returns:
a number >= 0
Throws:
java.lang.IllegalStateException - This call was not made during the update callback if the node is live

setValidVertexCount

public void setValidVertexCount(int count)
                         throws java.lang.IllegalStateException,
                                java.lang.IllegalArgumentException,
                                InvalidWriteTimingException
Set the number of vertices to the new number.

In a live scene graph, can only be called during the bounds changed callback.

Parameters:
count - The new number, must be >= 0
Throws:
java.lang.IllegalStateException - This call was not made during the update callback if the node is live
java.lang.IllegalArgumentException - The number is negative
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener callback method

setVertices

public void setVertices(int type,
                        float[] vertices)
                 throws java.lang.IllegalStateException,
                        InvalidWriteTimingException
Set the vertex array reference to the new array. The number of valid items is taken to be the length of the array divided by three. This replaces the existing vertex list array reference with the new reference.

In a live scene graph, can only be called during the bounds changed callback.

Parameters:
type - The number of dimensions to the coordinates - 2D, 3D or 4D
vertices - The new array reference to use for vertex information
Throws:
java.lang.IllegalStateException - This call was not made during the update callback if the node is live
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener callback method

getVertices

public void getVertices(float[] vertices)
Retrieve the vertices that are currently set. The array must be at least as long as the valid vertex count, times 3.

Parameters:
vertices - The array to copy the values into
Throws:
java.lang.ArrayIndexOutOfBoundsException - The provided array is too short

setVertices

public void setVertices(int type,
                        float[] vertices,
                        int numValid)
                 throws java.lang.IllegalStateException,
                        java.lang.IllegalArgumentException,
                        InvalidWriteTimingException
Set the vertex array reference to the new array. The number of valid items is taken from the second parameter. This replaces the existing vertex list array reference with the new reference.

In a live scene graph, can only be called during the bounds changed callback.

Parameters:
type - The number of dimensions to the coordinates - 2D, 3D or 4D
vertices - The new array reference to use for vertex information
numValid - The number of valid values to use in the array
Throws:
java.lang.IllegalStateException - This call was not made during the update callback if the node is live
java.lang.IllegalArgumentException - The number is negative
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener callback method

setColors

public void setColors(boolean hasAlpha,
                      float[] colors)
               throws java.lang.IllegalStateException,
                      java.lang.IllegalArgumentException,
                      InvalidWriteTimingException
Set the color array reference to the new array. The number of valid items is taken to be the length of the array divided by three. This replaces the existing vertex list array reference with the new reference.

In a live scene graph, can only be called during the data changed callback.

Parameters:
hasAlpha - true if this is 4 component colour, false for 3 component
colors - The new array reference to use for color information
Throws:
java.lang.IllegalStateException - This call was not made during the update callback if the node is live
java.lang.IllegalArgumentException - The length of the colors array is less than the number of declared vertices
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener callback method

setNormals

public void setNormals(float[] normals)
                throws java.lang.IllegalStateException,
                       java.lang.IllegalArgumentException,
                       InvalidWriteTimingException
Set the normal array reference to the new array. The number of valid items is taken to be the length of the array divided by three. This replaces the existing normal list array reference with the new reference.

In a live scene graph, can only be called during the data changed callback.

Parameters:
normals - The new array reference to use for normal information
Throws:
java.lang.IllegalStateException - This call was not made during the update callback if the node is live
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener callback method
java.lang.IllegalArgumentException

setTextureSetMap

public void setTextureSetMap(int[] set)
                      throws java.lang.IllegalStateException,
                             InvalidWriteTimingException
Set the texture set map to the new mapping. The number of sets defined is the length of the array.

In a live scene graph, can only be called during the data changed callback.

Parameters:
set - The new set to use
Throws:
java.lang.IllegalStateException - This call was not made during the update callback if the node is live
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener callback method

setTextureSetMap

public void setTextureSetMap(int[] set,
                             int numValid)
                      throws java.lang.IllegalStateException,
                             InvalidWriteTimingException
Set the texture set map to the new mapping. The number of sets defined is the numValid parameter.

In a live scene graph, can only be called during the data changed callback.

Parameters:
set - The new set to use
numValid - The length of the set to use
Throws:
java.lang.IllegalStateException - This call was not made during the update callback if the node is live
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener callback method

setTextureCoordinates

public void setTextureCoordinates(int type,
                                  int textureSet,
                                  float[] texCoords)
                           throws java.lang.IllegalStateException,
                                  java.lang.IllegalArgumentException,
                                  InvalidWriteTimingException
Set a single texture array reference to the new array. The number of valid items is taken to be the length of the array divided by three. This replaces the existing tex coord list array reference with the new reference.

In a live scene graph, can only be called during the data changed callback.

Parameters:
type - The texture type - 1D, 2D, 3D, 4D.
textureSet - The set to update with these arrays
texCoords - The new array reference to use for vertex information
Throws:
java.lang.IllegalStateException - This call was not made during the update callback if the node is live
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener callback method
java.lang.IllegalArgumentException

setTextureCoordinates

public void setTextureCoordinates(int[] types,
                                  float[][] texCoords)
                           throws java.lang.IllegalStateException,
                                  java.lang.IllegalArgumentException,
                                  InvalidWriteTimingException
Replace all the texture array reference with the new array. The number of valid items is taken to be the length of the array divided by the vertex format defined for this instance. This replaces the existing tex coord list array reference with the new reference.

In a live scene graph, can only be called during the data changed callback.

Parameters:
types - The sets of texture coordinate types that match each array
texCoords - The new array reference to use for vertex information
Throws:
java.lang.IllegalStateException - This call was not made during the update callback if the node is live
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener callback method
java.lang.IllegalArgumentException

setTextureCoordinates

public void setTextureCoordinates(int[] types,
                                  float[][] texCoords,
                                  int numSets)
                           throws java.lang.IllegalStateException,
                                  java.lang.IllegalArgumentException,
                                  InvalidWriteTimingException
Replace all the texture array reference to the new array. The number of valid texture coordinates is taken from the numValid parameter. The number of available sets is defined by numSets parameter.

In a live scene graph, can only be called during the data changed callback.

Parameters:
types - The sets of texture coordinate types that match each array
texCoords - The new array reference to use for vertex information
numSets - The number of texture sets that are valid
Throws:
java.lang.IllegalStateException - This call was not made during the update callback if the node is live
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener callback method
java.lang.IllegalArgumentException

setFogCoordinates

public void setFogCoordinates(float[] coords)
                       throws java.lang.IllegalStateException,
                              java.lang.IllegalArgumentException,
                              InvalidWriteTimingException
Set the fog coordinate reference to the new array. The number of valid items is taken to be the length of the array (there's only one coord per vertex). This replaces the existing fog coordinate array reference with the new reference. If set to null, will clear the use of fog coordinates. Setting this value will also cause the system to automatically make use of them rather than the fragment depth (it will inherently call glFogi(GL_FOG_COORDINATE_SOURCE, GL_FOG_COORDINATE) before setting these values and then clear it afterwards.

In a live scene graph, can only be called during the data changed callback.

Parameters:
coords - The new array reference to use for z depth values
Throws:
java.lang.IllegalStateException - This call was not made during the update callback if the node is live
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener callback method
java.lang.IllegalArgumentException

setSecondaryColors

public void setSecondaryColors(float[] colors)
                        throws java.lang.IllegalStateException,
                               java.lang.IllegalArgumentException,
                               InvalidWriteTimingException
Set the secondary color reference to the new array. The number of valid items is taken to be the length of the array divided by three as secondary color values cannot have an alpha value specified. This replaces the existing secondary color array reference with the new reference.

In a live scene graph, can only be called during the data changed callback.

Parameters:
colors - The new array reference to use for secondary color information
Throws:
java.lang.IllegalStateException - This call was not made during the update callback if the node is live
InvalidWriteTimingException - An attempt was made to write outside of the NodeUpdateListener callback method
java.lang.IllegalArgumentException

markBoundsDirty

protected void markBoundsDirty()
Mark this node as having dirty bounds due to it's geometry having changed.

Specified by:
markBoundsDirty in class Geometry

updateBounds

protected void updateBounds()
Update this node's bounds and then call the parent to update it's bounds. Used to propogate bounds changes from the leaves of the tree to the root. A node implementation may decide when and where to tell the parent(s)s that updates are ready.

Specified by:
updateBounds in class Geometry

recomputeBounds

protected void recomputeBounds()
Internal method to recalculate the implicit bounds of this Node. By default the bounds are a point sphere, so derived classes should override this method with something better.

Specified by:
recomputeBounds in class Geometry

pickLineSegment

public boolean pickLineSegment(float[] start,
                               float[] end,
                               boolean findAny,
                               float[] dataOut,
                               int dataOutFlags)
                        throws NotPickableException
Check for all intersections against this geometry using a line segment and return the exact distance away of the closest picking point. Default implementation always returns false indicating that nothing was found. Derived classes should override and provide a real implementation.

Overrides:
pickLineSegment in class Geometry
Parameters:
start - The start point of the segment
end - The end point of the segment
findAny - True if it only has to find a single intersection and can exit as soon as it finds the first intersection. False if it must find the closest polygon
dataOut - An array to put the data in for the intersection. Exact format is described by the flags
dataOutFlags - A set of derived-class specific flags describing what data should be included in the output array
Returns:
True if an intersection was found according to the input request
Throws:
NotPickableException - This object has been marked as non pickable, but you decided to try to call the method anyway

pickLineRay

public boolean pickLineRay(float[] origin,
                           float[] direction,
                           boolean findAny,
                           float[] dataOut,
                           int dataOutFlags)
                    throws NotPickableException
Check for all intersections against this geometry using a line ray and return the exact distance away of the closest picking point. Default implementation always returns false indicating that nothing was found. Derived classes should override and provide a real implementation.

Overrides:
pickLineRay in class Geometry
Parameters:
origin - The start point of the ray
direction - The direction vector of the ray
findAny - True if it only has to find a single intersection and can exit as soon as it finds the first intersection. False if it must find the closest polygon
dataOut - An array to put the data in for the intersection. Exact format is described by the flags
dataOutFlags - A set of derived-class specific flags describing what data should be included in the output array
Returns:
True if an intersection was found according to the input request
Throws:
NotPickableException - This object has been marked as non pickable, but you decided to try to call the method anyway

initPolygonDetails

protected void initPolygonDetails(int numCoords)
Initialize the internal arrays to a given size for the picking.

Parameters:
numCoords - The number of coordinates in the polygon

ray3DTriangleChecked

protected boolean ray3DTriangleChecked(float[] origin,
                                       float[] direction,
                                       float length,
                                       float[] dataOut)
Private version of the ray - Polygon intersection test that does not do any bounds checking on arrays and assumes everything is correct. Allows fast calls to this method for internal use as well as more expensive calls with checks for the public interfaces.

This method does not use wkPoint.

Parameters:
origin - The origin of the ray
direction - The direction of the ray
length - An optional length for to make the ray a segment. If the value is zero, it is ignored
dataOut - The intersection coordinates and more
Returns:
true if there was an intersection, false if not

ray3DQuadChecked

protected boolean ray3DQuadChecked(float[] origin,
                                   float[] direction,
                                   float length,
                                   float[] dataOut)
Private version of the ray - Polygon intersection test that does not do any bounds checking on arrays and assumes everything is correct. Allows fast calls to this method for internal use as well as more expensive calls with checks for the public interfaces.

This method does not use wkPoint.

Parameters:
origin - The origin of the ray
direction - The direction of the ray
length - An optional length for to make the ray a segment. If the value is zero, it is ignored
dataOut - The intersection coordinates and more
Returns:
true if there was an intersection, false if not

j3d.org Aviatrix3D

Latest Info from http://aviatrix3d.j3d.org/
Copyright © 2003 - j3d.org