Beispiel #1
0
        private static void Draw(ReticleDefinition reticle, string baseName)
        {
            var canvas     = SvgCanvasFactory.Create("reticle", "2in", "2in");
            var controller = new ReticleDrawController(reticle, canvas);

            controller.DrawReticle();
            var svg = SvgCanvasFactory.ToSvg(canvas);

            XmlDocument xmlDocument = new XmlDocument();

            xmlDocument.LoadXml(svg);
            var      svgDocument = SvgDocument.Open(xmlDocument);
            var      bm          = svgDocument.Draw(1024, 1024);
            var      bm1         = new Bitmap(1024, 1024);
            Graphics g           = Graphics.FromImage(bm1);

            g.FillRectangle(Brushes.White, 0, 0, 1024, 1024);
            g.DrawImage(bm, 0, 0);
            bm1.Save($"{baseName}.png", ImageFormat.Png);
            xmlDocument.Save($"{baseName}.svg");

            xmlDocument = new XmlDocument();
            BallisticXmlSerializer serializer = new BallisticXmlSerializer(xmlDocument);

            xmlDocument.AppendChild(serializer.Serialize(reticle));
            xmlDocument.Save($"{baseName}.reticle");

            xmlDocument = new XmlDocument();
            xmlDocument.Load($"{baseName}.reticle");
            BallisticXmlDeserializer deserializer = new BallisticXmlDeserializer();

            _ = deserializer.Deserialize <ReticleDefinition>(xmlDocument.DocumentElement);
        }
Beispiel #2
0
        private static void Draw(ReticleDefinition reticle, string baseName, TrajectoryPoint[] trajectory)
        {
            const double svgWidth  = 10;
            double       svgHeight = Math.Round(reticle.Size.Y / reticle.Size.X * svgWidth, 2);

            var canvas     = SvgCanvasFactory.Create("reticle", $"{svgWidth}in", $"{svgHeight}in");
            var controller = new ReticleDrawController(reticle, canvas);

            controller.DrawReticle();
            controller.DrawBulletDropCompensator(trajectory, DistanceUnit.Yard.New(100), false, DistanceUnit.Yard, "black");
            var svg = SvgCanvasFactory.ToSvg(canvas);

            const int pngWidth  = 1024;
            int       pngHeight = (int)((reticle.Size.Y / reticle.Size.X) * pngWidth);

            XmlDocument xmlDocument = new XmlDocument();

            xmlDocument.LoadXml(svg);
            var      svgDocument = SvgDocument.Open(xmlDocument);
            var      bm          = svgDocument.Draw(pngWidth, pngHeight);
            var      bm1         = new Bitmap(pngWidth, pngHeight);
            Graphics g           = Graphics.FromImage(bm1);

            g.FillRectangle(Brushes.White, 0, 0, pngWidth, pngHeight);
            g.DrawImage(bm, 0, 0);
            bm1.Save($"{baseName}.png", ImageFormat.Png);
            xmlDocument.Save($"{baseName}.svg");

            xmlDocument = new XmlDocument();
            BallisticXmlSerializer serializer = new BallisticXmlSerializer(xmlDocument);

            xmlDocument.AppendChild(serializer.Serialize(reticle));
            xmlDocument.Save($"{baseName}.reticle");
        }
 public EditPathForm(ReticlePath path, ReticleDefinition reticle)
 {
     Path    = path;
     Copy    = path.Clone() as ReticlePath;
     Reticle = reticle;
     InitializeComponent();
     Setup();
 }
