コード例 #1
0
        private void resizeAndParse(string textToRender, int maxWidth, bool parseHTML, out int width, out int height, out int ascender)
        {
            width    = 0;
            height   = 0;
            ascender = 0;

            if (m_HtmlParser != null)
            {
                m_HtmlParser = null;
            }
            m_HtmlParser = new Reader(textToRender, parseHTML);

            Regions.Clear();
            Images.Clear();

            if (maxWidth < 0)
            {
                width = 0;
            }
            else
            {
                if (maxWidth == 0)
                {
                    getTextDimensions(m_HtmlParser, 200, 0, out width, out height, out ascender);
                }
                else
                {
                    getTextDimensions(m_HtmlParser, maxWidth, 0, out width, out height, out ascender);
                }
            }
        }
コード例 #2
0
        private void GetRegions()
        {
            Regions.Clear();
            RegionDictionary.Clear();
            var regions = File.ReadAllLines(Region_FilePath).Select(a => a.Split(';')).ToList();

            foreach (var region in regions)
            {
                RegionDictionary.Add(region[0], region[1]);
                Regions.Add(new Region {
                    RegionName = region[0], RegionPopulation = region[1]
                });
            }

            using (var reader = new StreamReader(Region_FilePath))
            {
                Regions.Clear();
                while (!reader.EndOfStream)
                {
                    var values = reader.ReadLine().Split(';');
                    Regions.Add(new Region {
                        RegionName = values[0], RegionPopulation = values[1]
                    });
                }
            }
        }
コード例 #3
0
        public void LoadRegions()
        {
            Regions.Clear();

            try
            {
                _regionService.Load(RegionFile);

                _rvms = new List <RegionalViewModel>();

                var regions = _regionService.GetRegionsByIndex();
                foreach (var region in regions)
                {
                    var rgn = IoC.Get <RegionViewModel>();
                    rgn.Region = region;

                    Regions.Add(rgn);

                    RegionalViewModel rvm = new RegionalViewModel
                    {
                        ROI = region,
                    };

                    _rvms.Add(rvm);
                }

                AXPlotModel = LoadPlotModel(_rvms, r => r.X, r => r.Y);
                SGPlotModel = LoadPlotModel(_rvms, r => (100 - r.Y), r => r.Z);
                CRPlotModel = LoadPlotModel(_rvms, r => r.X, r => r.Z);
            }
            catch (Exception)
            {
            }
        }
コード例 #4
0
 public void Rest()
 {
     Input  = null;
     Output = null;
     Pixels = null;
     Regions.Clear();
     AnalyzeException   = null;
     _highlightedRegion = null;
 }
コード例 #5
0
        private void UpdateScanArea()
        {
            if (SelectedScanArea == null ||
                Screenshot == null)
            {
                return;
            }

            var area = SelectedScanArea;

            Regions.Clear();

            var region = new RegionModel
            {
                XPos      = area.X,
                YPos      = area.Y,
                Height    = area.Height,
                Width     = area.Width,
                MinHeight = 8,
                MinWidth  = 8
            };

            region.Moving += (sender, args) =>
            {
                if (args.X + region.Width > BoardWidth)
                {
                    args.Cancel = true;
                    return;
                }
                if (args.Y + region.Height > BoardHeight)
                {
                    args.Cancel = true;
                    return;
                }
                SelectedScanArea.X = (int)args.X;
                SelectedScanArea.Y = (int)args.Y;
            };
            region.Resizing += (sender, args) =>
            {
                if (region.XPos + args.Width > BoardWidth)
                {
                    args.Cancel = true;
                    return;
                }
                if (region.YPos + args.Height > BoardHeight)
                {
                    args.Cancel = true;
                    return;
                }
                SelectedScanArea.Width  = (int)args.Width;
                SelectedScanArea.Height = (int)args.Height;
            };
            Region = region;
            Regions.Add(region);
        }
