ArcGIS Pro 3.3 API Reference Guide
ArcGIS.Core.Data.Analyst3D Namespace / TinTriangle Class
Members Example

In This Topic
    TinTriangle Class
    In This Topic
    A TinTriangle is one of the three basic elements of a TIN. Triangles are comprised of three TinNodes and TinEdges. Nodes and edges are oriented in clockwise direction.
    Object Model
    TinTriangle ClassMapPoint ClassEllipticArcSegment ClassCoordinate3D StructureCoordinate3D StructurePolygon Class
    Syntax
    public sealed class TinTriangle : TinElement, System.IDisposable  
    Public NotInheritable Class TinTriangle 
       Inherits TinElement
       Implements System.IDisposable 
    Example
    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 Triangles
    // search all triangles
    using (ArcGIS.Core.Data.Analyst3D.TinTriangleCursor triangleCursor = tinDataset.SearchTriangles(null))
    {
      while (triangleCursor.MoveNext())
      {
        using (ArcGIS.Core.Data.Analyst3D.TinTriangle triangle = triangleCursor.Current)
        {
    
        }
      }
    }
    
    // search within an extent
    ArcGIS.Core.Data.Analyst3D.TinTriangleFilter triangleFilter = new ArcGIS.Core.Data.Analyst3D.TinTriangleFilter();
    triangleFilter.FilterEnvelope = envelope;
    using (ArcGIS.Core.Data.Analyst3D.TinTriangleCursor triangleCursor = tinDataset.SearchTriangles(triangleFilter))
    {
      while (triangleCursor.MoveNext())
      {
        using (ArcGIS.Core.Data.Analyst3D.TinTriangle triangle = triangleCursor.Current)
        {
    
        }
      }
    }
    
    // search all "inside" triangles
    triangleFilter = new ArcGIS.Core.Data.Analyst3D.TinTriangleFilter();
    triangleFilter.FilterType = ArcGIS.Core.Data.Analyst3D.TinFilterType.InsideDataArea;
    using (ArcGIS.Core.Data.Analyst3D.TinTriangleCursor triangleCursor = tinDataset.SearchTriangles(triangleFilter))
    {
      while (triangleCursor.MoveNext())
      {
        using (ArcGIS.Core.Data.Analyst3D.TinTriangle triangle = triangleCursor.Current)
        {
    
        }
      }
    }
    
    TIN Triangles
    // nodes, edges of the triangle
    var triNnodes = triangle.Nodes;
    var triEdges = triangle.Edges;
    
    // triangle geometry
    var polygon = triangle.ToPolygon();
    // triangle length
    var triLength = triangle.Length;
    // triangle area 
    var triArea = triangle.Area;
    // is the triangle "inside"
    var isInsideTriangle = triangle.IsInsideDataArea;
    
    // triangle aspect and slope  (radians)
    var aspect = triangle.Aspect;
    var slope = triangle.Slope;
    
    // get centroid
    var centroid = triangle.GetCentroid();
    
    // get normal
    var normal = triangle.GetNormal();
    
    // get adjacent triangles
    var adjTriangles = triangle.GetAdjacentTriangles();
    
    // get area of triangle that falls between the z values
    double minZ = 1.0;
    double maxZ = 3.0;
    IReadOnlyList<Coordinate3D> coords = triangle.GetPointsBetweenZs(minZ, maxZ);
    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)
        {
        }
      }
    }
    Inheritance Hierarchy

    System.Object
       ArcGIS.Core.CoreObjectsBase
          ArcGIS.Core.Data.Analyst3D.TinElement
             ArcGIS.Core.Data.Analyst3D.TinTriangle

    Requirements

    Target Platforms: Windows 11, Windows 10

    ArcGIS Pro version: 3.2 or higher.
    See Also