public void MouseUp(Vector2 mouseFieldPos) { SelectRectangle.IsVisible = false; var discratePos = ToDiscret(mouseFieldPos); foreach (var streamingVis in StreamingComponents) { if (streamingVis.Hit(discratePos, SelectRectangle.Translate)) { streamingVis.IsSelect = true; } } var mouseUpPos = ToDiscret(mouseFieldPos); if (_dragStreamingVisual != null) { _dragStreamingVisual.MouseMovePos = mouseUpPos; _dragStreamingVisual.Dispose(); _dragStreamingVisual = null; } if (_wireCreator != null) { _wireCreator.MouseMovePos = mouseUpPos; _wireCreator.Connecting(); var wire = _wireCreator.Wire; var isOutputWireCreator = _wireCreator is OutputWireCreator; var isInputWireCreator = _wireCreator is InputWireCreator; _wireCreator.Dispose(); _wireCreator = null; foreach (var streamingVis in StreamingComponents) { if (!streamingVis.Hit(mouseFieldPos)) { continue; } if (isOutputWireCreator) { for (int i = 0; i < streamingVis.InCount; i++) { var div = streamingVis.InputPosition(i) - _mouseDownPos; if (streamingVis.Inputs[i] == null && Math.Abs(div.X) * 2 < Delta && Math.Abs(div.Y) * 2 < Delta) { wire.ConnectTo(0, streamingVis, i); Wires.Add(wire); break; } } } else if (isInputWireCreator) { for (int i = 0; i < streamingVis.OutCount; i++) { var div = streamingVis.OutputPosition(i) - _mouseDownPos; if (streamingVis.Outputs[i] == null && Math.Abs(div.X) * 2 < Delta && Math.Abs(div.Y) * 2 < Delta) { streamingVis.ConnectTo(i, wire, 0); Wires.Add(wire); break; } } } } } }