📄 orientedshape3d.java
字号:
/* * $RCSfile: OrientedShape3D.java,v $ * * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved. * * Use is subject to license terms. * * $Revision: 1.6 $ * $Date: 2007/02/09 17:18:13 $ * $State: Exp $ */package javax.media.j3d;import javax.vecmath.*;/** * The OrientedShape3D leaf node is a Shape3D node that is oriented * along a specified axis or about a specified point. It defines an * alignment mode and a rotation point or axis. This will cause * the local +<i>z</i> axis of the object to point at the viewer's eye * position. This is done regardless of the transforms above this * OrientedShape3D node in the scene graph. It optionally defines a * scale value along with a constant scale enable flag that causes * this node to be scale invariant, subject only to its scale. * * <p> * OrientedShape3D is similar in functionality to the Billboard * behavior, but OrientedShape3D nodes will orient themselves * correctly for each view, and they can be used within a SharedGroup. * * <p> * If the alignment mode is ROTATE_ABOUT_AXIS, then the rotation will be * around the specified axis. If the alignment mode is * ROTATE_ABOUT_POINT, then the rotation will be about the specified * point, with an additional rotation to align the +<i>y</i> axis of the * TransformGroup with the +<i>y</i> axis in the View. * * <p> * If the constant scale enable flag is set, the object will be drawn * the same size in absolute screen coordinates (meters), regardless * of the following: any transforms above this OrientedShape3D node in * the scene graph, the view scale, the window scale, or the effects * of perspective correction. This is done by scaling the geometry * about the local origin of this node, such that 1 unit in local * coordinates is equal to the number of meters specified by this * node's scale value. If the constant scale enable flag is set to * false, then the scale is not used. The default scale is 1.0 * meters. * * <p> * OrientedShape3D nodes are ideal for drawing screen-aligned text or * for drawing roughly-symmetrical objects. A typical use might * consist of a quadrilateral that contains a texture of a tree. * * <p> * Note that in a multiple View system, picking and interestion test * is done with the primary View only. * * @see Billboard * * @since Java 3D 1.2 */public class OrientedShape3D extends Shape3D { /** * Specifies that rotation should be about the specified axis. * @see #setAlignmentMode */ public static final int ROTATE_ABOUT_AXIS = 0; /** * Specifies that rotation should be about the specified point and * that the children's Y-axis should match the view object's Y-axis. * @see #setAlignmentMode */ public static final int ROTATE_ABOUT_POINT = 1; /** * Specifies that no rotation is done. The OrientedShape3D will * not be aligned to the view. * @see #setAlignmentMode * * @since Java 3D 1.3 */ public static final int ROTATE_NONE = 2; /** * Specifies that this OrientedShape3D node * allows reading its alignment mode information. */ public static final int ALLOW_MODE_READ = CapabilityBits.ORIENTED_SHAPE3D_ALLOW_MODE_READ; /** * Specifies that this OrientedShape3D node * allows writing its alignment mode information. */ public static final int ALLOW_MODE_WRITE = CapabilityBits.ORIENTED_SHAPE3D_ALLOW_MODE_WRITE; /** * Specifies that this OrientedShape3D node * allows reading its alignment axis information. */ public static final int ALLOW_AXIS_READ = CapabilityBits.ORIENTED_SHAPE3D_ALLOW_AXIS_READ; /** * Specifies that this OrientedShape3D node * allows writing its alignment axis information. */ public static final int ALLOW_AXIS_WRITE = CapabilityBits.ORIENTED_SHAPE3D_ALLOW_AXIS_WRITE; /** * Specifies that this OrientedShape3D node * allows reading its rotation point information. */ public static final int ALLOW_POINT_READ = CapabilityBits.ORIENTED_SHAPE3D_ALLOW_POINT_READ; /** * Specifies that this OrientedShape3D node * allows writing its rotation point information. */ public static final int ALLOW_POINT_WRITE = CapabilityBits.ORIENTED_SHAPE3D_ALLOW_POINT_WRITE; /** * Specifies that this OrientedShape3D node * allows reading its scale and constant scale enable information. * * @since Java 3D 1.3 */ public static final int ALLOW_SCALE_READ = CapabilityBits.ORIENTED_SHAPE3D_ALLOW_SCALE_READ; /** * Specifies that this OrientedShape3D node * allows writing its scale and constant scale enable information. * * @since Java 3D 1.3 */ public static final int ALLOW_SCALE_WRITE = CapabilityBits.ORIENTED_SHAPE3D_ALLOW_SCALE_WRITE; // Array for setting default read capabilities private static final int[] readCapabilities = { ALLOW_MODE_READ, ALLOW_AXIS_READ, ALLOW_POINT_READ, ALLOW_SCALE_READ }; /** * Constructs an OrientedShape3D node with default parameters. * The default values are as follows: * <ul> * alignment mode : ROTATE_ABOUT_AXIS<br> * alignment axis : Y-axis (0,1,0)<br> * rotation point : (0,0,1)<br> * constant scale enable : false<br> * scale : 1.0<br> *</ul> */ public OrientedShape3D() { super(); // set default read capabilities setDefaultReadCapabilities(readCapabilities); } /** * Constructs an OrientedShape3D node with the specified geometry * component, appearance component, mode, and axis. * The specified axis must not be parallel to the <i>Z</i> * axis--(0,0,<i>z</i>) for any value of <i>z</i>. It is not * possible for the +<i>Z</i> axis to point at the viewer's eye * position by rotating about itself. The target transform will * be set to the identity if the axis is (0,0,<i>z</i>). * * @param geometry the geometry component with which to initialize * this shape node * @param appearance the appearance component of the shape node * @param mode alignment mode, one of: ROTATE_ABOUT_AXIS, * ROTATE_ABOUT_POINT, or ROTATE_NONE * @param axis the ray about which the OrientedShape3D rotates */ public OrientedShape3D(Geometry geometry, Appearance appearance, int mode, Vector3f axis) { super(geometry, appearance); // set default read capabilities setDefaultReadCapabilities(readCapabilities); ((OrientedShape3DRetained)retained).initAlignmentMode(mode); ((OrientedShape3DRetained)retained).initAlignmentAxis(axis); } /** * Constructs an OrientedShape3D node with the specified geometry * component, appearance component, mode, and rotation point. * * @param geometry the geometry component with which to initialize * this shape node * @param appearance the appearance component of the shape node * @param mode alignment mode, one of: ROTATE_ABOUT_AXIS, * ROTATE_ABOUT_POINT, or ROTATE_NONE * @param point the position about which the OrientedShape3D rotates */ public OrientedShape3D(Geometry geometry, Appearance appearance, int mode, Point3f point) { super(geometry, appearance); // set default read capabilities setDefaultReadCapabilities(readCapabilities); ((OrientedShape3DRetained)retained).initAlignmentMode(mode); ((OrientedShape3DRetained)retained).initRotationPoint(point); } /** * Constructs an OrientedShape3D node with the specified geometry * component, appearance component, mode, axis, constant scale * enable flag, and scale * The specified axis must not be parallel to the <i>Z</i> * axis--(0,0,<i>z</i>) for any value of <i>z</i>. It is not * possible for the +<i>Z</i> axis to point at the viewer's eye * position by rotating about itself. The target transform will * be set to the identity if the axis is (0,0,<i>z</i>). * * @param geometry the geometry component with which to initialize * this shape node * @param appearance the appearance component of the shape node * @param mode alignment mode, one of: ROTATE_ABOUT_AXIS, * ROTATE_ABOUT_POINT, or ROTATE_NONE * @param axis the ray about which the OrientedShape3D rotates * @param constantScaleEnable a flag indicating whether to enable * constant scale * @param scale scale value used when constant scale is enabled * * @since Java 3D 1.3 */ public OrientedShape3D(Geometry geometry, Appearance appearance, int mode, Vector3f axis, boolean constantScaleEnable, double scale) { super(geometry, appearance); // set default read capabilities setDefaultReadCapabilities(readCapabilities); ((OrientedShape3DRetained)retained).initAlignmentMode(mode); ((OrientedShape3DRetained)retained).initAlignmentAxis(axis); ((OrientedShape3DRetained)retained). initConstantScaleEnable(constantScaleEnable); ((OrientedShape3DRetained)retained).initScale(scale); } /** * Constructs an OrientedShape3D node with the specified geometry * component, appearance component, mode, and rotation point. * * @param geometry the geometry component with which to initialize * this shape node * @param appearance the appearance component of the shape node * @param mode alignment mode, one of: ROTATE_ABOUT_AXIS, * ROTATE_ABOUT_POINT, or ROTATE_NONE * @param point the position about which the OrientedShape3D rotates * @param constantScaleEnable a flag indicating whether to enable * constant scale * @param scale scale value used when constant scale is enabled * * @since Java 3D 1.3 */ public OrientedShape3D(Geometry geometry, Appearance appearance, int mode, Point3f point, boolean constantScaleEnable, double scale) { super(geometry, appearance); // set default read capabilities setDefaultReadCapabilities(readCapabilities); ((OrientedShape3DRetained)retained).initAlignmentMode(mode); ((OrientedShape3DRetained)retained).initRotationPoint(point); ((OrientedShape3DRetained)retained). initConstantScaleEnable(constantScaleEnable); ((OrientedShape3DRetained)retained).initScale(scale); } /** * Creates the retained mode OrientedShape3DRetained object that this * OrientedShape3D object will point to. */ void createRetained() { retained = new OrientedShape3DRetained(); retained.setSource(this); } /** * Sets the alignment mode. * * @param mode alignment mode, one of: ROTATE_ABOUT_AXIS, * ROTATE_ABOUT_POINT, or ROTATE_NONE * * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph */ public void setAlignmentMode(int mode) { if (isLiveOrCompiled()) if (!this.getCapability(ALLOW_MODE_WRITE)) throw new CapabilityNotSetException(J3dI18N.getString("OrientedShape3D0")); if (isLive()) ((OrientedShape3DRetained)retained).setAlignmentMode(mode); else ((OrientedShape3DRetained)retained).initAlignmentMode(mode);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -