private void btnFuzzyLinkTest2New_Click(object sender, RoutedEventArgs e) { try { #region Parse Gui int numFrom; if (!int.TryParse(txtFuzzyLinkTest2FromCount.Text, out numFrom)) { MessageBox.Show("Couldn't parse the from count as an integer", this.Title, MessageBoxButton.OK, MessageBoxImage.Warning); return; } int numTo; if (!int.TryParse(txtFuzzyLinkTest2ToCount.Text, out numTo)) { MessageBox.Show("Couldn't parse the to count as an integer", this.Title, MessageBoxButton.OK, MessageBoxImage.Warning); return; } int maxIntermediate; if (!int.TryParse(txtFuzzyLinkTest2MaxIntermediate.Text, out maxIntermediate)) { MessageBox.Show("Couldn't parse the max intermediate as an integer", this.Title, MessageBoxButton.OK, MessageBoxImage.Warning); return; } int maxFinal; if (!int.TryParse(txtFuzzyLinkTest2MaxFinal.Text, out maxFinal)) { MessageBox.Show("Couldn't parse the max final as an integer", this.Title, MessageBoxButton.OK, MessageBoxImage.Warning); return; } #endregion btnClear_Click(this, new RoutedEventArgs()); #region Create Neurons Point3D fromPoint = new Point3D(-1.1, 0, 0); Point3D toPoint = new Point3D(1.1, 0, 0); List<INeuron> inNeurons = new List<INeuron>(); // From inNeurons.Add(new Neuron_ZeroPos(fromPoint)); // old from Point3D[] fromPositions = new Point3D[numFrom]; for (int cntr = 0; cntr < numFrom; cntr++) { fromPositions[cntr] = fromPoint + Math3D.GetRandomVector_Spherical(1d); inNeurons.Add(new Neuron_NegPos(fromPositions[cntr])); } // To inNeurons.Add(new Neuron_ZeroPos(toPoint)); // old to Point3D[] toPositions = new Point3D[numTo]; for (int cntr = 0; cntr < numTo; cntr++) { toPositions[cntr] = toPoint + Math3D.GetRandomVector_Spherical(1d); inNeurons.Add(new Neuron_NegPos(toPositions[cntr])); } Point3D[] allNew = fromPositions. Concat(toPositions). ToArray(); // Draw neurons List<Tuple<INeuron, SolidColorBrush>> outNeurons; ModelVisual3D model; BuildNeuronVisuals(out outNeurons, out model, inNeurons, new NeruonContainerShell(new Point3D(0, 0, 0), Quaternion.Identity, null), _colors); _debugVisuals.Add(model); _viewportNeural.Children.Add(model); #endregion var existingLinks = new[] { Tuple.Create(fromPoint, toPoint, 1d), }; var newLinks = ItemLinker.FuzzyLink(existingLinks, allNew, maxFinal, maxIntermediate); #region Draw Links // Draw links Model3DGroup posLines = null, negLines = null; DiffuseMaterial posDiffuse = null, negDiffuse = null; // Draw initial results BuildLinkVisual(ref posLines, ref posDiffuse, ref negLines, ref negDiffuse, fromPoint, toPoint, -1d, null, _colors); // Draw final results foreach (var result in newLinks) { BuildLinkVisual(ref posLines, ref posDiffuse, ref negLines, ref negDiffuse, allNew[result.Item1], allNew[result.Item2], result.Item3 * 4d, null, _colors); } model = new ModelVisual3D(); model.Content = posLines; _debugVisuals.Add(model); _viewportNeural.Children.Add(model); model = new ModelVisual3D(); model.Content = negLines; _debugVisuals.Add(model); _viewportNeural.Children.Add(model); #endregion } catch (Exception ex) { MessageBox.Show(ex.ToString(), this.Title, MessageBoxButton.OK, MessageBoxImage.Error); } }