NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.

To learn about what's going on, see About the Archive Site.

RE: printing three display components

Hello.

Is their in Java any method to know is a line contains or inside an
arbitrary polygon or shape? Or is the any algorithm or mathematics
formula that can solve this problem?

Thanks.
KJ

-----Original Message-----
From: owner-visad-list@xxxxxxxxxxxxx
[mailto:owner-visad-list@xxxxxxxxxxxxx] On Behalf Of Ugo Taddei
Sent: Friday, July 25, 2003 3:47 PM
To: Rakesh Rathod
Subject: Re: printing three display components

Hello,

Curtis Rueden wrote:
> Hi Rakesh,
> 
> I don't know that much about printing in Java, but looking at
> the DisplayImpl.getPrintable() method, it appears you could
> construct a Printable object in whose print() method you create
> a BufferedImage consisting of a synthesis of the three displays
> (in whatever orientation you desire).  Use DisplayImpl.getImage()
> to grab a BufferedImage with the contents of a VisAD Display.
> See DisplayImpl.getPrintable() for an example of using the
> Printable interface to send BufferedImages to the printer.
> 
> There could be an easier way, but that's really more of a Java
> programming question, rather than a VisAD question.

Definitely a Java programming question. Nevertheless, I found code 
snippet lying around on my disk. Feel free to try it (I don't even now 
if it works; it might have worked, some time ago ;-) then let us know 
when you improved it.

NB: Follow Curtis' suggestions, and you'll also need to change

   final JPanel gp = this.getCentralPanel();

to match the panel where all your displays live.


   public Printable getPrintable()
   {
     Printable printer=null;
     final JPanel gp = this.getCentralPanel();

     if (printer == null)
       printer
         new Printable() {
           public int print(Graphics g, PageFormat pf, int pi)
              throws PrinterException
           {
             if (pi >= 1)
             {
                return Printable.NO_SUCH_PAGE;
             }

             pf.setOrientation(PageFormat.LANDSCAPE);
                                         // or: LANDSCAPE

             //JPanel gp =  getcentralPanel();
              Image image = (Image) gp.createImage(gp.getWidth () 
,gp.getHeight());
              Graphics gg = image.getGraphics();
              gp.paint(gg);
              BufferedImage bufImage = (BufferedImage)image;

             //BufferedImage image = DisplayImpl.this.getImage();
             g.drawImage(
                 bufImage,
                 (int) pf.getImageableX(),
                 (int) pf.getImageableY(),
                 gp);
             return Printable.PAGE_EXISTS;
           }
         };
     return printer;
   }


Cheers,

Ugo



  • 2003 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the visad archives: