ArcGIS Pro 3.7 API Reference Guide
ArcGIS.Core.Data.Analyst3D Namespace / TinEdge Class
Members Example

In This Topic
    TinEdge Class
    In This Topic
    A TinEdge is one of the three basic elements of a TIN. Edges are comprised of two TinNodes. Edges are oriented in clockwise order and are used to form triangles.
    Object Model
    TinEdge ClassTinEdge ClassTinEdge ClassTinEdge ClassTinEdge ClassTinEdge ClassTinTriangle ClassTinTriangle ClassPolyline Class
    Syntax
    Public NotInheritable Class TinEdge 
       Inherits TinElement
       Implements System.IDisposable 
    public sealed class TinEdge : TinElement, System.IDisposable  
    Remarks
    Edges may be hard, soft, or regular. Hard and soft edges are enforced in the triangulation. When a TIN is used as a surface model, these usually represent breaklines. Regular edges are simply a consequence of triangulation and don't have special meaning. The TinEdgeType enumeration describes edge type.
    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 Edges
    {
      // search all single edges that intersect the data extent
      using (ArcGIS.Core.Data.Analyst3D.TinEdgeCursor edgeCursor = tinDataset.SearchEdges(null))
      {
        while (edgeCursor.MoveNext())
        {
          using (ArcGIS.Core.Data.Analyst3D.TinEdge edgeCurrent = edgeCursor.Current)
          {
            // do something with the edge
          }
        }
      }
    
      // search within an extent
      ArcGIS.Core.Data.Analyst3D.TinEdgeFilter edgeFilter = new ArcGIS.Core.Data.Analyst3D.TinEdgeFilter();
      edgeFilter.FilterEnvelope = envelope;
      using (ArcGIS.Core.Data.Analyst3D.TinEdgeCursor edgeCursor = tinDataset.SearchEdges(edgeFilter))
      {
        while (edgeCursor.MoveNext())
        {
          using (ArcGIS.Core.Data.Analyst3D.TinEdge edgeCurrent = edgeCursor.Current)
          {
            // do something with the edge
          }
        }
      }
    
      // search all "inside" edges
      edgeFilter = new ArcGIS.Core.Data.Analyst3D.TinEdgeFilter();
      edgeFilter.FilterType = ArcGIS.Core.Data.Analyst3D.TinFilterType.InsideDataArea;
      using (ArcGIS.Core.Data.Analyst3D.TinEdgeCursor edgeCursor = tinDataset.SearchEdges(edgeFilter))
      {
        while (edgeCursor.MoveNext())
        {
          using (ArcGIS.Core.Data.Analyst3D.TinEdge edgeCurrent = edgeCursor.Current)
          {
            // do something with the edge
          }
        }
      }
    
      // search for hard edges
      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 = tinDataset.SearchEdges(edgeFilter))
      {
        while (edgeCursor.MoveNext())
        {
          using (ArcGIS.Core.Data.Analyst3D.TinEdge edgeCurrent = edgeCursor.Current)
          {
            // do something with the edge
          }
        }
      }
    }
    TIN Edges
    {
      // nodes of the edge
      var nodes = edge.Nodes;
    
      // edge geometry
      polyline = edge.ToPolyline();
      // edge length
      var length = edge.Length;
      // is the edge "inside"
      var isInsideEdge = edge.IsInsideDataArea;
      // edge type - regular/hard/soft
      var edgeType = edge.EdgeType;
    
      // get next (clockwise) edge in the triangle
      var nextEdge = edge.GetNextEdgeInTriangle();
      // get previous (anti-clockwise) edge in the triangle
      var prevEdge = edge.GetPreviousEdgeInTriangle();
    
      // get opposite edge
      var oppEdge = edge.GetNeighbor();
    
      // get left triangle
      var leftTriangle = edge.LeftTriangle;
      // get right triangle
      var rightTriangle = edge.RightTriangle;
    }
    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.TinEdge

    Requirements

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

    ArcGIS Pro version: 3.2 or higher.
    See Also