public void Refresh() { // This method is called internally during a solve operation immediately prior to performing the actual solve // This gives us an opportunity to update our evaluator's internal state based on parameter values m_scaleFactor = 1; m_countSourceEIDs = 0; m_sourceEIDHashTable = new Dictionary <int, int>(); INetworkAttribute2 netAttribute2 = m_networkAttribute as INetworkAttribute2; IArray netAttributeParams = netAttribute2.Parameters; // Parameters: "ScaleSubset_Factor", "ScaleSubset_eids_<SourceName>" string prefix = BaseParameterName + "_"; string paramScaleFactorName = prefix + "Factor"; string paramEIDsName = prefix + "eids_" + m_networkSource.Name; int nParamScaleFactor = SubsetHelper.FindParameter(netAttributeParams, paramScaleFactorName); int nParamEIDs = SubsetHelper.FindParameter(netAttributeParams, paramEIDsName); object value; INetworkAttributeParameter paramScaleFactor; INetworkAttributeParameter paramEIDs; if (nParamScaleFactor >= 0) { paramScaleFactor = netAttributeParams.get_Element(nParamScaleFactor) as INetworkAttributeParameter; value = paramScaleFactor.Value; if (value != null) { m_scaleFactor = (double)value; } } if (nParamEIDs >= 0) { paramEIDs = netAttributeParams.get_Element(nParamEIDs) as INetworkAttributeParameter; value = paramEIDs.Value as int[]; if (value != null) { int eid; int[] rgEIDs; rgEIDs = (int[])value; int lb = rgEIDs.GetLowerBound(0); int ub = rgEIDs.GetUpperBound(0); for (int i = lb; i <= ub; ++i) { ++m_countSourceEIDs; eid = rgEIDs[i]; m_sourceEIDHashTable.Add(eid, eid); } } } }
public static List <INetworkAttribute2> FindAttributes(IArray netAttributesArray, List <int> netAttributeIndexes) { List <INetworkAttribute2> netAttributes = new List <INetworkAttribute2>(); foreach (int i in netAttributeIndexes) { INetworkAttribute2 netAttribute = netAttributesArray.get_Element(i) as INetworkAttribute2; if (netAttribute != null) { netAttributes.Add(netAttribute); } } return(netAttributes); }
public void Initialize(INetworkDataset networkDataset, IDENetworkDataset dataElement, INetworkSource source, IEvaluatedNetworkAttribute evaluatedNetworkAttribute) { // Cache the network dataset geodatabase path m_workspace_path_name = ((IDataset)networkDataset).Workspace.PathName; m_UseSpecificDates = false; m_CacheOnEverySolve = false; m_RidingABicycle = false; m_UsingAWheelchair = false; m_networkAttribute = evaluatedNetworkAttribute as INetworkAttribute2; CheckForVerboseLogging(); if (m_VerboseLogging) { WriteToOutputFile(m_LogFile, "Initialize" + Environment.NewLine + "m_workspace_path_name: " + m_workspace_path_name + Environment.NewLine + " m_UseSpecificDates defaults to: " + m_UseSpecificDates); } }
public static void ResetFilterSubsetParameters(INetworkAttribute2 netAttribute, List <string> netSourceNames) { IArray netParams = new ESRI.ArcGIS.esriSystem.ArrayClass(); INetworkAttributeParameter netParam = null; object paramValue = null; netParam = new NetworkAttributeParameterClass(); paramValue = true; string paramName = ""; paramName = BaseParameterName; paramName += "_Restrict"; netParam.Name = paramName; netParam.VarType = (int)VarType.Bool; netParam.Value = paramValue; netParam.DefaultValue = paramValue; netParams.Add(netParam); netParam = new NetworkAttributeParameterClass(); paramValue = 1; foreach (string netSourceName in netSourceNames) { netParam = new NetworkAttributeParameterClass(); paramValue = null; paramName = BaseParameterName; paramName += "_EIDs_"; paramName += netSourceName; netParam.Name = paramName; netParam.VarType = (int)(VarType.Array | VarType.Integer); netParam.Value = paramValue; netParam.DefaultValue = paramValue; netParams.Add(netParam); } //does not preserve existing parameters if any netAttribute.Parameters = netParams; }
public static IEvaluatedNetworkAttribute AddFilterSubsetAttribute(IDENetworkDataset deNet) { IArray netAttributes = deNet.Attributes; IEvaluatedNetworkAttribute netAttribute = new EvaluatedNetworkAttributeClass() as IEvaluatedNetworkAttribute; netAttribute.Name = BaseParameterName; netAttribute.UsageType = esriNetworkAttributeUsageType.esriNAUTRestriction; netAttribute.DataType = esriNetworkAttributeDataType.esriNADTBoolean; netAttribute.Units = esriNetworkAttributeUnits.esriNAUUnknown; INetworkAttribute2 netAttribute2 = netAttribute as INetworkAttribute2; netAttribute2.UseByDefault = true; List <INetworkSource> allNetSources = SubsetHelper.GetSourceList(deNet.Sources); List <INetworkSource> netSources = SubsetHelper.GetSourceList(allNetSources, esriNetworkElementType.esriNETEdge); List <string> netSourceNames = SubsetHelper.GetSourceNames(netSources); ResetFilterSubsetParameters((INetworkAttribute2)netAttribute, netSourceNames); bool supportTurns = deNet.SupportsTurns; //default evaluators SubsetHelper.SetDefaultEvaluator(netAttribute, false, esriNetworkElementType.esriNETEdge); SubsetHelper.SetDefaultEvaluator(netAttribute, false, esriNetworkElementType.esriNETJunction); if (supportTurns) { SubsetHelper.SetDefaultEvaluator(netAttribute, false, esriNetworkElementType.esriNETTurn); } //sourced evaluators foreach (INetworkSource netSource in netSources) { SubsetHelper.SetEvaluators(netAttribute, netSource, typeof(FilterSubsetEvaluator)); } netAttributes.Add(netAttribute); deNet.Attributes = netAttributes; return(netAttribute); }
public void Initialize(INetworkDataset networkDataset, IDENetworkDataset dataElement, INetworkSource source, IEvaluatedNetworkAttribute evaluatedNetworkAttribute) { // Cache the network dataset geodatabase path m_workspace_path_name = ((IDataset)networkDataset).Workspace.PathName; m_UseSpecificDates = false; m_CacheOnEverySolve = false; m_RidingABicycle = false; m_UsingAWheelchair = false; m_networkAttribute = evaluatedNetworkAttribute as INetworkAttribute2; CheckForVerboseLogging(); if (m_VerboseLogging) WriteToOutputFile(m_LogFile, "Initialize" + Environment.NewLine + "m_workspace_path_name: " + m_workspace_path_name + Environment.NewLine + " m_UseSpecificDates defaults to: " + m_UseSpecificDates); }
public static List <int> FindAttributeIndexes(IArray netAttributes, esriNetworkAttributeUsageType usage, esriNetworkAttributeDataType dataType, bool searchTimeUnits, bool ignoreDataType) { INetworkAttribute2 netAttribute = null; esriNetworkAttributeUnits units = esriNetworkAttributeUnits.esriNAUUnknown; bool isSearchUnits = false; bool isUnknownUnits = false; bool isTimeUnits = false; List <int> netAttributeIndexes = new List <int>(); int count = netAttributes.Count; for (int i = 0; i < count; ++i) { netAttribute = netAttributes.get_Element(i) as INetworkAttribute2; if (netAttribute == null) { continue; } if (netAttribute.UsageType == usage && (ignoreDataType || netAttribute.DataType == dataType)) { units = netAttribute.Units; isSearchUnits = false; if (usage != esriNetworkAttributeUsageType.esriNAUTCost) { isSearchUnits = true; } else { isUnknownUnits = false; if (units == esriNetworkAttributeUnits.esriNAUUnknown) { isUnknownUnits = true; } isTimeUnits = false; if (!isUnknownUnits) { if (units == esriNetworkAttributeUnits.esriNAUMinutes || units == esriNetworkAttributeUnits.esriNAUSeconds || units == esriNetworkAttributeUnits.esriNAUHours || units == esriNetworkAttributeUnits.esriNAUDays) { isTimeUnits = true; } if (searchTimeUnits) { isSearchUnits = isTimeUnits; } else { isSearchUnits = !isTimeUnits; } } } if (isSearchUnits) { netAttributeIndexes.Add(i); } } } return(netAttributeIndexes); }
public static void ResetScaleSubsetParameters(INetworkAttribute2 netAttribute, List<string> netSourceNames) { IArray netParams = new ESRI.ArcGIS.esriSystem.ArrayClass(); INetworkAttributeParameter netParam = null; object paramValue = null; string paramName = ""; netParam = new NetworkAttributeParameterClass(); paramValue = 1; paramName = BaseParameterName; paramName += "_Factor"; netParam.Name = paramName; netParam.VarType = (int)VarType.Double; netParam.Value = paramValue; netParam.DefaultValue = paramValue; netParams.Add(netParam); foreach (string netSourceName in netSourceNames) { netParam = new NetworkAttributeParameterClass(); paramValue = null; paramName = BaseParameterName; paramName += "_eids_"; paramName += netSourceName; netParam.Name = paramName; netParam.VarType = (int)(VarType.Array | VarType.Integer); netParam.Value = paramValue; netParam.DefaultValue = paramValue; netParams.Add(netParam); } //does not preserve existing parameters if any netAttribute.Parameters = netParams; }
public static IEvaluatedNetworkAttribute AddScaleSubsetAttribute(IDENetworkDataset deNet, INetworkAttribute2 baseNetAttribute) { if (baseNetAttribute == null) return null; if (baseNetAttribute.UsageType != esriNetworkAttributeUsageType.esriNAUTCost) return null; IArray netAttributes = deNet.Attributes; IEvaluatedNetworkAttribute netAttribute = new EvaluatedNetworkAttributeClass() as IEvaluatedNetworkAttribute; string netAttributeName = BaseParameterName; netAttributeName += "_"; netAttributeName += baseNetAttribute.Name; netAttribute.Name = netAttributeName; netAttribute.UsageType = baseNetAttribute.UsageType; netAttribute.DataType = baseNetAttribute.DataType; netAttribute.Units = baseNetAttribute.Units; List<INetworkSource> allNetSources = SubsetHelper.GetSourceList(deNet.Sources); List<INetworkSource> netSources = SubsetHelper.GetSourceList(allNetSources, esriNetworkElementType.esriNETEdge); List<string> netSourceNames = SubsetHelper.GetSourceNames(netSources); ResetScaleSubsetParameters((INetworkAttribute2)netAttribute, netSourceNames); bool supportTurns = deNet.SupportsTurns; //default evaluators SubsetHelper.SetDefaultEvaluator(netAttribute, 0, esriNetworkElementType.esriNETEdge); SubsetHelper.SetDefaultEvaluator(netAttribute, 0, esriNetworkElementType.esriNETJunction); if (supportTurns) SubsetHelper.SetDefaultEvaluator(netAttribute, 0, esriNetworkElementType.esriNETTurn); //sourced evaluators foreach (INetworkSource netSource in netSources) SubsetHelper.SetEvaluators(netAttribute, netSource, typeof(ScaleSubsetEvaluator)); netAttributes.Add(netAttribute); deNet.Attributes = netAttributes; return netAttribute; }
public static IEvaluatedNetworkAttribute AddScaleSubsetAttribute(IDENetworkDataset deNet, INetworkAttribute2 baseNetAttribute) { if (baseNetAttribute == null) { return(null); } if (baseNetAttribute.UsageType != esriNetworkAttributeUsageType.esriNAUTCost) { return(null); } IArray netAttributes = deNet.Attributes; IEvaluatedNetworkAttribute netAttribute = new EvaluatedNetworkAttributeClass() as IEvaluatedNetworkAttribute; string netAttributeName = BaseParameterName; netAttributeName += "_"; netAttributeName += baseNetAttribute.Name; netAttribute.Name = netAttributeName; netAttribute.UsageType = baseNetAttribute.UsageType; netAttribute.DataType = baseNetAttribute.DataType; netAttribute.Units = baseNetAttribute.Units; List <INetworkSource> allNetSources = SubsetHelper.GetSourceList(deNet.Sources); List <INetworkSource> netSources = SubsetHelper.GetSourceList(allNetSources, esriNetworkElementType.esriNETEdge); List <string> netSourceNames = SubsetHelper.GetSourceNames(netSources); ResetScaleSubsetParameters((INetworkAttribute2)netAttribute, netSourceNames); bool supportTurns = deNet.SupportsTurns; //default evaluators SubsetHelper.SetDefaultEvaluator(netAttribute, 0, esriNetworkElementType.esriNETEdge); SubsetHelper.SetDefaultEvaluator(netAttribute, 0, esriNetworkElementType.esriNETJunction); if (supportTurns) { SubsetHelper.SetDefaultEvaluator(netAttribute, 0, esriNetworkElementType.esriNETTurn); } //sourced evaluators foreach (INetworkSource netSource in netSources) { SubsetHelper.SetEvaluators(netAttribute, netSource, typeof(ScaleSubsetEvaluator)); } netAttributes.Add(netAttribute); deNet.Attributes = netAttributes; return(netAttribute); }
public static void UpdateEIDArrayParameterValuesFromEIDLists(INetworkAnalystExtension nax, Dictionary <string, List <int> > eidsBySourceName, string baseName) { if (nax == null) { return; } bool naxEnabled = false; IExtensionConfig naxConfig = nax as IExtensionConfig; naxEnabled = naxConfig.State == esriExtensionState.esriESEnabled; if (!naxEnabled) { return; } INAWindow naWindow = 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; } IDatasetComponent dsComponent = nds as IDatasetComponent; IDENetworkDataset deNet = dsComponent.DataElement as IDENetworkDataset; INASolver naSolver = naContext.Solver; INASolverSettings2 naSolverSettings2 = naSolver as INASolverSettings2; if (naSolverSettings2 == null) { return; } string prefix = GetEIDArrayPrefixFromBaseName(baseName); VarType vt = GetEIDArrayParameterType(); int cAttributes = nds.AttributeCount; for (int a = 0; a < cAttributes; ++a) { INetworkAttribute2 netAttribute = nds.get_Attribute(a) as INetworkAttribute2; IArray netParams = netAttribute.Parameters; int cParams = netParams.Count; object paramValue; for (int p = 0; p < cParams; ++p) { INetworkAttributeParameter param = netParams.get_Element(p) as INetworkAttributeParameter; if (param.VarType != (int)vt) { continue; } string paramName = param.Name; string sourceName = GetSourceNameFromParameterName(prefix, paramName); if (sourceName.Length == 0) { continue; } List <int> eids = null; if (eidsBySourceName.TryGetValue(sourceName, out eids)) { if (eids != null) { if (eids.Count == 0) { eids = null; } } } paramValue = (eids != null) ? eids.ToArray() : null; naSolverSettings2.set_AttributeParameterValue(netAttribute.Name, param.Name, paramValue); } } }