/// <summary> /// Sets the super flag location. /// </summary> private void SetSuperFlagLocation() { try { // QI all the network analysis interfaces INetworkAnalysisExt netAnalyst = (INetworkAnalysisExt)this.UtilityNetAnalysisExt; INetworkAnalysisExtFlags flags = (INetworkAnalysisExtFlags)this.UtilityNetAnalysisExt; //// INetworkAnalysisExtBarriers barriers = (INetworkAnalysisExtBarriers)this.UtilityNetAnalysisExt; if (flags.EdgeFlagCount != 0 & flags.JunctionFlagCount != 1) { throw new CustomExceptions.CountPathFlagException("Invalid initial flag configuration.", flags.JunctionFlagCount, flags.EdgeFlagCount); } IJunctionFlagDisplay junctionFlagDisplay = flags.get_JunctionFlag(0); this.SuperFlag = junctionFlagDisplay; IGeometry geometry = ((IFlagDisplay)junctionFlagDisplay).Geometry; byte[] wkb = ConvertGeometryToWKB(geometry); Properties.Settings.Default.CountPathSuperFlagWKB = wkb; Properties.Settings.Default.Save(); return; } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex.StackTrace); throw; } }
// // returns a reference to the current logical network // private INetwork GetCurrentNetwork() { // get the current network from the Utility Network Analysis extension INetworkAnalysisExt nax = m_utilNetExt as INetworkAnalysisExt; IGeometricNetwork geomNet = nax.CurrentNetwork; // get the geometric network's logical network INetwork net = geomNet.Network; return(net); }
public void SetResults(IEnumNetEID edgeEnumNetEID, IEnumNetEID juncEnumNetEID, bool asSelection, INetworkAnalysisExt netAnalExt, Color namedColor) { INetworkAnalysisExtResults netAnalResults = (INetworkAnalysisExtResults)_netAnalExt; IRgbColor rgbColor = new RgbColorClass(); rgbColor.Red = namedColor.R; rgbColor.Blue = namedColor.B; rgbColor.Green = namedColor.G; netAnalResults.ResultsAsSelection = asSelection; netAnalResults.DrawComplex = true; INetworkAnalysisExtResultColor netAnalColor = (INetworkAnalysisExtResultColor)netAnalExt; netAnalColor.Color = rgbColor; netAnalResults.SetResults(juncEnumNetEID, edgeEnumNetEID); }
public ITraceFlowSolverGEN UTIL_coreTraceSetup() { // get the current network's logical network INetworkAnalysisExt nax = m_utilNetExt as INetworkAnalysisExt; INetwork net = nax.CurrentNetwork.Network; // create a new TraceFlowSolver object and // set the source network for the solve ITraceFlowSolverGEN tfs = new TraceFlowSolverClass() as ITraceFlowSolverGEN; INetSolver netSolver = tfs as INetSolver; netSolver.SourceNetwork = net; // get the barriers for the network, using the element barriers and // selection barriers that have been added using the user interface INetworkAnalysisExtBarriers naxBarriers = m_utilNetExt as INetworkAnalysisExtBarriers; INetElementBarriers juncElemBarriers, edgeElemBarriers; naxBarriers.CreateElementBarriers(out juncElemBarriers, out edgeElemBarriers); ISelectionSetBarriers selSetBarriers; naxBarriers.CreateSelectionBarriers(out selSetBarriers); netSolver.set_ElementBarriers(esriElementType.esriETJunction, juncElemBarriers); netSolver.set_ElementBarriers(esriElementType.esriETEdge, edgeElemBarriers); netSolver.SelectionSetBarriers = selSetBarriers; // set up the disabled layers for the network solver // for each feature layer belonging to this network, determine if it is // enabled or disabled; if it's disabled, then notify the network solver for (int i = 0; i < nax.FeatureLayerCount; i++) { IFeatureLayer featureLayer = nax.get_FeatureLayer(i); if (naxBarriers.GetDisabledLayer(featureLayer)) { netSolver.DisableElementClass(featureLayer.FeatureClass.FeatureClassID); } } INetworkAnalysisExtWeightFilter naxWeightFilter = m_utilNetExt as INetworkAnalysisExtWeightFilter; INetSolverWeightsGEN netSolverWeights = netSolver as INetSolverWeightsGEN; INetSchema netSchema = net as INetSchema; // create the junction weight filter int juncFilterRangeCount = naxWeightFilter.get_FilterRangeCount(esriElementType.esriETJunction); if (juncFilterRangeCount > 0) { INetWeight netWeight = netSchema.get_WeightByName(naxWeightFilter.JunctionWeightFilterName); netSolverWeights.JunctionFilterWeight = netWeight; esriWeightFilterType juncWeightFilterType; bool juncApplyNotOperator; naxWeightFilter.GetFilterType(esriElementType.esriETJunction, out juncWeightFilterType, out juncApplyNotOperator); netSolverWeights.SetFilterType(esriElementType.esriETJunction, juncWeightFilterType, juncApplyNotOperator); object[] juncFromValues = new object[juncFilterRangeCount]; object[] juncToValues = new object[juncFilterRangeCount]; for (int i = 0; i < juncFilterRangeCount; i++) { naxWeightFilter.GetFilterRange(esriElementType.esriETJunction, i, out juncFromValues[i], out juncToValues[i]); } netSolverWeights.SetFilterRanges(esriElementType.esriETJunction, ref juncFromValues, ref juncToValues); } // create the edge weight filters int edgeFilterRangeCount = naxWeightFilter.get_FilterRangeCount(esriElementType.esriETEdge); if (edgeFilterRangeCount > 0) { INetWeight fromToNetWeight = netSchema.get_WeightByName(naxWeightFilter.FromToEdgeWeightFilterName); netSolverWeights.FromToEdgeFilterWeight = fromToNetWeight; INetWeight toFromNetWeight = netSchema.get_WeightByName(naxWeightFilter.ToFromEdgeWeightFilterName); netSolverWeights.ToFromEdgeFilterWeight = toFromNetWeight; esriWeightFilterType edgeWeightFilterType; bool edgeApplyNotOperator; naxWeightFilter.GetFilterType(esriElementType.esriETEdge, out edgeWeightFilterType, out edgeApplyNotOperator); netSolverWeights.SetFilterType(esriElementType.esriETEdge, edgeWeightFilterType, edgeApplyNotOperator); object[] edgeFromValues = new object[edgeFilterRangeCount]; object[] edgeToValues = new object[edgeFilterRangeCount]; for (int i = 0; i < edgeFilterRangeCount; i++) { naxWeightFilter.GetFilterRange(esriElementType.esriETEdge, i, out edgeFromValues[i], out edgeToValues[i]); } netSolverWeights.SetFilterRanges(esriElementType.esriETEdge, ref edgeFromValues, ref edgeToValues); } INetworkAnalysisExtFlags naxFlags = m_utilNetExt as INetworkAnalysisExtFlags; // assign the edge flags to the network solver int edgeFlagCount = naxFlags.EdgeFlagCount; if (edgeFlagCount > 0) { IEdgeFlag[] edgeFlags = new IEdgeFlag[edgeFlagCount]; for (int i = 0; i < edgeFlagCount; i++) { IEdgeFlagDisplay edgeFlagDisplay = naxFlags.get_EdgeFlag(i); IFlagDisplay flagDisplay = edgeFlagDisplay as IFlagDisplay; IEdgeFlag edgeFlag = new EdgeFlagClass(); edgeFlag.Position = Convert.ToSingle(edgeFlagDisplay.Percentage); INetFlag netFlag = edgeFlag as INetFlag; netFlag.UserClassID = flagDisplay.FeatureClassID; netFlag.UserID = flagDisplay.FID; netFlag.UserSubID = flagDisplay.SubID; edgeFlags[i] = edgeFlag; } tfs.PutEdgeOrigins(ref edgeFlags); } // assign the junction flags to the network solver int juncFlagCount = naxFlags.JunctionFlagCount; if (juncFlagCount > 0) { IJunctionFlag[] juncFlags = new IJunctionFlag[juncFlagCount]; for (int i = 0; i < juncFlagCount; i++) { IJunctionFlagDisplay juncFlagDisplay = naxFlags.get_JunctionFlag(i); IFlagDisplay flagDisplay = juncFlagDisplay as IFlagDisplay; IJunctionFlag juncFlag = new JunctionFlagClass(); INetFlag netFlag = juncFlag as INetFlag; netFlag.UserClassID = flagDisplay.FeatureClassID; netFlag.UserID = flagDisplay.FID; netFlag.UserSubID = flagDisplay.SubID; juncFlags[i] = juncFlag; } tfs.PutJunctionOrigins(ref juncFlags); } // set the option for tracing on indeterminate flow ITraceTasks traceTasks = m_utilNetExt as ITraceTasks; tfs.TraceIndeterminateFlow = traceTasks.TraceIndeterminateFlow; return(tfs); }
void ITraceTask.OnTraceExecution() { // prepare the network solver ITraceFlowSolverGEN tfs = UTIL_coreTraceSetup(); if (tfs == null) { return; } // perform the trace task IEnumNetEID resultJuncs, resultEdges; ITraceTasks traceTasks = m_utilNetExt as ITraceTasks; esriFlowElements flowElements = traceTasks.TraceFlowElements; if (traceTasks.TraceEnds) { // find the features stopping the trace tfs.FindFlowEndElements(esriFlowMethod.esriFMUpstream, flowElements, out resultJuncs, out resultEdges); } else { // return the traced features tfs.FindFlowElements(esriFlowMethod.esriFMUpstream, flowElements, out resultJuncs, out resultEdges); } // copy the results to the class level INetworkAnalysisExt nax = m_utilNetExt as INetworkAnalysisExt; if (resultJuncs == null) { // junctions were not returned -- create an empty enumeration IEnumNetEIDBuilder eidBuilder = new EnumNetEIDArrayClass(); eidBuilder.Network = nax.CurrentNetwork.Network; eidBuilder.ElementType = esriElementType.esriETJunction; m_resultJunctions = eidBuilder as IEnumNetEID; } else { m_resultJunctions = resultJuncs; } if (resultEdges == null) { // edges were not returned -- create an empty enumeration IEnumNetEIDBuilder eidBuilder = new EnumNetEIDArrayClass(); eidBuilder.Network = nax.CurrentNetwork.Network; eidBuilder.ElementType = esriElementType.esriETEdge; m_resultEdges = eidBuilder as IEnumNetEID; } else { m_resultEdges = resultEdges; } // update the extension with the results INetworkAnalysisExtResults naxResults = m_utilNetExt as INetworkAnalysisExtResults; naxResults.ClearResults(); // first remove the old results if (naxResults.ResultsAsSelection) { naxResults.CreateSelection(resultJuncs, resultEdges); } else { naxResults.SetResults(resultJuncs, resultEdges); } }
public DoTrace(IApplication appRef) { InitializeComponent(); _netAnalExt = (INetworkAnalysisExt) appRef.FindExtensionByName("Utility Network Analyst"); }
/// <summary> /// Adds edge flags for a feature layer /// </summary> /// <param name="layer">The feature layer</param> private void AddEdgeFlags(IFeatureLayer layer) { try { // QI all the network analysis interfaces INetworkAnalysisExt netAnalyst = (INetworkAnalysisExt)this.UtilityNetAnalysisExt; INetworkAnalysisExtFlags flags = (INetworkAnalysisExtFlags)this.UtilityNetAnalysisExt; INetworkAnalysisExtBarriers barriers = (INetworkAnalysisExtBarriers)this.UtilityNetAnalysisExt; IPointToEID point2EID = new PointToEIDClass(); point2EID.GeometricNetwork = this.NetworkAnalysisExt.CurrentNetwork; point2EID.SourceMap = ((IMxDocument)this.Application.Document).FocusMap; point2EID.SnapTolerance = this.SnapTolerance; INetElements networkElements = (INetElements)this.NetworkAnalysisExt.CurrentNetwork.Network; IFeatureSelection featureSelection = (IFeatureSelection)layer; ISelectionSet selectionSet = (ISelectionSet)featureSelection.SelectionSet; IEnumIDs ids = selectionSet.IDs; int i; while ((i = ids.Next()) > 0) { IFeature feature = layer.FeatureClass.GetFeature(i); IPoint locationPoint; int nearestEdgeID; double perCent; point2EID.GetNearestEdge((IPoint)feature.ShapeCopy, out nearestEdgeID, out locationPoint, out perCent); if (networkElements.IsValidElement(nearestEdgeID, esriElementType.esriETEdge)) { int userclassID; int userID; int usersubID; networkElements.QueryIDs(nearestEdgeID, esriElementType.esriETEdge, out userclassID, out userID, out usersubID); IFlagDisplay flagDisplay = new EdgeFlagDisplayClass(); flagDisplay.FeatureClassID = userclassID; flagDisplay.FID = userID; flagDisplay.SubID = usersubID; flagDisplay.Geometry = locationPoint; flagDisplay.Symbol = this.EdgeFlagSymbol; flags.AddEdgeFlag((IEdgeFlagDisplay)flagDisplay); this.AddFlagCount++; this.OnAddFlag(locationPoint); } else { this.OnAddFlagError(layer.Name, "No nearby edge feature.", feature.OID); } } } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex.StackTrace); throw; } }