Esempio n. 1
0
        public override Extents2D GetExtents()
        {
            Extents2D ex = new Extents2D();

            ex.Add(P1);
            ex.Add(P2);
            return(ex);
        }
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();
            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. 3
0
        public override Extents2D GetExtents()
        {
            Extents2D extents = new Extents2D();

            foreach (Drawable item in items)
            {
                if (item.Visible && (item.Layer == null || item.Layer.Visible))
                {
                    extents.Add(item.GetExtents());
                }
            }
            return(extents);
        }
Esempio n. 4
0
        public override async Task Apply(CADDocument doc, params string[] args)
        {
            Editor ed = doc.Editor;

            var s = await ed.GetSelection("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();
            var       ext       = new Extents2D();

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

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

            foreach (Drawable item in s.Value)
            {
                item.TransformBy(Matrix2D.Scale(p1.Value, d1.Value));
            }
        }
Esempio n. 5
0
        public override async Task Apply(CADDocument doc, params string[] args)
        {
            CADView view = doc.ActiveView;

            if (view == null)
            {
                return;
            }

            Editor ed = doc.Editor;

            PointOptions opts = new PointOptions("Corner of zoom window: ");

            opts.AddKeyword("Extents");
            opts.AddKeyword("Scale");
            opts.AddKeyword("Object");
            var p1 = await ed.GetPoint(opts);

            if (p1.Result == ResultMode.Cancel)
            {
                return;
            }

            if (p1.Result == ResultMode.Keyword && p1.Keyword == "Extents")
            {
                view.SetViewport();
            }
            else if (p1.Result == ResultMode.Keyword && p1.Keyword == "Scale")
            {
                FloatOptions fopts = new FloatOptions("Scale factor: ");
                fopts.AllowNegative = false;
                fopts.AllowZero     = false;
                fopts.AllowPositive = true;
                var f1 = await ed.GetFloat(fopts);

                if (f1.Result != ResultMode.OK)
                {
                    return;
                }
                view.Zoom(1f / f1.Value);
            }
            else if (p1.Result == ResultMode.Keyword && p1.Keyword == "Object")
            {
                var s1 = await ed.GetSelection("Select objects: ");

                if (s1.Result != ResultMode.OK || s1.Value.Count == 0)
                {
                    return;
                }
                Extents2D ex = new Extents2D();
                foreach (Drawable item in s1.Value)
                {
                    ex.Add(item.GetExtents());
                }
                view.SetViewport(ex);
            }
            else
            {
                var p2 = await ed.GetCorner("Opposite corner of zoom window: ", p1.Value);

                if (p2.Result != ResultMode.OK)
                {
                    return;
                }
                view.SetViewport(p1.Value, p2.Value);
            }
        }