CubeTwister 2.0alpha142 2012-02-11

ch.randelshofer.geom3d
Class JCanvas3D

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by ch.randelshofer.geom3d.JCanvas3D
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, java.util.EventListener, javax.swing.event.ChangeListener

public class JCanvas3D
extends javax.swing.JComponent
implements javax.swing.event.ChangeListener

A canvas for rendering three dimensional geometry.

Version:
3.5 2011-06-29 Adds methods setSwipeDelay and getSwipeDelay.
3.4.1 Removes synchronization from add/removePropertyChangeListener methods.
3.4 2010-04-04 Moves event listeners into internal class EventHandler. Always updates active face list.
3.3 2009-11-28 Adds flush method.
3.2.1 2009-01-19 Updates cursor on mouse release.
3.2 2009-01-09 Cursor changes to hand cursor when over a triangle which has event listeners. Added workaround for http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6634290
3.1 2009-01-09 Cursor changes to hand cursor when over a face.
3.0 2009-01-03 Added support for multiple interaction modes.
2.0 2008-09-16 Use a speed-render mode if the scene is adjusting. Use Scene3D instead of Node3D as the model.
1.2 2008-09-14 Removed paintInsets in favor of the insets functionality of JComponent.
1.1 2008-01-06 Fixed repainting issues with overlapping Swing components.
1.0 November 15, 2007 Created.
Author:
Werner Randelshofer
See Also:
Serialized Form

Nested Class Summary
protected  class JCanvas3D.EventHandler
           
static class JCanvas3D.Interaction
           
 
Nested classes/interfaces inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
protected  double ambientLightIntensity
           
protected  java.awt.Graphics backGfx
           
protected  java.awt.Image backImg
           
protected  java.awt.Dimension backSize
           
protected  boolean isAdjusting
          This flag is true during mouse drag events.
protected  boolean isDirty
           
protected  boolean isPopupTrigger
          This flag is true when a mouse down or a mouse up evt was a popup evt.
protected  Point3D lightSource
           
protected  double lightSourceIntensity
           
protected  java.lang.Object lock
           
protected  Point3D observer
           
protected  double scaleFactor
           
protected  Scene3D scene
           
protected  Face3D swipedFace
           
protected  Transform3DModel transformModel
           
 
Fields inherited from class javax.swing.JComponent
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
JCanvas3D()
           
 
Method Summary
 void addPropertyChangeListener(java.beans.PropertyChangeListener listener)
           
 java.awt.geom.Point2D.Double canvasToFace(int x, int y, Face3D face)
           
protected  void createBackGraphics(java.awt.Dimension s)
           
protected  JCanvas3D.EventHandler createEventHandler()
           
protected  void firePropertyChange(java.lang.String propertyName, java.lang.Object oldValue, java.lang.Object newValue)
           
 void flush()
           
 Face3D getFaceAt(int x, int y)
           
 JCanvas3D.Interaction getInteractionMode()
           
 java.awt.Dimension getPreferredSize()
           
 double getScaleFactor()
           
 Scene3D getScene()
           
 int getSwipeDelay()
          Gets the swipeDelay.
 Transform3D getTransform()
           
 Transform3DModel getTransformModel()
           
 boolean imageUpdate(java.awt.Image img, int infoflags, int x, int y, int width, int height)
           
protected  void paint3D(java.awt.Graphics gr)
           
protected  void paintBackground(java.awt.Graphics g)
          Draws the background.
 void paintComponent(java.awt.Graphics gr)
           
 void removePropertyChangeListener(java.beans.PropertyChangeListener listener)
           
 void setAmbientLightIntensity(double d)
           
 void setBackgroundImage(java.awt.Image img)
           
 void setInteractionMode(JCanvas3D.Interaction newValue)
           
 void setLightSource(Point3D p)
           
 void setLightSourceIntensity(double d)
           
 void setLock(java.lang.Object lock)
           
 void setObserver(float distance)
           
 void setPreferredSize(java.awt.Dimension s)
           
 void setRotateOnMouseDrag(boolean b)
           
 void setScaleFactor(double scaleFactor)
           
 void setScene(Scene3D u)
           
 void setSwipeDelay(int newValue)
          Sets the swipeDelay.
 void setToIdentity()
           
 void setTransform(Transform3D transform)
           
 void setTransformModel(Transform3DModel value)
           
 void stateChanged(javax.swing.event.ChangeEvent event)
           
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getAccessibleContext, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getUIClassID, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintImmediately, paintImmediately, paramString, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update, updateUI
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

