コード例 #1
0
        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())));
            }
        }
コード例 #2
0
ファイル: PasteSpecial.cs プロジェクト: jpiolho/sledge
        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;
            }
        }