/// <summary> /// Initializes new instance for CircularAxisLabel class /// </summary> /// <param name="position"></param> /// <param name="center"></param> /// <param name="xRadius"></param> /// <param name="yRadius"></param> /// <param name="label"></param> /// <param name="index"></param> internal CircularAxisLabel(Point position, Point center, Double xRadius, Double yRadius, AxisLabel label, Double index) { Center = center; XRadius = xRadius; YRadius = yRadius; Position = position; AxisLabel = label; Index = index; Angle = Visifire.Commons.CircularLabel.ResetMeanAngle(CalculateAngleByCoordinate(Position)); }
/// <summary> /// Applies properties to the TextBlock /// </summary> /// <param name="axisLabel"></param> internal void ApplyProperties(AxisLabel axisLabel) { TextElement.Text = axisLabel.Text; TextElement.Foreground = FontColor; TextElement.FontSize = FontSize; TextElement.FontFamily = FontFamily; TextElement.FontStyle = FontStyle; TextElement.FontWeight = FontWeight; TextElement.TextAlignment = TextAlignment; }
/// <summary> /// Applies properties to the TextBlock /// </summary> /// <param name="axisLabel"></param> internal void ApplyProperties(AxisLabel axisLabel) { #if WPF TextElement.FlowDirection = FlowDirection.LeftToRight; #endif TextElement.Text = axisLabel.Text; TextElement.Foreground = FontColor; TextElement.FontSize = FontSize; TextElement.LineHeight = FontSize; TextElement.LineStackingStrategy = LineStackingStrategy.BlockLineHeight; if(FontFamily != null) TextElement.FontFamily = FontFamily; TextElement.FontStyle = FontStyle; TextElement.FontWeight = FontWeight; TextElement.TextAlignment = TextAlignment; if (!Double.IsNaN(MaxWidth)) { TextElement.TextWrapping = TextWrapping.Wrap; #if WPF TextElement.MaxWidth = MaxWidth; #else TextElement.Width = MaxWidth; #endif } }
/// <summary> /// Apply font properties of axislabels /// </summary> /// <param name="label">AxisLabel</param> private void ApplyAxisLabelFontProperties(AxisLabel label) { //Set size affecting font properties label.FontSize = InternalFontSize; label.FontColor = Charts.Chart.CalculateFontColor((Chart as Chart), FontColor, false); label.FontFamily = InternalFontFamily; label.FontStyle = InternalFontStyle; label.FontWeight = InternalFontWeight; label.TextAlignment = TextAlignment; label.Angle = GetAngle(); }
/// <summary> /// Calculate average width of a character /// </summary> /// <returns></returns> private void CalculatAvgWidthOfAChar() { AxisLabel label = new AxisLabel(); label.Text = "ABCDabcd01"; ApplyAxisLabelFontProperties(label); label.CreateVisualObject(false, null); WidthOfACharacter = label.ActualTextWidth / 10; }
/// <summary> /// Create a instance of a Visifire.Charts.AxisLabel /// </summary> /// <param name="text">Text as string</param> /// <returns>AxisLabel</returns> private AxisLabel CreateLabel(String text) { AxisLabel label = new AxisLabel(); label.Text = text; label.Placement = this.Placement; return label; }
/// <summary> /// Apply font properties of axislabels /// </summary> /// <param name="label">AxisLabel</param> private void ApplyAxisLabelFontProperties(AxisLabel label) { //Set size affecting font properties label.FontSize = InternalFontSize; if(Placement != PlacementTypes.Circular) label.FontColor = Charts.Chart.CalculateFontColor((Chart as Chart), ParentAxis.Background, FontColor, false); else label.FontColor = Charts.Chart.CalculateFontColor((Chart as Chart), null, FontColor, false); label.FontFamily = InternalFontFamily; label.FontStyle = InternalFontStyle; label.FontWeight = InternalFontWeight; label.TextAlignment = TextAlignment; label.Angle = GetAngle(); }
/// <summary> /// Create a instance of a Visifire.Charts.AxisLabel /// </summary> /// <param name="text">Text as string</param> /// <returns>AxisLabel</returns> private AxisLabel CreateLabel(String text) { AxisLabel label = new AxisLabel(); label.Text = text; label.Placement = this.Placement; if (!Double.IsNaN(TextWrap)) { Double MaxLabelWidth = (ParentAxis.PlotDetails.ChartOrientation == ChartOrientationType.Vertical) ? Chart.ActualHeight : Chart.ActualWidth; label.MaxWidth = MaxLabelWidth * TextWrap; //if (Double.IsInfinity(label.MaxWidth)) // label.MaxWidth = Double.NaN; } else label.MaxWidth = Double.NaN; return label; }
/// <summary> /// Calculate AxisX points for Circular chart /// </summary> /// <param name="width"></param> /// <param name="height"></param> /// <param name="axisX"></param> /// <param name="maxDataPointsCount"></param> internal void CalculateAxisXLabelsPoints4Polar(Double width, Double height, Boolean isAxisLabelsEnabled, List<Double> angles, Double minValue, Double maxValue) { Double radius = Math.Min(width, height) / 2; Double reducedPercent = 10; if (isAxisLabelsEnabled) reducedPercent = 20; Radius = radius - (radius * reducedPercent / 100); Center = new Point(width / 2, height / 2); AnglesInRadian = new List<Double>(); Double minValInRadian; if (minValue != 0) minValInRadian = AxisLabel.GetRadians(minValue - 90); else minValInRadian = 2 * Math.PI - Math.PI / 2; Double minAngle = Graphics.ValueToPixelPosition(minValInRadian, 2 * Math.PI + minValInRadian, AxisLabel.GetRadians(minValue), AxisLabel.GetRadians(maxValue), AxisLabel.GetRadians(minValue)); MinAngleInDegree = minAngle * 180 / Math.PI; for (Int32 i = 0; i < angles.Count; i++) { Double actualAngle = Graphics.ValueToPixelPosition(minValInRadian, 2 * Math.PI + minValInRadian, AxisLabel.GetRadians(minValue), AxisLabel.GetRadians(maxValue), AxisLabel.GetRadians(angles[i])); Double x = Radius * Math.Cos(actualAngle) + Center.X; Double y = Radius * Math.Sin(actualAngle) + Center.Y; ListOfPoints4CircularAxis.Add(new Point(x, y)); AnglesInRadian.Add(actualAngle); } }