예제 #1
0
        private void TransitionTimerTick(object sender, EventArgs e)
        {
            _transitionCounter += _transitionTimer.Interval;
            if (_transitionCounter >= Interval)
            {
                _transitionCounter = 0;
                _transitionState++;
                if (_transitionState == 2)
                {
                    _xAxis.Generate(_transitionCanvas);
                    _yAxis.GenerateAxis(_transitionCanvas.ScaleData.MaxData);
                }
                if (_transitionState == 3)
                {
                    //reset timer info
                    _transitionTimer.Stop();

                    //switch canvas data
                    _canvasData       = _transitionCanvas;
                    _scaleData        = _canvasData.ScaleData;
                    _transitionCanvas = null;

                    ////swap buffers in graphs
                    CanvasCollection.SwapBuffers();
                    ////reset alpha blend
                    CanvasCollection.AlphaBlend(1f);
                    _transitionState = 0;
                    ShowUI();
                }
            }
        }
예제 #2
0
 /// <summary>
 /// Draws the backbuffers of all graphs in the collection, in draw order
 /// </summary>
 /// <param name="scaleData">the scale data used to draw the graphs</param>
 public void DrawCollectionBackBuffer(GraphScaleData scaleData)
 {
     foreach (var graph in List)
     {
         graph.DrawBackBuffer(scaleData);
     }
 }
예제 #3
0
        public void SetCanvasData(CanvasData canvasData)
        {
            Border.BindData(new[] { new Vector2(-1, -1), new Vector2(1, -1), new Vector2(1, 1), new Vector2(-1, 1) });
            DataVolume.BindData(canvasData.DataVolume);
            PacketCount.BindData(canvasData.PacketCount);

            for (var k = 0; k < MatchingCounts.Count; k++)
            {
                MatchingCounts[k].BindData(canvasData.MatchingCount[k]);
            }

            _canvasReady = true;

            if (_canvasData != null)
            {
                _transitionCanvas = canvasData;
                StartTransition();
            }
            else
            {
                _xAxis.Generate(canvasData);
                _yAxis.GenerateAxis(canvasData.ScaleData.MaxData);
                _scaleData  = canvasData.ScaleData;
                _canvasData = canvasData;
            }
        }
예제 #4
0
 /// <summary>
 /// Draws all graphs in the collection, in draw order
 /// </summary>
 /// <param name="scaleData">the scale data used to draw the graphs</param>
 public void DrawCollection(GraphScaleData scaleData)
 {
     foreach (var graph in List)
     {
         graph.Draw(scaleData);
     }
 }
예제 #5
0
        public void DrawBackBuffer(GraphScaleData scaleData)
        {
            if (Hide || _backData == null)
            {
                return;
            }
            float height = ScaleFunction.ScaledHeight(scaleData);

            Matrix4 transform = Matrix4.CreateTranslation(scaleData.XShift, 0, 0) * Matrix4.Scale(2 / scaleData.BaseScale, 2 / height, 1) * Matrix4.CreateTranslation(-1, -1, 0);

            GL.UniformMatrix4(_shaderProgram.UniformTransform, false, ref transform);

            if (_drawMode == BeginMode.Lines || _drawMode == BeginMode.LineLoop || _drawMode == BeginMode.LineStrip)
            {
                GL.LineWidth(2f);
            }
            else if (_drawMode == BeginMode.Points)
            {
                GL.PointSize(2f);
            }

            if (_alphaBlend > 0)
            {
                Color4 col = Color;
                col.A = 1 - _alphaBlend;
                GL.Uniform4(_shaderProgram.UniformColor, col);
            }
            else
            {
                GL.Uniform4(_shaderProgram.UniformColor, Color);
            }

            if (_graphType == GraphType.SolidGraph)
            {
                _backBuffer.SetAttributeInfo(_shaderProgram.AttributeCoord2D, 2);

                _backBuffer.BeginDraw();
                _backBuffer.Draw(_drawMode);
                _backBuffer.EndDraw();

                _backBuffer.SetAttributeInfo(_shaderProgram.AttributeCoord2D, 2, false, 2 * Vector2.SizeInBytes);
                GL.Uniform4(_shaderProgram.UniformColor, Color4.Black);
                GL.LineWidth(1f);

                _backBuffer.BeginDraw();
                _backBuffer.Draw(BeginMode.LineStrip, _backData.Length / 2);
                _backBuffer.EndDraw();
            }
            else
            {
                _backBuffer.BeginDraw();
                _backBuffer.Draw(_drawMode, _backData.Length / 2);
                _backBuffer.EndDraw();
            }
        }
