From be0a4c818b174da6b637bfe1a3be8f4c4d839de2 Mon Sep 17 00:00:00 2001 From: kcr Date: Tue, 31 Jul 2007 23:34:14 +0000 Subject: 1. New Java 3D applet template that avoids MainFrame, but can still run as an applet or as an application. 2. Change applet .html file to use JNLPAppletLauncher --- .../jdesktop/j3d/examples/applet3d/Applet3D.form | 69 ++++++ .../jdesktop/j3d/examples/applet3d/Applet3D.html | 39 ++-- .../jdesktop/j3d/examples/applet3d/Applet3D.java | 239 ++++++++++++++++----- 3 files changed, 280 insertions(+), 67 deletions(-) create mode 100644 src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.form diff --git a/src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.form b/src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.form new file mode 100644 index 0000000..a70fb22 --- /dev/null +++ b/src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.form @@ -0,0 +1,69 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.html b/src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.html index 9cb15a4..037c7c1 100644 --- a/src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.html +++ b/src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.html @@ -1,15 +1,26 @@ - - -Hello, Universe - - - -
-
-If you were using a Java-capable browser, -you would see Applet3D instead of this paragraph. -
-
+ + + +Simple 3D Applet + + + + + + + + + + - - +

Simple Java 3D Applet

+ + diff --git a/src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.java b/src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.java index 565800a..55e7cdc 100644 --- a/src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.java +++ b/src/classes/org/jdesktop/j3d/examples/applet3d/Applet3D.java @@ -44,86 +44,219 @@ package org.jdesktop.j3d.examples.applet3d; -import java.applet.Applet; +import com.sun.j3d.utils.geometry.ColorCube; +import com.sun.j3d.utils.universe.SimpleUniverse; import java.awt.BorderLayout; -import java.awt.event.*; import java.awt.GraphicsConfiguration; -import com.sun.j3d.utils.applet.MainFrame; -import com.sun.j3d.utils.geometry.ColorCube; -import com.sun.j3d.utils.universe.*; -import javax.media.j3d.*; -import javax.vecmath.*; - -public class Applet3D extends Applet { +import javax.media.j3d.Alpha; +import javax.media.j3d.BoundingSphere; +import javax.media.j3d.BranchGroup; +import javax.media.j3d.Canvas3D; +import javax.media.j3d.RotationInterpolator; +import javax.media.j3d.Transform3D; +import javax.media.j3d.TransformGroup; +import javax.swing.JApplet; +import javax.swing.JFrame; +import javax.swing.JPopupMenu; +import javax.swing.WindowConstants; +import javax.vecmath.Point3d; - private SimpleUniverse u = null; +/** + * Simple Java 3D program that can be run as an application or as an applet. + */ +public class Applet3D extends javax.swing.JPanel { + private SimpleUniverse univ = null; + private BranchGroup scene = null; + + private Alpha rotationAlpha1; + private Alpha rotationAlpha2; + public BranchGroup createSceneGraph() { // Create the root of the branch graph BranchGroup objRoot = new BranchGroup(); - // Create the TransformGroup node and initialize it to the - // identity. Enable the TRANSFORM_WRITE capability so that - // our behavior code can modify it at run time. Add it to - // the root of the subgraph. - TransformGroup objTrans = new TransformGroup(); - objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); - objRoot.addChild(objTrans); + // Create two TransformGroup nodes in series + TransformGroup objTrans1 = new TransformGroup(); + objTrans1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); + objRoot.addChild(objTrans1); - // Create a simple Shape3D node; add it to the scene graph. - objTrans.addChild(new ColorCube(0.4)); + // Create two TransformGroup nodes in series + TransformGroup objTrans2 = new TransformGroup(); + objTrans2.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); + objTrans1.addChild(objTrans2); - // Create a new Behavior object that will perform the - // desired operation on the specified transform and add - // it into the scene graph. - Transform3D yAxis = new Transform3D(); - Alpha rotationAlpha = new Alpha(-1, 4000); + // Create a simple Shape3D node; add it to the scene graph. + objTrans2.addChild(new ColorCube(0.4)); - RotationInterpolator rotator = - new RotationInterpolator(rotationAlpha, objTrans, yAxis, - 0.0f, (float) Math.PI*2.0f); + // Create 2 new Behavior objects that will perform the + // desired operations on the specified transforms and add + // them into the scene graph. BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0); - rotator.setSchedulingBounds(bounds); - objRoot.addChild(rotator); - // Have Java 3D perform optimizations on this scene graph. - objRoot.compile(); + Transform3D yAxis1 = new Transform3D(); + rotationAlpha1 = new Alpha(-1, 4000); + + RotationInterpolator rotator1 = + new RotationInterpolator(rotationAlpha1, objTrans1, yAxis1, + 0.0f, (float) Math.PI*2.0f); + rotator1.setSchedulingBounds(bounds); + objRoot.addChild(rotator1); + + Transform3D yAxis2 = new Transform3D(); + yAxis2.rotX(Math.PI/4.0); + rotationAlpha2 = new Alpha(-1, 10000); + + RotationInterpolator rotator2 = + new RotationInterpolator(rotationAlpha2, objTrans2, yAxis2, + 0.0f, (float) Math.PI*2.0f); + rotator2.setSchedulingBounds(bounds); + objRoot.addChild(rotator2); return objRoot; } - public Applet3D() { + private Canvas3D createUniverse() { + GraphicsConfiguration config = + SimpleUniverse.getPreferredConfiguration(); + + Canvas3D c = new Canvas3D(config); + + univ = new SimpleUniverse(c); + + // This will move the ViewPlatform back a bit so the + // objects in the scene can be viewed. + univ.getViewingPlatform().setNominalViewingTransform(); + + // Ensure at least 5 msec per frame (i.e., < 200Hz) + univ.getViewer().getView().setMinimumFrameCycleTime(5); + + return c; + } + + private void destroy() { + univ.cleanup(); } - public void init() { - setLayout(new BorderLayout()); - GraphicsConfiguration config = - SimpleUniverse.getPreferredConfiguration(); + /** + * Creates new form Applet3D + */ + public Applet3D() { + // Initialize the GUI components + JPopupMenu.setDefaultLightWeightPopupEnabled(false); + initComponents(); - Canvas3D c = new Canvas3D(config); - add("Center", c); + // Create Canvas3D and SimpleUniverse; add canvas to drawing panel + Canvas3D c = createUniverse(); + drawingPanel.add(c, BorderLayout.CENTER); + + // Create the content branch and add it to the universe + scene = createSceneGraph(); + univ.addBranchGraph(scene); + } + + // ---------------------------------------------------------------- + + // Applet framework - // Create a simple scene and attach it to the virtual universe - BranchGroup scene = createSceneGraph(); - u = new SimpleUniverse(c); + public static class MyApplet extends JApplet { + Applet3D mainPanel; - // This will move the ViewPlatform back a bit so the - // objects in the scene can be viewed. - u.getViewingPlatform().setNominalViewingTransform(); + public void init() { + setLayout(new BorderLayout()); + mainPanel = new Applet3D(); + add(mainPanel, BorderLayout.CENTER); + } - u.addBranchGraph(scene); + public void destroy() { + mainPanel.destroy(); + } } - public void destroy() { - u.cleanup(); + // Application framework + + private static class MyFrame extends JFrame { + MyFrame() { + setLayout(new BorderLayout()); + setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + setTitle("Simple 3D Applet"); + getContentPane().add(new Applet3D(), BorderLayout.CENTER); + pack(); + } } - // - // The following allows Applet3D to be run as an application - // as well as an applet - // - public static void main(String[] args) { - new MainFrame(new Applet3D(), 256, 256); + /** + * @param args the command line arguments + */ + public static void main(String args[]) { + java.awt.EventQueue.invokeLater(new Runnable() { + public void run() { + new MyFrame().setVisible(true); + } + }); } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + guiPanel = new javax.swing.JPanel(); + pauseButton = new javax.swing.JButton(); + resumeButton = new javax.swing.JButton(); + drawingPanel = new javax.swing.JPanel(); + + setLayout(new java.awt.BorderLayout()); + + guiPanel.setLayout(new java.awt.GridBagLayout()); + + pauseButton.setText("Pause"); + pauseButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + pauseButtonActionPerformed(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); + guiPanel.add(pauseButton, gridBagConstraints); + + resumeButton.setText("Resume"); + resumeButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + resumeButtonActionPerformed(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); + guiPanel.add(resumeButton, gridBagConstraints); + + add(guiPanel, java.awt.BorderLayout.NORTH); + + drawingPanel.setPreferredSize(new java.awt.Dimension(500, 500)); + drawingPanel.setLayout(new java.awt.BorderLayout()); + add(drawingPanel, java.awt.BorderLayout.CENTER); + }// //GEN-END:initComponents + + private void resumeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resumeButtonActionPerformed + rotationAlpha1.resume(); + rotationAlpha2.resume(); + }//GEN-LAST:event_resumeButtonActionPerformed + + private void pauseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pauseButtonActionPerformed + rotationAlpha1.pause(); + rotationAlpha2.pause(); + }//GEN-LAST:event_pauseButtonActionPerformed + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel drawingPanel; + private javax.swing.JPanel guiPanel; + private javax.swing.JButton pauseButton; + private javax.swing.JButton resumeButton; + // End of variables declaration//GEN-END:variables + } -- cgit v1.2.3