construction
Class Plane

java.lang.Object
  extended byjavax.media.j3d.SceneGraphObject
      extended byjavax.media.j3d.Node
          extended byjavax.media.j3d.Leaf
              extended byjavax.media.j3d.Shape3D
                  extended byconstruction.Plane

public class Plane
extends javax.media.j3d.Shape3D

Eine Plane ist eine durch Eckpunkte begrenzte, ebene Fläche im Raum. Sie kann mit anderen Flächen so verbunden werden, dass die Schnittmenge der beiden Flächen herausgeschnitten wird.

Dieses Objekt weisst eine wichtige Besonderheit auf:
Bei jeder Änderung, welche die Plane an der Geometrie des Objektes vornimmt, wird das Geometry Objekt komplett neu erstellt. D.h. alle Änderungen an der Geometrie, welche nicht von der Plane selbst durchgeführt werden, gehen verloren.
Dies betrifft unter anderem auch das Setzen der Capabilities der Geometrie. D.h., wenn zum Beispiel eine Plane mit einer anderen Plane verbunden wird, nachdem die Capabilities der Geometrie gesetzt wurden, so sind nach dem Verbinden alle Capabilities wieder gelöscht.

Folgende Methoden der Plane erstellen die Geometrie neu (neben dem Konstruktor): Die Plane ermöglicht jedoch die Registrierung von EventListeners, die direkt nach einer Neuerstellung der Geometrie, aber noch vor deren Einfügen in das Shape3D Objekt, aufgerufen werden. So dass hier die Änderungen an der Geometrie durchgeführt werden können, die erhalten bleiben sollen.

Version:
1.0 (2005/01/31)
Author:
Martin Hedler

Field Summary
static int CROSSING
          Die Planes liegen in verschiedenen Ebenen und schneiden sich.
static int EQUAL
          Die Planes sind identisch.
static int IN
          Überprüfte Plane ist innerhalb.
static int INCLUDING
          Überprüfte Plane enthält diese Plane.
static int INTERSECTED
          Die Planes liegen in der selben Ebene und überschneiden/überlagern sich.
static int OUT
          Überprüfte Plane ist ausserhalb.
static int SAME_DIRECTION
          Die Normalen der Planes haben die selbe Richtung
 
Fields inherited from class javax.media.j3d.Shape3D
ALLOW_APPEARANCE_OVERRIDE_READ, ALLOW_APPEARANCE_OVERRIDE_WRITE, ALLOW_APPEARANCE_READ, ALLOW_APPEARANCE_WRITE, ALLOW_COLLISION_BOUNDS_READ, ALLOW_COLLISION_BOUNDS_WRITE, ALLOW_GEOMETRY_READ, ALLOW_GEOMETRY_WRITE
 
Fields inherited from class javax.media.j3d.Node
ALLOW_AUTO_COMPUTE_BOUNDS_READ, ALLOW_AUTO_COMPUTE_BOUNDS_WRITE, ALLOW_BOUNDS_READ, ALLOW_BOUNDS_WRITE, ALLOW_COLLIDABLE_READ, ALLOW_COLLIDABLE_WRITE, ALLOW_LOCAL_TO_VWORLD_READ, ALLOW_PICKABLE_READ, ALLOW_PICKABLE_WRITE, ENABLE_COLLISION_REPORTING, ENABLE_PICK_REPORTING
 
Constructor Summary
Plane(javax.vecmath.Point3f[] point)
          Erzeugt eine Plane mit den angegebenen Punkten.
 
Method Summary
 void addPlaneListener(PlaneListener listener)
          Registriert einen PlaneListener.
 javax.media.j3d.Node cloneNode(boolean forceDuplicate)
           
 void duplicateNode(javax.media.j3d.Node node, boolean forceDuplicate)
           
 void getNormal(javax.vecmath.Vector3f normal)
          Gibt die Flächennormale der Plane zurück.
 void getPoint(int index, javax.vecmath.Point3f point)
          Gibt einen Eckpunkt der Plane zurück.
 int getState(Plane other, javax.media.j3d.Transform3D otherTrans)
          Gibt zurück, in welchem Verhältnis die zu überprüfende Plane zu dieser Plane steht.
 int isPointIn(javax.vecmath.Point3f point)
          Ermittelt, ob sich der übergebene Punkt innerhalb der Plane befindet.
 int numPoints()
          Gibt die Anzahl der Eckpunkte zurück aus denen die Plane besteht.
 void removePlaneListener(PlaneListener listener)
          Löscht einen PlaneLister, so dass er keine Ereignise mehr entfängt.
 boolean subIntersection(Plane other, javax.media.j3d.Transform3D otherTrans)
          Schneidet aus beiden Planes den Durschnitt heraus.
 
