/// <summary> /// Начать детектирование объектов на выбранных улицах /// </summary> /// <param name="roads">Список названий улиц</param> /// <param name="detectorsNames">Список названий детекторов, которые будут использоваться для детектирования объектов</param> /// <returns></returns> public SignDetectionProcessor StartDetection(List <string> roads, List <string> detectorsNames) { List <IDetector> selectedDetectors = detectorsManager.Detectors.Where(x => detectorsNames.Contains(x.Name)).ToList(); SignDetectionProcessor processor = new SignDetectionProcessor(roads, selectedDetectors, dbContext); Thread bypassThread = new Thread(processor.Start); bypassThread.Start(); return(processor); }
internal override void Process() { List <string> streets = new List <string>(); foreach (DataGridViewRow row in mainForm.StreetsBypassView.Rows) { bool rowSelected = (bool)row.Cells[2].Value; if (rowSelected) { streets.Add((string)row.Cells[0].Value); } } if (streets.Count > 0) { ConcurrencyUtils.SetAvailability(mainForm.DetectSignsInViewsButton, false); GeographiData geoData = GeographiData.Instance; foreach (string roadName in streets) { Road road = geoData.Roads[roadName]; foreach (PolylineChunk chunk in road.PolylineChunks) { if (chunk.IsSignDetected) { mainForm.GMapForm.MiniMapRoute.DeHighlightPolylineChunk(chunk.OverpassId, true); } } List <string> selectedDetectorsNames = mainForm.GetCheckedDetectorsNamesList(); if (selectedDetectorsNames.Count > 0) { processor = controller.StartDetection(streets, selectedDetectorsNames); Thread byPassStatusThread = new Thread(UpdateStatus); byPassStatusThread.Start(); } else { ConcurrencyUtils.SetAvailability(mainForm.DetectSignsInViewsButton, true); } } } }