diff options
author | Harvey Harrison <[email protected]> | 2015-04-19 21:02:06 -0700 |
---|---|---|
committer | Harvey Harrison <[email protected]> | 2015-04-19 21:02:06 -0700 |
commit | 7a2e20caac9db6f789a7b3fab344b9758af45335 (patch) | |
tree | b5236ff2570178de356eab569225108948eb4d30 /src/javax/media/j3d/Text3D.java | |
parent | f76ce302c4bb2a9f03bbee571ec5d05c29633023 (diff) |
j3dcore: flatten the directory structure a bit
Signed-off-by: Harvey Harrison <[email protected]>
Diffstat (limited to 'src/javax/media/j3d/Text3D.java')
-rw-r--r-- | src/javax/media/j3d/Text3D.java | 661 |
1 files changed, 661 insertions, 0 deletions
diff --git a/src/javax/media/j3d/Text3D.java b/src/javax/media/j3d/Text3D.java new file mode 100644 index 0000000..3791753 --- /dev/null +++ b/src/javax/media/j3d/Text3D.java @@ -0,0 +1,661 @@ +/* + * Copyright 1996-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; + +import javax.vecmath.Point3f; + +/** + * A Text3D object is a text string that has been converted to 3D + * geometry. The Font3D object determines the appearance of the + * Text3D NodeComponent object. Each Text3D object has the following + * parameters:<P> + * <UL> + * <LI>Font3D object - describes the font style of the text string, + * such as the font family (Helvetica, Courier, etc.), style (Italic, + * bold, etc.), and point size. The size of the resulting characters will + * be equal to the point size. For example, a 12 point font will result in + * a Font3D with characters 12 meters tall. </LI><P> + * <LI>Text string - the text string to be written.</LI><P> + * <LI>Position - determines the initial placement of the Text3D string + * in three-space.</LI><P> + * <LI>Alignment - specifies how glyphs in the string are placed in + * relation to the position parameter. Valid values are: + * <UL> + * <LI> ALIGN_CENTER - the center of the string is placed on the + * <code>position</code> point.</LI> + * <LI> ALIGN_FIRST - the first character of the string is placed on + * the <code>position</code> point.</LI> + * <LI> ALIGN_LAST - the last character of the string is placed on the + * <code>position</code> point.</LI> + * </UL><P> + * <LI>Path - specifies how succeeding glyphs in the string are placed + * in relation to the previous glyph. Valid values are:</LI><P> + * <UL> + * <LI> PATH_LEFT - succeeding glyphs are placed to the left of the + * current glyph.</LI> + * <LI> PATH_RIGHT - succeeding glyphs are placed to the right of the + * current glyph.</LI> + * <LI> PATH_UP - succeeding glyphs are placed above the current glyph.</LI> + * <LI> PATH_DOWN - succeeding glyphs are placed below the current glyph.</LI> + * </UL><P> + * <LI>Character spacing - the space between characters. This spacing is + * in addition to the regular spacing between glyphs as defined in the + * Font object.</LI></UL><P> + * + * @see Font3D + */ +public class Text3D extends Geometry { + + /** + * Specifies that this Text3D object allows + * reading the Font3D component information. + * + * @see Font3D + */ + public static final int + ALLOW_FONT3D_READ = CapabilityBits.TEXT3D_ALLOW_FONT3D_READ; + + /** + * Specifies that this Text3D object allows + * writing the Font3D component information. + * + * @see Font3D + */ + public static final int + ALLOW_FONT3D_WRITE = CapabilityBits.TEXT3D_ALLOW_FONT3D_WRITE; + + /** + * Specifies that this Text3D object allows + * reading the String object. + */ + public static final int + ALLOW_STRING_READ = CapabilityBits.TEXT3D_ALLOW_STRING_READ; + + /** + * Specifies that this Text3D object allows + * writing the String object. + */ + public static final int + ALLOW_STRING_WRITE = CapabilityBits.TEXT3D_ALLOW_STRING_WRITE; + + /** + * Specifies that this Text3D object allows + * reading the text position value. + */ + public static final int + ALLOW_POSITION_READ = CapabilityBits.TEXT3D_ALLOW_POSITION_READ; + + /** + * Specifies that this Text3D object allows + * writing the text position value. + */ + public static final int + ALLOW_POSITION_WRITE = CapabilityBits.TEXT3D_ALLOW_POSITION_WRITE; + + /** + * Specifies that this Text3D object allows + * reading the text alignment value. + */ + public static final int + ALLOW_ALIGNMENT_READ = CapabilityBits.TEXT3D_ALLOW_ALIGNMENT_READ; + + /** + * Specifies that this Text3D object allows + * writing the text alignment value. + */ + public static final int + ALLOW_ALIGNMENT_WRITE = CapabilityBits.TEXT3D_ALLOW_ALIGNMENT_WRITE; + + /** + * Specifies that this Text3D object allows + * reading the text path value. + */ + public static final int + ALLOW_PATH_READ = CapabilityBits.TEXT3D_ALLOW_PATH_READ; + + /** + * Specifies that this Text3D object allows + * writing the text path value. + */ + public static final int + ALLOW_PATH_WRITE = CapabilityBits.TEXT3D_ALLOW_PATH_WRITE; + + /** + * Specifies that this Text3D object allows + * reading the text character spacing value. + */ + public static final int + ALLOW_CHARACTER_SPACING_READ = CapabilityBits.TEXT3D_ALLOW_CHARACTER_SPACING_READ; + + /** + * Specifies that this Text3D object allows + * writing the text character spacing value. + */ + public static final int + ALLOW_CHARACTER_SPACING_WRITE = CapabilityBits.TEXT3D_ALLOW_CHARACTER_SPACING_WRITE; + + /** + * Specifies that this Text3D object allows + * reading the text string bounding box value + */ + public static final int + ALLOW_BOUNDING_BOX_READ = CapabilityBits.TEXT3D_ALLOW_BOUNDING_BOX_READ; + + /** + * <code>alignment</code>: the center of the string is placed on the + * <code>position</code> point. + * + * @see #getAlignment + */ + public static final int ALIGN_CENTER = 0; + + /** + * <code>alignment</code>: the first character of the string is placed + * on the <code>position</code> point. + * + * @see #getAlignment + */ + public static final int ALIGN_FIRST = 1; + + /** + * <code>alignment</code>: the last character of the string is placed + * on the <code>position</code> point. + * + * @see #getAlignment + */ + public static final int ALIGN_LAST = 2; + + /** + * <code>path</code>: succeeding glyphs are placed to the left of + * the current glyph. + * + * @see #getPath + */ + public static final int PATH_LEFT = 0; + /** + * <code>path</code>: succeeding glyphs are placed to the left of + * the current glyph. + * + * @see #getPath + */ + public static final int PATH_RIGHT = 1; + + /** + * <code>path</code>: succeeding glyphs are placed above the + * current glyph. + * + * @see #getPath + */ + public static final int PATH_UP = 2; + + /** + * <code>path</code>: succeeding glyphs are placed below the + * current glyph. + * + * @see #getPath + */ + public static final int PATH_DOWN = 3; + + // Array for setting default read capabilities + private static final int[] readCapabilities = { + ALLOW_FONT3D_READ, + ALLOW_STRING_READ, + ALLOW_POSITION_READ, + ALLOW_ALIGNMENT_READ, + ALLOW_PATH_READ, + ALLOW_CHARACTER_SPACING_READ, + ALLOW_BOUNDING_BOX_READ + }; + + /** + * Constructs a Text3D object with default parameters. + * The default values are as follows: + * <ul> + * font 3D : null<br> + * string : null<br> + * position : (0,0,0)<br> + * alignment : ALIGN_FIRST<br> + * path : PATH_RIGHT<br> + * character spacing : 0.0<br> + * </ul> + */ + public Text3D() { + // set default read capabilities + setDefaultReadCapabilities(readCapabilities); + } + + /** + * Creates a Text3D object with the given Font3D object. + * + * @see Font3D + */ + public Text3D(Font3D font3D) { + // set default read capabilities + setDefaultReadCapabilities(readCapabilities); + + ((Text3DRetained)this.retained).setFont3D(font3D); + } + + /** + * Creates a Text3D object given a Font3D object and a string. The + * string is converted into 3D glyphs. The first glyph from the + * string is placed at (0.0, 0.0, 0.0) and succeeding glyphs are + * placed to the right of the initial glyph. + * + * @see Font3D + */ + public Text3D(Font3D font3D, String string) { + // set default read capabilities + setDefaultReadCapabilities(readCapabilities); + + ((Text3DRetained)this.retained).setFont3D(font3D); + ((Text3DRetained)this.retained).setString(string); + } + + /** + * Creates a Text3D object given a Font3D, a string and position. The + * string is converted into 3D glyphs. The first glyph from the + * string is placed at position <code>position</code> and succeeding + * glyphs are placed to the right of the initial glyph. + * + * @see Font3D + */ + public Text3D(Font3D font3D, String string, Point3f position) { + // set default read capabilities + setDefaultReadCapabilities(readCapabilities); + + ((Text3DRetained)this.retained).setFont3D(font3D); + ((Text3DRetained)this.retained).setString(string); + ((Text3DRetained)this.retained).setPosition(position); + } + + /** + * Creates a Text3D object given a Font3D, string, position, alignment + * and path along which string is to be placed. The + * string is converted into 3D glyphs. The placement of the glyphs + * with respect to the <code>position</code> position depends on + * the alignment parameter and the path parameter. + * + * @see Font3D + */ + public Text3D(Font3D font3D, String string, Point3f position, + int alignment, int path) { + // set default read capabilities + setDefaultReadCapabilities(readCapabilities); + + ((Text3DRetained)this.retained).setFont3D(font3D); + ((Text3DRetained)this.retained).setString(string); + ((Text3DRetained)this.retained).setPosition(position); + ((Text3DRetained)this.retained).setAlignment(alignment); + ((Text3DRetained)this.retained).setPath(path); + } + + /** + * Creates the retained mode Text3DRetained object that this + * Text3D component object will point to. + */ + @Override + void createRetained() { + this.retained = new Text3DRetained(); + this.retained.setSource(this); + } + + + /** + * Returns the Font3D objects used by this Text3D NodeComponent object. + * + * @return the Font3D object of this Text3D node - null if no Font3D + * has been associated with this node. + * + * @exception CapabilityNotSetException if appropriate capability is + * not set and this object is part of live or compiled scene graph + */ + public Font3D getFont3D() { + if (isLiveOrCompiled()) + if(!this.getCapability(ALLOW_FONT3D_READ)) + throw new CapabilityNotSetException(J3dI18N.getString("Text3D0")); + return ((Text3DRetained)this.retained).getFont3D(); + + } + + /** + * Sets the Font3D object used by this Text3D NodeComponent object. + * + * @param font3d the Font3D object to associate with this Text3D node. + * + * @exception CapabilityNotSetException if appropriate capability is + * not set and this object is part of live or compiled scene graph + */ + public void setFont3D(Font3D font3d) { + if (isLiveOrCompiled()) + if(!this.getCapability(ALLOW_FONT3D_WRITE)) + throw new CapabilityNotSetException(J3dI18N.getString("Text3D1")); + ((Text3DRetained)this.retained).setFont3D(font3d); + + } + + /** + * Copies the character string used in the construction of the + * Text3D node into the supplied parameter. + * + * @return a copy of the String object in this Text3D node. + * + * @exception CapabilityNotSetException if appropriate capability is + * not set and this object is part of live or compiled scene graph + */ + public String getString() { + if (isLiveOrCompiled()) + if(!this.getCapability(ALLOW_STRING_READ)) + throw new CapabilityNotSetException(J3dI18N.getString("Text3D2")); + return ((Text3DRetained)this.retained).getString(); + } + + /** + * Copies the character string from the supplied parameter into the + * Text3D node. + * + * @param string the String object to recieve the Text3D node's string. + * + * @exception CapabilityNotSetException if appropriate capability is + * not set and this object is part of live or compiled scene graph + */ + public void setString(String string) { + if (isLiveOrCompiled()) + if(!this.getCapability(ALLOW_STRING_WRITE)) + throw new CapabilityNotSetException(J3dI18N.getString("Text3D3")); + ((Text3DRetained)this.retained).setString(string); + } + + /** + * Copies the node's <code>position</code> field into the supplied + * parameter. The <code>position</code> is used to determine the + * initial placement of the Text3D string. The position, combined with + * the path and alignment control how the text is displayed. + * + * @param position the point to position the text. + * + * @exception CapabilityNotSetException if appropriate capability is + * not set and this object is part of live or compiled scene graph + * + * @see #getAlignment + * @see #getPath + */ + public void getPosition(Point3f position) { + if (isLiveOrCompiled()) + if(!this.getCapability(ALLOW_POSITION_READ)) + throw new CapabilityNotSetException(J3dI18N.getString("Text3D4")); + ((Text3DRetained)this.retained).getPosition(position); + } + + /** + * Sets the node's <code>position</code> field to the supplied + * parameter. The <code>position</code> is used to determine the + * initial placement of the Text3D string. The position, combined with + * the path and alignment control how the text is displayed. + * + * @param position the point to position the text. + * + * @exception CapabilityNotSetException if appropriate capability is + * not set and this object is part of live or compiled scene graph + * + * @see #getAlignment + * @see #getPath + */ + public void setPosition(Point3f position) { + if (isLiveOrCompiled()) + if(!this.getCapability(ALLOW_POSITION_WRITE)) + throw new CapabilityNotSetException(J3dI18N.getString("Text3D5")); + ((Text3DRetained)this.retained).setPosition(position); + } + + /** + * Retrieves the text alignment policy for this Text3D NodeComponent + * object. The <code>alignment</code> is used to specify how + * glyphs in the string are placed in relation to the + * <code>position</code> field. Valid values for this field + * are: + * <UL> + * <LI> ALIGN_CENTER - the center of the string is placed on the + * <code>position</code> point. + * <LI> ALIGN_FIRST - the first character of the string is placed on + * the <code>position</code> point. + * <LI> ALIGN_LAST - the last character of the string is placed on the + * <code>position</code> point. + * </UL> + * The default value of this field is <code>ALIGN_FIRST</code>. + * + * @return the current alingment policy for this node. + * + * @exception CapabilityNotSetException if appropriate capability is + * not set and this object is part of live or compiled scene graph + * + * @see #getPosition + */ + public int getAlignment() { + if (isLiveOrCompiled()) + if(!this.getCapability(ALLOW_ALIGNMENT_READ)) + throw new CapabilityNotSetException(J3dI18N.getString("Text3D6")); + return ((Text3DRetained)this.retained).getAlignment(); + } + + /** + * Sets the text alignment policy for this Text3D NodeComponent + * object. The <code>alignment</code> is used to specify how + * glyphs in the string are placed in relation to the + * <code>position</code> field. Valid values for this field + * are: + * <UL> + * <LI> ALIGN_CENTER - the center of the string is placed on the + * <code>position</code> point. + * <LI> ALIGN_FIRST - the first character of the string is placed on + * the <code>position</code> point. + * <LI> ALIGN_LAST - the last character of the string is placed on the + * <code>position</code> point. + * </UL> + * The default value of this field is <code>ALIGN_FIRST</code>. + * + * @param alignment specifies how glyphs in the string are placed + * in relation to the position field + * + * @exception CapabilityNotSetException if appropriate capability is + * not set and this object is part of live or compiled scene graph + * + * @see #getPosition + */ + public void setAlignment(int alignment) { + if (isLiveOrCompiled()) + if(!this.getCapability(ALLOW_ALIGNMENT_WRITE)) + throw new CapabilityNotSetException(J3dI18N.getString("Text3D7")); + ((Text3DRetained)this.retained).setAlignment(alignment); + } + + /** + * Retrieves the node's <code>path</code> field. This field + * is used to specify how succeeding + * glyphs in the string are placed in relation to the previous glyph. + * Valid values for this field are: + * <UL> + * <LI> PATH_LEFT: - succeeding glyphs are placed to the left of the + * current glyph. + * <LI> PATH_RIGHT: - succeeding glyphs are placed to the right of the + * current glyph. + * <LI> PATH_UP: - succeeding glyphs are placed above the current glyph. + * <LI> PATH_DOWN: - succeeding glyphs are placed below the current glyph. + * </UL> + * The default value of this field is <code>PATH_RIGHT</code>. + * + * @return the current alingment policy for this node. + * + * @exception CapabilityNotSetException if appropriate capability is + * not set and this object is part of live or compiled scene graph + */ + public int getPath() { + if (isLiveOrCompiled()) + if(!this.getCapability(ALLOW_PATH_READ)) + throw new CapabilityNotSetException(J3dI18N.getString("Text3D8")); + return ((Text3DRetained)this.retained).getPath(); + } + + /** + * Sets the node's <code>path</code> field. This field + * is used to specify how succeeding + * glyphs in the string are placed in relation to the previous glyph. + * Valid values for this field are: + * <UL> + * <LI> PATH_LEFT - succeeding glyphs are placed to the left of the + * current glyph. + * <LI> PATH_RIGHT - succeeding glyphs are placed to the right of the + * current glyph. + * <LI> PATH_UP - succeeding glyphs are placed above the current glyph. + * <LI> PATH_DOWN - succeeding glyphs are placed below the current glyph. + * </UL> + * The default value of this field is <code>PATH_RIGHT</code>. + * + * @param path the value to set the path to + * + * @exception CapabilityNotSetException if appropriate capability is + * not set and this object is part of live or compiled scene graph + */ + public void setPath(int path) { + if (isLiveOrCompiled()) + if(!this.getCapability(ALLOW_PATH_WRITE)) + throw new CapabilityNotSetException(J3dI18N.getString("Text3D9")); + ((Text3DRetained)this.retained).setPath(path); + } + + /** + * Retrieves the 3D bounding box that encloses this Text3D object. + * + * @param bounds the object to copy the bounding information to. + * + * @exception CapabilityNotSetException if appropriate capability is + * not set and this object is part of live or compiled scene graph + * + * @see BoundingBox + */ + public void getBoundingBox(BoundingBox bounds) { + if (isLiveOrCompiled()) + if(!this.getCapability(ALLOW_BOUNDING_BOX_READ)) + throw new CapabilityNotSetException(J3dI18N.getString("Text3D10")); + ((Text3DRetained)this.retained).getBoundingBox(bounds); + } + + /** + * Retrieves the character spacing used to construct the Text3D string. + * This spacing is in addition to the regular spacing between glyphs as + * defined in the Font object. 1.0 in this space is measured as the + * width of the largest glyph in the 2D Font. The default value is + * 0.0. + * + * @return the current character spacing value + * + * @exception CapabilityNotSetException if appropriate capability is + * not set and this object is part of live or compiled scene graph + */ + public float getCharacterSpacing() { + if (isLiveOrCompiled()) + if(!this.getCapability(ALLOW_CHARACTER_SPACING_READ)) + throw new CapabilityNotSetException(J3dI18N.getString("Text3D11")); + return ((Text3DRetained)this.retained).getCharacterSpacing(); + } + + /** + * Sets the character spacing used when constructing the Text3D string. + * This spacing is in addition to the regular spacing between glyphs as + * defined in the Font object. 1.0 in this space is measured as the + * width of the largest glyph in the 2D Font. The default value is + * 0.0. + * + * @param characterSpacing the new character spacing value + * + * @exception CapabilityNotSetException if appropriate capability is + * not set and this object is part of live or compiled scene graph + */ + public void setCharacterSpacing(float characterSpacing) { + if (isLiveOrCompiled()) + if(!this.getCapability(ALLOW_CHARACTER_SPACING_WRITE)) + throw new CapabilityNotSetException(J3dI18N.getString("Text3D12")); + ((Text3DRetained)this.retained).setCharacterSpacing(characterSpacing); + } + + + + /** + * @deprecated replaced with cloneNodeComponent(boolean forceDuplicate) + */ + @Override + public NodeComponent cloneNodeComponent() { + Text3D t = new Text3D(); + t.duplicateNodeComponent(this); + return t; + } + + + /** + * Copies all node information from <code>originalNodeComponent</code> into + * the current node. This method is called from the + * <code>duplicateNode</code> 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 <code>true</code>, causes the + * <code>duplicateOnCloneTree</code> flag to be ignored. When + * <code>false</code>, the value of each node's + * <code>duplicateOnCloneTree</code> 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); + + Text3DRetained text = (Text3DRetained) originalNodeComponent.retained; + Text3DRetained rt = (Text3DRetained) retained; + + Font3D font3D = text.getFont3D(); + if (font3D != null) { + rt.setFont3D(font3D); + } + + String s = text.getString(); + if (s != null) { + rt.setString(s); + } + + Point3f p = new Point3f(); + text.getPosition(p); + rt.setPosition(p); + rt.setAlignment(text.getAlignment()); + rt.setPath(text.getPath()); + rt.setCharacterSpacing(text.getCharacterSpacing()); + } + +} |