public static void BuildScanLevels(List <ScanLevel> levels)
        {
            var level1 = new List <ScanLevel>();

            var ms2count             = levels.Count(m => m.Level == 2);
            var ms3count             = levels.Count(m => m.Level == 3);
            var one_ms2_multiple_ms3 = ms3count > ms2count;

            var       level3Count = -1;
            ScanLevel last        = null;

            foreach (var level in levels)
            {
                switch (level.Level)
                {
                case 1:
                    level1.Add(level);
                    level3Count = -1;
                    break;

                case 2:
                    level.Parent = level1.Last();
                    break;

                case 3:
                    level3Count++;
                    if (one_ms2_multiple_ms3)
                    {
                        level.Parent = level1.Last().Children.Last();
                    }
                    else
                    {
                        level.Parent = level1.Last().Children[level3Count];
                    }
                    break;

                default:
                    if (last.Level == level.Level)
                    {
                        level.Parent = last.Parent;
                    }
                    else
                    {
                        level.Parent = last;
                    }
                    break;
                }
                last = level;
            }
        }
Beispiel #2
0
        public override List <ScanLevel> GetScanLevels(IRawFile rawFile)
        {
            var result = GetRawScanLevels(rawFile);

            var       level3Count = -1;
            ScanLevel lastLevel1  = null;

            for (int i = 0; i < result.Count; i++)
            {
                var level = result[i];

                switch (level.Level)
                {
                case 1:
                    lastLevel1  = level;
                    level3Count = -1;
                    break;

                case 2:
                    level.Parent = lastLevel1;
                    break;

                case 3:
                    level3Count++;
                    level.Parent = lastLevel1.Children[level3Count];
                    break;

                default:
                    var masterlevel = level.Level - 1;
                    for (int j = i - 1; j >= 0; j--)
                    {
                        if (result[j].Level == masterlevel)
                        {
                            level.Parent = result[j];
                            break;
                        }
                    }
                    break;
                }
            }

            return(result);
        }