Exemplo n.º 1
0
        public void TrimSplineOnLineTest2()
        {
            //      _______|_              _______|
            //     /       | \            /       | \
            //    /        |  \          /        |
            //   |         |   |o       |         |
            //   |         |   |   =>   |         |   |
            //    \        |  /          \        |  /
            //     \       | /            \       | /
            //      -------|-              -------|_
            var sqrt2over2   = Math.Sqrt(2.0) / 2.0;
            var unitCircle   = new PrimitiveEllipse(Point.Origin, 1.0, Vector.ZAxis);
            var circleSpline = Spline.FromBeziers(unitCircle.AsBezierCurves());
            var trimLine     = new Line(new Point(sqrt2over2, -1.0, 0.0), new Point(sqrt2over2, 1.0, 0.0));

            // 45-90 degrees
            var q1trimBezier = new PrimitiveBezier(
                new Point(0.70696813418525, 0.70696813418525, 0.0),
                new Point(0.525957512247, 0.8879787561235, 0.0),
                new Point(0.275957512247, 1.0, 0.0),
                new Point(0.0, 1.0, 0.0));

            // 270-315 degrees
            var q4trimBezier = new PrimitiveBezier(
                new Point(0.0, -1.0, 0.0),
                new Point(0.275957512247, -1.0, 0.0),
                new Point(0.525957512247, -0.8879787561235, 0.0),
                new Point(0.70696813418525, -0.70696813418525, 0.0));

            var selectionPoint = new Point(Math.Cos(1.0 * MathHelper.DegreesToRadians), Math.Sin(1.0 * MathHelper.DegreesToRadians), 0.0); // one degree up

            var resultSpline = Spline.FromBeziers(new[]
            {
                new PrimitiveBezier(new Point(1.0, 0.0, 0.0), new Point(1.0, -0.551915024494, 0.0), new Point(0.551915024494, -1.0, 0.0), new Point(0.0, -1.0, 0.0)),
                new PrimitiveBezier(new Point(0.0, 1.0, 0.0), new Point(0.27602797672647056, 1.0, 0.0), new Point(0.5260851832511362, 0.8879215406024443, 0.0), new Point(0.7071067813752437, 0.7068294600060859, 0.0)),
            });

            DoTrim(
                existingEntities: new[] { trimLine },
                entityToTrim: circleSpline,
                selectionPoint: selectionPoint,
                expectTrim: true,
                expectedAdded: new[] { resultSpline });
        }