コード例 #6
0
 public void Dispose()
 {
     Nodes.Clear();
     MarkerGroups.Clear();
     Regions.Clear();
     Materials.Clear();
     Bounds.Clear();
     foreach (var mesh in Meshes)
     {
         mesh.Dispose();
     }
     Meshes.Clear();
 }
コード例 #7
0
        private void Generate(WebBrowser browser)
        {
            Regions.Clear();
            foreach (var address in _addressRepository.All())
            {
                if (!Regions.Contains(address.Province))
                {
                    Regions.Add(address.Province);
                }
            }

            _browser = browser;

            var tasks           = _taskRepository.All();
            var DataElementList = new List <NewInspectionDataElement>();

            var values = new Dictionary <string, int>();

            foreach (var item in tasks)
            {
                if (((item.Customer == SelectedCustomer) || SelectAllCustomers) && (item.DatetimeCreated != null) && (item.DateTimeEnd != null) && (item.DateTimeStart != null) && (item.ParkingLot?.Address != null))
                {
                    if ((item.DatetimeCreated < EndDateTime) && (item.DatetimeCreated > BeginDateTime) && (item.ParkingLot.Address.Province.Equals(SelectedRegion) || SelectAllRegions))
                    {
                        var month = item.DatetimeCreated.ToString("MMMMM");
                        if (!values.ContainsKey(month))
                        {
                            values.Add(month, 0);
                        }
                        values[month]++;
                    }
                }
            }

            foreach (var item in values)
            {
                DataElementList.Add(new NewInspectionDataElement
                {
                    month  = item.Key,
                    amount = item.Value.ToString()
                });
            }

            var o = JsonConvert.SerializeObject(DataElementList);

            browser.InvokeScript("go", o);

            Customers.Clear();
            _customerRepository.All().ForEach(Customers.Add);
        }
コード例 #8
0
        private void MakeRegions(int row, int columns)
        {
            int index = 0;

            Regions.Clear();
            for (int rowIndex = 0; rowIndex < row; rowIndex++)
            {
                for (int columnIndex = 0; columnIndex < columns; columnIndex++)
                {
                    Regions.Add(new RegionInfo()
                    {
                        ColumnIndex = columnIndex, RowIndex = rowIndex, Index = index++
                    });
                }
            }
        }
コード例 #9
0
    public void EditorLoadSettings()
    {
        if (!Manager.IsAwake <Mods>())
        {
            Manager.WakeUp <Mods>("__MODS");
        }
        Mods.Get.EditorCurrentWorldName = EditorCurrentWorldName;
        Mods.Get.Editor.InitializeEditor();

        WorldFlags.Clear();
        WorldStartupPositions.Clear();
        Biomes.Clear();
        Regions.Clear();
        AudioProfiles.Clear();

        string errorMessage = string.Empty;

        GameData.IO.LoadWorld(ref Settings, EditorCurrentWorldName, out errorMessage);
        GameData.IO.SetWorldName(Settings.Name);
        if (SaveFlags)
        {
            Mods.Get.Editor.LoadAvailableMods <FlagSet>(WorldFlags, "FlagSet");
        }
        if (SaveBiomes)
        {
            Mods.Get.Editor.LoadAvailableMods <Biome>(Biomes, "Biome");
        }
        if (SaveRegions)
        {
            Mods.Get.Editor.LoadAvailableMods <Region>(Regions, "Region");
        }
        if (SaveAudio)
        {
            Mods.Get.Editor.LoadAvailableMods <AudioProfile>(AudioProfiles, "AudioProfile");
        }
        if (SaveStartupPositions)
        {
            Mods.Get.Editor.LoadAvailableMods <PlayerStartupPosition>(WorldStartupPositions, "PlayerStartupPosition");
        }

        UnityEditor.EditorUtility.SetDirty(gameObject);
        UnityEditor.EditorUtility.SetDirty(this);
    }
