Пример #1
0
 public virtual void TestMP2onCR175871()
 {
     com.epl.geometry.Polygon pg = new com.epl.geometry.Polygon();
     pg.StartPath(-50, 10);
     pg.LineTo(-50, 12);
     pg.LineTo(-45, 12);
     pg.LineTo(-45, 10);
     com.epl.geometry.Polygon pg1 = new com.epl.geometry.Polygon();
     pg1.StartPath(-45, 10);
     pg1.LineTo(-40, 10);
     pg1.LineTo(-40, 8);
     pg.Add(pg1, false);
     com.epl.geometry.SpatialReference spatialReference = com.epl.geometry.SpatialReference.Create(4326);
     try
     {
         string jSonStr = com.epl.geometry.GeometryEngine.GeometryToJson(spatialReference, pg);
         com.fasterxml.jackson.core.JsonFactory jf = new com.fasterxml.jackson.core.JsonFactory();
         com.fasterxml.jackson.core.JsonParser  jp = jf.CreateJsonParser(jSonStr);
         jp.NextToken();
         com.epl.geometry.MapGeometry mg = com.epl.geometry.GeometryEngine.JsonToGeometry(jp);
         com.epl.geometry.Geometry    gm = mg.GetGeometry();
         NUnit.Framework.Assert.AreEqual(com.epl.geometry.Geometry.Type.Polygon, gm.GetType());
         NUnit.Framework.Assert.IsTrue(mg.GetSpatialReference().GetID() == 4326);
         com.epl.geometry.Polygon pgNew = (com.epl.geometry.Polygon)gm;
         NUnit.Framework.Assert.AreEqual(pgNew.GetPathCount(), pg.GetPathCount());
         NUnit.Framework.Assert.AreEqual(pgNew.GetPointCount(), pg.GetPointCount());
         NUnit.Framework.Assert.AreEqual(pgNew.GetSegmentCount(), pg.GetSegmentCount());
         NUnit.Framework.Assert.AreEqual(pgNew.GetPoint(0).GetX(), pg.GetPoint(0).GetX(), 0.000000001);
         NUnit.Framework.Assert.AreEqual(pgNew.GetPoint(1).GetX(), pg.GetPoint(1).GetX(), 0.000000001);
         NUnit.Framework.Assert.AreEqual(pgNew.GetPoint(2).GetX(), pg.GetPoint(2).GetX(), 0.000000001);
         NUnit.Framework.Assert.AreEqual(pgNew.GetPoint(3).GetX(), pg.GetPoint(3).GetX(), 0.000000001);
         NUnit.Framework.Assert.AreEqual(pgNew.GetPoint(0).GetY(), pg.GetPoint(0).GetY(), 0.000000001);
         NUnit.Framework.Assert.AreEqual(pgNew.GetPoint(1).GetY(), pg.GetPoint(1).GetY(), 0.000000001);
         NUnit.Framework.Assert.AreEqual(pgNew.GetPoint(2).GetY(), pg.GetPoint(2).GetY(), 0.000000001);
         NUnit.Framework.Assert.AreEqual(pgNew.GetPoint(3).GetY(), pg.GetPoint(3).GetY(), 0.000000001);
     }
     catch (System.Exception ex)
     {
         string err = ex.Message;
         System.Console.Out.Write(err);
         throw;
     }
 }
Пример #2
0
        // no cuts
        private void Generate_polygon_cuts_()
        {
            com.epl.geometry.AttributeStreamOfInt32 cutHandles = new com.epl.geometry.AttributeStreamOfInt32(0);
            com.epl.geometry.EditShape shape = new com.epl.geometry.EditShape();
            int sideIndex    = shape.CreateGeometryUserIndex();
            int cutteeHandle = shape.AddGeometry(m_cuttee);
            int cutterHandle = shape.AddGeometry(m_cutter);

            com.epl.geometry.TopologicalOperations topoOp = new com.epl.geometry.TopologicalOperations();
            try
            {
                topoOp.SetEditShapeCrackAndCluster(shape, m_tolerance, m_progressTracker);
                topoOp.Cut(sideIndex, cutteeHandle, cutterHandle, cutHandles);
                com.epl.geometry.Polygon   cutteeRemainder = (com.epl.geometry.Polygon)shape.GetGeometry(cutteeHandle);
                com.epl.geometry.MultiPath left            = new com.epl.geometry.Polygon();
                com.epl.geometry.MultiPath right           = new com.epl.geometry.Polygon();
                m_cuts.Clear();
                m_cuts.Add(left);
                m_cuts.Add(right);
                for (int icutIndex = 0; icutIndex < cutHandles.Size(); icutIndex++)
                {
                    com.epl.geometry.Geometry cutGeometry;
                    {
                        // intersection
                        com.epl.geometry.EditShape shapeIntersect = new com.epl.geometry.EditShape();
                        int geometryA = shapeIntersect.AddGeometry(cutteeRemainder);
                        int geometryB = shapeIntersect.AddGeometry(shape.GetGeometry(cutHandles.Get(icutIndex)));
                        topoOp.SetEditShape(shapeIntersect, m_progressTracker);
                        int intersectHandle = topoOp.Intersection(geometryA, geometryB);
                        cutGeometry = shapeIntersect.GetGeometry(intersectHandle);
                        if (cutGeometry.IsEmpty())
                        {
                            continue;
                        }
                        int side = shape.GetGeometryUserIndex(cutHandles.Get(icutIndex), sideIndex);
                        if (side == 2)
                        {
                            left.Add((com.epl.geometry.MultiPath)cutGeometry, false);
                        }
                        else
                        {
                            if (side == 1)
                            {
                                right.Add((com.epl.geometry.MultiPath)cutGeometry, false);
                            }
                            else
                            {
                                m_cuts.Add((com.epl.geometry.MultiPath)cutGeometry);
                            }
                        }
                    }
                    {
                        // Undefined
                        // difference
                        com.epl.geometry.EditShape shapeDifference = new com.epl.geometry.EditShape();
                        int geometryA = shapeDifference.AddGeometry(cutteeRemainder);
                        int geometryB = shapeDifference.AddGeometry(shape.GetGeometry(cutHandles.Get(icutIndex)));
                        topoOp.SetEditShape(shapeDifference, m_progressTracker);
                        cutteeRemainder = (com.epl.geometry.Polygon)shapeDifference.GetGeometry(topoOp.Difference(geometryA, geometryB));
                    }
                }
                if (!cutteeRemainder.IsEmpty() && cutHandles.Size() > 0)
                {
                    m_cuts.Add((com.epl.geometry.MultiPath)cutteeRemainder);
                }
                if (left.IsEmpty() && right.IsEmpty())
                {
                    m_cuts.Clear();
                }
            }
            finally
            {
                // no cuts
                topoOp.RemoveShape();
            }
        }