一段有用的java3d代码,演示了java3d鼠标滑过对象事件。
来源:互联网 发布:淘宝客服需要做什么 编辑:程序博客网 时间:2024/06/07 03:48
-------------------MouseOverBehavior.java--------------------
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.picking.*;
public class MouseOverBehavior extends Behavior {
private PickCanvas pickCanvas;
private PickResult pickResult;
private Appearance pickedShapeOldApp, cyanApp;
private Node pickedNode;
private boolean isObjectSelectedBefore = false;
private Shape3D pickedShape;
private Shape3D oldPickedNode = new Shape3D ();
private BranchGroup dataBranchGroup;
private Cursor savedCursor;
private Canvas3D canvas;
private boolean overAnObject = false;
private BranchGroup shapeLabelBG = new BranchGroup ();
public MouseOverBehavior (Canvas3D canvas, BranchGroup dataBranchGroup) {
this.canvas = canvas;
this.dataBranchGroup = dataBranchGroup;
pickCanvas = new PickCanvas (canvas, dataBranchGroup);
pickCanvas.setTolerance (1.0f);
pickCanvas.setMode (PickCanvas.GEOMETRY_INTERSECT_INFO);
Color3f objColor = new Color3f (0.8f, 0.8f, 0.0f);
Color3f black = new Color3f (0.0f, 0.0f, 0.0f);
Color3f white = new Color3f (1.0f, 1.0f, 1.0f);
cyanApp = new Appearance ();
objColor = new Color3f (0.0f, 0.8f, 0.8f);
cyanApp.setMaterial (new Material (objColor, black, objColor, white, 10.0f));
cyanApp.setTransparencyAttributes (new TransparencyAttributes (TransparencyAttributes.NICEST, 0.3f));
}
public void initialize () {
wakeupOn (new WakeupOnAWTEvent (MouseEvent.MOUSE_MOVED));
}
public void processStimulus (Enumeration criteria) {
WakeupCriterion wakeup;
AWTEvent[] event;
int eventId;
while (criteria.hasMoreElements ()) {
wakeup = (WakeupCriterion) criteria.nextElement ();
if (wakeup instanceof WakeupOnAWTEvent) {
event = ((WakeupOnAWTEvent) wakeup).getAWTEvent ();
for (int ii = 0; ii < event.length; ii++) {
eventId = event[ii].getID ();
if (eventId == MouseEvent.MOUSE_MOVED) {
int x = ((MouseEvent) event[ii]).getX ();
int y = ((MouseEvent) event[ii]).getY ();
pickCanvas.setShapeLocation (x, y);
try {
pickResult = pickCanvas.pickClosest ();
if (pickResult != null) {
pickedNode = ((Shape3D) pickResult.getNode (PickResult.SHAPE3D));
pickedShape = ((Shape3D) pickedNode);
//I will need this part in the future for
// details of the MouseOver shape.
// pickedNode.getLocalToVworld (testTransform);
// testTransform.get (objectPosToVW);
// System.out.println (testTransform);
if (isObjectSelectedBefore) {
if (oldPickedNode == null) {
oldPickedNode = pickedShape;
pickedShapeOldApp = pickedShape.getAppearance ();
canvas.setCursor (Cursor.getPredefinedCursor (Cursor.CROSSHAIR_CURSOR));
System.out.println ("Mouse Over - object is selected before");
} else {
((Shape3D) oldPickedNode).setAppearance (pickedShapeOldApp);
oldPickedNode = pickedShape;
pickedShapeOldApp = ((Shape3D) pickedNode).getAppearance ();
((Shape3D) pickedNode).setAppearance (cyanApp);
canvas.setCursor (Cursor.getPredefinedCursor (Cursor.CROSSHAIR_CURSOR));
overAnObject = true;
System.out.println ("Mouse Over - object is not selected before");
}
}
isObjectSelectedBefore = true;
} else if (overAnObject) {
canvas.setCursor (Cursor.getPredefinedCursor (Cursor.DEFAULT_CURSOR));
oldPickedNode.setAppearance (pickedShapeOldApp);
System.out.println ("pickResult is null");
overAnObject = false;
}
} catch (CapabilityNotSetException e) {
e.printStackTrace ();
}
}
}
}
}
wakeupOn (new WakeupOnAWTEvent (MouseEvent.MOUSE_MOVED));
}
}
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.picking.*;
public class MouseOverBehavior extends Behavior {
private PickCanvas pickCanvas;
private PickResult pickResult;
private Appearance pickedShapeOldApp, cyanApp;
private Node pickedNode;
private boolean isObjectSelectedBefore = false;
private Shape3D pickedShape;
private Shape3D oldPickedNode = new Shape3D ();
private BranchGroup dataBranchGroup;
private Cursor savedCursor;
private Canvas3D canvas;
private boolean overAnObject = false;
private BranchGroup shapeLabelBG = new BranchGroup ();
public MouseOverBehavior (Canvas3D canvas, BranchGroup dataBranchGroup) {
this.canvas = canvas;
this.dataBranchGroup = dataBranchGroup;
pickCanvas = new PickCanvas (canvas, dataBranchGroup);
pickCanvas.setTolerance (1.0f);
pickCanvas.setMode (PickCanvas.GEOMETRY_INTERSECT_INFO);
Color3f objColor = new Color3f (0.8f, 0.8f, 0.0f);
Color3f black = new Color3f (0.0f, 0.0f, 0.0f);
Color3f white = new Color3f (1.0f, 1.0f, 1.0f);
cyanApp = new Appearance ();
objColor = new Color3f (0.0f, 0.8f, 0.8f);
cyanApp.setMaterial (new Material (objColor, black, objColor, white, 10.0f));
cyanApp.setTransparencyAttributes (new TransparencyAttributes (TransparencyAttributes.NICEST, 0.3f));
}
public void initialize () {
wakeupOn (new WakeupOnAWTEvent (MouseEvent.MOUSE_MOVED));
}
public void processStimulus (Enumeration criteria) {
WakeupCriterion wakeup;
AWTEvent[] event;
int eventId;
while (criteria.hasMoreElements ()) {
wakeup = (WakeupCriterion) criteria.nextElement ();
if (wakeup instanceof WakeupOnAWTEvent) {
event = ((WakeupOnAWTEvent) wakeup).getAWTEvent ();
for (int ii = 0; ii < event.length; ii++) {
eventId = event[ii].getID ();
if (eventId == MouseEvent.MOUSE_MOVED) {
int x = ((MouseEvent) event[ii]).getX ();
int y = ((MouseEvent) event[ii]).getY ();
pickCanvas.setShapeLocation (x, y);
try {
pickResult = pickCanvas.pickClosest ();
if (pickResult != null) {
pickedNode = ((Shape3D) pickResult.getNode (PickResult.SHAPE3D));
pickedShape = ((Shape3D) pickedNode);
//I will need this part in the future for
// details of the MouseOver shape.
// pickedNode.getLocalToVworld (testTransform);
// testTransform.get (objectPosToVW);
// System.out.println (testTransform);
if (isObjectSelectedBefore) {
if (oldPickedNode == null) {
oldPickedNode = pickedShape;
pickedShapeOldApp = pickedShape.getAppearance ();
canvas.setCursor (Cursor.getPredefinedCursor (Cursor.CROSSHAIR_CURSOR));
System.out.println ("Mouse Over - object is selected before");
} else {
((Shape3D) oldPickedNode).setAppearance (pickedShapeOldApp);
oldPickedNode = pickedShape;
pickedShapeOldApp = ((Shape3D) pickedNode).getAppearance ();
((Shape3D) pickedNode).setAppearance (cyanApp);
canvas.setCursor (Cursor.getPredefinedCursor (Cursor.CROSSHAIR_CURSOR));
overAnObject = true;
System.out.println ("Mouse Over - object is not selected before");
}
}
isObjectSelectedBefore = true;
} else if (overAnObject) {
canvas.setCursor (Cursor.getPredefinedCursor (Cursor.DEFAULT_CURSOR));
oldPickedNode.setAppearance (pickedShapeOldApp);
System.out.println ("pickResult is null");
overAnObject = false;
}
} catch (CapabilityNotSetException e) {
e.printStackTrace ();
}
}
}
}
}
wakeupOn (new WakeupOnAWTEvent (MouseEvent.MOUSE_MOVED));
}
}
- 一段有用的java3d代码,演示了java3d鼠标滑过对象事件。
- Java3D
- JAVA3D
- Java3D
- Java3D
- JAVA3D
- Java3D中鼠标拾取知识
- Java3D遇到的问题
- Java3D的配置
- java3D的单摆
- Java3D的环境配置
- java3d的入门示例
- JAVA3D游戏人物模块代码
- 三维物体的折叠(Java3D)
- java3d 的学习笔记1
- 添加鼠标移出事件的 一段代码
- java3d异常
- java3D场景
- 怎么在PopUpButton当中加上横分割线
- Android自定义控件之我的电话小键盘
- 棋盘覆盖问题
- 冒泡排序
- 为什么C++编译器不支持模板头文件和实现代码分离的编译
- 一段有用的java3d代码,演示了java3d鼠标滑过对象事件。
- Opendiameter
- PS1设置Linux系统提示符
- 编译安装小错误
- 用汇编的眼光看C++(之判断流程)
- POJ 2599 A funny game [DFS博弈]
- JNI中输出debug message
- OpenDiameter 编译,安装,调试
- 时间与金钱