001: /*
002: * $RCSfile: PointSet.java,v $
003: *
004: * @(#)PointSet.java 1.16 98/11/05 20:34:53
005: *
006: * Copyright (c) 1996-1998 Sun Microsystems, Inc. All Rights Reserved.
007: *
008: * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
009: * modify and redistribute this software in source and binary code form,
010: * provided that i) this copyright notice and license appear on all copies of
011: * the software; and ii) Licensee does not utilize the software in a manner
012: * which is disparaging to Sun.
013: *
014: * This software is provided "AS IS," without a warranty of any kind. ALL
015: * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
016: * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
017: * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
018: * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
019: * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
020: * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
021: * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
022: * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
023: * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
024: * POSSIBILITY OF SUCH DAMAGES.
025: *
026: * This software is not designed or intended for use in on-line control of
027: * aircraft, air traffic, aircraft navigation or aircraft communications; or in
028: * the design, construction, operation or maintenance of any nuclear
029: * facility. Licensee represents and warrants that it will not use or
030: * redistribute the Software for such purposes.
031: *
032: *
033: * $Revision: 1.2 $
034: * $Date: 2005/02/03 23:06:59 $
035: * $State: Exp $
036: */
037: /*
038: * @Author: Rick Goldberg
039: * @Author: Doug Gehringer
040: */
041: package org.jdesktop.j3d.loaders.vrml97.impl;
042:
043: import javax.media.j3d.BoundingBox;
044: import javax.media.j3d.GeometryArray;
045:
046: import javax.media.j3d.PointArray;
047: import javax.vecmath.Point3d;
048:
049: /** Description of the Class */
050: public class PointSet extends Geometry {
051:
052: PointArray impl;
053: BoundingBox bounds;
054:
055: SFNode color;
056: SFNode coord;
057:
058: int vertexFormat = 0;
059: int vertexCount = 0;
060: boolean haveColors = false;
061: Coordinate coordNode = null;
062: Color colorNode = null;
063:
064: /**
065: *Constructor for the PointSet object
066: *
067: *@param loader Description of the Parameter
068: */
069: public PointSet(Loader loader) {
070: super (loader);
071: color = new SFNode(null);
072: coord = new SFNode(null);
073: initFields();
074: }
075:
076: /**
077: *Constructor for the PointSet object
078: *
079: *@param loader Description of the Parameter
080: *@param coord Description of the Parameter
081: *@param color Description of the Parameter
082: */
083: PointSet(Loader loader, SFNode coord, SFNode color) {
084: super (loader);
085: this .coord = coord;
086: this .color = color;
087: initFields();
088: }
089:
090: /** Description of the Method */
091: public void initImpl() {
092: if ((coord.node != null) && (coord.node instanceof Coordinate)) {
093: coordNode = (Coordinate) coord.node;
094: if (coordNode.point.size >= 3) {
095: vertexFormat = javax.media.j3d.GeometryArray.COORDINATES;
096: vertexCount = coordNode.point.size / 3;
097:
098: if ((color.node != null)
099: && (color.node instanceof Color)) {
100: colorNode = (Color) color.node;
101: if ((colorNode.color.vals.length / 3) == vertexCount) {
102: haveColors = true;
103: vertexFormat |= javax.media.j3d.GeometryArray.COLOR_3;
104: }
105: }
106:
107: impl = new PointArray(vertexCount, vertexFormat);
108: impl.setCoordinates(0, coordNode.point.value, 0,
109: vertexCount);
110:
111: if (haveColors) {
112: impl.setColors(0, colorNode.color.vals);
113: }
114:
115: // else make sure j3d uses emmissive color from material
116: // or track the material in the this shape
117:
118: bounds = coordNode.point.getBoundingBox();
119: }
120: }
121: }
122:
123: /**
124: * Description of the Method
125: *
126: *@param eventInName Description of the Parameter
127: *@param time Description of the Parameter
128: */
129: public void notifyMethod(String eventInName, double time) {
130: if (eventInName.equals("color") || eventInName.equals("coord")) {
131: initImpl();
132: }
133: }
134:
135: /**
136: * Description of the Method
137: *
138: *@return Description of the Return Value
139: */
140: public Object clone() {
141: return new PointSet(loader, (SFNode) coord.clone(),
142: (SFNode) color.clone());
143: }
144:
145: /**
146: * Gets the type attribute of the PointSet object
147: *
148: *@return The type value
149: */
150: public String getType() {
151: return "PointSet";
152: }
153:
154: /** Description of the Method */
155: void initFields() {
156: coord.init(this , FieldSpec, Field.EXPOSED_FIELD, "coord");
157: color.init(this , FieldSpec, Field.EXPOSED_FIELD, "color");
158: }
159:
160: /**
161: * Gets the implGeom attribute of the PointSet object
162: *
163: *@return The implGeom value
164: */
165: public javax.media.j3d.Geometry getImplGeom() {
166: return (javax.media.j3d.Geometry) impl;
167: }
168:
169: /**
170: * Gets the boundingBox attribute of the PointSet object
171: *
172: *@return The boundingBox value
173: */
174: public javax.media.j3d.BoundingBox getBoundingBox() {
175: return bounds;
176: }
177:
178: /**
179: * Description of the Method
180: *
181: *@return Description of the Return Value
182: */
183: public boolean haveTexture() {
184: return false;
185: }
186:
187: /**
188: * Gets the numTris attribute of the PointSet object
189: *
190: *@return The numTris value
191: */
192: public int getNumTris() {
193: return 0;
194: }
195:
196: }
|