⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wakeuponcollisionentry.java

📁 JAVA3D矩陈的相关类
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * $RCSfile: WakeupOnCollisionEntry.java,v $ * * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved. * * Use is subject to license terms. * * $Revision: 1.4 $ * $Date: 2007/02/09 17:18:31 $ * $State: Exp $ */package javax.media.j3d;import java.util.*;/** * Class specifying a wakeup when the specified object * collides with any other object in the scene graph.   * */public final class WakeupOnCollisionEntry extends WakeupCriterion {  // different types of WakeupIndexedList that use in GeometryStructure    static final int COND_IN_GS_LIST = 0;    static final int COLLIDEENTRY_IN_BS_LIST = 1;    // total number of different IndexedUnorderedSet types    static final int TOTAL_INDEXED_UNORDER_SET_TYPES = 2;    /**     * Use geometry in computing collisions.     */    public static final int USE_GEOMETRY = 10;    /**     * Use geometric bounds as an approximation in computing collisions.     */    public static final int USE_BOUNDS = 11;    static final int GROUP = NodeRetained.GROUP;    static final int BOUNDINGLEAF = NodeRetained.BOUNDINGLEAF;    static final int SHAPE = NodeRetained.SHAPE;    static final int MORPH = NodeRetained.MORPH;    static final int ORIENTEDSHAPE3D = NodeRetained.ORIENTEDSHAPE3D;    static final int BOUND = 0;    /**     * Accuracy mode one of USE_GEOMETRY or USE_BOUNDS     */    int accuracyMode;    // Cached the arming Node being used when it is not BOUND    NodeRetained armingNode;    // A transformed Bounds of Group/Bounds, use by     // BOUND, GROUP    Bounds vwcBounds = null;    // Use by BoundingLeaf, point to mirror BoundingLeaf    // transformedRegion under this leaf is used.    BoundingLeafRetained boundingLeaf = null;    /**     * Geometry atoms that this wakeup condition refer to.     * Only use by SHAPE, MORPH, GROUP, ORIENTEDSHAPE     */    UnorderList geometryAtoms = null;    // one of GROUP, BOUNDINGLEAF, SHAPE, MORPH, BOUND    int nodeType;    SceneGraphPath armingPath = null;    Bounds armingBounds = null;       // the following two references are set only after a collision    // has occurred    Bounds collidingBounds = null;    SceneGraphPath collidingPath = null;    /**     * Constructs a new WakeupOnCollisionEntry criterion with      * USE_BOUNDS for a speed hint.     * @param armingPath the path used to <em>arm</em> collision     * detection     * @exception IllegalArgumentException if object associated with the      * SceneGraphPath is other than a Group, Shape3D, Morph, or      * BoundingLeaf node.     */    public WakeupOnCollisionEntry(SceneGraphPath armingPath) {	this(armingPath, USE_BOUNDS);    }    /**     * Constructs a new WakeupOnCollisionEntry criterion.     * @param armingPath the path used to <em>arm</em> collision     * detection     * @param speedHint one of USE_GEOMETRY or USE_BOUNDS, specifies how     * accurately Java 3D will perform collision detection     * @exception IllegalArgumentException if hint is not one of     * USE_GEOMETRY or USE_BOUNDS.     * @exception IllegalArgumentException if object associated with the      * SceneGraphPath is other than a Group, Shape3D, Morph, or      * BoundingLeaf node.     */    public WakeupOnCollisionEntry(SceneGraphPath armingPath, 				  int speedHint) {	this(new SceneGraphPath(armingPath), speedHint, null);    }    /**     * Constructs a new WakeupOnCollisionEntry criterion.     * @param armingNode the Group, Shape, or Morph node used to     * <em>arm</em> collision detection     * @exception IllegalArgumentException if object is under a     * SharedGroup node or object is other than a Group, Shape3D,     * Morph or BoundingLeaf node.      */    public WakeupOnCollisionEntry(Node armingNode) {	this(armingNode, USE_BOUNDS);    }    /**     * Constructs a new WakeupOnCollisionEntry criterion.     * @param armingNode the Group, Shape, or Morph node used to     * <em>arm</em> collision detection     * @param speedHint one of USE_GEOMETRY or USE_BOUNDS, specifies how     * accurately Java 3D will perform collision detection     * @exception IllegalArgumentException if hint is not one of     * USE_GEOMETRY or USE_BOUNDS.     * @exception IllegalArgumentException if object is under a     * SharedGroup node or object is other than a Group, Shape3D,     * Morph or BoundingLeaf node.      */    public WakeupOnCollisionEntry(Node armingNode, int speedHint) {	this(new SceneGraphPath(null, armingNode), speedHint, null);    }    /**     * Constructs a new WakeupOnCollisionEntry criterion.     * @param armingBounds the bounds object used to <em>arm</em> collision     * detection     */    public WakeupOnCollisionEntry(Bounds armingBounds) {	this(null, USE_BOUNDS,  (Bounds) armingBounds.clone());    }    /**     * Constructs a new WakeupOnCollisionEntry criterion.     * @param armingPath the path used to <em>arm</em> collision     * detection     * @param speedHint one of USE_GEOMETRY or USE_BOUNDS, specifies how     * accurately Java 3D will perform collision detection     * @param armingBounds the bounds object used to <em>arm</em> collision     * detection     * @exception IllegalArgumentException if hint is not one of     * USE_GEOMETRY or USE_BOUNDS.     * @exception IllegalArgumentException if object associated with the      * SceneGraphPath is other than a Group, Shape3D, Morph, or      * BoundingLeaf node.     */    WakeupOnCollisionEntry(SceneGraphPath armingPath, 			   int speedHint, Bounds armingBounds) {	if (armingPath != null) {	    this.armingNode = (NodeRetained) armingPath.getObject().retained;	    nodeType = getNodeType(armingNode, armingPath, 				   "WakeupOnCollisionEntry");  	    this.armingPath = armingPath;	    validateSpeedHint(speedHint, "WakeupOnCollisionEntry4");	} else {	    this.armingBounds = armingBounds;	    nodeType = BOUND;	}	accuracyMode = speedHint;	WakeupIndexedList.init(this, TOTAL_INDEXED_UNORDER_SET_TYPES);    }    /**     * Returns the path used in specifying the collision condition.     * @return the SceneGraphPath object generated when arming this     * criterion---null implies that a bounds object armed this criteria     */    public SceneGraphPath getArmingPath() {	return (armingPath != null ? 		new SceneGraphPath(armingPath) : null);    }    /**     * Returns the bounds object used in specifying the collision condition.     * @return the Bounds object generated when arming this     * criterion---null implies that a SceneGraphPath armed this criteria     */    public Bounds getArmingBounds() {	return (armingBounds != null ? 		(Bounds)armingBounds.clone() : null);    }    /**     * Retrieves the path describing the object causing the collision.     * @return the SceneGraphPath that describes the triggering object.     * @exception IllegalStateException if not called from within the     * a behavior's processStimulus method which was awoken by a collision.     */    public SceneGraphPath getTriggeringPath() {	if (behav == null) {	    throw new IllegalStateException(J3dI18N.getString("WakeupOnCollisionEntry5"));	}	synchronized (behav) {	    if (!behav.inCallback) {		throw new IllegalStateException		    (J3dI18N.getString("WakeupOnCollisionEntry5"));	    }	}	return (collidingPath != null ?		new SceneGraphPath(collidingPath): null);    }    /**     * Retrieves the Bounds object that caused the collision     * @return the colliding Bounds object.     * @exception IllegalStateException if not called from within the      * a behavior's processStimulus method which was awoken by a collision.     */    public Bounds getTriggeringBounds() {	if (behav == null) {	    throw new IllegalStateException(J3dI18N.getString("WakeupOnCollisionEntry6"));	}	synchronized (behav) {	    if (!behav.inCallback) {		throw new IllegalStateException		    (J3dI18N.getString("WakeupOnCollisionEntry6"));	    }	}	return (collidingBounds != null ?		(Bounds)(collidingBounds.clone()): null);    }    /**     * Node legality checker     * throw Exception if node is not legal.     * @return nodeType     */    static int getNodeType(NodeRetained armingNode, 			   SceneGraphPath armingPath, String s)	throws IllegalArgumentException {	// check if SceneGraphPath is unique 	// Note that graph may not live at this point so we	// can't use node.inSharedGroup.	if (!armingPath.validate()) {	    throw new IllegalArgumentException(J3dI18N.getString(s + "7"));	}	if (armingNode.inBackgroundGroup) {	    throw new IllegalArgumentException(J3dI18N.getString(s + "1"));	}		// This should come before Shape3DRetained check	if (armingNode instanceof OrientedShape3DRetained) {	    return ORIENTEDSHAPE3D;	}	if (armingNode instanceof Shape3DRetained) {	    return SHAPE;	}	if (armingNode instanceof MorphRetained) {	    return MORPH;	}	if (armingNode instanceof GroupRetained) {	    return GROUP;	}		if (armingNode instanceof BoundingLeafRetained) {	    return BOUNDINGLEAF;	}	throw new IllegalArgumentException(J3dI18N.getString(s + "0"));    }    /**     * speedHint legality checker     * throw Exception if speedHint is not legal     */    static void validateSpeedHint(int speedHint, String s) 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -