private void EditFrame(FovFrame frame)
        {
            var viewModel = ViewManager.CreateViewModel <FovSettingsVM>();

            viewModel.Frame = frame;
            if (ViewManager.ShowDialog(viewModel) ?? false)
            {
                frame = viewModel.Frame;
                int index = fovFrames.FindIndex(f => f.Id == frame.Id);

                if (index >= 0)
                {
                    fovFrames.RemoveAt(index);
                    fovFrames.Insert(index, frame);
                }
                else
                {
                    fovFrames.Add(frame);
                }

                settings.Set("FovFrames", fovFrames);
                settings.Save();
                NotifyPropertyChanged(nameof(FovFrames), nameof(IsEmptyList));
            }
        }
Exemple #2
0
        private void DrawFovCircle(IMapContext map, float frameSize, FovFrame frame, bool isOuter)
        {
            float radius = frameSize * 3600 / 2;
            float size   = map.GetDiskSize(radius);

            // do not draw frame if its size exceeds screen bounds
            if (size < Math.Sqrt(map.Width * map.Width + map.Height * map.Height))
            {
                if (isOuter && frame.Shading > 0 && frameSize >= map.ViewAngle / 2)
                {
                    var circle = new GraphicsPath();
                    circle.AddEllipse(map.Width / 2 - size / 2, map.Height / 2 - size / 2, size, size);

                    var shading = new Region(new RectangleF(0, 0, map.Width, map.Height));
                    shading.Exclude(circle);

                    int transparency = (int)(frame.Shading / 100f * 255);
                    var solidBrush   = new SolidBrush(Color.FromArgb(transparency, map.GetSkyColor()));
                    map.Graphics.FillRegion(solidBrush, shading);
                }
                map.Graphics.DrawEllipse(new Pen(frame.Color.GetColor(map.Schema, map.DayLightFactor)), map.Width / 2 - size / 2, map.Height / 2 - size / 2, size, size);

                if (isOuter)
                {
                    float labelWidth = map.Graphics.MeasureString(frame.Label, font).Width;
                    if (labelWidth <= size * 2)
                    {
                        map.Graphics.DrawString(frame.Label, font, new SolidBrush(frame.Color.GetColor(map.Schema, map.DayLightFactor)), new PointF(map.Width / 2, map.Height / 2 + size / 2), format);
                    }
                }
            }
        }
        private void DeleteFrame(FovFrame frame)
        {
            int index = fovFrames.FindIndex(f => f.Id == frame.Id);

            if (index >= 0)
            {
                if (ViewManager.ShowMessageBox("$FovFramesListWindow.WarningTitle", "$FovFramesListWindow.DeleteFrameWarningMessage", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
                {
                    fovFrames.RemoveAt(index);
                    settings.SetAndSave("FovFrames", fovFrames);
                    NotifyPropertyChanged(nameof(FovFrames), nameof(IsEmptyList));
                }
            }
        }
 private void CopyFrame(FovFrame frame)
 {
     EditFrame(frame.Copy());
 }
 private void CheckedFrame(FovFrame frame)
 {
     settings.Set("FovFrames", fovFrames);
     settings.Save();
     map.Invalidate();
 }