FC_DistanceQuery – Allgemeine Informationen

Überblick

Typ:

Funktion

Verfügbar ab:

V1.0.0.0

Versionen:

Aktuelle Version

Dieses Kapitel enthält Informationen zu folgenden Aspekten:

Beschreibung

Für diese Funktion ist eine Kombination aus Kollisionsobjekten, -gruppen oder einheiten als Eingänge erforderlich.

Daraufhin gibt die Funktion Folgendes zurück:

  • Der Mindestabstand zwischen den Eingängen.

  • Wenn i_xEvaluateClosestPoints auf TRUE gesetzt wird, ermittelt die Funktion die nächstliegenden Punkte zwischen den zwei Eingängen.

Schnittstelle

Eingang

Datentyp

Beschreibung

i_ifQueryInterface1

IF_CollisionQueryInterface

Eine erste Objektimplementierung IF_CollisionQueryInterface. Hierbei kann es sich um ein Kollisionsobjekt, eine Kollisionsgruppe oder eine Kollisionseinheit handeln.

i_ifQueryInterface2

IF_CollisionQueryInterface

Eine zweite Objektimplementierung IF_CollisionQueryInterface. Hierbei kann es sich um ein Kollisionsobjekt, eine Kollisionsgruppe oder eine Kollisionseinheit handeln.

i_xEvaluateClosestPoints

BOOL

Wenn TRUE, dann werden die nächstliegenden Punkte zwischen den zwei Eingänge ermittelt.

Ausgang

Datentyp

Beschreibung

q_xError

BOOL

Der Ausgang wird auf TRUE gesetzt, wenn bei der Ausführung ein Fehler erkannt wurde.

q_etResult

ET_Result

POU-spezifischer Ausgang der Diagnose. q_xError = FALSE -> Statusmeldung. q_xError = TRUE -> Diagnosemeldung.

q_sResultMsg

String

Ereignisabhängige Meldung, die zusätzliche Informationen über den Diagnosezustand gibt.

q_xCollision

BOOL

TRUE, wenn zwischen den zwei Eingängen eine Kollision erkannt wird.

q_lrDistance

LREAL

Der Mindestabstand zwischen den zwei Eingängen. Er beträgt null, wenn q_xCollision = TRUE.

q_udiCollisionGroupIndex1

UDINT

Index der kollidierenden Gruppe von i_ifQueryInterface1.

Dies ist ein Nullwert, wenn i_ifQueryInterface1 auf ein Kollisionsobjekt oder eine Kollisionsgruppe verweist.

q_udiCollisionObjectIndex1

UDINT

Index des nächstliegenden Objekts in der Gruppe mit dem Index q_udiCollisionGroupIndex1 von i_ifQueryInterface1.

Dies ist ein Nullwert wenn i_ifQueryInterface1 auf ein Kollisionsobjekt verweist.

q_udiCollisionGroupIndex2

UDINT

Index der nächstliegenden Gruppe von i_ifQueryInterface2.

Dies ist ein Nullwert, wenn i_ifQueryInterface2 auf ein Kollisionsobjekt oder eine Kollisionsgruppe verweist.

q_udiCollisionObjectIndex2

UDINT

Index des nächstliegenden Objekts in der Gruppe mit dem Index q_udiCollisionGroupIndex2 von i_ifQueryInterface2. Dies ist ein Nullwert, wenn i_ifQueryInterface2 auf ein Kollisionsobjekt verweist.

q_stClosestPoint1

SE_Math.ST_Vector3D

Nächstliegender Punkt für i_ifQueryInterface1.

Dies wird nur ermittelt, wenn i_xEvaluateClosestPoint = TRUE. Andernfalls wird ein Nullvektor zurückgegeben.

Diagnosemeldungen

q_xError

q_etResult

Enumerationswert

Beschreibung

FALSE

OK

0

Erfolg

TRUE

NoCollisionGroupsEnabled

36

Keine Kollisionsgruppen aktiviert.

TRUE

InterfaceInvalid

11

Die bereitgestellte Schnittstelle ist ungültig (null).

TRUE

CollisionEntityNotUpdated

34

Die Kollisionseinheit wurde nicht aktualisiert.

TRUE

