Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
        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;
            }
        }