Esempio n. 1
0
        /// <summary>
        /// 添加连接,之所以使用偏移而不使用起始点,是因为在保存文件时,double会导致精度问题,从而点跑出框外
        /// </summary>
        /// <param name="pt1">起点偏移</param>
        /// <param name="pt2">终点偏移</param>
        public void AddLink(Point pt1, Point pt2,
            DeviceCard srcCard, DeviceCard dstCard, DeviceSocket srcSocket, DeviceSocket dstSocket, DeviceBase dest)
        {
            Link lnk = new Link();

            lnk.PTSrcOffset = pt1;
            lnk.PTDstOffset = pt2;

            lnk.PTSRC = new Point(
                pt1.X + (double)ImageBorder.GetValue(Canvas.LeftProperty),
                pt1.Y + (double)ImageBorder.GetValue(Canvas.TopProperty));

            lnk.PTDST = new Point(
                pt2.X + (double)dest.ImageBorder.GetValue(Canvas.LeftProperty),
                pt2.Y + (double)dest.ImageBorder.GetValue(Canvas.TopProperty));

            lnk.PaintBoard = paintBoard;

            lnk.SrcDevice = this;
            lnk.SrcCard = srcCard;
            lnk.SrcSocket = srcSocket;

            lnk.DstDevice = dest;
            lnk.DstCard = dstCard;
            lnk.DstSocket = dstSocket;

            lnk.TextSrc.Text = srcCard.toString();
            if (srcCard.ShowSocket)
                lnk.TextSrc.Text += "/" + srcSocket.toString();

            lnk.TextDst.Text = dstCard.toString();
            if (dstCard.ShowSocket)
                lnk.TextDst.Text += "/" + dstSocket.toString();

            try
            {
                if (SetDeviceSocketUsed(srcCard, srcSocket, this)
                && SetDeviceSocketUsed(dstCard, dstSocket, dest))
                {
                    linkList.Add(lnk);
                    dest.GetLinkList().Add(lnk);

                    paintBoard.Children.Add(lnk);
                    AdjustLinkPosition(lnk);

                    destination = null;
                }
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
Esempio n. 2
0
 public void RemoveLink(Link link)
 {
     if (linkList.Contains(link))
         linkList.Remove(link);
 }
Esempio n. 3
0
        /// <summary>
        /// 根据ptA, ptB的坐标调整line坐标,主要用于裁剪掉位于线框内部的线段
        /// </summary>
        /// <param name="ptA">D1的坐标</param>
        /// <param name="ptB">D2的坐标</param>
        /// <param name="line">连接D1,D2的连线</param>
        protected void AdjustLinkPosition(Link link)
        {
            Rect rtA = link.SrcDevice.GetPosition();
            Rect rtB = link.DstDevice.GetPosition();

            Point ptA = new Point(rtA.Left + link.PTSrcOffset.X, rtA.Top + link.PTSrcOffset.Y);
            Point ptB = new Point(rtB.Left + link.PTDstOffset.X, rtB.Top + link.PTDstOffset.Y);

            Line l = Util.Function.CalCrossPoint(ptA, ptB, rtA, rtB);
            link.PTSRC = new Point(l.X1, l.Y1);
            link.PTDST = new Point(l.X2, l.Y2);

            link.adjustTextPosition();
        }
Esempio n. 4
0
        public void SetSelectedLink(Link link)
        {
            SetSelectedDevice(null);
            ClearSelectedLink();

            SelectedLink = link;
            SelectedLink.SetSelectedStyle();
        }