[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Java3Djp:02025] Re: 解決しました Re: Swing と Java3D



------------------------- infoseek ML Sponsor --------------------------
    ★★楽しかった夏休み!★★でもサイフの中身はカラッポ・・★★
     ┏━┓┏━┓┏━┓┏━┓┏━┓┏━┓┏━┓┏━┓┏━┓  
     ┃ロ┃┃ー┃┃ン┃┃カ┃┃ー┃┃ド┃┃特┃┃集┃┃!┃  
     ┗━┛┗━┛┗━┛┗━┛┗━┛┗━┛┗━┛┗━┛┗━┛  
   貴方に合ったローンカードは?   http://www.loanginza.com/01
------------------------------------------------------------------------


古川です。

> >いろいろ試した結果、Java3Dの画面を
> >OffScreen 上に表示、マウスで動かすことが
> >できるようになりました。
> >ご希望なら簡単なソースをお送りいたします。
>
> ぜひお願いします。

少し長いソースなのでMLに流すのを躊躇したのですが、
思い直して添付します。

あまり美しくないソースですが、ご参考まで。
お気づきの点はご指摘ください。

P.S.
インデントが変になってしまってすみません。
貼り付けの時、変にインデントされてしまいます。

------------ここから-----------------
import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.applet.*;
import javax.vecmath.*;
import java.awt.event.*;
import javax.media.j3d.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.behaviors.mouse.*;
import java.awt.image.BufferedImage;

public class Test {

    public static void main( String[] args ) {
        JFrame frame = new JFrame( "Java3D Test5" );
        JDesktopPane desktop = new JDesktopPane();
        frame.getContentPane().add( desktop , BorderLayout.CENTER );
        frame.setSize( 500 , 500 );
        frame.setLocation( 100 , 100 );
        frame.setVisible( true );

        JIFrame f1 = new JIFrame( "Frame1" );
        f1.setBounds( 20 , 20 , 300 , 300 );
        desktop.add( f1 );
        f1.setVisible( true );

        JIFrame f2 = new JIFrame( "Frame2" );
        f2.setBounds( 100 , 100 , 300 , 300 );
        desktop.add( f2 );
        f2.setVisible( true );
    }
}

class JIFrame extends JInternalFrame {

    public myJPanel panel;

    public JIFrame( String title ) {
        super( title );
 panel = new myJPanel();
 //        JPanel panel = getJ3DPanel();

        setClosable( true );
        setMaximizable( true );
        setIconifiable( true );
        setResizable( true );
        getContentPane().add( panel , BorderLayout.CENTER );

    }
}

class myJPanel extends JPanel {

    public SimpleUniverse universe;
    public Canvas3D canvas;
    public Transform3D translation;
    public TransformGroup objTrans;

    myJPanel() {
 mygetImage();
    }

    public void paintComponent(Graphics g){
  super.paintComponent(g);
  setLayout(new BorderLayout());


g.drawImage(canvas.getOffScreenBuffer().getImage(),0,0,this.getSize().width,
this.getSize().height,this);
    }

    public void mygetImage() {
 canvas = new Canvas3D(SimpleUniverse.getPreferredConfiguration(),true);

 universe = new SimpleUniverse( canvas );

        BranchGroup root = new BranchGroup();

        objTrans = new TransformGroup();
        translation = new Transform3D();
        objTrans.setTransform( translation );

        Shape3D shape = new ColorCube( 0.5 );

 objTrans.addChild( shape );

 objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
 objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

 MouseRotate rotator = new MouseRotate( this, objTrans );
 MouseTranslate trans = new MouseTranslate( this, objTrans );
 MouseZoom zoomer = new MouseZoom( this, objTrans );

 BoundingSphere bounds = new BoundingSphere(new Point3d(), 100.0);

 rotator.setSchedulingBounds( bounds );
 trans.setSchedulingBounds( bounds );
 zoomer.setSchedulingBounds( bounds );

  objTrans.addChild( rotator );
  objTrans.addChild( trans );
  objTrans.addChild( zoomer );

   root.addChild( objTrans );

 universe.getViewingPlatform().setNominalViewingTransform();
 universe.addBranchGraph( root );

 Dimension dd=new Dimension();
 dd=this.getSize();
 if(dd.width==0) dd.width=500;
 if(dd.height==0) dd.height=500;
 canvas.getScreen3D().setSize(dd);
 canvas.getScreen3D().setPhysicalScreenHeight(1);
 canvas.getScreen3D().setPhysicalScreenWidth(1);
 BufferedImage bi=new BufferedImage(100,100,BufferedImage.TYPE_INT_BGR);
 ImageComponent2D img2d= new
ImageComponent2D(ImageComponent2D.FORMAT_RGB,bi);
 canvas.setOffScreenBuffer(img2d);

 canvas.waitForOffScreenRendering();
 canvas.renderOffScreenBuffer();
 repaint();

 this.addMouseListener(new MouseAdapter(){
  public void mousePressed(MouseEvent e){
      System.out.println("mouse pressed------");
  }

  public void mouseReleased(MouseEvent e){
      System.out.println("mouse Released-----");
  }
     });

 this.addMouseMotionListener(new MouseMotionAdapter(){
  public void mouseDragged(MouseEvent e){
      System.out.println("mouse Dragged-----");
      canvas.waitForOffScreenRendering();
      canvas.renderOffScreenBuffer();
      repaint();
  }
     });
    }
}

----------
古川 裕之



------------------------------------------------------------------------
     ★今さら人に聞けないこと、この際だから聞いちゃおう!
http://research.infoseek.co.jp/entry_n.phtml?magazine_id=107&svx=971122