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)); }
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); } }