Example #1
0
        async private Task RenderSelection(IFeatureLayer fLayer, ICancelTracker cancelTracker)
        {
            if (fLayer == null || !(fLayer is IFeatureSelection))
            {
                return;
            }

            if (fLayer.SelectionRenderer == null)
            {
                return;
            }

            IFeatureSelection fSelection = (IFeatureSelection)fLayer;

            if (fSelection.SelectionSet == null || fSelection.SelectionSet.Count == 0)
            {
                return;
            }

            RenderFeatureLayerSelection rlt = new RenderFeatureLayerSelection(this, fLayer, cancelTracker);

            //rlt.Render();

            //Thread thread = new Thread(new ThreadStart(rlt.Render));
            //thread.Start();

            DrawingLayer.BeginInvoke(fLayer.Title, new AsyncCallback(AsyncInvoke.RunAndForget), null);

            await rlt.Render();

            //while (thread.IsAlive)
            //{
            //    Thread.Sleep(10);
            //    if (DoRefreshMapView != null && (count % 100) == 0 && cancelTracker.Continue)
            //    {
            //        DoRefreshMapView();
            //    }
            //    count++;
            //}
            if (cancelTracker.Continue)
            {
                DoRefreshMapView?.Invoke();
            }
        }
Example #2
0
        public override void HighlightGeometry(IGeometry geometry, int milliseconds)
        {
            if (geometry == null || _canvas != null)
            {
                return;
            }

            geometryType type = geometryType.Unknown;

            if (geometry is IPolygon)
            {
                type = geometryType.Polygon;
            }
            else if (geometry is IPolyline)
            {
                type = geometryType.Polyline;
            }
            else if (geometry is IPoint)
            {
                type = geometryType.Point;
            }
            else if (geometry is IMultiPoint)
            {
                type = geometryType.Multipoint;
            }
            else if (geometry is IEnvelope)
            {
                type = geometryType.Envelope;
            }
            if (type == geometryType.Unknown)
            {
                return;
            }

            ISymbol          symbol   = null;
            PlugInManager    compMan  = new PlugInManager();
            IFeatureRenderer renderer = compMan.CreateInstance(gView.Framework.system.KnownObjects.Carto_SimpleRenderer) as IFeatureRenderer;

            if (renderer is ISymbolCreator)
            {
                symbol = ((ISymbolCreator)renderer).CreateStandardHighlightSymbol(type);
            }
            if (symbol == null)
            {
                return;
            }

            try
            {
                using (var bm = GraphicsEngine.Current.Engine.CreateBitmap(Display.iWidth, Display.iHeight, GraphicsEngine.PixelFormat.Rgba32))
                    using (_canvas = bm.CreateCanvas())
                    {
                        DrawStream(_canvas, _msGeometry);
                        DrawStream(_canvas, _msSelection);

                        this.Draw(symbol, geometry);
                        NewBitmap?.Invoke(bm); //.BeginInvoke(bm, new AsyncCallback(AsyncInvoke.RunAndForget), null);

                        DoRefreshMapView?.Invoke();

                        Thread.Sleep(milliseconds);

                        _canvas.Clear();
                        DrawStream(_canvas, _msGeometry);
                        DrawStream(_canvas, _msSelection);

                        //NewBitmap?.Invoke(bm); //.BeginInvoke(_bitmap, new AsyncCallback(AsyncInvoke.RunAndForget), null);

                        DoRefreshMapView?.Invoke();
                    }
            }
            finally
            {
                _canvas = null;
            }
        }