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