CollisionGroupNotUpdated

21

Eine Kollisionsgruppe wurde nicht aktualisiert.

TRUE

CollisionObjectTypeInvalid

16

Der angegebene Typ des Kollisionsobjekts ist ungültig.

TRUE

CollisionObjectNotConfigured

12

Das Objekt ist nicht konfiguriert.

TRUE

CollisionQueryInterfaceTypeInvalid

52

Die bereitgestellte Schnittstelle für Kollisionsabfragen bezieht sich auf einen ungültigen Typ.

OK

Enumerationsname:

Ok

Enumerationswert:

0

Beschreibung:

Erfolg

NoCollisionGroupsEnabled

Enumerationsname:

NoCollisionGroupsEnabled

Enumerationswert:

36

Beschreibung:

Keine Kollisionsgruppen aktiviert.

Problem

Ursache

Lösung

Es kann keine Kollisionsabfrage durchgeführt werden.

i_ifQueryInterface1 verweist auf eine Kollisionseinheit. Alle konfigurierten Kollisionsgruppen der betroffenen Einheit sind deaktiviert, d. h. alle relativen Elemente von raxEnableCollisionGroups werden auf FALSE gesetzt.

Aktivieren Sie die Gruppen der Einheit, die auf Kollisionen abgefragt werden soll.

i_ifQueryInterface2 verweist auf eine Kollisionseinheit. Alle konfigurierten Kollisionsgruppen der betroffenen Einheit sind deaktiviert, d. h. alle relativen Elemente von raxEnableCollisionGroups werden auf FALSE gesetzt.

Aktivieren Sie die Gruppen der Einheit, die auf Kollisionen abgefragt werden soll.

InterfaceInvalid

Enumerationsname:

InterfaceInvalid

Enumerationswert:

11

Beschreibung:

Die bereitgestellte Schnittstelle ist ungültig (null).

Problem

Ursache

Lösung

Es kann keine Kollisionsabfrage durchgeführt werden.

i_ifQueryInterface1 enthält eine ungültige Schnittstelle.

Stellen Sie sicher, dass i_ifQueryInterface1 nicht null ist.

i_ifQueryInterface2 enthält eine ungültige Schnittstelle.

Stellen Sie sicher, dass i_ifQueryInterface2 nicht null ist.

CollisionEntityNotUpdated

Enumerationsname:

CollisionEntityNotUpdated

Enumerationswert:

34

Beschreibung:

Die Kollisionseinheit wurde nicht aktualisiert.

Problem

Ursache

Lösung

Es kann keine Kollisionsabfrage durchgeführt werden.

i_ifQueryInterface1 verweist auf eine Kollisionseinheit, die nicht aktualisiert wurde, d. h. ihre Eigenschaft xUpdated = FALSE.

Stellen Sie sicher, dass die Einheit aktualisiert wurde, bevor Sie sie als Eingang dieser Funktion bereitstellen.

i_ifQueryInterface2 verweist auf eine Kollisionseinheit, die nicht aktualisiert wurde, d. h. ihre Eigenschaft xUpdated = FALSE.

Stellen Sie sicher, dass die Einheit aktualisiert wurde, bevor Sie sie als Eingang dieser Funktion bereitstellen.

CollisionGroupNotUpdated

Enumerationsname:

CollisionGroupNotUpdated

Enumerationswert:

21

Beschreibung:

Eine Kollisionsgruppe wurde nicht aktualisiert.

Problem

Ursache

Lösung

Es kann keine Kollisionsabfrage durchgeführt werden.

i_ifQueryInterface1 verweist auf eine Kollisionsgruppe, die nicht aktualisiert wurde, d. h. ihre Eigenschaft xUpdated = FALSE.

Stellen Sie sicher, dass die Gruppe aktualisiert wurde, bevor Sie sie als Eingang dieser Funktion bereitstellen.

i_ifQueryInterface2 verweist auf eine Kollisionsgruppe, die nicht aktualisiert wurde, d. h. ihre Eigenschaft xUpdated = FALSE.

Stellen Sie sicher, dass die Gruppe aktualisiert wurde, bevor Sie sie als Eingang dieser Funktion bereitstellen.

CollisionObjectTypeInvalid

