private void DrawOn2DControlTopDownViewWithUnits(float?minHeight, float?maxHeight, Color color)
        {
            List <TriangleDataModel> triangles  = GetFilteredTriangles();
            List <(int x, int z)>    unitPoints = triangles.ConvertAll(triangle =>
            {
                int xMin = (int)Math.Max(triangle.GetMinX(), Config.MapGraphics.MapViewXMin - 1);
                int xMax = (int)Math.Min(triangle.GetMaxX(), Config.MapGraphics.MapViewXMax + 1);
                int zMin = (int)Math.Max(triangle.GetMinZ(), Config.MapGraphics.MapViewZMin - 1);
                int zMax = (int)Math.Min(triangle.GetMaxZ(), Config.MapGraphics.MapViewZMax + 1);

                List <(int x, int z)> points = new List <(int x, int z)>();
                for (int x = xMin; x <= xMax; x++)
                {
                    for (int z = zMin; z <= zMax; z++)
                    {
                        float?y = triangle.GetTruncatedHeightOnTriangleIfInsideTriangle(x, z);
                        if (y.HasValue &&
                            (!minHeight.HasValue || y.Value >= minHeight.Value) &&
                            (!maxHeight.HasValue || y.Value <= maxHeight.Value))
                        {
                            points.Add((x, z));
                        }
                    }
                }
                return(points);
            }).SelectMany(points => points).Distinct().ToList();

            List <List <(float x, float y, float z)> > quadList           = MapUtilities.ConvertUnitPointsToQuads(unitPoints);
            List <List <(float x, float z)> >          quadListForControl =
                quadList.ConvertAll(quad => quad.ConvertAll(
                                        vertex => MapUtilities.ConvertCoordsForControlTopDownView(vertex.x, vertex.z)));

            GL.BindTexture(TextureTarget.Texture2D, -1);
            GL.MatrixMode(MatrixMode.Modelview);
            GL.LoadIdentity();

            // Draw quad
            GL.Color4(color.R, color.G, color.B, OpacityByte);
            GL.Begin(PrimitiveType.Quads);
            foreach (List <(float x, float z)> quad in quadListForControl)
            {
                foreach ((float x, float z) in quad)
                {
                    GL.Vertex2(x, z);
                }
            }
            GL.End();

            // Draw outline
            if (OutlineWidth != 0)
            {
                GL.Color4(OutlineColor.R, OutlineColor.G, OutlineColor.B, (byte)255);
                GL.LineWidth(OutlineWidth);
                foreach (List <(float x, float z)> quad in quadListForControl)
                {
                    GL.Begin(PrimitiveType.LineLoop);
                    foreach ((float x, float z) in quad)
                    {
                        GL.Vertex2(x, z);
                    }
                    GL.End();
                }
            }

            GL.Color4(1, 1, 1, 1.0f);
        }