About the Subset network evaluators Sample
[C#]
AutoUpdateNetworkElementArrayParametersCommand.cs
using System;
using System.Drawing;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using ESRI.ArcGIS.ADF.BaseClasses;
using ESRI.ArcGIS.ADF.CATIDs;
using ESRI.ArcGIS.Framework;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.NetworkAnalyst;
using ESRI.ArcGIS.ArcMapUI;
using ESRI.ArcGIS.NetworkAnalystUI;
using SubsetNetworkEvaluators;
namespace SubsetNetworkEvaluatorsUI
{
/// <summary>
/// This command toggles on and off the event based behavior to update the relevant subset parameter arrays
/// automatically by listening to selection change events and graphic element change events. When the command
/// is toggled off, the subset parameter arrays are cleared out and the results may not match the current selection
/// or graphic element geometries in this case.
/// </summary>
[Guid("f213e01f-3a45-44c7-a350-397a794e9084")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("SubsetNetworkEvaluatorsUI.AutoUpdateNetworkElementArrayParametersCommand")]
public sealed class AutoUpdateNetworkElementArrayParametersCommand : BaseCommand
{
#region COM Registration Function(s)
[ComRegisterFunction()]
[ComVisible(false)]
static void RegisterFunction(Type registerType)
{
// Required for ArcGIS Component Category Registrar support
ArcGISCategoryRegistration(registerType);
//
// TODO: Add any COM registration code here
//
}
[ComUnregisterFunction()]
[ComVisible(false)]
static void UnregisterFunction(Type registerType)
{
// Required for ArcGIS Component Category Registrar support
ArcGISCategoryUnregistration(registerType);
//
// TODO: Add any COM unregistration code here
//
}
#region ArcGIS Component Category Registrar generated code
/// <summary>
/// Required method for ArcGIS Component Category registration -
/// Do not modify the contents of this method with the code editor.
/// </summary>
private static void ArcGISCategoryRegistration(Type registerType)
{
string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID);
MxCommands.Register(regKey);
}
/// <summary>
/// Required method for ArcGIS Component Category unregistration -
/// Do not modify the contents of this method with the code editor.
/// </summary>
private static void ArcGISCategoryUnregistration(Type registerType)
{
string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID);
MxCommands.Unregister(regKey);
}
#endregion
#endregion
private IApplication m_application = null;
private INetworkAnalystExtension m_nax = null;
private INAWindow m_naWindowEventSource = null;
private IMap m_mapEventSource = null;
private IGraphicsContainer m_graphicsEventSource = null;
private ESRI.ArcGIS.NetworkAnalystUI.INAWindowEvents_OnActiveAnalysisChangedEventHandler m_ActiveAnalysisChanged;
private ESRI.ArcGIS.Carto.IActiveViewEvents_SelectionChangedEventHandler m_ActiveViewEventsSelectionChanged;
private ESRI.ArcGIS.Carto.IGraphicsContainerEvents_AllElementsDeletedEventHandler m_AllGraphicsDeleted;
private ESRI.ArcGIS.Carto.IGraphicsContainerEvents_ElementAddedEventHandler m_GraphicAdded;
private ESRI.ArcGIS.Carto.IGraphicsContainerEvents_ElementDeletedEventHandler m_GraphicDeleted;
private ESRI.ArcGIS.Carto.IGraphicsContainerEvents_ElementsAddedEventHandler m_GraphicsAdded;
private ESRI.ArcGIS.Carto.IGraphicsContainerEvents_ElementUpdatedEventHandler m_GraphicUpdated;
public AutoUpdateNetworkElementArrayParametersCommand()
{
base.m_category = "Network Analyst Samples"; //localizable text
base.m_caption = "Auto Update Network Element Array Parameters"; //localizable text
base.m_message = "Auto Update Network Element Array Parameters"; //localizable text
base.m_toolTip = "Auto Update Network Element Array Parameters"; //localizable text
base.m_name = "NASamples_AutoUpdateNetworkElementArrayParameters"; //unique id, non-localizable (e.g. "MyCategory_ArcMapCommand")
try
{
//
// TODO: change bitmap name if necessary
//
string bitmapResourceName = GetType().Name + ".bmp";
base.m_bitmap = new Bitmap(GetType(), bitmapResourceName);
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex.Message, "Invalid Bitmap");
}
}
#region Overriden Class Methods
/// <summary>
/// Occurs when this command is created
/// </summary>
/// <param name="hook">Instance of the application</param>
public override void OnCreate(object hook)
{
if (hook == null)
return;
m_application = hook as IApplication;
m_nax = null;
m_naWindowEventSource = null;
m_mapEventSource = null;
m_graphicsEventSource = null;
m_nax = SubsetHelperUI.GetNAXConfiguration(m_application) as INetworkAnalystExtension;
}
public override bool Enabled
{
get
{
bool naxEnabled = false;
IExtensionConfig naxConfig = m_nax as IExtensionConfig;
if (naxConfig != null)
naxEnabled = naxConfig.State == esriExtensionState.esriESEnabled;
INALayer naLayer = null;
INetworkDataset nds = null;
if (naxEnabled)
{
INAWindow naWindow = m_nax.NAWindow;
naLayer = naWindow.ActiveAnalysis;
INAContext naContext = null;
if (naLayer != null)
naContext = naLayer.Context;
if (naContext != null)
nds = naContext.NetworkDataset;
}
bool enable = naxEnabled && (naLayer != null) && (nds != null);
if (!enable && m_naWindowEventSource != null)
UnWireEvents();
base.m_enabled = enable;
return base.Enabled;
}
}
/// <summary>
/// Occurs when this command is clicked
/// </summary>
public override void OnClick()
{
if (m_naWindowEventSource != null)
UnWireEvents();
else
WireEvents();
}
public override bool Checked
{
get
{
return (m_naWindowEventSource != null);
}
}
private void WireEvents()
{
try
{
if (m_naWindowEventSource != null)
UnWireEvents();
m_naWindowEventSource = ((m_nax != null) ? m_nax.NAWindow : null) as INAWindow;
if (m_naWindowEventSource == null)
return;
//Create an instance of the delegate, add it to OnActiveAnalysisChanged event
m_ActiveAnalysisChanged = new ESRI.ArcGIS.NetworkAnalystUI.INAWindowEvents_OnActiveAnalysisChangedEventHandler(OnActiveAnalysisChanged);
((ESRI.ArcGIS.NetworkAnalystUI.INAWindowEvents_Event)(m_naWindowEventSource)).OnActiveAnalysisChanged += m_ActiveAnalysisChanged;
WireSelectionEvent();
WireGraphicsEvents();
}
catch (Exception ex)
{
string msg = SubsetHelperUI.GetFullExceptionMessage(ex);
MessageBox.Show(msg, "Wire Events");
}
}
private void UnWireEvents()
{
try
{
if (m_naWindowEventSource == null)
return;
UnWireSelectionEvent();
UnWireGraphicsEvents();
((ESRI.ArcGIS.NetworkAnalystUI.INAWindowEvents_Event)(m_naWindowEventSource)).OnActiveAnalysisChanged -= m_ActiveAnalysisChanged;
m_naWindowEventSource = null;
}
catch (Exception ex)
{
string msg = SubsetHelperUI.GetFullExceptionMessage(ex);
MessageBox.Show(msg, "UnWire Events");
}
}
private void WireSelectionEvent()
{
try
{
if (m_naWindowEventSource == null)
return;
if (m_mapEventSource != null)
UnWireSelectionEvent();
m_mapEventSource = ActiveMap;
if (m_mapEventSource == null)
return;
UpdateSelectionEIDArrayParameterValues();
//Create an instance of the delegate, add it to SelectionChanged event
m_ActiveViewEventsSelectionChanged = new ESRI.ArcGIS.Carto.IActiveViewEvents_SelectionChangedEventHandler(OnActiveViewEventsSelectionChanged);
((ESRI.ArcGIS.Carto.IActiveViewEvents_Event)(m_mapEventSource)).SelectionChanged += m_ActiveViewEventsSelectionChanged;
}
catch (Exception ex)
{
string msg = SubsetHelperUI.GetFullExceptionMessage(ex);
MessageBox.Show(msg, "Wire Selection Event");
}
}
private void UnWireSelectionEvent()
{
try
{
if (m_naWindowEventSource == null)
return;
if (m_mapEventSource == null)
return;
((ESRI.ArcGIS.Carto.IActiveViewEvents_Event)(m_mapEventSource)).SelectionChanged -= m_ActiveViewEventsSelectionChanged;
m_mapEventSource = null;
SubsetHelperUI.ClearEIDArrayParameterValues(m_nax, SubsetHelperUI.SelectionEIDArrayBaseName);
}
catch (Exception ex)
{
string msg = SubsetHelperUI.GetFullExceptionMessage(ex);
MessageBox.Show(msg, "UnWire Selection Event");
}
}
private void WireGraphicsEvents()
{
try
{
if (m_naWindowEventSource == null)
return;
if (m_graphicsEventSource != null)
UnWireGraphicsEvents();
IMap activeMap = ActiveMap;
IGraphicsLayer graphicsLayer = null;
if (activeMap != null)
graphicsLayer = activeMap.BasicGraphicsLayer;
if (graphicsLayer != null)
m_graphicsEventSource = (IGraphicsContainer)graphicsLayer;
if (m_graphicsEventSource == null)
return;
UpdateGraphicsEIDArrayParameterValues();
//Create an instance of the delegate, add it to AllElementsDeleted event
m_AllGraphicsDeleted = new ESRI.ArcGIS.Carto.IGraphicsContainerEvents_AllElementsDeletedEventHandler(OnAllGraphicsDeleted);
((ESRI.ArcGIS.Carto.IGraphicsContainerEvents_Event)(m_graphicsEventSource)).AllElementsDeleted += m_AllGraphicsDeleted;
//Create an instance of the delegate, add it to ElementAdded event
m_GraphicAdded = new ESRI.ArcGIS.Carto.IGraphicsContainerEvents_ElementAddedEventHandler(OnGraphicAdded);
((ESRI.ArcGIS.Carto.IGraphicsContainerEvents_Event)(m_graphicsEventSource)).ElementAdded += m_GraphicAdded;
//Create an instance of the delegate, add it to ElementDeleted event
m_GraphicDeleted = new ESRI.ArcGIS.Carto.IGraphicsContainerEvents_ElementDeletedEventHandler(OnGraphicDeleted);
((ESRI.ArcGIS.Carto.IGraphicsContainerEvents_Event)(m_graphicsEventSource)).ElementDeleted += m_GraphicDeleted;
//Create an instance of the delegate, add it to ElementsAdded event
m_GraphicsAdded = new ESRI.ArcGIS.Carto.IGraphicsContainerEvents_ElementsAddedEventHandler(OnGraphicsAdded);
((ESRI.ArcGIS.Carto.IGraphicsContainerEvents_Event)(m_graphicsEventSource)).ElementsAdded += m_GraphicsAdded;
//Create an instance of the delegate, add it to ElementUpdated event
m_GraphicUpdated = new ESRI.ArcGIS.Carto.IGraphicsContainerEvents_ElementUpdatedEventHandler(OnGraphicUpdated);
((ESRI.ArcGIS.Carto.IGraphicsContainerEvents_Event)(m_graphicsEventSource)).ElementUpdated += m_GraphicUpdated;
}
catch (Exception ex)
{
string msg = SubsetHelperUI.GetFullExceptionMessage(ex);
MessageBox.Show(msg, "Wire Graphics Events");
}
}
private void UnWireGraphicsEvents()
{
try
{
if (m_naWindowEventSource == null)
return;
if (m_graphicsEventSource == null)
return;
((ESRI.ArcGIS.Carto.IGraphicsContainerEvents_Event)(m_graphicsEventSource)).AllElementsDeleted -= m_AllGraphicsDeleted;
((ESRI.ArcGIS.Carto.IGraphicsContainerEvents_Event)(m_graphicsEventSource)).ElementAdded -= m_GraphicAdded;
((ESRI.ArcGIS.Carto.IGraphicsContainerEvents_Event)(m_graphicsEventSource)).ElementDeleted -= m_GraphicDeleted;
((ESRI.ArcGIS.Carto.IGraphicsContainerEvents_Event)(m_graphicsEventSource)).ElementsAdded -= m_GraphicsAdded;
((ESRI.ArcGIS.Carto.IGraphicsContainerEvents_Event)(m_graphicsEventSource)).ElementUpdated -= m_GraphicUpdated;
m_graphicsEventSource = null;
SubsetHelperUI.ClearEIDArrayParameterValues(m_nax, SubsetHelperUI.GraphicsEIDArrayBaseName);
}
catch (Exception ex)
{
string msg = SubsetHelperUI.GetFullExceptionMessage(ex);
MessageBox.Show(msg, "UnWire Graphics Events");
}
}
#endregion
private void UpdateSelectionEIDArrayParameterValues()
{
IMap map = ActiveMap;
if (map == null)
return;
INAWindow naWindow = m_nax.NAWindow;
INALayer naLayer = null;
INAContext naContext = null;
INetworkDataset nds = null;
naLayer = naWindow.ActiveAnalysis;
if (naLayer != null)
naContext = naLayer.Context;
if (naContext != null)
nds = naContext.NetworkDataset;
if (nds == null)
return;
string baseName = SubsetHelperUI.SelectionEIDArrayBaseName;
VarType vt = SubsetHelperUI.GetEIDArrayParameterType();
List<string> sourceNames = SubsetHelperUI.FindParameterizedSourceNames(nds, baseName, vt);
Dictionary<string, ILongArray> oidArraysBySourceName = SubsetHelperUI.GetOIDArraysBySourceNameFromMapSelection(map, sourceNames);
SubsetHelperUI.UpdateEIDArrayParameterValuesFromOIDArrays(m_nax, oidArraysBySourceName, baseName);
}
private void UpdateGraphicsEIDArrayParameterValues()
{
IGraphicsContainer graphics = ActiveGraphics;
if (graphics == null)
return;
INAWindow naWindow = m_nax.NAWindow;
INALayer naLayer = null;
INAContext naContext = null;
INetworkDataset nds = null;
naLayer = naWindow.ActiveAnalysis;
if (naLayer != null)
naContext = naLayer.Context;
if (naContext != null)
nds = naContext.NetworkDataset;
if (nds == null)
return;
string baseName = SubsetHelperUI.GraphicsEIDArrayBaseName;
VarType vt = SubsetHelperUI.GetEIDArrayParameterType();
List<string> sourceNames = SubsetHelperUI.FindParameterizedSourceNames(nds, baseName, vt);
IGeometry searchGeometry = SubsetHelperUI.GetSearchGeometryFromGraphics(graphics);
SubsetHelperUI.UpdateEIDArrayParameterValuesFromGeometry(m_nax, searchGeometry, baseName);
}
private IMap ActiveMap
{
get
{
IDocument doc = m_application.Document;
IMxDocument mxdoc = doc as IMxDocument;
return (IMap)mxdoc.FocusMap;
}
}
private IGraphicsContainer ActiveGraphics
{
get
{
IMap activeMap = ActiveMap;
IGraphicsContainer graphics = null;
if (activeMap != null)
graphics = activeMap.BasicGraphicsLayer as IGraphicsContainer;
return graphics;
}
}
#region Event Handlers
#region NAWindow Event Handlers
private void OnActiveAnalysisChanged()
{
if (m_mapEventSource != null)
WireSelectionEvent();
if (m_graphicsEventSource != null)
WireGraphicsEvents();
}
#endregion
#region Selection Event Handler
private void OnActiveViewEventsSelectionChanged()
{
UpdateSelectionEIDArrayParameterValues();
}
#endregion
#region Graphics Event Handlers
private void OnAllGraphicsDeleted()
{
UpdateGraphicsEIDArrayParameterValues();
}
private void OnGraphicAdded(IElement element)
{
UpdateGraphicsEIDArrayParameterValues();
}
private void OnGraphicDeleted(IElement element)
{
UpdateGraphicsEIDArrayParameterValues();
}
private void OnGraphicsAdded(IElementCollection elements)
{
UpdateGraphicsEIDArrayParameterValues();
}
private void OnGraphicUpdated(IElement element)
{
UpdateGraphicsEIDArrayParameterValues();
}
#endregion
#endregion
}
}
[Visual Basic .NET]
AutoUpdateNetworkElementArrayParametersCommand.vb
Imports Microsoft.VisualBasic
Imports System
Imports System.Drawing
Imports System.Collections.Generic
Imports System.Runtime.InteropServices
Imports System.Windows.Forms
Imports ESRI.ArcGIS.ADF.BaseClasses
Imports ESRI.ArcGIS.ADF.CATIDs
Imports ESRI.ArcGIS.Framework
Imports ESRI.ArcGIS.esriSystem
Imports ESRI.ArcGIS.Geometry
Imports ESRI.ArcGIS.Geodatabase
Imports ESRI.ArcGIS.Carto
Imports ESRI.ArcGIS.NetworkAnalyst
Imports ESRI.ArcGIS.ArcMapUI
Imports ESRI.ArcGIS.NetworkAnalystUI
Imports SubsetNetworkEvaluators
Namespace SubsetNetworkEvaluatorsUI
''' <summary>
''' This command toggles on and off the event based behavior to update the relevant subset parameter arrays
''' automatically by listening to selection change events and graphic element change events. When the command
''' is toggled off, the subset parameter arrays are cleared out and the results may not match the current selection
''' or graphic element geometries in this case.
''' </summary>
<Guid("f213e01f-3a45-44c7-a350-397a794e9084"), ClassInterface(ClassInterfaceType.None), ProgId("SubsetNetworkEvaluatorsUI.AutoUpdateNetworkElementArrayParametersCommand")> _
Public NotInheritable Class AutoUpdateNetworkElementArrayParametersCommand : Inherits BaseCommand
#Region "COM Registration Function(s)"
<ComRegisterFunction(), ComVisible(False)> _
Private Shared Sub RegisterFunction(ByVal registerType As Type)
' Required for ArcGIS Component Category Registrar support
ArcGISCategoryRegistration(registerType)
'
' TODO: Add any COM registration code here
''
End Sub
<ComUnregisterFunction(), ComVisible(False)> _
Private Shared Sub UnregisterFunction(ByVal registerType As Type)
' Required for ArcGIS Component Category Registrar support
ArcGISCategoryUnregistration(registerType)
'
' TODO: Add any COM unregistration code here
''
End Sub
#Region "ArcGIS Component Category Registrar generated code"
''' <summary>
''' Required method for ArcGIS Component Category registration -
''' Do not modify the contents of this method with the code editor.
''' </summary>
Private Shared Sub ArcGISCategoryRegistration(ByVal registerType As Type)
Dim regKey As String = String.Format("HKEY_CLASSES_ROOT\CLSID\{{{0}}}", registerType.GUID)
MxCommands.Register(regKey)
End Sub
''' <summary>
''' Required method for ArcGIS Component Category unregistration -
''' Do not modify the contents of this method with the code editor.
''' </summary>
Private Shared Sub ArcGISCategoryUnregistration(ByVal registerType As Type)
Dim regKey As String = String.Format("HKEY_CLASSES_ROOT\CLSID\{{{0}}}", registerType.GUID)
MxCommands.Unregister(regKey)
End Sub
#End Region
#End Region
Private m_application As IApplication = Nothing
Private m_nax As INetworkAnalystExtension = Nothing
Private m_naWindowEventSource As INAWindow = Nothing
Private m_mapEventSource As IMap = Nothing
Private m_graphicsEventSource As IGraphicsContainer = Nothing
Private m_ActiveAnalysisChanged As ESRI.ArcGIS.NetworkAnalystUI.INAWindowEvents_OnActiveAnalysisChangedEventHandler
Private m_ActiveViewEventsSelectionChanged As ESRI.ArcGIS.Carto.IActiveViewEvents_SelectionChangedEventHandler
Private m_AllGraphicsDeleted As ESRI.ArcGIS.Carto.IGraphicsContainerEvents_AllElementsDeletedEventHandler
Private m_GraphicAdded As ESRI.ArcGIS.Carto.IGraphicsContainerEvents_ElementAddedEventHandler
Private m_GraphicDeleted As ESRI.ArcGIS.Carto.IGraphicsContainerEvents_ElementDeletedEventHandler
Private m_GraphicsAdded As ESRI.ArcGIS.Carto.IGraphicsContainerEvents_ElementsAddedEventHandler
Private m_GraphicUpdated As ESRI.ArcGIS.Carto.IGraphicsContainerEvents_ElementUpdatedEventHandler
Public Sub New()
MyBase.m_category = "Network Analyst Samples" 'localizable text
MyBase.m_caption = "Auto Update Network Element Array Parameters" 'localizable text
MyBase.m_message = "Auto Update Network Element Array Parameters" 'localizable text
MyBase.m_toolTip = "Auto Update Network Element Array Parameters" 'localizable text
MyBase.m_name = "NASamples_AutoUpdateNetworkElementArrayParameters" 'unique id, non-localizable (e.g. "MyCategory_ArcMapCommand")
Try
'
' TODO: change bitmap name if necessary
'
Dim bitmapResourceName As String = Me.GetType().Name & ".bmp"
'MyBase.m_bitmap = New Bitmap(Me.GetType(), bitmapResourceName)
Dim pAssembly As System.Reflection.Assembly = System.Reflection.Assembly.GetAssembly(Me.GetType())
Dim pStream As System.IO.Stream = pAssembly.GetManifestResourceStream(bitmapResourceName)
MyBase.m_bitmap = CType(Image.FromStream(pStream), Bitmap)
Catch ex As Exception
System.Diagnostics.Trace.WriteLine(ex.Message, "Invalid Bitmap")
End Try
End Sub
#Region "Overridden Class Methods"
''' <summary>
''' Occurs when this command is created
''' </summary>
''' <param name="hook">Instance of the application</param>
Public Overloads Overrides Sub OnCreate(ByVal hook As Object)
If hook Is Nothing Then
Return
End If
m_application = TryCast(hook, IApplication)
m_nax = Nothing
m_naWindowEventSource = Nothing
m_mapEventSource = Nothing
m_graphicsEventSource = Nothing
m_nax = TryCast(SubsetHelperUI.GetNAXConfiguration(m_application), INetworkAnalystExtension)
End Sub
Public Overloads Overrides ReadOnly Property Enabled() As Boolean
Get
Dim naxEnabled As Boolean = False
Dim naxConfig As IExtensionConfig = TryCast(m_nax, IExtensionConfig)
If Not naxConfig Is Nothing Then
naxEnabled = naxConfig.State = esriExtensionState.esriESEnabled
End If
Dim naLayer As INALayer = Nothing
Dim nds As INetworkDataset = Nothing
If naxEnabled Then
Dim naWindow As INAWindow = m_nax.NAWindow
naLayer = naWindow.ActiveAnalysis
Dim naContext As INAContext = Nothing
If Not naLayer Is Nothing Then
naContext = naLayer.Context
End If
If Not naContext Is Nothing Then
nds = naContext.NetworkDataset
End If
End If
Dim enable As Boolean = naxEnabled AndAlso (Not naLayer Is Nothing) AndAlso (Not nds Is Nothing)
If (Not enable) AndAlso Not m_naWindowEventSource Is Nothing Then
UnWireEvents()
End If
MyBase.m_enabled = enable
Return MyBase.Enabled
End Get
End Property
''' <summary>
''' Occurs when this command is clicked
''' </summary>
Public Overloads Overrides Sub OnClick()
If Not m_naWindowEventSource Is Nothing Then
UnWireEvents()
Else
WireEvents()
End If
End Sub
Public Overloads Overrides ReadOnly Property Checked() As Boolean
Get
Return (Not m_naWindowEventSource Is Nothing)
End Get
End Property
Private Sub WireEvents()
Try
If Not m_naWindowEventSource Is Nothing Then
UnWireEvents()
End If
If (Not m_nax Is Nothing) Then
m_naWindowEventSource = TryCast((m_nax.NAWindow), INAWindow)
Else
m_naWindowEventSource = TryCast((Nothing), INAWindow)
End If
If m_naWindowEventSource Is Nothing Then
Return
End If
'Create an instance of the delegate, add it to OnActiveAnalysisChanged event
m_ActiveAnalysisChanged = New ESRI.ArcGIS.NetworkAnalystUI.INAWindowEvents_OnActiveAnalysisChangedEventHandler(AddressOf OnActiveAnalysisChanged)
AddHandler CType(m_naWindowEventSource, ESRI.ArcGIS.NetworkAnalystUI.INAWindowEvents_Event).OnActiveAnalysisChanged, m_ActiveAnalysisChanged
WireSelectionEvent()
WireGraphicsEvents()
Catch ex As Exception
Dim msg As String = SubsetHelperUI.GetFullExceptionMessage(ex)
MessageBox.Show(msg, "Wire Events")
End Try
End Sub
Private Sub UnWireEvents()
Try
If m_naWindowEventSource Is Nothing Then
Return
End If
UnWireSelectionEvent()
UnWireGraphicsEvents()
RemoveHandler CType(m_naWindowEventSource, ESRI.ArcGIS.NetworkAnalystUI.INAWindowEvents_Event).OnActiveAnalysisChanged, m_ActiveAnalysisChanged
m_naWindowEventSource = Nothing
Catch ex As Exception
Dim msg As String = SubsetHelperUI.GetFullExceptionMessage(ex)
MessageBox.Show(msg, "UnWire Events")
End Try
End Sub
Private Sub WireSelectionEvent()
Try
If m_naWindowEventSource Is Nothing Then
Return
End If
If Not m_mapEventSource Is Nothing Then
UnWireSelectionEvent()
End If
m_mapEventSource = ActiveMap
If m_mapEventSource Is Nothing Then
Return
End If
UpdateSelectionEIDArrayParameterValues()
'Create an instance of the delegate, add it to SelectionChanged event
m_ActiveViewEventsSelectionChanged = New ESRI.ArcGIS.Carto.IActiveViewEvents_SelectionChangedEventHandler(AddressOf OnActiveViewEventsSelectionChanged)
AddHandler CType(m_mapEventSource, ESRI.ArcGIS.Carto.IActiveViewEvents_Event).SelectionChanged, m_ActiveViewEventsSelectionChanged
Catch ex As Exception
Dim msg As String = SubsetHelperUI.GetFullExceptionMessage(ex)
MessageBox.Show(msg, "Wire Selection Event")
End Try
End Sub
Private Sub UnWireSelectionEvent()
Try
If m_naWindowEventSource Is Nothing Then
Return
End If
If m_mapEventSource Is Nothing Then
Return
End If
RemoveHandler CType(m_mapEventSource, ESRI.ArcGIS.Carto.IActiveViewEvents_Event).SelectionChanged, m_ActiveViewEventsSelectionChanged
m_mapEventSource = Nothing
SubsetHelperUI.ClearEIDArrayParameterValues(m_nax, SubsetHelperUI.SelectionEIDArrayBaseName)
Catch ex As Exception
Dim msg As String = SubsetHelperUI.GetFullExceptionMessage(ex)
MessageBox.Show(msg, "UnWire Selection Event")
End Try
End Sub
Private Sub WireGraphicsEvents()
Try
If m_naWindowEventSource Is Nothing Then
Return
End If
If Not m_graphicsEventSource Is Nothing Then
UnWireGraphicsEvents()
End If
Dim pActiveMap As IMap = ActiveMap
Dim graphicsLayer As IGraphicsLayer = Nothing
If Not pActiveMap Is Nothing Then
graphicsLayer = pActiveMap.BasicGraphicsLayer
End If
If Not graphicsLayer Is Nothing Then
m_graphicsEventSource = CType(graphicsLayer, IGraphicsContainer)
End If
If m_graphicsEventSource Is Nothing Then
Return
End If
UpdateGraphicsEIDArrayParameterValues()
'Create an instance of the delegate, add it to AllElementsDeleted event
m_AllGraphicsDeleted = New ESRI.ArcGIS.Carto.IGraphicsContainerEvents_AllElementsDeletedEventHandler(AddressOf OnAllGraphicsDeleted)
AddHandler CType(m_graphicsEventSource, ESRI.ArcGIS.Carto.IGraphicsContainerEvents_Event).AllElementsDeleted, m_AllGraphicsDeleted
'Create an instance of the delegate, add it to ElementAdded event
m_GraphicAdded = New ESRI.ArcGIS.Carto.IGraphicsContainerEvents_ElementAddedEventHandler(AddressOf OnGraphicAdded)
AddHandler CType(m_graphicsEventSource, ESRI.ArcGIS.Carto.IGraphicsContainerEvents_Event).ElementAdded, m_GraphicAdded
'Create an instance of the delegate, add it to ElementDeleted event
m_GraphicDeleted = New ESRI.ArcGIS.Carto.IGraphicsContainerEvents_ElementDeletedEventHandler(AddressOf OnGraphicDeleted)
AddHandler CType(m_graphicsEventSource, ESRI.ArcGIS.Carto.IGraphicsContainerEvents_Event).ElementDeleted, m_GraphicDeleted
'Create an instance of the delegate, add it to ElementsAdded event
m_GraphicsAdded = New ESRI.ArcGIS.Carto.IGraphicsContainerEvents_ElementsAddedEventHandler(AddressOf OnGraphicsAdded)
AddHandler CType(m_graphicsEventSource, ESRI.ArcGIS.Carto.IGraphicsContainerEvents_Event).ElementsAdded, m_GraphicsAdded
'Create an instance of the delegate, add it to ElementUpdated event
m_GraphicUpdated = New ESRI.ArcGIS.Carto.IGraphicsContainerEvents_ElementUpdatedEventHandler(AddressOf OnGraphicUpdated)
AddHandler CType(m_graphicsEventSource, ESRI.ArcGIS.Carto.IGraphicsContainerEvents_Event).ElementUpdated, m_GraphicUpdated
Catch ex As Exception
Dim msg As String = SubsetHelperUI.GetFullExceptionMessage(ex)
MessageBox.Show(msg, "Wire Graphics Events")
End Try
End Sub
Private Sub UnWireGraphicsEvents()
Try
If m_naWindowEventSource Is Nothing Then
Return
End If
If m_graphicsEventSource Is Nothing Then
Return
End If
RemoveHandler CType(m_graphicsEventSource, ESRI.ArcGIS.Carto.IGraphicsContainerEvents_Event).AllElementsDeleted, m_AllGraphicsDeleted
RemoveHandler CType(m_graphicsEventSource, ESRI.ArcGIS.Carto.IGraphicsContainerEvents_Event).ElementAdded, m_GraphicAdded
RemoveHandler CType(m_graphicsEventSource, ESRI.ArcGIS.Carto.IGraphicsContainerEvents_Event).ElementDeleted, m_GraphicDeleted
RemoveHandler CType(m_graphicsEventSource, ESRI.ArcGIS.Carto.IGraphicsContainerEvents_Event).ElementsAdded, m_GraphicsAdded
RemoveHandler CType(m_graphicsEventSource, ESRI.ArcGIS.Carto.IGraphicsContainerEvents_Event).ElementUpdated, m_GraphicUpdated
m_graphicsEventSource = Nothing
SubsetHelperUI.ClearEIDArrayParameterValues(m_nax, SubsetHelperUI.GraphicsEIDArrayBaseName)
Catch ex As Exception
Dim msg As String = SubsetHelperUI.GetFullExceptionMessage(ex)
MessageBox.Show(msg, "UnWire Graphics Events")
End Try
End Sub
#End Region
Private Sub UpdateSelectionEIDArrayParameterValues()
Dim map As IMap = ActiveMap
If map Is Nothing Then
Return
End If
Dim naWindow As INAWindow = m_nax.NAWindow
Dim naLayer As INALayer = Nothing
Dim naContext As INAContext = Nothing
Dim nds As INetworkDataset = Nothing
naLayer = naWindow.ActiveAnalysis
If Not naLayer Is Nothing Then
naContext = naLayer.Context
End If
If Not naContext Is Nothing Then
nds = naContext.NetworkDataset
End If
If nds Is Nothing Then
Return
End If
Dim baseName As String = SubsetHelperUI.SelectionEIDArrayBaseName
Dim vt As VarType = SubsetHelperUI.GetEIDArrayParameterType()
Dim sourceNames As List(Of String) = SubsetHelperUI.FindParameterizedSourceNames(nds, baseName, vt)
Dim oidArraysBySourceName As Dictionary(Of String, ILongArray) = SubsetHelperUI.GetOIDArraysBySourceNameFromMapSelection(map, sourceNames)
SubsetHelperUI.UpdateEIDArrayParameterValuesFromOIDArrays(m_nax, oidArraysBySourceName, baseName)
End Sub
Private Sub UpdateGraphicsEIDArrayParameterValues()
Dim graphics As IGraphicsContainer = ActiveGraphics
If graphics Is Nothing Then
Return
End If
Dim naWindow As INAWindow = m_nax.NAWindow
Dim naLayer As INALayer = Nothing
Dim naContext As INAContext = Nothing
Dim nds As INetworkDataset = Nothing
naLayer = naWindow.ActiveAnalysis
If Not naLayer Is Nothing Then
naContext = naLayer.Context
End If
If Not naContext Is Nothing Then
nds = naContext.NetworkDataset
End If
If nds Is Nothing Then
Return
End If
Dim baseName As String = SubsetHelperUI.GraphicsEIDArrayBaseName
Dim vt As VarType = SubsetHelperUI.GetEIDArrayParameterType()
Dim sourceNames As List(Of String) = SubsetHelperUI.FindParameterizedSourceNames(nds, baseName, vt)
Dim searchGeometry As IGeometry = SubsetHelperUI.GetSearchGeometryFromGraphics(graphics)
SubsetHelperUI.UpdateEIDArrayParameterValuesFromGeometry(m_nax, searchGeometry, baseName)
End Sub
Private ReadOnly Property ActiveMap() As IMap
Get
Dim doc As IDocument = m_application.Document
Dim mxdoc As IMxDocument = TryCast(doc, IMxDocument)
Return CType(mxdoc.FocusMap, IMap)
End Get
End Property
Private ReadOnly Property ActiveGraphics() As IGraphicsContainer
Get
Dim pActiveMap As IMap = ActiveMap
Dim graphics As IGraphicsContainer = Nothing
If Not pActiveMap Is Nothing Then
graphics = TryCast(pActiveMap.BasicGraphicsLayer, IGraphicsContainer)
End If
Return graphics
End Get
End Property
#Region "Event Handlers"
#Region "NAWindow Event Handlers"
Private Sub OnActiveAnalysisChanged()
If Not m_mapEventSource Is Nothing Then
WireSelectionEvent()
End If
If Not m_graphicsEventSource Is Nothing Then
WireGraphicsEvents()
End If
End Sub
#End Region
#Region "Selection Event Handler"
Private Sub OnActiveViewEventsSelectionChanged()
UpdateSelectionEIDArrayParameterValues()
End Sub
#End Region
#Region "Graphics Event Handlers"
Private Sub OnAllGraphicsDeleted()
UpdateGraphicsEIDArrayParameterValues()
End Sub
Private Sub OnGraphicAdded(ByVal element As IElement)
UpdateGraphicsEIDArrayParameterValues()
End Sub
Private Sub OnGraphicDeleted(ByVal element As IElement)
UpdateGraphicsEIDArrayParameterValues()
End Sub
Private Sub OnGraphicsAdded(ByVal elements As IElementCollection)
UpdateGraphicsEIDArrayParameterValues()
End Sub
Private Sub OnGraphicUpdated(ByVal element As IElement)
UpdateGraphicsEIDArrayParameterValues()
End Sub
#End Region
#End Region
End Class
End Namespace