void OnMarkerChanged(IMarker updatedMarker) { var markerList = m_MarkerList.Markers; markerList.Active = updatedMarker.Id; markerList.Markers = m_MarkerController.MarkerStorage.Markers; m_MarkerList.Markers = markerList; m_RefreshList.Run(RefreshMarkerList, 0.1f); Dispatcher.Dispatch(SetDeltaDNAButtonAction.From($"{k_DeltaDNAPrefix}Changed")); }
private void InvokeOnDispatchMarkers(Payload <IViewerAction> viewerAction) { HasChanged = false; lock (m_SyncRoot) { if (viewerAction.ActionType.RequiresContext(MarkerEditContext.current, viewerAction.Data)) { viewerAction.ActionType.ApplyPayload(viewerAction.Data, ref m_MarkerEdit, () => { bool sendUpdate = false; var editedMarker = m_MarkerEdit.ToMarker(); // Check if any of the fields are different from controller. if (!PivotTransform.Similar(m_CachedMarker.RelativePosition, editedMarker.RelativePosition) || !PivotTransform.Similar(m_CachedMarker.RelativeRotationEuler, editedMarker.RelativeRotationEuler) || !PivotTransform.Similar(m_CachedMarker.ObjectScale, editedMarker.ObjectScale) || m_CachedMarker.Name != editedMarker.Name) { sendUpdate = true; } // Update drag handle position if (sendUpdate) { m_MarkerController.Visualize(editedMarker); m_UpdateDragHandle.Run( () => m_DraggableMarkerPlacement.UpdatePose(editedMarker.GetWorldPose(m_MarkerController.AlignedObject.Get())), 0.1f); m_CachedMarker = editedMarker; m_MarkerEditContextTarget.UpdateWith(ref m_MarkerEdit); } HasChanged = true; }); } if (viewerAction.ActionType.RequiresContext(MarkerListContext.current, viewerAction.Data)) { viewerAction.ActionType.ApplyPayload(viewerAction.Data, ref m_MarkerList, () => { m_MarkerListContextTarget.UpdateWith(ref m_MarkerList); HasChanged = true; }); } } }