コード例 #10
0
        public void Init(GameFileCache gameFileCache, Action <string> updateStatus)
        {
            var rpfman = gameFileCache.RpfMan;

            string filename = "common.rpf\\data\\levels\\gta5\\time.xml";

            XmlDocument timexml = rpfman.GetFileXml(filename);

            XmlElement  time     = timexml.DocumentElement;
            XmlNode     suninfo  = time.SelectSingleNode("suninfo");
            XmlNode     mooninfo = time.SelectSingleNode("mooninfo");
            XmlNodeList samples  = time.SelectNodes("sample");
            XmlNodeList regions  = time.SelectNodes("region");

            sun_roll           = Xml.GetFloatAttribute(suninfo, "sun_roll");
            sun_yaw            = Xml.GetFloatAttribute(suninfo, "sun_yaw");
            moon_roll          = Xml.GetFloatAttribute(mooninfo, "moon_roll");
            moon_wobble_freq   = Xml.GetFloatAttribute(mooninfo, "moon_wobble_freq");
            moon_wobble_amp    = Xml.GetFloatAttribute(mooninfo, "moon_wobble_amp");
            moon_wobble_offset = Xml.GetFloatAttribute(mooninfo, "moon_wobble_offset");

            Samples.Clear();
            for (int i = 0; i < samples.Count; i++)
            {
                TimecycleSample tcs = new TimecycleSample();
                tcs.Init(samples[i]);
                Samples.Add(tcs);
            }

            Regions.Clear();
            for (int i = 0; i < regions.Count; i++)
            {
                Regions.Add(Xml.GetStringAttribute(regions[i], "name"));
            }

            Inited = true;
        }
コード例 #11
0
 public void InitRegion()
 {
     Regions.Clear();
     RegionIndex = 10000;
     UpdateRegionR(Head);
 }
