ArcObjects Library Reference  

cmdLoadLocations

About the Network Analyst Engine application Sample

[C#]

cmdLoadLocations.cs

using System.Windows.Forms;
using System.Runtime.InteropServices;
using ESRI.ArcGIS.ADF.BaseClasses;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.NetworkAnalyst;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;


// This command allows users to load locations from another point feature layer into the selected NALayer and active category.

namespace NAEngine
{
	[Guid("72BDDCB7-03E8-4777-BECA-11DC47EFEDBA")]
	[ClassInterface(ClassInterfaceType.None)]
	[ProgId("NAEngine.LoadLocations")]
	public sealed class cmdLoadLocations : BaseCommand
	{
		private IMapControl3 m_mapControl;
		private IEngineNetworkAnalystEnvironment m_naEnv;

		public cmdLoadLocations()
		{
			base.m_caption = "Load Locations...";
		}

		public override bool Enabled
		{
			get
			{
				// Enabled if the active category is an input NAClass

				IEngineNAWindowCategory naWindowCategory = m_naEnv.NAWindow.ActiveCategory;
				if (naWindowCategory == null)
					return false;

				INAClass naClass = naWindowCategory.NAClass;
				if (naClass == null)
					return false;

				INAClassDefinition naClassDefinition = naClass.ClassDefinition;
				if (naClassDefinition == null)
					return false;

				return naClassDefinition.IsInput;
			}
		}

		public override void OnClick()
		{
			// Get the NALayer and corresponding NAContext of the layer that
			// was right-clicked on in the table of contents
			// m_MapControl.CustomProperty was set in frmMain.axTOCControl1_OnMouseDown
			INALayer naLayer = (INALayer)m_mapControl.CustomProperty;

			// Set the Active Analysis layer to be the layer right-clicked on
			m_naEnv.NAWindow.ActiveAnalysis = naLayer;

			if (!Enabled)
				return;

			// Show the Property Page form for Network Analyst
			frmLoadLocations loadLocations = new frmLoadLocations();
			if (loadLocations.ShowModal(m_mapControl, m_naEnv))
			{
				// notify that the context has changed because we have added locations to a NAClass within it
				INAContextEdit contextEdit = m_naEnv.NAWindow.ActiveAnalysis.Context as INAContextEdit;
				contextEdit.ContextChanged();

				// If loaded locations, refresh the NAWindow and the Screen
				m_mapControl.Refresh(esriViewDrawPhase.esriViewGeography, naLayer, m_mapControl.Extent);
				m_naEnv.NAWindow.UpdateContent(m_naEnv.NAWindow.ActiveCategory);
			}
		}

		public override void OnCreate(object hook)
		{
			m_mapControl = (IMapControl3)hook;

			// Get the Network Analyst Env
			m_naEnv = new EngineNetworkAnalystEnvironmentClass();
		}
	}
}

[Visual Basic .NET]

cmdLoadLocations.vb

Imports Microsoft.VisualBasic
Imports System.Windows.Forms
Imports System.Runtime.InteropServices
Imports ESRI.ArcGIS.ADF.BaseClasses
Imports ESRI.ArcGIS.Carto
Imports ESRI.ArcGIS.NetworkAnalyst
Imports ESRI.ArcGIS.Controls
Imports ESRI.ArcGIS.Geodatabase
Imports ESRI.ArcGIS.Geometry


' This command allows users to load locations from another point feature layer into the selected NALayer and active category.

Namespace NAEngine
	<Guid("24ED0B81-CB5E-48af-A069-1EB000208A7B"), ClassInterface(ClassInterfaceType.None), ProgId("NAEngine.LoadLocations")> _
 Public NotInheritable Class LoadLocations : Inherits BaseCommand
		Private m_mapControl As IMapControl3
		Private m_naEnv As IEngineNetworkAnalystEnvironment

		Public Sub New()
            MyBase.m_caption = "Load Locations..."
		End Sub

		Public Overloads Overrides ReadOnly Property Enabled() As Boolean
			Get
                ' Enabled if the active category is an input NAClass

				Dim naWindowCategory As IEngineNAWindowCategory = m_naEnv.NAWindow.ActiveCategory
				If naWindowCategory Is Nothing Then
					Return False
				End If

				Dim naClass As INAClass = naWindowCategory.NAClass
				If naClass Is Nothing Then
					Return False
				End If

				Dim naClassDefinition As INAClassDefinition = naClass.ClassDefinition
				If naClassDefinition Is Nothing Then
					Return False
				End If

				Return naClassDefinition.IsInput
			End Get
		End Property

		Public Overloads Overrides Sub OnClick()
			' Get the NALayer and corresponding NAContext of the layer that
			' was right-clicked on in the table of contents
			' m_MapControl.CustomProperty was set in frmMain.axTOCControl1_OnMouseDown
			Dim naLayer As INALayer = CType(m_mapControl.CustomProperty, INALayer)

			' Set the Active Analysis layer to be the layer right-clicked on
			m_naEnv.NAWindow.ActiveAnalysis = naLayer

			If (Not Enabled) Then
				Return
			End If

			' Show the Property Page form for Network Analyst
			Dim locations As frmLoadLocations = New frmLoadLocations()
            If locations.ShowModal(m_mapControl, m_naEnv) Then
                ' notify that the context has changed because we have added an item to a NAClass within it
                Dim contextEdit As INAContextEdit = CType(m_naEnv.NAWindow.ActiveAnalysis.Context, INAContextEdit)
                contextEdit.ContextChanged()

                ' If loaded locations, refresh the NAWindow and the Screen
                m_mapControl.Refresh(esriViewDrawPhase.esriViewGeography, naLayer, m_mapControl.Extent)
                m_naEnv.NAWindow.UpdateContent(m_naEnv.NAWindow.ActiveCategory)
            End If
		End Sub

		Public Overloads Overrides Sub OnCreate(ByVal hook As Object)
			m_mapControl = CType(hook, IMapControl3)

			' Get the Network Analyst Env
			m_naEnv = New EngineNetworkAnalystEnvironmentClass()
		End Sub
	End Class
End Namespace