A* Pathfinding Project  4.1.12
The A* Pathfinding Project for Unity 3D
TriangleMeshNode Class Reference

Node represented by a triangle. More...

Detailed Description

Node represented by a triangle.

Public Member Functions

 TriangleMeshNode (AstarPath astar)
 
override Vector3 ClosestPointOnNode (Vector3 p)
 Closest point on the surface of this node to the point p. More...
 
override Vector3 ClosestPointOnNodeXZ (Vector3 p)
 Closest point on the surface of this node when seen from above. More...
 
override bool ContainsPoint (Vector3 p)
 Checks if point is inside the node. More...
 
override bool ContainsPointInGraphSpace (Int3 p)
 Checks if point is inside the node in graph space. More...
 
override void DeserializeNode (GraphSerializationContext ctx)
 
override bool GetPortal (GraphNode toNode, System.Collections.Generic.List< Vector3 > left, System.Collections.Generic.List< Vector3 > right, bool backwards)
 
bool GetPortal (GraphNode toNode, System.Collections.Generic.List< Vector3 > left, System.Collections.Generic.List< Vector3 > right, bool backwards, out int aIndex, out int bIndex)
 
override Int3 GetVertex (int i)
 Get a vertex of this node. More...
 
int GetVertexArrayIndex (int i)
 Return a number specifying an index in the source vertex array. More...
 
override int GetVertexCount ()
 Number of corner vertices that this node has. More...
 
int GetVertexIndex (int i)
 Return a number identifying a vertex. More...
 
Int3 GetVertexInGraphSpace (int i)
 
void GetVertices (out Int3 v0, out Int3 v1, out Int3 v2)
 Returns all 3 vertices of this node in world space. More...
 
void GetVerticesInGraphSpace (out Int3 v0, out Int3 v1, out Int3 v2)
 Returns all 3 vertices of this node in graph space. More...
 
override void Open (Path path, PathNode pathNode, PathHandler handler)
 Open the node. More...
 
override Vector3 RandomPointOnSurface ()
 A random point on the surface of the node. More...
 
override void SerializeNode (GraphSerializationContext ctx)
 
int SharedEdge (GraphNode other)
 Returns the edge which is shared with other. More...
 
override float SurfaceArea ()
 
void UpdatePositionFromVertices ()
 Set the position of this node to the average of its 3 vertices. More...
 
override void UpdateRecursiveG (Path path, PathNode pathNode, PathHandler handler)
 
- Public Member Functions inherited from MeshNode
override void AddConnection (GraphNode node, uint cost)
 Add a connection from this node to the specified node. More...
 
void AddConnection (GraphNode node, uint cost, int shapeEdge)
 Add a connection from this node to the specified node. More...
 
override void ClearConnections (bool alsoReverse)
 Remove all connections from this node. More...
 
override bool ContainsConnection (GraphNode node)
 Checks if this node has a connection to the specified node. More...
 
virtual bool ContainsPoint (Int3 point)
 Checks if point is inside the node. More...
 
override void DeserializeReferences (GraphSerializationContext ctx)
 Used to deserialize references to other nodes e.g connections. More...
 
override void FloodFill (Stack< GraphNode > stack, uint region)
 
override void GetConnections (System.Action< GraphNode > action)
 Calls the delegate with all connections from this node. More...
 
override int GetGizmoHashCode ()
 Hash code used for checking if the gizmos need to be updated. More...
 
override void RemoveConnection (GraphNode node)
 Removes any connection from this node to the specified node. More...
 
override void SerializeReferences (GraphSerializationContext ctx)
 Used to serialize references to other nodes e.g connections. More...
 
- Public Member Functions inherited from GraphNode
virtual bool GetPortal (GraphNode other, List< Vector3 > left, List< Vector3 > right, bool backwards)
 Add a portal from this node to the specified node. More...
 
virtual void RecalculateConnectionCosts ()
 Recalculates all connection costs from this node. More...
 

Static Public Member Functions

static INavmeshHolder GetNavmeshHolder (uint graphIndex)
 
static void SetNavmeshHolder (int graphIndex, INavmeshHolder graph)
 Sets the internal navmesh holder for a given graph index. More...
 

Public Attributes

int v0
 Internal vertex index for the first vertex. More...
 
int v1
 Internal vertex index for the second vertex. More...
 
int v2
 Internal vertex index for the third vertex. More...
 
