Ejemplo n.º 1
0
        /// <summary>
        /// Calculate width of each stacked column
        /// </summary>
        /// <param name="chart">Chart reference</param>
        /// <param name="plotGroup">PlotGroup</param>
        /// <param name="width">Width of the PlotArea</param>
        /// <param name="height">Width of the PlotArea</param>
        /// <param name="minDiff">Minimum difference between two DataPoints</param>
        /// <param name="maxColumnWidth">Maximum width of a StackedColumn</param>
        /// <returns>Width of a stacked column</returns>
        internal static Double CalculateWidthOfEachStackedColumn(Chart chart, PlotGroup plotGroup, Double heightOrWidth, out Double minDiff, out Double maxColumnWidth)
        {
            Double      widthPerColumn;
            PlotDetails plotDetails         = chart.PlotDetails;
            Double      widthDivisionFactor = plotDetails.DrawingDivisionFactor;

            if (chart.PlotDetails.ChartOrientation == ChartOrientationType.Vertical)
            {
                minDiff = plotDetails.GetMinOfMinDifferencesForXValue(RenderAs.Column, RenderAs.StackedColumn, RenderAs.StackedColumn100);
            }
            else
            {
                minDiff = plotDetails.GetMinOfMinDifferencesForXValue(RenderAs.Bar, RenderAs.StackedBar, RenderAs.StackedBar100);
            }

            if (Double.IsPositiveInfinity(minDiff))
            {
                minDiff = 0;
            }

            maxColumnWidth = Graphics.ValueToPixelPosition(0, heightOrWidth, (Double)plotGroup.AxisX.InternalAxisMinimum, (Double)plotGroup.AxisX.InternalAxisMaximum, minDiff + (Double)plotGroup.AxisX.InternalAxisMinimum) * (1 - ColumnChart.COLUMN_GAP_RATIO);
            widthPerColumn = maxColumnWidth / widthDivisionFactor;

            if (minDiff == 0)
            {
                widthPerColumn = heightOrWidth * .5 / widthDivisionFactor;
                maxColumnWidth = widthPerColumn * widthDivisionFactor;
            }
            else
            {
                widthPerColumn  = Graphics.ValueToPixelPosition(0, heightOrWidth, plotGroup.AxisX.InternalAxisMinimum, plotGroup.AxisX.InternalAxisMaximum, minDiff + plotGroup.AxisX.InternalAxisMinimum);
                widthPerColumn *= (1 - ((chart.PlotDetails.ChartOrientation == ChartOrientationType.Vertical) ? ColumnChart.COLUMN_GAP_RATIO : BarChart.BAR_GAP_RATIO));

                maxColumnWidth  = widthPerColumn;
                widthPerColumn /= widthDivisionFactor;
            }

            if (!Double.IsNaN(chart.DataPointWidth))
            {
                if (chart.DataPointWidth >= 0)
                {
                    widthPerColumn = maxColumnWidth = chart.DataPointWidth / 100 * ((chart.PlotDetails.ChartOrientation == ChartOrientationType.Vertical) ? chart.PlotArea.Width: chart.PlotArea.Height);

                    maxColumnWidth *= widthDivisionFactor;
                }
            }

            if (maxColumnWidth < 2)
            {
                maxColumnWidth = 2;
            }

            return(widthPerColumn);
        }
Ejemplo n.º 2
0
        public static string GetPlotDetails()
        {
            string response = "";

            try
            {
                List <PlotDetails> plotDetails = PlotDetails.GetAllPlots();
                response = JsonConvert.SerializeObject(plotDetails);
            }
            catch { }
            return(response);
        }
