예제 #1
0
        public void AddDataToLayoutViewer(ILayoutViewer viewer, string fname, params object[] options)
        {
            if (viewer == null)
            {
                return;
            }
            IDataFrame df = viewer.LayoutHost.ActiveDataFrame;

            if (df == null)
            {
                return;
            }
            IDataFrameDataProvider provider = df.Provider as IDataFrameDataProvider;

            if (provider == null)
            {
                return;
            }
            ICanvas canvas = provider.Canvas;

            if (canvas == null)
            {
                return;
            }
            RasterLayerBuilder.CreateAndLoadRasterLayer(_session, canvas, fname, options);
            viewer.LayoutHost.Render();
        }
예제 #2
0
 public DataFrame(ILayoutHost host, IDataFrameDataProvider provider)
 {
     _name             = Guid.NewGuid().ToString();
     _host             = host;
     _size             = new System.Drawing.SizeF(300, 300);
     _isInsideProvider = false;
     _provider         = provider;
     TrySetAsyncDataArrivedNotify();
     ReCreateBorderPen();
 }
예제 #3
0
        public override void Execute()
        {
            ILayoutViewer view = _smartSession.SmartWindowManager.ActiveViewer as ILayoutViewer;

            if (view == null)
            {
                return;
            }
            ILayoutHost host = view.LayoutHost;

            if (host == null)
            {
                return;
            }
            if (host.LayoutRuntime == null)
            {
                return;
            }
            if (host.LayoutRuntime.Layout == null)
            {
                return;
            }
            if (host.LayoutRuntime.Layout.Elements == null || host.LayoutRuntime.Layout.Elements.Count == 0)
            {
                return;
            }
            IDataFrame             df       = new DataFrame(host);
            IDataFrameDataProvider provider = df.Provider as IDataFrameDataProvider;

            if (provider == null)
            {
                return;
            }
            ICanvas c = provider.Canvas;

            if (c != null)
            {
                if (c.CanvasSetting != null)
                {
                    if (c.CanvasSetting.RenderSetting != null)
                    {
                        c.CanvasSetting.RenderSetting.BackColor = Color.White;
                    }
                }
                IVectorHostLayer vhost = new VectorHostLayer(null);
                c.LayerContainer.Layers.Add(vhost as GeoDo.RSS.Core.DrawEngine.ILayer);
            }
            host.LayoutRuntime.Layout.Elements.Insert(1, df);
            host.Render();
            host.ActiveDataFrame = df;
            TryRefreshLayerManager();
        }
예제 #4
0
        private List <ILayerObjectBase> GetLayerObjects()
        {
            if (_dataFrame == null || _dataFrame.Provider == null)
            {
                return(null);
            }
            IDataFrameDataProvider prd = _dataFrame.Provider as IDataFrameDataProvider;

            if (prd == null)
            {
                return(null);
            }
            ILayerObjectBase[] layers = GetLayerFromCanvas(prd.Canvas);
            if (layers != null && layers.Length > 0)
            {
                return(new List <ILayerObjectBase>(layers));
            }
            return(null);
        }
예제 #5
0
 public void Update(ILayoutHost host)
 {
     _host = host;
     ReCreateBorderPen();
     if (_isInsideProvider)
     {
         if (_provider != null)
         {
             _provider.Canvas.Dispose();
         }
         _provider = new DataFrameDataProvider(this, _host.LayoutRuntime,
                                               _isUseDefaultBackgroudLayer, _landColor, _seaColor, _interestRegions);
         _isInsideProvider = true;
         float w = _size.Width, h = _size.Height;
         _host.LayoutRuntime.Layout2Pixel(ref w, ref h);
         (_provider as UserControl).Size = new Size((int)w, (int)h);
         TrySetAsyncDataArrivedNotify();
     }
 }