- Public Attributes inherited from MeshNode
Connection [] connections
 All connections from this node. More...
 
- Public Attributes inherited from GraphNode
const uint MaxAreaIndex = FlagsAreaMask >> FlagsAreaOffset
 
const uint MaxGraphIndex = FlagsGraphMask >> FlagsGraphOffset
 Max number of graphs-1. More...
 
Int3 position
 Position of the node in world space. More...
 

Static Protected Attributes

static INavmeshHolder [] _navmeshHolders = new INavmeshHolder[0]
 Holds INavmeshHolder references for all graph indices to be able to access them in a performant manner. More...
 
static readonly System.Object lockObject = new System.Object()
 Used for synchronised access to the _navmeshHolders array. More...
 

Package Functions

Int3 ClosestPointOnNodeXZInGraphSpace (Vector3 p)
 Closest point on the node when seen from above. More...
 
- Package Functions inherited from GraphNode
void Destroy ()
 Destroys the node. More...
 

Additional Inherited Members

- Protected Member Functions inherited from MeshNode
 MeshNode (AstarPath astar)
 
- Protected Member Functions inherited from GraphNode
 GraphNode (AstarPath astar)
 Constructor for a graph node. More...
 
- Protected Attributes inherited from GraphNode
uint flags
 Bitpacked field holding several pieces of data. More...
 
- Properties inherited from GraphNode
uint Area [get, set]
 Connected component that contains the node. More...
 
bool Destroyed [get]
 
uint Flags [get, set]
 Holds various bitpacked variables. More...
 
NavGraph Graph [get]
 Graph which this node belongs to. More...
 
uint GraphIndex [get, set]
 Graph which contains this node. More...
 
int NodeIndex [get, private set]
 Internal unique index. More...
 
uint Penalty [get, set]
 Penalty cost for walking on this node. More...
 
uint Tag [get, set]
 Node tag. More...
 
bool TemporaryFlag1 [get, set]
 Temporary flag for internal purposes. More...
 
bool TemporaryFlag2 [get, set]
 Temporary flag for internal purposes. More...
 
bool Walkable [get, set]
 True if the node is traversable. More...
 

Constructor & Destructor Documentation

◆ TriangleMeshNode()

Member Function Documentation

◆ ClosestPointOnNode()

override Vector3 ClosestPointOnNode ( Vector3  p)
virtual

Closest point on the surface of this node to the point p.

Implements MeshNode.

◆ ClosestPointOnNodeXZ()

override Vector3 ClosestPointOnNodeXZ ( Vector3  p)
virtual

Closest point on the surface of this node when seen from above.

This is usually very similar to ClosestPointOnNode but when the node is in a slope this can be significantly different.

When the blue point in the above image is used as an argument this method call will return the green point while the ClosestPointOnNode method will return the red point.

Implements MeshNode.

◆ ClosestPointOnNodeXZInGraphSpace()

Int3 ClosestPointOnNodeXZInGraphSpace ( Vector3  p)
package

Closest point on the node when seen from above.

This method is mostly for internal use as the Pathfinding.NavmeshBase.Linecast methods use it.

  • The returned point is the closest one on the node to p when seen from above (relative to the graph). This is important mostly for sloped surfaces.
  • The returned point is an Int3 point in graph space.
  • It is guaranteed to be inside the node, so if you call ContainsPointInGraphSpace with the return value from this method the result is guaranteed to be true.

This method is slower than e.g ClosestPointOnNode or ClosestPointOnNodeXZ. However they do not have the same guarantees as this method has.

◆ ContainsPoint()

override bool ContainsPoint ( Vector3  point)
virtual

Checks if point is inside the node.

Note that ContainsPointInGraphSpace is faster than this method as it avoids some coordinate transformations. If you are repeatedly calling this method on many different nodes but with the same point then you should consider transforming the point first and then calling ContainsPointInGraphSpace.

Int3 p = (Int3)graph.transform.InverseTransform(point);
node.ContainsPointInGraphSpace(p);

Implements MeshNode.

◆ ContainsPointInGraphSpace()

override bool ContainsPointInGraphSpace ( Int3  point)
virtual

Checks if point is inside the node in graph space.

In graph space the up direction is always the Y axis so in principle we project the triangle down on the XZ plane and check if the point is inside the 2D triangle there.

Implements MeshNode.

◆ DeserializeNode()

override void DeserializeNode ( GraphSerializationContext  ctx)
virtual

