示例#1
0
 private static void TestAddAndSubtract(int size1, int offsetX, int offsetY, int size2, BlobCollection blobs, int addArea, int subArea, bool testOpen, bool cornersOnly)
 {
     if (!testOpen)
     {
         SectorConstrainedOSMAreaGraph square1 = MakeRect(blobs.nodes, 0, 0, size1, size1, cornersOnly);
         SectorConstrainedOSMAreaGraph square2 = MakeRect(blobs.nodes, offsetX, offsetY, offsetX + size2, offsetY + size2, cornersOnly);
         var blobs2 = Clone(blobs); // clone since we modify blobs now
         //if (square1.Clone().Add(square2, blobs).Area(blobs) != addArea) throw new NotImplementedException();
         //if (square1.Clone().Subtract(square2, blobs).Area(blobs) != subArea) throw new NotImplementedException();
         double area1 = GetArea(square1.Clone().Add(square2, blobs).Finalize(blobs).GetTesselationVertices(Color.White));
         double area2 = GetArea(square1.Clone().Subtract(square2, blobs2).Finalize(blobs2).GetTesselationVertices(Color.White));
         if (area1 != addArea)
         {
             throw new NotImplementedException();
         }
         if (area2 != subArea)
         {
             throw new NotImplementedException();
         }
     }
     else
     {
         // test some coastline stuff
         SectorConstrainedOSMAreaGraph square1 = MakeOpenRect(blobs.nodes, 0, 0, size1, size1, true, cornersOnly);                                  // leave left open
         SectorConstrainedOSMAreaGraph square2 = MakeOpenRect(blobs.nodes, offsetX, offsetY, offsetX + size2, offsetY + size2, false, cornersOnly); // leave right open
         var    blobs2 = Clone(blobs);                                                                                                              // clone since we modify blobs now
         double area1  = GetArea(square1.Clone().Add(square2, blobs).Finalize(blobs).GetTesselationVertices(Color.White));
         double area2  = GetArea(square1.Clone().Subtract(square2, blobs2).Finalize(blobs2).GetTesselationVertices(Color.White));
         if (area1 != addArea)
         {
             throw new NotImplementedException();
         }
         if (area2 != subArea)
         {
             throw new NotImplementedException();
         }
     }
 }
示例#2
0
        private void ToughTest()
        {
            var blobs = new BlobCollection();
            SectorConstrainedOSMAreaGraph coast = new SectorConstrainedOSMAreaGraph();

            AddLineSeg(blobs.nodes, coast, 6, 6, 6, 5);
            AddLineSeg(blobs.nodes, coast, 6, 5, 6, 4);
            AddLineSeg(blobs.nodes, coast, 6, 4, 6, 3);
            AddLineSeg(blobs.nodes, coast, 6, 3, 5, 2);
            AddLineSeg(blobs.nodes, coast, 5, 2, 3, 2);
            AddLineSeg(blobs.nodes, coast, 3, 2, 2, 2);
            AddLineSeg(blobs.nodes, coast, 2, 2, 1, 2);
            MarkStartPoint(coast, 6, 6);
            MarkEndPoint(coast, 1, 2);
            SectorConstrainedOSMAreaGraph bigLake = new SectorConstrainedOSMAreaGraph();

            AddLineSeg(blobs.nodes, bigLake, 7, 0, 3, 0);
            AddLineSeg(blobs.nodes, bigLake, 3, 0, 3, 1);
            AddLineSeg(blobs.nodes, bigLake, 3, 1, 4, 1);
            AddLineSeg(blobs.nodes, bigLake, 4, 1, 5, 2);
            AddLineSeg(blobs.nodes, bigLake, 5, 2, 6, 3);
            AddLineSeg(blobs.nodes, bigLake, 6, 3, 6, 4);
            AddLineSeg(blobs.nodes, bigLake, 6, 4, 6, 5);
            AddLineSeg(blobs.nodes, bigLake, 6, 5, 7, 5);
            AddLineSeg(blobs.nodes, bigLake, 7, 5, 7, 0);
            SectorConstrainedOSMAreaGraph smallLake = new SectorConstrainedOSMAreaGraph();

            AddLineSeg(blobs.nodes, smallLake, 2, 1, 2, 2);
            AddLineSeg(blobs.nodes, smallLake, 2, 2, 3, 2);
            AddLineSeg(blobs.nodes, smallLake, 3, 2, 5, 4);
            AddLineSeg(blobs.nodes, smallLake, 5, 4, 6, 4);
            AddLineSeg(blobs.nodes, smallLake, 6, 4, 3, 1);
            AddLineSeg(blobs.nodes, smallLake, 3, 1, 2, 1);
            double coastArea = GetArea(coast.Finalize(blobs).GetTesselationVertices(Color.White));

            if (coastArea != 19.5 - 10)
            {
                throw new NotImplementedException();                         // sure, minus 10 because everything's scaled up and we can't properly close
            }
            double bigLakeArea = GetArea(bigLake.Finalize(blobs).GetTesselationVertices(Color.White));

            if (bigLakeArea != 10)
            {
                throw new NotImplementedException();
            }
            double smallLakeArea = GetArea(smallLake.Finalize(blobs).GetTesselationVertices(Color.White));

            if (smallLakeArea != 3.5)
            {
                throw new NotImplementedException();
            }
            var    lakes     = bigLake.Clone().Add(smallLake, blobs);
            double lakesArea = GetArea(lakes.Finalize(blobs).GetTesselationVertices(Color.White));
            // if (lakesArea != 13.5) throw new NotImplementedException(); // looks like the tesselator is filling in the hole?
            var    final     = coast.Clone().Subtract(lakes, blobs);
            double finalArea = GetArea(final.Finalize(blobs).GetTesselationVertices(Color.White));

            if (finalArea != 17.5 - 10)
            {
                throw new NotImplementedException();                         // sure, minus 10 because everything's scaled up and we can't properly close
            }
        }