예제 #6
0
        /// <summary>
        /// Creates a new CanvasData object, based on user specifications
        /// </summary>
        /// <param name="startTime">The time at wwhich the canvas view should start</param>
        /// <param name="endTime">The time at wwhich the canvas view should end</param>
        /// <param name="renderUnit">The basic rendering unit to use</param>
        /// <param name="displayUnit">The display unit to use</param>
        /// <param name="filterCount"></param>
        public CanvasData(DateTime startTime, DateTime endTime, FrameNodeLevel renderUnit, FrameNodeLevel displayUnit)
        {
            DisplayUnit = displayUnit;
            StartTime   = startTime;
            EndTime     = endTime;
            RenderUnit  = renderUnit;

            DataVolume    = new GraphData();
            PacketCount   = new GraphData();
            MatchingCount = new List <GraphData>();

            for (int k = 0; k < CanvasManager.FileManager.TotalFilters; k++)
            {
                MatchingCount.Add(new GraphData());
            }

            ScaleData = new GraphScaleData(displayUnit, startTime, endTime, CanvasManager.FileManager.TotalFilters);

            switch (displayUnit)
            {
            case FrameNodeLevel.Root:
                Description = "Global View: " + startTime.ToString(CultureInfo.InvariantCulture) + " - " + endTime.ToString(CultureInfo.InvariantCulture);
                break;

            case FrameNodeLevel.Year:
                Description = "Year View: " + startTime.Year;
                break;

            case FrameNodeLevel.Month:
                Description = "Month View: " + MonthString(startTime.Month) + " " + startTime.Year;
                break;

            case FrameNodeLevel.Day:
                Description = "Day View: " + DayString(startTime.Day) + " " + MonthString(startTime.Month) + " " + startTime.Year;
                break;

            case FrameNodeLevel.Hour:
                Description = "Hour View: " + TimeString(startTime.Hour) + " - " + TimeString(endTime.Hour) + " " + DayString(startTime.Day) + " " + MonthString(startTime.Month) + " " + startTime.Year;
                break;

            case FrameNodeLevel.PartHour:
                Description = "Part Hour View: " + TimeString(startTime.Hour, startTime.Minute) + " - " + TimeString(endTime.Hour, endTime.Minute) + " " + DayString(startTime.Day) + " " + MonthString(startTime.Month) + " " + startTime.Year;
                break;

            case FrameNodeLevel.Minute:
                Description = "Minute View: " + TimeString(startTime.Hour, startTime.Minute) + " - " + TimeString(endTime.Hour, endTime.Minute) + " " + DayString(startTime.Day) + " " + MonthString(startTime.Month) + " " + startTime.Year;
                break;

            default:
                throw new ArgumentOutOfRangeException("displayUnit");
            }
        }
예제 #7
0
        /// <summary>
        /// Creates a replica of the passed GraphScaleData
        /// </summary>
        /// <param name="data">the scale data to replicate</param>
        public GraphScaleData(GraphScaleData data)
        {
            DisplayUnit = data.DisplayUnit;
            XShift      = data.XShift;
            BaseScale   = data.BaseScale;

            TotalData    = data.TotalData;
            TotalPackets = data.TotalPackets;
            VertexCount  = data.VertexCount;

            MinCount = data.MinCount;
            MaxCount = data.MaxCount;
            MinData  = data.MinData;
            MaxData  = data.MaxData;

            MinMatchingCount = new List <long>(data.MinMatchingCount);
            MaxMatchingCount = new List <long>(data.MaxMatchingCount);
        }
