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; } }
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); }
public ChannelsPair(Channel ch1, Channel ch2) { Channel1 = ch1; Channel2 = ch2; }
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); }
public ChannelForm(Channel ch) { InitializeComponent(); channel = ch; }
// удаление канала связи 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(); }
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); }
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); }
// событие: клавиша мыши нажата 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(); } }
public Port(Channel ch, Router r, Router ow, String nam) : this(ow, nam) { channel = ch; router = r; }
public void Disconnect() { channel = null; router = null; owner.ConnectedPorts.Remove(this); }
public void Connect(Channel ch, Router r) { channel = ch; router = r; owner.ConnectedPorts.Add(this); }