CreateGrid() public static method

public static CreateGrid ( List polygon, double altitude, double distance, double spacing, double angle, double overshoot1, double overshoot2, StartPosition startpos, bool shutter, float minLaneSeparation, float leadin ) : List
polygon List
altitude double
distance double
spacing double
angle double
overshoot1 double
overshoot2 double
startpos StartPosition
shutter bool
minLaneSeparation float
leadin float
return List
Example #1
0
        private void domainUpDown1_ValueChanged(object sender, EventArgs e)
        {
            if (CMB_camera.Text != "")
            {
                doCalc();
            }

            // new grid system test
            List <PointLatLngAlt> list = new List <PointLatLngAlt>();

            plugin.Host.FPDrawnPolygon.Points.ForEach(x => { list.Add(x); });

            grid = Grid.CreateGrid(list, (double)NUM_altitude.Value, (double)NUM_Distance.Value, (double)NUM_spacing.Value, (double)NUM_angle.Value, (double)NUM_overshoot.Value, (double)NUM_overshoot2.Value, (Grid.StartPosition)Enum.Parse(typeof(Grid.StartPosition), CMB_startfrom.Text), false);

            List <PointLatLng> list2 = new List <PointLatLng>();

            grid.ForEach(x => { list2.Add(x); });

            map.HoldInvalidation = true;

            layerpolygons.Polygons.Clear();
            layerpolygons.Markers.Clear();

            if (grid.Count == 0)
            {
                return;
            }

            if (chk_boundary.Checked)
            {
                AddDrawPolygon();
            }

            int            strips    = 0;
            int            images    = 0;
            int            a         = 1;
            PointLatLngAlt prevpoint = grid[0];

            foreach (var item in grid)
            {
                if (item.Tag == "M")
                {
                    images++;

                    if (chk_internals.Checked)
                    {
                        layerpolygons.Markers.Add(new GMarkerGoogle(item, GMarkerGoogleType.green)
                        {
                            ToolTipText = a.ToString(), ToolTipMode = MarkerTooltipMode.OnMouseOver
                        });
                        a++;
                    }
                    try
                    {
                        if (TXT_fovH.Text != "")
                        {
                            double fovh = double.Parse(TXT_fovH.Text);
                            double fovv = double.Parse(TXT_fovV.Text);

                            double startangle = 0;

                            if (!CHK_camdirection.Checked)
                            {
                                startangle = 90;
                            }

                            double angle1 = startangle - (Math.Tan((fovv / 2.0) / (fovh / 2.0)) * rad2deg);
                            double dist1  = Math.Sqrt(Math.Pow(fovh / 2.0, 2) + Math.Pow(fovv / 2.0, 2));

                            double bearing = (double)NUM_angle.Value;// (prevpoint.GetBearing(item) + 360.0) % 360;

                            List <PointLatLng> footprint = new List <PointLatLng>();
                            footprint.Add(item.newpos(bearing + angle1, dist1));
                            footprint.Add(item.newpos(bearing + 180 - angle1, dist1));
                            footprint.Add(item.newpos(bearing + 180 + angle1, dist1));
                            footprint.Add(item.newpos(bearing - angle1, dist1));

                            GMapPolygon poly = new GMapPolygon(footprint, a.ToString());
                            poly.Stroke.Color = Color.FromArgb(250 - ((a * 5) % 240), 250 - ((a * 3) % 240), 250 - ((a * 9) % 240));
                            poly.Stroke.Width = 1;
                            poly.Fill         = new SolidBrush(Color.FromArgb(40, Color.Purple));
                            if (chk_footprints.Checked)
                            {
                                layerpolygons.Polygons.Add(poly);
                            }
                        }
                    }
                    catch { }
                }
                else
                {
                    strips++;
                    if (chk_markers.Checked)
                    {
                        layerpolygons.Markers.Add(new GMarkerGoogle(item, GMarkerGoogleType.green)
                        {
                            ToolTipText = a.ToString(), ToolTipMode = MarkerTooltipMode.Always
                        });
                    }

                    a++;
                }
                prevpoint = item;
            }

            // add wp polygon
            wppoly = new GMapPolygon(list2, "Grid");
            wppoly.Stroke.Color = Color.Yellow;
            wppoly.Fill         = Brushes.Transparent;
            wppoly.Stroke.Width = 4;
            if (chk_grid.Checked)
            {
                layerpolygons.Polygons.Add(wppoly);
            }

            Console.WriteLine("Poly Dist " + wppoly.Distance);

            lbl_area.Text = calcpolygonarea(plugin.Host.FPDrawnPolygon.Points).ToString("#") + " m^2";

            lbl_distance.Text = wppoly.Distance.ToString("0.##") + " km";

            lbl_spacing.Text = NUM_spacing.Value.ToString("#") + " m";

            lbl_grndres.Text = TXT_cmpixel.Text;

            lbl_pictures.Text = images.ToString();

            lbl_strips.Text           = ((int)(strips / 2)).ToString();
            lbl_distbetweenlines.Text = NUM_Distance.Value.ToString("0.##") + " m";

            lbl_footprint.Text = TXT_fovH.Text + " x " + TXT_fovV.Text + " m";

            map.HoldInvalidation = false;

            map.ZoomAndCenterMarkers("polygons");
        }
Example #2
0
        private void domainUpDown1_ValueChanged(object sender, EventArgs e)
        {
            if (CMB_camera.Text != "")
            {
                doCalc();
            }

            // new grid system test

            grid = Grid.CreateGrid(list, (double)NUM_altitude.Value, (double)NUM_Distance.Value, (double)NUM_spacing.Value, (double)NUM_angle.Value, (double)NUM_overshoot.Value, (double)NUM_overshoot2.Value, (Grid.StartPosition)Enum.Parse(typeof(Grid.StartPosition), CMB_startfrom.Text), false);

            List <PointLatLng> list2 = new List <PointLatLng>();

            List <PointLatLng> endline = new List <PointLatLng>();

            int count   = grid.Count;
            int counter = 0;

            grid.ForEach(x => {
                counter++;
                if (counter == 1)
                {
                    endline.Add(x);
                }

                if (counter == count)
                {
                    endline.Add(x);
                }

                list2.Add(x);
            });

            map.HoldInvalidation = true;

            routesOverlay.Routes.Clear();
            routesOverlay.Polygons.Clear();
            routesOverlay.Markers.Clear();
            endlineOverlay.Routes.Clear();

            if (grid.Count == 0)
            {
                return;
            }

            if (chk_boundary.Checked)
            {
                AddDrawPolygon();
            }

            int            strips    = 0;
            int            images    = 0;
            int            a         = 1;
            PointLatLngAlt prevpoint = grid[0];

            foreach (var item in grid)
            {
                if (item.Tag == "M")
                {
                    images++;

                    if (chk_internals.Checked)
                    {
                        routesOverlay.Markers.Add(new GMarkerGoogle(item, GMarkerGoogleType.green)
                        {
                            ToolTipText = a.ToString(), ToolTipMode = MarkerTooltipMode.OnMouseOver
                        });
                        a++;
                    }
                    try
                    {
                        if (TXT_fovH.Text != "")
                        {
                            double fovh = double.Parse(TXT_fovH.Text);
                            double fovv = double.Parse(TXT_fovV.Text);

                            double startangle = 0;

                            if (!CHK_camdirection.Checked)
                            {
                                startangle = 90;
                            }

                            double angle1 = startangle - (Math.Tan((fovv / 2.0) / (fovh / 2.0)) * rad2deg);
                            double dist1  = Math.Sqrt(Math.Pow(fovh / 2.0, 2) + Math.Pow(fovv / 2.0, 2));

                            double bearing = (double)NUM_angle.Value;// (prevpoint.GetBearing(item) + 360.0) % 360;

                            List <PointLatLng> footprint = new List <PointLatLng>();
                            footprint.Add(item.newpos(bearing + angle1, dist1));
                            footprint.Add(item.newpos(bearing + 180 - angle1, dist1));
                            footprint.Add(item.newpos(bearing + 180 + angle1, dist1));
                            footprint.Add(item.newpos(bearing - angle1, dist1));

                            GMapPolygon poly = new GMapPolygon(footprint, a.ToString());
                            poly.Stroke = new Pen(Color.FromArgb(250 - ((a * 5) % 240), 250 - ((a * 3) % 240), 250 - ((a * 9) % 240)), 1);
                            poly.Fill   = new SolidBrush(Color.FromArgb(40, Color.Purple));
                            if (chk_footprints.Checked)
                            {
                                routesOverlay.Polygons.Add(poly);
                            }
                        }
                    }
                    catch { }
                }
                else
                {
                    strips++;
                    if (chk_markers.Checked)
                    {
                        routesOverlay.Markers.Add(new GMarkerGoogle(item, GMarkerGoogleType.green)
                        {
                            ToolTipText = a.ToString(), ToolTipMode = MarkerTooltipMode.Always
                        });
                    }

                    a++;
                }
                prevpoint = item;
            }

            GMapRoute wproute = new GMapRoute(list2, "GridRoute");

            wproute.Stroke = new Pen(Color.Yellow, 4);
            if (chk_grid.Checked)
            {
                routesOverlay.Routes.Add(wproute);
            }

            // Uncomment the lines below to add line between first and last point
            // If it is decided that omitting the line is permanent delete below and clean up anywhere "endline" is found

            //GMapRoute wproute_endline = new GMapRoute(endline, "GridRoute_EndLine");
            //wproute_endline.Stroke = new Pen(Color.White, 1);
            //wproute_endline.Stroke.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
            //if (chk_grid.Checked)
            //    endlineOverlay.Routes.Add(wproute_endline);

            // Update Stats
            if (DistUnits == "Feet")
            {
                // Area
                float area = (float)calcpolygonarea(list) * 10.7639f; // Calculate the area in square feet
                lbl_area.Text = area.ToString("#") + " ft^2";
                if (area < 21780f)
                {
                    lbl_area.Text = area.ToString("#") + " ft^2";
                }
                else
                {
                    area = area / 43560f;
                    if (area < 640f)
                    {
                        lbl_area.Text = area.ToString("0.##") + " acres";
                    }
                    else
                    {
                        area          = area / 640f;
                        lbl_area.Text = area.ToString("0.##") + " miles^2";
                    }
                }

                // Distance
                float distance = (float)wproute.Distance * 3280.84f; // Calculate the distance in feet
                if (distance < 5280f)
                {
                    lbl_distance.Text = distance.ToString("#") + " ft";
                }
                else
                {
                    distance          = distance / 5280f;
                    lbl_distance.Text = distance.ToString("0.##") + " miles";
                }

                lbl_spacing.Text          = (NUM_spacing.Value * 3.2808399m).ToString("#") + " ft";
                lbl_grndres.Text          = inchpixel;
                lbl_distbetweenlines.Text = (NUM_Distance.Value * 3.2808399m).ToString("0.##") + " ft";
                lbl_footprint.Text        = feet_fovH + " x " + feet_fovV + " ft";
            }
            else
            {
                // Meters
                lbl_area.Text             = calcpolygonarea(list).ToString("#") + " m^2";
                lbl_distance.Text         = wproute.Distance.ToString("0.##") + " km";
                lbl_spacing.Text          = NUM_spacing.Value.ToString("#") + " m";
                lbl_grndres.Text          = TXT_cmpixel.Text;
                lbl_distbetweenlines.Text = NUM_Distance.Value.ToString("0.##") + " m";
                lbl_footprint.Text        = TXT_fovH.Text + " x " + TXT_fovV.Text + " m";
            }

            lbl_pictures.Text = images.ToString();
            lbl_strips.Text   = ((int)(strips / 2)).ToString();
            double seconds = ((wproute.Distance * 1000.0) / ((double)numericUpDownFlySpeed.Value * 0.8));

            // reduce flying speed by 20 %
            label28.Text         = secondsToNice(seconds);
            seconds              = ((wproute.Distance * 1000.0) / ((double)numericUpDownFlySpeed.Value));
            label32.Text         = secondsToNice(((double)NUM_spacing.Value / (double)numericUpDownFlySpeed.Value));
            map.HoldInvalidation = false;
            if (!isMouseDown)
            {
                map.ZoomAndCenterMarkers("routes");
            }
        }
