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