public void GetConfig_OnLoad(object sender, EventArgs e) { int numberOfRows = File.ReadAllLines(@"InputMatrix.cfg").ToArray().Length; string input = File.ReadAllText(@"InputMatrix.cfg"); string[,] relativesMatrix = new string[numberOfRows, 7]; int numberOfRelative = 0; /* * Заполнение матрицы из файла. */ foreach (var row in input.Split('\n')) { var numberOfParameter = 0; foreach (var column in row.Trim().Split(',')) { relativesMatrix[numberOfRelative, numberOfParameter] = column.Trim(); numberOfParameter++; } numberOfRelative++; } int[] horizonatal = new int[numberOfRows]; /* * Выявление всех возможных горизонталей. */ for (int i = 0; i < numberOfRows; i++) { horizonatal[i] = Convert.ToInt16(relativesMatrix[i, 2]); } /* * Поиск наибольшей горизонтали. */ int maxHorizontal = horizonatal.Concat(new[] { 0 }).Max(); for (int i = 0; i < numberOfRows; i++) { RelationshipDegreeUI newRelationshipDegree = new RelationshipDegreeUI( Convert.ToInt16(relativesMatrix[i, 0]), Convert.ToInt16(relativesMatrix[i, 1]), Convert.ToInt16(relativesMatrix[i, 2]), relativesMatrix[i, 3], Convert.ToInt16(relativesMatrix[i, 4]), Convert.ToInt16(relativesMatrix[i, 5]), Convert.ToSingle(relativesMatrix[i, 6]), maxHorizontal); if (newRelationshipDegree.RelationshipDegreeNumber != 0) { newRelationshipDegree.MouseDown += RelativeButton_MouseDown; panel2.Controls.Add(newRelationshipDegree); } _relationshipDegreeList.Add(newRelationshipDegree); } }
public List <RelationshipDegreeUI> GetPossibleRelationshipsList(int yOfMrca, int numberOfGenerationsBetweenMrcaAndZeroRelative, int numberOfGenerationsBetweenMrcaAndFirstRelative, RelationshipDegreeUI _zeroRelationshipDegree, RelationshipDegreeUI _firstRelationshipDegree, List <RelationshipDegreeUI> _relationshipDegreesList) { /* * Определение основной степени родства. */ List <RelationshipDegreeUI> possibleRelationshipDegreesList = new List <RelationshipDegreeUI> { GetRelationship( numberOfGenerationsBetweenMrcaAndZeroRelative, numberOfGenerationsBetweenMrcaAndFirstRelative, _relationshipDegreesList) }; /* * Определение дополнительных степеней родства, которые могут возникать от того, что 1-я и 2-я личности * находятся в одной вертикали. */ if (_zeroRelationshipDegree.X == _firstRelationshipDegree.X && !((_zeroRelationshipDegree.X == 0 && _zeroRelationshipDegree.Y >= 0) || (_firstRelationshipDegree.X == 0 && _firstRelationshipDegree.Y >= 0))) { int y0New = _zeroRelationshipDegree.Y; int y1New = _firstRelationshipDegree.Y; while (y0New < _zeroRelationshipDegree.X && y1New < _firstRelationshipDegree.X) { try { yOfMrca = GetYOfMRCA(_zeroRelationshipDegree.X, ++y0New, _firstRelationshipDegree.X, ++y1New); possibleRelationshipDegreesList.Add(GetRelationship( yOfMrca - _zeroRelationshipDegree.Y, yOfMrca - _firstRelationshipDegree.Y, _relationshipDegreesList)); } catch (InvalidOperationException) { } } } /* * Определение возможности отсутствия родства между 1-й и 2-й личностями. */ if (((_zeroRelationshipDegree.X > 1) && (_firstRelationshipDegree.X > 1)) || ((_zeroRelationshipDegree.Y > 0) && (_firstRelationshipDegree.Y > 0)) || ((_zeroRelationshipDegree.Y > 0) && (_firstRelationshipDegree.X > 1) || (_firstRelationshipDegree.Y > 0) && (_zeroRelationshipDegree.X > 1))) { possibleRelationshipDegreesList.Add(_relationshipDegreesList.Where(rel => rel.X == -1 && rel.Y == -1).Single()); } return(possibleRelationshipDegreesList); }
private void RelativeButton_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { _zeroRelative = (RelationshipDegreeUI)sender; label2.Text = ((RelationshipDegreeUI)sender).RelationName; } else if (e.Button == MouseButtons.Right) { _firstRelative = (RelationshipDegreeUI)sender; label4.Text = ((RelationshipDegreeUI)sender).RelationName; } }