Methods inherited from class javax.media.j3d.Shape3D
addGeometry, getAllGeometries, getAppearance, getAppearanceOverrideEnable, getBounds, getCollisionBounds, getGeometry, getGeometry, indexOfGeometry, insertGeometry, intersect, intersect, intersect, numGeometries, removeAllGeometries, removeGeometry, removeGeometry, setAppearance, setAppearanceOverrideEnable, setCollisionBounds, setGeometry, setGeometry
 
Methods inherited from class javax.media.j3d.Node
cloneTree, cloneTree, cloneTree, cloneTree, cloneTree, cloneTree, getBoundsAutoCompute, getCollidable, getLocalToVworld, getLocalToVworld, getParent, getPickable, setBounds, setBoundsAutoCompute, setCollidable, setPickable
 
Methods inherited from class javax.media.j3d.SceneGraphObject
clearCapability, clearCapabilityIsFrequent, getCapability, getCapabilityIsFrequent, getUserData, isCompiled, isLive, setCapability, setCapabilityIsFrequent, setUserData, updateNodeReferences
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

IN

public static final int IN
Überprüfte Plane ist innerhalb.

See Also:
Constant Field Values

INCLUDING

public static final int INCLUDING
Überprüfte Plane enthält diese Plane.

See Also:
Constant Field Values

EQUAL

public static final int EQUAL
Die Planes sind identisch.

See Also:
Constant Field Values

INTERSECTED

public static final int INTERSECTED
Die Planes liegen in der selben Ebene und überschneiden/überlagern sich.

See Also:
Constant Field Values

CROSSING

public static final int CROSSING
Die Planes liegen in verschiedenen Ebenen und schneiden sich.

See Also:
Constant Field Values

SAME_DIRECTION

public static final int SAME_DIRECTION
Die Normalen der Planes haben die selbe Richtung

See Also:
Constant Field Values

OUT

public static final int OUT
Überprüfte Plane ist ausserhalb.

See Also:
Constant Field Values
Constructor Detail

Plane

public Plane(javax.vecmath.Point3f[] point)
      throws java.lang.IllegalArgumentException
Erzeugt eine Plane mit den angegebenen Punkten.

Parameters:
point - Punkte, welche die Fläche beschreiben.
Throws:
java.lang.IllegalArgumentException - IllegalArgumentException Wenn die übergebene Punktliste fehlerhaft ist. Die Punktliste ist dann fehlerhaft, wenn: .
Method Detail

getPoint

public void getPoint(int index,
                     javax.vecmath.Point3f point)
              throws java.lang.IllegalStateException,
                     java.lang.IndexOutOfBoundsException
Gibt einen Eckpunkt der Plane zurück.

Parameters:
index - Index des gewünschten Punktes.
point - Wird mit den Werten des Punktes belegt.
Throws:
java.lang.IndexOutOfBoundsException - Wenn der Index ausserhalb des zulässigen Bereichs ist.
java.lang.IllegalStateException
See Also:
Plane(Point3f[])

numPoints

public int numPoints()
Gibt die Anzahl der Eckpunkte zurück aus denen die Plane besteht.

Returns:
Die Anzahl der Eckpunkte.
See Also:
Plane(Point3f[])

subIntersection

public boolean subIntersection(Plane other,
                               javax.media.j3d.Transform3D otherTrans)
                        throws java.lang.IllegalArgumentException,
                               javax.media.j3d.CapabilityNotSetException,
                               javax.media.j3d.SceneGraphCycleException
Schneidet aus beiden Planes den Durschnitt heraus. Dies ist nur möglich, wenn die Planes in der selben Ebene liegen, sich gegenseitig überlagern und die Normalen der beiden in engegengesetzte Richtungen zeigen. Die sich überlagernden Teile der beiden Planes werden herausgeschnitten.