Example #3
0
        private void domainUpDown1_ValueChanged(object sender, EventArgs e)
        {
            if (CMB_camera.Text != "")
            {
                doCalc();
            }

            // new grid system test
            if (boxpoly == null || boxpoly.Points == null || boxpoly.Points.Count == 0)
            {
                return;
            }

            var newlist = new List <PointLatLngAlt>();

            boxpoly.Points.ForEach(x => { newlist.Add(x); });

            grid = Grid.CreateGrid(newlist, (double)NUM_altitude.Value, (double)NUM_Distance, (double)NUM_spacing, (double)NUM_angle.Value, 0, 0, Grid.StartPosition.左上, false, 0);

            List <PointLatLng> list2 = new List <PointLatLng>();

            grid.ForEach(x => { list2.Add(x); });

            map.HoldInvalidation = true;

            layerpolygons.Polygons.Clear();
            layerpolygons.Markers.Clear();

            layerpolygons.Polygons.Add(boxpoly);

            if (grid.Count == 0)
            {
                return;
            }

            // if (chk_boundary.Checked)
            //      AddDrawPolygon();

            int            strips    = 0;
            int            images    = 0;
            int            a         = 1;
            PointLatLngAlt prevpoint = grid[0];

            foreach (var item in grid)
            {
                if (item.Tag == "M")
                {
                    images++;

                    if (chk_internals.Checked)
                    {
                        layerpolygons.Markers.Add(new GMarkerGoogle(item, GMarkerGoogleType.green)
                        {
                            ToolTipText = a.ToString(), ToolTipMode = MarkerTooltipMode.OnMouseOver
                        });
                        a++;
                    }
                    try
                    {
                        if (TXT_fovH != "")
                        {
                            double fovh = double.Parse(TXT_fovH);
                            double fovv = double.Parse(TXT_fovV);

                            double startangle = 0;

                            if (!RAD_camdirectionland.Checked)
                            {
                                startangle = 90;
                            }

                            double angle1 = startangle - (Math.Tan((fovv / 2.0) / (fovh / 2.0)) * rad2deg);
                            double dist1  = Math.Sqrt(Math.Pow(fovh / 2.0, 2) + Math.Pow(fovv / 2.0, 2));

                            double bearing = (double)NUM_angle.Value;// (prevpoint.GetBearing(item) + 360.0) % 360;

                            List <PointLatLng> footprint = new List <PointLatLng>();
                            footprint.Add(item.newpos(bearing + angle1, dist1));
                            footprint.Add(item.newpos(bearing + 180 - angle1, dist1));
                            footprint.Add(item.newpos(bearing + 180 + angle1, dist1));
                            footprint.Add(item.newpos(bearing - angle1, dist1));

                            GMapPolygon poly = new GMapPolygon(footprint, a.ToString());
                            poly.Stroke.Color = Color.FromArgb(250 - ((a * 5) % 240), 250 - ((a * 3) % 240), 250 - ((a * 9) % 240));
                            poly.Stroke.Width = 1;
                            poly.Fill         = new SolidBrush(Color.FromArgb(40, Color.Purple));
                            if (chk_footprints.Checked)
                            {
                                layerpolygons.Polygons.Add(poly);
                            }
                        }
                    }
                    catch { }
                }
                else
                {
                    strips++;
                    if (chk_markers.Checked)
                    {
                        layerpolygons.Markers.Add(new GMarkerGoogle(item, GMarkerGoogleType.green)
                        {
                            ToolTipText = a.ToString(), ToolTipMode = MarkerTooltipMode.Always
                        });
                    }

                    a++;
                }
                prevpoint = item;
            }

            // add wp polygon
            wppoly = new GMapPolygon(list2, "Grid");
            wppoly.Stroke.Color = Color.Yellow;
            wppoly.Fill         = Brushes.Transparent;
            wppoly.Stroke.Width = 4;
            if (chk_grid.Checked)
            {
                layerpolygons.Polygons.Add(wppoly);
            }

            Console.WriteLine("Poly Dist " + wppoly.Distance);

            quickViewarea.number = calcpolygonarea(list) / (1000.0 * 1000.0);

            lbl_distance.Text = wppoly.Distance.ToString("0.##") + " km";

            lbl_spacing.Text = NUM_spacing.ToString("#") + " m";

            quickViewgroundres.number = TXT_cmpixel;

            quickViewimagecount.number = images;

            lbl_strips.Text           = ((int)(strips / 2)).ToString();
            lbl_distbetweenlines.Text = NUM_Distance.ToString("0.##") + " m";

            lbl_footprint.Text = TXT_fovH + " x " + TXT_fovV + " m";

            double seconds = ((wppoly.Distance * 1000.0) / ((double)numericUpDownFlySpeed.Value * 0.8));

            // reduce flying speed by 20 %
            label28.Text = secondsToNice(seconds);

            quickViewflighttime.number = seconds / 60.0;

            seconds = ((wppoly.Distance * 1000.0) / ((double)numericUpDownFlySpeed.Value));

            label32.Text = secondsToNice(((double)NUM_spacing / (double)numericUpDownFlySpeed.Value));

            map.HoldInvalidation = false;

            map.ZoomAndCenterMarkers("polygons");
        }
