void FindTheARFloorBack() { ARPlacementStateData placementStateData = UIStateManager.current.arStateData.placementStateData; DestroyImmediate(placementStateData.arFloor); FindTheARFloor(); }
void ConfirmARAnchorPoint() { UIStateManager.current.m_PlacementRules.SetActive(false); m_Raycaster.ActiveScanning = false; m_Raycaster.DisableCursor(); // calculate AR anchor point ARPlacementStateData placementStateData = UIStateManager.current.arStateData.placementStateData; PlanePlaneIntersection(out var unusedPoint, out var lineVec, placementStateData.firstARSelectedPlane.transform.up, placementStateData.firstARSelectedPlane.transform.position, placementStateData.secondARSelectedPlane.transform.up, placementStateData.secondARSelectedPlane.transform.position); // calculate intersect with bottom floor for now LinePlaneIntersection(out var anchorPoint, unusedPoint, lineVec, placementStateData.arFloor.transform.up, placementStateData.arFloor.transform.position); placementStateData.arPlacementLocation = anchorPoint; // calculate beam height placementStateData.beamHeight = Math.Max(placementStateData.firstARSelectedPlane.GetComponent <Renderer>().bounds.size.y, placementStateData.secondARSelectedPlane.GetComponent <Renderer>().bounds.size.y); Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.SetPlacementState, placementStateData)); ARToolStateData toolState = ARToolStateData.defaultData; toolState.navigationEnabled = false; toolState.okEnabled = true; toolState.previousStepEnabled = true; toolState.arWallIndicatorsEnabled = true; toolState.arAnchorPointsEnabled = true; Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.SetARToolState, toolState)); Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.SetStatusWithType, new StatusMessageData() { text = m_InstructionConfirmARAnchorPoint, type = StatusMessageType.Instruction })); }
void FindSecondARWallBack() { ARPlacementStateData placementStateData = UIStateManager.current.arStateData.placementStateData; DestroyImmediate(placementStateData.secondARSelectedPlane); FindSecondARWall(); }
void ConfirmAnchorPointNext() { // first record the previously selected plane as Wall B ARPlacementStateData placementStateData = UIStateManager.current.arStateData.placementStateData; var info = UIStateManager.current.projectStateData.objectSelectionInfo; placementStateData.secondSelectedPlane = info.CurrentSelectedObject().ClonePlaneSurface("secondWall", m_PlaneSelectionMaterial); // calculate anchor point position var floorContext = placementStateData.modelFloor.GetComponent <PlaneSelectionContext>().SelectionContextList[0]; var plane1Context = placementStateData.firstSelectedPlane.GetComponent <PlaneSelectionContext>().SelectionContextList[0]; var plane2Context = placementStateData.secondSelectedPlane.GetComponent <PlaneSelectionContext>().SelectionContextList[0]; PlanePlaneIntersection(out var unusedPoint, out var lineVec, plane1Context.SelectedPlane.normal, plane1Context.HitPoint, plane2Context.SelectedPlane.normal, plane2Context.HitPoint); // calculate intersect with bottom floor for now LinePlaneIntersection(out var anchorPoint, unusedPoint, lineVec, floorContext.SelectedPlane.normal, floorContext.HitPoint); placementStateData.modelPlacementLocation = anchorPoint; // calculate beam height placementStateData.beamHeight = Math.Max(placementStateData.firstSelectedPlane.GetComponent <Renderer>().bounds.size.y, placementStateData.secondSelectedPlane.GetComponent <Renderer>().bounds.size.y); // update placement UIStateManager.current.Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.SetPlacementState, placementStateData)); var navigationState = UIStateManager.current.stateData.navigationState; navigationState.selectionUsageCount--; UIStateManager.current.Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.SetNavigationState, navigationState)); ConfirmAnchorPoint(); }
void ConfirmARAnchorPointNext() { ARPlacementStateData placementStateData = UIStateManager.current.arStateData.placementStateData; var meshObject = m_Raycaster.LastTarget.gameObject.CloneMeshObject("arSecondWall", m_PlaneSelectionMaterial); placementStateData.secondARSelectedPlane = meshObject; Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.SetPlacementState, placementStateData)); ConfirmARAnchorPoint(); }
void FindFirstARWallNext() { ARPlacementStateData placementStateData = UIStateManager.current.arStateData.placementStateData; var meshObject = m_Raycaster.LastTarget.gameObject.CloneMeshObject("arFloor"); placementStateData.arFloor = meshObject; Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.SetPlacementState, placementStateData)); FindFirstARWall(); }
void FindSecondARWallNext() { ARPlacementStateData placementStateData = UIStateManager.current.arStateData.placementStateData; var meshObject = m_Raycaster.LastTarget.gameObject.CloneMeshObject("arFirstWall", m_PlaneSelectionMaterial); placementStateData.firstARSelectedPlane = meshObject; placementStateData.arPlacementAlignment = m_Raycaster.LastTarget.gameObject.transform.parent.forward; Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.SetPlacementState, placementStateData)); FindSecondARWall(); }
void FindSecondWallNext() { // first record the previously selected plane as Wall A ARPlacementStateData placementStateData = UIStateManager.current.arStateData.placementStateData; var info = UIStateManager.current.projectStateData.objectSelectionInfo; placementStateData.firstSelectedPlane = info.CurrentSelectedObject().ClonePlaneSurface("firstWall", m_PlaneSelectionMaterial); Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.SetPlacementState, placementStateData)); FindSecondWall(); }
void FindFirstWallNext() { // first record the previously selected plane as Mode floor ARPlacementStateData placementStateData = UIStateManager.current.arStateData.placementStateData; var info = UIStateManager.current.projectStateData.objectSelectionInfo; placementStateData.modelFloor = info.CurrentSelectedObject().ClonePlaneSurface("modelFloor", m_FloorSelectionMaterial); UIStateManager.current.Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.SetPlacementState, placementStateData)); FindFirstWall(); }
public bool IsValid(ARPlacementStateData placementState, out ModalPopup.ModalPopupData errorMessage) { errorMessage = default; var selected = UIStateManager.current.projectStateData.objectSelectionInfo.CurrentSelectedObject(); if (selected == null) { errorMessage = UIStateManager.current.popUpManager.GetModalPopUpData(); errorMessage.title = "Selection Error"; errorMessage.text = "Select a wall before changing to the next step."; return(false); } var selectedContext = selected.GetComponent <PlaneSelectionContext>(); if (selectedContext == null) { errorMessage = UIStateManager.current.popUpManager.GetModalPopUpData(); errorMessage.title = "Selection Error"; errorMessage.text = "Selected object does not have a Plane Selection Context."; return(false); } var firstPlane = placementState.firstSelectedPlane; if (firstPlane == null) { errorMessage = UIStateManager.current.popUpManager.GetModalPopUpData(); errorMessage.title = "Placement Error"; errorMessage.text = "Placement State does not have a first plane selected."; return(false); } var firstPlaneContext = firstPlane.GetComponent <PlaneSelectionContext>(); if (firstPlaneContext == null) { errorMessage = UIStateManager.current.popUpManager.GetModalPopUpData(); errorMessage.title = "Placement Error"; errorMessage.text = "First placement plane does not have a Plane Selection Context."; return(false); } var selectedNormal = Vector3.ProjectOnPlane(selectedContext.LastContext.SelectedPlane.normal, Vector3.up); var firstPlaneNormal = Vector3.ProjectOnPlane(firstPlaneContext.LastContext.SelectedPlane.normal, Vector3.up); var dot = Mathf.Abs(Vector3.Dot(selectedNormal, firstPlaneNormal)); if (dot > minPlaneNormalDot) { errorMessage = UIStateManager.current.popUpManager.GetModalPopUpData(); errorMessage.title = "Placement Error"; errorMessage.text = "Selected plane is not perpendicular to first plane."; return(false); } return(true); }
public UIARStateData(bool arEnabled, InstructionUIState instructionUIState, IInstructionUI currentInstructionUI, int numProxyInstances, int instructionUIStep, bool placementGesturesEnabled, ARToolStateData arToolStateData, ARPlacementStateData placementStateData, ARMode arMode) { this.arEnabled = arEnabled; this.instructionUIState = instructionUIState; this.currentInstructionUI = currentInstructionUI; this.numProxyInstances = numProxyInstances; this.instructionUIStep = instructionUIStep; this.arToolStateData = arToolStateData; this.placementStateData = placementStateData; this.arMode = arMode; }
void FindFirstWallBack() { ARPlacementStateData placementStateData = UIStateManager.current.arStateData.placementStateData; ARToolStateData toolState = ARToolStateData.defaultData; toolState.navigationEnabled = false; toolState.previousStepEnabled = true; toolState.okButtonValidator = this; toolState.wallIndicatorsEnabled = true; toolState.anchorPointsEnabled = false; Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.SetARToolState, toolState)); DestroyImmediate(placementStateData.firstSelectedPlane); FindFirstWall(); }
public bool IsValid(ARPlacementStateData placementState, out ModalPopup.ModalPopupData errorMessage) { errorMessage = default; if (placementState.firstSelectedPlane != null) { var renderer = placementState.firstSelectedPlane.GetComponent <MeshRenderer>(); if (renderer == null) { errorMessage = UIStateManager.current.popUpManager.GetModalPopUpData(); errorMessage.title = "Placement Error"; errorMessage.text = "First placement plane does not have a renderer."; return(false); } if (renderer.bounds.size.magnitude < minBoundsMagnitude) { errorMessage = UIStateManager.current.popUpManager.GetModalPopUpData(); errorMessage.title = "Placement Error"; errorMessage.text = "First placement plane model is too small."; return(false); } } if (placementState.secondSelectedPlane != null) { var renderer = placementState.secondSelectedPlane.GetComponent <MeshRenderer>(); if (renderer == null) { errorMessage = UIStateManager.current.popUpManager.GetModalPopUpData(); errorMessage.title = "Placement Error"; errorMessage.text = "Second placement plane does not have a renderer."; return(false); } if (renderer.bounds.size.magnitude < minBoundsMagnitude) { errorMessage = UIStateManager.current.popUpManager.GetModalPopUpData(); errorMessage.title = "Placement Error"; errorMessage.text = "Second placement plane model is too small."; return(false); } } return(true); }
void FindSecondWallBack() { ARPlacementStateData placementStateData = UIStateManager.current.arStateData.placementStateData; placementStateData.modelPlacementLocation = Vector3.zero; UIStateManager.current.Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.SetPlacementState, placementStateData)); var navigationState = UIStateManager.current.stateData.navigationState; navigationState.selectionUsageCount++; UIStateManager.current.Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.SetNavigationState, navigationState)); ARToolStateData toolState = ARToolStateData.defaultData; toolState.navigationEnabled = false; toolState.previousStepEnabled = true; toolState.okButtonValidator = this; toolState.wallIndicatorsEnabled = true; toolState.anchorPointsEnabled = false; UIStateManager.current.Dispatcher.Dispatch(Payload <ActionTypes> .From(ActionTypes.SetARToolState, toolState)); DestroyImmediate(placementStateData.secondSelectedPlane); FindSecondWall(); }