ArcObjects Library Reference  

PointsAlongLineForm

About the Points along line construction tool Sample

[C#]

PointsAlongLineForm.cs

using System;
using System.Windows.Forms;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Editor;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;

namespace PointsAlongLine
{
  public partial class PointsAlongLineForm : Form
  {
    private IEditor3 m_editor;
    private IEditSketch3 m_edSketch;
    private IPolyline m_polyline;
    
    IEditTemplate m_editTemplate;
    IFeatureLayer m_featureLayer;
    IFeatureClass m_featureClass;

    public PointsAlongLineForm(IEditor3 editor)
    {
      InitializeComponent();

      m_editor = editor;
      m_edSketch = m_editor as IEditSketch3;
      
      m_polyline = m_edSketch.Geometry as IPolyline;
      tbLineLength.Text = (m_polyline.Length.ToString("F"));

      //get the template
      m_editTemplate = m_editor.CurrentTemplate;
      m_featureLayer = m_editTemplate.Layer as IFeatureLayer;
      m_featureClass = m_featureLayer.FeatureClass;

    }

    private void cmdCancel_Click(object sender, EventArgs e)
    {
      this.Close();
    }

    private void cmdOK_Click(object sender, EventArgs e)
    {
      //calc distance between points
      double dbp = 0;
      if (rbNOP.Checked)
        dbp = m_polyline.Length / (int.Parse(txtNOP.Text) + 1);
      else
        dbp = int.Parse(txtDist.Text);
      
      m_editor.StartOperation();
      this.Cursor = Cursors.WaitCursor;
      
      //create points at distance between points up to total length
      for (double d = dbp; d < m_polyline.Length; d += dbp)
      {
        IConstructPoint contructionPoint = new PointClass();
        contructionPoint.ConstructAlong(m_polyline, esriSegmentExtension.esriNoExtension,d,false);
        CreatePoint(contructionPoint as IPoint);
      }
      
      //create points at start and end of sketch
      if (chkEnds.Checked)
      {
        CreatePoint(m_polyline.FromPoint);
        CreatePoint(m_polyline.ToPoint);
       }
      
      this.Cursor = Cursors.Default;
      m_editor.StopOperation("Create points along a line");
      this.Close();
     }

  private void CreatePoint(IPoint point)
  {
    //create point for the current template
    IFeature feature = m_featureClass.CreateFeature();
    feature.Shape = point;
    m_editTemplate.SetDefaultValues(feature);
    feature.Store();

    //Invalidate the area around the new feature
    m_editor.Display.Invalidate(feature.Extent, true, (short)esriScreenCache.esriAllScreenCaches);
  }

  }
}

[Visual Basic .NET]

PointsAlongLineForm.vb

Imports Microsoft.VisualBasic
Imports System
Imports System.Windows.Forms
Imports ESRI.ArcGIS.Carto
Imports ESRI.ArcGIS.Display
Imports ESRI.ArcGIS.Editor
Imports ESRI.ArcGIS.Geodatabase
Imports ESRI.ArcGIS.Geometry

Namespace PointsAlongLine
  Partial Public Class PointsAlongLineForm
	  Inherits Form
  Private m_editor As IEditor3
  Private m_edSketch As IEditSketch3
  Private m_polyline As IPolyline

  Private m_editTemplate As IEditTemplate
  Private m_featureLayer As IFeatureLayer
  Private m_featureClass As IFeatureClass

  Public Sub New(ByVal editor As IEditor3)
    InitializeComponent()

    m_editor = editor
    m_edSketch = TryCast(m_editor, IEditSketch3)

    m_polyline = TryCast(m_edSketch.Geometry, IPolyline)
    tbLineLength.Text = (m_polyline.Length.ToString("F"))

    'get the template
    m_editTemplate = m_editor.CurrentTemplate
    m_featureLayer = TryCast(m_editTemplate.Layer, IFeatureLayer)
    m_featureClass = m_featureLayer.FeatureClass

  End Sub

  Private Sub cmdCancel_Click(ByVal sender As Object, ByVal e As EventArgs) Handles cmdCancel.Click
    Me.Close()
  End Sub

  Private Sub cmdOK_Click(ByVal sender As Object, ByVal e As EventArgs) Handles cmdOK.Click
    'calc distance between points
    Dim dbp As Double = 0
    If rbNOP.Checked Then
    dbp = m_polyline.Length / (Integer.Parse(txtNOP.Text) + 1)
    Else
    dbp = Integer.Parse(txtDist.Text)
    End If

    m_editor.StartOperation()
    Me.Cursor = Cursors.WaitCursor

    'create points at distance between points up to total length
    For d As Double = dbp To m_polyline.Length - 1 Step dbp
    Dim contructionPoint As IConstructPoint = New PointClass()
    contructionPoint.ConstructAlong(m_polyline, esriSegmentExtension.esriNoExtension, d, False)
    CreatePoint(TryCast(contructionPoint, IPoint))
    Next d

    'create points at start and end of sketch
    If chkEnds.Checked Then
    CreatePoint(m_polyline.FromPoint)
    CreatePoint(m_polyline.ToPoint)
    End If

    Me.Cursor = Cursors.Default
    m_editor.StopOperation("Create points along a line")
    Me.Close()
  End Sub

  Private Sub CreatePoint(ByVal point As IPoint)
  'create point for the current template
  Dim feature As IFeature = m_featureClass.CreateFeature()
  feature.Shape = point
  m_editTemplate.SetDefaultValues(feature)
  feature.Store()

  'Invalidate the area around the new feature
  m_editor.Display.Invalidate(feature.Extent, True, CShort(Fix(esriScreenCache.esriAllScreenCaches)))
  End Sub

  End Class
End Namespace