コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
 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;
     }
 }