void RefreshRadius(DesignLink link, List <DesignLink> linkList) { var s = ItemList.FirstOrDefault(v => v.DesignItemID == link.SourceDesignItemID); var t = ItemList.FirstOrDefault(v => v.DesignItemID == link.TargetDesignItemID); if (s == null || t == null) { throw new Exception("Can not find valid design item, source id is " + link.SourceDesignItemID.ToString() + ", target id is " + link.TargetDesignItemID.ToString()); } var l = LinkList.Where(v => v.SourceDesignItemID == link.SourceDesignItemID && v.TargetDesignItemID == link.TargetDesignItemID && v.TargetPosition == link.TargetPosition && v.SourcePosition == link.SourcePosition && link != v && !linkList.Contains(v)).ToList(); if (l.Count > 0) { l.ForEach(tl => { tl.RadiusRadio = 0; tl.LineSweepDirection = Windows.UI.Xaml.Media.SweepDirection.Clockwise; }); l.ForEach(tl => tl.SetCurveRadius(s, t)); linkList.AddRange(l); } }
void Connecting(PointerRoutedEventArgs e) { if (TargetCanvas == null) { return; } if (CurrentLink == null) { CurrentLink = new DesignLink() { SourceX = GetCenter().X, SourceY = GetCenter().Y, TargetX = e.GetCurrentPoint(TargetCanvas).Position.X, TargetY = e.GetCurrentPoint(TargetCanvas).Position.Y }; CurrentLink.SourcePoint = ConnectionControl; if (IsBottom) { CurrentLink.SourcePosition = RelativePosition.Bottom; } if (IsLeft) { CurrentLink.SourcePosition = RelativePosition.Left; } if (IsTop) { CurrentLink.SourcePosition = RelativePosition.Top; } if (IsRight) { CurrentLink.SourcePosition = RelativePosition.Right; } } //if (CurrentLink.LinkLine == null) //{ // CurrentLink.SetLinkLine(PointX, PointY, e.GetCurrentPoint(TargetCanvas).Position.X, e.GetCurrentPoint(TargetCanvas).Position.Y); //} //CurrentLink.SourceX = PointX; //CurrentLink.SourceY = PointY; CurrentLink.TargetX = e.GetCurrentPoint(TargetCanvas).Position.X; CurrentLink.TargetY = e.GetCurrentPoint(TargetCanvas).Position.Y; if (!TargetCanvas.Children.Contains(CurrentLink.LinkLine)) { TargetCanvas.Children.Add(CurrentLink.LinkLine); } }
void OutControl_PointerPressed(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e) { if (TargetCanvas == null) { return; } PointX = e.GetCurrentPoint(TargetCanvas).Position.X; PointY = e.GetCurrentPoint(TargetCanvas).Position.Y; CurrentLink = null; TargetCanvas.PointerMoved += TargetCanvas_PointerMoved; TargetCanvas.PointerReleased += TargetCanvas_PointerReleased; IsConnecting = true; CurrentConnection = this; //CurrentOutControl = sender as FrameworkElement; e.Handled = true; //System.Windows.DragDrop.DoDragDrop(OutControl, OutControl, DragDropEffects.Copy); }
public void TargetCanvas_PointerReleased(object sender, PointerRoutedEventArgs e) { if (TargetCanvas == null) { return; } Silent(); if (IsConnecting) { IsConnecting = false; if (CurrentLink != null && TargetCanvas.Children.Contains(CurrentLink.LinkLine)) { TargetCanvas.Children.Remove(CurrentLink.LinkLine); //can not need add a connection } } CurrentLink = null; CurrentConnection = null; e.Handled = true; }
public void DeleteLink(DesignLink link) { if (LinkList.Contains(link)) { LinkList.Remove(link); } ItemList.ForEach(v => { if (v.InLinkList.Contains(link)) { v.InLinkList.Remove(link); } if (v.OutLinkList.Contains(link)) { v.OutLinkList.Remove(link); } }); var s = ItemList.FirstOrDefault(v => v.DesignItemID == link.SourceDesignItemID); var t = ItemList.FirstOrDefault(v => v.DesignItemID == link.TargetDesignItemID); if (s == null || t == null) { return; } var l = LinkList.Where(v => v.SourceDesignItemID == link.SourceDesignItemID && v.TargetDesignItemID == link.TargetDesignItemID && v.TargetPosition == link.TargetPosition && v.SourcePosition == link.SourcePosition && link != v).ToList(); if (l.Count > 0) { l.ForEach(tl => { tl.RadiusRadio = 0; tl.LineSweepDirection = Windows.UI.Xaml.Media.SweepDirection.Clockwise; }); l.ForEach(tl => tl.SetCurveRadius(s, t)); } }
void Connect(Tuple <Guid, Guid, object> link) { var s = GetItemByID(link.Item1); if (s == null) { return; } var t = GetItemByID(link.Item2); if (t == null) { return; } var si = s.DataContext as DesignItem; var ti = t.DataContext as DesignItem; var p = DesignManager.GetLinkConnection(s.DataContext as DesignItem, t.DataContext as DesignItem); var sp = DesignManager.GetPoint(si, p.Item1); var tp = DesignManager.GetPoint(ti, p.Item2); var sc = getConnectionControl(s, p.Item1); var tc = getConnectionControl(t, p.Item2); var CurrentLink = new DesignLink() { SourceX = sp.X, SourceY = sp.Y, TargetX = tp.X, TargetY = tp.Y, TargetObject = link.Item3 }; CurrentLink.SourcePoint = sc.TargetControl; CurrentLink.TargetPoint = tc.TargetControl; si.OutLinkList.Add(CurrentLink); ti.InLinkList.Add(CurrentLink); Draw(CurrentLink.LinkLine); }
public override void LoadInfo() { TargetDesignCanvasViewModel.ItemList.Clear(); TargetDesignCanvasViewModel.LinkList.Clear(); TargetObject.NodeList.ForEach(v => { var item = new DesignItem() { Width = v.Width, Height = v.Height, Left = v.Left, Top = v.Top, ZIndex = v.ZIndex, IconPath = v.IconPath, TargetObjectID = v.TargetObjectID, Info = v.NodeName, IsValid = v.IsValid(MainViewModel.mainViewModel.Target.TargetStory, TargetObject.CurrentTime), TargetObject = MainViewModel.mainViewModel.GetViewModelByID(v.TargetObjectID), DesignItemID = v.DesignObjectID }; if (v.IsIconMode) { item.ShowMode = DesignItemShowMode.Icon; } else { item.ShowMode = DesignItemShowMode.Full; } TargetDesignCanvasViewModel.ItemList.Add(item); }); TargetObject.ConnectionList.ForEach(v => { var link = new DesignLink() { SourceX = v.StartLeft, SourceY = v.StartTop, TargetX = v.EndLeft, TargetY = v.EndTop, SourceID = v.StartObjectID, TargetID = v.EndObjectID, TargetObjectID = v.TargetObjectID, DesignLinkID = v.DesignObjectID, SourceDesignItemID = v.SourceDesignItemID, TargetDesignItemID = v.TargetDesignItemID, Text = v.Memo, IsValid = v.IsValid(MainViewModel.mainViewModel.Target.TargetStory, TargetObject.CurrentTime), TargetObject = MainViewModel.mainViewModel.GetViewModelByID(v.TargetObjectID), SourcePosition = v.LinkLineInfo.SourcePosition, TargetPosition = v.LinkLineInfo.TargetPosition, RadiusRadio = v.LinkLineInfo.RadiusRadio, LineSweepDirection = v.LinkLineInfo.LineSweepDirection }; if (v.ConnectionType == ConnectionType.TwoWay) { link.LinkLine.ArrowVisibility = Visibility.Collapsed; } TargetDesignCanvasViewModel.LinkList.Add(link); }); TargetDesignCanvasViewModel.Refresh(); OnPropertyChanged("Height"); OnPropertyChanged("Width"); LoadNoteList(); base.LoadInfo(); }