Reimplemented from GraphNode.

◆ GetNavmeshHolder()

static INavmeshHolder GetNavmeshHolder ( uint  graphIndex)
static

◆ GetPortal() [1/2]

override bool GetPortal ( GraphNode  toNode,
System.Collections.Generic.List< Vector3 >  left,
System.Collections.Generic.List< Vector3 >  right,
bool  backwards 
)

◆ GetPortal() [2/2]

bool GetPortal ( GraphNode  toNode,
System.Collections.Generic.List< Vector3 >  left,
System.Collections.Generic.List< Vector3 >  right,
bool  backwards,
out int  aIndex,
out int  bIndex 
)

◆ GetVertex()

override Int3 GetVertex ( int  i)
virtual

Get a vertex of this node.

Parameters
ivertex index. Must be between 0 and GetVertexCount (exclusive).

Implements MeshNode.

◆ GetVertexArrayIndex()

int GetVertexArrayIndex ( int  i)

Return a number specifying an index in the source vertex array.

The vertex array can for example be contained in a recast tile, or be a navmesh graph, that is graph dependant. This is slower than GetVertexIndex, if you only need to compare vertices, use GetVertexIndex.

◆ GetVertexCount()

override int GetVertexCount ( )
virtual

Number of corner vertices that this node has.

For example for a triangle node this will return 3.

Implements MeshNode.

◆ GetVertexIndex()

int GetVertexIndex ( int  i)

Return a number identifying a vertex.

This number does not necessarily need to be a index in an array but two different vertices (in the same graph) should not have the same vertex numbers.

◆ GetVertexInGraphSpace()

Int3 GetVertexInGraphSpace ( int  i)

◆ GetVertices()

void GetVertices ( out Int3  v0,
out Int3  v1,
out Int3  v2 
)

Returns all 3 vertices of this node in world space.

◆ GetVerticesInGraphSpace()

void GetVerticesInGraphSpace ( out Int3  v0,
out Int3  v1,
out Int3  v2 
)

Returns all 3 vertices of this node in graph space.

◆ Open()

override void Open ( Path  path,
PathNode  pathNode,
PathHandler  handler 
)
virtual

Open the node.

Implements GraphNode.

◆ RandomPointOnSurface()

override Vector3 RandomPointOnSurface ( )
virtual

A random point on the surface of the node.

For point nodes and other nodes which do not have a surface, this will always return the position of the node.

Reimplemented from GraphNode.

◆ SerializeNode()

override void SerializeNode ( GraphSerializationContext  ctx)
virtual

Reimplemented from GraphNode.

◆ SetNavmeshHolder()

static void SetNavmeshHolder ( int  graphIndex,
INavmeshHolder  graph 
)
static

Sets the internal navmesh holder for a given graph index.

Warning
Internal method

◆ SharedEdge()

int SharedEdge ( GraphNode  other)

Returns the edge which is shared with other.

If no edge is shared, -1 is returned. If there is a connection with the other node, but the connection is not marked as using a particular edge of the shape of the node then 0xFF will be returned.

The vertices in the edge can be retrieved using

var edge = node.SharedEdge(other);
var a = node.GetVertex(edge);
var b = node.GetVertex((edge+1) % node.GetVertexCount());
See also
GetPortal which also handles edges that are shared over tile borders and some types of node links

◆ SurfaceArea()

override float SurfaceArea ( )
virtual
Todo:
This is the area in XZ space, use full 3D space for higher correctness maybe?

Reimplemented from GraphNode.

◆ UpdatePositionFromVertices()

void UpdatePositionFromVertices ( )

Set the position of this node to the average of its 3 vertices.

◆ UpdateRecursiveG()

override void UpdateRecursiveG ( Path  path,
PathNode  pathNode,
PathHandler  handler 
)
virtual

Reimplemented from MeshNode.

Member Data Documentation

◆ _navmeshHolders

INavmeshHolder [] _navmeshHolders = new INavmeshHolder[0]
staticprotected

Holds INavmeshHolder references for all graph indices to be able to access them in a performant manner.

◆ lockObject

readonly System.Object lockObject = new System.Object()
staticprotected

Used for synchronised access to the _navmeshHolders array.

◆ v0

int v0

Internal vertex index for the first vertex.

◆ v1

int v1

Internal vertex index for the second vertex.

◆ v2

int v2

Internal vertex index for the third vertex.


The documentation for this class was generated from the following file: