private void OnEndDrag(BaseHandle handle) { handle.EnableUndo = m_wasUndoEnabled; SetFaceSelectionVisibility(true); EditableMesh editableMesh = m_editableMeshes.Where(m => m != null).LastOrDefault(); if (editableMesh != null) { m_pivotPoint.transform.position = editableMesh.transform.TransformPoint((m_lastFace.Position)); m_pivotPoint.transform.localScale = Vector3.one; GetTNBBasis(); m_initialRotation = Quaternion.LookRotation( editableMesh.transform.TransformDirection(m_tbn.Normal), editableMesh.transform.TransformDirection(m_tbn.Tangent)); m_pivotPoint.transform.rotation = m_initialRotation; MeshesState prevState = m_prevState; MeshesState newState = new MeshesState(m_pivotPoint.transform, m_editableMeshes.ToArray()); m_editor.Undo.CreateRecord(redoRecord => { newState.Apply(); return(true); }, undoRecord => { prevState.Apply(); return(true); }); } m_faces = null; }
private void OnBeginDrag(BaseHandle handle) { m_wasUndoEnabled = handle.EnableUndo; handle.EnableUndo = false; m_prevState = new MeshesState(m_pivotPoint.transform, m_editableMeshes.ToArray()); SetFaceSelectionVisibility(false); if (m_lastFace != null) { GetTNBBasis(); m_uvPosition = m_objToTBN.MultiplyPoint3x4(m_lastFace.Position); EditableMesh lastMesh = LastMesh; if (lastMesh != null) { Vector3 s = lastMesh.transform.InverseTransformVector(m_pivotPoint.transform.TransformVector(m_pivotPoint.transform.localScale)); m_uvScale = m_objToTBN.MultiplyVector(s); } for (int i = 0; i < m_editableMeshes.Count; ++i) { EditableMesh editableMesh = m_editableMeshes[i]; editableMesh.Separate(editableMesh.SelectedFaces); } m_faces = m_editableMeshes.ToDictionary(k => k, v => v.SelectedFaces.Select(f => new Tuple <Face, Face>(f, new Face(f))).ToArray()); } }