コード例 #12
0
ファイル: EditModel.cs プロジェクト: scenicsoftware/Piranha
        private void GetRelated()
        {
            // Clear related
            Regions.Clear();
            Properties.Clear();
            AttachedContent.Clear();

            // Get group parents
            DisableGroups = SysGroup.GetParents(Page.GroupId);
            DisableGroups.Reverse();

            // Get template & permalink
            Template  = PageTemplate.GetSingle("pagetemplate_id = @0", Page.TemplateId);
            Permalink = Permalink.GetSingle(Page.PermalinkId);
            if (Permalink == null)
            {
                // Get the site tree
                using (var db = new DataContext()) {
                    var sitetree = db.SiteTrees.Where(s => s.Id == Page.SiteTreeId).Single();

                    Permalink = new Permalink()
                    {
                        Id = Guid.NewGuid(), Type = Permalink.PermalinkType.PAGE, NamespaceId = sitetree.NamespaceId
                    };
                    Page.PermalinkId = Permalink.Id;
                }
            }

            // Get placement ref title
            if (!IsSite)
            {
                if (Page.ParentId != Guid.Empty || Page.Seqno > 1)
                {
                    Page refpage = null;
                    if (Page.Seqno > 1)
                    {
                        if (Page.ParentId != Guid.Empty)
                        {
                            refpage = Page.GetSingle("page_parent_id = @0 AND page_seqno = @1", Page.ParentId, Page.Seqno - 1);
                        }
                        else
                        {
                            refpage = Page.GetSingle("page_parent_id IS NULL AND page_seqno = @0", Page.Seqno - 1);
                        }
                    }
                    else
                    {
                        refpage = Page.GetSingle(Page.ParentId, true);
                    }
                    PlaceRef = refpage.Title;
                }
            }

            if (Template != null)
            {
                // Only load regions & properties if this is an original
                if (Page.OriginalId == Guid.Empty)
                {
                    // Get regions
                    var regions = RegionTemplate.Get("regiontemplate_template_id = @0", Template.Id, new Params()
                    {
                        OrderBy = "regiontemplate_seqno"
                    });
                    foreach (var rt in regions)
                    {
                        var reg = Region.GetSingle("region_regiontemplate_id = @0 AND region_page_id = @1 and region_draft = @2",
                                                   rt.Id, Page.Id, Page.IsDraft);
                        if (reg != null)
                        {
                            Regions.Add(reg);
                        }
                        else
                        {
                            Regions.Add(new Region()
                            {
                                InternalId       = rt.InternalId,
                                Name             = rt.Name,
                                Type             = rt.Type,
                                PageId           = Page.Id,
                                RegiontemplateId = rt.Id,
                                IsDraft          = Page.IsDraft,
                                IsPageDraft      = Page.IsDraft
                            });
                        }
                    }

                    // Get Properties
                    foreach (string name in Template.Properties)
                    {
                        Property prp = Property.GetSingle("property_name = @0 AND property_parent_id = @1 AND property_draft = @2",
                                                          name, Page.Id, Page.IsDraft);
                        if (prp != null)
                        {
                            Properties.Add(prp);
                        }
                        else
                        {
                            Properties.Add(new Property()
                            {
                                Name = name, ParentId = Page.Id, IsDraft = Page.IsDraft
                            });
                        }
                    }
                }
            }
            else
            {
                throw new ArgumentException("Could not find page template for page {" + Page.Id.ToString() + "}");
            }

            // Only load attachments if this is an original
            if (Page.OriginalId == Guid.Empty)
            {
                // Get attached content
                if (Page.Attachments.Count > 0)
                {
                    // Content meta data is actually memcached, so this won't result in multiple queries
                    Page.Attachments.ForEach(a => {
                        Models.Content c = Models.Content.GetSingle(a, true);
                        if (c != null)
                        {
                            AttachedContent.Add(c);
                        }
                    });
                }
            }

            // Get page position
            Parents = BuildParentPages(Sitemap.GetStructure(Page.SiteTreeInternalId, false), Page);
            Parents.Insert(0, new PagePlacement()
            {
                Level = 1, IsSelected = Page.ParentId == Guid.Empty
            });
            Siblings = BuildSiblingPages(Page.Id, Page.ParentId, Page.Seqno, Page.ParentId, Page.SiteTreeInternalId);

            // Only load extensions if this is an original
            if (Page.OriginalId == Guid.Empty)
            {
                // Get extensions
                Extensions = Page.GetExtensions(true);
            }

            // Initialize regions
            foreach (var reg in Regions)
            {
                reg.Body.InitManager(this);
            }

            // Get whether comments should be enabled
            EnableComments = Areas.Manager.Models.CommentSettingsModel.Get().EnablePages;
            if (!Page.IsNew && EnableComments)
            {
                using (var db = new DataContext()) {
                    Comments = db.Comments.
                               Where(c => c.ParentId == Page.Id && c.ParentIsDraft == false).
                               OrderByDescending(c => c.Created).ToList();
                }
            }

            // Get the site if this is a site page
            if (Permalink.Type == Models.Permalink.PermalinkType.SITE)
            {
                using (var db = new DataContext()) {
                    SiteTree = db.SiteTrees.Where(s => s.Id == Page.SiteTreeId).Single();
                }
            }

            // Check if the page can be published
            if (Page.OriginalId != Guid.Empty)
            {
                CanPublish = Page.GetScalar("SELECT count(*) FROM page WHERE page_id=@0 AND page_draft=0", Page.OriginalId) > 0;
            }
        }
