A
TinNode is one of the three basic elements of a TIN. Nodes store X, Y and Z values and optional tag values.

Access TIN Elements By Index
using (ArcGIS.Core.Data.Analyst3D.TinNode node = tinDataset.GetNodeByIndex(23))
{
}
using (ArcGIS.Core.Data.Analyst3D.TinEdge edge = tinDataset.GetEdgeByIndex(45))
{
}
using (ArcGIS.Core.Data.Analyst3D.TinTriangle triangle = tinDataset.GetTriangleByIndex(22))
{
}
Search for TIN Nodes
// search all nodes
using (ArcGIS.Core.Data.Analyst3D.TinNodeCursor nodeCursor = tinDataset.SearchNodes(null))
{
while (nodeCursor.MoveNext())
{
using (ArcGIS.Core.Data.Analyst3D.TinNode node = nodeCursor.Current)
{
}
}
}
// search within an extent
ArcGIS.Core.Data.Analyst3D.TinNodeFilter nodeFilter = new ArcGIS.Core.Data.Analyst3D.TinNodeFilter();
nodeFilter.FilterEnvelope = envelope;
using (ArcGIS.Core.Data.Analyst3D.TinNodeCursor nodeCursor = tinDataset.SearchNodes(nodeFilter))
{
while (nodeCursor.MoveNext())
{
using (ArcGIS.Core.Data.Analyst3D.TinNode node = nodeCursor.Current)
{
}
}
}
// search all "inside" nodes
nodeFilter = new ArcGIS.Core.Data.Analyst3D.TinNodeFilter();
nodeFilter.FilterType = ArcGIS.Core.Data.Analyst3D.TinFilterType.InsideDataArea;
using (ArcGIS.Core.Data.Analyst3D.TinNodeCursor nodeCursor = tinDataset.SearchNodes(nodeFilter))
{
while (nodeCursor.MoveNext())
{
using (ArcGIS.Core.Data.Analyst3D.TinNode node = nodeCursor.Current)
{
}
}
}
// search for super nodes only
nodeFilter = new ArcGIS.Core.Data.Analyst3D.TinNodeFilter();
nodeFilter.FilterEnvelope = tinDataset.GetSuperNodeExtent();
nodeFilter.SuperNode = true;
using (ArcGIS.Core.Data.Analyst3D.TinNodeCursor nodeCursor = tinDataset.SearchNodes(nodeFilter))
{
while (nodeCursor.MoveNext())
{
using (ArcGIS.Core.Data.Analyst3D.TinNode node = nodeCursor.Current)
{
}
}
}
TIN Nodes
// node coordinates
var coord3D = node.Coordinate3D;
var mapPoint = node.ToMapPoint();
// is the node "inside"
var isInsideNode = node.IsInsideDataArea;
// get all other nodes connected to "node"
IReadOnlyList<ArcGIS.Core.Data.Analyst3D.TinNode> adjNodes = node.GetAdjacentNodes();
// get all edges that share "node" as a from node.
IReadOnlyList<ArcGIS.Core.Data.Analyst3D.TinEdge> edges = node.GetIncidentEdges();
// get all triangles that share "node"
IReadOnlyList<ArcGIS.Core.Data.Analyst3D.TinTriangle> triangles = node.GetIncidentTriangles();
Seach for TIN Nodes, Edges, Triangles
// search all "inside" nodes
using (ArcGIS.Core.Data.Analyst3D.TinNodeCursor nodeCursor = tinLayer.SearchNodes(null))
{
while (nodeCursor.MoveNext())
{
using (ArcGIS.Core.Data.Analyst3D.TinNode node = nodeCursor.Current)
{
}
}
}
// search "inside" nodes with an extent
ArcGIS.Core.Data.Analyst3D.TinNodeFilter nodeFilter = new ArcGIS.Core.Data.Analyst3D.TinNodeFilter();
nodeFilter.FilterEnvelope = envelope;
using (ArcGIS.Core.Data.Analyst3D.TinNodeCursor nodeCursor = tinLayer.SearchNodes(nodeFilter))
{
while (nodeCursor.MoveNext())
{
using (ArcGIS.Core.Data.Analyst3D.TinNode node = nodeCursor.Current)
{
}
}
}
// search for super nodes only
var supernodeFilter = new ArcGIS.Core.Data.Analyst3D.TinNodeFilter();
supernodeFilter.FilterEnvelope = tinDataset.GetSuperNodeExtent();
supernodeFilter.DataElementsOnly = false;
supernodeFilter.SuperNode = true;
using (ArcGIS.Core.Data.Analyst3D.TinNodeCursor nodeCursor = tinLayer.SearchNodes(nodeFilter))
{
while (nodeCursor.MoveNext())
{
using (ArcGIS.Core.Data.Analyst3D.TinNode node = nodeCursor.Current)
{
}
}
}
// search all edges within an extent
// this could include outside or edges attached to super nodes depending upon the extent
ArcGIS.Core.Data.Analyst3D.TinEdgeFilter edgeFilterAll = new ArcGIS.Core.Data.Analyst3D.TinEdgeFilter();
edgeFilterAll.FilterEnvelope = envelope;
edgeFilterAll.DataElementsOnly = false;
using (ArcGIS.Core.Data.Analyst3D.TinEdgeCursor edgeCursor = tinLayer.SearchEdges(edgeFilterAll))
{
while (edgeCursor.MoveNext())
{
using (ArcGIS.Core.Data.Analyst3D.TinEdge edge = edgeCursor.Current)
{
}
}
}
// search for hard edges in the TIN
var edgeFilter = new ArcGIS.Core.Data.Analyst3D.TinEdgeFilter();
edgeFilter.FilterByEdgeType = true;
edgeFilter.EdgeType = ArcGIS.Core.Data.Analyst3D.TinEdgeType.HardEdge;
using (ArcGIS.Core.Data.Analyst3D.TinEdgeCursor edgeCursor = tinLayer.SearchEdges(edgeFilter))
{
while (edgeCursor.MoveNext())
{
using (ArcGIS.Core.Data.Analyst3D.TinEdge edge = edgeCursor.Current)
{
}
}
}
// search for "inside" triangles in an extent
ArcGIS.Core.Data.Analyst3D.TinTriangleFilter triangleFilter = new ArcGIS.Core.Data.Analyst3D.TinTriangleFilter();
triangleFilter.FilterEnvelope = envelope;
triangleFilter.DataElementsOnly = true;
using (ArcGIS.Core.Data.Analyst3D.TinTriangleCursor triangleCursor = tinLayer.SearchTriangles(triangleFilter))
{
while (triangleCursor.MoveNext())
{
using (ArcGIS.Core.Data.Analyst3D.TinTriangle triangle = triangleCursor.Current)
{
}
}
}
Target Platforms: Windows 11, Windows 10
ArcGIS Pro version: 3.2 or higher.