예제 #6
0
        public override void Execute()
        {
            ILayoutViewer view = _smartSession.SmartWindowManager.ActiveViewer as ILayoutViewer;

            if (view == null)
            {
                return;
            }
            if (view.LayoutHost == null || view.LayoutHost.ActiveDataFrame == null)
            {
                return;
            }
            IDataFrameDataProvider df = view.LayoutHost.ActiveDataFrame.Provider as IDataFrameDataProvider;

            if (df != null)
            {
                df.Canvas.SetToFullEnvelope();
                (view.LayoutHost).Render(true);
            }
        }
 private void GetLayerItemLayouts(ILayerItemGroup g, ILayerObjectContainer layerObjContainer)
 {
     ILayerObjectBase[] layers = layerObjContainer.LayerObjects.ToArray();
     foreach (ILayerObjectBase obj in layers)
     {
         if (obj is ILayerObject)
         {
             ILayerObject layerObj = obj as ILayerObject;
             ILayerItem   it       = new LayerObjectItem(layerObj);
             g.Items.Add(it);
         }
         else
         {
             LayerItemGroup group = new LayerItemGroup(obj.Text ?? string.Empty, obj.Text ?? string.Empty);
             IDataFrame     df    = layerObjContainer as IDataFrame;
             if (df != null)
             {
                 IDataFrameDataProvider prd = df.Provider as IDataFrameDataProvider;
                 if (prd != null)
                 {
                     ICanvas canvas = prd.Canvas;
                     if (canvas != null)
                     {
                         GeoDo.RSS.Core.DrawEngine.ILayerContainer lc = canvas.LayerContainer as GeoDo.RSS.Core.DrawEngine.ILayerContainer;
                         if (lc != null)
                         {
                             IVectorHostLayer hostLayer = canvas.LayerContainer.VectorHost;
                             if (hostLayer != null)
                             {
                                 group.Tag = hostLayer.Map;
                             }
                         }
                     }
                 }
             }
             g.Items.Add(group);
             GetLayerItemLayouts(group, (obj as ILayerObjecGroup).Children.ToArray());
         }
     }
 }
예제 #8
0
        public void AddVectorDataToLayoutViewer(string fname, bool isNeedCheckNormalImage, params object[] options)
        {
            ILayoutViewer v = _session.SmartWindowManager.ActiveViewer as ILayoutViewer;

            if (v == null)
            {
                return;
            }
            IDataFrame df = v.LayoutHost.ActiveDataFrame;

            if (df == null)
            {
                return;
            }
            IDataFrameDataProvider provider = df.Provider as IDataFrameDataProvider;

            if (provider == null)
            {
                return;
            }
            ICanvas c = provider.Canvas;

            if (c == null)
            {
                return;
            }
            IVectorHostLayer host = c.LayerContainer.VectorHost as IVectorHostLayer;

            if (host == null)
            {
                return;
            }
            AddToCanvas(c, isNeedCheckNormalImage, host, fname);
            //
            c.Refresh(enumRefreshType.All);
            //
            (v.LayoutHost).SetActiveDataFrame2CurrentTool();
            (v.LayoutHost).Render(true);
        }
예제 #9
0
        private ILayer InitDataFrame(string gxfile, IElement ele, bool isLoadGeoGridLayer)
        {
            IDataFrame df = ele as IDataFrame;

            df.BorderColor = (ele as IDataFrame).BorderColor;
            df.BorderWidth = (ele as IDataFrame).BorderWidth;
            df.Location    = (ele as IDataFrame).Location;
            df.Size        = (ele as IDataFrame).Size;
            df.Angle       = (ele as IDataFrame).Angle;
            df.Update(this);
            IDataFrameDataProvider provider = df.Provider as IDataFrameDataProvider;

            ILayer gridLayer = null;

            if (df.GeoGridXml != null)
            {
                gridLayer = LoadGeoGridLayerExecutor(df.GeoGridXml);
            }
            if (provider != null)
            {
                ICanvas c = provider.Canvas;
                if (c != null)
                {
                    if (c.CanvasSetting != null)
                    {
                        if (c.CanvasSetting.RenderSetting != null)
                        {
                            c.CanvasSetting.RenderSetting.BackColor = Color.White;
                        }
                    }
                    if (df.Data != null && LoadDataFrameExecutor != null)
                    {
                        LoadDataFrameExecutor(gxfile, this, df, df.Data as XElement);
                    }
                }
            }
            return(gridLayer);
        }
예제 #10
0
        private void AttachVectorHost(DataFrame df)
        {
            IDataFrameDataProvider provider = df.Provider as IDataFrameDataProvider;

            if (provider == null)
            {
                return;
            }
            ICanvas c = provider.Canvas;

            if (c != null)
            {
                if (c.CanvasSetting != null)
                {
                    if (c.CanvasSetting.RenderSetting != null)
                    {
                        c.CanvasSetting.RenderSetting.BackColor = Color.White;
                    }
                }
                IVectorHostLayer vhost = new VectorHostLayer(null);
                c.LayerContainer.Layers.Add(vhost as GeoDo.RSS.Core.DrawEngine.ILayer);
                c.SetToChinaEnvelope();
            }
        }
