Exemple #1
0
		public SetIterator(GridSet<T> _set)
		{
			set = _set;
			posIterator = new Vector2i.Iterator(set.grid.SizeXY());
			cellIterator = new CellIterator();
			reset = true;
		}
Exemple #2
0
        public void CoordToEnvelope_InvalidZ_throws()
        {
            GridSet g = new GridSet(
                "test",
                "epsg:test",
                new Envelope(0, 0, 100, 100),
                new List<double>() { 10, 5, 2.5 },
                10,
                10
            );

            g.CoordToEnvelope(new Coord(3, 0, 0));
        }
Exemple #3
0
        void ComputeDisabledValue(bool linear, GridSet gridSet, ref int count, ref double start,
                                  ref double step, ref double stop)
        {
            // validators prevent divide by zero errors and negative log errors from occurring below
            switch (gridSet)
            {
            case GridSet.AllButCount:
                if (linear)
                {
                    count = 1 + (int)(0.5 + (stop - start) / step);
                }
                else
                {
                    count = 1 + (int)((Math.Log(stop) - Math.Log(start)) / Math.Log(step));
                }
                break;

            case GridSet.AllButStart:
                if (linear)
                {
                    start = stop - (count - 1.0) * step;
                }
                else
                {
                    start = Math.Exp(Math.Log(stop) - (count - 1.0) * Math.Log(step));
                }
                break;

            case GridSet.AllButStep:
                if (linear)
                {
                    step = (stop - start) / (count - 1.0);
                }
                else
                {
                    step = Math.Exp((Math.Log(stop) - Math.Log(start)) / (count - 1.0));
                }
                break;

            case GridSet.AllButStop:
                if (linear)
                {
                    stop = start + (count - 1.0) * step;
                }
                else
                {
                    stop = Math.Exp(Math.Log(start) + (count - 1.0) * Math.Log(step));
                }
                break;
            }
        }
Exemple #4
0
        public void CoordToEnvelope_SimpleGridsetTopOrgin_ReturnsEnvelope()
        {
            GridSet g = new GridSet(
                "test",
                "epsg:test",
                new Envelope(0, 0, 100, 100),
                new List<double>() { 10, 5, 2.5 },
                10,
                10
            );

            Envelope expected = new Envelope(0, 0, 100, 100);
            Assert.IsTrue(expected.Equals(g.CoordToEnvelope(new Coord(0, 0, 0, true))));

            expected = new Envelope(0, 0, 50, 50);
            Assert.IsTrue(expected.Equals(g.CoordToEnvelope(new Coord(1, 0, 1, true))));

            expected = new Envelope(75, 75, 100, 100);
            Assert.IsTrue(expected.Equals(g.CoordToEnvelope(new Coord(2, 3, 0, true))));
        }
Exemple #5
0
        private void CommonInit()
        {
            Groups = new Group.GroupSet(this);

            IsPaused = new Stat <bool, Map>(this, false);

            pathingGraph = new Graph(this);
            pathing      = new Pathfinding.PathFinder <Vector2i>(pathingGraph, null);

            unitsByPos = new GridSet <Unit>(Tiles.Dimensions);

            //When the tile grid changes size, reset "unitsByPos".
            Tiles.OnTileGridReset += (grid, oldSize, newSize) =>
            {
                unitsByPos = new GridSet <Unit>(newSize);
                foreach (Unit u in units)
                {
                    unitsByPos.AddValue(u, u.Pos);
                }
            };
        }
