ArcObjects Library Reference

Flip Line Direction Snippet

The edit sketch direction of all of the selected polyline features is changed or flipped.

[C#]

///<summary>The edit sketch direction of all of the selected polyline features is changed or flipped.</summary>
///
///<param name="application">An IApplication interface.</param>
///<param name="editor">An IEditor interface.</param>
/// 
///<remarks>Already must have a reference to IApplication and get the editor and start an edit session in the edit session you must have an edit selection, the code checks to make sure it is a line feature class and makes sure that there is an edit selection.</remarks>
public void FlipLineDirection(ESRI.ArcGIS.Framework.IApplication application, ESRI.ArcGIS.Editor.IEditor editor)
{
 
  if(application == null || editor == null)
  {
    System.Windows.Forms.MessageBox.Show("Flip operation aborted");
    return;
  }
  ESRI.ArcGIS.Editor.IEditLayers editLayers = editor as ESRI.ArcGIS.Editor.IEditLayers;
 
  // set up the progress bar and convert the number of selected features into an integer value.
  System.Int32 step = System.Convert.ToInt32(editor.SelectionCount / 100);
  ESRI.ArcGIS.esriSystem.IStatusBar statusBar = application.StatusBar;
  ESRI.ArcGIS.esriSystem.IStepProgressor stepProrogressor = statusBar.ProgressBar;

  stepProrogressor.MinRange = 1;
  stepProrogressor.MaxRange = 100;
  stepProrogressor.Message = "Flipping features...";
  stepProrogressor.Position = 0;
  stepProrogressor.StepValue = 1;
  stepProrogressor.Show();

  try
  {
    // flip all the selected features in an edit operation
    editor.StartOperation();

    ESRI.ArcGIS.Geodatabase.IEnumFeature enumFeature = editor.EditSelection;
    enumFeature.Reset();

   
    for (System.Int32 featCount = 0; featCount <= editor.SelectionCount - 1; featCount++)
    {
      ESRI.ArcGIS.Geodatabase.IFeature feature = enumFeature.Next();
      if(!(feature is ESRI.ArcGIS.Geometry.ICurve))
      {
        continue;
      }
      ESRI.ArcGIS.Geometry.ICurve curve = feature.Shape as ESRI.ArcGIS.Geometry.ICurve;
     
      curve.ReverseOrientation();
      feature.Shape = curve;
      feature.Store();

      if (featCount == step)
      {
        stepProrogressor.Step();
        step = step + System.Convert.ToInt32(editor.SelectionCount / 100);
      }
    }

    editor.StopOperation("Flip");
    stepProrogressor.Hide();
    return;
  }
  catch(System.Exception e)
  {
    editor.AbortOperation();
    System.Windows.Forms.MessageBox.Show("Flip operation aborted");
    return;
  }
 
}
[Visual Basic .NET]

'''<summary>The edit sketch direction of all of the selected polyline features is changed or flipped.</summary>
'''
'''<param name="application">An IApplication interface.</param>
'''<param name="editor">An IEditor interface.</param>
''' 
'''<remarks>Already must have a reference to IApplication and get the editor and start an edit session in the edit session you must have an edit selection, the code checks to make sure it is a line feature class and makes sure that there is an edit selection.</remarks>
Public Sub FlipLineDirection(ByVal application As ESRI.ArcGIS.Framework.IApplication, ByVal editor As ESRI.ArcGIS.Editor.IEditor)

  If application Is Nothing OrElse editor Is Nothing Then
	  System.Windows.Forms.MessageBox.Show("Flip operation aborted")
	  Return
  End If

  Dim editLayers As ESRI.ArcGIS.Editor.IEditLayers = TryCast(editor, ESRI.ArcGIS.Editor.IEditLayers)

  ' set up the progress bar and convert the number of selected features into an integer value.
  Dim [step] As System.Int32 = System.Convert.ToInt32(editor.SelectionCount / 100)
  Dim statusBar As ESRI.ArcGIS.esriSystem.IStatusBar = application.StatusBar
  Dim stepProgressor As ESRI.ArcGIS.esriSystem.IStepProgressor = statusBar.ProgressBar
  With stepProgressor
    .MinRange = 1
    .MaxRange = 100
    .Message = "Flipping features..."
    .Position = 0
    .StepValue = 1
    .Show()
  End With

  Try
    ' flip all the selected features in an edit operation
    editor.StartOperation()

    Dim enumFeature As ESRI.ArcGIS.Geodatabase.IEnumFeature = editor.EditSelection
    enumFeature.Reset()

    Dim featCount As System.Int32 = 0
    Do While featCount <= editor.SelectionCount - 1
      Dim feature As ESRI.ArcGIS.Geodatabase.IFeature = enumFeature.Next

	    If Not(TypeOf feature Is ESRI.ArcGIS.Geometry.ICurve) Then
		    featCount += 1
		    Continue Do
      End If

      Dim curve As ESRI.ArcGIS.Geometry.ICurve = TryCast(feature.Shape, ESRI.ArcGIS.Geometry.ICurve) ' Dynamic Cast

      curve.ReverseOrientation()
	    feature.Shape = curve
      feature.Store()

	    If featCount = [step] Then
        stepProgressor.Step()
        [step] = [step] + System.Convert.ToInt32(editor.SelectionCount / 100)
      End If

      featCount += 1

    Loop

    editor.StopOperation("Flip")
    stepProgressor.Hide()

    Return

  Catch e As System.Exception

    editor.AbortOperation()
	  System.Windows.Forms.MessageBox.Show("Flip operation aborted")

    Return

  End Try

End Sub


Additional Requirements
  • The code in this document requires the following References added to the Visual Studio project:
  • ESRI.ArcGIS.ArcMapUI
  • ESRI.ArcGIS.Carto
  • ESRI.ArcGIS.Editor
  • ESRI.ArcGIS.Framework
  • ESRI.ArcGIS.Geodatabase
  • ESRI.ArcGIS.Geometry
  • ESRI.ArcGIS.System
  • System
  • System.Windows.Forms