/// <summary> /// 3D 맵에서 경로를 이동시킬때 노드를 새로 그려준다. /// </summary> /// <param name="X"></param> /// <param name="Y"></param> /// <param name="index"></param> public void move_NaviShape(float X, float Y, int index) { //탭 네비쪽으로 전환하고 tabCon.SelectedIndex = 0; //다이어그램에 포인트 추가 NaviShape addsShape = new NaviShape() { Position = new Point(create_newPositionX, create_newPositionY), Index = index, PointType = "Nomal", NaviPointX = X, NaviPointY = Y }; if (src != null) { src.Target = addsShape; } if (dst != null) { dst.Source = addsShape; } Navidiagram.AddShape(addsShape); Navidiagram.AutoFit(); }
public void SetNaviPoistion(NaviShape shape) { var con = NavinObsDiagram.Instance.Navidiagram.Items.OfType <RadDiagramConnection>().Where(x => x.Source == shape).ToList(); if (con.Count == 1) { if (con[0].Target != null) { Console.WriteLine((con[0].Target as NaviShape).Index); saveNaviTemp.Add(con[0].Target as NaviShape); SetNaviPoistion(con[0].Target as NaviShape); } } }
private void NaviDiagram_ConnectionManipulationCompleted(object sender, ManipulationRoutedEventArgs e) { IShape source = null; IShape target = null; try { source = e.Connection.Source; target = e.Connector.Shape; RadDiagramConnection con = e.Connection as RadDiagramConnection; con.TargetCapType = CapType.Arrow2Filled; con.Stroke = new SolidColorBrush(Colors.Black); con.StrokeThickness = 2; con.Foreground = new SolidColorBrush(Colors.Black); con.IsEditable = false; } catch { } //소스가 null 이면 삭제 if (source == null) { e.Handled = true; return; } //타겟이 null 이면 삭제 if (target == null) { e.Handled = true; return; } //같은 포트에 연결 하였다면 삭제 if (source == target) { e.Handled = true; return; } //같은 지점을 target으로 잡으면 안된다. var checkdata = Navidiagram.Items.OfType <RadDiagramConnection>().Where(x => x.Target == target).ToList(); if (checkdata.Count >= 1) { e.Handled = true; return; } //목적지에서 다음 경로로 연결 할 수 없다. if (source is NaviShape) { NaviShape check = source as NaviShape; if (check.PointType == "2") { e.Handled = true; return; } } //시작지점이 중간 경로가 될 수 없다. if (target is NaviShape) { NaviShape check = target as NaviShape; if (check.PointType == "0") { e.Handled = true; return; } } //시작지점에서 커넥션이 1개만 있어야 한다. if (source is NaviShape) { NaviShape check = source as NaviShape; var cons = Navidiagram.Items.OfType <RadDiagramConnection>().Where(x => x.Source == check).ToList(); if (cons.Count == 1) { e.Handled = true; return; } } }
/// <summary> /// 경로 다이어그램 모델 삭제시 발생하는 이벤트 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void NaviDeleteCommandExecuted(object sender, ExecutedRoutedEventArgs e) { List <NaviShape> deldatas = new List <NaviShape>(); List <RadDiagramConnection> delcons = new List <RadDiagramConnection>(); //삭제 shape 파악 foreach (var item in Navidiagram.SelectedItems) { //NaviShape 가 삭제 되면 3D 부분에서도 삭제해야함. if (item is NaviShape) { NaviShape delshape = item as NaviShape; //VIewer3D.Instance.NaviPointGridRemove(delshape.NaviPointX, delshape.NaviPointY); deldatas.Add(delshape); } else if (item is RadDiagramConnection) { RadDiagramConnection delitem = item as RadDiagramConnection; delcons.Add(delitem); } } if (deldatas.Count > 0) { VIewer3D.Instance.RemoveNaviPoints(); } for (int i = 0; i < delcons.Count; i++) { Navidiagram.RemoveConnection(delcons[i]); } for (int i = 0; i < deldatas.Count; i++) { //삭제되는 shape에 connection 이 있는지 확인한다. //있는경우는 전부 삭제한다. var srcCon = Navidiagram.Items.OfType <RadDiagramConnection>().Where(x => x.Source == deldatas[i]).ToList(); if (srcCon.Count > 0) { foreach (RadDiagramConnection item in srcCon) { Navidiagram.RemoveConnection(item); } } var dstCon = Navidiagram.Items.OfType <RadDiagramConnection>().Where(x => x.Target == deldatas[i]).ToList(); if (dstCon.Count > 0) { foreach (RadDiagramConnection item in dstCon) { Navidiagram.RemoveConnection(item); } } Navidiagram.RemoveShape(deldatas[i]); } reConnection(); if (loadTime == false) { Save(); } resetNodeNumber(); }