Esempio n. 1
0
        public override async Task Apply(CADDocument doc, params string[] args)
        {
            Editor ed = doc.Editor;

            var s = await ed.GetControlPoints("Select objects: ");

            if (s.Result != ResultMode.OK || s.Value.Count == 0)
            {
                return;
            }
            var p1 = await ed.GetPoint("Base point: ");

            if (p1.Result != ResultMode.OK)
            {
                return;
            }
            Composite      consItems = new Composite();
            CPSelectionSet consSet   = new CPSelectionSet();
            var            ext       = new Extents2D();

            foreach (var pair in s.Value)
            {
                Drawable item = pair.Key.Clone();
                ext.Add(item.GetExtents());
                consItems.Add(item);
                consSet.Add(item, pair.Value);
            }
            doc.Transients.Add(consItems);
            float size      = System.Math.Max(ext.Width, ext.Height);
            float lastScale = 1;
            var   p2        = await ed.GetDistance("Scale: ", p1.Value,
                                                   (p) =>
            {
                p /= size;
                foreach (Drawable item in consItems)
                {
                    item.TransformControlPoints(consSet[item], Matrix2D.Scale(p1.Value, p / lastScale));
                }
                lastScale = p;
            });

            doc.Transients.Remove(consItems);
            if (p2.Result != ResultMode.OK)
            {
                return;
            }

            foreach (var pair in s.Value)
            {
                pair.Key.TransformControlPoints(pair.Value.ToArray(), Matrix2D.Scale(p1.Value, p2.Value));
            }
        }
Esempio n. 2
0
        public override async Task Apply(CADDocument doc, params string[] args)
        {
            Editor ed = doc.Editor;

            var s = await ed.GetControlPoints("Select objects: ");

            if (s.Result != ResultMode.OK || s.Value.Count == 0)
            {
                return;
            }
            var p1 = await ed.GetPoint("Base point: ");

            if (p1.Result != ResultMode.OK)
            {
                return;
            }
            Composite      consItems = new Composite();
            CPSelectionSet consSet   = new CPSelectionSet();

            foreach (var pair in s.Value)
            {
                Drawable item = pair.Key.Clone();
                consItems.Add(item);
                consSet.Add(item, pair.Value);
            }
            doc.Transients.Add(consItems);
            float lastAngle = 0;
            var   p2        = await ed.GetAngle("Rotation angle: ", p1.Value,
                                                (p) =>
            {
                foreach (Drawable item in consItems)
                {
                    item.TransformControlPoints(consSet[item], Matrix2D.Rotation(p1.Value, p - lastAngle));
                }
                lastAngle = p;
            });

            doc.Transients.Remove(consItems);
            if (p2.Result != ResultMode.OK)
            {
                return;
            }

            foreach (var pair in s.Value)
            {
                pair.Key.TransformControlPoints(pair.Value.ToArray(), Matrix2D.Rotation(p1.Value, p2.Value));
            }
        }