Exemple #6
0
        public void ReadData(MyData.Reader reader)
        {
            Clear();

            reader.Structure(Tiles, "tiles");
            unitsByPos = new GridSet <Unit>(Tiles.Dimensions);

            nextID = reader.UInt64("nextID");

            reader.Structure(Groups, "groups");
            reader.Collection("units",
                              (MyData.Reader rd, ref Unit outUnit, string name) =>
                              outUnit = Unit.Read(rd, this, name),
                              (size) => units);

            foreach (Unit u in units)
            {
                AddUnit(u);
            }
            foreach (Group g in Groups)
            {
                g.FinishDeserialization();
            }
        }
        public void LoadSettings()
        {
            sessionsSettings.initialDigitizeState = Settings.Default.SESSIONS_INITIALDIGITZESTATE;

            coordSettings.frame = Settings.Default.COORD_FRAME;
            coordSettings.xThetaScale = Settings.Default.COORD_XTHETASCALE;
            coordSettings.yRScale = Settings.Default.COORD_YRSCALE;
            coordSettings.thetaUnits = Settings.Default.COORD_THETAUNITS;

            exportSettings.pointsSelection = Settings.Default.EXPORT_POINTSSELECTION;
            exportSettings.layout = Settings.Default.EXPORT_LAYOUT;
            exportSettings.delimiters = Settings.Default.EXPORT_DELIMITERS;
            exportSettings.header = Settings.Default.EXPORT_HEADER;

            viewFileToolbar = Settings.Default.VIEW_FILETOOLBAR;
            viewSelectToolbar = Settings.Default.VIEW_SELECTTOOLBAR;
            viewImageScaleToolbar = Settings.Default.VIEW_IMAGESCALETOOLBAR;
            viewDigitizeCurvePointsToolbar = Settings.Default.VIEW_DIGITIZECURVEPOINTSTOOLBAR;
            viewDigitizeMeasurePointsToolbar = Settings.Default.VIEW_DIGITIZEMEASUREPOINTSTOOLBAR;
            viewZoomToolbar = Settings.Default.VIEW_ZOOMTOOLBAR;
            viewStatusBar = Settings.Default.VIEW_STATUSBAR;
            viewPoints = Settings.Default.VIEW_POINTS;
            viewBackground = Settings.Default.VIEW_BACKGROUND;
            viewCurveGeometry = Settings.Default.VIEW_CURVEGEOMETRY;
            viewMeasureGeometry = Settings.Default.VIEW_MEASUREGEOMETRY;

            powerMostSigMax = Settings.Default.MATH_POWERMOSTSIGMAX;
            powerMostSigMin = Settings.Default.MATH_POWERMOSTSIGMIN;
            doubleMin = Settings.Default.MATH_DOUBLEMIN;
            maxCommands = Settings.Default.MATH_MAXCOMMANDS;

            windowCurveSize.Width = Settings.Default.WINDOW_CURVE_WIDTH;
            windowCurveSize.Height = Settings.Default.WINDOW_CURVE_HEIGHT;
            windowCurvePosition.X = Settings.Default.WINDOW_CURVE_X;
            windowCurvePosition.Y = Settings.Default.WINDOW_CURVE_Y;

            windowMainSize.Width = Settings.Default.WINDOW_MAIN_WIDTH;
            windowMainSize.Height = Settings.Default.WINDOW_MAIN_HEIGHT;
            windowMainPosition.X = Settings.Default.WINDOW_MAIN_X;
            windowMainPosition.Y = Settings.Default.WINDOW_MAIN_Y;
            windowMainFontOverride = Settings.Default.WINDOW_MAIN_FONT_OVERRIDE;
            windowMainFontName = Settings.Default.WINDOW_MAIN_FONT_NAME;
            windowMainFontSize = Settings.Default.WINDOW_MAIN_FONT_SIZE;

            windowMeasureSize.Width = Settings.Default.WINDOW_MEASURE_WIDTH;
            windowMeasureSize.Height = Settings.Default.WINDOW_MEASURE_HEIGHT;
            windowMeasurePosition.X = Settings.Default.WINDOW_MEASURE_X;
            windowMeasurePosition.Y = Settings.Default.WINDOW_MEASURE_Y;

            segmentPointMinSeparation = Settings.Default.SEGMENT_POINTMINSEPARATION;
            segmentSettings.minPoints = Settings.Default.SEGMENT_MINPOINTS;
            segmentSettings.pointSeparation = Settings.Default.SEGMENT_POINTDEFAULTSEPARATION;
            segmentSettings.fillCorners = Settings.Default.SEGMENT_FILLCORNERS;
            segmentSettings.lineSize = Settings.Default.SEGMENT_LINESIZE;
            segmentSettings.lineColor = Settings.Default.SEGMENT_LINECOLOR;

            gridRemovalSettings.gridMesh.gridSetX = Settings.Default.GRID_REMOVAL_GRIDSETX;
            gridRemovalSettings.gridMesh.gridSetY = Settings.Default.GRID_REMOVAL_GRIDSETY;
            gridRemovalSettings.thinThickness = Settings.Default.GRID_REMOVAL_THINTHICKNESS;
            gridRemovalSettings.gridDistance = Settings.Default.GRID_REMOVAL_GRIDDISTANCE;
            gridRemovalSettings.color = Settings.Default.GRID_REMOVAL_COLOR;
            gridRemovalSettings.gapSeparation = Settings.Default.GRID_REMOVAL_GAPSEPARATION;
            gridRemovalSettings.foregroundThresholdLow = Settings.Default.GRID_REMOVAL_FOREGROUNDTHRESHOLDLOW;
            gridRemovalSettings.foregroundThresholdHigh = Settings.Default.GRID_REMOVAL_FOREGROUNDTHRESHOLDHIGH;

            gridDisplayGridSetX = Settings.Default.GRID_DISPLAY_GRIDSETX;
            gridDisplayGridSetY = Settings.Default.GRID_DISPLAY_GRIDSETY;

            pointMatchHighlightDiameter = Settings.Default.POINTMATCH_HIGHLIGHTDIAMETER;
            pointMatchHighlightLineSize = Settings.Default.POINTMATCH_HIGHLIGHTLINESIZE;
            pointMatchSettings.pointSeparation = Settings.Default.POINTMATCH_SEPARATIONDEFAULT;
            pointMatchSettings.pointSize = Settings.Default.POINTMATCH_SIZEDEFAULT;
            pointMatchSettings.acceptedColor = Settings.Default.POINTMATCH_ACCEPTEDCOLOR;
            pointMatchSettings.rejectedColor = Settings.Default.POINTMATCH_REJECTEDCOLOR;

            discretizeSettings.discretizeMethod = Settings.Default.DISCRETIZE_METHODDEFAULT;
            discretizeSettings.intensityThresholdLow = Settings.Default.DISCRETIZE_INTENSITY_THRESHOLDLOW;
            discretizeSettings.intensityThresholdHigh = Settings.Default.DISCRETIZE_INTENSITY_THRESHOLDHIGH;
            discretizeSettings.foregroundThresholdLow = Settings.Default.DISCRETIZE_FOREGROUND_THRESHOLDLOW;
            discretizeSettings.foregroundThresholdHigh = Settings.Default.DISCRETIZE_FOREGROUND_THRESHOLDHIGH;
            discretizeSettings.hueThresholdLow = Settings.Default.DISCRETIZE_HUE_THRESHOLDLOW;
            discretizeSettings.hueThresholdHigh = Settings.Default.DISCRETIZE_HUE_THRESHOLDHIGH;
            discretizeSettings.saturationThresholdLow = Settings.Default.DISCRETIZE_SATURATION_THRESHOLDLOW;
            discretizeSettings.saturationThresholdHigh = Settings.Default.DISCRETIZE_SATURATION_THRESHOLDHIGH;
            discretizeSettings.valueThresholdLow = Settings.Default.DISCRETIZE_VALUE_THRESHOLDLOW;
            discretizeSettings.valueThresholdHigh = Settings.Default.DISCRETIZE_VALUE_THRESHOLDHIGH;

            axesStyle.pointShape = Settings.Default.POINTSET_AXES_POINTSHAPE;
            axesStyle.pointSize = Settings.Default.POINTSET_AXES_POINTSIZE;
            axesStyle.pointLineSize = Settings.Default.POINTSET_AXES_POINTLINESIZE;
            axesStyle.pointLineColor = Settings.Default.POINTSET_AXES_POINTLINECOLOR;
            axesStyle.pointInColor = Settings.Default.POINTSET_AXES_POINTINCOLOR;
            axesStyle.lineSize = Settings.Default.POINTSET_AXES_LINESIZE;
            axesStyle.lineColor = Settings.Default.POINTSET_AXES_LINECOLOR;
            axesStyle.lineConnectAs = Settings.Default.POINTSET_AXES_LINECONNECTAS;

            scaleStyle.pointShape = Settings.Default.POINTSET_SCALE_POINTSHAPE;
            scaleStyle.pointSize = Settings.Default.POINTSET_SCALE_POINTSIZE;
            scaleStyle.pointLineSize = Settings.Default.POINTSET_SCALE_POINTLINESIZE;
            scaleStyle.pointLineColor = Settings.Default.POINTSET_SCALE_POINTLINECOLOR;
            scaleStyle.pointInColor = Settings.Default.POINTSET_SCALE_POINTINCOLOR;
            scaleStyle.lineSize = Settings.Default.POINTSET_SCALE_LINESIZE;
            scaleStyle.lineColor = Settings.Default.POINTSET_SCALE_LINECOLOR;
            scaleStyle.lineConnectAs = Settings.Default.POINTSET_SCALE_LINECONNECTAS;

            try
            {
                foreach (PointSetStyle style in Settings.Default.POINTSET_CURVES)
                {
                    curveStyles.Add(style);
                }

                foreach (PointSetStyle style in Settings.Default.POINTSET_MEASURES)
                {
                    measureStyles.Add(style);
                }
            }
            catch (InvalidCastException e)
            {
                //There were no default pointsets loaded.
            }
        }
 void ComputeDisabledValue(bool linear, GridSet gridSet, ref int count, ref double start,
                                 ref double step, ref double stop)
 {
     // validators prevent divide by zero errors and negative log errors from occurring below
     switch (gridSet)
     {
         case GridSet.AllButCount:
             if (linear)
                 count = 1 + (int)(0.5 + (stop - start) / step);
             else
                 count = 1 + (int)((Math.Log(stop) - Math.Log(start)) / Math.Log(step));
             break;
         case GridSet.AllButStart:
             if (linear)
                 start = stop - (count - 1.0) * step;
             else
                 start = Math.Exp(Math.Log(stop) - (count - 1.0) * Math.Log(step));
             break;
         case GridSet.AllButStep:
             if (linear)
                 step = (stop - start) / (count - 1.0);
             else
                 step = Math.Exp((Math.Log(stop) - Math.Log(start)) / (count - 1.0));
             break;
         case GridSet.AllButStop:
             if (linear)
                 stop = start + (count - 1.0) * step;
             else
                 stop = Math.Exp(Math.Log(start) + (count - 1.0) * Math.Log(step));
             break;
     }
 }
        public void LoadSettings()
        {
            sessionsSettings.initialDigitizeState = Settings.Default.SESSIONS_INITIALDIGITZESTATE;

            coordSettings.frame       = Settings.Default.COORD_FRAME;
            coordSettings.xThetaScale = Settings.Default.COORD_XTHETASCALE;
            coordSettings.yRScale     = Settings.Default.COORD_YRSCALE;
            coordSettings.thetaUnits  = Settings.Default.COORD_THETAUNITS;

            exportSettings.pointsSelection = Settings.Default.EXPORT_POINTSSELECTION;
            exportSettings.layout          = Settings.Default.EXPORT_LAYOUT;
            exportSettings.delimiters      = Settings.Default.EXPORT_DELIMITERS;
            exportSettings.header          = Settings.Default.EXPORT_HEADER;

            viewFileToolbar                  = Settings.Default.VIEW_FILETOOLBAR;
            viewSelectToolbar                = Settings.Default.VIEW_SELECTTOOLBAR;
            viewImageScaleToolbar            = Settings.Default.VIEW_IMAGESCALETOOLBAR;
            viewDigitizeCurvePointsToolbar   = Settings.Default.VIEW_DIGITIZECURVEPOINTSTOOLBAR;
            viewDigitizeMeasurePointsToolbar = Settings.Default.VIEW_DIGITIZEMEASUREPOINTSTOOLBAR;
            viewZoomToolbar                  = Settings.Default.VIEW_ZOOMTOOLBAR;
            viewStatusBar       = Settings.Default.VIEW_STATUSBAR;
            viewPoints          = Settings.Default.VIEW_POINTS;
            viewBackground      = Settings.Default.VIEW_BACKGROUND;
            viewCurveGeometry   = Settings.Default.VIEW_CURVEGEOMETRY;
            viewMeasureGeometry = Settings.Default.VIEW_MEASUREGEOMETRY;

            powerMostSigMax = Settings.Default.MATH_POWERMOSTSIGMAX;
            powerMostSigMin = Settings.Default.MATH_POWERMOSTSIGMIN;
            doubleMin       = Settings.Default.MATH_DOUBLEMIN;
            maxCommands     = Settings.Default.MATH_MAXCOMMANDS;

            windowCurveSize.Width  = Settings.Default.WINDOW_CURVE_WIDTH;
            windowCurveSize.Height = Settings.Default.WINDOW_CURVE_HEIGHT;
            windowCurvePosition.X  = Settings.Default.WINDOW_CURVE_X;
            windowCurvePosition.Y  = Settings.Default.WINDOW_CURVE_Y;

            windowMainSize.Width   = Settings.Default.WINDOW_MAIN_WIDTH;
            windowMainSize.Height  = Settings.Default.WINDOW_MAIN_HEIGHT;
            windowMainPosition.X   = Settings.Default.WINDOW_MAIN_X;
            windowMainPosition.Y   = Settings.Default.WINDOW_MAIN_Y;
            windowMainFontOverride = Settings.Default.WINDOW_MAIN_FONT_OVERRIDE;
            windowMainFontName     = Settings.Default.WINDOW_MAIN_FONT_NAME;
            windowMainFontSize     = Settings.Default.WINDOW_MAIN_FONT_SIZE;

            windowMeasureSize.Width  = Settings.Default.WINDOW_MEASURE_WIDTH;
            windowMeasureSize.Height = Settings.Default.WINDOW_MEASURE_HEIGHT;
            windowMeasurePosition.X  = Settings.Default.WINDOW_MEASURE_X;
            windowMeasurePosition.Y  = Settings.Default.WINDOW_MEASURE_Y;

            segmentPointMinSeparation       = Settings.Default.SEGMENT_POINTMINSEPARATION;
            segmentSettings.minPoints       = Settings.Default.SEGMENT_MINPOINTS;
            segmentSettings.pointSeparation = Settings.Default.SEGMENT_POINTDEFAULTSEPARATION;
            segmentSettings.fillCorners     = Settings.Default.SEGMENT_FILLCORNERS;
            segmentSettings.lineSize        = Settings.Default.SEGMENT_LINESIZE;
            segmentSettings.lineColor       = Settings.Default.SEGMENT_LINECOLOR;

            gridRemovalSettings.gridMesh.gridSetX       = Settings.Default.GRID_REMOVAL_GRIDSETX;
            gridRemovalSettings.gridMesh.gridSetY       = Settings.Default.GRID_REMOVAL_GRIDSETY;
            gridRemovalSettings.thinThickness           = Settings.Default.GRID_REMOVAL_THINTHICKNESS;
            gridRemovalSettings.gridDistance            = Settings.Default.GRID_REMOVAL_GRIDDISTANCE;
            gridRemovalSettings.color                   = Settings.Default.GRID_REMOVAL_COLOR;
            gridRemovalSettings.gapSeparation           = Settings.Default.GRID_REMOVAL_GAPSEPARATION;
            gridRemovalSettings.foregroundThresholdLow  = Settings.Default.GRID_REMOVAL_FOREGROUNDTHRESHOLDLOW;
            gridRemovalSettings.foregroundThresholdHigh = Settings.Default.GRID_REMOVAL_FOREGROUNDTHRESHOLDHIGH;

            gridDisplayGridSetX = Settings.Default.GRID_DISPLAY_GRIDSETX;
            gridDisplayGridSetY = Settings.Default.GRID_DISPLAY_GRIDSETY;

            pointMatchHighlightDiameter        = Settings.Default.POINTMATCH_HIGHLIGHTDIAMETER;
            pointMatchHighlightLineSize        = Settings.Default.POINTMATCH_HIGHLIGHTLINESIZE;
            pointMatchSettings.pointSeparation = Settings.Default.POINTMATCH_SEPARATIONDEFAULT;
            pointMatchSettings.pointSize       = Settings.Default.POINTMATCH_SIZEDEFAULT;
            pointMatchSettings.acceptedColor   = Settings.Default.POINTMATCH_ACCEPTEDCOLOR;
            pointMatchSettings.rejectedColor   = Settings.Default.POINTMATCH_REJECTEDCOLOR;

            discretizeSettings.discretizeMethod        = Settings.Default.DISCRETIZE_METHODDEFAULT;
            discretizeSettings.intensityThresholdLow   = Settings.Default.DISCRETIZE_INTENSITY_THRESHOLDLOW;
            discretizeSettings.intensityThresholdHigh  = Settings.Default.DISCRETIZE_INTENSITY_THRESHOLDHIGH;
            discretizeSettings.foregroundThresholdLow  = Settings.Default.DISCRETIZE_FOREGROUND_THRESHOLDLOW;
            discretizeSettings.foregroundThresholdHigh = Settings.Default.DISCRETIZE_FOREGROUND_THRESHOLDHIGH;
            discretizeSettings.hueThresholdLow         = Settings.Default.DISCRETIZE_HUE_THRESHOLDLOW;
            discretizeSettings.hueThresholdHigh        = Settings.Default.DISCRETIZE_HUE_THRESHOLDHIGH;
            discretizeSettings.saturationThresholdLow  = Settings.Default.DISCRETIZE_SATURATION_THRESHOLDLOW;
            discretizeSettings.saturationThresholdHigh = Settings.Default.DISCRETIZE_SATURATION_THRESHOLDHIGH;
            discretizeSettings.valueThresholdLow       = Settings.Default.DISCRETIZE_VALUE_THRESHOLDLOW;
            discretizeSettings.valueThresholdHigh      = Settings.Default.DISCRETIZE_VALUE_THRESHOLDHIGH;

            axesStyle.pointShape     = Settings.Default.POINTSET_AXES_POINTSHAPE;
            axesStyle.pointSize      = Settings.Default.POINTSET_AXES_POINTSIZE;
            axesStyle.pointLineSize  = Settings.Default.POINTSET_AXES_POINTLINESIZE;
            axesStyle.pointLineColor = Settings.Default.POINTSET_AXES_POINTLINECOLOR;
            axesStyle.pointInColor   = Settings.Default.POINTSET_AXES_POINTINCOLOR;
            axesStyle.lineSize       = Settings.Default.POINTSET_AXES_LINESIZE;
            axesStyle.lineColor      = Settings.Default.POINTSET_AXES_LINECOLOR;
            axesStyle.lineConnectAs  = Settings.Default.POINTSET_AXES_LINECONNECTAS;

            scaleStyle.pointShape     = Settings.Default.POINTSET_SCALE_POINTSHAPE;
            scaleStyle.pointSize      = Settings.Default.POINTSET_SCALE_POINTSIZE;
            scaleStyle.pointLineSize  = Settings.Default.POINTSET_SCALE_POINTLINESIZE;
            scaleStyle.pointLineColor = Settings.Default.POINTSET_SCALE_POINTLINECOLOR;
            scaleStyle.pointInColor   = Settings.Default.POINTSET_SCALE_POINTINCOLOR;
            scaleStyle.lineSize       = Settings.Default.POINTSET_SCALE_LINESIZE;
            scaleStyle.lineColor      = Settings.Default.POINTSET_SCALE_LINECOLOR;
            scaleStyle.lineConnectAs  = Settings.Default.POINTSET_SCALE_LINECONNECTAS;

            try
            {
                foreach (PointSetStyle style in Settings.Default.POINTSET_CURVES)
                {
                    curveStyles.Add(style);
                }

                foreach (PointSetStyle style in Settings.Default.POINTSET_MEASURES)
                {
                    measureStyles.Add(style);
                }
            }
            catch (InvalidCastException e)
            {
                //There were no default pointsets loaded.
            }
        }
