public void AddEdge(DeviceControl device1, DeviceControl device2) { //makes sure the edge is valid and does not already exist if (Edge[device1].ContainsKey(device2) || device1.DataFlow == device2.DataFlow) { return; } //create a "repeater" for the edge DeviceControl capture; DeviceControl render; if (device1.DataFlow == DataFlow.Capture) { capture = device1; render = device2; } else { capture = device2; render = device1; } RepeaterInfo repeater = new RepeaterInfo(capture, render, this); AddEdge(device1, device2, repeater); }
public void RemoveEdge(DeviceControl device1, DeviceControl device2) { //removes adjacent vertex from vertex's dictionary MainWindow.GraphMap.Children.Remove(Edge[device1][device2].Link); Edge[device1].Remove(device2); Edge[device2].Remove(device1); }
private void AddEdge(DeviceControl device1, DeviceControl device2, RepeaterInfo info) { Edge[device1].Add(device2, info); Edge[device2].Add(device1, info); MainWindow.GraphMap.Children.Add(info.Link); }
public void AddVertex(DeviceControl device) { //if vertex does not exist, add vertex if (!Edge.ContainsKey(device)) { Edge[device] = new Dictionary <DeviceControl, RepeaterInfo>(); } }
public void RemoveVertex(DeviceControl device) { /* remove vertex along with any edges the vertex is an endpoint to */ //remove device from adjacent devices' dictionaries foreach (DeviceControl adj in Edge[device].Keys) { Edge[adj].Remove(device); MainWindow.GraphMap.Children.Remove(Edge[device][adj].Link); } //remove adjacent devices from device dictionary Edge.Remove(device); MainWindow.GraphMap.Children.Remove(device); }
private void addDevice() { AddDeviceDialog dialog = new AddDeviceDialog(); dialog.Owner = this; dialog.ShowDialog(); if (dialog.Device == null) { return; } DeviceControl control = new DeviceControl(dialog.Device, Graph); Graph.AddVertex(control); graphCanvas.Children.Add(control); Canvas.SetLeft(control, 0); Canvas.SetTop(control, 0); }
private void UserControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { SelectedControl = this; if (MainWindow.SelectedTool == "Hand") { start = Mouse.GetPosition(sender as UIElement); Panel.SetZIndex(this, 2); } else { if (InitialLink == null) { InitialLink = this; } else { Graph.AddEdge(InitialLink, this); InitialLink = null; } } }
public Dictionary <DeviceControl, RepeaterInfo> GetAdjacent(DeviceControl device) { return(Edge[device]); }
public static BipartiteDeviceGraph LoadGraph(string filename) { BipartiteDeviceGraph graph = new BipartiteDeviceGraph(); StreamReader reader = new StreamReader(filename); Dictionary <string, MMDevice> deviceFromID = new Dictionary <string, MMDevice>(); //create ID dictionary to get the correct MMDevice foreach (MMDevice device in new MMDeviceEnumerator().EnumerateAudioEndPoints(DataFlow.All, DeviceState.All)) { deviceFromID[device.ID] = device; } if (!int.TryParse(reader.ReadLine(), out int N)) { return(new BipartiteDeviceGraph()); } DeviceControl[] devices = new DeviceControl[N]; //get array of verteces for (int i = 0; i < N; i++) { try { MMDevice device = deviceFromID[reader.ReadLine()]; double[] pos = reader.ReadLine().Split().Select(x => double.Parse(x)).ToArray(); DeviceControl control = new DeviceControl(device, graph); control.Left = pos[0]; control.Top = pos[1]; MainWindow.GraphMap.Children.Add(control); graph.AddVertex(control); devices[i] = control; } catch { devices[i] = null; } } if (!int.TryParse(reader.ReadLine(), out int M)) { return(new BipartiteDeviceGraph()); } //add edges to graph for (int i = 0; i < M; i++) { int[] adj = reader.ReadLine().Split().Select(x => int.Parse(x)).ToArray(); List <string> data = new List <string>(); for (int j = 0; j < 8; j++) { data.Add(reader.ReadLine()); } DeviceControl capture = devices[adj[0]]; DeviceControl render = devices[adj[1]]; if (capture == null || render == null) { continue; } RepeaterInfo repeater = new RepeaterInfo(capture, render, graph); repeater.SetData(data); graph.AddEdge(capture, render, repeater); } reader.Close(); return(graph); }
public RepeaterInfo(DeviceControl capture, DeviceControl render, BipartiteDeviceGraph graph) { captureContext = new MenuItem(); captureContext.Header = render.DeviceName; captureContext.Click += context_Click; capture.ContextMenu.Items.Add(captureContext); renderContext = new MenuItem(); renderContext.Header = capture.DeviceName; renderContext.Click += context_Click; render.ContextMenu.Items.Add(renderContext); Capture = capture; Render = render; Link = new Line { Stroke = Brushes.White, StrokeThickness = 2, }; Binding bx1 = new Binding("X") { UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged, Source = capture }; Link.SetBinding(Line.X1Property, bx1); Binding by1 = new Binding("Y") { UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged, Source = capture }; Link.SetBinding(Line.Y1Property, by1); Binding bx2 = new Binding("X") { UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged, Source = render }; Link.SetBinding(Line.X2Property, bx2); Binding by2 = new Binding("Y") { UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged, Source = render }; Link.SetBinding(Line.Y2Property, by2); SamplingRate = DefaultData.SamplingRate; BitsPerSample = DefaultData.BitsPerSample; ChannelConfig = DefaultData.ChannelConfig; BufferMs = DefaultData.BufferMs; Buffers = DefaultData.Buffers; Prefill = DefaultData.Prefill; ResyncAt = DefaultData.ResyncAt; WindowName = DefaultData.WindowName; Path = DefaultData.RepeaterPath; this.graph = graph; }