示例#1
0
 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);
 }
示例#2
0
    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();
        }
    }
示例#3
0
    private IEnumerator DelayedAnalyze(ContoursMapLayer layer, ProgressCallback callback)
    {
        do
        {
            yield return(updateWait);
        }while (Time.time < lastUpdateTime);

        layer.FetchGridValues();
        yield return(Analyze(layer.Grid, 1000, callback));
    }
示例#4
0
    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));
        }
    }
示例#5
0
    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);
    }
示例#6
0
    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;
        }
    }
示例#7
0
 public ContoursGenerator_CPU(ContoursMapLayer contoursMapLayer) : base(contoursMapLayer)
 {
 }
示例#8
0
 public ContoursGenerator(ContoursMapLayer contoursMapLayer)
 {
     this.contoursMapLayer = contoursMapLayer;
 }
示例#9
0
    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));
    }
示例#10
0
 public ContoursGenerator_GPU(ContoursMapLayer contoursMapLayer) : base(contoursMapLayer)
 {
     compute  = contoursMapLayer.compute;
     ResetKID = compute.FindKernel("CSReset");
 }