private void OnTriggerStay(Collider other)
 {
     if (other.GetComponent <MeasurablePoint>() != null)
     {
         isHoveringOverPoint = true;
         hoveredOverPoint    = other.GetComponent <MeasurablePoint>();
     }
 }
        public void Setup()
        {
            var controllerGO = Object.Instantiate(new GameObject());

            controller = controllerGO.AddComponent <LengthIconController>();
            var ImageGO = Object.Instantiate(new GameObject());

            controller.ImageGO = ImageGO;
            controller.text    = ImageGO.AddComponent <Text>();

            measurablePoint           = SetupMeasurablePoint();
            unitsToggleControllerMock = SetupUnitsToggleMock();
        }
 public void DeleteAllPoints()
 {
     while (measureblePoints.Count > 0)
     {
         MeasurablePoint point = measureblePoints[0];
         measureblePoints.Remove(point);
         ARReferencePoint referencePoint = point.transform.parent.GetComponent <ARReferencePoint>();
         if (referencePoint != null)
         {
             referencePointManager.RemoveReferencePoint(referencePoint);
         }
     }
 }
    public void PlacePickedUpPoint()
    {
        ARReferencePoint result = CreateAnchor();
        MeasurablePoint  point  = CameraHandler.Instance.GetComponentInChildren <MeasurablePoint>();

        if ((result == null) || (point == null))
        {
            return;
        }
        else
        {
            point.transform.position = result.transform.position;
            point.transform.parent   = result.transform;
        }
    }
    public void PickUpPoint(MeasurablePoint point)
    {
        //Check if point exists
        int index = measureblePoints.FindIndex((MeasurablePoint obj) => Object.ReferenceEquals(obj, point));

        if (index == -1)
        {
            Debug.Log("Tried to remove a non-tracked point");
            return;
        }

        ARReferencePoint referencePoint = point.transform.parent.GetComponent <ARReferencePoint>();

        if (referencePoint != null)
        {
            point.transform.parent = CameraHandler.Instance.transform;
            referencePointManager.RemoveReferencePoint(referencePoint);
        }
    }
    public void AddNewPoint()
    {
        ARReferencePoint result = CreateAnchor();

        if (result != null)
        {
            var go = Instantiate(MeasureablePointPrefab);
            go.transform.position = result.transform.position;
            go.transform.parent   = result.transform;
            MeasurablePoint currentPoint = go.GetComponent <MeasurablePoint>();

            measureblePoints.Add(currentPoint);
            currentPoint.state = MeasurablePoint.PointState.ACTIVE;
            if (measureblePoints.Count > 1)
            {
                MeasurablePoint lastPoint = measureblePoints[measureblePoints.Count - 2];
                lastPoint.nextPoint = currentPoint;
                if (lastPoint.state != MeasurablePoint.PointState.END)
                {
                    lastPoint.state = MeasurablePoint.PointState.BRIDGE;
                }
            }
        }
    }
    //TODO:refactor this function
    public void RemovePoint(MeasurablePoint point)
    {
        //Check if point exists
        int index = measureblePoints.FindIndex((MeasurablePoint obj) => Object.ReferenceEquals(obj, point));

        if (index == -1)
        {
            Debug.Log("Tried to remove a non-tracked point");
            Destroy(point.gameObject);
            return;
        }

        int isFirstMiddleOrLast = -1; //1: first, 2: middle, 3: last
        //Check if point was first
        int previousIndex = index - 1;
        int nextIndex     = index + 1;

        if (previousIndex < 0)
        {
            isFirstMiddleOrLast = 1;
        }
        else if (measureblePoints[previousIndex].state == MeasurablePoint.PointState.END)
        {
            isFirstMiddleOrLast = 1;
        }
        //check if point is end
        else if (nextIndex >= measureblePoints.Count)
        {
            isFirstMiddleOrLast = 3;
        }
        else if ((measureblePoints[index].state == MeasurablePoint.PointState.END) || (measureblePoints[index].state == MeasurablePoint.PointState.ACTIVE))
        {
            isFirstMiddleOrLast = 3;
        }
        else
        {
            isFirstMiddleOrLast = 2;
        }

        switch (isFirstMiddleOrLast)
        {
        case 1:
        {
            //Delete point and anchor
            ARReferencePoint referencePoint = point.transform.parent.GetComponent <ARReferencePoint>();
            referencePointManager.RemoveReferencePoint(referencePoint);
            break;
        }

        case 2:
        {
            //Delete point and anchor
            ARReferencePoint referencePoint = point.transform.parent.GetComponent <ARReferencePoint>();
            referencePointManager.RemoveReferencePoint(referencePoint);
            //Make previous point point towards next point
            measureblePoints[previousIndex].state     = MeasurablePoint.PointState.BRIDGE;
            measureblePoints[previousIndex].nextPoint = measureblePoints[nextIndex];
            break;
        }

        case 3:
        {
            //Delete point and anchor
            ARReferencePoint referencePoint = point.transform.parent.GetComponent <ARReferencePoint>();
            referencePointManager.RemoveReferencePoint(referencePoint);
            //make previous point an end point
            measureblePoints[previousIndex].state = MeasurablePoint.PointState.END;
            break;
        }
        }
        measureblePoints.Remove(point);
    }