示例#1
0
 private void DoAlg(Router root, Network net)
 {
     root.Used = true;
     for (int i = 0; i < net.Routers.Count - 1; i++)
     {
         Channel tmpChannel = new Channel();
         tmpChannel.Criterion = Const.INF;
         foreach (Channel channel in net.Channels)
         {
             if ((channel.StartRouter.Used != channel.EndRouter.Used) &&
                 (channel.Criterion < tmpChannel.Criterion))
             {
                 tmpChannel = channel;
             }
         }
         tmpChannel.Tree = tmpChannel.StartRouter.Used = tmpChannel.EndRouter.Used = true;
     }
 }
示例#2
0
        public static void DrawChannel(Channel channel, PaintEventArgs e)
        {
            Font font = new Font("Arial", 10);

            Size size = channel.TextSize;
            int width = size.Width;
            int height = size.Height;
            int halfWidth = width / 2;
            int halfHeight = height / 2;

            e.Graphics.DrawCurve(channel.Pen, new Point[] { channel.StartRouter.Location,
                                                            channel.FloatingCenter,
                                                            channel.EndRouter.Location });

            e.Graphics.FillEllipse(Brushes.White, new Rectangle(channel.FloatingCenter.X - halfWidth,
                                                                channel.FloatingCenter.Y - halfHeight,
                                                                width, height));

            e.Graphics.DrawString(channel.Text, font, Brushes.Black, channel.FloatingCenter.X - halfWidth + 3,
                                                                  channel.FloatingCenter.Y - halfHeight);
        }
示例#3
0
 public ChannelsPair(Channel ch1, Channel ch2)
 {
     Channel1 = ch1;
     Channel2 = ch2;
 }
示例#4
0
        public void CreateNetwork(int width, int height)
        {
            int offset = 150;
            double countX = width / (Drawing.xOffset + offset);
            countX = Math.Floor(countX);

            double countY = height / (Drawing.yOffset + offset);
            countY = Math.Floor(countY);

            Router[,] mass = new Router[(int)countX, (int)countY];
            int constx = Drawing.xOffset + offset;
            int consty = Drawing.yOffset + offset;

            int x = 70;
            int y = 70;
            int routerNumber = 0;

            Network.Areas.Add(new Area());

            for (int i = 0; i < countX; i++)
            {
                for (int j = 0; j < countY; j++)
                {
                    Router router = new Router(new Point(x, y), routerNumber);
                    Network.MainArea.AddRouter(router);
                    mass[i, j] = router;
                    Network.Routers.Add(router);
                    routerNumber += 1;
                    y += consty;
                }
                x += constx;
                y = 70;
            }

            Random random = new Random();

            if (mainForm.FullMesh == false)
            {
                for (int i = 0; i < countX; i++)
                {
                    for (int j = 0; j < countY; j++)
                    {
                        if (j < countY - 1)
                        {
                            Channel channel = new Channel(mass[i, j], mass[i, j + 1]);
                            Network.Channels.Add(channel);
                            channel.Delay = 1 + random.Next(15);
                            channel.Cost = 1 + random.Next(15);
                            channel.Metric = 1 + random.Next(15);
                            channel.ChangeCriterion(mainForm.Criterion);
                        }

                        if (i > 0)
                        {
                            Channel channel = new Channel(mass[i, j], mass[i - 1, j]);
                            Network.Channels.Add(channel);
                            channel.Delay = 1 + random.Next(15);
                            channel.Cost = 1 + random.Next(15);
                            channel.Metric = 1 + random.Next(15);
                            channel.ChangeCriterion(mainForm.Criterion);
                        }
                    }
                }
            }
            else
            {
                foreach (Router router in Network.Routers)
                {
                    foreach (Router r in Network.Routers)
                    {
                        if (router != r)
                        {
                            Channel channel = new Channel(router, r);
                            Network.Channels.Add(channel);
                            drawingChannels.Add(channel);
                            channel.Delay = 1 + random.Next(15);
                            channel.Cost = 1 + random.Next(15);
                            channel.Metric = 1 + random.Next(15);
                            channel.ChangeCriterion(mainForm.Criterion);
                        }
                    }
                }
            }
            mainForm.ChannelsRefresh(Network.Channels.Count);
        }
示例#5
0
 public ChannelForm(Channel ch)
 {
     InitializeComponent();
     channel = ch;
 }
示例#6
0
 // удаление канала связи
 private void RemoveChannel(Channel channel)
 {
     if (channel == SelectedChannel)
         SelectedChannel = null;
     if (channel.Area != null)
         channel.Area.Channels.Remove(channel);
     channel.StartPort.Disconnect();
     channel.EndPort.Disconnect();
     channel.StartRouter.Channels.Remove(channel);
     channel.EndRouter.Channels.Remove(channel);
     drawingChannels.Remove(channel);
     Network.Channels.Remove(channel);
     mainForm.ChannelsRefresh(Network.Channels.Count);
     UpdateField();
 }
示例#7
0
 public void CreateChannel(Router r1, Port port1, Router r2, Port port2, 
                           Int32 delay, Int32 cost, Int32 metric)
 {
     Channel channel = new Channel(r1, port1, r2, port2);
     Network.Channels.Add(channel);
     drawingChannels.Add(channel);
     channel.Delay = delay;
     channel.Cost = cost;
     channel.Metric = metric;
     channel.ChangeCriterion(mainForm.Criterion);
     mainForm.ChannelsRefresh(Network.Channels.Count);
 }