Ejemplo n.º 3
0
        protected void Add_Click(object sender, EventArgs e)
        {
            double lati  = Convert.ToDouble(lat.Value);
            double longi = Convert.ToDouble(lng.Value);

            _plotDetails = new PlotDetails(lati, longi);
            bool status = _plotDetails.SavePlot();

            if (status)
            {
                Utils.ShowMessage(this, "Plot added.!");
            }
            else
            {
                Utils.ShowMessage(this, "Failed.!");
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="dataPoint"></param>
        /// <param name="property"></param>
        /// <param name="newValue"></param>
        /// <param name="isAxisChanged"></param>
        private static void UpdateDataPoint(DataPoint dataPoint, VcProperties property, object newValue, Boolean isAxisChanged)
        {
            Chart       chart            = dataPoint.Chart as Chart;
            PlotDetails plotDetails      = chart.PlotDetails;
            Marker      marker           = dataPoint.Marker;
            DataSeries  dataSeries       = dataPoint.Parent;
            Canvas      bubleChartCanvas = dataSeries.Faces.Visual as Canvas;

            Double plotHeight = chart.ChartArea.ChartVisualCanvas.Height;
            Double plotWidth = chart.ChartArea.ChartVisualCanvas.Width;
            Double minimumZVal, maximumZVal;

            ColumnChart.UpdateParentVisualCanvasSize(chart, bubleChartCanvas);

            if (property == VcProperties.Enabled)
            {
                dataPoint._parsedToolTipText = dataPoint.TextParser(dataPoint.ToolTipText);
                CalculateMaxAndMinZValue(dataPoint.Parent, out minimumZVal, out maximumZVal);
                CreateOrUpdateAPointDataPoint(bubleChartCanvas, dataPoint, minimumZVal, maximumZVal, plotWidth, plotHeight);
                return;
            }

            if (dataPoint.Faces == null)
            {
                return;
            }

            Grid bubbleVisual = dataPoint.Faces.Visual as Grid;

            switch (property)
            {
            case VcProperties.Bevel:
                break;

            case VcProperties.Cursor:
                break;

            case VcProperties.Href:
                dataPoint.SetHref2DataPointVisualFaces();
                break;

            case VcProperties.HrefTarget:
                dataPoint.SetHref2DataPointVisualFaces();
                break;

            case VcProperties.LabelBackground:
                if (marker != null)
                {
                    marker.TextBackground = dataPoint.LabelBackground;
                }
                break;

            case VcProperties.LabelEnabled:
                CalculateMaxAndMinZValue(dataPoint.Parent, out minimumZVal, out maximumZVal);
                CreateOrUpdateAPointDataPoint(bubleChartCanvas, dataPoint, minimumZVal, maximumZVal, plotWidth, plotHeight);

                //if (marker != null)
                //    marker.LabelEnabled = (Boolean)dataPoint.LabelEnabled;

                break;

            case VcProperties.LabelFontColor:
                if (marker != null)
                {
                    marker.FontColor = dataPoint.LabelFontColor;
                }

                break;

            case VcProperties.LabelFontFamily:
                if (marker != null)
                {
                    marker.FontFamily = dataPoint.LabelFontFamily;
                }
                break;

            case VcProperties.LabelFontStyle:
                if (marker != null)
                {
                    marker.FontStyle = (FontStyle)dataPoint.LabelFontStyle;
                }
                break;

            //case VcProperties.LabelFontSize:
            //    if (marker != null)
            //        marker.FontSize = (Double)dataPoint.LabelFontSize;
            //    break;

            case VcProperties.LabelFontWeight:
                if (marker != null)
                {
                    marker.FontWeight = (FontWeight)dataPoint.LabelFontWeight;
                }
                break;

            case VcProperties.LabelAngle:
                if (marker != null)
                {
                    marker.FontWeight = (FontWeight)dataPoint.LabelFontWeight;
                }
                break;

            case VcProperties.LegendText:
                chart.InvokeRender();
                break;

            case VcProperties.Color:
            case VcProperties.LightingEnabled:
                if (marker != null)
                {
                    marker.MarkerShape.Fill = (chart.View3D ? Graphics.Get3DBrushLighting(dataPoint.Color, (Boolean)dataPoint.LightingEnabled) : ((Boolean)dataPoint.LightingEnabled ? Graphics.GetLightingEnabledBrush(dataPoint.Color, "Linear", null) : dataPoint.Color));
                }
                break;

            case VcProperties.MarkerBorderColor:
                if (marker != null)
                {
                    marker.BorderColor = dataPoint.MarkerBorderColor;
                }
                break;

            case VcProperties.MarkerBorderThickness:
                if (marker != null)
                {
                    marker.BorderThickness = dataPoint.MarkerBorderThickness.Value.Left;
                }
                break;

            case VcProperties.XValueFormatString:
            case VcProperties.YValueFormatString:
            case VcProperties.LabelFontSize:
            case VcProperties.LabelStyle:
            case VcProperties.LabelText:
            case VcProperties.MarkerScale:
            case VcProperties.MarkerSize:
            case VcProperties.MarkerType:
                dataPoint._parsedToolTipText = dataPoint.TextParser(dataPoint.ToolTipText);
                CalculateMaxAndMinZValue(dataPoint.Parent, out minimumZVal, out maximumZVal);
                CreateOrUpdateAPointDataPoint(bubleChartCanvas, dataPoint, minimumZVal, maximumZVal, plotWidth, plotHeight);
                break;

            case VcProperties.ShadowEnabled:
                if (marker != null)
                {
                    marker.ShadowEnabled = (Boolean)dataPoint.ShadowEnabled;
                    marker.ApplyRemoveShadow();
                }
                break;

            case VcProperties.Opacity:
                if (marker != null)
                {
                    marker.Visual.Opacity = dataPoint.Opacity * dataSeries.Opacity;
                }
                break;

            case VcProperties.ShowInLegend:
                chart.InvokeRender();
                break;

            case VcProperties.ToolTipText:
                dataPoint._parsedToolTipText = dataPoint.TextParser(dataPoint.ToolTipText);
                break;

            case VcProperties.XValueType:
                chart.InvokeRender();
                break;

            case VcProperties.XValue:
            case VcProperties.YValue:

                if (isAxisChanged)
                {
                    UpdateDataSeries(dataSeries, property, newValue, false);
                }
                else
                if (marker != null)
                {
                    dataPoint._parsedToolTipText = dataPoint.TextParser(dataPoint.ToolTipText);

                    if ((Boolean)dataPoint.LabelEnabled)
                    {
                        marker.Text = dataPoint.TextParser(dataPoint.LabelText);
                    }

                    UpdateBubblePositionAccording2XandYValue(dataPoint, plotWidth, plotHeight, chart.AnimatedUpdate, marker.MarkerShape.Width, marker.MarkerShape.Width);
                }

                break;

            case VcProperties.ZValue:

                dataPoint._parsedToolTipText = dataPoint.TextParser(dataPoint.ToolTipText);

                //if ((Boolean)dataPoint.LabelEnabled)
                //    marker.Text = dataPoint.TextParser(dataPoint.LabelText);

                CalculateMaxAndMinZValue(dataPoint.Parent, out minimumZVal, out maximumZVal);

                foreach (DataPoint dp in dataSeries.InternalDataPoints)
                {
                    if (Double.IsNaN(dp.InternalYValue) || (dp.Enabled == false))
                    {
                        continue;
                    }

                    ApplyZValue(dp, minimumZVal, maximumZVal, plotWidth, plotHeight);
                }

                break;
            }


            if (bubleChartCanvas.Parent != null)
            {
                RectangleGeometry clipRectangle = new RectangleGeometry();
                clipRectangle.Rect = new Rect(0, -(dataPoint.Chart as Chart).ChartArea.PLANK_DEPTH, plotWidth + (dataPoint.Chart as Chart).ChartArea.PLANK_OFFSET, plotHeight + (dataPoint.Chart as Chart).ChartArea.PLANK_DEPTH);
                (bubleChartCanvas.Parent as Canvas).Clip = clipRectangle;
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Get visual object for bubble chart
        /// </summary>
        /// <param name="width">Width of the chart</param>
        /// <param name="height">Height of the chart</param>
        /// <param name="plotDetails">plotDetails</param>
        /// <param name="seriesList">List of DataSeries</param>
        /// <param name="chart">Chart</param>
        /// <param name="plankDepth">Plank depth</param>
        /// <param name="animationEnabled">Whether animation is enabled</param>
        /// <returns>Bubble chart canvas</returns>
        internal static Canvas GetVisualObjectForBubbleChart(Panel preExistingPanel, Double width, Double height, PlotDetails plotDetails, List <DataSeries> seriesList, Chart chart, Double plankDepth, bool animationEnabled)
        {
            if (Double.IsNaN(width) || Double.IsNaN(height) || width <= 0 || height <= 0)
            {
                return(null);
            }

            // Visual for all bubble charts, Nothing but presisting visual for buble chart
            Canvas visual;

            // Holds all bubbles of all series
            Canvas bubbleChartCanvas;

            RenderHelper.RepareCanvas4Drawing(preExistingPanel as Canvas, out visual, out bubbleChartCanvas, width, height);

            Double depth3d      = plankDepth / (plotDetails.Layer3DCount == 0 ? 1 : plotDetails.Layer3DCount) * (chart.View3D ? 1 : 0);
            Double visualOffset = depth3d * (plotDetails.SeriesDrawingIndex[seriesList[0]] + 1 - (plotDetails.Layer3DCount == 0 ? 0 : 1));

            visual.SetValue(Canvas.TopProperty, visualOffset);
            visual.SetValue(Canvas.LeftProperty, -visualOffset);

            foreach (DataSeries series in seriesList)
            {
                Faces dsFaces = new Faces()
                {
                    Visual = bubbleChartCanvas
                };
                series.Faces = dsFaces;

                if (series.Enabled == false)
                {
                    continue;
                }

                //out Double minimumZVal, out Double maximumZVal
                PlotGroup plotGroup = series.PlotGroup;

                Double minimumZVal, maximumZVal;
                CalculateMaxAndMinZValue(series, out minimumZVal, out maximumZVal);

                // Boolean pixelLavelShadow = false;

                //if (series.InternalDataPoints.Count <= 25)
                //    pixelLavelShadow = true;

                foreach (DataPoint dataPoint in series.InternalDataPoints)
                {
                    CreateOrUpdateAPointDataPoint(bubbleChartCanvas, dataPoint, minimumZVal, maximumZVal, width, height);

                    // Apply animation
                    if (animationEnabled && dataPoint.Marker != null)
                    {
                        if (dataPoint.Parent.Storyboard == null)
                        {
                            dataPoint.Parent.Storyboard = new Storyboard();
                        }

                        // Apply animation to the bubbles
                        dataPoint.Parent.Storyboard = ApplyBubbleChartAnimation(dataPoint.Parent, dataPoint.Marker.Visual, dataPoint.Parent.Storyboard, width, height);
                    }
                }
            }

            RectangleGeometry clipRectangle = new RectangleGeometry();

            clipRectangle.Rect = new Rect(0, -chart.ChartArea.PLANK_DEPTH, width + chart.ChartArea.PLANK_OFFSET, height + chart.ChartArea.PLANK_DEPTH);
            visual.Clip        = clipRectangle;

            return(visual);
        }
Ejemplo n.º 6
0
        //internal static void Update(Chart chart, RenderAs currentRenderAs, List<DataSeries> selectedDataSeries4Rendering, VcProperties property, object newValue)
        //{
        //    Boolean is3D = chart.View3D;
        //    ChartArea chartArea = chart.ChartArea;
        //    Canvas ChartVisualCanvas = chart.ChartArea.ChartVisualCanvas;

        //    // Double width = chart.ChartArea.ChartVisualCanvas.Width;
        //    // Double height = chart.ChartArea.ChartVisualCanvas.Height;

        //    Panel preExistingPanel = null;
        //    Dictionary<RenderAs, Panel> RenderedCanvasList = chart.ChartArea.RenderedCanvasList;

        //    if (chartArea.RenderedCanvasList.ContainsKey(currentRenderAs))
        //    {
        //        preExistingPanel = RenderedCanvasList[currentRenderAs];
        //    }

        //    Panel renderedChart = chartArea.RenderSeriesFromList(preExistingPanel, selectedDataSeries4Rendering);

        //    if (preExistingPanel == null)
        //    {
        //        chartArea.RenderedCanvasList.Add(currentRenderAs, renderedChart);
        //        ChartVisualCanvas.Children.Add(renderedChart);
        //    }
        //}

        /// <summary>
        ///
        /// </summary>
        /// <param name="dataPoint"></param>
        /// <param name="property"></param>
        /// <param name="newValue"></param>
        /// <param name="isAxisChanged"></param>
        private static void UpdateDataPoint(DataPoint dataPoint, VcProperties property, object newValue, Boolean isAxisChanged)
        {
            Chart       chart       = dataPoint.Chart as Chart;
            PlotDetails plotDetails = chart.PlotDetails;
            Marker      marker      = dataPoint.Marker;
            DataSeries  dataSeries  = dataPoint.Parent;

            Canvas pointChartCanvas = dataSeries.Faces.Visual as Canvas;

            Double plotHeight = chart.ChartArea.ChartVisualCanvas.Height;
            Double plotWidth  = chart.ChartArea.ChartVisualCanvas.Width;

            ColumnChart.UpdateParentVisualCanvasSize(chart, pointChartCanvas);

            if (property == VcProperties.Enabled)
            {
                CreateOrUpdateAPointDataPoint(pointChartCanvas, dataPoint, plotWidth, plotHeight);
                return;
            }

            if (dataPoint.Faces == null)
            {
                return;
            }

            Grid bubbleVisual = dataPoint.Faces.Visual as Grid;

            switch (property)
            {
            case VcProperties.Bevel:
                break;

            case VcProperties.Cursor:
                break;

            case VcProperties.Href:
                dataPoint.SetHref2DataPointVisualFaces();
                break;

            case VcProperties.HrefTarget:
                dataPoint.SetHref2DataPointVisualFaces();
                break;

            case VcProperties.LabelBackground:
                if (marker != null)
                {
                    marker.TextBackground = dataPoint.LabelBackground;
                }
                break;

            case VcProperties.LabelEnabled:
                CreateOrUpdateAPointDataPoint(pointChartCanvas, dataPoint, plotWidth, plotHeight);
                //if (marker != null)
                //    marker.LabelEnabled = (Boolean)dataPoint.LabelEnabled;
                break;

            case VcProperties.LabelFontColor:
                if (marker != null)
                {
                    marker.FontColor = dataPoint.LabelFontColor;
                }

                break;

            case VcProperties.LabelFontFamily:
                if (marker != null)
                {
                    marker.FontFamily = dataPoint.LabelFontFamily;
                }
                break;

            case VcProperties.LabelFontStyle:
                if (marker != null)
                {
                    marker.FontStyle = (FontStyle)dataPoint.LabelFontStyle;
                }
                break;

            //case VcProperties.LabelFontSize:
            //    if (marker != null)
            //        marker.FontSize = (Double)dataPoint.LabelFontSize;
            //    break;

            case VcProperties.LabelFontWeight:
                if (marker != null)
                {
                    marker.FontWeight = (FontWeight)dataPoint.LabelFontWeight;
                }
                break;

            case VcProperties.LabelAngle:
                if (marker != null)
                {
                    marker.FontWeight = (FontWeight)dataPoint.LabelFontWeight;
                }
                break;

            case VcProperties.LegendText:
                chart.InvokeRender();
                break;

            case VcProperties.Color:
            case VcProperties.LightingEnabled:
                if (marker != null)
                {
                    marker.MarkerShape.Fill = (chart.View3D ? Graphics.Get3DBrushLighting(dataPoint.Color, (Boolean)dataPoint.LightingEnabled) : ((Boolean)dataPoint.LightingEnabled ? Graphics.GetLightingEnabledBrush(dataPoint.Color, "Linear", null) : dataPoint.Color));
                }
                break;

            case VcProperties.MarkerBorderColor:
                if (marker != null)
                {
                    marker.BorderColor = dataPoint.MarkerBorderColor;
                }
                break;

            case VcProperties.MarkerBorderThickness:
                if (marker != null)
                {
                    marker.BorderThickness = dataPoint.MarkerBorderThickness.Value.Left;
                }
                break;

            case VcProperties.MarkerColor:
                if (marker != null)
                {
                    marker.MarkerFillColor = dataPoint.MarkerColor;
                }
                break;

            case VcProperties.LabelFontSize:
            case VcProperties.LabelStyle:
            case VcProperties.LabelText:
            case VcProperties.MarkerScale:
            case VcProperties.MarkerSize:
            case VcProperties.MarkerType:
                CreateOrUpdateAPointDataPoint(pointChartCanvas, dataPoint, plotWidth, plotHeight);
                break;

            case VcProperties.ShadowEnabled:
                if (marker != null)
                {
                    marker.ShadowEnabled = (Boolean)dataPoint.ShadowEnabled;
                    marker.ApplyRemoveShadow();
                }

                break;

            case VcProperties.Opacity:
                if (marker != null)
                {
                    marker.Visual.Opacity = dataPoint.Opacity * dataSeries.Opacity;
                }
                break;

            case VcProperties.ShowInLegend:
                chart.InvokeRender();
                break;

            case VcProperties.ToolTipText:
                dataPoint._parsedToolTipText = dataPoint.TextParser(dataPoint.ToolTipText);
                break;

            case VcProperties.XValueFormatString:
            case VcProperties.YValueFormatString:
                dataPoint._parsedToolTipText = dataPoint.TextParser(dataPoint.ToolTipText);
                CreateOrUpdateAPointDataPoint(pointChartCanvas, dataPoint, plotWidth, plotHeight);
                break;

            case VcProperties.XValueType:
                chart.InvokeRender();
                break;

            case VcProperties.XValue:
            case VcProperties.YValue:
                if (isAxisChanged)
                {
                    UpdateDataSeries(dataSeries, property, newValue, false);
                }
                else
                if (marker != null)
                {
                    dataPoint._parsedToolTipText = dataPoint.TextParser(dataPoint.ToolTipText);

                    if ((Boolean)dataPoint.LabelEnabled)
                    {
                        marker.Text = dataPoint.TextParser(dataPoint.LabelText);
                    }

                    BubbleChart.UpdateBubblePositionAccording2XandYValue(dataPoint, plotWidth, plotHeight, chart.AnimatedUpdate, marker.MarkerShape.Width, marker.MarkerShape.Width);
                }

                break;
            }

            if (pointChartCanvas.Parent != null)
            {
                Double tickLengthOfAxisX = (from tick in chart.AxesX[0].Ticks
                                            where (Boolean)chart.AxesX[0].Enabled && (Boolean)tick.Enabled
                                            select tick.TickLength).Sum();

                if (tickLengthOfAxisX == 0)
                {
                    tickLengthOfAxisX = 5;
                }

                Double tickLengthOfPrimaryAxisY = (from axis in chart.AxesY
                                                   where axis.AxisType == AxisTypes.Primary
                                                   from tick in axis.Ticks
                                                   where (Boolean)axis.Enabled && (Boolean)tick.Enabled
                                                   select tick.TickLength).Sum();

                if (tickLengthOfPrimaryAxisY == 0)
                {
                    tickLengthOfPrimaryAxisY = 8;
                }

                Double tickLengthOfSecondaryAxisY = (from axis in chart.AxesY
                                                     where axis.AxisType == AxisTypes.Secondary
                                                     from tick in axis.Ticks
                                                     where (Boolean)axis.Enabled && (Boolean)tick.Enabled
                                                     select tick.TickLength).Sum();

                if (tickLengthOfSecondaryAxisY == 0)
                {
                    tickLengthOfSecondaryAxisY = 8;
                }

                Double plotGroupCount = (from c in chart.PlotDetails.PlotGroups
                                         where c.AxisY.AxisType == AxisTypes.Secondary
                                         select c).Count();

                RectangleGeometry clipRectangle = new RectangleGeometry();
                clipRectangle.Rect = new Rect(-tickLengthOfPrimaryAxisY, -chart.ChartArea.PLANK_DEPTH - 4, plotWidth + tickLengthOfSecondaryAxisY + (plotGroupCount > 0 ? tickLengthOfPrimaryAxisY : 8) + chart.ChartArea.PLANK_OFFSET, plotHeight + chart.ChartArea.PLANK_DEPTH + chart.ChartArea.PLANK_THICKNESS + tickLengthOfAxisX + 4);
                (pointChartCanvas.Parent as Canvas).Clip = clipRectangle;
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Get visual object for point chart
        /// </summary>
        /// <param name="width">Width of the charat</param>
        /// <param name="height">Height of the charat</param>
        /// <param name="plotDetails">plotDetails</param>
        /// <param name="seriesList">List of DataSeries</param>
        /// <param name="chart">Chart</param>
        /// <param name="plankDepth">Plank depth</param>
        /// <param name="animationEnabled">Whether animation is enabled</param>
        /// <returns>Point chart canvas</returns>
        internal static Canvas GetVisualObjectForPointChart(Panel preExistingPanel, Double plotAreaWidth, Double plotAreaHeight, PlotDetails plotDetails, List <DataSeries> seriesList, Chart chart, Double plankDepth, bool animationEnabled)
        {
            if (Double.IsNaN(plotAreaWidth) || Double.IsNaN(plotAreaHeight) || plotAreaWidth <= 0 || plotAreaHeight <= 0)
            {
                return(null);
            }

            Canvas visual, pointChartCanvas; // pointChartCanvas holds all points for all series

            RenderHelper.RepareCanvas4Drawing(preExistingPanel as Canvas, out visual, out pointChartCanvas, plotAreaWidth, plotAreaHeight);

            Double depth3d      = plankDepth / (plotDetails.Layer3DCount == 0 ? 1 : plotDetails.Layer3DCount) * (chart.View3D ? 1 : 0);
            Double visualOffset = depth3d * (plotDetails.SeriesDrawingIndex[seriesList[0]] + 1 - (plotDetails.Layer3DCount == 0 ? 0 : 1));

            visual.SetValue(Canvas.TopProperty, visualOffset);
            visual.SetValue(Canvas.LeftProperty, -visualOffset);

            foreach (DataSeries series in seriesList)
            {
                series.Faces = new Faces()
                {
                    Visual = pointChartCanvas
                };

                if (series.Enabled == false)
                {
                    continue;
                }

                foreach (DataPoint dataPoint in series.InternalDataPoints)
                {
                    CreateOrUpdateAPointDataPoint(pointChartCanvas, dataPoint, plotAreaWidth, plotAreaHeight);

                    // Apply initial animation
                    if (animationEnabled && dataPoint.Marker != null)
                    {
                        if (dataPoint.Parent.Storyboard == null)
                        {
                            dataPoint.Parent.Storyboard = new Storyboard();
                        }

                        // Apply animation to the points
                        dataPoint.Parent.Storyboard = ApplyPointChartAnimation(dataPoint.Parent, dataPoint.Marker.Visual, dataPoint.Parent.Storyboard, plotAreaWidth, plotAreaHeight);
                    }
                }
            }

            Double tickLengthOfAxisX = (from tick in chart.AxesX[0].Ticks
                                        where (Boolean)chart.AxesX[0].Enabled && (Boolean)tick.Enabled
                                        select tick.TickLength).Sum();

            if (tickLengthOfAxisX == 0)
            {
                tickLengthOfAxisX = 5;
            }

            Double tickLengthOfPrimaryAxisY = (from axis in chart.AxesY
                                               where axis.AxisType == AxisTypes.Primary
                                               from tick in axis.Ticks
                                               where (Boolean)axis.Enabled && (Boolean)tick.Enabled
                                               select tick.TickLength).Sum();

            if (tickLengthOfPrimaryAxisY == 0)
            {
                tickLengthOfPrimaryAxisY = 8;
            }

            Double tickLengthOfSecondaryAxisY = (from axis in chart.AxesY
                                                 where axis.AxisType == AxisTypes.Secondary
                                                 from tick in axis.Ticks
                                                 where (Boolean)axis.Enabled && (Boolean)tick.Enabled
                                                 select tick.TickLength).Sum();

            if (tickLengthOfSecondaryAxisY == 0)
            {
                tickLengthOfSecondaryAxisY = 8;
            }

            Double plotGroupCount = (from c in chart.PlotDetails.PlotGroups
                                     where c.AxisY.AxisType == AxisTypes.Secondary
                                     select c).Count();

            RectangleGeometry clipRectangle = new RectangleGeometry();

            clipRectangle.Rect = new Rect(-tickLengthOfPrimaryAxisY, -chart.ChartArea.PLANK_DEPTH - 4, plotAreaWidth + tickLengthOfSecondaryAxisY + (plotGroupCount > 0 ? tickLengthOfPrimaryAxisY : 8) + chart.ChartArea.PLANK_OFFSET, plotAreaHeight + chart.ChartArea.PLANK_DEPTH + chart.ChartArea.PLANK_THICKNESS + tickLengthOfAxisX + 4);
            visual.Clip        = clipRectangle;

            return(visual);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Returns the visual object for line chart
        /// </summary>
        /// <param name="width">PlotArea width</param>
        /// <param name="height">PlotArea height</param>
        /// <param name="plotDetails">PlotDetails</param>
        /// <param name="seriesList">List of line series</param>
        /// <param name="chart">Chart</param>
        /// <param name="plankDepth">PlankDepth</param>
        /// <param name="animationEnabled">Whether animation is enabled for chart</param>
        /// <returns>Canvas</returns>
        internal static Canvas GetVisualObjectForQuickLineChart(Panel preExistingPanel, Double width, Double height, PlotDetails plotDetails, List <DataSeries> seriesList, Chart chart, Double plankDepth, bool animationEnabled)
        {
            if (Double.IsNaN(width) || Double.IsNaN(height) || width <= 0 || height <= 0)
            {
                return(null);
            }

            DataSeries currentDataSeries;

            Canvas visual, labelsCanvas, chartsCanvas;

            RenderHelper.RepareCanvas4Drawing(preExistingPanel as Canvas, out visual, out labelsCanvas, out chartsCanvas, width, height);

            Double depth3d      = plankDepth / (plotDetails.Layer3DCount == 0 ? 1 : plotDetails.Layer3DCount) * (chart.View3D ? 1 : 0);
            Double visualOffset = depth3d * (plotDetails.SeriesDrawingIndex[seriesList[0]] + 1 - (plotDetails.Layer3DCount == 0 ? 0 : 1));

            // Set visual canvas position

            visual.SetValue(Canvas.TopProperty, visualOffset);
            visual.SetValue(Canvas.LeftProperty, -visualOffset);

            // visual.Background = new SolidColorBrush(Colors.Yellow);

            Boolean isMovingMarkerEnabled = false; // Whether moving marker is enabled for atleast one series

            Double minimumXValue = Double.MaxValue;
            Double maximumXValue = Double.MinValue;

            foreach (DataSeries series in seriesList)
            {
                currentDataSeries = series;
                LineChart.CreateAlineSeries(series, width, height, labelsCanvas, chartsCanvas, animationEnabled);
                isMovingMarkerEnabled = isMovingMarkerEnabled || series.MovingMarkerEnabled;

                minimumXValue = Math.Min(minimumXValue, series.PlotGroup.MinimumX);
                maximumXValue = Math.Max(maximumXValue, series.PlotGroup.MaximumX);
            }

            // If animation is not enabled or if there are no series in the serieslist the dont apply animation
            if (animationEnabled && seriesList.Count > 0)
            {
                // Apply animation to the label canvas
                currentDataSeries = seriesList[0];

                if (currentDataSeries.Storyboard == null)
                {
                    currentDataSeries.Storyboard = new Storyboard();
                }

                currentDataSeries.Storyboard = LineChart.ApplyLineChartAnimation(currentDataSeries, labelsCanvas, currentDataSeries.Storyboard, false);
            }

            // Remove old visual and add new visual in to the existing panel
            if (preExistingPanel != null)
            {
                visual.Children.RemoveAt(1);
                // chartsCanvas.Background = Graphics.GetRandomColor();
                visual.Children.Add(chartsCanvas);
            }
            else
            {
                labelsCanvas.SetValue(Canvas.ZIndexProperty, 1);
                visual.Children.Add(labelsCanvas);
                visual.Children.Add(chartsCanvas);
            }

            chartsCanvas.Height = height;
            labelsCanvas.Height = height;
            chartsCanvas.Width  = width;
            labelsCanvas.Width  = width;

            LineChart.Clip(chart, chartsCanvas, labelsCanvas, seriesList[0].PlotGroup);

            return(visual);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Get visual object for Polar chart
        /// </summary>
        /// <param name="width">Width</param>
        /// <param name="height">Height</param>
        /// <param name="plotDetails">PlotDetails</param>
        /// <param name="seriesList">List of series</param>
        /// <param name="chart">Chart</param>
        /// <param name="isAnimationEnabled">Whether animation is enabled for chart</param>
        /// <returns>Canvas</returns>
        internal static Canvas GetVisualObjectForPolarChart(Double width, Double height, PlotDetails plotDetails, List <DataSeries> seriesList, Chart chart, bool isAnimationEnabled)
        {
            if (Double.IsNaN(width) || Double.IsNaN(height) || width <= 0 || height <= 0)
            {
                return(null);
            }

            Canvas visual = new Canvas()
            {
                Width = width, Height = height
            };

            Axis axisX = seriesList[0].PlotGroup.AxisX;

            Size radarSize = new Size(width, height);

            foreach (DataSeries ds in seriesList)
            {
                if (ds.InternalDataPoints.Count == 0)
                {
                    continue;
                }

                Canvas polarCanvas = GetDataSeriesVisual(chart, radarSize.Width, radarSize.Height, ds, axisX.CircularPlotDetails);

                visual.Children.Add(polarCanvas);
            }

            return(visual);
        }
Ejemplo n.º 10
0
        internal static Panel GetVisualObject(Panel preExistingPanel, RenderAs chartType, Double width, Double height, PlotDetails plotDetails, List <DataSeries> dataSeriesList4Rendering, Chart chart, Double plankDepth, bool animationEnabled)
        {
            Panel renderedCanvas = null;

            switch (chartType)
            {
            case RenderAs.Column:
                renderedCanvas = ColumnChart.GetVisualObjectForColumnChart(preExistingPanel, width, height, plotDetails, dataSeriesList4Rendering, chart, plankDepth, animationEnabled);
                break;

            case RenderAs.Bar:
                renderedCanvas = ColumnChart.GetVisualObjectForColumnChart(preExistingPanel, width, height, plotDetails, dataSeriesList4Rendering, chart, plankDepth, animationEnabled);

                //renderedCanvas = BarChart.GetVisualObjectForBarChart(preExistingPanel, width, height, plotDetails, dataSeriesList4Rendering, chart, plankDepth, animationEnabled);
                break;

            case RenderAs.Line:
                renderedCanvas = LineChart.GetVisualObjectForLineChart(preExistingPanel, width, height, plotDetails, dataSeriesList4Rendering, chart, plankDepth, animationEnabled);
                break;

            case RenderAs.Point:
                renderedCanvas = PointChart.GetVisualObjectForPointChart(preExistingPanel, width, height, plotDetails, dataSeriesList4Rendering, chart, plankDepth, animationEnabled);
                break;

            case RenderAs.Bubble:
                renderedCanvas = BubbleChart.GetVisualObjectForBubbleChart(preExistingPanel, width, height, plotDetails, dataSeriesList4Rendering, chart, plankDepth, animationEnabled);
                break;

            case RenderAs.Area:
                renderedCanvas = AreaChart.GetVisualObjectForAreaChart(preExistingPanel, width, height, plotDetails, dataSeriesList4Rendering, chart, plankDepth, animationEnabled);
                break;

            case RenderAs.StackedColumn:
                renderedCanvas = ColumnChart.GetVisualObjectForStackedColumnChart(chartType, preExistingPanel, width, height, plotDetails, chart, plankDepth, animationEnabled);
                break;

            case RenderAs.StackedColumn100:
                renderedCanvas = ColumnChart.GetVisualObjectForStackedColumnChart(chartType, preExistingPanel, width, height, plotDetails, chart, plankDepth, animationEnabled);

                //renderedCanvas = ColumnChart.GetVisualObjectForStackedColumn100Chart(width, height, plotDetails, chart, plankDepth, animationEnabled);
                break;

            case RenderAs.StackedBar:
                renderedCanvas = BarChart.GetVisualObjectForStackedBarChart(chartType, preExistingPanel, width, height, plotDetails, chart, plankDepth, animationEnabled);
                break;

            case RenderAs.StackedBar100:
                renderedCanvas = BarChart.GetVisualObjectForStackedBarChart(chartType, preExistingPanel, width, height, plotDetails, chart, plankDepth, animationEnabled);

                // renderedCanvas = BarChart.GetVisualObjectForStackedBar100Chart(width, height, plotDetails, chart, plankDepth, animationEnabled);
                break;

            case RenderAs.Pie:
                renderedCanvas = PieChart.GetVisualObjectForPieChart(width, height, plotDetails, dataSeriesList4Rendering, chart, animationEnabled);
                break;

            case RenderAs.Doughnut:
                renderedCanvas = PieChart.GetVisualObjectForDoughnutChart(width, height, plotDetails, dataSeriesList4Rendering, chart, animationEnabled);
                break;

            case RenderAs.StackedArea:
                renderedCanvas = AreaChart.GetVisualObjectForStackedAreaChart(preExistingPanel, width, height, plotDetails, dataSeriesList4Rendering, chart, plankDepth, animationEnabled);
                break;

            case RenderAs.StackedArea100:
                renderedCanvas = AreaChart.GetVisualObjectForStackedArea100Chart(preExistingPanel, width, height, plotDetails, dataSeriesList4Rendering, chart, plankDepth, animationEnabled);
                break;

            case RenderAs.SectionFunnel:
                renderedCanvas = FunnelChart.GetVisualObjectForFunnelChart(width, height, plotDetails, dataSeriesList4Rendering, chart, animationEnabled, false);

                break;

            case RenderAs.StreamLineFunnel:
                renderedCanvas = FunnelChart.GetVisualObjectForFunnelChart(width, height, plotDetails, dataSeriesList4Rendering, chart, animationEnabled, true);
                break;

            case RenderAs.Stock:
                renderedCanvas = StockChart.GetVisualObjectForStockChart(preExistingPanel, width, height, plotDetails, dataSeriesList4Rendering, chart, plankDepth, animationEnabled);
                break;

            case RenderAs.CandleStick:
                renderedCanvas = CandleStick.GetVisualObjectForCandleStick(preExistingPanel, width, height, plotDetails, dataSeriesList4Rendering, chart, plankDepth, animationEnabled);
                break;
            }

            return(renderedCanvas);
        }
Ejemplo n.º 11
0
    //
    // - - - Supplementary File Ops
    //

    /// <summary>
    /// Creates a ginormous dataDump string in a suitable cut and paste, Keep friendly, format, from all Stories in dictOfStories
    /// </summary>
    /// <returns></returns>
    public string CreateExportDataDump()
    {
        StringBuilder builderMain = new StringBuilder();
        Dictionary <string, Story> dictOfStories = ToolManager.i.toolDataScript.GetDictOfStories();

        if (dictOfStories != null)
        {
            int    count;
            string characters;
            foreach (var story in dictOfStories)
            {
                //create an individual story builder
                StringBuilder builderStory = new StringBuilder();
                //Story Details
                builderStory.AppendFormat("- - - NewAdventure{0}", "\n");
                builderStory.AppendFormat("Name: {0}{1}", story.Value.tag, "\n");
                builderStory.AppendFormat("Date: {0}{1}", story.Value.date, "\n");
                builderStory.AppendFormat("NameSet: {0}{1}", story.Value.nameSet, "\n");
                builderStory.AppendFormat("Theme: {0} / {1} / {2} / {3} / {4}{5}{6}", story.Value.theme.GetThemeType(1), story.Value.theme.GetThemeType(2), story.Value.theme.GetThemeType(3),
                                          story.Value.theme.GetThemeType(4), story.Value.theme.GetThemeType(5), "\n", "\n");
                builderStory.AppendFormat("{0}{1}", story.Value.notes, "\n");
                //Turning Point summary
                for (int i = 0; i < story.Value.arrayOfTurningPoints.Length; i++)
                {
                    TurningPoint turningPoint = story.Value.arrayOfTurningPoints[i];
                    builderStory.AppendFormat("{0}TurningPoint {1}: {2}{3}{4}", "\n", i, turningPoint.tag, "\n", "\n");
                    builderStory.AppendFormat("Notes: {0}{1}", turningPoint.notes, "\n");
                    //summary
                    builderStory.AppendFormat("{0}TurningPoint {1} Summary{2}", "\n", i, "\n");
                    for (int j = 0; j < turningPoint.arrayOfDetails.Length; j++)
                    {
                        PlotDetails details = turningPoint.arrayOfDetails[j];
                        characters = "";
                        //only character1 present
                        if (details.character1.tag != null && details.character2.tag == null)
                        {
                            characters = string.Format("{0}", details.character1.tag.Length > 0 ? " -> " + details.character1.tag : "");
                        }
                        //both present
                        else if (details.character1.tag != null && details.character2.tag != null)
                        {
                            characters = string.Format("{0}{1}", details.character1.tag.Length > 0 ? " -> " + details.character1.tag : "", details.character2.tag.Length > 0 ? " / " + details.character2.tag : "");
                        }
                        //neither present -> do nothing
                        else if (details.character1.tag == null && details.character2.tag == null)
                        {
                        }
                        //character1 null and character2 present -> Error condition as shouldn't happen
                        else
                        {
                            Debug.LogWarningFormat("Invalid characters ->  character1.tag {0}, character2.tag {1}, for plotPoint {2}", details.character1.tag == null ? "Null" : "O.K",
                                                   details.character2.tag == null ? "Null" : "O.K", details.plotPoint);
                        }
                        builderStory.AppendFormat("[{0} {1}] {2}{3}", j, details.plotPoint, characters, "\n");
                        if (details.notes != null && details.notes.Length > 0)
                        {
                            builderStory.AppendFormat("{0}~{1}~{2}{3}", "\n", details.notes, "\n", "\n");
                        }
                    }
                }
                //lists -> Active Plotline
                builderStory.AppendFormat("{0}- Active PlotLines{1}", "\n", "\n");
                count = story.Value.lists.listOfPlotLines.Count;
                if (count > 0)
                {
                    for (int i = 0; i < count; i++)
                    {
                        builderStory.AppendFormat("{0}{1}", story.Value.lists.listOfPlotLines[i].tag, "\n");
                    }
                }
                else
                {
                    builderStory.AppendFormat("No active PlotLines remaining{0}{1}", "\n", "\n");
                }
                //lists -> Removed Plotline
                builderStory.AppendFormat("{0}- Removed PlotLines{1}", "\n", "\n");
                count = story.Value.lists.listOfRemovedPlotLines.Count;
                if (count > 0)
                {
                    for (int i = 0; i < count; i++)
                    {
                        builderStory.AppendFormat("{0}{1}", story.Value.lists.listOfRemovedPlotLines[i].tag, "\n");
                    }
                }
                else
                {
                    builderStory.AppendFormat("No plotLines have been Removed{0}{1}", "\n", "\n");
                }
                //lists -> Characters
                builderStory.AppendFormat("{0}- Active Characters{1}", "\n", "\n");
                count = story.Value.lists.listOfCharacters.Count;
                if (count > 0)
                {
                    for (int i = 0; i < count; i++)
                    {
                        builderStory.AppendFormat("{0} -> {1}{2}", story.Value.lists.listOfCharacters[i].tag, story.Value.lists.listOfCharacters[i].dataCreated, "\n");
                    }
                }
                else
                {
                    builderStory.AppendFormat("No active Characters remaining{0}{1}", "\n", "\n");
                }
                //lists -> RemovedCharacters
                builderStory.AppendFormat("{0}- Removed Characters{1}", "\n", "\n");
                count = story.Value.lists.listOfRemovedCharacters.Count;
                if (count > 0)
                {
                    for (int i = 0; i < count; i++)
                    {
                        builderStory.AppendFormat("{0} -> {1}{2}", story.Value.lists.listOfRemovedCharacters[i].tag, story.Value.lists.listOfCharacters[i].dataCreated, "\n");
                    }
                }
                else
                {
                    builderStory.AppendFormat("No characters have been removed{0}{1}", "\n", "\n");
                }
                //Characters in detail -> Active Characters
                builderStory.AppendFormat("{0}- Active Characters in Detail{1}", "\n", "\n");
                count = story.Value.lists.listOfCharacters.Count;
                if (count > 0)
                {
                    for (int i = 0; i < count; i++)
                    {
                        Character character = story.Value.lists.listOfCharacters[i];
                        builderStory.AppendFormat("{0}{1}", character.tag, "\n");
                        builderStory.AppendFormat("  {0}{1}", character.dataCreated, "\n");
                        //notes
                        for (int j = 0; j < character.listOfNotes.Count; j++)
                        {
                            builderStory.AppendFormat("Note: {0}{1}", character.listOfNotes[j], "\n");
                        }
                    }
                }
                else
                {
                    builderStory.AppendFormat("No active Characters remaining{0}{1}", "\n", "\n");
                }
                //Characters in detail -> Removed Characters
                builderStory.AppendFormat("{0}- Removed Characters in Detail{1}", "\n", "\n");
                count = story.Value.lists.listOfRemovedCharacters.Count;
                if (count > 0)
                {
                    for (int i = 0; i < count; i++)
                    {
                        Character character = story.Value.lists.listOfRemovedCharacters[i];
                        builderStory.AppendFormat("{0}{1}", character.tag, "\n");
                        builderStory.AppendFormat("  {0}{1}", character.dataCreated, "\n");
                        //notes
                        for (int j = 0; j < character.listOfNotes.Count; j++)
                        {
                            builderStory.AppendFormat("Note: {0}{1}", character.listOfNotes[j], "\n");
                        }
                    }
                }
                else
                {
                    builderStory.AppendFormat("No characters have been removed{0}{1}", "\n", "\n");
                }
                //PlotLines in detail -> Active
                builderStory.AppendFormat("{0}- Active PlotLines in Detail{1}", "\n", "\n");
                count = story.Value.lists.listOfPlotLines.Count;
                if (count > 0)
                {
                    for (int i = 0; i < count; i++)
                    {
                        PlotLine plotLine = story.Value.lists.listOfPlotLines[i];
                        builderStory.AppendFormat("{0}{1}", plotLine.tag, "\n");
                        //notes
                        for (int j = 0; j < plotLine.listOfNotes.Count; j++)
                        {
                            builderStory.AppendFormat("Note: {0}{1}", plotLine.listOfNotes[j], "\n");
                        }
                        builderStory.AppendLine();
                    }
                }
                else
                {
                    builderStory.AppendFormat("No active plotLines remaining{0}{1}", "\n", "\n");
                }
                //PlotLines in detail -> Removed
                builderStory.AppendFormat("- Removed PlotLines in Detail{0}", "\n");
                count = story.Value.lists.listOfRemovedPlotLines.Count;
                if (count > 0)
                {
                    for (int i = 0; i < count; i++)
                    {
                        PlotLine plotLine = story.Value.lists.listOfRemovedPlotLines[i];
                        builderStory.AppendFormat("{0}{1}", plotLine.tag, "\n");
                        //notes
                        for (int j = 0; j < plotLine.listOfNotes.Count; j++)
                        {
                            builderStory.AppendFormat("Note: {0}{1}", plotLine.listOfNotes[j], "\n");
                        }
                        builderStory.AppendLine();
                    }
                }
                else
                {
                    builderStory.AppendFormat("No plotLines have been removed{0}{1}", "\n", "\n");
                }
                //add story to main builder
                builderMain.Append(builderStory);
                builderMain.AppendLine();
                builderMain.AppendLine();
            }
        }
        else
        {
            Debug.LogError("Invalid dictOfStories (Null)");
        }
        return(builderMain.ToString());
    }
Ejemplo n.º 12
0
        /// <summary>
        /// Get visual object for point chart
        /// </summary>
        /// <param name="width">Width of the charat</param>
        /// <param name="height">Height of the charat</param>
        /// <param name="plotDetails">plotDetails</param>
        /// <param name="seriesList">List of DataSeries</param>
        /// <param name="chart">Chart</param>
        /// <param name="plankDepth">Plank depth</param>
        /// <param name="animationEnabled">Whether animation is enabled</param>
        /// <returns>Point chart canvas</returns>
        internal static Canvas GetVisualObjectForStockChart(Panel preExistingPanel, Double width, Double height, PlotDetails plotDetails, List <DataSeries> seriesList, Chart chart, Double plankDepth, bool animationEnabled)
        {
            if (Double.IsNaN(width) || Double.IsNaN(height) || width <= 0 || height <= 0)
            {
                return(null);
            }

            Canvas visual, labelCanvas, stockChartCanvas;

            RenderHelper.RepareCanvas4Drawing(preExistingPanel as Canvas, out visual, out labelCanvas, out stockChartCanvas, width, height);

            Double depth3d      = plankDepth / (plotDetails.Layer3DCount == 0 ? 1 : plotDetails.Layer3DCount) * (chart.View3D ? 1 : 0);
            Double visualOffset = depth3d * (plotDetails.SeriesDrawingIndex[seriesList[0]] + 1 - (plotDetails.Layer3DCount == 0 ? 0 : 1));

            visual.SetValue(Canvas.TopProperty, visualOffset);
            visual.SetValue(Canvas.LeftProperty, -visualOffset);

            Double     animationBeginTime = 0;
            DataSeries _tempDataSeries    = null;

            // Calculate width of a DataPoint
            Double dataPointWidth = CandleStick.CalculateDataPointWidth(width, height, chart);

            foreach (DataSeries series in seriesList)
            {
                if (series.Enabled == false)
                {
                    continue;
                }

                Faces dsFaces = new Faces()
                {
                    Visual = stockChartCanvas, LabelCanvas = labelCanvas
                };
                series.Faces = dsFaces;

                PlotGroup plotGroup = series.PlotGroup;
                _tempDataSeries = series;

                foreach (DataPoint dataPoint in series.InternalDataPoints)
                {
                    CreateOrUpdateAStockDataPoint(dataPoint, stockChartCanvas, labelCanvas, width, height, dataPointWidth);
                }
            }

            // Apply animation to series
            if (animationEnabled)
            {
                if (_tempDataSeries.Storyboard == null)
                {
                    _tempDataSeries.Storyboard = new Storyboard();
                }

                _tempDataSeries.Storyboard = AnimationHelper.ApplyOpacityAnimation(stockChartCanvas, _tempDataSeries, _tempDataSeries.Storyboard, animationBeginTime, 1, 0, 1);
                animationBeginTime        += 0.5;
            }

            // Label animation
            if (animationEnabled && _tempDataSeries != null)
            {
                _tempDataSeries.Storyboard = AnimationHelper.ApplyOpacityAnimation(labelCanvas, _tempDataSeries, _tempDataSeries.Storyboard, animationBeginTime, 1, 0, 1);
            }

            stockChartCanvas.Tag = null;

            // ColumnChart.CreateOrUpdatePlank(chart, seriesList[0].PlotGroup.AxisY, stockChartCanvas, depth3d, Orientation.Horizontal);

            // Remove old visual and add new visual in to the existing panel
            if (preExistingPanel != null)
            {
                visual.Children.RemoveAt(1);
                visual.Children.Add(stockChartCanvas);
            }
            else
            {
                labelCanvas.SetValue(Canvas.ZIndexProperty, 1);
                visual.Children.Add(labelCanvas);
                visual.Children.Add(stockChartCanvas);
            }

            RectangleGeometry clipRectangle = new RectangleGeometry();

            clipRectangle.Rect = new Rect(0, -chart.ChartArea.PLANK_DEPTH, width + chart.ChartArea.PLANK_OFFSET, height + chart.ChartArea.PLANK_DEPTH);
            visual.Clip        = clipRectangle;

            return(visual);
        }
Ejemplo n.º 13
0
        /// <summary>
        /// Get visual object for stacked column chart
        /// </summary>
        /// <param name="width">Width of the PlotArea</param>
        /// <param name="height">Height of the PlotArea</param>
        /// <param name="plotDetails">PlotDetails</param>
        /// <param name="chart">Chart</param>
        /// <param name="plankDepth">PlankDepth</param>
        /// <param name="animationEnabled">Whether animation is enabled for chart</param>
        /// <returns>StackedColumn chart canvas</returns>
        internal static Canvas GetVisualObjectForStackedColumnChart(RenderAs chartType, Panel preExistingPanel, Double width, Double height, PlotDetails plotDetails, Chart chart, Double plankDepth, bool animationEnabled)
        {
            if (Double.IsNaN(width) || Double.IsNaN(height) || width <= 0 || height <= 0)
            {
                return(null);
            }

            Canvas visual, labelCanvas, columnCanvas;

            RenderHelper.RepareCanvas4Drawing(preExistingPanel as Canvas, out visual, out labelCanvas, out columnCanvas, width, height);

            List <PlotGroup> plotGroupList = (from plots in plotDetails.PlotGroups where plots.RenderAs == chartType select plots).ToList();

            Double depth3d      = plankDepth / plotDetails.Layer3DCount * (chart.View3D ? 1 : 0);
            Double visualOffset = depth3d * (plotDetails.SeriesDrawingIndex[plotGroupList[0].DataSeriesList[0]] + 1);

            visual.SetValue(Canvas.TopProperty, visualOffset);
            visual.SetValue(Canvas.LeftProperty, -visualOffset);

            List <DataSeries> seriesList = plotDetails.GetSeriesListByRenderAs(chartType);

            Dictionary <Axis, Dictionary <Axis, Int32> > seriesIndex = ColumnChart.GetSeriesIndex(seriesList);

            Double     minDiff, widthPerColumn, maxColumnWidth;
            DataSeries currentDataSeries = null;

            foreach (PlotGroup plotGroup in plotGroupList)
            {
                if (!seriesIndex.ContainsKey(plotGroup.AxisY))
                {
                    continue;
                }

                currentDataSeries = plotGroup.DataSeriesList[0];

                List <Double> xValuesList = plotGroup.XWiseStackedDataList.Keys.ToList();
                plotGroup.DrawingIndex = seriesIndex[plotGroup.AxisY][plotGroup.AxisX];

                widthPerColumn = CalculateWidthOfEachStackedColumn(chart, plotGroup, width, out minDiff, out maxColumnWidth);

                Double limitingYValue = 0;

                if (plotGroup.AxisY.InternalAxisMinimum > 0)
                {
                    limitingYValue = (Double)plotGroup.AxisY.InternalAxisMinimum;
                }
                if (plotGroup.AxisY.InternalAxisMaximum < 0)
                {
                    limitingYValue = (Double)plotGroup.AxisY.InternalAxisMaximum;
                }

                foreach (Double xValue in xValuesList)
                {
                    DrawStackedColumnsAtXValue(chartType, xValue, plotGroup, columnCanvas, labelCanvas,
                                               plotGroup.DrawingIndex, widthPerColumn, maxColumnWidth, limitingYValue, depth3d, animationEnabled);
                }
            }

            // Apply animation
            if (animationEnabled && currentDataSeries != null)
            {
                if (currentDataSeries.Storyboard == null)
                {
                    currentDataSeries.Storyboard = new Storyboard();
                }

                // Apply animation to the marker and labels
                currentDataSeries.Storyboard = AnimationHelper.ApplyOpacityAnimation(labelCanvas, currentDataSeries, currentDataSeries.Storyboard, 1, 1, 0, 1);
            }

            ColumnChart.CreateOrUpdatePlank(chart, plotGroupList[0].AxisY, columnCanvas, depth3d, Orientation.Horizontal);

            // Remove old visual and add new visual in to the existing panel
            if (preExistingPanel != null)
            {
                visual.Children.RemoveAt(1);
                visual.Children.Add(columnCanvas);
            }
            else
            {
                labelCanvas.SetValue(Canvas.ZIndexProperty, 1);
                visual.Children.Add(labelCanvas);
                visual.Children.Add(columnCanvas);
            }

            RectangleGeometry clipRectangle = new RectangleGeometry();

            clipRectangle.Rect = new Rect(0, -chart.ChartArea.PLANK_DEPTH - (chart.View3D ? 0 : 5), width + chart.ChartArea.PLANK_DEPTH, height + chart.ChartArea.PLANK_DEPTH + chart.ChartArea.PLANK_THICKNESS + (chart.View3D ? 0 : 10));
            visual.Clip        = clipRectangle;

            return(visual);
        }