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; } }
// 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(); } }