コード例 #13
0
        private void Generate(WebBrowser browser)
        {
            if (SelectAllCustomers == false && SelectedCustomer == null)
            {
                return;
            }
            _browser = browser;
            var DataElementList = new List <DataElement>();
            var list            = _taskRepository.All();


            foreach (var item in list)
            {
                if (item.ParkingLot.Address != null && item.DateTimeEnd != null && item.DateTimeStart != null || item.Customer?.Name != null)
                {
                    bool region = true;
                    if (SelectedRegion != null && item.ParkingLot.Address != null && item.ParkingLot.Address.Province != null)
                    {
                        if (!item.ParkingLot.Address.Province.Equals(SelectedRegion))
                        {
                            region = false;
                        }
                    }
                    if ((region || SelectAllRegions == true) &&
                        item.DateTimeStart > BeginDateTime &&
                        item.DateTimeStart < EndDateTime &&
                        (item.Customer.Name == SelectedCustomer?.Name || SelectAllCustomers == true))
                    {
                        var inspections = item.Inspections;

                        List <Employee> employees = (from i in inspections from ii in i.InspectionInspectors select ii.Employee).ToList();

                        if (employees.Contains(SelectedEmployee) || SelectAllEmployees == true)
                        {
                            List <TimeSpan> spans = new List <TimeSpan>();
                            foreach (var i in item.Inspections)
                            {
                                TimeSpan span;
                                if (i.DateTimeDone != null)
                                {
                                    TimeSpan?tempSpan = i.DateTimeDone - i.DateTimeStarted;
                                    span = tempSpan.Value;
                                    spans.Add(span);
                                }
                            }
                            if (spans.Count > 0)
                            {
                                double duration      = spans.Average(timeSpan => timeSpan.TotalMinutes);
                                int    finalDuration = (int)duration;
                                DataElementList.Add(new DataElement
                                {
                                    inspection = item.Customer.Name,
                                    duration   = finalDuration.ToString()
                                });
                            }
                        }
                    }
                }
            }
            var o = new DataSet
            {
                data      = DataElementList,
                ChartType = SelectedChart
            };
            var test = JsonConvert.SerializeObject(o);

            browser.InvokeScript("go", test);

            Regions.Clear();
            foreach (var address in _addressRepository.All())
            {
                if (!Regions.Contains(address.Province))
                {
                    Regions.Add(address.Province);
                }
            }

            Customers.Clear();
            _customerRepository.All().ForEach(Customers.Add);
            _userRepository.All().ForEach(Inspectors.Add);
        }
コード例 #14
0
        private void GetRelated()
        {
            // Clear related
            Regions.Clear();
            Properties.Clear();
            AttachedContent.Clear();

            // Get group parents
            DisableGroups = SysGroup.GetParents(Page.GroupId);
            DisableGroups.Reverse();

            // Get placement ref title
            if (Page.ParentId != Guid.Empty || Page.Seqno > 1)
            {
                Page refpage = null;
                if (Page.Seqno > 1)
                {
                    if (Page.ParentId != Guid.Empty)
                    {
                        refpage = Page.GetSingle("page_parent_id = @0 AND page_seqno = @1", Page.ParentId, Page.Seqno - 1);
                    }
                    else
                    {
                        refpage = Page.GetSingle("page_parent_id IS NULL AND page_seqno = @0", Page.Seqno - 1);
                    }
                }
                else
                {
                    refpage = Page.GetSingle(Page.ParentId, true);
                }
                PlaceRef = refpage.Title;
            }

            // Get template & permalink
            Template  = PageTemplate.GetSingle("pagetemplate_id = @0", Page.TemplateId);
            Permalink = Permalink.GetSingle(Page.PermalinkId);
            if (Permalink == null)
            {
                Permalink = new Permalink()
                {
                    Id = Guid.NewGuid(), Type = Permalink.PermalinkType.PAGE, NamespaceId = new Guid("8FF4A4B4-9B6C-4176-AAA2-DB031D75AC03")
                };
                Page.PermalinkId = Permalink.Id;
            }

            if (Template != null)
            {
                // Get regions
                var regions = RegionTemplate.Get("regiontemplate_template_id = @0", Template.Id, new Params()
                {
                    OrderBy = "regiontemplate_seqno"
                });
                foreach (var rt in regions)
                {
                    var reg = Region.GetSingle("region_regiontemplate_id = @0 AND region_page_id = @1 and region_draft = @2",
                                               rt.Id, Page.Id, Page.IsDraft);
                    if (reg != null)
                    {
                        Regions.Add(reg);
                    }
                    else
                    {
                        Regions.Add(new Region()
                        {
                            InternalId       = rt.InternalId,
                            Name             = rt.Name,
                            Type             = rt.Type,
                            PageId           = Page.Id,
                            RegiontemplateId = rt.Id,
                            IsDraft          = Page.IsDraft,
                            IsPageDraft      = Page.IsDraft
                        });
                    }
                }

                // Get Properties
                foreach (string name in Template.Properties)
                {
                    Property prp = Property.GetSingle("property_name = @0 AND property_parent_id = @1 AND property_draft = @2",
                                                      name, Page.Id, Page.IsDraft);
                    if (prp != null)
                    {
                        Properties.Add(prp);
                    }
                    else
                    {
                        Properties.Add(new Property()
                        {
                            Name = name, ParentId = Page.Id, IsDraft = Page.IsDraft
                        });
                    }
                }
            }
            else
            {
                throw new ArgumentException("Could not find page template for page {" + Page.Id.ToString() + "}");
            }

            // Get attached content
            if (Page.Attachments.Count > 0)
            {
                // Content meta data is actually memcached, so this won't result in multiple queries
                Page.Attachments.ForEach(a => {
                    Models.Content c = Models.Content.GetSingle(a);
                    if (c != null)
                    {
                        AttachedContent.Add(c);
                    }
                });
            }

            // Get page position
            Parents = BuildParentPages(Sitemap.GetStructure(false), Page);
            Parents.Insert(0, new PagePlacement()
            {
                Level = 1, IsSelected = Page.ParentId == Guid.Empty
            });
            Siblings = BuildSiblingPages(Page.Id, Page.ParentId, Page.Seqno, Page.ParentId);
        }
