private void ButtonPlay_Click(ProcedureUI.Button sender) { var obj = GetObject(); if (obj == null) { return; } var oldValue = obj.Activated; //update if (obj.Activated) { obj.RecreateData(false); } else { obj.Activated = true; } //undo if (oldValue != obj.Activated) { var property = (Metadata.Property)obj.MetadataGetMemberBySignature("property:Activated"); var undoAction = new UndoActionPropertiesChange(new UndoActionPropertiesChange.Item(obj, property, oldValue, null)); Provider.DocumentWindow.Document.CommitUndoAction(undoAction); } }
private void ButtonBuild_Click(ProcedureUI.Button sender) { var pathfinding = GetObject(); if (pathfinding == null) { return; } var oldNavMeshData = pathfinding.NavMeshData; if (!pathfinding.BuildNavMesh(out var error)) { Log.Error(error); return; } //undo { var property = (Metadata.Property)pathfinding.MetadataGetMemberBySignature("property:NavMeshData"); var undoItems = new List <UndoActionPropertiesChange.Item>(); undoItems.Add(new UndoActionPropertiesChange.Item(pathfinding, property, oldNavMeshData, null)); var undoAction = new UndoActionPropertiesChange(undoItems.ToArray()); Provider.DocumentWindow.Document.UndoSystem.CommitAction(undoAction); Provider.DocumentWindow.Document.Modified = true; } }
protected override void OnBakeIntoMesh(DocumentInstance document, UndoMultiAction undoMultiAction) { base.OnBakeIntoMesh(document, undoMultiAction); var mesh = (Component_Mesh)Parent; var geometries = mesh.GetComponents <Component_MeshGeometry>(); int aa = 0; foreach (var geometry in geometries) { var positions = geometry.VerticesExtractChannel <Vector3F>(VertexElementSemantic.Position); if (positions != null) { aa = aa + 1; if (DataN == 0 || DataN == aa) { var vertexStructure = geometry.VertexStructure.Value; vertexStructure.GetInfo(out var vertexSize, out _); var oldValue = geometry.Vertices; var vertices = geometry.Vertices.Value; var vertexCount = vertices.Length / vertexSize; var newPositions = new Vector3F[positions.Length]; for (int n = 0; n < positions.Length; n++) { ProcessVertex(aa, ref positions[n], out newPositions[n]); } var newVertices = (byte[])vertices.Clone(); if (geometry.VerticesWriteChannel(VertexElementSemantic.Position, newPositions, newVertices)) { //update property geometry.Vertices = newVertices; //undo if (undoMultiAction != null) { var property = (Metadata.Property)geometry.MetadataGetMemberBySignature("property:Vertices"); var undoAction = new UndoActionPropertiesChange(new UndoActionPropertiesChange.Item(geometry, property, oldValue)); undoMultiAction.AddAction(undoAction); } } } } } }
protected override void OnBakeIntoMesh(DocumentInstance document, UndoMultiAction undoMultiAction) { base.OnBakeIntoMesh(document, undoMultiAction); var mesh = (Component_Mesh)Parent; var geometries = mesh.GetComponents <Component_MeshGeometry>(); var bounds = Bounds.Cleared; { foreach (var geometry in geometries) { var positions = geometry.VerticesExtractChannel <Vector3F>(VertexElementSemantic.Position); if (positions != null) { foreach (var p in positions) { bounds.Add(p); } } } //bounds.Expand( ExtendBounds ); } var tiles = Tiles.Value; foreach (var geometry in geometries) { var positions = geometry.VerticesExtractChannel <Vector3F>(VertexElementSemantic.Position); var normals = geometry.VerticesExtractChannel <Vector3F>(VertexElementSemantic.Normal); if (positions != null && normals != null) { var vertexStructure = geometry.VertexStructure.Value; vertexStructure.GetInfo(out var vertexSize, out _); var oldValue = geometry.Vertices; var vertices = geometry.Vertices.Value; var vertexCount = vertices.Length / vertexSize; var newTexCoords = new Vector2F[vertexCount]; for (int n = 0; n < vertexCount; n++) { ProcessVertex(ref tiles, ref bounds, ref positions[n], ref normals[n], out newTexCoords[n]); } var newVertices = (byte[])vertices.Clone(); if (geometry.VerticesWriteChannel(VertexElementSemantic.TextureCoordinate0, newTexCoords, newVertices)) { //update property geometry.Vertices = newVertices; //undo if (undoMultiAction != null) { var property = (Metadata.Property)geometry.MetadataGetMemberBySignature("property:Vertices"); var undoAction = new UndoActionPropertiesChange(new UndoActionPropertiesChange.Item(geometry, property, oldValue)); undoMultiAction.AddAction(undoAction); } } } } }