home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.5 Applications 2004 May / SGI IRIX 6.5 Applications 2004 May.iso / dist / java3d.idb / usr / demos / java / j3d / programs / examples / AlternateAppearance / SphereGroup.java.z / SphereGroup.java
Encoding:
Java Source  |  2003-08-08  |  3.9 KB  |  119 lines

  1. /*
  2.  *    @(#)SphereGroup.java 1.7 02/04/01 15:04:02
  3.  *
  4.  * Copyright (c) 1996-2002 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  *
  10.  * - Redistributions of source code must retain the above copyright
  11.  *   notice, this list of conditions and the following disclaimer.
  12.  *
  13.  * - Redistribution in binary form must reproduce the above copyright
  14.  *   notice, this list of conditions and the following disclaimer in
  15.  *   the documentation and/or other materials provided with the
  16.  *   distribution.
  17.  *
  18.  * Neither the name of Sun Microsystems, Inc. or the names of
  19.  * contributors may be used to endorse or promote products derived
  20.  * from this software without specific prior written permission.
  21.  *
  22.  * This software is provided "AS IS," without a warranty of any
  23.  * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
  24.  * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
  25.  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
  26.  * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
  27.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  28.  * DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
  29.  * OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
  30.  * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
  31.  * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
  32.  * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE,
  33.  * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  34.  *
  35.  * You acknowledge that Software is not designed,licensed or intended
  36.  * for use in the design, construction, operation or maintenance of
  37.  * any nuclear facility.
  38.  */
  39.  
  40. import javax.media.j3d.*;
  41. import javax.vecmath.*;
  42. import com.sun.j3d.utils.geometry.*;
  43.  
  44. public class SphereGroup
  45.     extends Group
  46. {
  47.     Shape3D[] shapes;
  48.     int numShapes = 0;
  49.     //  Constructors
  50.     public SphereGroup( )
  51.     {
  52.         //    radius   x,y spacing   x,y count  appearance
  53.         this( 0.25f,   0.75f, 0.75f,   5, 5,      null, false );
  54.     }
  55.  
  56.     public SphereGroup( Appearance app )
  57.     {
  58.         //    radius   x,y spacing   x,y count  appearance
  59.         this( 0.25f,   0.75f, 0.75f,   5, 5,      app, false );
  60.     }
  61.  
  62.     public SphereGroup( float radius, float xSpacing, float ySpacing,
  63.         int xCount, int yCount, boolean overrideflag )
  64.     {
  65.         this( radius,  xSpacing, ySpacing, xCount, yCount, null, overrideflag );
  66.     }
  67.  
  68.     public SphereGroup( float radius, float xSpacing, float ySpacing,
  69.             int xCount, int yCount, Appearance app, boolean overrideflag )
  70.     {
  71.     if ( app == null )
  72.         {
  73.         app = new Appearance( );
  74.         Material material = new Material( );
  75.         material.setDiffuseColor( new Color3f( 0.8f, 0.8f, 0.8f ) );
  76.         material.setSpecularColor( new Color3f( 0.0f, 0.0f, 0.0f ) );
  77.         material.setShininess( 0.0f );
  78.         app.setMaterial( material );
  79.         }
  80.  
  81.     double xStart = -xSpacing * (double)(xCount-1) / 2.0;
  82.     double yStart = -ySpacing * (double)(yCount-1) / 2.0;
  83.  
  84.     Sphere sphere = null;
  85.     TransformGroup trans = null;
  86.     Transform3D t3d = new Transform3D( );
  87.     Vector3d vec = new Vector3d( );
  88.     double x, y = yStart, z = 0.0;
  89.     shapes = new Shape3D[xCount * yCount];
  90.     for ( int i = 0; i < yCount; i++ )
  91.         {
  92.         x = xStart;
  93.         for ( int j = 0; j < xCount; j++ ) {
  94.             vec.set( x, y, z );
  95.             t3d.setTranslation( vec );
  96.             trans = new TransformGroup( t3d );
  97.             addChild( trans );
  98.  
  99.             sphere = new Sphere(
  100.                     radius,     // sphere radius
  101.                     Primitive.GENERATE_NORMALS,  // generate normals
  102.                     16,         // 16 divisions radially
  103.                     app );      // it's appearance
  104.             trans.addChild( sphere );
  105.             x += xSpacing;
  106.             shapes[numShapes] = sphere.getShape();
  107.             if (overrideflag) 
  108.             shapes[numShapes].setCapability(Shape3D.ALLOW_APPEARANCE_OVERRIDE_WRITE);
  109.             numShapes++;
  110.         }
  111.         y += ySpacing;
  112.         }
  113.     }
  114.     Shape3D[] getShapes() {
  115.     return shapes;
  116.     }
  117.     
  118. }
  119.