void calculateDataPointPositionsOnCone()
    {
        Vector2 cone2DPosition = new Vector2(transform.position.x, transform.position.z);
        //Vector2 cone2DPosition = new Vector2(0, 0);
        //Vector2 cone2DPosition = new Vector2(49.1f, 38.1f);
        float        maxMagnitude  = 0;
        MapDataPoint furthestPoint = new MapDataPoint();

        foreach (MapDataPoint dataPoint in _dataPoints)
        {
            // Calculate the position of datapoint relative to the cone position
            Vector2 point2DPosition = new Vector2(dataPoint.WorldPosition.x, dataPoint.WorldPosition.z);
            //Debug.Log("Bar position (to 0xy): " + point2DPosition);
            dataPoint.ConePosition = point2DPosition - cone2DPosition;
            //Debug.Log("Bar position (to Cone): " + dataPoint.ConePosition);

            // Find the furthest datapoint
            float magnitude = dataPoint.ConePosition.magnitude;
            if (maxMagnitude < magnitude)
            {
                maxMagnitude  = magnitude;
                furthestPoint = dataPoint;
            }
        }

        //Debug.Log("Max magnitude: " + maxMagnitude);
        //Debug.Log("Furthest point: " + furthestPoint.Name + furthestPoint.ConePosition);
        Debug.Log("Max magnitude: " + maxMagnitude);
        scaleDataPoints(maxMagnitude);
        //scaleDataPoints(1050);
        //scaleDataPoints(1);
    }
Example #2
0
    public void ShowInfo(MapDataPoint dataPoint)
    {
        //Show panel with info
        PointInfoPrefab.SetActive(true);
        PointInfoPrefab.transform.position = dataPoint.top;
        var mapData = DataLoader.data;

        TimeValue currentValue = dataPoint.point.values.Find(el => el.timestamp == date);

        if (currentValue == null)
        {
            return;
        }

        PointInfoPrefab.transform.LookAt(Camera.main.transform.position);
        float yAxe = PointInfoPrefab.transform.eulerAngles.y;

        PointInfoPrefab.transform.eulerAngles = new Vector3(0, yAxe + 180, 0);

        if (WithLegend)
        {
            HeightLegendCanvas.transform.position    = dataPoint.bottom;
            HeightLegendCanvas.transform.eulerAngles = new Vector3(0, yAxe + 180, 90);
            HeightLegendCanvas.SetActive(true);
        }

        shownInfo = dataPoint;

        updateInfoPanel(dataPoint);
    }
Example #3
0
    private void CreatePoint(DataPoint point)
    {
        Vector2d latLng = new Vector2d(point.point[1], point.point[0]);
        Vector3  pos    = map.GeoToWorldPosition(latLng, false);

        GameObject dataPoint = Instantiate(PointPrefab, pos, Quaternion.identity, pointsGroup.transform);

        MapDataPoint parameters     = dataPoint.GetComponent <MapDataPoint>();
        var          secondaryField = DataLoader.secondaryField;
        var          primaryField   = DataLoader.primaryField;

        parameters.point = point;

        TimeValue currentValue = point.values.Find(el => el.timestamp == date);

        if (primaryVizualizer != null)
        {
            if (currentValue != null)
            {
                FieldValue val = currentValue.fields.Find(el => el.id == primaryField.id);
                if (val != null)
                {
                    parameters.height = primaryVizualizer.getVizualization(float.Parse(val.value, CultureInfo.InvariantCulture));
                }
                else
                {
                    parameters.height = 0;
                }
            }
            else
            {
                parameters.height = 0;
            }
        }
        else
        {
            parameters.height = 1;
        }

        if (secondaryDiscreteVizualizer != null && currentValue != null)
        {
            FieldValue val = currentValue.fields.Find(el => el.id == secondaryField.id);
            if (val != null)
            {
                parameters.color = secondaryDiscreteVizualizer.getVizualization(val.value);
            }
        }
        else if (rangeColorVizualizer != null && currentValue != null)
        {
            FieldValue val = currentValue.fields.Find(el => el.id == secondaryField.id);
            if (val != null)
            {
                parameters.color = rangeColorVizualizer.getVizualization(float.Parse(val.value, CultureInfo.InvariantCulture));
            }
        }

        parameters.scale = pointsScale;
    }
