public void OnStateDataChanged(SelectObjectMeasureToolAction.IAnchor selectedAnchor, GameObject cursor = null)
        {
            if (cursor != null && selectedAnchor != null)
            {
                SetCursorUI(selectedAnchor, cursor);

                if (!cursor.activeSelf)
                {
                    cursor.gameObject.SetActive(true);
                    m_AnchorsList.Add(selectedAnchor);
                }

                m_AnchorIndexToCursorObject.Add(new Tuple <int, GameObject>(m_AnchorsList.Count - 1, cursor));
                m_CurrentSelectedAnchorIndex = m_AnchorIndexToCursorObject[m_AnchorIndexToCursorObject.Count - 1].Item1;

                if (!m_VREnableGetter())
                {
                    m_DraggablePad.gameObject.SetActive(true);
                }
            }
            else if ((m_VREnableGetter() || m_DraggablePad.button.IsActive()) && m_CurrentSelectedAnchorIndex != null)
            {
                var currentCursor = m_AnchorIndexToCursorObject.Where(r => r.Item1 == m_CurrentSelectedAnchorIndex).Select(r => r.Item2).FirstOrDefault();

                SetCursorUI(selectedAnchor, currentCursor);

                m_AnchorsList[m_CurrentSelectedAnchorIndex.Value] = selectedAnchor;
            }
        }
        public static float GetDistanceBetweenAnchors(SelectObjectMeasureToolAction.IAnchor anc1, SelectObjectMeasureToolAction.IAnchor anc2)
        {
            var origin1 = GetAnchorOrigin(anc1);
            var origin2 = GetAnchorOrigin(anc2);

            return(Vector3.Distance(origin1, origin2));
        }
Beispiel #3
0
        void OnSelectedAnchorsDataChanged(SelectObjectMeasureToolAction.IAnchor newData)
        {
            // Create Point
            if (!m_OnDrag)
            {
                if (!m_CurrentCursorA.activeSelf)
                {
                    m_AnchorSelection?.OnStateDataChanged(newData, m_CurrentCursorA);
                    return;
                }

                if (!m_CurrentCursorB.activeSelf)
                {
                    m_AnchorSelection.OnStateDataChanged(newData, m_CurrentCursorB);
                    m_AnchorSelection.SetLineUI();
                    return;
                }
            }

            // Drag Existing Point
            m_AnchorSelection?.OnStateDataChanged(newData);
            if (m_CurrentCursorB.activeSelf)
            {
                m_AnchorSelection.SetLineUI();
            }
        }
        static Vector3 GetAnchorOrigin(SelectObjectMeasureToolAction.IAnchor anchor)
        {
            switch (anchor.type)
            {
            case ToggleMeasureToolAction.AnchorType.Point:
                return(((PointAnchor)anchor).position);
            }

            return(Vector3.zero);
        }
 void SetCursorUI(SelectObjectMeasureToolAction.IAnchor selectedAnchor, GameObject cursor)
 {
     switch (selectedAnchor.type)
     {
     case ToggleMeasureToolAction.AnchorType.Point:
     default:
         cursor.transform.position = ((PointAnchor)selectedAnchor).position;
         cursor.transform.forward  = ((PointAnchor)selectedAnchor).normal;
         break;
     }
 }
        void OnPickPerpendicularAsyncCallback(List <Tuple <GameObject, RaycastHit> > results)
        {
            if (results != null && results.Count > 0)
            {
                SelectObjectMeasureToolAction.IAnchor selectedAnchor = null;
                var selectedObjects        = results.Select(x => x.Item1).Where(x => x.layer != MetadataFilter.k_OtherLayer);
                var selectedAnchorsContext = selectedObjects.Select(r => r.GetComponent <AnchorSelectionContext>()).Where(g => g != null).ToList();
                if (selectedAnchorsContext.Count > 0)
                {
                    selectedAnchor = selectedAnchorsContext[0].LastContext.selectedAnchor;
                }

                Dispatcher.Dispatch(SelectObjectMeasureToolAction.From(selectedAnchor));
            }
        }
        void OnPickPointerAsyncCallback(List <Tuple <GameObject, RaycastHit> > results)
        {
            if (results == null || results.Count == 0)
            {
                Dispatcher.Dispatch(SetStatusMessageWithType.From(
                                        new StatusMessageData()
                {
                    text = MeasureToolUIController.instructionTapOnSurface, type = StatusMessageType.Instruction
                }));
                return;
            }

            SelectObjectMeasureToolAction.IAnchor selectedAnchor = null;
            var selectedObjects        = results.Select(x => x.Item1).Where(x => x.layer != MetadataFilter.k_OtherLayer);
            var selectedAnchorsContext = selectedObjects.Select(r => r.GetComponent <AnchorSelectionContext>()).Where(g => g != null).ToList();

            if (selectedAnchorsContext.Count > 0)
            {
                selectedAnchor = selectedAnchorsContext[0].LastContext.selectedAnchor;
            }

            Dispatcher.Dispatch(SelectObjectMeasureToolAction.From(selectedAnchor));
            Dispatcher.Dispatch(ClearStatusAction.From(true));
            Dispatcher.Dispatch(ClearStatusAction.From(false));

            if (m_MeasureModeGetter() == ToggleMeasureToolAction.MeasureMode.PerpendicularDistance && m_AnchorsList.Count == 1)
            {
                Ray ray         = new Ray();
                var firstAnchor = selectedAnchorsContext[0].LastContext.selectedAnchor;
                if (firstAnchor.type == ToggleMeasureToolAction.AnchorType.Point)
                {
                    var anc = ((PointAnchor)firstAnchor);
                    ray.origin    = anc.position;
                    ray.direction = anc.normal;
                }

                AnchorPicker.Pick(ray, OnPickPerpendicularAsyncCallback);
            }
        }