# Class Cylinder

java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.Node
javax.media.j3d.Group
com.sun.j3d.utils.geometry.Primitive
com.sun.j3d.utils.geometry.Cylinder

public class Cylinder extends Primitive
Cylinder is a geometry primitive defined with a radius and a height. It is a capped cylinder centered at the origin with its central axis aligned along the Y-axis.

When a texture is applied to a cylinder, the texture is applied to the caps and the body different. A texture is mapped CCW from the back of the body. The top and bottom caps are mapped such that the texture appears front facing when the caps are rotated 90 degrees toward the viewer.

By default all primitives with the same parameters share their geometry (e.g., you can have 50 shperes in your scene, but the geometry is stored only once). A change to one primitive will effect all shared nodes. Another implication of this implementation is that the capabilities of the geometry are shared, and once one of the shared nodes is live, the capabilities cannot be set. Use the GEOMETRY_NOT_SHARED flag if you do not wish to share geometry among primitives with the same parameters.

## Field Summary

Fields
Modifier and Type
Field
Description
`static final int`
`BODY`
Designates the body of the cylinder.
`static final int`
`BOTTOM`
Designates the bottom end-cap of the cylinder.
`static final int`
`TOP`
Designates the top end-cap of the cylinder.

### Fields inherited from class Primitive

`ENABLE_APPEARANCE_MODIFY, ENABLE_GEOMETRY_PICKING, GENERATE_NORMALS, GENERATE_NORMALS_INWARD, GENERATE_TEXTURE_COORDS, GENERATE_TEXTURE_COORDS_Y_UP, GEOMETRY_NOT_SHARED`

### Fields inherited from class Group

`ALLOW_CHILDREN_EXTEND, ALLOW_CHILDREN_READ, ALLOW_CHILDREN_WRITE, ALLOW_COLLISION_BOUNDS_READ, ALLOW_COLLISION_BOUNDS_WRITE`

### Fields inherited from class Node

`ALLOW_AUTO_COMPUTE_BOUNDS_READ, ALLOW_AUTO_COMPUTE_BOUNDS_WRITE, ALLOW_BOUNDS_READ, ALLOW_BOUNDS_WRITE, ALLOW_COLLIDABLE_READ, ALLOW_COLLIDABLE_WRITE, ALLOW_LOCAL_TO_VWORLD_READ, ALLOW_LOCALE_READ, ALLOW_PARENT_READ, ALLOW_PICKABLE_READ, ALLOW_PICKABLE_WRITE, ENABLE_COLLISION_REPORTING, ENABLE_PICK_REPORTING`

## Constructor Summary

Constructors
Constructor
Description
`Cylinder()`
Constructs a default cylinder of radius of 1.0 and height of 2.0.
`Cylinder(float radius, float height)`
Constructs a default cylinder of a given radius and height.
`Cylinder(float radius, float height, int primflags, int xdivision, int ydivision, Appearance ap)`
Constructs a customized cylinder of a given radius, height, resolution (X and Y dimensions), and appearance.
`Cylinder(float radius, float height, int primflags, Appearance ap)`
Constructs a default cylinder of a given radius, height, primitive flags and appearance.
`Cylinder(float radius, float height, Appearance ap)`
Constructs a default cylinder of a given radius, height, and appearance.

## Method Summary

Modifier and Type
Method
Description
`Node`
`cloneNode(boolean forceDuplicate)`
Used to create a new instance of the node.
`void`
`duplicateNode(Node originalNode, boolean forceDuplicate)`
Copies all node information from `originalNode` into the current node.
`Appearance`
`getAppearance(int partId)`
Gets the appearance of the specified part of the cylinder.
`float`
`getHeight()`
Returns the height of the cylinder
`float`
`getRadius()`
Returns the radius of the cylinder
`Shape3D`
`getShape(int partId)`
Obtains the Shape3D node associated with a given part of the cylinder.
`int`
`getXdivisions()`
Returns the number divisions along the X direction
`int`
`getYdivisions()`
Returns the number of divisions along the height of the cylinder
`void`
`setAppearance(Appearance ap)`
Sets appearance of the cylinder.

### Methods inherited from class Primitive

`cacheGeometry, clearGeometryCache, getAppearance, getCachedGeometry, getNumTriangles, getNumVertices, getPrimitiveFlags, setAppearance, setAppearance, setNumTriangles, setNumVertices, setPrimitiveFlags`

### Methods inherited from class Group

`addChild, getAllChildren, getAlternateCollisionTarget, getChild, getCollisionBounds, indexOfChild, insertChild, moveTo, numChildren, removeAllChildren, removeChild, removeChild, setAlternateCollisionTarget, setChild, setCollisionBounds`

### Methods inherited from class Node

`cloneTree, cloneTree, cloneTree, cloneTree, cloneTree, cloneTree, getBounds, getBoundsAutoCompute, getCollidable, getLocale, getLocalToVworld, getLocalToVworld, getParent, getPickable, setBounds, setBoundsAutoCompute, setCollidable, setPickable`

### Methods inherited from class SceneGraphObject

`clearCapability, clearCapabilityIsFrequent, duplicateSceneGraphObject, getCapability, getCapabilityIsFrequent, getName, getUserData, isCompiled, isLive, setCapability, setCapabilityIsFrequent, setName, setUserData, toString, updateNodeReferences`

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

