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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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();
        }