Example #4
0
    void UpdatePointTime(GameObject datapoint)
    {
        MapDataPoint dataPointScript = datapoint.GetComponent <MapDataPoint>();
        MapDataPoint parameters      = datapoint.GetComponent <MapDataPoint>();
        var          secondaryField  = DataLoader.secondaryField;
        var          primaryField    = DataLoader.primaryField;
        TimeValue    currentValue    = dataPointScript.point.values.Find(el => el.timestamp == date);

        if (primaryVizualizer != null)
        {
            if (currentValue != null)
            {
                FieldValue val = currentValue.fields.Find(el => el.id == primaryField.id);
                if (val != null)
                {
                    parameters.height = primaryVizualizer.getVizualization(float.Parse(val.value, CultureInfo.InvariantCulture));
                }
                else
                {
                    parameters.height = 0;
                }
            }
            else
            {
                parameters.height = 0;
            }
        }
        else
        {
            parameters.height = 1;
        }

        if (secondaryDiscreteVizualizer != null && currentValue != null)
        {
            FieldValue val = currentValue.fields.Find(el => el.id == secondaryField.id);
            if (val != null)
            {
                parameters.color = secondaryDiscreteVizualizer.getVizualization(val.value);
            }
        }
        else if (rangeColorVizualizer != null && currentValue != null)
        {
            FieldValue val = currentValue.fields.Find(el => el.id == secondaryField.id);
            if (val != null)
            {
                parameters.color = rangeColorVizualizer.getVizualization(float.Parse(val.value, CultureInfo.InvariantCulture));
            }
        }
    }
Example #5
0
    void drawProjectionLine(MapDataPoint point, GameObject bar)
    {
        var          lineWidth = 0.05f;
        LineRenderer line      = bar.GetComponentInChildren <LineRenderer>();

        line.enabled           = true;
        line.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
        var traperzoid = bar.GetComponent <TrapezoidBarBehavior>();

        line.positionCount = 2;
        lineWidth          = 0.005514949f * 2;
        line.startWidth    = lineWidth;
        line.endWidth      = lineWidth * Vector3.Distance(traperzoid.BottomBar().transform.position, point.WorldPosition) / 8.0f;
        line.SetPosition(0, traperzoid.BottomBar().transform.position);
        line.SetPosition(1, point.WorldPosition);
    }
Example #6
0
    void loadTestDataset(Dataset dataset)
    {
        StudyPlot.Instance.setUserId(_userId);
        StudyPlot.Instance.setDataset(dataset, _participantGroup);

        string data = System.IO.File.ReadAllText(StudyPlot.Instance.getDatasetFile());

        string[]            lines      = data.Split('\n');
        List <MapDataPoint> dataPoints = new List <MapDataPoint>();

        float maxValue = 1;

        DataPointsManager.Instance.mapDataPoints.Clear();
        // Skip the header
        for (int i = 1; i < lines.Length; i++)
        {
            string[] lineData = lines[i].Split(',');

            if (lineData.Length < 4)
            {
                continue;
            }

            MapDataPoint point = new MapDataPoint();
            point.Name  = "Point " + lineData[0];
            point.Value = float.Parse(lineData[3]);
            var rawX = float.Parse(lineData[1]);
            var rawY = float.Parse(lineData[2]);

            Debug.Log("Point " + point.Name + ", X: " + rawX + ", Y: " + rawY);

            point.RawPosition = new Vector2(rawX, rawY);

            //Debug.Log("Pos " + i + " : " + point.WorldPosition.ToString());
            DataPointsManager.Instance.mapDataPoints.Add(point);
        }

        needToReloadBars = true;

        Debug.Log("Dataset: " + dataset +
                  " - " + StudyPlot.Instance._questions.Count + " questions" +
                  " - " + DataPointsManager.Instance.mapDataPoints.Count + " datapoints");

        DataPointsManager.Instance.maxValue = maxValue;
    }
