protected override async Task Invoke(MapDocument document, CommandParameters parameters) { var selBox = document.Selection.GetSelectionBoundingBox(); var tl = document.Map.Data.GetOne <TransformationFlags>() ?? new TransformationFlags(); var transaction = new Transaction(); var tform = Matrix4x4.CreateTranslation(-selBox.Center) * Matrix4x4.CreateScale(GetScale()) * Matrix4x4.CreateTranslation(selBox.Center); var transformOperation = new BspEditor.Modification.Operations.Mutation.Transform(tform, document.Selection.GetSelectedParents()); transaction.Add(transformOperation); transaction.Add(new FlipFaces(document.Selection)); // Check for texture transform if (tl.TextureLock) { transaction.Add(new TransformTexturesUniform(tform, document.Selection)); } await MapDocumentOperation.Perform(document, transaction); }
protected override async Task Invoke(MapDocument document, CommandParameters parameters) { var selBox = document.Selection.GetSelectionBoundingBox(); var tl = document.Map.Data.GetOne <TransformationFlags>() ?? new TransformationFlags(); var transaction = new Transaction(); foreach (var mo in document.Selection.GetSelectedParents().ToList()) { var objBox = mo.BoundingBox; var translation = GetTranslation(selBox, objBox); if (translation == Vector3.Zero) { continue; } var tform = Matrix4x4.CreateTranslation(translation); var transformOperation = new BspEditor.Modification.Operations.Mutation.Transform(tform, mo); transaction.Add(transformOperation); // Check for texture transform if (tl.TextureLock) { transaction.Add(new TransformTexturesUniform(tform, mo.FindAll())); } } if (!transaction.IsEmpty) { await MapDocumentOperation.Perform(document, transaction); } }
protected override async Task Invoke(MapDocument document, CommandParameters parameters) { var selBox = document.Selection.GetSelectionBoundingBox(); var axis = parameters.Get <Vector3>("Axis"); var amount = parameters.Get <float>("Angle"); var radians = (float)MathHelper.DegreesToRadians(amount); var tl = document.Map.Data.GetOne <TransformationFlags>() ?? new TransformationFlags(); var transaction = new Transaction(); var tform = Matrix4x4.CreateTranslation(-selBox.Center) * Matrix4x4.CreateFromAxisAngle(axis, radians) * Matrix4x4.CreateTranslation(selBox.Center); var transformOperation = new BspEditor.Modification.Operations.Mutation.Transform(tform, document.Selection.GetSelectedParents()); transaction.Add(transformOperation); // Check for texture transform if (tl.TextureLock) { transaction.Add(new TransformTexturesUniform(tform, document.Selection)); } await MapDocumentOperation.Perform(document, transaction); }
protected override async Task Invoke(MapDocument document, CommandParameters parameters) { var objects = document.Selection.GetSelectedParents().ToList(); var box = document.Selection.GetSelectionBoundingBox(); using (var dialog = new TransformDialog(box)) { _translator.Value.Translate(dialog); if (dialog.ShowDialog() == DialogResult.OK) { try { var transaction = new Transaction(); // Add the operation var transform = dialog.GetTransformation(box); var transformOperation = new BspEditor.Modification.Operations.Mutation.Transform(transform, objects); transaction.Add(transformOperation); // Check for texture transform var tl = document.Map.Data.GetOne <TransformationFlags>() ?? new TransformationFlags(); if (dialog.Type == TransformDialog.TransformType.Rotate || dialog.Type == TransformDialog.TransformType.Translate) { if (tl.TextureLock) { transaction.Add(new TransformTexturesUniform(transform, objects.SelectMany(x => x.FindAll()))); } } else if (dialog.Type == TransformDialog.TransformType.Scale) { if (tl.TextureScaleLock) { transaction.Add(new TransformTexturesScale(transform, objects.SelectMany(x => x.FindAll()))); } } await MapDocumentOperation.Perform(document, transaction); } catch (TransformDialog.CannotScaleByZeroException) { MessageBox.Show(ErrorCannotScaleByZeroMessage, ErrorCannotScaleByZeroTitle, MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }
protected override async Task Invoke(MapDocument document, CommandParameters parameters) { var grid = document.Map.Data.GetOne <GridData>(); if (grid == null) { return; } var tl = document.Map.Data.GetOne <TransformationFlags>() ?? new TransformationFlags(); var transaction = new Transaction(); foreach (var mo in document.Selection.GetSelectedParents().ToList()) { var box = mo.BoundingBox; var start = box.Start; var snapped = grid.Grid.Snap(start); var trans = snapped - start; if (trans == Vector3.Zero) { continue; } var tform = Matrix4x4.CreateTranslation(trans); var transformOperation = new BspEditor.Modification.Operations.Mutation.Transform(tform, mo); transaction.Add(transformOperation); // Check for texture transform if (tl.TextureLock) { transaction.Add(new TransformTexturesUniform(tform, mo.FindAll())); } } if (!transaction.IsEmpty) { await MapDocumentOperation.Perform(document, transaction); } }
protected override async Task Invoke(MapDocument document, CommandParameters parameters) { var selBox = document.Selection.GetSelectionBoundingBox(); var grid = document.Map.Data.GetOne <GridData>(); if (grid == null) { return; } var start = selBox.Start; var snapped = grid.Grid.Snap(start); var trans = snapped - start; if (trans == Vector3.Zero) { return; } var tform = Matrix4x4.CreateTranslation(trans); var transaction = new Transaction(); var transformOperation = new BspEditor.Modification.Operations.Mutation.Transform(tform, document.Selection.GetSelectedParents()); transaction.Add(transformOperation); // Check for texture transform var tl = document.Map.Data.GetOne <TransformationFlags>() ?? new TransformationFlags(); if (tl.TextureLock) { transaction.Add(new TransformTexturesUniform(tform, document.Selection)); } await MapDocumentOperation.Perform(document, transaction); }