Hi, Everyone

I am glad to know the availability of Java3D 1.2.

But who can tell me the difference between V1.2 and V1.1.3. Thanks a lot.

Just now, I replace the v1.1.3 with v1.2. My printUtility (print Canvas3D)
doesnot work.
I attatched my PrintableCanvas3D.java file here.

Thanks very much!
yangyuexiang
package gui;

import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.vecmath.*;
import javax.media.j3d.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.*;

import java.awt.geom.*;
import java.awt.image.BufferedImage;
import java.awt.print.*;


class PrintableCanvas3D extends Canvas3D implements Printable{
    
    BufferedImage printImage = null;
    AffineTransform printTransform = null;
    Raster printRaster;
    boolean readRaster;
    
    public PrintableCanvas3D(GraphicsConfiguration config)
    {
        super(config);
    }
    
    public int print( Graphics graphics, PageFormat pageFormat, int pageIndex)
    {
        if (pageIndex > 0)
            {
                printImage = null;
                printTransform = null;
                return Printable.NO_SUCH_PAGE;
            }
        if( printImage == null)
            {
                printImage = getBufferedImage();
                
                Rectangle2D.Double pS = new 
Rectangle2D.Double(pageFormat.getImageableX(), pageFormat.getImageableY(), 
pageFormat.getImageableWidth(), pageFormat.getImageableHeight());
                Rectangle2D.Double iS = new Rectangle2D.Double(0, 
0,printImage.getWidth(null), printImage.getHeight(null)); 
                double xScale = pS.getWidth()/iS.getWidth();
                double yScale = pS.getHeight()/iS.getHeight();
                printTransform = new AffineTransform();
                //              printTransform.translate(-iS.getX(), -iS.getY());
                double aScale = xScale;
                if(aScale > yScale)
                    aScale = yScale;
                printTransform.scale(aScale, aScale);
                printTransform.translate(pS.getX()/xScale, pS.getY()/yScale);
            }
        ((Graphics2D)graphics).drawImage(printImage, printTransform, null);
        
        return Printable.PAGE_EXISTS;
    }
    
    public BufferedImage getBufferedImage()
    {
        readRaster = true;
        setSize( getWidth()-1, getHeight());
        while( readRaster == true)
            Thread.currentThread().yield();
        return printRaster.getImage().getImage();
    }
    
    public void postSwap()
    {
        super.postSwap();
        if ( readRaster)
            {
                BufferedImage bImage = new BufferedImage( getWidth(), getHeight(), 
BufferedImage.TYPE_INT_ARGB);
                ImageComponent2D imageComponent = new 
ImageComponent2D(ImageComponent.FORMAT_RGB, bImage);
                printRaster = new Raster(new 
Point3f(0.0f,0.0f,0.0f),Raster.RASTER_COLOR, 0, 0, bImage.getWidth(), 
bImage.getHeight(),imageComponent, null);
                getGraphicsContext3D().readRaster( printRaster);
                readRaster = false;
            }
    }
}

Reply via email to