Example #7
0
    void updateInfoPanel(MapDataPoint dataPoint)
    {
        var       mapData      = DataLoader.data;
        TimeValue currentValue = dataPoint.point.values.Find(el => el.timestamp == date);

        List <string[]> lstValue = currentValue.fields.Select(el => {
            var def = mapData.dataset.fields.Find(f => f.id == el.id);
            if (def != null)
            {
                return(new string[] { def.displayname, el.value });
            }
            else
            {
                return(new string[] { el.id, el.value });
            }
        }).ToList();

        foreach (Transform text in PanelTransform)
        {
            Destroy(text.gameObject);
        }

        lstValue.ForEach(txt => {
            GameObject textInfoDescription = Instantiate(PointInfoText, PanelTransform.position, PointInfoPrefab.transform.rotation, PanelTransform);
            textInfoDescription.GetComponent <Text>().text = txt[0];
            GameObject textInfoValue = Instantiate(PointInfoText, PanelTransform.position, PointInfoPrefab.transform.rotation, PanelTransform);
            textInfoValue.GetComponent <Text>().text = txt[1];
        });

        var layout    = PanelTransform.GetComponent <GridLayoutGroup>();
        var height    = lstValue.Count * layout.cellSize.y + layout.padding.vertical;
        var panelRect = PanelTransform.GetComponent <RectTransform>();

        panelRect.sizeDelta = new Vector2(panelRect.sizeDelta.x, height);

        var distanceToFloor = (PointInfoPrefab.transform.position.y - ((height + layout.padding.bottom) * PointInfoPrefab.transform.localScale.y)) - dataPoint.bottom.y;

        if (distanceToFloor < 0)
        {
            PointInfoPrefab.transform.Translate(new Vector3(0, Math.Abs(distanceToFloor), 0));
        }
    }
Example #8
0
 public void HideInfo()
 {
     PointInfoPrefab.SetActive(false);
     shownInfo = null;
     HideLegend();
 }
Example #9
0
    private void UpdatePoint(GameObject datapoint)
    {
        MapDataPoint dataPointScript = datapoint.GetComponent <MapDataPoint>();
        Vector2d     latLng          = new Vector2d(dataPointScript.point.point[1], dataPointScript.point.point[0]);
        Vector3      pos             = map.GeoToWorldPosition(latLng, false);

        datapoint.transform.position = pos;
        dataPointScript.ResetPosition();
        if (boundingBox.Contains(pos))
        {
            datapoint.SetActive(true);
        }
        else
        {
            datapoint.SetActive(false);
        }

        if (zoomMap != null && zoomMap.activeSelf)
        {
            Bounds zoombb = zoomMap.GetComponent <DataHandler>().boundingBox;
            zoombb.min = new Vector3(zoombb.min.x, transform.position.y - 0.1f, zoombb.min.z);
            if (zoombb.Contains(pos))
            {
                dataPointScript.muted = true;
            }
            else
            {
                dataPointScript.muted = false;
            }
        }
        else
        {
            dataPointScript.muted = false;
        }

        MapDataPoint parameters     = datapoint.GetComponent <MapDataPoint>();
        var          secondaryField = DataLoader.secondaryField;
        var          primaryField   = DataLoader.primaryField;
        TimeValue    currentValue   = dataPointScript.point.values.Find(el => el.timestamp == date);

        if (primaryVizualizer != null)
        {
            if (currentValue != null)
            {
                FieldValue val = currentValue.fields.Find(el => el.id == primaryField.id);
                if (val != null)
                {
                    parameters.height = primaryVizualizer.getVizualization(float.Parse(val.value, CultureInfo.InvariantCulture));
                }
                else
                {
                    parameters.height = 0;
                }
            }
            else
            {
                parameters.height = 0;
            }
        }
        else
        {
            parameters.height = 1;
        }

        if (secondaryDiscreteVizualizer != null && currentValue != null)
        {
            FieldValue val = currentValue.fields.Find(el => el.id == secondaryField.id);
            if (val != null)
            {
                parameters.color = secondaryDiscreteVizualizer.getVizualization(val.value);
            }
        }
        else if (rangeColorVizualizer != null && currentValue != null)
        {
            FieldValue val = currentValue.fields.Find(el => el.id == secondaryField.id);
            if (val != null)
            {
                parameters.color = rangeColorVizualizer.getVizualization(float.Parse(val.value, CultureInfo.InvariantCulture));
            }
        }
    }