Beispiel #4
0
        private static void DrawGraphics(ReticleDefinition reticle, string baseName)
        {
            var bm1    = new Bitmap(1024, 1024);
            var canvas = GraphicsCanvas.FromImage(bm1, Color.White);

            canvas.Clear();
            var controller = new ReticleDrawController(reticle, canvas);

            controller.DrawReticle();
            bm1.Save($"{baseName}-a.png", ImageFormat.Png);
        }
        private static ReticleDefinition CreateReticle(double size = 10, double?zeroy = null)
        {
            var definition = new ReticleDefinition()
            {
                Name = "Test",
                Size = new ReticlePosition(size, size, AngularUnit.Mil),
                Zero = new ReticlePosition(size / 2, zeroy ?? (size / 2), AngularUnit.Mil)
            };

            return(definition);
        }
Beispiel #6
0
        private IEnumerable <ReticleElement> CalculateBdc(ReticleDefinition reticle, IEnumerable <TrajectoryPoint> trajectory, Measurement <DistanceUnit> zero, bool closeBdc, DistanceUnit distanceUnits, string color)
        {
            TrajectoryPoint previousPoint = null;

            foreach (var point in trajectory)
            {
                if (!closeBdc && point.Distance < zero)
                {
                    previousPoint = point;
                    continue;
                }
                if (closeBdc && point.Distance >= zero)
                {
                    break;
                }
                if (previousPoint != null)
                {
                    foreach (var bdcPoint in reticle.BulletDropCompensator)
                    {
                        if ((previousPoint.DropAdjustment >= bdcPoint.Position.Y &&
                             point.DropAdjustment <= bdcPoint.Position.Y) ||
                            (previousPoint.DropAdjustment <= bdcPoint.Position.Y &&
                             point.DropAdjustment >= bdcPoint.Position.Y))
                        {
                            var x = bdcPoint.Position.X + bdcPoint.TextOffset;
                            var y = bdcPoint.Position.Y - bdcPoint.TextHeight / 2;

                            yield return(new ReticleText()
                            {
                                Position = new ReticlePosition()
                                {
                                    X = x, Y = y
                                },
                                TextHeight = bdcPoint.TextHeight,
                                Text = Math.Round(point.Distance.In(distanceUnits)).ToString(),
                                Color = color,
                            });
                        }
                    }
                }
                previousPoint = point;
            }
        }
Beispiel #7
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="reticle">The reticle</param>
 /// <param name="canvas">The canvas</param>
 public ReticleDrawController(ReticleDefinition reticle, IReticleCanvas canvas)
 {
     mReticle    = reticle;
     mCanvas     = canvas;
     mTranslator = new CoordinateTranslator(reticle.Size.X, reticle.Size.Y, reticle.Zero.X, reticle.Zero.Y, canvas.Width, canvas.Height);
 }
        public void RoundTripReticleElements()
        {
            var reticle = new ReticleDefinition()
            {
                Size = new ReticlePosition(150, 175, AngularUnit.MOA),
                Name = "Test Reticle",
                Zero = new ReticlePosition(75, 100, AngularUnit.MOA)
            };

            reticle.BulletDropCompensator.Add(new ReticleBulletDropCompensatorPoint()
            {
                Position   = new ReticlePosition(0, -5, AngularUnit.MOA),
                TextOffset = AngularUnit.MOA.New(2),
            });

            reticle.Elements.Add(new ReticleLine()
            {
                Start     = new ReticlePosition(1, 2, AngularUnit.Mil),
                End       = new ReticlePosition(3, 4, AngularUnit.Mil),
                Color     = "gray",
                LineWidth = AngularUnit.Mil.New(1.5),
            });

            reticle.Elements.Add(new ReticleRectangle()
            {
                TopLeft   = new ReticlePosition(7, 8, AngularUnit.Mil),
                Size      = new ReticlePosition(0.5, 0.75, AngularUnit.Mil),
                Color     = "gray",
                Fill      = true,
                LineWidth = AngularUnit.Mil.New(1.5),
            });

            reticle.Elements.Add(new ReticleText()
            {
                Position   = new ReticlePosition(0, -7, AngularUnit.MOA),
                Text       = "Text",
                Color      = "black",
                TextHeight = AngularUnit.MOA.New(1),
            });

            reticle.Elements.Add(new ReticleCircle()
            {
                Center    = new ReticlePosition(5, 6, AngularUnit.MOA),
                Radius    = AngularUnit.MOA.New(1.5),
                Fill      = false,
                LineWidth = AngularUnit.MOA.New(0.25),
                Color     = "black",
            });

            SerializerRoundtrip serializer = new SerializerRoundtrip();
            var xml      = serializer.Serialize(reticle);
            var reticle2 = serializer.Deserialize <ReticleDefinition>(xml);

            reticle2.Should().NotBeNull();
            reticle2.Name.Should().Be("Test Reticle");
            reticle2.Size.X.Should().Be(AngularUnit.MOA.New(150));
            reticle2.Size.Y.Should().Be(AngularUnit.MOA.New(175));
            reticle2.Zero.X.Should().Be(AngularUnit.MOA.New(75));
            reticle2.Zero.Y.Should().Be(AngularUnit.MOA.New(100));

            reticle2.BulletDropCompensator.Should().HaveCount(1);
            reticle2.BulletDropCompensator[0].Position.X.Should().Be(AngularUnit.MOA.New(0));
            reticle2.BulletDropCompensator[0].Position.Y.Should().Be(AngularUnit.MOA.New(-5));
            reticle2.BulletDropCompensator[0].TextOffset.Should().Be(AngularUnit.MOA.New(2));

            reticle2.Elements.Should().HaveCount(4);

            reticle2.Elements[0].ElementType.Should().Be(ReticleElementType.Line);

            reticle2.Elements[1].ElementType.Should().Be(ReticleElementType.Rectangle);

            reticle2.Elements[2].ElementType.Should().Be(ReticleElementType.Text);

            reticle2.Elements[3].ElementType.Should().Be(ReticleElementType.Circle);
        }
