public void CantGetDistanceToNonPlanarPolygon()
        {
            const double z1      = 10;
            var          g1      = GeometryFactory.CreatePoint(100, 0, z1);
            var          polygon =
                CurveConstruction.StartPoly(0, 0, 10)
                .LineTo(10, 0, 10)
                .LineTo(10, 10, 11)
                .LineTo(0, 10, 10)
                .ClosePolygon();

            var polygonClass = new FeatureClassMock(
                1, "polygon", esriGeometryType.esriGeometryPolygon,
                esriFeatureType.esriFTSimple,
                SpatialReferenceUtils.CreateSpatialReference(WellKnownHorizontalCS.LV95));

            var feature = polygonClass.CreateFeature(polygon);

            var intersectionPoints =
                ZDifferenceStrategyIntersectionPoints.GetDistanceToPlane(
                    g1, feature, 0.01);

            foreach (var either in intersectionPoints)
            {
                either.Match(e =>
                {
                    Console.WriteLine(
                        $@"expected nonplanar error: {e.Message} ({e.MaximumOffset})");
                    Assert.AreEqual(0.3324801391253977, e.MaximumOffset);
                    return(0);
                },
                             pts =>
                {
                    Assert.Fail("Unexpected intersection point");
                    return(-1);
                });
            }
        }
        public void CanGetDistanceToPlanarPolygon()
        {
            const double z1 = 10;
            const double z2 = 20;
            var          g1 = GeometryFactory.CreatePoint(100, 0, z1);
            var          g2 = GeometryFactory.CreatePolygon(0, 0, 100, 200);

            GeometryUtils.MakeZAware(g2);
            g2 = GeometryUtils.ConstantZ(g2, z2);

            var polygonClass = new FeatureClassMock(
                1, "polygon", esriGeometryType.esriGeometryPolygon,
                esriFeatureType.esriFTSimple,
                SpatialReferenceUtils.CreateSpatialReference(WellKnownHorizontalCS.LV95));

            var feature = polygonClass.CreateFeature(g2);

            var intersectionPoints =
                ZDifferenceStrategyIntersectionPoints.GetDistanceToPlane(
                    g1, feature, 0.01);

            foreach (var either in intersectionPoints)
            {
                either.Match(e =>
                {
                    Assert.Fail($"unexpected nonplanar error: {e.Message}");
                    return(-1);
                },
                             pts =>
                {
                    var points = pts.ToList();
                    Assert.AreEqual(1, points.Count);
                    Assert.AreEqual(z2 - z1, points[0].Distance);
                    return(0);
                });
            }
        }