scene

protected Scene3D scene

backGfx

protected java.awt.Graphics backGfx

backImg

protected java.awt.Image backImg

backSize

protected java.awt.Dimension backSize

transformModel

protected Transform3DModel transformModel

lock

protected java.lang.Object lock

observer

protected Point3D observer

lightSource

protected Point3D lightSource

ambientLightIntensity

protected double ambientLightIntensity

lightSourceIntensity

protected double lightSourceIntensity

isAdjusting

protected boolean isAdjusting
This flag is true during mouse drag events.


isDirty

protected boolean isDirty

scaleFactor

protected double scaleFactor

isPopupTrigger

protected boolean isPopupTrigger
This flag is true when a mouse down or a mouse up evt was a popup evt. A mouse clicked evt is ignored when this flag is set to true.


swipedFace

protected Face3D swipedFace
Constructor Detail

JCanvas3D

public JCanvas3D()
Method Detail

flush

public void flush()

createEventHandler

protected JCanvas3D.EventHandler createEventHandler()

setInteractionMode

public void setInteractionMode(JCanvas3D.Interaction newValue)

getInteractionMode

public JCanvas3D.Interaction getInteractionMode()

setTransformModel

public void setTransformModel(Transform3DModel value)

getTransformModel

public Transform3DModel getTransformModel()

setRotateOnMouseDrag

public void setRotateOnMouseDrag(boolean b)

setLock

public void setLock(java.lang.Object lock)

paintComponent

public void paintComponent(java.awt.Graphics gr)
Overrides:
paintComponent in class javax.swing.JComponent

setToIdentity

public void setToIdentity()

setObserver

public void setObserver(float distance)

setAmbientLightIntensity

public void setAmbientLightIntensity(double d)

setLightSourceIntensity

public void setLightSourceIntensity(double d)

setLightSource

public void setLightSource(Point3D p)

setBackgroundImage

public void setBackgroundImage(java.awt.Image img)

setTransform

public void setTransform(Transform3D transform)

getTransform

public Transform3D getTransform()

imageUpdate

public boolean imageUpdate(java.awt.Image img,
                           int infoflags,
                           int x,
                           int y,
                           int width,
                           int height)
Specified by:
imageUpdate in interface java.awt.image.ImageObserver
Overrides:
imageUpdate in class java.awt.Component

setScaleFactor

public void setScaleFactor(double scaleFactor)

getScaleFactor

public double getScaleFactor()

setScene

public void setScene(Scene3D u)

getScene

public Scene3D getScene()

paintBackground

protected void paintBackground(java.awt.Graphics g)
Draws the background.


setPreferredSize

public void setPreferredSize(java.awt.Dimension s)
Overrides:
setPreferredSize in class javax.swing.JComponent

getPreferredSize

public java.awt.Dimension getPreferredSize()
Overrides:
getPreferredSize in class javax.swing.JComponent

addPropertyChangeListener

public void addPropertyChangeListener(java.beans.PropertyChangeListener listener)
Overrides:
addPropertyChangeListener in class java.awt.Container

removePropertyChangeListener

public void removePropertyChangeListener(java.beans.PropertyChangeListener listener)
Overrides:
removePropertyChangeListener in class java.awt.Component

firePropertyChange

protected void firePropertyChange(java.lang.String propertyName,
                                  java.lang.Object oldValue,
                                  java.lang.Object newValue)
Overrides:
firePropertyChange in class java.awt.Component

createBackGraphics

protected void createBackGraphics(java.awt.Dimension s)

paint3D

protected void paint3D(java.awt.Graphics gr)

getFaceAt

public Face3D getFaceAt(int x,
                        int y)

canvasToFace

public java.awt.geom.Point2D.Double canvasToFace(int x,
                                                 int y,
                                                 Face3D face)

stateChanged

public void stateChanged(javax.swing.event.ChangeEvent event)
Specified by:
stateChanged in interface javax.swing.event.ChangeListener

getSwipeDelay

public int getSwipeDelay()
Gets the swipeDelay. Integer.MAX_VALUE indicates infinite delay.


setSwipeDelay

public void setSwipeDelay(int newValue)
Sets the swipeDelay. Integer.MAX_VALUE indicates infinite delay.


(c) Werner Randelshofer.
All rights reserved.