/// <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();
        }
Esempio n. 2
0
        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();
        }