public ContoursGenerator_GPU(ContoursMapLayer contoursMapLayer) : base(contoursMapLayer) { compute = contoursMapLayer.compute; Reset_KID = compute.FindKernel("CSReset"); ClipViewArea_Include_KID = compute.FindKernel("CSClipViewArea_Include"); ClipViewArea_Exclude_KID = compute.FindKernel("CSClipViewArea_Exclude"); categoryFilterBuffer = new ComputeBuffer(CategoryFilter.MaxCategories, sizeof(uint), ComputeBufferType.Default); }
private void FillAllContours() { var contoursTool = ComponentManager.Instance.GetOrNull <ContoursTool>(); if (contoursTool == null) { return; } ContoursMapLayer contoursLayer = contoursTool.ContoursLayer; if (contoursLayer != null) { var pg = planningLayer.Grid; var cg = contoursLayer.Grid; double planningResolutionX = pg.countX / (pg.east - pg.west); double planningResolutionY = pg.countY / (pg.south - pg.north); double invResolutionX = (cg.east - cg.west) / cg.countX; double invResolutionY = (cg.north - cg.south) / cg.countY; double coordsOffsetX = cg.west + 0.5 * invResolutionX; double coordsOffsetY = cg.north - 0.5 * invResolutionY; double scaleX = planningResolutionX * invResolutionX; double scaleY = planningResolutionY * invResolutionY; double offsetX = (cg.west - pg.west) * planningResolutionX + 0.5 * scaleX; double offsetY = (cg.north - pg.north) * planningResolutionY - 0.5 * scaleY; Coordinate coords; int contoursCount = cg.values.Length; for (int i = 0; i < contoursCount; i++) { float contoursValue = cg.values[i]; if (contoursValue != 0) { int y = i / cg.countX; int x = i - y * cg.countX; coords.Longitude = coordsOffsetX + x * invResolutionX; coords.Latitude = coordsOffsetY - y * invResolutionY; x = (int)Math.Floor(offsetX + x * scaleX); y = (int)Math.Floor(offsetY - y * scaleY); if (x >= 0 && x <= pg.countX && y >= 0 && y <= pg.countY) { int index = y * pg.countX + x; planner.ChangeTypology(index, x, y, coords); } } } planner.FinishChangingTypologies(); } }
private IEnumerator DelayedAnalyze(ContoursMapLayer layer, ProgressCallback callback) { do { yield return(updateWait); }while (Time.time < lastUpdateTime); layer.FetchGridValues(); yield return(Analyze(layer.Grid, 1000, callback)); }
public void Analyze(ContoursMapLayer layer, ProgressCallback callback) { if (Time.time >= lastUpdateTime) { // Stop the coroutine (if there is) because analysis would have already started Stop(); } lastUpdateTime = Time.time + updateInterval - 0.01f; if (coroutine == null) { coroutine = StartCoroutine(DelayedAnalyze(layer, callback)); } }
public void AddGroup(string name, ContoursMapLayer layer, bool updatable, bool selectable) { // Hide "no data layers" message outputMessage.SetActive(false); // Check if group is already in output ContoursGroup contoursGroup; if (!contoursGroups.TryGetValue(name, out contoursGroup)) { OutputGroup outputGroup = Instantiate(outputGroubPrefab, outputContainer, false); outputGroup.Init(name); contoursGroup = new ContoursGroup(); contoursGroup.group = outputGroup; contoursGroup.layer = layer; contoursGroup.updatable = updatable; contoursGroup.selectable = selectable; contoursGroups.Add(name, contoursGroup); } UpdateGroup(name); }
protected override void OnToggleTool(bool isOn) { if (isOn) { runningSnapshotCounter = 1; // Create contours layer contoursLayer = toolLayers.CreateMapLayer(contoursLayerPrefab, "Contours"); contoursLayer.ExcludeCellsWithNoData(excludeNoDataToggle.isOn); // Listen to any data layers being added/removed dataLayers.OnLayerVisibilityChange += OnLayerVisibilityChange; dataLayers.OnLayerAvailabilityChange += OnLayerAvailabilityChange; // Listen to any grid layers being added/removed var gridController = map.GetLayerController <GridLayerController>(); gridController.OnShowGrid += OnShowGrid; // Initialize grids list with already visible grid layers grids.Clear(); foreach (var mapLayer in gridController.mapLayers) { grids.Add(mapLayer.Grid); } // Reset buttons analysisToggle.isOn = false; showContoursToggle.isOn = true; lockToggle.isOn = false; //filteredToggle.isOn = true; // Don't reset, user wants to keep this setting //excludeNoDataToggle.isOn = true; // Don't reset, user wants to keep this setting deleteToggle.isOn = false; deleteToggle.interactable = false; addButton.interactable = true; cropToggle.isOn = contoursLayer.CropWithViewArea; // Initialize listeners addButton.onClick.AddListener(OnAddSnapshotClick); deleteToggle.onValueChanged.AddListener(OnDeleteToggleChange); showContoursToggle.onValueChanged.AddListener(OnShowContoursChanged); cropToggle.onValueChanged.AddListener(OnCropWithViewAreaChanged); lockToggle.onValueChanged.AddListener(OnLockChanged); analysisToggle.onValueChanged.AddListener(OnAnalysisChanged); excludeNoDataToggle.onValueChanged.AddListener(OnExcludeNoDataChanged); // Show contours layer ShowContoursLayer(true); // Create the info panel infoPanel = Instantiate(infoPanelPrefab); infoPanel.name = infoPanelPrefab.name; infoPanel.Init(); var outputPanel = ComponentManager.Instance.Get <OutputPanel>(); outputPanel.SetPanel(infoPanel.transform); var translator = LocalizationManager.Instance; infoPanel.AddEntry("CC", translator.Get("Current Contours")); infoPanel.AddEntry("SC", translator.Get("Selected Contours")); snapshots = new Snapshot[snapshotCount]; emptySnapshots = new RectTransform[snapshotCount]; usedSnapshots = 0; // Create empty snapshots for (int i = 0; i < snapshotCount; ++i) { var emptySnapshot = Instantiate(emptySnapshotPrefab, SnapshotList, false); emptySnapshot.name = emptySnapshotPrefab.name + (i + 1); emptySnapshots[i] = emptySnapshot; infoPanel.AddEntry("S" + i, translator.Get("Snapshot") + " " + (i + 1)); } UpdateContoursInfo(); translator.OnLanguageChanged += OnLanguageChanged; GuiUtils.RebuildLayout(SnapshotList); } else { // Remove listeners addButton.onClick.RemoveAllListeners(); showContoursToggle.onValueChanged.RemoveAllListeners(); cropToggle.onValueChanged.RemoveAllListeners(); lockToggle.onValueChanged.RemoveAllListeners(); analysisToggle.onValueChanged.RemoveAllListeners(); excludeNoDataToggle.onValueChanged.RemoveAllListeners(); dataLayers.OnLayerVisibilityChange -= OnLayerVisibilityChange; dataLayers.OnLayerAvailabilityChange -= OnLayerAvailabilityChange; inputHandler.OnLeftMouseUp -= OnLeftMouseUp; if (map) { var gridController = map.GetLayerController <GridLayerController>(); if (gridController) { gridController.OnShowGrid -= OnShowGrid; } } // Remove the info panel ComponentManager.Instance.Get <OutputPanel>().DestroyPanel(infoPanel.gameObject); // Remove map layers DeleteAllLayers(); // Remove snapshots UI foreach (var snapshot in snapshots) { if (snapshot != null) { Destroy(snapshot.uiTransform.gameObject); } } snapshots = null; foreach (var emptySnapshot in emptySnapshots) { Destroy(emptySnapshot.gameObject); } emptySnapshots = null; usedSnapshots = 0; grids.Clear(); dataLayers.ResetToolOpacity(); CancelRemoveSnapshotMode(); LocalizationManager.Instance.OnLanguageChanged -= OnLanguageChanged; } }
public ContoursGenerator_CPU(ContoursMapLayer contoursMapLayer) : base(contoursMapLayer) { }
public ContoursGenerator(ContoursMapLayer contoursMapLayer) { this.contoursMapLayer = contoursMapLayer; }
public override void OnToggleTool(bool isOn) { if (isOn) { runningSnapshotCounter = 1; // Create contours layer contoursLayer = CreateMapLayer(contoursLayerPrefab, "Contours"); contoursLayer.ExcludeCellsWithNoData(excludeNoDataToggle.isOn); // Listen to any data layers being added/removed dataLayers.OnLayerVisibilityChange += OnLayerVisibilityChange; dataLayers.OnLayerAvailabilityChange += OnLayerAvailabilityChange; // Listen to any grid layers being added/removed var gridController = map.GetLayerController <GridLayerController>(); gridController.OnShowGrid += OnShowGrid; // Initialize grids list with already visible grid layers grids.Clear(); foreach (var mapLayer in gridController.mapLayers) { mapLayer.Grid.OnFilterChange += OnGridFilterChange; grids.Add(mapLayer.Grid); } // Reset buttons showContoursToggle.isOn = true; lockToggle.isOn = false; //filteredToggle.isOn = true; // Don't reset, user wants to keep this setting //excludeNoDataToggle.isOn = true; // Don't reset, user wants to keep this setting deleteToggle.isOn = false; deleteToggle.interactable = false; addButton.interactable = true; // Initialize listeners addButton.onClick.AddListener(OnAddButtonClick); deleteToggle.onValueChanged.AddListener(OnDeleteToggleChange); showContoursToggle.onValueChanged.AddListener(OnShowContoursChanged); filteredToggle.onValueChanged.AddListener(OnShowFilteredChanged); lockToggle.onValueChanged.AddListener(OnLockChanged); analysisToggle.onValueChanged.AddListener(OnAnalysisChanged); excludeNoDataToggle.onValueChanged.AddListener(OnExcludeNoDataChanged); // Show contours layer ShowContoursLayer(true); // Create output panel contoursOutput = Instantiate(contoursOutputPrefab); contoursOutput.name = "Contours_OutputPanel"; var outputPanel = ComponentManager.Instance.Get <OutputPanel>(); outputPanel.SetPanel(contoursOutput.transform); contoursLayer.FetchGridValues(); contoursOutput.AddGroup("All Contours", contoursLayer, true, false); // Create empty snapshots for (int i = 0; i < snapshotCount; ++i) { emptySnapshots.Add(Instantiate(emptySnapshotPrefab, SnapshotList, false)); } GuiUtils.RebuildLayout(SnapshotList); } else { // Remove listeners addButton.onClick.RemoveAllListeners(); showContoursToggle.onValueChanged.RemoveAllListeners(); filteredToggle.onValueChanged.RemoveAllListeners(); lockToggle.onValueChanged.RemoveAllListeners(); analysisToggle.onValueChanged.RemoveAllListeners(); excludeNoDataToggle.onValueChanged.RemoveAllListeners(); dataLayers.OnLayerVisibilityChange -= OnLayerVisibilityChange; dataLayers.OnLayerAvailabilityChange -= OnLayerAvailabilityChange; if (map) { var gridController = map.GetLayerController <GridLayerController>(); if (gridController) { gridController.OnShowGrid -= OnShowGrid; } } // for output update foreach (var grid in contoursLayer.grids) { grid.OnFilterChange -= OnGridFilterChange; } var outputPanel = ComponentManager.Instance.Get <OutputPanel>(); outputPanel.RemovePanel(contoursOutput.transform); // Remove map layers DeleteAllLayers(); // Remove snapshots UI foreach (var snapshot in snapshots) { Destroy(snapshot.uiTransform.gameObject); } snapshots.Clear(); foreach (var emptySnapshot in emptySnapshots) { Destroy(emptySnapshot.gameObject); } emptySnapshots.Clear(); grids.Clear(); dataLayers.ResetToolOpacity(); CancelRemoveSnapshotMode(); } // Enable/disable map layer filters dataManager.EnableSiteFilters(!(isOn && filteredToggle.isOn)); }
public ContoursGenerator_GPU(ContoursMapLayer contoursMapLayer) : base(contoursMapLayer) { compute = contoursMapLayer.compute; ResetKID = compute.FindKernel("CSReset"); }