About the ArcGIS Network Analyst extension Engine application Sample
[C#]
cmdLoadLocations.cs
using System.Runtime.InteropServices;
using System.Windows.Forms;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.NetworkAnalyst;
// 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 : ESRI.ArcGIS.ADF.BaseClasses.BaseCommand
{
private ESRI.ArcGIS.Controls.IMapControl3 m_mapControl;
public cmdLoadLocations()
{
base.m_caption = "Load Locations...";
}
public override void OnClick()
{
if (m_mapControl == null)
{
MessageBox.Show("Error: Map control is null for this command");
return;
}
// 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
var naLayer = m_mapControl.CustomProperty as INALayer;
if (naLayer == null)
{
MessageBox.Show("Error: NALayer was not set as the CustomProperty of the map control");
return;
}
var naEnv = CommonFunctions.GetTheEngineNetworkAnalystEnvironment();
if (naEnv == null || naEnv.NAWindow == null )
{
MessageBox.Show("Error: EngineNetworkAnalystEnvironment is not properly configured");
return;
}
ESRI.ArcGIS.Controls.IEngineNAWindowCategory naWindowCategory = naEnv.NAWindow.ActiveCategory;
if (naWindowCategory == null )
{
MessageBox.Show("Error: There is no active category for the NAWindow");
return;
}
INAClass naClass = naWindowCategory.NAClass;
if (naClass == null)
{
MessageBox.Show("Error: There is no NAClass for the active category");
return;
}
INAClassDefinition naClassDefinition = naClass.ClassDefinition;
if (naClassDefinition == null)
{
MessageBox.Show("Error: NAClassDefinition is null for the active NAClass");
return;
}
if (!naClassDefinition.IsInput)
{
MessageBox.Show("Error: Locations can only be loaded into an input NAClass");
return;
}
// Set the Active Analysis layer to be the layer right-clicked on
naEnv.NAWindow.ActiveAnalysis = naLayer;
// Show the Property Page form for ArcGIS Network Analyst extension
var loadLocations = new frmLoadLocations();
if (loadLocations.ShowModal(m_mapControl, naEnv))
{
// Notify that the context has changed, because we have added locations to a NAClass within it
var contextEdit = naEnv.NAWindow.ActiveAnalysis.Context as INAContextEdit;
contextEdit.ContextChanged();
// Refresh the NAWindow and the map
m_mapControl.Refresh(esriViewDrawPhase.esriViewGeography, naLayer, m_mapControl.Extent);
naEnv.NAWindow.UpdateContent(naEnv.NAWindow.ActiveCategory);
}
}
public override void OnCreate(object hook)
{
// The "hook" was set as a MapControl in formMain_Load
m_mapControl = hook as ESRI.ArcGIS.Controls.IMapControl3;
}
}
}
[Visual Basic .NET]
cmdLoadLocations.vb
Imports Microsoft.VisualBasic
Imports System.Runtime.InteropServices
Imports System.Windows.Forms
Imports ESRI.ArcGIS.Carto
Imports ESRI.ArcGIS.NetworkAnalyst
Imports ESRI.ArcGIS.Controls
' 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 NotInheritable Class cmdLoadLocations : Inherits ESRI.ArcGIS.ADF.BaseClasses.BaseCommand
Private m_mapControl As ESRI.ArcGIS.Controls.IMapControl3
Public Sub New()
MyBase.m_caption = "Load Locations..."
End Sub
Public Overrides Sub OnClick()
If m_mapControl Is Nothing Then
MessageBox.Show("Error: Map control is null for this command")
Return
End If
' 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 = TryCast(m_mapControl.CustomProperty, INALayer)
If naLayer Is Nothing Then
MessageBox.Show("Error: NALayer was not set as the CustomProperty of the map control")
Return
End If
Dim naEnv As IEngineNetworkAnalystEnvironment = CommonFunctions.GetTheEngineNetworkAnalystEnvironment()
If naEnv Is Nothing OrElse naEnv.NAWindow Is Nothing Then
MessageBox.Show("Error: EngineNetworkAnalystEnvironment is not properly configured")
Return
End If
Dim naWindowCategory As ESRI.ArcGIS.Controls.IEngineNAWindowCategory = naEnv.NAWindow.ActiveCategory
If naWindowCategory Is Nothing Then
MessageBox.Show("Error: There is no active category for the NAWindow")
Return
End If
Dim naClass As INAClass = naWindowCategory.NAClass
If naClass Is Nothing Then
MessageBox.Show("Error: There is no NAClass for the active category")
Return
End If
Dim naClassDefinition As INAClassDefinition = naClass.ClassDefinition
If naClassDefinition Is Nothing Then
MessageBox.Show("Error: NAClassDefinition is null for the active NAClass")
Return
End If
If (Not naClassDefinition.IsInput) Then
MessageBox.Show("Error: Locations can only be loaded into an input NAClass")
Return
End If
' Set the Active Analysis layer to be the layer right-clicked on
naEnv.NAWindow.ActiveAnalysis = naLayer
' Show the Property Page form for ArcGIS Network Analyst extension
Dim loadLocations As frmLoadLocations = New frmLoadLocations()
If loadLocations.ShowModal(m_mapControl, naEnv) Then
' Notify that the context has changed, because we have added locations to a NAClass within it
Dim contextEdit As INAContextEdit = TryCast(naEnv.NAWindow.ActiveAnalysis.Context, INAContextEdit)
contextEdit.ContextChanged()
' Refresh the NAWindow and the map
m_mapControl.Refresh(esriViewDrawPhase.esriViewGeography, naLayer, m_mapControl.Extent)
naEnv.NAWindow.UpdateContent(naEnv.NAWindow.ActiveCategory)
End If
End Sub
Public Overrides Sub OnCreate(ByVal hook As Object)
' The "hook" was set as a MapControl in formMain_Load
m_mapControl = TryCast(hook, ESRI.ArcGIS.Controls.IMapControl3)
End Sub
End Class
End Namespace