private static void ShowSelection(IEnumerable <Vector2D> points) { RectangleF area = MapSet.CreateEmptyArea(); // Make a view area from the points foreach (Vector2D p in points) { area = MapSet.IncreaseArea(area, p); } // Make the area square, using the largest side if (area.Width > area.Height) { float delta = area.Width - area.Height; area.Y -= delta * 0.5f; area.Height += delta; } else { float delta = area.Height - area.Width; area.X -= delta * 0.5f; area.Width += delta; } // Add padding area.Inflate(100f, 100f); // Zoom to area ClassicMode mode = General.Editing.Mode as ClassicMode; if (mode != null) { mode.CenterOnArea(area, 0.6f); } }
internal override void ShowSource() { // Switch to appropriate mode... if (General.Editing.Mode.GetType().Name != targetmodename) { // Leave any volatile mode General.Editing.CancelVolatileMode(); General.Editing.ChangeMode(targetmodename); } // Select map element if it still exists if (target != null && !target.IsDisposed) { General.Map.Map.ClearAllSelected(); if (target is Vertex) { ((Vertex)target).Selected = true; } else if (target is Sidedef) { ((Sidedef)target).Line.Selected = true; } else if (target is Linedef) { ((Linedef)target).Selected = true; } else if (target is Sector) { Sector s = (Sector)target; ((ClassicMode)General.Editing.Mode).SelectMapElement(s); foreach (Sidedef sd in s.Sidedefs) { sd.Line.Selected = true; } } else if (target is Thing) { ((Thing)target).Selected = true; } else { throw new NotImplementedException("Unknown MapElement type!"); } } // Show area ClassicMode editmode = (General.Editing.Mode as ClassicMode); editmode.CenterOnArea(zoomarea, 0.6f); }
// Call this to zoom in on the given selection public virtual void ZoomToSelection(ICollection <FindReplaceObject> selection) { List <Vector2D> points = new List <Vector2D>(); RectangleF area = MapSet.CreateEmptyArea(); // Add all points to a list foreach (FindReplaceObject o in selection) { o.AddViewPoints(points); } // Make a view area from the points foreach (Vector2D p in points) { area = MapSet.IncreaseArea(area, p); } // Make the area square, using the largest side if (area.Width > area.Height) { float delta = area.Width - area.Height; area.Y -= delta * 0.5f; area.Height += delta; } else { float delta = area.Height - area.Width; area.X -= delta * 0.5f; area.Width += delta; } // Add padding area.Inflate(100f, 100f); // Zoom to area ClassicMode editmode = (General.Editing.Mode as ClassicMode); editmode.CenterOnArea(area, 0.6f); }
// Call this to zoom in on the given selection public void ZoomToObject() { List <Vector2D> points = new List <Vector2D>(); RectangleF area = MapSet.CreateEmptyArea(); // Add all points to a list foreach (MapElement obj in viewobjects) { if (obj is Vertex) { points.Add((obj as Vertex).Position); } else if (obj is Linedef) { points.Add((obj as Linedef).Start.Position); points.Add((obj as Linedef).End.Position); } else if (obj is Sidedef) { points.Add((obj as Sidedef).Line.Start.Position); points.Add((obj as Sidedef).Line.End.Position); } else if (obj is Sector) { Sector s = (obj as Sector); foreach (Sidedef sd in s.Sidedefs) { points.Add(sd.Line.Start.Position); points.Add(sd.Line.End.Position); } } else if (obj is Thing) { Thing t = (obj as Thing); Vector2D p = (Vector2D)t.Position; points.Add(p); points.Add(p + new Vector2D(t.Size * 2.0f, t.Size * 2.0f)); points.Add(p + new Vector2D(t.Size * 2.0f, -t.Size * 2.0f)); points.Add(p + new Vector2D(-t.Size * 2.0f, t.Size * 2.0f)); points.Add(p + new Vector2D(-t.Size * 2.0f, -t.Size * 2.0f)); } else { General.Fail("Unknown object given to zoom in on."); } } // Make a view area from the points foreach (Vector2D p in points) { area = MapSet.IncreaseArea(area, p); } // Make the area square, using the largest side if (area.Width > area.Height) { float delta = area.Width - area.Height; area.Y -= delta * 0.5f; area.Height += delta; } else { float delta = area.Height - area.Width; area.X -= delta * 0.5f; area.Width += delta; } // Add padding area.Inflate(100f, 100f); // Zoom to area ClassicMode editmode = (General.Editing.Mode as ClassicMode); editmode.CenterOnArea(area, 0.6f); }
private static void ProcessNodeClick(TreeNode node) { if (node == null) { return; } List <Vector2D> points = new List <Vector2D>(); RectangleF area = MapSet.CreateEmptyArea(); if (node.Parent == null) { if (node.Tag is SoundEnvironment) { SoundEnvironment se = (SoundEnvironment)node.Tag; foreach (Sector s in se.Sectors) { foreach (Sidedef sd in s.Sidedefs) { points.Add(sd.Line.Start.Position); points.Add(sd.Line.End.Position); } } } else { // Don't zoom if the wrong nodes are selected return; } } else { if (node.Tag is Thing) { Thing t = (Thing)node.Tag; // We don't want to be zoomed too closely, so add somepadding points.Add(t.Position - 200); points.Add(t.Position + 200); } else if (node.Tag is Linedef) { Linedef ld = (Linedef)node.Tag; points.Add(ld.Start.Position); points.Add(ld.End.Position); } else { // Don't zoom if the wrong nodes are selected return; } } area = MapSet.IncreaseArea(area, points); // Add padding area.Inflate(100f, 100f); // Zoom to area ClassicMode editmode = (General.Editing.Mode as ClassicMode); editmode.CenterOnArea(area, 0.0f); }
// Results selection changed private void results_SelectedIndexChanged(object sender, EventArgs e) { //mxd if (bathselectioninprogress) { return; } // Anything selected? if (results.SelectedItems.Count > 0) { ErrorResult firstresult = (results.SelectedItems[0] as ErrorResult); if (firstresult == null) { ClearSelectedResult(); } else { bool sametype = true; List <ErrorResult> validresults = new List <ErrorResult>(); // Selected results have the same fixes? foreach (var ri in results.SelectedItems) { ErrorResult result = ri as ErrorResult; if (result == null) { continue; } validresults.Add(result); if (result.Buttons != firstresult.Buttons || result.Button1Text != firstresult.Button1Text || result.Button2Text != firstresult.Button2Text || result.Button3Text != firstresult.Button3Text) { sametype = false; break; } } resultinfo.Enabled = true; if (sametype) { resultinfo.Text = firstresult.Description; fix1.Text = firstresult.Button1Text; fix2.Text = firstresult.Button2Text; fix3.Text = firstresult.Button3Text; fix1.Visible = (firstresult.Buttons > 0); fix2.Visible = (firstresult.Buttons > 1); fix3.Visible = (firstresult.Buttons > 2); } else { resultinfo.Text = "Several types of map analysis results are selected. To display fixes, make sure that only a single result type is selected."; fix1.Visible = false; fix2.Visible = false; fix3.Visible = false; } // Zoom to area if (validresults.Count > 0) { RectangleF zoomarea = validresults[0].GetZoomArea(); foreach (ErrorResult result in validresults) { zoomarea = RectangleF.Union(zoomarea, result.GetZoomArea()); } ClassicMode editmode = (General.Editing.Mode as ClassicMode); editmode.CenterOnArea(zoomarea, 0.6f); } } UpdateTitle(); //mxd } else { ClearSelectedResult(); } General.Interface.RedrawDisplay(); }