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

[Java3Djp:00153] Re: マウスの座標



木曾海老屋通販逸品カタログ ====================
 『えっ!木のワインクーラー!おっ!うるし塗りのワイングラス??』
         ☆ 食を楽しくする器のお店です☆
 ヒノキの箸 お椀 弁当箱 コーヒーカップ おひつ等逸品の数々!!
========== http://www.cnet-kiso.ne.jp/h/hajime/ippin.html
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

>Canvas3Dクラスのcanvas3Dにリスナーを付けるとマウスイベントが取れると
>思うのですが、これではいけないのでしょうか?

あ、本当だ! ありがとうございます。m(_ _)m

import java.awt.*;
import java.awt.event.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;

public class MouseEventTest3D extends java.applet.Applet {

  public void init(){
    initialize3D();
  }
  public void paint( Graphics g ){

  }
  public void update( Graphics g ){
  }
  public void start(){
  }
  public void stop(){
  }

    public BranchGroup createSceneGraph() {
	BranchGroup objRoot = new BranchGroup();

	TransformGroup objTrans = new TransformGroup();
        Transform3D t3d = new Transform3D();
        t3d.setScale(0.4);
        objTrans.setTransform(t3d);
	objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
	objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
	objRoot.addChild(objTrans);

	objTrans.addChild(new ColorCube(1.0));

	return objRoot;
    }

  private void initialize3D() {
    setLayout(new BorderLayout());

    GraphicsConfiguration config =
      SimpleUniverse.getPreferredConfiguration();

    Canvas3D canvas3d = new Canvas3D(config);
    add("Center", canvas3d);
    
    //これでマウスイベントが通知される
    canvas3d.addMouseListener(new MouseEventAdapter());

    BranchGroup scene = createSceneGraph();

    SimpleUniverse u = new SimpleUniverse(canvas3d);

    u.getViewingPlatform().setNominalViewingTransform();

    u.addBranchGraph(scene);
  }

  public MouseEventTest3D() {
  }

  public static void main(String[] args) {
    MouseEventTest3D me = new MouseEventTest3D();
    MainFrame frame = new MainFrame(me, 500, 500);
    me.init();
    me.start();
  }
}

class MouseEventAdapter implements MouseListener {
  public void mousePressed( MouseEvent e ){}
  public void mouseReleased( MouseEvent e ){}
  public void mouseEntered( MouseEvent e ){}
  public void mouseExited( MouseEvent e ){}
  public void mouseClicked( MouseEvent e ){
    System.out.println("x=" + e.getX() + ", y=" + e.getY());
  }
}

>それから、
>
>GraphicsConfiguration config =
>      SimpleUniverse.getPreferredConfiguration();
>
>の処理はどのようなものなのでしょうか?

私もまだよく調べてません^^; お時間ください。
(って言っても API Specification を読むだけなんですが...)

>例えば"HelloUniverseのようなプログラムの画面で、マウスのドラッグと同時に
>           線を引いたりしたい"と考えています。

この線というのは3D空間上の直線ですか?

それとも、
普通の2Dグラフィックの鉛筆ツールみたいな線を描きたいと言うことなのですか?
(Visual C++ のscribbleチュートリアルみたいな)

>ImmediateModeなるものでプログラムしなけらばならないのかな、と考えていたのですが、
>上のものを使ってCanvas3Dクラスを生成するということは、このようなことに関連するのでしょうか?

Canvas3D ですべての描画を管理しているのですよね。
------------------------------------------------------------------
遠藤靖之 (えんどう やすゆき) <yasuyuki@xxxxxxxxxx>
http://www.freepage.total.co.jp/jfriends/ (Java互助会ホームページ)
株式会社タイムインターメディア 情報通信サービス部 TEL 03-5362-9009
〒162-0065 新宿区住吉町3-11 新宿スパイアビル8F    FAX 03-5362-9008