コード例 #15
0
        public void Analyze()
        {
            Region reg; // Temprory object
            Bitmap inputBmp;
            Color  currentPixelColor;
            CPoint currentPixel; // Current pixel location (in Input Image coordinate)

            // Initialize
            this.Output     = null;
            Pixels          = new Pixel[Input.Width, Input.Height];
            currentPixel    = new CPoint();
            inputBmp        = (Bitmap)Input;
            _colorIdCounter = 0;
            Regions.Clear();
            UsedColors.Clear();
            Region.ResetIdCounter();
            this.AnalyzeCanceled  = false;
            this.AnalyzeException = null;

            #region Fast Algorithm
            //try {
            //    // Initialize
            //    Pixels = new Pixel[Input.Width, Input.Height];
            //    currentPixel = new CPoint();
            //    inputBmp = (Bitmap)Input;
            //    _colorIdCounter = 0;
            //    Regions.Clear();
            //    UsedColors.Clear();
            //    Region.ResetIdCounter();
            //    this.AnalyzeCanceled = false;
            //    this.AnalyzeException = null;

            //    for (int y = 0; y < Input.Height; y++) {
            //        for (int x = 0; x < Input.Width; x++) {
            //            Pixels[x, y] = new Pixel();
            //            reg = new Region();

            //            Pixels[x, y].Color = inputBmp.GetPixel(x, y);
            //            reg.ColorID = GetColorID(Pixels[x, y].Color);
            //            Pixels[x, y].Region = reg;
            //        }
            //    }
            //}
            //catch (Exception e) {
            //    AnalyzeException = e;
            //    this.Pixels = null;
            //    this.UsedColors = null;
            //    this.Output = null;
            //    GC.Collect();
            //    return;
            //}
            #endregion

            #region Complete Algorithm

            try {
                #region Scan First Row

                // Scan inputBmp[0, 0]
                reg = new Region();

                currentPixel.X = 0;
                currentPixel.Y = 0;

                Pixels[0, 0]        = new Pixel();
                Pixels[0, 0].Region = reg;
                Pixels[0, 0].Color  = inputBmp.GetPixel(0, 0);

                reg.ColorID      = GetColorID(Pixels[0, 0].Color);
                reg.Boundaries   = new Rectangle(0, 0, 1, 1);
                reg.GeometricSum = new Point(0, 0);
                reg.Pixels.Add(currentPixel);
                Regions.Add(reg);

                // Scan Pixel [1...Input.Width-1] of First Row
                // reg = null;
                for (int x = 1; x < Input.Width; x++)
                {
                    currentPixel = new CPoint();

                    currentPixel.X    = x;
                    currentPixel.Y    = 0;
                    currentPixelColor = inputBmp.GetPixel(x, 0);

                    if (currentPixelColor == Pixels[x - 1, 0].Color)
                    {
                        // Add this pixel to it's left neighbor's region
                        reg = Pixels[x - 1, 0].Region;
                        reg.Pixels.Add(currentPixel);
                        reg.Boundaries.Width += 1;
                        // reg.GeometricSum.Y = 0;  // No need to set. it has already set to zero
                    }
                    else
                    {
                        // Create a new Region for currentPixel
                        reg = new Region(GetColorID(currentPixelColor), new Rectangle(x, 0, 1, 1));
                        reg.Pixels.Add(currentPixel);
                        Regions.Add(reg);
                    }

                    reg.GeometricSum.X += currentPixel.X;
                    reg.GeometricSum.Y += currentPixel.Y;
                    Pixels[x, 0]        = new Pixel();
                    Pixels[x, 0].Color  = currentPixelColor;
                    Pixels[x, 0].Region = reg;
                }
                #endregion

                #region Scan Rest of Image
                // reg = null;
                for (int y = 1; (y < Input.Height) && (_continueAnalyze); y++)
                {
                    #region Scan First Pixel of Current Row
                    currentPixel = new CPoint();

                    currentPixel.X = 0;
                    currentPixel.Y = y;

                    currentPixelColor = inputBmp.GetPixel(0, y);

                    if (currentPixelColor == Pixels[0, currentPixel.Y - 1].Color)
                    {
                        reg = Pixels[0, currentPixel.Y - 1].Region;
                        reg.Boundaries.Height++;
                    }
                    else if (currentPixelColor == Pixels[1, currentPixel.Y - 1].Color)
                    {
                        reg            = Pixels[1, currentPixel.Y - 1].Region;
                        reg.Boundaries = Rectangle.Union(reg.Boundaries, new Rectangle(currentPixel.X, currentPixel.Y, 1, 1));
                    }
                    else
                    {
                        reg = new Region(GetColorID(currentPixelColor), new Rectangle(0, currentPixel.Y, 1, 1));
                        Regions.Add(reg);
                    }

                    //reg.GeometricSum.X += currentPixel.X;
                    reg.GeometricSum.Y += currentPixel.Y;
                    reg.Pixels.Add(currentPixel);
                    Pixels[0, currentPixel.Y]        = new Pixel();
                    Pixels[0, currentPixel.Y].Region = reg;
                    Pixels[0, currentPixel.Y].Color  = currentPixelColor;
                    #endregion

                    #region Scan Inner Pixels of Current Row
                    for (int x = 1; x < Input.Width - 1; x++)
                    {
                        currentPixel      = new CPoint();
                        currentPixel.X    = x;
                        currentPixel.Y    = y;
                        currentPixelColor = inputBmp.GetPixel(x, y);

                        if (currentPixelColor == Pixels[x - 1, currentPixel.Y].Color)
                        {
                            reg = Pixels[x - 1, currentPixel.Y].Region;
                        }
                        else if (currentPixelColor == Pixels[x - 1, currentPixel.Y - 1].Color)
                        {
                            reg = Pixels[x - 1, currentPixel.Y - 1].Region;
                        }
                        else if (currentPixelColor == Pixels[x, currentPixel.Y - 1].Color)
                        {
                            reg = Pixels[x, currentPixel.Y - 1].Region;
                        }
                        else if (currentPixelColor == Pixels[x + 1, currentPixel.Y - 1].Color)
                        {
                            reg = Pixels[x + 1, currentPixel.Y - 1].Region;
                        }
                        else
                        {
                            // Create a new region
                            reg            = new Region();
                            reg.ColorID    = GetColorID(currentPixelColor);
                            reg.Boundaries = new Rectangle(currentPixel.X, currentPixel.Y, 1, 1);
                            Regions.Add(reg);
                        }

                        reg.GeometricSum.X += currentPixel.X;
                        reg.GeometricSum.Y += currentPixel.Y;
                        reg.Boundaries      = Rectangle.Union(reg.Boundaries, new Rectangle(currentPixel.X, currentPixel.Y, 1, 1));
                        reg.Pixels.Add(currentPixel);

                        Pixels[currentPixel.X, currentPixel.Y]        = new Pixel();
                        Pixels[currentPixel.X, currentPixel.Y].Region = reg;
                        Pixels[currentPixel.X, currentPixel.Y].Color  = currentPixelColor;

                        // Merge Regions with same color
                        if ((currentPixelColor == Pixels[x - 1, currentPixel.Y - 1].Color) &&
                            (currentPixelColor == Pixels[x + 1, currentPixel.Y - 1].Color) &&
                            (Pixels[x - 1, currentPixel.Y - 1].Region.ID != Pixels[x + 1, currentPixel.Y - 1].Region.ID))
                        {
                            Regions.Remove(Pixels[x + 1, currentPixel.Y - 1].Region);
                            Pixels[x - 1, currentPixel.Y - 1].Region.Merge(Pixels[x + 1, currentPixel.Y - 1].Region, Pixels);
                        }

                        if ((currentPixelColor == Pixels[x - 1, currentPixel.Y].Color) &&
                            (currentPixelColor == Pixels[x + 1, currentPixel.Y - 1].Color) &&
                            (Pixels[x - 1, currentPixel.Y].Region.ID != Pixels[x + 1, currentPixel.Y - 1].Region.ID))
                        {
                            Regions.Remove(Pixels[x + 1, currentPixel.Y - 1].Region);
                            Pixels[x - 1, currentPixel.Y].Region.Merge(Pixels[x + 1, currentPixel.Y - 1].Region, Pixels);
                        }
                    }
                    #endregion

                    #region Scan Last Pixel of Current Row
                    currentPixel      = new CPoint();
                    currentPixel.X    = Input.Width - 1;
                    currentPixel.Y    = y;
                    currentPixelColor = inputBmp.GetPixel(currentPixel.X, currentPixel.Y);

                    if (currentPixelColor == Pixels[currentPixel.X - 1, currentPixel.Y].Color)
                    {
                        reg = Pixels[currentPixel.X - 1, currentPixel.Y].Region;
                    }
                    else if (currentPixelColor == Pixels[currentPixel.X - 1, currentPixel.Y - 1].Color)
                    {
                        reg = Pixels[currentPixel.X - 1, currentPixel.Y - 1].Region;
                    }
                    else if (currentPixelColor == Pixels[currentPixel.X, currentPixel.Y - 1].Color)
                    {
                        reg = Pixels[currentPixel.X, currentPixel.Y - 1].Region;
                    }
                    else
                    {
                        reg = new Region(GetColorID(currentPixelColor), new Rectangle(currentPixel.X, currentPixel.Y, 1, 1));
                        Regions.Add(reg);
                    }

                    reg.GeometricSum.X += currentPixel.X;
                    reg.GeometricSum.Y += currentPixel.Y;
                    reg.Boundaries      = Rectangle.Union(reg.Boundaries, new Rectangle(currentPixel.X, currentPixel.Y, 1, 1));
                    reg.Pixels.Add(currentPixel);

                    Pixels[currentPixel.X, currentPixel.Y]        = new Pixel();
                    Pixels[currentPixel.X, currentPixel.Y].Region = reg;
                    Pixels[currentPixel.X, currentPixel.Y].Color  = currentPixelColor;
                    #endregion
                }
                #endregion
            }
            catch (Exception e) {
                AnalyzeException = e;
                this.Pixels      = null;
                this.UsedColors  = null;
                this.Output      = null;
                GC.Collect();
                return;
            }
            #endregion

            // Produce Output Image
            if (_continueAnalyze)
            {
                RedrawOutput();
            }
            else
            {
                // Operations canceled, Reset object
                _continueAnalyze     = true;
                this.AnalyzeCanceled = true;
            }
        }