예제 #8
0
        public float ScaledHeight(GraphScaleData scaleData)
        {
            switch (Function)
            {
            case GraphScaleFunction.Maximum:
                switch (Target)
                {
                case GraphScaleTarget.DataVolume:
                    return(scaleData.MaxData);

                case GraphScaleTarget.PacketCount:
                    return(scaleData.MaxCount);

                case GraphScaleTarget.MatchingCount:
                    return(scaleData.MaxMatchingCount[FilterIndex]);

                default:
                    throw new ArgumentOutOfRangeException();
                }

            case GraphScaleFunction.AverageOver2:
                switch (Target)
                {
                case GraphScaleTarget.DataVolume:
                    return(scaleData.AvgDataVolume);

                case GraphScaleTarget.PacketCount:
                    return(scaleData.AvgPacketCount);

                case GraphScaleTarget.MatchingCount:
                    return(scaleData.AvgMatchingCount(FilterIndex));

                default:
                    throw new ArgumentOutOfRangeException();
                }

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
예제 #9
0
        public void DrawGraph()
        {
            if (!_canvasReady)
            {
                return;
            }

            CanvasManager.SimpleShader2D.UseProgram();
            GL.MatrixMode(OpenTK.Graphics.OpenGL.MatrixMode.Modelview);
            GL.Clear(ClearBufferMask.ColorBufferBit);

            GL.Viewport((int)CanvasManager.CanvasLocationX, (int)CanvasManager.CanvasLocationY, (int)CanvasManager.CanvasWidth, (int)CanvasManager.CanvasHeight);
            GL.Scissor((int)CanvasManager.CanvasLocationX, (int)CanvasManager.CanvasLocationY, (int)CanvasManager.CanvasWidth, (int)CanvasManager.CanvasHeight);
            GL.Enable(EnableCap.ScissorTest);

            var scale = new GraphScaleData(_scaleData);

            if (_transitionState == 1) //reposition
            {
                float factor = _transitionCounter / Interval;
                //x difference
                scale.XShift = _scaleData.XShift + (_transitionCanvas.ScaleData.XShift - _scaleData.XShift) * factor;
                //scale difference
                scale.BaseScale = _scaleData.BaseScale + (_transitionCanvas.ScaleData.BaseScale - _scaleData.BaseScale) * factor;
            }
            else if (_transitionState == 2)
            {
                scale.XShift    = _transitionCanvas.ScaleData.XShift;
                scale.BaseScale = _transitionCanvas.ScaleData.BaseScale;
            }
            else
            {
                scale.XShift    = _scaleData.XShift;
                scale.BaseScale = _scaleData.BaseScale;
            }

            if (_transitionState == 2) //blend colors
            {
                //DataVolume.AlphaBlend = 1 - _transitionCounter / Interval;
                //PacketCount.AlphaBlend = 1 - _transitionCounter / Interval;
                CanvasCollection.AlphaBlend(1 - _transitionCounter / Interval);
            }

            _background.Draw(scale.XShift);

            ////draw data volume
            //DataVolume.Draw(scale);
            ////draw packet count
            //PacketCount.Draw(scale);
            //
            CanvasCollection.DrawCollection(scale);

            if (_transitionState == 2)
            {
                //DataVolume.DrawBackBuffer(scale.BaseScale, _transitionCanvas.ScaleData.MaxData, scale.XShift);
                //PacketCount.DrawBackBuffer(scale.BaseScale, _transitionCanvas.ScaleData.MaxCount, scale.XShift);
                CanvasCollection.DrawCollectionBackBuffer(scale);
            }

            //////reset viewport
            GL.Viewport(0, 0, CanvasManager.ControlWidth, CanvasManager.ControlHeight);
            GL.Disable(EnableCap.ScissorTest);

            Matrix4 transform = CanvasManager.ViewportTransform;

            GL.UniformMatrix4(CanvasManager.SimpleShader2D.UniformTransform, false, ref transform);
            GL.Uniform4(CanvasManager.SimpleShader2D.UniformColor, Color4.Black);
            GL.LineWidth(2f);

            Border.BeginDraw();
            Border.Draw(BeginMode.LineLoop);
            Border.EndDraw();

            //transform.Invert();
            //float left = -(transform.M11 - transform.M41);
            //float right = transform.M11 + transform.M41;
            _yAxis.Draw(_scaleData.MaxData);
            _xAxis.Draw(scale.XShift, scale.BaseScale);
        }