void Awake() { Instance = this; _faceHandles = new Dictionary <int, FaceHandleController>(); _edgeHandles = new Dictionary <int, EdgeHandleController>(); _vertexHandles = new Dictionary <int, VertexHandleController>(); _closedEdgeBackup = new List <KeyValuePair <int, int> >(); }
public override void Interact() { // pointToPlaneVectorTest /* * Vector3 nTest = new Vector3(1f, 1f, 0f); * Vector3 pvTest = new Vector3(2f, 2f, 0f); * * Vector3 pointTest = new Vector3(1f, 5f, 0f); * Vector3 pointTest2 = new Vector3(1f, 5f, 1f); * Vector3 pointTest3 = new Vector3(6f, 3f, 0f); * Vector3 pointTest4 = new Vector3(6f, 3f, 1f); * * Debug.Log(pointToPlaneVector(nTest, pvTest, pointTest).ToVector3f().ToString()); * Debug.Log(pointToPlaneVector(nTest, pvTest, pointTest2).ToVector3f().ToString()); * Debug.Log(pointToPlaneVector(nTest, pvTest, pointTest3).ToVector3f().ToString()); * Debug.Log(pointToPlaneVector(nTest, pvTest, pointTest4).ToVector3f().ToString()); */ initialPosition = transform.localPosition; initialRotation = transform.localRotation; initialFaceCenter = Extrudable._manifold.GetCenter(AssociatedFaceID); initialManifold = Extrudable._manifold.Copy(); selectedFaceList = GetAdjacentLockedFaces(AssociatedFaceID, new List <AdjacentLockedFaces>()); extrudingFaces = selectedFaceList.ConvertAll(pair => pair.faceid); ControlsManager.Instance.RemoveLatches(extrudingFaces); initialVertexPositions = ControlsManager.Instance.GetVertexPositionsFromFaces(extrudingFaces); isExtruding = false; var worldToLocal = transform.parent.worldToLocalMatrix; initialControllerPosInLocalSpace = worldToLocal.MultiplyPoint(_controllerCollider.transform.position); initialControllerOffset = initialControllerPosInLocalSpace - transform.localPosition; IsDragged = true; lastRotation = GetControllerRotationInLocalSpace(); firstRotation = lastRotation; angleSnap = true; translateSnap = true; ControlsManager.Instance.Extrudable.rebuild = true; if (extrudingFaces.Count > 1) { ControlsManager.Instance.DeleteControlsExceptSelectedFaces(new List <int> { AssociatedFaceID }); } else { //ControlsManager.Instance.DeleteControlsExceptSelectedFaces(extrudingFaces); //ControlsManager.Instance.DeleteControlsExceptFaces(initialManifold.GetAdjacentFaceIdsAndEdgeCenters(AssociatedFaceID).faceId, AssociatedFaceID); ControlsManager.Instance.DeleteControlsExceptFaces(new int[0], AssociatedFaceID); } ControlsManager.FireUndoStartEvent(mesh, this, initialPosition, initialRotation); }
void Awake() { _hoverHighlight = GetComponent <HoverHighlight>(); var meshFilter = GetComponent <MeshFilter>(); mesh = meshFilter.sharedMesh; controlsManager = FindObjectOfType <ControlsManager>(); loadedSBSPlane = Resources.Load("Prefabs/SBS_Plane_indicator"); }
public override void Interact() { //Debug.Log(AssociatedVertexID); interactingControllerCollider = _controllerCollider.transform; activeControllers.Add(this); //splitManifold = Extrudable._manifold.Copy(); initialManifold = Extrudable._manifold.Copy(); //Debug.Log(Extrudable._manifold.) adjacentVertices = AdjacentVertices(); if (activeControllers.Count == 1) { ChangeInteraction(InteractionMode.SINGLE); IsDragged = true; initialPosition = transform.localPosition; initialRotation = transform.localRotation; Vector3 controllerPosInLocalSpace = transform.parent.worldToLocalMatrix.MultiplyPoint(_controllerCollider.transform.position); initialControllerOffset = controllerPosInLocalSpace - transform.localPosition; ControlsManager.Instance.Extrudable.rebuild = true; ControlsManager.FireUndoStartEvent(mesh, this, initialPosition, initialRotation); if (ControlsManager.Instance.turntable) { minDeltaY = transform.parent.InverseTransformPoint(Vector3.one * ControlsManager.Instance.turntable.GetMaxYWithBounds()).y; } else { minDeltaY = -100f; } // Display two handed options } else if (activeControllers.Count == 2 && refinementActive && adjacentVertices.ContainsKey(activeControllers[0].AssociatedVertexID) && adjacentVertices.ContainsKey(activeControllers[1].AssociatedVertexID)) { activeControllers[0].ChangeInteraction(InteractionMode.DUAL); ChangeInteraction(InteractionMode.DUAL); Extrudable.MoveVertexTo(activeControllers[0].AssociatedVertexID, activeControllers[0].transform.localPosition); Extrudable.rebuild = true; initialRotation = transform.localRotation; AddEdgeBarSignifier(); } ControlsManager.Instance.DestroyFacesAndEdgeHandles(); }
public override void StopInteraction() { if (IsDragged) { destroyMeasuringBands(); IsDragged = false; if (collision == false && !planeSnap) { Extrudable.MoveTo( AssociatedFaceID, extrudingFaces.ToArray(), transform.localPosition, translateSnap && isExtruding, tickState); } else if (!planeSnap) //else if (extrudingFaces.Count == 1) // yes/no maybe { Debug.Log("Attempting face bridging"); if (true)//(hasDistinctAdjacentFaces(collidedFaceHandle)) { //collidedFaceHandleVertexPositions = controlsManager.GetVertexPositionsFromFaces(new List<int> { collidedFaceID }); collidedFaceHandleVertexPositions = initialManifold.GetVertexPositionsFromFace(collidedFaceID); if (collidedFaceHandleVertexPositions.Count() == initialVertexPositions.Count() && extrudingFaces.Count == 1) { var matches = faceBridgingVertexAssignment(initialVertexPositions, collidedFaceHandleVertexPositions); if (/*facingFaces(matches, AssociatedFaceID, initialVertexPositions, collidedFaceID, collidedFaceHandleVertexPositions)*/ true) { Extrudable.ChangeManifold(initialManifold.Copy()); Debug.Log("Applying face bridging"); if (matches.Length == 6) { Extrudable.bridgeFaces(AssociatedFaceID, collidedFaceID, new int[] { matches[0], matches[1], matches[2] }, new int[] { matches[3], matches[4], matches[5] }, 3); ControlsManager.Instance.UpdateControls(); } else if (matches.Length == 8) { Extrudable.bridgeFaces(AssociatedFaceID, collidedFaceID, new int[] { matches[0], matches[1], matches[2], matches[3] }, new int[] { matches[4], matches[5], matches[6], matches[7] }, 4); ControlsManager.Instance.UpdateControls(); } } } } collidedFaceHandleVertexPositions = null; } MergeWithCollidingFaces(); //Merge extrusion if done up against other faces. //Check if mesh is valid extrudingFaces = new List <int>(); // create new list (may be referenced by other hand) int collapsed = Extrudable.CollapseShortEdges(0.019f); Extrudable.TriangulateAndDrawManifold(); // needed for collision detection in isValidMesh if (Extrudable.isValidMesh()) { ControlsManager.Instance.DestroyInvalidObjects(); ControlsManager.Instance.Extrudable.rebuild = true; //ControlsManager.Instance.UpdateControls(); ControlsManager.FireUndoEndEvent(mesh, this, initialPosition, initialRotation); } else { Extrudable.ChangeManifold(initialManifold); } /* * if (collapsed > 0) * { * * } * else if (Extrudable.isValidMesh()) * { * //ControlsManager.Instance.DestroyInvalidObjects(); * ControlsManager.Instance.Extrudable.rebuild = true; * //ControlsManager.Instance.UpdateControls(); * ControlsManager.FireUndoEndEvent(mesh, this, initialPosition, initialRotation); * * * * * } * else * { * Extrudable.ChangeManifold(initialManifold); * }*/ DisableSBSPlane(); } }
public override void StopInteraction() { updateInFrame = Time.frameCount; //if (activeControllers.Count == 1) //{ // activeControllers[0].ChangeInteraction(InteractionMode.SINGLE); //} //else if (mode == InteractionMode.SINGLE) { activeControllers.Remove(this); if (IsDragged) { IsDragged = false; int collapsed = Extrudable.CollapseShortEdges(0.019f); if (collapsed > 0) { Extrudable.TriangulateAndDrawManifold(); if (Extrudable.isValidMesh()) { ControlsManager.Instance.DestroyInvalidObjects(); ControlsManager.Instance.Extrudable.rebuild = true; //ControlsManager.Instance.UpdateControls(); ControlsManager.FireUndoEndEvent(mesh, this, initialPosition, initialRotation); } else { Extrudable.ChangeManifold(initialManifold); } } else if (Extrudable.isValidMesh()) { ControlsManager.Instance.Extrudable.rebuild = true; //ControlsManager.Instance.UpdateControls(); ControlsManager.FireUndoEndEvent(mesh, this, initialPosition, initialRotation); } else { Extrudable.ChangeManifold(initialManifold); } } } else { if (mode == InteractionMode.DUAL && refinementActive) { if (refinementMode == RefinementMode.LOOP) { // This or TriangulateAndDraw + ControlsManager.Instance.the function that clears and updates //Extrudable._manifold = splitManifold; //Extrudable.UpdateMesh(); Extrudable.ChangeManifold(splitManifold); ControlsManager.FireUndoEndEvent(mesh, this, initialPosition, initialRotation); } if (activeControllers.Count == 2) { // Do the refinement and clear the splitManifold //ShowRefinement(activeControllers[0].AssociatedVertexID, activeControllers[1].AssociatedVertexID); activeControllers.Remove(this); activeControllers[0].ChangeInteraction(InteractionMode.SINGLE); activeControllers[0].EndHighlight(); activeControllers[0].IsDragged = false; activeControllers[0].StopInteraction(); } GameObject refinePreview = GameObject.FindGameObjectWithTag("RefinePreview"); refinePreview.GetComponent <MeshRenderer>().enabled = false; ChangeInteraction(InteractionMode.SINGLE); refinementMode = RefinementMode.NO; } } //ControlsManager.Instance.UpdateControls(); if (edgebar) { Destroy(edgebar); } DisableSBSLine(); }
void Awake() { _hoverHighlight = GetComponent <HoverHighlight>(); controlsManager = FindObjectOfType <ControlsManager>(); }
// Use this for initialization void Awake() { controlsManager = FindObjectOfType <ControlsManager>(); }