<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2F3D%2FCanvas3D</id>
		<title>Java/3D/Canvas3D - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2F3D%2FCanvas3D"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/3D/Canvas3D&amp;action=history"/>
		<updated>2026-04-21T14:23:54Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/3D/Canvas3D&amp;diff=6423&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/3D/Canvas3D&amp;diff=6423&amp;oldid=prev"/>
				<updated>2010-06-01T06:12:55Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:12, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/3D/Canvas3D&amp;diff=6422&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/3D/Canvas3D&amp;diff=6422&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:43Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Java 3D and the User Interface ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
The Joy of Java 3D&lt;br /&gt;
by Greg Hopkins&lt;br /&gt;
Copyright Copyright 2001&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
/*&lt;br /&gt;
Canvas3D&lt;br /&gt;
Each area where three-dimensional graphics can be painted is called a Canvas3D.  This is &lt;br /&gt;
a rectangle that contains a view of the objects in your universe. You place the canvas &lt;br /&gt;
inside a frame, then you create a universe to be displayed in the canvas.&lt;br /&gt;
The following example shows how to create a canvas in a frame with labels at the top and &lt;br /&gt;
bottom. The program can be run as either an applet or an application. &lt;br /&gt;
&lt;br /&gt;
Java 3D and Swing&lt;br /&gt;
The Canvas3D takes advantage of your computer&amp;quot;s graphics card to increase performance. &lt;br /&gt;
Unfortunately, this means that it does not mix very well with Sun&amp;quot;s swing user interface &lt;br /&gt;
components. These components are called &amp;quot;lightweight&amp;quot; Lightweight components can be &lt;br /&gt;
hidden by a Canvas3D even if they are supposed to be at the front.&lt;br /&gt;
There are several solutions to this problem:&lt;br /&gt;
* You can mix lightweight and heavyweight components on the same screen if you keep them in separate containers. &lt;br /&gt;
* if you use Popup menus, a static function on JPopupMenu fixes the problem:&lt;br /&gt;
setDefaultLightWeightPopupEnabled(false);&lt;br /&gt;
* You can use the older AWT components insteadof swing.&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
import java.applet.Applet;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.GraphicsConfiguration;&lt;br /&gt;
import java.awt.Label;&lt;br /&gt;
import javax.media.j3d.BranchGroup;&lt;br /&gt;
import javax.media.j3d.Canvas3D;&lt;br /&gt;
import com.sun.j3d.utils.applet.MainFrame;&lt;br /&gt;
import com.sun.j3d.utils.geometry.ColorCube;&lt;br /&gt;
import com.sun.j3d.utils.universe.SimpleUniverse;&lt;br /&gt;
public class CanvasDemo extends Applet {&lt;br /&gt;
  public CanvasDemo() {&lt;br /&gt;
    setLayout(new BorderLayout());&lt;br /&gt;
    GraphicsConfiguration config = SimpleUniverse&lt;br /&gt;
        .getPreferredConfiguration();&lt;br /&gt;
    Canvas3D canvas = new Canvas3D(config);&lt;br /&gt;
    add(&amp;quot;North&amp;quot;, new Label(&amp;quot;This is the top&amp;quot;));&lt;br /&gt;
    add(&amp;quot;Center&amp;quot;, canvas);&lt;br /&gt;
    add(&amp;quot;South&amp;quot;, new Label(&amp;quot;This is the bottom&amp;quot;));&lt;br /&gt;
    BranchGroup contents = new BranchGroup();&lt;br /&gt;
    contents.addChild(new ColorCube(0.3));&lt;br /&gt;
    SimpleUniverse universe = new SimpleUniverse(canvas);&lt;br /&gt;
    universe.getViewingPlatform().setNominalViewingTransform();&lt;br /&gt;
    universe.addBranchGraph(contents);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    CanvasDemo demo = new CanvasDemo();&lt;br /&gt;
    new MainFrame(demo, 400, 400);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Off Screen Test ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 *  @(#)OffScreenTest.java 1.13 02/10/21 13:46:49&lt;br /&gt;
 *&lt;br /&gt;
 * Copyright (c) 1996-2002 Sun Microsystems, Inc. All Rights Reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions&lt;br /&gt;
 * are met:&lt;br /&gt;
 *&lt;br /&gt;
 * - Redistributions of source code must retain the above copyright&lt;br /&gt;
 *   notice, this list of conditions and the following disclaimer.&lt;br /&gt;
 *&lt;br /&gt;
 * - Redistribution in binary form must reproduce the above copyright&lt;br /&gt;
 *   notice, this list of conditions and the following disclaimer in&lt;br /&gt;
 *   the documentation and/or other materials provided with the&lt;br /&gt;
 *   distribution.&lt;br /&gt;
 *&lt;br /&gt;
 * Neither the name of Sun Microsystems, Inc. or the names of&lt;br /&gt;
 * contributors may be used to endorse or promote products derived&lt;br /&gt;
 * from this software without specific prior written permission.&lt;br /&gt;
 *&lt;br /&gt;
 * This software is provided &amp;quot;AS IS,&amp;quot; without a warranty of any&lt;br /&gt;
 * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND&lt;br /&gt;
 * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,&lt;br /&gt;
 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY&lt;br /&gt;
 * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES&lt;br /&gt;
 * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR&lt;br /&gt;
 * DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN&lt;br /&gt;
 * OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR&lt;br /&gt;
 * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR&lt;br /&gt;
 * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF&lt;br /&gt;
 * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE,&lt;br /&gt;
 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.&lt;br /&gt;
 *&lt;br /&gt;
 * You acknowledge that Software is not designed,licensed or intended&lt;br /&gt;
 * for use in the design, construction, operation or maintenance of&lt;br /&gt;
 * any nuclear facility.&lt;br /&gt;
 */&lt;br /&gt;