Parameters:
other - Die Plane, mit der die Operation durchgefürt werden soll.
otherTrans - Transformation, um other in das lokale Koordinatensystem von this zu transformieren.
Returns:
true, wenn die Operation erfolgreich war, sonst false.
Throws:
javax.media.j3d.CapabilityNotSetException - Wenn die Plane Teil eines lebenden Szenegraphen ist und folgende Capabilities nicht gesetzt sind:
  • Node.ALLOW_BOUNDS_READ
  • Shape3D.ALLOW_GEOMETRY_WRITE
javax.media.j3d.SceneGraphCycleException - Wenn die Plane Teil eines zyklisch geschlossenen Szenegraph ist.
java.lang.IllegalArgumentException - Wenn das Planeobjekt selbst übergeben wurde.
See Also:
Plane(Point3f[])

getState

public int getState(Plane other,
                    javax.media.j3d.Transform3D otherTrans)
             throws javax.media.j3d.CapabilityNotSetException,
                    javax.media.j3d.SceneGraphCycleException,
                    javax.media.j3d.RestrictedAccessException,
                    java.lang.IllegalArgumentException
Gibt zurück, in welchem Verhältnis die zu überprüfende Plane zu dieser Plane steht.

Parameters:
other - Die Plane, die überprüft werden soll.
otherTrans - Transformation, um other in das lokale Koordinatensystem von this zu transformieren.
Returns:
Folgende Bits können gesetzt sein:
  • IN, wenn other komplett in this liegt.
  • INCLUDING, wenn this in other liegt.
  • EQUAL, wenn die beiden Planes genau aufeinander liegen.
  • CROSSING, wenn die beiden Planes in verschiedenen Ebenen liegen und sich schneiden.
  • INTERSECTED, wenn die Planes in der selben Ebene liegen und sich teilweise überlagern.
Wenn die Planes in keinem Kontakt zueinander stehen, ist kein Bit gesetzt, es wird also 0 zurückgegeben.
Throws:
javax.media.j3d.CapabilityNotSetException - Wenn die Plane Teil eines lebenden Szenegraphen ist und folgende Capabilities nicht gesetzt sind:
  • Node.ALLOW_BOUNDS_READ
javax.media.j3d.SceneGraphCycleException - Wenn sich die Plane in einem zyklisch geschlossenen Szenegraph befindet.
javax.media.j3d.RestrictedAccessException - Wenn die Plane Teil eines kompilierten, aber nicht lebendigen Szenegraphen ist.
java.lang.IllegalArgumentException - Wenn die Plane selbst übergeben wurde.
See Also:
Plane(Point3f[])

isPointIn

public int isPointIn(javax.vecmath.Point3f point)
Ermittelt, ob sich der übergebene Punkt innerhalb der Plane befindet. Algorithmus nach Ralf Wiebicke.

Parameters:
point - Punkt in lokalen Koordinaten der Plane.
Returns:
EQUAL, wenn sich der Punkt auf einer Kante des Planepolygons befindet, IN, wenn sich der Punkt innerhalb der Plane befindet, sonst OUT.

getNormal

public void getNormal(javax.vecmath.Vector3f normal)
               throws java.lang.IllegalStateException
Gibt die Flächennormale der Plane zurück.

Parameters:
normal - Vektor, in den die Werte der Normalen geschrieben werden.
Throws:
java.lang.IllegalStateException
See Also:
Plane(Point3f[])

addPlaneListener

public void addPlaneListener(PlaneListener listener)
                      throws java.lang.NullPointerException
Registriert einen PlaneListener. Ein PlaneListener wird von der Plane aufgerufen, wenn ein definiertes Ereignis eintritt.

Parameters:
listener - Listener Objekt, welches bei der Plane registriert werden soll.
Throws:
java.lang.NullPointerException - Wenn null übergeben wurde.

removePlaneListener

public void removePlaneListener(PlaneListener listener)
                         throws java.lang.NullPointerException
Löscht einen PlaneLister, so dass er keine Ereignise mehr entfängt.

Parameters:
listener - Listener Objekt, welches gelöscht werden soll.
Throws:
java.lang.NullPointerException - Wenn null übergeben wurde.

cloneNode

public javax.media.j3d.Node cloneNode(boolean forceDuplicate)

duplicateNode

public void duplicateNode(javax.media.j3d.Node node,
                          boolean forceDuplicate)