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 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 List <IEvaluatedNetworkAttribute> AddScaleSubsetAttributes(IDENetworkDataset deNet) { List <IEvaluatedNetworkAttribute> scaleSubsetAttributes = new List <IEvaluatedNetworkAttribute>(); IArray netAttributesArray = deNet.Attributes; List <int> baseIndexes = SubsetHelper.FindAttributeIndexes(netAttributesArray, esriNetworkAttributeUsageType.esriNAUTCost, esriNetworkAttributeDataType.esriNADTDouble, true, false); List <INetworkAttribute2> baseNetAttributes = SubsetHelper.FindAttributes(netAttributesArray, baseIndexes); foreach (INetworkAttribute2 baseNetAttribute in baseNetAttributes) { scaleSubsetAttributes.Add(AddScaleSubsetAttribute(deNet, baseNetAttribute)); } return(scaleSubsetAttributes); }
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 static void RemoveFilterSubsetAttribute(IDENetworkDataset deNet) { IArray netAttributes = SubsetHelper.RemoveAttributesByPrefix(deNet.Attributes, "Filter"); deNet.Attributes = netAttributes; }
public static void RemoveScaleSubsetAttributes(IDENetworkDataset deNet) { IArray netAttributes = SubsetHelper.RemoveAttributesByPrefix(deNet.Attributes, BaseParameterName); deNet.Attributes = netAttributes; }