import java.applet.Applet;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.GraphicsConfiguration;&lt;br /&gt;
import java.awt.image.BufferedImage;&lt;br /&gt;
import javax.media.j3d.BranchGroup;&lt;br /&gt;
import javax.media.j3d.Canvas3D;&lt;br /&gt;
import javax.media.j3d.ImageComponent;&lt;br /&gt;
import javax.media.j3d.ImageComponent2D;&lt;br /&gt;
import javax.media.j3d.Raster;&lt;br /&gt;
import javax.media.j3d.Screen3D;&lt;br /&gt;
import javax.media.j3d.Shape3D;&lt;br /&gt;
import javax.media.j3d.Transform3D;&lt;br /&gt;
import javax.media.j3d.TransformGroup;&lt;br /&gt;
import javax.media.j3d.View;&lt;br /&gt;
import javax.vecmath.Point3f;&lt;br /&gt;
import javax.vecmath.Vector3d;&lt;br /&gt;
import com.sun.j3d.utils.applet.MainFrame;&lt;br /&gt;
import com.sun.j3d.utils.geometry.ColorCube;&lt;br /&gt;
import com.sun.j3d.utils.universe.SimpleUniverse;&lt;br /&gt;
/**&lt;br /&gt;
 * OffScreenTest issues renderOffScreenBuffer from the postSwap callback of the&lt;br /&gt;
 * OnScreen canvas.&lt;br /&gt;
 */&lt;br /&gt;