## Field Details

### BODY

public static final int BODY
Designates the body of the cylinder. Used by `getShape`.

See Also:
  - `getShape(int)`
  - Constant Field Values

### TOP

public static final int TOP
Designates the top end-cap of the cylinder. Used by `getShape`.

See Also:
  - `getShape(int)`
  - Constant Field Values

### BOTTOM

public static final int BOTTOM
Designates the bottom end-cap of the cylinder. Used by `getShape`.

See Also:
  - `getShape(int)`
  - Constant Field Values

## Constructor Details

### Cylinder

public Cylinder()
Constructs a default cylinder of radius of 1.0 and height of 2.0. Normals are generated by default, texture coordinates are not. Resolution defaults to 15 divisions along X axis and 1 along the Y axis.

### Cylinder

public Cylinder(float radius, float height)
Constructs a default cylinder of a given radius and height. Normals are generated by default, texture coordinates are not.

Parameters:
  `radius` - Radius
  `height` - Height

### Cylinder

public Cylinder(float radius, float height, Appearance ap)
Constructs a default cylinder of a given radius, height, and appearance. Normals are generated by default, texture coordinates are not.

Parameters:
  `radius` - Radius
  `height` - Height
  `ap` - Appearance

### Cylinder

public Cylinder(float radius, float height, int primflags, Appearance ap)
Constructs a default cylinder of a given radius, height, primitive flags and appearance.

Parameters:
  `radius` - Radius
  `height` - Height
  `primflags` - Flags
  `ap` - Appearance

### Cylinder

public Cylinder(float radius, float height, int primflags, int xdivision, int ydivision, Appearance ap)
Constructs a customized cylinder of a given radius, height, resolution (X and Y dimensions), and appearance. The resolution is defined in terms of number of subdivisions along the object's X axis (width) and Y axis (height). More divisions lead to more finely tesselated objects.

Parameters:
  `radius` - Radius
  `height` - Height
  `primflags` - Primitive flags.
  `xdivision` - Number of divisions along X direction.
  `ydivision` - Number of divisions along height of cylinder.
  `ap` - Appearance

## Method Details

### getShape

public Shape3D getShape(int partId)
Obtains the Shape3D node associated with a given part of the cylinder. This allows users to modify the appearance or geometry of individual parts.

Specified by:
  `getShape` in class `Primitive`
Parameters:
  `partId` - The part to return (BODY, TOP, or BOTTOM).
Returns:
  The Shape3D object associated with the partID. If an invalid partId is passed in, null is returned.

### setAppearance

public void setAppearance(Appearance ap)
Sets appearance of the cylinder. This will set each part of the cylinder (TOP,BOTTOM,BODY) to the same appearance. To set each part's appearance separately, use getShape(partId) to get the individual shape and call shape.setAppearance(ap).

Specified by:
  `setAppearance` in class `Primitive`

### getAppearance

public Appearance getAppearance(int partId)
Gets the appearance of the specified part of the cylinder.

Specified by:
  `getAppearance` in class `Primitive`
Parameters:
  `partId` - identifier for a given subpart of the cylinder
Returns:
  The appearance object associated with the partID. If an invalid partId is passed in, null is returned.
Since:
  Java 3D 1.2.1

### cloneNode

public Node cloneNode(boolean forceDuplicate)
Used to create a new instance of the node. This routine is called by `cloneTree` to duplicate the current node. `cloneNode` should be overridden by any user subclassed objects. All subclasses must have their `cloneNode` method consist of the following lines:

>         public Node cloneNode(boolean forceDuplicate) {
>             UserSubClass usc = new UserSubClass();
>             usc.duplicateNode(this, forceDuplicate);
>             return usc;
>         }

Overrides:
  `cloneNode` in class `Group`
Parameters:
  `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 Also:
  - `Node.cloneTree()`
  - `Node.duplicateNode(Node, boolean)`
  - `NodeComponent.setDuplicateOnCloneTree(boolean)`

### duplicateNode

public void duplicateNode(Node originalNode, boolean forceDuplicate)
Copies all node information from `originalNode` into the current node. This method is called from the `cloneNode` method which is, in turn, called by the `cloneTree` method.

For any NodeComponent objects contained by the object being duplicated, each NodeComponent object's `duplicateOnCloneTree` value is used to determine whether the NodeComponent should be duplicated in the new node or if just a reference to the current node should be placed in the new node. This flag can be overridden by setting the `forceDuplicate` parameter in the `cloneTree` method to `true`.

Overrides:
  `duplicateNode` in class `Node`
Parameters:
  `originalNode` - the original node to duplicate.
  `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 Also:
  - `Node.cloneTree()`
  - `Node.cloneNode(boolean)`
  - `NodeComponent.setDuplicateOnCloneTree(boolean)`

### getRadius

public float getRadius()
Returns the radius of the cylinder

Since:
  Java 3D 1.2.1

### getHeight

public float getHeight()
Returns the height of the cylinder

Since:
  Java 3D 1.2.1

### getXdivisions

public int getXdivisions()
Returns the number divisions along the X direction

Since:
  Java 3D 1.2.1

### getYdivisions

public int getYdivisions()
Returns the number of divisions along the height of the cylinder

Since:
  Java 3D 1.2.1