Enumerationsname:

CollisionObjectTypeInvalid

Enumerationswert:

16

Beschreibung:

Der angegebene Typ des Kollisionsobjekts ist ungültig.

Problem

Ursache

Lösung

Es kann keine Kollisionsabfrage durchgeführt werden.

i_ifQueryInterface1 verweist auf ein Kollisionsobjekt mit einem ungültigen Kollisionsobjekttyp.

Stellen Sie sicher, dass i_ifQueryInterface1 auf ein Kollisionsobjekt mit einem gültigen Kollisionsobjekttyp verweist.

Gültige Typen:

  • ET_CollisionObjectType.AABB

  • ET_CollisionObjectType.OBB

  • ET_CollisionObjectType.Sphere

  • ET_CollisionObjectType.Capsule

i_ifQueryInterface2 verweist auf ein Kollisionsobjekt mit einem ungültigen Kollisionsobjekttyp.

Stellen Sie sicher, dass i_ifQueryInterface2 auf ein Kollisionsobjekt mit einem gültigen Kollisionsobjekttyp verweist.

Gültige Typen:

  • ET_CollisionObjectType.AABB

  • ET_CollisionObjectType.OBB

  • ET_CollisionObjectType.Sphere

  • ET_CollisionObjectType.Capsule

CollisionObjectNotConfigured

Enumerationsname:

CollisionObjectNotConfigured

Enumerationswert:

12

Beschreibung:

Das Objekt ist nicht konfiguriert.

Problem

Ursache

Lösung

Es kann keine Kollisionsabfrage durchgeführt werden.

i_ifQueryInterface1 verweist auf ein Kollisionsobjekt, das nicht aktualisiert wurde, d. h. seine Eigenschaft xConfigured = FALSE.

Stellen Sie sicher, dass ein Objekt aktualisiert wurde, bevor Sie es als Eingang dieser Funktion bereitstellen.

i_ifQueryInterface2 verweist auf ein Kollisionsobjekt, das nicht aktualisiert wurde, d. h. seine Eigenschaft xConfigured = FALSE

Stellen Sie sicher, dass ein Objekt aktualisiert wurde, bevor Sie es als Eingang dieser Funktion bereitstellen.

CollisionQueryInterfaceTypeInvalid

Enumerationsname:

CollisionQueryInterfaceTypeInvalid

Enumerationswert:

52

Beschreibung:

Die bereitgestellte Schnittstelle für Kollisionsabfragen bezieht sich auf einen ungültigen Typ.

Problem

Ursache

Lösung

Es kann keine Kollisionsabfrage durchgeführt werden.

i_ifQueryInterface1 verweist auf einen ungültigen Objekttyp.

Stellen Sie sicher, dass i_ifQueryInterface1 auf ein Kollisionsobjekt oder eine Kollisionsgruppe bzw. -einheit verweist.

i_ifQueryInterface2 verweist auf einen ungültigen Objekttyp.

Stellen Sie sicher, dass i_ifQueryInterface2 auf ein Kollisionsobjekt oder eine Kollisionsgruppe bzw. -einheit verweist.

Beispiele

Beispiel für eine Abstandsabfrage zwischen i_ifQueryInterface1 (Objekt) und i_ifQueryInterface2 (Gruppe). In diesem Fall ist q_udiCollisionObjectIndex2 = 4, das entspricht dem Index des nächstliegenden Objekts in der Gruppe:

Beispiel für eine Abstandsabfrage zwischen i_ifQueryInterface1 (Einheit) und i_ifQueryInterface2 (Objekt). In diesem Fall ist q_udiCollisionGroupIndex1 = 1 und q_udiCollisionObjectIndex1 = 1, da sich das nächstliegende Objekt in der Einheit in Gruppe 1 befindet und Index 1 aufweist:

Beispiel für eine Abstandsabfrage zwischen i_ifQueryInterface1 (Einheit) und i_ifQueryInterface2 (Einheit). In diesem Fall ist q_udiCollisionGroupIndex1 = 2 und q_udiCollisionObjectIndex1 = 3 für die erste Einheit und q_udiCollisionGroupIndex2 = 1 und q_udiCollisionObjectIndex2 = 2 für die zweite Einheit.