Example #1
0
        public HitTestResultBehavior HitTestResult(HitTestResult hr)
        {
            DrawingVisual visual = hr.VisualHit as DrawingVisual;

            if (visual != null && HoverElements.ContainsKey(visual))
            {
                if (Listener != null)
                {
                    Listener.Highlight(HoverElements[visual]);
                }
                return(HitTestResultBehavior.Stop);
            }

            return(HitTestResultBehavior.Continue);
        }
Example #2
0
        public void DrawContents()
        {
            if (this.children.Count > 1)
            {
                this.children.RemoveRange(1, children.Count - 1);
                HoverElements.Clear();
            }

            var maxR = 300 / Dimension / 3.5;
            //Get Max count for
            var maxWeight = Map.Values
                            .Where(v => v != null)
                            .GroupBy(c => c.Count)
                            .Select(c => c.Key)
                            .Max();

            foreach (var p in Map)
            {
                if (p.Value != null && p.Value.Count > 0)
                {
                    var r = p.Value.Count * maxR / maxWeight;

                    var    groups   = p.Value.GroupBy(v => v.C).OrderBy(g => g.Key);
                    var    arcPoint = new Point(hexagonCenters[p.Key].X + r, hexagonCenters[p.Key].Y);
                    double angle    = 0;

                    foreach (var g in groups)
                    {
                        DrawingVisual  visual       = new DrawingVisual();
                        DrawingContext context      = visual.RenderOpen();
                        Color          color        = GetColorByGroup(g.Key);
                        double         currentAngle = 360 * g.Count() / p.Value.Count;

                        if (currentAngle != 360.0)
                        {
                            angle += currentAngle;

                            context.DrawGeometry(new SolidColorBrush(color),
                                                 new Pen(new SolidColorBrush(Colors.White), 1),
                                                 Geometry.Parse(string.Format(System.Globalization.CultureInfo.InvariantCulture,
                                                                              "M {0},{1} L {2},{3} A {4},{5} {8} {9} {10} {6},{7} L {0},{1} Z",
                                                                              hexagonCenters[p.Key].X,
                                                                              hexagonCenters[p.Key].Y,
                                                                              arcPoint.X,
                                                                              arcPoint.Y,
                                                                              r, r,
                                                                              hexagonCenters[p.Key].X + r * Math.Cos(angle * Math.PI / 180f),
                                                                              hexagonCenters[p.Key].Y + r * Math.Sin(angle * Math.PI / 180f),
                                                                              0,
                                                                              currentAngle > 180 ? 1 : 0,
                                                                              1
                                                                              )));
                            arcPoint.X = hexagonCenters[p.Key].X + r * Math.Cos(angle * Math.PI / 180f);
                            arcPoint.Y = hexagonCenters[p.Key].Y + r * Math.Sin(angle * Math.PI / 180f);
                        }
                        else
                        {
                            context.DrawEllipse(new SolidColorBrush(color),
                                                new Pen(new SolidColorBrush(Colors.White), 1), hexagonCenters[p.Key], r, r);
                        }
                        context.Close();
                        children.Add(visual);
                        HoverElements[visual] = new List <ClassObject>();
                        HoverElements[visual].AddRange(g.AsEnumerable());
                    }
                }
            }
        }