Example #4
0
        private void domainUpDown1_ValueChanged(object sender, EventArgs e)
        {
            if (CMB_camera.Text != "")
            {
                doCalc();
            }

            // new grid system test
            List <PointLatLngAlt> list = new List <PointLatLngAlt>();

            plugin.Host.FPDrawnPolygon.Points.ForEach(x => { list.Add(x); });

            grid = Grid.CreateGrid(list, (double)NUM_altitude.Value, (double)NUM_Distance.Value, (double)NUM_spacing.Value, (double)NUM_angle.Value, (double)NUM_overshoot.Value, (double)NUM_overshoot2.Value, (Grid.StartPosition)Enum.Parse(typeof(Grid.StartPosition), CMB_startfrom.Text), false);

            List <PointLatLng> list2 = new List <PointLatLng>();

            grid.ForEach(x => { list2.Add(x); });

            map.HoldInvalidation = true;

            layerpolygons.Polygons.Clear();
            layerpolygons.Markers.Clear();

            AddDrawPolygon();

            int            a         = 1;
            PointLatLngAlt prevpoint = grid[0];

            foreach (var item in grid)
            {
                if (item.Tag == "M")
                {
                    layerpolygons.Markers.Add(new GMapMarkerGoogleGreen(item)
                    {
                        ToolTipText = a.ToString(), ToolTipMode = MarkerTooltipMode.OnMouseOver
                    });
                    try
                    {
                        if (TXT_fovH.Text != "")
                        {
                            float fovh = float.Parse(TXT_fovH.Text);
                            float fovv = float.Parse(TXT_fovV.Text);

                            float startangle = 0;

                            if (!CHK_camdirection.Checked)
                            {
                                startangle = 90;
                            }

                            float angle1 = startangle - (float)(Math.Tan((fovv / 2) / (fovh / 2)) * rad2deg);
                            float dist1  = (float)Math.Sqrt(Math.Pow(fovh / 2, 2) + Math.Pow(fovv / 2, 2));

                            float bearing = (float)prevpoint.GetBearing(item);

                            List <PointLatLng> footprint = new List <PointLatLng>();
                            footprint.Add(item.newpos(bearing + angle1, dist1));
                            footprint.Add(item.newpos(bearing + 180 - angle1, dist1));
                            footprint.Add(item.newpos(bearing + 180 + angle1, dist1));
                            footprint.Add(item.newpos(bearing - angle1, dist1));

                            GMapPolygon poly = new GMapPolygon(footprint, a.ToString());
                            poly.Stroke.Color = Color.FromArgb(250 - ((a * 5) % 240), 250 - ((a * 3) % 240), 250 - ((a * 9) % 240));
                            poly.Stroke.Width = 2;
                            layerpolygons.Polygons.Add(poly);
                        }
                    }
                    catch { }
                }
                else
                {
                    layerpolygons.Markers.Add(new GMapMarkerGoogleGreen(item)
                    {
                        ToolTipText = a.ToString(), ToolTipMode = MarkerTooltipMode.Always
                    });
                }
                prevpoint = item;
                a++;
            }

            // add wp polygon
            wppoly = new GMapPolygon(list2, "Grid");
            layerpolygons.Polygons.Add(wppoly);
            wppoly.Stroke.Color = Color.Yellow;
            wppoly.Stroke.Width = 4;

            Console.WriteLine("Poly Dist " + wppoly.Distance);

            map.HoldInvalidation = false;

            map.ZoomAndCenterMarkers("polygons");
        }