ArcGIS Pro 3.7 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 NotInheritable Class TinTriangle 
       Inherits TinElement
       Implements System.IDisposable 
    public sealed class TinTriangle : TinElement, System.IDisposable  
    Example
    Access TIN Elements By Index
    {
      using (ArcGIS.Core.Data.Analyst3D.TinNode nodeFromIndex = tinDataset.GetNodeByIndex(23))
      {
        //Do something with the node
      }
    
      using (ArcGIS.Core.Data.Analyst3D.TinEdge edgeFromIndex = tinDataset.GetEdgeByIndex(45))
      {
        //Do something with the edge
      }
      using (ArcGIS.Core.Data.Analyst3D.TinTriangle triangleFromIndex = tinDataset.GetTriangleByIndex(22))
      {
        //Do something with the triangle
      }
    }
    Search for TIN Triangles
    {
      // search all triangles that intersect the data extent
      using (ArcGIS.Core.Data.Analyst3D.TinTriangleCursor triangleSearchCursor = tinDataset.SearchTriangles(null))
      {
        while (triangleCursor.MoveNext())
        {
          using (ArcGIS.Core.Data.Analyst3D.TinTriangle triangleCurrent = 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 triangleSearchCursor = tinDataset.SearchTriangles(triangleFilter))
      {
        while (triangleCursor.MoveNext())
        {
          using (ArcGIS.Core.Data.Analyst3D.TinTriangle triangleCurrent = 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 triangleSearchCursor = tinDataset.SearchTriangles(triangleFilter))
      {
        while (triangleCursor.MoveNext())
        {
          using (ArcGIS.Core.Data.Analyst3D.TinTriangle triangleCurrent = triangleCursor.Current)
          {
    
          }
        }
      }
    }
    TIN Triangles
    {
      // nodes, edges of the triangle
      var triNnodes = triangle.Nodes;
      var triEdges = triangle.Edges;
    
      // triangle geometry
      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);
    }
    Search for TIN Nodes, Edges, Triangles
    {
      // Note: Needs QueuedTask to run
      {
        // 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;
            //Use the node
          }
        }
    
        // 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;
            //use the node
          }
        }
    
        // search for super nodes only
        var supernodeFilter = new ArcGIS.Core.Data.Analyst3D.TinNodeFilter();
        supernodeFilter.FilterEnvelope = tinLayer.GetTinDataset().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;
            //Use the node
          }
        }
    
        // 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;
            //Use the edge
          }
        }
    
        // 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;
            //Use the edge
          }
        }
    
        // 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;
            //use the triangle
          }
        }
      }
    }
    Inheritance Hierarchy

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

    Requirements

    Target Platforms: Windows 11 Home, Pro, Enterprise (64 bit)

    ArcGIS Pro version: 3.2 or higher.
    See Also