예제 #11
0
        protected override CodeCell.AgileMap.Core.ISymbol GetSymbol()
        {
            if (string.IsNullOrEmpty(_layerName) || _dataFrame == null || _dataFrame.Provider == null)
            {
                return(null);
            }
            IDataFrameDataProvider provider = _dataFrame.Provider as IDataFrameDataProvider;

            if (provider == null || provider.Canvas == null)
            {
                return(null);
            }
            IVectorHostLayer hostLayer = provider.Canvas.LayerContainer.VectorHost as IVectorHostLayer;

            if (hostLayer == null)
            {
                return(null);
            }
            IMap map = hostLayer.Map as IMap;

            if (map == null)
            {
                return(null);
            }
            CodeCell.AgileMap.Core.ILayer layer = map.LayerContainer.GetLayerByName(_layerName);
            if (layer == null)
            {
                return(null);
            }
            CodeCell.AgileMap.Core.IFeatureLayer fetLayer = layer as CodeCell.AgileMap.Core.IFeatureLayer;
            if (fetLayer == null || fetLayer.Renderer == null)
            {
                return(null);
            }
            return(fetLayer.Renderer.CurrentSymbol);
        }
예제 #12
0
        public ICanvas GetCanvas(string fname, params object[] options)
        {
            ILayoutViewer v = _session.SmartWindowManager.ActiveViewer as ILayoutViewer;

            if (v == null)
            {
                return(null);
            }
            IDataFrame df = v.LayoutHost.ActiveDataFrame;

            if (df == null)
            {
                return(null);
            }
            IDataFrameDataProvider provider = df.Provider as IDataFrameDataProvider;

            if (provider == null)
            {
                return(null);
            }
            ICanvas c = provider.Canvas;

            return(c);
        }
예제 #13
0
        private static ISpatialReference GetSpatialRef(ISmartSession session)
        {
            ISmartViewer activeViewer = session.SmartWindowManager.ActiveViewer;

            if (activeViewer is ICanvasViewer)
            {
                return((activeViewer as ICanvasViewer).Canvas.CoordTransform.SpatialRefOfViewer as ISpatialReference);
            }
            else if (activeViewer is ILayoutViewer)
            {
                IDataFrame df = (activeViewer as ILayoutViewer).LayoutHost.ActiveDataFrame;
                if (df == null)
                {
                    return(null);
                }
                IDataFrameDataProvider prd = df.Provider as IDataFrameDataProvider;
                if (prd == null)
                {
                    return(null);
                }
                return(prd.Canvas.CoordTransform.SpatialRefOfViewer as ISpatialReference);
            }
            return(null);
        }
예제 #14
0
 public override void Dispose()
 {
     if (_borderPen != null)
     {
         _borderPen.Dispose();
         _borderPen = null;
     }
     if (_provider != null)
     {
         if (_isInsideProvider)
         {
             (_provider as IDisposable).Dispose();
         }
         _provider = null;
     }
     if (_lockImage != null)
     {
         _lockImage.Dispose();
         _lockImage = null;
     }
     _runtime = null;
     _host    = null;
     base.Dispose();
 }
