About the StreetMap routing Sample
[C#]
RestrictionsForm.cs
using System; using System.Windows.Forms; using ESRI.ArcGIS.DataSourcesFile; namespace RoutingSample { public partial class RestrictionsForm { #region Public methods public RestrictionsForm() : base() { //This call is required by the Windows Form Designer. InitializeComponent(); m_arrRestrictions = new System.Collections.ArrayList(); } // Receives restriction from route and inits controls public void Init(ISMRouter objRouter) { // clear controls ClearAll(); try { this.SuspendLayout(); m_pnlRestrictions.SuspendLayout(); // Get Net attributes ISMNetAttributesCollection objAttrColl = null; objAttrColl = objRouter.NetAttributes; // attributes count int nCount = objAttrColl.Count; for (int i = 0; i < nCount; i++) { // get attribute SMNetAttribute objAttr = null; objAttr = objAttrColl.get_Item(i); if ((objAttr) is ISMNetAttribute2) { ISMNetAttribute2 objAttr2 = null; objAttr2 = objAttr as ISMNetAttribute2; // If Usage type is restriction esriSMNetAttributeUsageType eType = 0; eType = objAttr2.UsageType; if (eType == esriSMNetAttributeUsageType.esriSMNAUTRestrictionBoolean || eType == esriSMNetAttributeUsageType.esriSMNAUTRestrictionMinAllowed || eType == esriSMNetAttributeUsageType.esriSMNAUTRestrictionMaxAllowed) { // create control for restriction RestrictControl ctrlRestriction = null; ctrlRestriction = new RestrictControl(); // create restriction info RestrictionsInfo objRestriction = null; objRestriction = new RestrictionsInfo(); // Init info objRestriction.m_objAttr2 = objAttr2; objRestriction.m_strName = objAttr2.Name; objRestriction.m_bChecked = false; objRestriction.m_eType = RestrictControl.ERSType.eStrict; objRestriction.m_bUseParameter = false; if (eType != esriSMNetAttributeUsageType.esriSMNAUTRestrictionBoolean) { objRestriction.m_bUseParameter = true; objRestriction.m_dParameter = 0.0; } // Add controls (reverse order) ctrlRestriction.Dock = DockStyle.Top; m_pnlRestrictions.Controls.Add(ctrlRestriction); m_arrRestrictions.Add(objRestriction); } } } // Set restriction info to controls UpdateControls(); } catch (Exception ex) { ClearAll(); } finally { m_pnlRestrictions.ResumeLayout(false); this.ResumeLayout(false); } } // Setups router restrictions public void SetupRouter(ISMRouter objRouter) { ISMRouterSetup2 objRouterSetup = null; objRouterSetup = objRouter as ISMRouterSetup2; try { // Clear all previous changes objRouterSetup.ClearAllRestrictions(); foreach (RestrictionsInfo objInfo in m_arrRestrictions) { if (objInfo.m_bChecked) { // New restriction ISMRestriction objRestr = new SMRestrictionClass(); objRestr.Attribute = objInfo.m_objAttr2 as SMNetAttribute; // restriction type if (objInfo.m_eType == RestrictControl.ERSType.eStrict) objRestr.Type = esriSMRestrictionType.esriSMRTStrict; else objRestr.Type = esriSMRestrictionType.esriSMRTRelaxed; // Parameter if (objInfo.m_bUseParameter) objRestr.Param = objInfo.m_dParameter; // Add restriction to router objRouterSetup.SetRestriction(objRestr as SMRestriction); } } } catch (Exception ex) { objRouterSetup.ClearAllRestrictions(); MessageBox.Show("Cannot set restrictions."); } } #endregion #region Private methods // Clears all private void ClearAll() { m_arrRestrictions.Clear(); m_pnlRestrictions.Controls.Clear(); } // Updates controls values private void UpdateControls() { int nCount = m_arrRestrictions.Count; for (int i = 0; i < nCount; i++) { RestrictControl ctrlRestriction = null; ctrlRestriction = m_pnlRestrictions.Controls[nCount - 1 - i] as RestrictControl; ctrlRestriction.TabIndex = i; RestrictionsInfo objRestriction = m_arrRestrictions[i] as RestrictionsInfo; ctrlRestriction.RSName = objRestriction.m_strName; ctrlRestriction.RSChecked = objRestriction.m_bChecked; ctrlRestriction.RSType = objRestriction.m_eType; ctrlRestriction.RSUseParameter = objRestriction.m_bUseParameter; if (objRestriction.m_bUseParameter) ctrlRestriction.RSParameter = objRestriction.m_dParameter; } } // Updates restrictions info private void UpdateInfo() { int nCount = m_arrRestrictions.Count; for (int i = 0; i < nCount; i++) { RestrictControl ctrlRestriction = null; ctrlRestriction = m_pnlRestrictions.Controls[nCount - 1 - i] as RestrictControl; RestrictionsInfo objRestriction = m_arrRestrictions[i] as RestrictionsInfo; objRestriction.m_strName = ctrlRestriction.RSName; objRestriction.m_bChecked = ctrlRestriction.RSChecked; objRestriction.m_eType = ctrlRestriction.RSType; if (objRestriction.m_bUseParameter) objRestriction.m_dParameter = ctrlRestriction.RSParameter; } } // Updates restrictions info from controls private void m_btnOK_Click(object sender, System.EventArgs e) { UpdateInfo(); } // Updates controls from restrictions info private void m_btnCancel_Click(object sender, System.EventArgs e) { UpdateControls(); } #endregion #region Private members // Restrictions data for Router. // NOTE: Restriction controls in reverse order private System.Collections.ArrayList m_arrRestrictions; #endregion } // Info for one restriction public class RestrictionsInfo { public ISMNetAttribute2 m_objAttr2; public string m_strName; public bool m_bChecked; public RestrictControl.ERSType m_eType; public bool m_bUseParameter; public double m_dParameter; } } //end of root namespace
[Visual Basic .NET]
RestrictionsForm.vb
Imports System.Windows.Forms Imports ESRI.ArcGIS.DataSourcesFile Public Class RestrictionsForm #Region "Public methods" Public Sub New() MyBase.New() 'This call is required by the Windows Form Designer. InitializeComponent() m_arrRestrictions = New System.Collections.ArrayList End Sub ' Receives restriction from route and inits controls Public Sub Init(ByVal objRouter As ISMRouter) ' clear controls ClearAll() Try Me.SuspendLayout() m_pnlRestrictions.SuspendLayout() ' Get Net attributes Dim objAttrColl As ISMNetAttributesCollection objAttrColl = objRouter.NetAttributes ' attributes count Dim nCount As Integer = objAttrColl.Count For i As Integer = 0 To nCount - 1 ' get attribute Dim objAttr As ISMNetAttribute objAttr = objAttrColl.Item(i) If TypeOf (objAttr) Is ISMNetAttribute2 Then Dim objAttr2 As ISMNetAttribute2 objAttr2 = objAttr ' If Usage type is restriction Dim eType As esriSMNetAttributeType eType = objAttr2.UsageType If eType = esriSMNetAttributeUsageType.esriSMNAUTRestrictionBoolean Or _ eType = esriSMNetAttributeUsageType.esriSMNAUTRestrictionMinAllowed Or _ eType = esriSMNetAttributeUsageType.esriSMNAUTRestrictionMaxAllowed Then ' create control for restriction Dim ctrlRestriction As RestrictControl ctrlRestriction = New RestrictControl ' create restriction info Dim objRestriction As RestrictionsInfo objRestriction = New RestrictionsInfo ' Init info objRestriction.m_objAttr2 = objAttr2 objRestriction.m_strName = objAttr2.Name objRestriction.m_bChecked = False objRestriction.m_eType = RestrictControl.ERSType.eStrict objRestriction.m_bUseParameter = False If eType <> esriSMNetAttributeUsageType.esriSMNAUTRestrictionBoolean Then objRestriction.m_bUseParameter = True objRestriction.m_dParameter = 0.0 End If ' Add controls (reverse order) ctrlRestriction.Dock = DockStyle.Top m_pnlRestrictions.Controls.Add(ctrlRestriction) m_arrRestrictions.Add(objRestriction) End If End If Next ' Set restriction info to controls UpdateControls() Catch ex As Exception ClearAll() Finally m_pnlRestrictions.ResumeLayout(False) Me.ResumeLayout(False) End Try End Sub ' Setups router restrictions Public Sub SetupRouter(ByVal objRouter As ISMRouter) Dim objRouterSetup As ISMRouterSetup2 objRouterSetup = objRouter Try ' Clear all previous changes objRouterSetup.ClearAllRestrictions() For Each objInfo As RestrictionsInfo In m_arrRestrictions If objInfo.m_bChecked Then ' New restriction Dim objRestr As ISMRestriction objRestr = New SMRestrictionClass objRestr.Attribute = CType(objInfo.m_objAttr2, SMNetAttribute) ' restriction type If objInfo.m_eType = RestrictControl.ERSType.eStrict Then objRestr.Type = esriSMRestrictionType.esriSMRTStrict Else objRestr.Type = esriSMRestrictionType.esriSMRTRelaxed End If ' Paramter If objInfo.m_bUseParameter Then objRestr.Param = objInfo.m_dParameter End If ' Add restriction to router objRouterSetup.SetRestriction(objRestr) End If Next Catch ex As Exception objRouterSetup.ClearAllRestrictions() MessageBox.Show("Cannot set restrictions.") End Try End Sub #End Region #Region "Private methods" ' Clears all Private Sub ClearAll() m_arrRestrictions.Clear() m_pnlRestrictions.Controls.Clear() End Sub ' Updates controls values Private Sub UpdateControls() Dim nCount As Integer = m_arrRestrictions.Count For i As Integer = 0 To nCount - 1 Dim ctrlRestriction As RestrictControl ctrlRestriction = CType(m_pnlRestrictions.Controls.Item(nCount - 1 - i), RestrictControl) ctrlRestriction.TabIndex = i Dim objRestriction As RestrictionsInfo objRestriction = CType(m_arrRestrictions(i), RestrictionsInfo) ctrlRestriction.RSName = objRestriction.m_strName ctrlRestriction.RSChecked = objRestriction.m_bChecked ctrlRestriction.RSType = objRestriction.m_eType ctrlRestriction.RSUseParameter = objRestriction.m_bUseParameter If m_arrRestrictions(i).m_bUseParameter Then ctrlRestriction.RSParameter = objRestriction.m_dParameter End If Next End Sub ' Updates restrictions info Private Sub UpdateInfo() Dim nCount As Integer = m_arrRestrictions.Count For i As Integer = 0 To nCount - 1 Dim ctrlRestriction As RestrictControl ctrlRestriction = CType(m_pnlRestrictions.Controls.Item(nCount - 1 - i), RestrictControl) Dim objRestriction As RestrictionsInfo objRestriction = CType(m_arrRestrictions(i), RestrictionsInfo) objRestriction.m_strName = ctrlRestriction.RSName objRestriction.m_bChecked = ctrlRestriction.RSChecked objRestriction.m_eType = ctrlRestriction.RSType If m_arrRestrictions(i).m_bUseParameter Then objRestriction.m_dParameter = ctrlRestriction.RSParameter End If Next End Sub ' Updates restrictions info from controls Private Sub m_btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles m_btnOK.Click UpdateInfo() End Sub ' Updates controls from restrictions info Private Sub m_btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles m_btnCancel.Click UpdateControls() End Sub #End Region #Region "Private members" ' Restrictions data for Router. ' NOTE: Restriction controls in reverse order Private m_arrRestrictions As System.Collections.ArrayList #End Region End Class ' Info for one restriction Public Class RestrictionsInfo Public m_objAttr2 As ISMNetAttribute2 Public m_strName As String Public m_bChecked As Boolean Public m_eType As RestrictControl.ERSType Public m_bUseParameter As Boolean Public m_dParameter As Double End Class