Exemplo n.º 1
0
        public void Render(object sender, IDrawArgs drawArgs)
        {
            if (_cntLines == null || _cntLines.Length == 0 || _contourClassItems == null || _contourClassItems.Length == 0)
            {
                return;
            }
            if (_canvas == null)
            {
                _canvas                    = sender as ICanvas;
                _canvasSizeChanged         = new EventHandler(Container_SizeChanged);
                _canvas.OnEnvelopeChanged += _canvasSizeChanged;
                _conflictor                = new PixelConflictor(_canvas.Container.Size);
            }
            CoordEnvelope evp = _canvas.CurrentEnvelope;

            _crtCanvasEnvelope = new ContourLine.ContourEnvelope((float)evp.MinX, (float)evp.MaxX, (float)evp.MinY, (float)evp.MaxY);
            TryUpdateLabelBuffers(drawArgs);
            TryProject();
            TrySetSmoothMode(drawArgs);
            TryResetConflictor();
            float minWidth  = MIN_WIDTH * _canvas.ResolutionX;
            float minHeight = MIN_WIDTH * _canvas.ResolutionY;

            ContourLine.ContourEnvelope thisEvp = null;
            int          classIdx = 0;
            ContourClass cntClass = null;

            foreach (ContourLine cntLine in _cntLines)
            {
                if (cntLine == null)
                {
                    continue;
                }
                classIdx = cntLine.ClassIndex;
                cntClass = _contourClassItems[classIdx];
                thisEvp  = cntLine.Envelope;
                //如果不在可视区域则绘制
                if (!_crtCanvasEnvelope.IsInteractived(thisEvp))
                {
                    continue;
                }
                //如果在当前比例尺下太小则不显示
                if (thisEvp.Width > minWidth || thisEvp.Height > minHeight)
                {
                    DrawContour(drawArgs, cntLine, cntClass, _canvas);
                }
            }
        }