public class OffScreenTest extends Applet {&lt;br /&gt;
  private SimpleUniverse u = null;&lt;br /&gt;
  public BranchGroup createSceneGraph(Raster drawRaster) {&lt;br /&gt;
    // Create the root of the branch graph&lt;br /&gt;
    BranchGroup objRoot = new BranchGroup();&lt;br /&gt;
    // spin object has composited transformation matrix&lt;br /&gt;
    Transform3D spin = new Transform3D();&lt;br /&gt;
    Transform3D tempspin = new Transform3D();&lt;br /&gt;
    spin.rotX(Math.PI / 4.0d);&lt;br /&gt;
    tempspin.rotY(Math.PI / 5.0d);&lt;br /&gt;
    spin.mul(tempspin);&lt;br /&gt;
    spin.setScale(0.7);&lt;br /&gt;
    spin.setTranslation(new Vector3d(-0.4, 0.3, 0.0));&lt;br /&gt;
    TransformGroup objTrans = new TransformGroup(spin);&lt;br /&gt;
    objRoot.addChild(objTrans);&lt;br /&gt;
    // Create a simple shape leaf node, add it to the scene graph.&lt;br /&gt;
    // ColorCube is a Convenience Utility class&lt;br /&gt;
    objTrans.addChild(new ColorCube(0.4));&lt;br /&gt;
    //Create a raster&lt;br /&gt;
    Shape3D shape = new Shape3D(drawRaster);&lt;br /&gt;
    objRoot.addChild(shape);&lt;br /&gt;
    // Let Java 3D perform optimizations on this scene graph.&lt;br /&gt;
    objRoot.rupile();&lt;br /&gt;
    return objRoot;&lt;br /&gt;
  }&lt;br /&gt;
  public OffScreenTest() {&lt;br /&gt;
  }&lt;br /&gt;
  public void init() {&lt;br /&gt;
    setLayout(new BorderLayout());&lt;br /&gt;
    GraphicsConfiguration config = SimpleUniverse&lt;br /&gt;
        .getPreferredConfiguration();&lt;br /&gt;
    BufferedImage bImage = new BufferedImage(200, 200,&lt;br /&gt;
        BufferedImage.TYPE_INT_ARGB);&lt;br /&gt;
    ImageComponent2D buffer = new ImageComponent2D(&lt;br /&gt;
        ImageComponent.FORMAT_RGBA, bImage);&lt;br /&gt;
    buffer.setCapability(ImageComponent2D.ALLOW_IMAGE_READ);&lt;br /&gt;
    Raster drawRaster = new Raster(new Point3f(0.0f, 0.0f, 0.0f),&lt;br /&gt;
        Raster.RASTER_COLOR, 0, 0, 200, 200, buffer, null);&lt;br /&gt;
    drawRaster.setCapability(Raster.ALLOW_IMAGE_WRITE);&lt;br /&gt;
    // create the main scene graph&lt;br /&gt;
    BranchGroup scene = createSceneGraph(drawRaster);&lt;br /&gt;
    // create the on-screen canvas&lt;br /&gt;
    OnScreenCanvas3D d = new OnScreenCanvas3D(config, false);&lt;br /&gt;
    add(&amp;quot;Center&amp;quot;, d);&lt;br /&gt;
    // create a simple universe&lt;br /&gt;
    u = new SimpleUniverse(d);&lt;br /&gt;
    // This will move the ViewPlatform back a bit so the&lt;br /&gt;
    // objects in the scene can be viewed.&lt;br /&gt;
    u.getViewingPlatform().setNominalViewingTransform();&lt;br /&gt;
    // create an off Screen Canvas&lt;br /&gt;
    OffScreenCanvas3D c = new OffScreenCanvas3D(config, true, drawRaster);&lt;br /&gt;
    // set the offscreen to match the onscreen&lt;br /&gt;
    Screen3D sOn = d.getScreen3D();&lt;br /&gt;
    Screen3D sOff = c.getScreen3D();&lt;br /&gt;
    sOff.setSize(sOn.getSize());&lt;br /&gt;
    sOff.setPhysicalScreenWidth(sOn.getPhysicalScreenWidth());&lt;br /&gt;
    sOff.setPhysicalScreenHeight(sOn.getPhysicalScreenHeight());&lt;br /&gt;
    // attach the same view to the offscreen canvas&lt;br /&gt;
    View v = u.getViewer().getView();&lt;br /&gt;
    v.addCanvas3D(c);&lt;br /&gt;
    // tell onscreen about the offscreen so it knows to&lt;br /&gt;
    // render to the offscreen at postswap&lt;br /&gt;
    d.setOffScreenCanvas(c);&lt;br /&gt;
    u.addBranchGraph(scene);&lt;br /&gt;
    v.stopView();&lt;br /&gt;
    // Make sure that image are render completely&lt;br /&gt;
    // before grab it in postSwap().&lt;br /&gt;
    d.setImageReady();&lt;br /&gt;
    v.startView();&lt;br /&gt;
  }&lt;br /&gt;
  public void destroy() {&lt;br /&gt;
    u.cleanup();&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String argv[]) {&lt;br /&gt;
    new MainFrame(new OffScreenTest(), 500, 500);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class OffScreenCanvas3D extends Canvas3D {&lt;br /&gt;
  Raster drawRaster;&lt;br /&gt;
  boolean printing = false;&lt;br /&gt;
  public OffScreenCanvas3D(GraphicsConfiguration gconfig,&lt;br /&gt;
      boolean offscreenflag, Raster drawRaster) {&lt;br /&gt;
    super(gconfig, offscreenflag);&lt;br /&gt;
    this.drawRaster = drawRaster;&lt;br /&gt;
  }&lt;br /&gt;
  public void print(boolean toWait) {&lt;br /&gt;
    if (!toWait)&lt;br /&gt;
      printing = true;&lt;br /&gt;
    BufferedImage bImage = new BufferedImage(200, 200,&lt;br /&gt;
        BufferedImage.TYPE_INT_ARGB);&lt;br /&gt;
    ImageComponent2D buffer = new ImageComponent2D(&lt;br /&gt;
        ImageComponent.FORMAT_RGBA, bImage);&lt;br /&gt;
    buffer.setCapability(ImageComponent2D.ALLOW_IMAGE_READ);&lt;br /&gt;
    this.setOffScreenBuffer(buffer);&lt;br /&gt;
    this.renderOffScreenBuffer();&lt;br /&gt;
    if (toWait) {&lt;br /&gt;
      this.waitForOffScreenRendering();&lt;br /&gt;
      drawOffScreenBuffer();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void postSwap() {&lt;br /&gt;
    if (printing) {&lt;br /&gt;
      super.postSwap();&lt;br /&gt;
      drawOffScreenBuffer();&lt;br /&gt;
      printing = false;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  void drawOffScreenBuffer() {&lt;br /&gt;
    BufferedImage bImage = this.getOffScreenBuffer().getImage();&lt;br /&gt;
    ImageComponent2D newImageComponent = new ImageComponent2D(&lt;br /&gt;
        ImageComponent.FORMAT_RGBA, bImage);&lt;br /&gt;
    drawRaster.setImage(newImageComponent);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class OnScreenCanvas3D extends Canvas3D {&lt;br /&gt;
  OffScreenCanvas3D c;&lt;br /&gt;
  boolean print = false;&lt;br /&gt;
  boolean imageReady = false;&lt;br /&gt;
  public OnScreenCanvas3D(GraphicsConfiguration gconfig, boolean offscreenflag) {&lt;br /&gt;
    super(gconfig, offscreenflag);&lt;br /&gt;
  }&lt;br /&gt;
  public void setOffScreenCanvas(OffScreenCanvas3D c) {&lt;br /&gt;
    this.c = c;&lt;br /&gt;
  }&lt;br /&gt;
  public void setImageReady() {&lt;br /&gt;
    imageReady = true;&lt;br /&gt;
  }&lt;br /&gt;
  public void postSwap() {&lt;br /&gt;
    if (imageReady &amp;amp;&amp;amp; !print) {&lt;br /&gt;
      c.print(false);&lt;br /&gt;
      print = true;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Print Canvas3D ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * @(#)PrintCanvas3D.java 1.5 02/04/01 15:04:11&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (c) 1996-2002 Sun Microsystems, Inc. All Rights Reserved.&lt;br /&gt;
 * &lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions are met: -&lt;br /&gt;
 * Redistributions of source code must retain the above copyright notice, this&lt;br /&gt;
 * list of conditions and the following disclaimer. - Redistribution in binary&lt;br /&gt;
 * form must reproduce the above copyright notice, this list of conditions and&lt;br /&gt;
 * the following disclaimer in the documentation and/or other materials provided&lt;br /&gt;
 * with the distribution.&lt;br /&gt;
 * &lt;br /&gt;
 * Neither the name of Sun Microsystems, Inc. or the names of contributors may&lt;br /&gt;
 * be used to endorse or promote products derived from this software without&lt;br /&gt;
 * specific prior written permission.&lt;br /&gt;
 * &lt;br /&gt;
 * This software is provided &amp;quot;AS IS,&amp;quot; without a warranty of any kind. ALL&lt;br /&gt;
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY&lt;br /&gt;
 * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR&lt;br /&gt;
 * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE&lt;br /&gt;
 * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING&lt;br /&gt;
 * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS&lt;br /&gt;
 * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,&lt;br /&gt;
 * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER&lt;br /&gt;
 * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF&lt;br /&gt;
 * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY&lt;br /&gt;
 * OF SUCH DAMAGES.&lt;br /&gt;
 * &lt;br /&gt;
 * You acknowledge that Software is not designed,licensed or intended for use in&lt;br /&gt;
 * the design, construction, operation or maintenance of any nuclear facility.&lt;br /&gt;
 */&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.GraphicsConfiguration;&lt;br /&gt;
import java.awt.Image;&lt;br /&gt;
import java.awt.Point;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import java.awt.geom.AffineTransform;&lt;br /&gt;
import java.awt.image.BufferedImage;&lt;br /&gt;
import java.awt.image.ImageObserver;&lt;br /&gt;
import java.awt.print.PageFormat;&lt;br /&gt;
import java.awt.print.Printable;&lt;br /&gt;
import java.awt.print.PrinterException;&lt;br /&gt;
import java.awt.print.PrinterJob;&lt;br /&gt;
import java.io.FileNotFoundException;&lt;br /&gt;
import javax.media.j3d.Alpha;&lt;br /&gt;
import javax.media.j3d.AmbientLight;&lt;br /&gt;
import javax.media.j3d.Background;&lt;br /&gt;
import javax.media.j3d.BoundingSphere;&lt;br /&gt;
import javax.media.j3d.BranchGroup;&lt;br /&gt;
import javax.media.j3d.Canvas3D;&lt;br /&gt;
import javax.media.j3d.DirectionalLight;&lt;br /&gt;
import javax.media.j3d.ImageComponent;&lt;br /&gt;
import javax.media.j3d.ImageComponent2D;&lt;br /&gt;
import javax.media.j3d.RotationInterpolator;&lt;br /&gt;
import javax.media.j3d.Screen3D;&lt;br /&gt;
import javax.media.j3d.Transform3D;&lt;br /&gt;
import javax.media.j3d.TransformGroup;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JMenu;&lt;br /&gt;
import javax.swing.JMenuBar;&lt;br /&gt;
import javax.swing.JMenuItem;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JPopupMenu;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JSeparator;&lt;br /&gt;
import javax.vecmath.Color3f;&lt;br /&gt;
import javax.vecmath.Point3d;&lt;br /&gt;
import javax.vecmath.Vector3f;&lt;br /&gt;
import com.sun.j3d.loaders.IncorrectFormatException;&lt;br /&gt;
import com.sun.j3d.loaders.ParsingErrorException;&lt;br /&gt;
import com.sun.j3d.loaders.Scene;&lt;br /&gt;
import com.sun.j3d.loaders.objectfile.ObjectFile;&lt;br /&gt;
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;&lt;br /&gt;
import com.sun.j3d.utils.behaviors.mouse.MouseTranslate;&lt;br /&gt;
import com.sun.j3d.utils.behaviors.mouse.MouseZoom;&lt;br /&gt;
import com.sun.j3d.utils.universe.SimpleUniverse;&lt;br /&gt;
public class PrintCanvas3D extends JFrame implements ActionListener {&lt;br /&gt;
  private static final boolean spin = false;&lt;br /&gt;
  private static final boolean noTriangulate = false;&lt;br /&gt;
  private static final boolean noStripify = false;&lt;br /&gt;
  private static final double creaseAngle = 60.0;&lt;br /&gt;
  private JMenuItem snapshotItem;&lt;br /&gt;
  private JMenuItem printItem;&lt;br /&gt;
  private JMenuItem quitItem;&lt;br /&gt;
  private SimpleUniverse u;&lt;br /&gt;
  private Canvas3D canvas3D;&lt;br /&gt;
  private OffScreenCanvas3D offScreenCanvas3D;&lt;br /&gt;
  private static final int OFF_SCREEN_SCALE = 3;&lt;br /&gt;
  private class AppPanel extends JPanel {&lt;br /&gt;
    private String filename = null;&lt;br /&gt;
    public BranchGroup createSceneGraph(String args[]) {&lt;br /&gt;
      // Create the root of the branch graph&lt;br /&gt;
      BranchGroup objRoot = new BranchGroup();&lt;br /&gt;
      // Create a Transformgroup to scale all objects so they&lt;br /&gt;
      // appear in the scene.&lt;br /&gt;
      TransformGroup objScale = new TransformGroup();&lt;br /&gt;
      Transform3D t3d = new Transform3D();&lt;br /&gt;
      t3d.setScale(0.7);&lt;br /&gt;
      objScale.setTransform(t3d);&lt;br /&gt;
      objRoot.addChild(objScale);&lt;br /&gt;
      // Create the transform group node and initialize it to the&lt;br /&gt;
      // identity. Enable the TRANSFORM_WRITE capability so that&lt;br /&gt;
      // our behavior code can modify it at runtime. Add it to the&lt;br /&gt;
      // root of the subgraph.&lt;br /&gt;
      TransformGroup objTrans = new TransformGroup();&lt;br /&gt;
      objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);&lt;br /&gt;
      objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);&lt;br /&gt;
      objScale.addChild(objTrans);&lt;br /&gt;
      int flags = ObjectFile.RESIZE;&lt;br /&gt;
      if (!noTriangulate)&lt;br /&gt;
        flags |= ObjectFile.TRIANGULATE;&lt;br /&gt;
      if (!noStripify)&lt;br /&gt;
        flags |= ObjectFile.STRIPIFY;&lt;br /&gt;
      ObjectFile f = new ObjectFile(flags,&lt;br /&gt;
          (float) (creaseAngle * Math.PI / 180.0));&lt;br /&gt;
      Scene s = null;&lt;br /&gt;
      try {&lt;br /&gt;
        s = f.load(filename);&lt;br /&gt;
      } catch (FileNotFoundException e) {&lt;br /&gt;
        System.err.println(e);&lt;br /&gt;
        System.exit(1);&lt;br /&gt;
      } catch (ParsingErrorException e) {&lt;br /&gt;
        System.err.println(e);&lt;br /&gt;
        System.exit(1);&lt;br /&gt;
      } catch (IncorrectFormatException e) {&lt;br /&gt;
        System.err.println(e);&lt;br /&gt;
        System.exit(1);&lt;br /&gt;
      }&lt;br /&gt;
      objTrans.addChild(s.getSceneGroup());&lt;br /&gt;
      BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0,&lt;br /&gt;
          0.0), 100.0);&lt;br /&gt;
      if (spin) {&lt;br /&gt;
        Transform3D yAxis = new Transform3D();&lt;br /&gt;
        Alpha rotationAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE, 0,&lt;br /&gt;
            0, 4000, 0, 0, 0, 0, 0);&lt;br /&gt;
        RotationInterpolator rotator = new RotationInterpolator(&lt;br /&gt;
            rotationAlpha, objTrans, yAxis, 0.0f,&lt;br /&gt;
            (float) Math.PI * 2.0f);&lt;br /&gt;
        rotator.setSchedulingBounds(bounds);&lt;br /&gt;
        objTrans.addChild(rotator);&lt;br /&gt;
      } else {&lt;br /&gt;
        // Create the rotate behavior node&lt;br /&gt;
        MouseRotate behavior = new MouseRotate();&lt;br /&gt;
        behavior.setTransformGroup(objTrans);&lt;br /&gt;
        objTrans.addChild(behavior);&lt;br /&gt;
        behavior.setSchedulingBounds(bounds);&lt;br /&gt;
        // Create the zoom behavior node&lt;br /&gt;
        MouseZoom behavior2 = new MouseZoom();&lt;br /&gt;
        behavior2.setTransformGroup(objTrans);&lt;br /&gt;
        objTrans.addChild(behavior2);&lt;br /&gt;
        behavior2.setSchedulingBounds(bounds);&lt;br /&gt;
        // Create the translate behavior node&lt;br /&gt;
        MouseTranslate behavior3 = new MouseTranslate();&lt;br /&gt;
        behavior3.setTransformGroup(objTrans);&lt;br /&gt;
        objTrans.addChild(behavior3);&lt;br /&gt;
        behavior3.setSchedulingBounds(bounds);&lt;br /&gt;
      }&lt;br /&gt;
      // Set up the background&lt;br /&gt;
      Color3f bgColor = new Color3f(0.05f, 0.05f, 0.5f);&lt;br /&gt;
      Background bgNode = new Background(bgColor);&lt;br /&gt;
      bgNode.setApplicationBounds(bounds);&lt;br /&gt;
      objRoot.addChild(bgNode);&lt;br /&gt;
      // Set up the ambient light&lt;br /&gt;
      Color3f ambientColor = new Color3f(0.1f, 0.1f, 0.1f);&lt;br /&gt;
      AmbientLight ambientLightNode = new AmbientLight(ambientColor);&lt;br /&gt;
      ambientLightNode.setInfluencingBounds(bounds);&lt;br /&gt;
      objRoot.addChild(ambientLightNode);&lt;br /&gt;
      // Set up the directional lights&lt;br /&gt;
      Color3f light1Color = new Color3f(1.0f, 1.0f, 0.9f);&lt;br /&gt;
      Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);&lt;br /&gt;
      Color3f light2Color = new Color3f(0.3f, 0.3f, 0.4f);&lt;br /&gt;
      Vector3f light2Direction = new Vector3f(-6.0f, -2.0f, -1.0f);&lt;br /&gt;
      DirectionalLight light1 = new DirectionalLight(light1Color,&lt;br /&gt;
          light1Direction);&lt;br /&gt;
      light1.setInfluencingBounds(bounds);&lt;br /&gt;
      objRoot.addChild(light1);&lt;br /&gt;
      DirectionalLight light2 = new DirectionalLight(light2Color,&lt;br /&gt;
          light2Direction);&lt;br /&gt;
      light2.setInfluencingBounds(bounds);&lt;br /&gt;
      objRoot.addChild(light2);&lt;br /&gt;
      return objRoot;&lt;br /&gt;
    }&lt;br /&gt;
    private void usage() {&lt;br /&gt;
      System.out.println(&amp;quot;Usage: java PrintCanvas3D &amp;lt;.obj file&amp;gt;&amp;quot;);&lt;br /&gt;
      System.exit(0);&lt;br /&gt;
    } // End of usage&lt;br /&gt;
    // Create the Canvas3D (both on-screen and off-screen)&lt;br /&gt;
    private void createCanvas3D(String[] args) {&lt;br /&gt;
      if (args.length == 0) {&lt;br /&gt;
        usage();&lt;br /&gt;
      } else {&lt;br /&gt;
        for (int i = 0; i &amp;lt; args.length; i++) {&lt;br /&gt;
          if (args[i].startsWith(&amp;quot;-&amp;quot;)) {&lt;br /&gt;
            System.err.println(&amp;quot;Argument &amp;quot;&amp;quot; + args[i]&lt;br /&gt;
                + &amp;quot;&amp;quot; ignored.&amp;quot;);&lt;br /&gt;
          } else {&lt;br /&gt;
            filename = args[i];&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (filename == null) {&lt;br /&gt;
        usage();&lt;br /&gt;
      }&lt;br /&gt;
      // Create Canvas3D&lt;br /&gt;
      GraphicsConfiguration config = SimpleUniverse&lt;br /&gt;
          .getPreferredConfiguration();&lt;br /&gt;
      canvas3D = new Canvas3D(config);&lt;br /&gt;
      canvas3D.setSize(600, 450);&lt;br /&gt;
      // Create a simple scene and attach it to the virtual universe&lt;br /&gt;
      BranchGroup scene = createSceneGraph(args);&lt;br /&gt;
      u = new SimpleUniverse(canvas3D);&lt;br /&gt;
      // This will move the ViewPlatform back a bit so the&lt;br /&gt;
      // objects in the scene can be viewed.&lt;br /&gt;
      u.getViewingPlatform().setNominalViewingTransform();&lt;br /&gt;
      u.addBranchGraph(scene);&lt;br /&gt;
      // Create the off-screen Canvas3D object&lt;br /&gt;
      offScreenCanvas3D = new OffScreenCanvas3D(config, true);&lt;br /&gt;
      // Set the off-screen size based on a scale factor times the&lt;br /&gt;
      // on-screen size&lt;br /&gt;
      Screen3D sOn = canvas3D.getScreen3D();&lt;br /&gt;
      Screen3D sOff = offScreenCanvas3D.getScreen3D();&lt;br /&gt;
      Dimension dim = sOn.getSize();&lt;br /&gt;
      dim.width *= OFF_SCREEN_SCALE;&lt;br /&gt;
      dim.height *= OFF_SCREEN_SCALE;&lt;br /&gt;
      sOff.setSize(dim);&lt;br /&gt;
      sOff.setPhysicalScreenWidth(sOn.getPhysicalScreenWidth()&lt;br /&gt;
          * OFF_SCREEN_SCALE);&lt;br /&gt;
      sOff.setPhysicalScreenHeight(sOn.getPhysicalScreenHeight()&lt;br /&gt;
          * OFF_SCREEN_SCALE);&lt;br /&gt;
      // attach the offscreen canvas to the view&lt;br /&gt;
      u.getViewer().getView().addCanvas3D(offScreenCanvas3D);&lt;br /&gt;
    }&lt;br /&gt;
    private AppPanel(String args[]) {&lt;br /&gt;
      setLayout(new BorderLayout());&lt;br /&gt;
      // Create Canvas3D and scene graph&lt;br /&gt;
      createCanvas3D(args);&lt;br /&gt;
      add(&amp;quot;Center&amp;quot;, canvas3D);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void actionPerformed(ActionEvent event) {&lt;br /&gt;
    Object target = event.getSource();&lt;br /&gt;
    if ((target == snapshotItem) || (target == printItem)) {&lt;br /&gt;
      Point loc = canvas3D.getLocationOnScreen();&lt;br /&gt;
      offScreenCanvas3D.setOffScreenLocation(loc);&lt;br /&gt;
      Dimension dim = canvas3D.getSize();&lt;br /&gt;
      dim.width *= OFF_SCREEN_SCALE;&lt;br /&gt;
      dim.height *= OFF_SCREEN_SCALE;&lt;br /&gt;
      BufferedImage bImage = offScreenCanvas3D.doRender(dim.width,&lt;br /&gt;
          dim.height);&lt;br /&gt;
      if (target == snapshotItem) {&lt;br /&gt;
        new ImageDisplayer(bImage);&lt;br /&gt;
      } else { // (target == printItem)&lt;br /&gt;
        new ImagePrinter(bImage).print();&lt;br /&gt;
      }&lt;br /&gt;
    } else if (target == quitItem) {&lt;br /&gt;
      u.removeAllLocales();&lt;br /&gt;
      System.exit(0);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private JMenuBar createMenuBar() {&lt;br /&gt;
    JMenuBar menuBar = new JMenuBar();&lt;br /&gt;
    JMenu fileMenu = new JMenu(&amp;quot;File&amp;quot;);&lt;br /&gt;
    snapshotItem = new JMenuItem(&amp;quot;Snapshot&amp;quot;);&lt;br /&gt;
    snapshotItem.addActionListener(this);&lt;br /&gt;
    printItem = new JMenuItem(&amp;quot;Print...&amp;quot;);&lt;br /&gt;
    printItem.addActionListener(this);&lt;br /&gt;
    quitItem = new JMenuItem(&amp;quot;Quit&amp;quot;);&lt;br /&gt;
    quitItem.addActionListener(this);&lt;br /&gt;
    fileMenu.add(snapshotItem);&lt;br /&gt;
    fileMenu.add(printItem);&lt;br /&gt;
    fileMenu.add(new JSeparator());&lt;br /&gt;
    fileMenu.add(quitItem);&lt;br /&gt;
    menuBar.add(fileMenu);&lt;br /&gt;
    return menuBar;&lt;br /&gt;
  }&lt;br /&gt;
  private PrintCanvas3D(String args[]) {&lt;br /&gt;
    this.setTitle(&amp;quot;Canvas3D Print Test&amp;quot;);&lt;br /&gt;
    // Create and initialize menu bar&lt;br /&gt;
    JPopupMenu.setDefaultLightWeightPopupEnabled(false);&lt;br /&gt;
    this.setJMenuBar(createMenuBar());&lt;br /&gt;
    // Handle the close event&lt;br /&gt;
    this.addWindowListener(new WindowAdapter() {&lt;br /&gt;
      public void windowClosing(WindowEvent winEvent) {&lt;br /&gt;
        System.exit(0);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    // Add main panel to top-level frame and make it visible&lt;br /&gt;
    this.getContentPane().add(new AppPanel(args));&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new PrintCanvas3D(args);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class OffScreenCanvas3D extends Canvas3D {&lt;br /&gt;
  OffScreenCanvas3D(GraphicsConfiguration graphicsConfiguration,&lt;br /&gt;
      boolean offScreen) {&lt;br /&gt;
    super(graphicsConfiguration, offScreen);&lt;br /&gt;
  }&lt;br /&gt;
  BufferedImage doRender(int width, int height) {&lt;br /&gt;
    BufferedImage bImage = new BufferedImage(width, height,&lt;br /&gt;
        BufferedImage.TYPE_INT_ARGB);&lt;br /&gt;
    ImageComponent2D buffer = new ImageComponent2D(&lt;br /&gt;
        ImageComponent.FORMAT_RGBA, bImage);&lt;br /&gt;
    setOffScreenBuffer(buffer);&lt;br /&gt;
    renderOffScreenBuffer();&lt;br /&gt;
    waitForOffScreenRendering();&lt;br /&gt;
    bImage = getOffScreenBuffer().getImage();&lt;br /&gt;
    return bImage;&lt;br /&gt;
  }&lt;br /&gt;
  public void postSwap() {&lt;br /&gt;
    // No-op since we always wait for off-screen rendering to complete&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class ImageDisplayer extends JFrame implements ActionListener {&lt;br /&gt;
  BufferedImage bImage;&lt;br /&gt;
  private class ImagePanel extends JPanel {&lt;br /&gt;
    public void paint(Graphics g) {&lt;br /&gt;
      g.setColor(Color.black);&lt;br /&gt;
      g.fillRect(0, 0, getSize().width, getSize().height);&lt;br /&gt;
      g.drawImage(bImage, 0, 0, this);&lt;br /&gt;
    }&lt;br /&gt;
    private ImagePanel() {&lt;br /&gt;
      setPreferredSize(new Dimension(bImage.getWidth(), bImage&lt;br /&gt;
          .getHeight()));&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private JMenuItem printItem;&lt;br /&gt;
  private JMenuItem closeItem;&lt;br /&gt;
  public void actionPerformed(ActionEvent event) {&lt;br /&gt;
    Object target = event.getSource();&lt;br /&gt;
    if (target == printItem) {&lt;br /&gt;
      new ImagePrinter(bImage).print();&lt;br /&gt;
    } else if (target == closeItem) {&lt;br /&gt;
      this.removeAll();&lt;br /&gt;
      this.setVisible(false);&lt;br /&gt;
      bImage = null;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private JMenuBar createMenuBar() {&lt;br /&gt;
    JMenuBar menuBar = new JMenuBar();&lt;br /&gt;
    JMenu fileMenu = new JMenu(&amp;quot;File&amp;quot;);&lt;br /&gt;
    printItem = new JMenuItem(&amp;quot;Print...&amp;quot;);&lt;br /&gt;
    printItem.addActionListener(this);&lt;br /&gt;
    closeItem = new JMenuItem(&amp;quot;Close&amp;quot;);&lt;br /&gt;
    closeItem.addActionListener(this);&lt;br /&gt;
    fileMenu.add(printItem);&lt;br /&gt;
    fileMenu.add(new JSeparator());&lt;br /&gt;
    fileMenu.add(closeItem);&lt;br /&gt;
    menuBar.add(fileMenu);&lt;br /&gt;
    return menuBar;&lt;br /&gt;
  }&lt;br /&gt;
  ImageDisplayer(BufferedImage bImage) {&lt;br /&gt;
    this.bImage = bImage;&lt;br /&gt;
    this.setTitle(&amp;quot;Off-screen Canvas3D Snapshot&amp;quot;);&lt;br /&gt;
    // Create and initialize menu bar&lt;br /&gt;
    this.setJMenuBar(createMenuBar());&lt;br /&gt;
    // Create scroll pane, and embedded image panel&lt;br /&gt;
    ImagePanel imagePanel = new ImagePanel();&lt;br /&gt;
    JScrollPane scrollPane = new JScrollPane(imagePanel);&lt;br /&gt;
    scrollPane.getViewport().setPreferredSize(new Dimension(700, 700));&lt;br /&gt;
    // Add scroll pane to the frame and make it visible&lt;br /&gt;
    this.getContentPane().add(scrollPane);&lt;br /&gt;
    this.pack();&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class ImagePrinter implements Printable, ImageObserver {&lt;br /&gt;
  BufferedImage bImage;&lt;br /&gt;
  public int print(Graphics g, PageFormat pf, int pi) throws PrinterException {&lt;br /&gt;
    if (pi &amp;gt;= 1) {&lt;br /&gt;
      return Printable.NO_SUCH_PAGE;&lt;br /&gt;
    }&lt;br /&gt;
    Graphics2D g2d = (Graphics2D) g;&lt;br /&gt;
    //g2d.translate(pf.getImageableX(), pf.getImageableY());&lt;br /&gt;
    AffineTransform t2d = new AffineTransform();&lt;br /&gt;
    t2d.translate(pf.getImageableX(), pf.getImageableY());&lt;br /&gt;
    double xscale = pf.getImageableWidth() / (double) bImage.getWidth();&lt;br /&gt;
    double yscale = pf.getImageableHeight() / (double) bImage.getHeight();&lt;br /&gt;
    double scale = Math.min(xscale, yscale);&lt;br /&gt;
    t2d.scale(scale, scale);&lt;br /&gt;
    try {&lt;br /&gt;
      g2d.drawImage(bImage, t2d, this);&lt;br /&gt;
    } catch (Exception ex) {&lt;br /&gt;
      ex.printStackTrace();&lt;br /&gt;
      return Printable.NO_SUCH_PAGE;&lt;br /&gt;
    }&lt;br /&gt;
    return Printable.PAGE_EXISTS;&lt;br /&gt;
  }&lt;br /&gt;
  void print() {&lt;br /&gt;
    PrinterJob printJob = PrinterJob.getPrinterJob();&lt;br /&gt;
    PageFormat pageFormat = printJob.defaultPage();&lt;br /&gt;
    pageFormat.setOrientation(PageFormat.LANDSCAPE);&lt;br /&gt;
    pageFormat = printJob.validatePage(pageFormat);&lt;br /&gt;
    printJob.setPrintable(this, pageFormat);&lt;br /&gt;
    if (printJob.printDialog()) {&lt;br /&gt;
      try {&lt;br /&gt;
        printJob.print();&lt;br /&gt;
      } catch (PrinterException ex) {&lt;br /&gt;
        ex.printStackTrace();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public boolean imageUpdate(Image img, int infoflags, int x, int y,&lt;br /&gt;
      int width, int height) {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  ImagePrinter(BufferedImage bImage) {&lt;br /&gt;
    this.bImage = bImage;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>