private void OnClear(object sender, EventArgs e) { SmoothGroupEditor editor = (SmoothGroupEditor)sender; PBMesh pbMesh = editor.Data.PBMesh; IMeshEditor meshEditor = m_proBuilderTool.GetEditor(); MeshEditorState oldState = meshEditor.GetState(false); PBSmoothing.ClearGroup(pbMesh, meshEditor.GetSelection()); m_smoothGroups[pbMesh].Rebuild(pbMesh); m_proBuilderTool.TryUpdatePivotTransform(); MeshEditorState newState = meshEditor.GetState(false); m_proBuilderTool.RecordState(oldState, newState, true); }
private void OnBeginMove(BaseHandle positionHandle) { if (m_tool.Mode != ProBuilderToolMode.PolyShape) { return; } if (PolyShape.Stage == 0) { return; } if (m_rte.Selection.activeGameObject != m_pivot.gameObject) { return; } positionHandle.EnableUndo = false; m_oldPositions = PolyShape.Positions.ToArray(); m_oldState = PolyShape.GetState(false); }
public void RecordState( MeshEditorState oldState, Vector3[] oldPositions, MeshEditorState newState, Vector3[] newPositions, bool oldStateChanged = true, bool newStateChanged = true) { PBPolyShape polyShape = PolyShape; UndoRedoCallback redo = record => { if (newState != null) { m_tool.Mode = ProBuilderToolMode.Object; polyShape.SetState(newState); if (newPositions != null) { polyShape.Positions = newPositions.ToList(); PolyShapeUpdatePivot(polyShape); } return(newStateChanged); } return(false); }; UndoRedoCallback undo = record => { if (oldState != null) { m_tool.Mode = ProBuilderToolMode.Object; polyShape.SetState(oldState); if (oldPositions != null) { polyShape.Positions = oldPositions.ToList(); PolyShapeUpdatePivot(polyShape); } return(oldStateChanged); } return(false); }; IOC.Resolve <IRTE>().Undo.CreateRecord(redo, undo); }
private void OnEndMove(BaseHandle positionHandle) { if (m_tool.Mode != ProBuilderToolMode.PolyShape) { return; } if (PolyShape.Stage == 0) { return; } if (m_rte.Selection.activeGameObject != m_pivot.gameObject) { return; } positionHandle.EnableUndo = true; PolyShape.Refresh(); MeshEditorState newState = PolyShape.GetState(false); RecordState(m_oldState, m_oldPositions, newState, PolyShape.Positions.ToArray()); }
private void OnExpandSelection(object sender, EventArgs e) { IMeshEditor meshEditor = m_proBuilderTool.GetEditor(); MeshSelection selection = meshEditor.GetSelection(); MeshEditorState oldState = meshEditor.GetState(false); selection = PBSmoothing.ExpandSelection(selection); if (m_proBuilderTool.Mode == ProBuilderToolMode.Vertex) { selection = selection.ToVertices(false); } else if (m_proBuilderTool.Mode == ProBuilderToolMode.Edge) { selection = selection.ToEdges(false); } meshEditor.SetSelection(selection); m_proBuilderTool.TryUpdatePivotTransform(); MeshEditorState newState = meshEditor.GetState(false); m_proBuilderTool.RecordState(oldState, newState, true); }
public static void RecordState(this IProBuilderTool tool, IMeshEditor meshEditor, MeshEditorState oldState, MeshEditorState newState, bool oldStateChanged = true, bool newStateChanged = true) { UndoRedoCallback redo = record => { if (newState != null) { meshEditor.SetState(newState); return(newStateChanged); } return(false); }; UndoRedoCallback undo = record => { if (oldState != null) { meshEditor.SetState(oldState); return(oldStateChanged); } return(false); }; IOC.Resolve <IRTE>().Undo.CreateRecord(redo, undo); }
public static void RecordStateWithAction(this IProBuilderTool tool, IMeshEditor meshEditor, MeshEditorState oldState, Action <Record> newState, bool changed = true) { UndoRedoCallback redo = record => { newState(record); return(changed); }; UndoRedoCallback undo = record => { meshEditor.SetState(oldState); return(true); }; IOC.Resolve <IRTE>().Undo.CreateRecord(redo, undo); }
private void RecordStateAndSelection(IMeshEditor meshEditor, MeshSelection selection, MeshEditorState oldState, MeshEditorState newState) { UndoRedoCallback redo = record => { if (newState != null) { meshEditor.ClearSelection(); meshEditor.SetState(newState); meshEditor.ApplySelection(selection); m_pivot.position = meshEditor.Position; m_pivot.rotation = GetPivotRotation(meshEditor);// Quaternion.LookRotation(meshEditor.Normal); OnSelectionChanged(); return(true); } return(false); }; UndoRedoCallback undo = record => { if (oldState != null) { meshEditor.ClearSelection(); meshEditor.SetState(oldState); meshEditor.RollbackSelection(selection); m_pivot.position = meshEditor.Position; m_pivot.rotation = GetPivotRotation(meshEditor);// Quaternion.LookRotation(meshEditor.Normal); OnSelectionChanged(); return(true); } return(false); }; m_rte.Undo.CreateRecord(redo, undo); OnSelectionChanged(); }