private bool PlaceFlag(string sClassName, string sOID) { IFeatureClass pFC; IFeatureWorkspace pFWKS; IFeature pFeat; INetElements pNetElements; ISimpleJunctionFeature pJunc; INetworkAnalysisExt pNetworkAnalysisExt; IMxDocument pMXDoc; IApplication pApp; IMxApplication pMXApp; INetworkAnalysisExtFlags pNetworkAnalysisExtFlags; UID pUID; ITraceFlowSolverGEN pTraceFlowSolver; INetSolver pNetSolver; Miner.Interop.IMMTraceUIUtilities pTraceUtils; IPolycurve pPoly; int iCLSID; int iOID; int iSUBID; try { SW1.Reset(); SW1.Start(); Type t = Type.GetTypeFromProgID("esriFramework.AppRef"); System.Object obj = Activator.CreateInstance(t); pApp = obj as IApplication; pMXApp = (IMxApplication)pApp; pMXDoc = (IMxDocument)pApp.Document; pUID = new UID(); pUID.Value = "esriEditorExt.UtilityNetworkAnalysisExt"; pNetworkAnalysisExt = (INetworkAnalysisExt)pApp.FindExtensionByCLSID(pUID); pNetworkAnalysisExtFlags = (INetworkAnalysisExtFlags)pNetworkAnalysisExt; pNetElements = (INetElements)pNetworkAnalysisExt.CurrentNetwork.Network; pTraceUtils = new Miner.Interop.MMTraceUIUtilities(); pFWKS = (IFeatureWorkspace)Workspace; pFC = pFWKS.OpenFeatureClass(sClassName); if (pFC != null) { pFeat = pFC.GetFeature(Convert.ToInt32(sOID)); INetworkFeature pNetFeat = (INetworkFeature)pFeat; m_pGN = pNetFeat.GeometricNetwork; if (pFeat != null) { pTraceFlowSolver = (ITraceFlowSolverGEN)new TraceFlowSolver(); pNetSolver = (INetSolver)pTraceFlowSolver; if (pFeat.FeatureType == esriFeatureType.esriFTSimpleJunction) { pJunc = (ISimpleJunctionFeature)pFeat; pNetElements.QueryIDs(pJunc.EID, esriElementType.esriETEdge, out iCLSID, out iOID, out iSUBID); //pJFlag = (INetFlag)new JunctionFlag(); //pJFlag.UserClassID = iCLSID; //pJFlag.UserID = iOID; //pJFlag.UserSubID = iSUBID; IFlagDisplay pFlagDisplay = new JunctionFlagDisplay(); pFlagDisplay.Symbol = (ISymbol)CreateMarkerSymbol(0); pFlagDisplay.Geometry = (IPoint)pFeat.ShapeCopy; //Set pNetSolver.SourceNetwork = pNetElements pNetworkAnalysisExtFlags.AddJunctionFlag((IJunctionFlagDisplay)pFlagDisplay); } else { IPoint pPoint; pPoint = new Point(); double dDist; dDist = .5; pPoly = (IPolycurve)pFeat.ShapeCopy; pPoly.QueryPoint(esriSegmentExtension.esriNoExtension, dDist, true, pPoint); IFlagDisplay pFlagDisplay = new EdgeFlagDisplay(); IEdgeFeature pEdge = (IEdgeFeature)pFeat; IObjectClass pOC = (IObjectClass)pFeat.Table; int iEID = pNetElements.GetEID(pOC.ObjectClassID, pFeat.OID, 0, esriElementType.esriETEdge); //pNetElements.QueryIDs(pEdge.ToJunctionEID, esriElementType.esriETEdge, out iCLSID, out iOID, out iSUBID); pFlagDisplay.FeatureClassID = pOC.ObjectClassID; pFlagDisplay.FID = pFeat.OID; pFlagDisplay.SubID = 0; //pFlagDisplay.Geometry = pPoint; pFlagDisplay.Symbol = (ISymbol)CreateMarkerSymbol(0); ISimpleMarkerSymbol pSMS = (ISimpleMarkerSymbol)pFlagDisplay.Symbol; IColor pColor; pColor = new RgbColor(); pColor.RGB = 100; pSMS.Size = 10; pNetworkAnalysisExtFlags.AddEdgeFlag((IEdgeFlagDisplay)pFlagDisplay); } } } SW1.Stop(); RecordActionTime("PLACEFLAG" , SW1.ElapsedMilliseconds); return true; } catch (Exception EX) { Logger.WriteLine("Error in PlaceFlags " + EX.Message + " " + EX.StackTrace); return false; } }
private bool PlaceBarrier(string sClassName, string sOID) { IFeatureClass pFC; IFeatureWorkspace pFWKS; IFeature pFeat; INetElements pNetElements; ISimpleJunctionFeature pJunc; INetworkAnalysisExt pNetworkAnalysisExt; INetElementBarriers pJunctionElementBarriers; INetElementBarriers pEdgeElementBarriers; IMxDocument pMXDoc; IApplication pApp; IMxApplication pMXApp; INetworkAnalysisExtBarriers pNetworkAnalysisExtBarriers; UID pUID; INetFlag pJFlag; IFlagDisplay pJFlagDisplay; ITraceFlowSolverGEN pTraceFlowSolver; INetSolver pNetSolver; ISelectionSetBarriers pSelectionSetBarriers; IPolycurve pPoly; int[] iOIDs; int iCLSID; int iOID; int iSUBID; double dDist; INetworkFeature pNetFeat; try { SW1.Reset(); SW1.Start(); try { Type t = Type.GetTypeFromProgID("esriFramework.AppRef"); System.Object obj = Activator.CreateInstance(t); pApp = obj as IApplication; pMXApp = (IMxApplication)pApp; pMXDoc = (IMxDocument)pApp.Document; pUID = new UID(); pUID.Value = "esriEditorExt.UtilityNetworkAnalysisExt"; pNetworkAnalysisExt = (INetworkAnalysisExt)pApp.FindExtensionByCLSID(pUID); pNetworkAnalysisExtBarriers = (INetworkAnalysisExtBarriers)pNetworkAnalysisExt; pNetElements = (INetElements)pNetworkAnalysisExt.CurrentNetwork.Network; pNetworkAnalysisExtBarriers.CreateElementBarriers(out pJunctionElementBarriers, out pEdgeElementBarriers); pNetworkAnalysisExtBarriers.CreateSelectionBarriers(out pSelectionSetBarriers); iOIDs = new int[1]; } catch (Exception EX2) { Logger.WriteLine("Error in PlaceBarriers getting extension " + EX2.Message + " " + EX2.StackTrace); return false; } pNetworkAnalysisExtBarriers.SelectionSemantics = esriAnalysisType.esriAnalysisOnAllFeatures; pFWKS = (IFeatureWorkspace)Workspace; pFC = pFWKS.OpenFeatureClass(sClassName); if (pFC != null) { pFeat = pFC.GetFeature(Convert.ToInt32(sOID)); if (pFeat != null) { iOIDs[0] = pFeat.OID; pNetFeat = (INetworkFeature)pFeat; pTraceFlowSolver = (ITraceFlowSolverGEN)new TraceFlowSolver(); pNetSolver = (INetSolver)pTraceFlowSolver; if (pFeat.FeatureType == esriFeatureType.esriFTSimpleJunction) { try { IPoint pPoint; pPoint = (IPoint)pFeat.ShapeCopy; pJunc = (ISimpleJunctionFeature)pFeat; pNetElements.QueryIDs(pJunc.EID, esriElementType.esriETJunction, out iCLSID, out iOID, out iSUBID); pJFlag = (INetFlag)new JunctionFlag(); pJFlagDisplay = new JunctionFlagDisplay(); pJFlagDisplay.Geometry = pPoint; pJFlagDisplay.Symbol = (ISymbol)CreateMarkerSymbol(1); pNetworkAnalysisExtBarriers.AddJunctionBarrier((IJunctionFlagDisplay)pJFlagDisplay); } catch (Exception EX2) { Logger.WriteLine("Error in PlaceBarriers.Creating Flag " + EX2.Message + " " + EX2.StackTrace); return false; } } else { try { IPoint pPoint; pPoint = new Point(); dDist = .5; pPoly = (IPolycurve)pFeat.ShapeCopy; pPoly.QueryPoint(esriSegmentExtension.esriExtendAtFrom, dDist, true, pPoint); IFlagDisplay pFlagDisplay = new EdgeFlagDisplay(); IEdgeFeature pEdge = (IEdgeFeature)pFeat; pNetElements.QueryIDs(pEdge.ToJunctionEID, esriElementType.esriETJunction, out iCLSID, out iOID, out iSUBID); pFlagDisplay.Geometry = pPoint; pFlagDisplay.Symbol = (ISymbol)CreateMarkerSymbol(1); pNetworkAnalysisExtBarriers.AddEdgeBarrier((IEdgeFlagDisplay)pFlagDisplay); } catch (Exception EX2) { Logger.WriteLine("Error in PlaceBarriers placing barrier on edge feature " + EX2.Message + " " + EX2.StackTrace); return false; } } } } SW1.Stop(); RecordActionTime("PLACEBARRIER" , SW1.ElapsedMilliseconds); return true; } catch (Exception EX) { Logger.WriteLine("Error in PlaceBarriers " + EX.Message + " " + EX.StackTrace); return false; } }