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);
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        // 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);
        }
Esempio n. 4
0
        // 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();
        }