public void Transform() { if (_document.Selection.IsEmpty() || _document.Selection.InFaceSelection) return; var box = _document.Selection.GetSelectionBoundingBox(); using (var td = new TransformDialog(box)) { if (td.ShowDialog() != DialogResult.OK) return; var value = td.TransformValue; IUnitTransformation transform = null; switch (td.TransformType) { case TransformType.Rotate: var mov = Matrix.Translation(-box.Center); // Move to zero var rot = Matrix.Rotation(Quaternion.EulerAngles(value * DMath.PI / 180)); // Do rotation var fin = Matrix.Translation(box.Center); // Move to final origin transform = new UnitMatrixMult(fin * rot * mov); break; case TransformType.Translate: transform = new UnitTranslate(value); break; case TransformType.Scale: transform = new UnitScale(value, box.Center); break; } if (transform == null) return; var selected = _document.Selection.GetSelectedParents(); _document.PerformAction("Transform selection", new Edit(selected, new TransformEditOperation(transform, _document.Map.GetTransformFlags()))); } }
private IEnumerable<MapObject> CreateCopy(IDGenerator gen, Coordinate origin, Coordinate rotation, List<string> names, TransformFlags transformFlags) { var box = new Box(_objectsToPaste.Select(x => x.BoundingBox)); var mov = Matrix.Translation(-box.Center); // Move to zero var rot = Matrix.Rotation(Quaternion.EulerAngles(rotation * DMath.PI / 180)); // Do rotation var fin = Matrix.Translation(origin); // Move to final origin var transform = new UnitMatrixMult(fin * rot * mov); foreach (var mo in _objectsToPaste) { // Copy, transform and fix entity names var copy = mo.Copy(gen); copy.Transform(transform, transformFlags); FixEntityNames(copy, names); yield return copy; } }