Exemple #10
0
        public void SetY_TopCoordTopGridSet_NoFlip()
        {
            Coord c = new Coord(1, 0, 0, true);

            GridSet g = new GridSet(
                "test",
                "epsg:test",
                new Envelope(0, 0, 100, 100),
                new List<double>() { 10, 5, 2.5 },
                10,
                10,
                .00028,
                true
            );

            Coord cResult = g.SetY(c);
            Assert.IsTrue(cResult.TopOrigin);
            Assert.AreEqual(cResult.Y, 0);
        }
Exemple #11
0
        public void SetY_TopCoordBottomGridSet_Flips()
        {
            Coord c = new Coord(1, 0, 0, true);

            GridSet g = new GridSet(
                "test",
                "epsg:test",
                new Envelope(0, 0, 100, 100),
                new List<double>() { 10, 5, 2.5 },
                10,
                10,
                .00028,
                false
            );

            Coord cResult = g.SetY(c);
            Assert.IsFalse(cResult.TopOrigin);
            Assert.AreEqual(cResult.Y, 1);
        }
Exemple #12
0
        public void GridWidth_SimpleGridset_ReturnsWidth()
        {
            GridSet g = new GridSet(
                "test",
                "epsg:test",
                new Envelope(0, 0, 100, 100),
                new List<double>() { 10, 5, 2.5 },
                10,
                10
            );

            Assert.AreEqual(g.GridWidth(2), 4);
        }