Example #1
0
        public void LoadModel(TwitterUser user)
        {
            buttonRegistry = new Dictionary<TwitterUser, TwitterUserControl>();
            entityCanvas.Children.Clear();

            // TODO: not sure if we want this here - the user model should already have dictated what data we retrieved.
            int depth = int.Parse(depthTextBox.Text);

            var startControl = new TwitterUserControl(user) {Title = user.Name};
            var trans = new ScaleTransform {ScaleX = 1.3, ScaleY = 1.3};
            startControl.RenderTransform = trans;
            startControl.Color = Colors.Blue;
            entityCanvas.Children.Add(startControl);

            Canvas.SetLeft(startControl, entityCanvas.ActualWidth / 2);
            Canvas.SetTop(startControl, entityCanvas.ActualHeight / 2);

            buttonRegistry.Add(user, startControl);

            ICollection<TwitterUser> ringEntities = user.Friends;
            for (int i = 1; i <= depth; i++)
            {
                ringEntities = LoadRing(ringEntities, i);
            }
            MakeFriends();
            infoBlock.Text = "Node Count: " + buttonRegistry.Count;
        }
Example #2
0
        TwitterUser[] LoadRing(ICollection<TwitterUser> ringEntities, int depth)
        {
            var nextRing = new List<TwitterUser>();
            //1 radian = ~57.3 degrees
            //~6 radians / circle
            double radiusFactor = Convert.ToDouble(depth) * 1;
            double radius = 160 * radiusFactor;
            double stepConstant = .06 * Convert.ToDouble(spacingSlider.Value);
            double radianStep = stepConstant / Convert.ToDouble(ringEntities.Count);
            double radians = 0;
            infoBlock.Text = ringEntities.Count.ToString();

            foreach (var entity in ringEntities)
            {
                Point point = CalculateRingPoint(radians, radius);
                Point relativePoint = TranslateRingPoint(point);
                var button = new TwitterUserControl(entity);
                button.Clicked += user_Clicked;
                button.Opacity = 1 / (Convert.ToDouble(depth) * .3);
                button.Title = entity.Name;
                Canvas.SetLeft(button, relativePoint.X);
                Canvas.SetTop(button, relativePoint.Y);
                entityCanvas.Children.Add(button);
                buttonRegistry.Add(entity, button);
                radians = radians + radianStep;
            }

            foreach (var entity in ringEntities)
            {
                foreach (var nextConnection in entity.Friends)
                {
                    if (!buttonRegistry.ContainsKey(nextConnection))
                    {
                        if (!nextRing.Contains(nextConnection))
                        {
                            nextRing.Add(nextConnection);
                        }
                    }
                }
            }
            return nextRing.ToArray();
        }