Exemplo n.º 1
0
        public void Arc3DTest_008()
        {
            var tol = 1e-7;

            var p1  = new Vector3D(20.17459383, 178.42487311, -56.31435851);
            var p2  = new Vector3D(1.7990927, 231.58612295, -18.13420814);
            var p3  = new Vector3D(262.37695212, 302.11773752, 132.19450446);
            var arc = new Arc3D(tol, p1, p2, p3);

            var dp1  = new Vector3D("X = 4.11641325 Y = 266.06066703 Z = 11.60392802");
            var dp2  = new Vector3D("X = 58.22323201 Y = 331.06393108 Z = 85.07377904");
            var dp3  = new Vector3D("X = 158.93019908 Y = 345.12414417 Z = 132.0972665");
            var dp4  = new Vector3D("X = 62.63561614 Y = 268.87580225 Z = 34.43511732");
            var dp4_ = new Vector3D("X = 16.03656748 Y = 293.76000567 Z = 39.01589812");

            Action <Arc3D, Vector3D, Vector3D> test = (subarc, ap1, ap2) =>
            {
                Assert.True(arc.CS.Origin.EqualsTol(tol, subarc.CS.Origin));
                Assert.True(arc.CS.IsParallelTo(tol, subarc.CS));
                Assert.True(subarc.From.EqualsTol(tol, ap1));
                Assert.True(subarc.To.EqualsTol(tol, ap2));
            };

            Assert.True(arc.Split(tol, null).Count() == 0);
            Assert.True(arc.Split(tol, new Vector3D[] { }).Count() == 0);
            Assert.True(arc.Split(tol, new[] { dp1, dp2, dp3, dp4, arc.From, arc.To }).Count() == 5);

            {
                var dps     = new[] { dp1, dp2, dp3, dp4 };
                var subarcs = arc.Split(tol, dps).ToList();
                Assert.True(subarcs.Count == 5);

                test(subarcs[0], arc.From, dp1);
                test(subarcs[1], dp1, dp4_);
                test(subarcs[2], dp4_, dp2);
                test(subarcs[3], dp2, dp3);
                test(subarcs[4], dp3, arc.To);
            }

            {
                var dps     = new[] { dp1, dp2, dp3, dp4 };
                var subarcs = arc.Split(tol, dps, validate_pts: true).ToList();
                Assert.True(subarcs.Count == 4);

                test(subarcs[0], arc.From, dp1);
                test(subarcs[1], dp1, dp2);
                test(subarcs[2], dp2, dp3);
                test(subarcs[3], dp3, arc.To);
            }
        }