This document is archived and information here might be outdated.  Recommended version.


How to add point IDs to a polyline (ArcObjects .NET 10.5 SDK)

How to add point IDs to a polyline


Adding point IDs to a polyline

The following code example makes an existing polyline point ID aware and defines ID values for each of its vertices:
[C#]
public void AddPointIDs(IFeatureClass featureClass)
{
    IFeatureCursor featureCursor=featureClass.Search(null, true);
    IFeature currentFeature=featureCursor.NextFeature();

    while (currentFeature != null)
    {
        IPointIDAware pointIDAware=currentFeature.Shape as IPointIDAware;
        pointIDAware.PointIDAware=true;

        //The polyline is now point ID aware. It will persist its point IDs the next time it is saved.
        ISegmentCollection segmentCollection=pointIDAware as ISegmentCollection;
        IEnumSegment segmentEnumeration=segmentCollection.EnumSegments;

        ISegment currentSegment;
        int partIndex=0;
        int segmentIndex=0;
        segmentEnumeration.Next(out currentSegment, ref partIndex, ref segmentIndex);

        while (currentSegment != null)
        {
            ISegmentID segmentID=currentSegment as ISegmentID;
            segmentID.SetIDs(segmentIndex, segmentIndex + 1);
            segmentEnumeration.Next(out currentSegment, ref partIndex, ref
                segmentIndex);
        }

        currentFeature.Shape=pointIDAware as IGeometry;
        currentFeature.Store();

        currentFeature=featureCursor.NextFeature();
    }
}
[VB.NET]
Private Sub AddPointIds(ByVal featureClass As IFeatureClass)
    Dim featureCursor As IFeatureCursor=featureClass.Search(Nothing, False)
    Dim currentFeature As IFeature=featureCursor.NextFeature()
    While Not currentFeature Is Nothing
        Dim pointIDAware As IPointIDAware=CType(currentFeature.Shape, IPointIDAware)
        pointIDAware.PointIDAware=True
        'The polyline is now point ID aware.
        ' It will persist its point IDs the next time it is saved.
        Dim segmentCollection As ISegmentCollection=CType(pointIDAware, ISegmentCollection)
        Dim segmentEnumeration As IEnumSegment=segmentCollection.EnumSegments
        Dim currentSegment As ISegment
        Dim partIndex As Integer=0
        Dim segmentIndex As Integer=0
        'Warning about the current segment being passed by reference, and that it can result
        'in a null reference exception at run time. No out keyword in VB .NET.
        
        segmentEnumeration.Next(currentSegment, partIndex, segmentIndex)
        
        While Not currentSegment Is Nothing
            Dim segmentID As ISegmentID=currentSegment
            segmentID.SetIDs(segmentIndex, segmentIndex + 1)
            segmentEnumeration.Next(currentSegment, partIndex, segmentIndex)
        End While
        currentFeature.Shape=pointIDAware
        currentFeature.Store()
        currentFeature=featureCursor.NextFeature()
    End While
End Sub






To use the code in this topic, reference the following assemblies in your Visual Studio project. In the code files, you will need using (C#) or Imports (VB .NET) directives for the corresponding namespaces (given in parenthesis below if different from the assembly name):
Development licensing Deployment licensing
ArcGIS Desktop Basic ArcGIS Desktop Basic
ArcGIS Desktop Standard ArcGIS Desktop Standard
ArcGIS Desktop Advanced ArcGIS Desktop Advanced
Engine Developer Kit Engine