示例#8
0
 public void CreateChannel(Router r1, Port port1, Router r2, Port port2)
 {
     Channel channel = new Channel(r1, port1, r2, port2);
     Network.Channels.Add(channel);
     drawingChannels.Add(channel);
     if (mainForm.AutoWeight == false)
     {
         ChannelForm properties = new ChannelForm(channel);
         properties.ShowDialog(this);
     }
     else
     {
         Random random = new Random();
         channel.Delay = 1 + random.Next(15);
         channel.Cost = 1 + random.Next(15);
         channel.Metric = 1 + random.Next(15);
     }
     if (mainForm.AutoPortName == true)
     {
         CreateTextLabel(port1.ShortName, new Point(r1.Location.X + (r2.Location.X - r1.Location.X) / 6,
                                           r1.Location.Y + (r2.Location.Y - r1.Location.Y) / 6));
         CreateTextLabel(port2.ShortName, new Point(r2.Location.X + (r1.Location.X - r2.Location.X) / 6,
                                           r2.Location.Y + (r1.Location.Y - r2.Location.Y) / 6));
     }
     channel.ChangeCriterion(mainForm.Criterion);
     mainForm.ChannelsRefresh(Network.Channels.Count);
 }
示例#9
0
        // событие: клавиша мыши нажата
        private void ctlPicBox_MouseDown(object sender, MouseEventArgs e)
        {
            // обработка события
            if (e.Button == MouseButtons.Left)
            {
                switch (mainForm.Instrument)
                {
                    case Instruments.Edit:
                            IDrag selectedElement = null;
                            if ((selectedElement = FindElement(e.Location)) == null)
                            {
                                if ((SelectedChannel = FindChannel(e.Location)) == null)
                                    multiSelect = true;
                                SelectedElements.Clear();
                            }
                            else
                            {
                                if (SelectedElements.Count == 0)
                                    SelectedElements.Add(selectedElement);
                                else if (SelectedElements.Count == 1)
                                {
                                    if (CtrlIsCliced == true)
                                    {
                                        if (selectedElement != SelectedElements[0])
                                            SelectedElements.Add(selectedElement);
                                        else
                                            SelectedElements.Clear();
                                    }
                                    else
                                        SelectedElements[0] = selectedElement;
                                }
                                else
                                {
                                    if (CtrlIsCliced == true)
                                    {
                                        if (SelectedElements.Contains(selectedElement) == false)
                                            SelectedElements.Add(selectedElement);
                                        else
                                            SelectedElements.Remove(selectedElement);
                                    }
                                    else
                                    {
                                        if (SelectedElements.Contains(selectedElement) == false)
                                        {
                                            SelectedElements.Clear();
                                            SelectedElements.Add(selectedElement);
                                        }
                                    }
                                }

                                foreach (IDrag element in SelectedElements)
                                {
                                    element.XOffset = e.X - element.Location.X;
                                    element.YOffset = e.Y - element.Location.Y;
                                }
                                SelectedChannel = null;
                            }
                        rectPoint = e.Location;
                        mouseIsCliced = true;
                        break;

                    case Instruments.Insert_Router:
                        Router router = new Router(e.Location, Network.RouterMaxNumber + 1);
                        Network.MainArea.AddRouter(router);
                        Network.Routers.Add(router);
                        drawingRouters.Add(router);

                        if (mainForm.FullMesh == true)
                        {
                            Random random = new Random();
                            foreach (Router r in Network.Routers)
                            {
                                if (router != r)
                                {
                                    Channel channel = new Channel(router, r);

                                    Network.Channels.Add(channel);
                                    drawingChannels.Add(channel);

                                    channel.Delay = 1 + random.Next(15);
                                    channel.Cost = 1 + random.Next(15);
                                    channel.Metric = 1 + random.Next(15);

                                    channel.ChangeCriterion(mainForm.Criterion);
                                    mainForm.ChannelsRefresh(Network.Channels.Count);
                                }
                            }
                        }

                        mainForm.RoutersRefresh(Network.Routers.Count);
                        break;

                    case Instruments.Insert_Channel:
                        if (mouseIsCliced == true && tmpRouter1 != null)
                        {
                            if ((tmpRouter2 = FindRouter(e.Location)) != null)
                            {
                                ctlPicBoxContextMenu.Show(ctlPicBox.PointToScreen(e.Location));
                            }
                            else
                            {
                                mouseIsCliced = false;
                                tmpPort1 = tmpPort2 = null;
                                tmpRouter1 = tmpRouter2 = null;
                            }
                        }
                        else
                        {
                            if ((tmpRouter1 = FindRouter(e.Location)) != null)
                                ctlPicBoxContextMenu.Show(ctlPicBox.PointToScreen(e.Location));
                        }
                        break;

                   case Instruments.Create_Text:
                        TextLabel textLabel = CreateTextLabel(null, e.Location);
                        EditText editTextForm = new EditText(textLabel);
                        editTextForm.SetLocation(ctlPicBox.PointToScreen(textLabel.Location));
                        editTextForm.ShowDialog();
                        break;
                }
                UpdateField();
            }
        }
示例#10
0
 public Port(Channel ch, Router r, Router ow, String nam)
     : this(ow, nam)
 {
     channel = ch;
     router = r;
 }
示例#11
0
 public void Disconnect()
 {
     channel = null;
     router = null;
     owner.ConnectedPorts.Remove(this);
 }
示例#12
0
 public void Connect(Channel ch, Router r)
 {
     channel = ch;
     router = r;
     owner.ConnectedPorts.Add(this);
 }