Beispiel #9
0
        private static void TestShapes()
        {
            var reticle = new ReticleDefinition()
            {
                Name = "Test",
                Size = new ReticlePosition(10, 10, AngularUnit.Mil),
                Zero = new ReticlePosition(5, 5, AngularUnit.Mil)
            };

            //test path 1
            var path = new ReticlePath()
            {
                Color = "red",
                Fill  = true,
            };

            path.Elements.Add(new ReticlePathElementMoveTo()
            {
                Position = new ReticlePosition(-2.5, 0, AngularUnit.Mil),
            });

            path.Elements.Add(new ReticlePathElementLineTo()
            {
                Position = new ReticlePosition(0, 1, AngularUnit.Mil),
            });

            path.Elements.Add(new ReticlePathElementLineTo()
            {
                Position = new ReticlePosition(2.5, 0, AngularUnit.Mil),
            });

            path.Elements.Add(new ReticlePathElementArc()
            {
                Position           = new ReticlePosition(-2.5, 0, AngularUnit.Mil),
                ClockwiseDirection = false,
                MajorArc           = true,
                Radius             = AngularUnit.Mil.New(2.5)
            });

            reticle.Elements.Add(path);

            reticle.Elements.Add(new ReticleLine()
            {
                Start     = new ReticlePosition(-1, 0, AngularUnit.Mil),
                End       = new ReticlePosition(1, 0, AngularUnit.Mil),
                LineWidth = AngularUnit.Mil.New(0.1),
                Color     = "blue",
            });

            reticle.Elements.Add(new ReticleLine()
            {
                Start     = new ReticlePosition(0, -1, AngularUnit.Mil),
                End       = new ReticlePosition(0, 1, AngularUnit.Mil),
                LineWidth = AngularUnit.Mil.New(0.1),
                Color     = "blue",
            });

            reticle.Elements.Add(new ReticleText()
            {
                Position   = new ReticlePosition(0, 0, AngularUnit.Mil),
                TextHeight = AngularUnit.Mil.New(0.25),
                Color      = "black",
                Text       = "Test Text",
            });

            Draw(reticle, "test");
        }