From 7a2e20caac9db6f789a7b3fab344b9758af45335 Mon Sep 17 00:00:00 2001 From: Harvey Harrison Date: Sun, 19 Apr 2015 21:02:06 -0700 Subject: j3dcore: flatten the directory structure a bit Signed-off-by: Harvey Harrison --- src/javax/media/j3d/GeometryAtom.java | 263 ++++++++++++++++++++++++++++++++++ 1 file changed, 263 insertions(+) create mode 100644 src/javax/media/j3d/GeometryAtom.java (limited to 'src/javax/media/j3d/GeometryAtom.java') diff --git a/src/javax/media/j3d/GeometryAtom.java b/src/javax/media/j3d/GeometryAtom.java new file mode 100644 index 0000000..a4351ef --- /dev/null +++ b/src/javax/media/j3d/GeometryAtom.java @@ -0,0 +1,263 @@ +/* + * Copyright 1999-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.Point3d; + +/** + * A GeometryAtom is the smallest object representing Geometry. + */ + +class GeometryAtom extends Object implements BHLeafInterface, NnuId { + + /** + * Array of geometry components of this geometry atom + */ + // The first index of geometryArr should always be 0, unless geometryArr contains + // multiple Text3Ds. + GeometryRetained[] geometryArray = null; + + /** + * Array of transforms used only for Text3d. + */ + Transform3D[] lastLocalTransformArray = null; + + + /** + * The locale that this geometry atom is attatched to. This is only non-null + * if this instance is directly linked into a locale. + */ + Locale locale = null; + + /** + * The mirror Shape3DRetained for this GeometryAtom. + */ + Shape3DRetained source = null; + + /** + * The BHLeafNode for this GeometryAtom. + */ + BHLeafNode bhLeafNode = null; + + // true if alpha channel is editable + boolean alphaEditable; + + // true if this ga is visible. Default is true. + boolean visible = true; + + /** + * This is the original geometry type from which this atom came + */ + int geoType = -1; + + /** + * The list of RenderAtoms for this GeometryAtom + */ + RenderAtom[] renderAtoms = new RenderAtom[0]; + + // Id use for quick search. + int nnuId; + + Point3d[] centroid = null; + boolean centroidIsDirty = true; + Object lockObj = new Object(); + + + GeometryAtom() { + // Get a not necessary unique Id. + nnuId = NnuIdManager.getId(); + } + + @Override + public int getId() { + return nnuId; + } + + @Override + public int equal(NnuId obj) { + int keyId = obj.getId(); + if(nnuId < keyId) { + return -1; + } + else if(nnuId > keyId) { + return 1; + } + else { // Found it! + return 0; + } + } + + @Override + public BoundingBox computeBoundingHull() { + /* + System.err.println("Bounds is " + source.vwcBounds); + for(int i=0; i= renderAtoms.length) { + RenderAtom[] newList = new RenderAtom[index + 1]; + System.arraycopy(renderAtoms, 0, newList, 0, renderAtoms.length); + renderAtoms = newList; + } + + RenderAtom ra = renderAtoms[index]; + if (ra == null) { + ra = new RenderAtom(); + renderAtoms[index] = ra; + ra.geometryAtom = this; + + // Allocate space based on number of geometry in the list + boolean isGeoTypeText3D = (geoType == GeometryRetained.GEO_TYPE_TEXT3D); + ra.rListInfo = new RenderAtomListInfo[geometryArray.length]; + for (int j = 0; j < ra.rListInfo.length; j++) { + ra.rListInfo[j] = new RenderAtomListInfo(ra, j); + if (isGeoTypeText3D) + ra.rListInfo[j].localToVworld = new Transform3D(); + } + } + return ra; + } +} + // If the renderAtom is transparent, then make sure that the + // value is up-to-date + + void updateCentroid() { + // New for 1.3.2 + // If the sortShape3DBounds flag is set, the bounds of the + // Shape3D node will be used in place of the computed + // GeometryArray bounds for transparency sorting for those + // Shape3D nodes whose boundsAutoCompute attribute is set to + // false. + if (VirtualUniverse.mc.sortShape3DBounds && + !source.boundsAutoCompute) { + + synchronized(lockObj) { + if (centroid == null) { + centroid = new Point3d[geometryArray.length]; + for (int j = 0; j < centroid.length; j++) { + centroid[j] = new Point3d(); + source.localBounds.getCenter(centroid[j]); + source.getCurrentLocalToVworld(0).transform(centroid[j]); + } + } + else { + for (int j = 0; j < centroid.length; j++) { + source.localBounds.getCenter(centroid[j]); + source.getCurrentLocalToVworld(0).transform(centroid[j]); + } + } + } + + return; + } + // End of new for 1.3.2 + + synchronized(lockObj) { + for (int j = 0; j < geometryArray.length; j++) { + if (geometryArray[j] == null) + continue; + synchronized(geometryArray[j].centroid) { + if (geometryArray[j].recompCentroid) { + geometryArray[j].computeCentroid(); + geometryArray[j].recompCentroid = false; + } + } + } + if (centroidIsDirty) { + if (centroid == null) { + centroid = new Point3d[geometryArray.length]; + for (int j = 0; j < centroid.length; j++) { + if (geometryArray[j] == null) + continue; + centroid[j] = new Point3d(geometryArray[j].centroid); + source.getCurrentLocalToVworld(0).transform(centroid[j]); + } + } + else { + for (int j = 0; j < centroid.length; j++) { + if (geometryArray[j] == null) + continue; + centroid[j].set(geometryArray[j].centroid); + source.getCurrentLocalToVworld(0).transform(centroid[j]); + } + } + centroidIsDirty = false; + } + } + } + +} -- cgit v1.2.3