예제 #15
0
        static DataFrame()
        {
            LayoutHost.LoadGeoGridLayerExecutor = (xml) =>
            {
                return(GeoDo.RSS.Core.Grid.GeoGridLayer.FromXml(xml));
            };

            LayoutHost.LoadDataFrameExecutor = (gxfile, host, df, dfEle) =>
            {
                IDataFrameDataProvider prd = df.Provider as IDataFrameDataProvider;
                ICanvas  canvas            = prd.Canvas;
                string   fname             = Path.Combine(Path.GetDirectoryName(gxfile), "tempMcd.xml");
                XElement mapElement        = dfEle.Element("Map");
                //旧模版没有Map节点
                if (mapElement != null)
                {
                    File.WriteAllText(fname, mapElement.ToString());
                    if (canvas == null)
                    {
                        return;
                    }
                    if (canvas.LayerContainer.VectorHost == null)
                    {
                        IVectorHostLayer vhost = new VectorHostLayer(null, fname);
                        vhost.IsEnableDummyRender       = false;
                        vhost.SomeDataIsArrivedHandler += new EventHandler((sender, e) => { host.Render(true); });
                        canvas.LayerContainer.Layers.Add(vhost as GeoDo.RSS.Core.DrawEngine.ILayer);
                    }
                }
                double minX = GetDoubleAtt(dfEle, "minx");
                double maxX = GetDoubleAtt(dfEle, "maxx");
                double minY = GetDoubleAtt(dfEle, "miny");
                double maxY = GetDoubleAtt(dfEle, "maxy");
                if (Math.Abs(minX) > double.Epsilon &&
                    Math.Abs(minY) > double.Epsilon &&
                    Math.Abs(maxX) > double.Epsilon &&
                    Math.Abs(maxY) > double.Epsilon)
                {
                    canvas.CurrentEnvelope = new CoordEnvelope(minX, maxX, minY, maxY);
                }
                //
                df.IsLocked = true;
            };

            //模版保存时调用
            LayoutToFile.DataFrame2XmlNodeConverter = (dstFileName, df, doc) =>
            {
                if (df == null || doc == null)
                {
                    return(null);
                }
                IDataFrameDataProvider prd = df.Provider as IDataFrameDataProvider;
                if (prd == null)
                {
                    return(null);
                }
                ICanvas canvas = prd.Canvas;
                if (canvas == null)
                {
                    return(null);
                }
                XmlElement dfNode = doc.CreateElement("DataFrame");
                dfNode.SetAttribute("name", df.Name);
                dfNode.SetAttribute("minx", canvas.CurrentEnvelope.MinX.ToString());
                dfNode.SetAttribute("miny", canvas.CurrentEnvelope.MinY.ToString());
                dfNode.SetAttribute("maxx", canvas.CurrentEnvelope.MaxX.ToString());
                dfNode.SetAttribute("maxy", canvas.CurrentEnvelope.MaxY.ToString());
                //
                IVectorHostLayer hostLayer = canvas.LayerContainer.VectorHost;
                if (hostLayer != null)
                {
                    IMap map = hostLayer.Map as IMap;
                    if (map == null)
                    {
                        return(null);
                    }
                    string        fname = Path.Combine(Path.GetDirectoryName(dstFileName), "TempMcd.xml");
                    StringBuilder sb    = new StringBuilder();
                    try
                    {
                        map.SaveTo(fname, true);
                        string[] lines = File.ReadAllLines(fname);
                        for (int i = 1; i < lines.Length; i++)
                        {
                            sb.AppendLine(lines[i]);
                        }
                    }
                    finally
                    {
                        if (File.Exists(fname))
                        {
                            File.Delete(fname);
                        }
                    }
                    //
                    dfNode.InnerXml = sb.ToString();
                }
                //
                return(dfNode);
            };

            GxdDocument.GxdVectorHostGettter = (df) =>
            {
                IDataFrameDataProvider provider = df.Provider as IDataFrameDataProvider;
                if (provider == null)
                {
                    return(null);
                }
                ICanvas c = provider.Canvas;
                if (c == null)
                {
                    return(null);
                }
                IVectorHostLayer hostLayer = c.LayerContainer.VectorHost;
                if (hostLayer == null)
                {
                    return(null);
                }
                IMap map = hostLayer.Map as IMap;
                if (map == null)
                {
                    return(null);
                }
                string fname = AppDomain.CurrentDomain.BaseDirectory + "TempMcd.xml";
                //这里相对路径不正确
                map.SaveTo(fname, false);
                string[]      lines = File.ReadAllLines(fname);
                StringBuilder sb    = new StringBuilder();
                for (int i = 1; i < lines.Length; i++)
                {
                    sb.AppendLine(lines[i]);
                }
                return(new GxdVectorHost(sb.ToString()));
            };
            //
            GxdDocument.GxdEnvelopeGetter = (df) =>
            {
                IDataFrameDataProvider provider = df.Provider as IDataFrameDataProvider;
                if (provider == null)
                {
                    return(null);
                }
                ICanvas c = provider.Canvas;
                if (c == null)
                {
                    return(null);
                }
                return(new GxdEnvelope(c.CurrentEnvelope.MinX, c.CurrentEnvelope.MaxX, c.CurrentEnvelope.MinY, c.CurrentEnvelope.MaxY));
            };
            //
            GxdDocument.GxDataFrameRasterItemsSetter = (df, gxddf) =>
            {
                IDataFrameDataProvider provider = df.Provider as IDataFrameDataProvider;
                if (provider == null)
                {
                    return;
                }
                ICanvas c = provider.Canvas;
                if (c == null)
                {
                    return;
                }
                IRasterDrawing drawing = c.PrimaryDrawObject as IRasterDrawing;
                if (drawing == null)
                {
                    return;
                }
                IGxdRasterItem it = new GxdRasterItem(drawing.FileName, null);
                gxddf.GxdRasterItems.Add(it);
            };
            //
            GxdDocument.GxdAddDataFrameExecutor = (fileName, gxdf, host) =>
            {
                if (gxdf == null || host == null)
                {
                    return;
                }
                IElement[] dfs = host.LayoutRuntime.QueryElements((e) => { return(e is IDataFrame); }, false);
                if (dfs == null || dfs.Length == 0)
                {
                    return;
                }
                foreach (IElement e in dfs)
                {
                    if (e.Name != null && gxdf.Name != null && e.Name == gxdf.Name)
                    {
                        IDataFrame crtDataFrame = e as IDataFrame;
                        if (crtDataFrame.Provider == null)
                        {
                            continue;
                        }
                        crtDataFrame.IsLocked = true;
                        ICanvas canvas = (crtDataFrame.Provider as IDataFrameDataProvider).Canvas;
                        //set spatial ref
                        SetSpatialRefForDataFrame(gxdf.SpatialRef, crtDataFrame);
                        //raster
                        if (gxdf.GxdRasterItems != null && gxdf.GxdRasterItems.Count > 0)
                        {
                            foreach (IGxdRasterItem rst in gxdf.GxdRasterItems)
                            {
                                if (rst == null || string.IsNullOrEmpty(rst.FileName))
                                {
                                    continue;
                                }
                                if (AddFileToCanvasViewerExecutor != null)
                                {
                                    AddFileToCanvasViewerExecutor(rst.FileName, rst.Arguments, canvas, rst.FileOpenArgs, rst.ColorTableName);
                                }
                            }
                        }
                        //vector
                        if (gxdf.GxdVectorHost != null && gxdf.GxdVectorHost.McdFileContent != null)
                        {
                            string fname = Path.Combine(Path.GetDirectoryName(fileName), "tempMcd.xml");
                            File.WriteAllText(fname, gxdf.GxdVectorHost.McdFileContent.ToString());
                            if (canvas.LayerContainer.VectorHost == null)
                            {
                                IVectorHostLayer vhost = new VectorHostLayer(null, fname);
                                vhost.IsEnableDummyRender       = false;
                                vhost.SomeDataIsArrivedHandler += new EventHandler((sender, arge) => { host.Render(true); });
                                canvas.LayerContainer.Layers.Add(vhost as GeoDo.RSS.Core.DrawEngine.ILayer);
                            }
                        }
                        //coord envelope
                        if (gxdf.Envelope != null && !gxdf.Envelope.IsEmpty())
                        {
                            GeoDo.RSS.Core.DrawEngine.CoordEnvelope evp = new CoordEnvelope(gxdf.Envelope.MinX, gxdf.Envelope.MaxX, gxdf.Envelope.MinY, gxdf.Envelope.MaxY);
                            canvas.CurrentEnvelope = evp;
                        }
                        //vector host
                        if (canvas.LayerContainer.VectorHost == null)
                        {
                            IVectorHostLayer vhost = new VectorHostLayer(null);
                            vhost.IsEnableDummyRender       = false;
                            vhost.SomeDataIsArrivedHandler += new EventHandler((sender, arge) => { host.Render(true); });
                            canvas.LayerContainer.Layers.Add(vhost as GeoDo.RSS.Core.DrawEngine.ILayer);
                        }
                        //documentable layers
                        XElement otherLayersHost = crtDataFrame.GetDocumentableLayersHostXml();
                        if (otherLayersHost != null)
                        {
                            Object2Xml obj2xml = new Object2Xml();
                            foreach (XElement otherLyr in otherLayersHost.Elements())
                            {
                                //IDocumentableLayer lyr = obj2xml.FromXml(otherLyr) as IDocumentableLayer;
                                //if (lyr != null)
                                //    lyr.Load();
                            }
                        }
                        break;
                    }
                }
            };
        }