Пример #1
0
 def test_Operators(self):
     p1 = Gf.Plane(Gf.Vec3d(1,1,1), 10)
     p2 = Gf.Plane(Gf.Vec3d(1,1,1), 20)
     self.assertEqual(p1, Gf.Plane(Gf.Vec3d(1,1,1), 10), err("equality"))
     self.assertTrue(not p1 == p2, err("equality"))
     self.assertTrue(not p1 != Gf.Plane(Gf.Vec3d(1,1,1), 10), err("inequality"))
     self.assertTrue(p1 != p2, err("inequality"))
Пример #2
0
 def test_Constructors(self):
     self.assertIsInstance(Gf.Plane(), Gf.Plane, err( "constructor" ))
     self.assertIsInstance(Gf.Plane(Gf.Vec3d(1,1,1), 1), Gf.Plane, err( "constructor" ))
     self.assertIsInstance(Gf.Plane(Gf.Vec3d(1,1,1), Gf.Vec3d(1,1,1)), Gf.Plane, err( "constructor" ))
     self.assertIsInstance(Gf.Plane(Gf.Vec3d(0,0,1), Gf.Vec3d(0,1,0), Gf.Vec3d(1,0,0)), Gf.Plane,
         err( "constructor" ))
     self.assertIsInstance(Gf.Plane(Gf.Vec4d(3,4,0,5)), Gf.Plane, err("constructor" ))
Пример #3
0
    def test_vec4d(self):
        p = Gf.Plane(Gf.Vec4d(3, 4, 0, 5))
        self.assertEqual(p.normal, Gf.Vec3d(3, 4, 0) / 5, err("normal"))
        self.assertEqual(p.distanceFromOrigin, -1, err("distanceFromOrigin"))

        pt0 = Gf.Vec3d(2, 3, 1)
        pt1 = Gf.Vec3d(5, 1, 2)
        pt2 = Gf.Vec3d(6, 0, 7)

        p = Gf.Plane(pt0, pt1, pt2)
        eqn = p.GetEquation()

        for pt in [pt0, pt1, pt2]:
            v = eqn[0] * pt[0] + eqn[1] * pt[1] + eqn[2] * pt[2] + eqn[3]
            self.assertTrue(Gf.IsClose(v, 0, 1e-12))
Пример #4
0
    def test_IntersectPlane(self):
        p = Gf.Plane(Gf.Vec3d(1, 1, 1), 2)
        r = Gf.Ray(Gf.Vec3d(), Gf.Vec3d(1, 1, 1))
        (hit, distance, frontFacing) = r.Intersect(p)
        self.assertTrue(hit and Gf.IsClose(distance, 1.1547005383792515, 0.00001) and \
            not frontFacing)

        p = Gf.Plane(Gf.Vec3d(1, 0, 0), 2)
        r = Gf.Ray(Gf.Vec3d(), Gf.Vec3d(0, 1, 0))
        (hit, distance, frontFacing) = r.Intersect(p)
        self.assertFalse(hit)

        # Ray originates on surface of plane, direction equal to plane normal
        p = Gf.Plane(Gf.Vec3d.ZAxis(), Gf.Vec3d(0, 0, 0))
        r = Gf.Ray(Gf.Vec3d(0, 0, 0), Gf.Vec3d.ZAxis())
        (hit, distance, frontFacing) = r.Intersect(p)
        self.assertTrue(hit and Gf.IsClose(distance, 0.0, 0.00001)
                        and not frontFacing)
Пример #5
0
    def test_Properties(self):
        p = Gf.Plane()
        self.assertEqual(p.Set(Gf.Vec3d(1,1,1), 1), Gf.Plane(Gf.Vec3d(1,1,1), 1), err("Set"))
        self.assertEqual(p.Set(Gf.Vec3d(1,1,1), Gf.Vec3d(1,1,1)), Gf.Plane(Gf.Vec3d(1,1,1), Gf.Vec3d(1,1,1)),
            err("Set"))
        self.assertEqual(p.Set(Gf.Vec3d(0,0,1), Gf.Vec3d(0,1,0), Gf.Vec3d(1,0,0)),
            Gf.Plane(Gf.Vec3d(0,0,1), Gf.Vec3d(0,1,0), Gf.Vec3d(1,0,0)), err("Set"))

        p = Gf.Plane(Gf.Vec3d(1,1,1), 1)
        self.assertEqual(p.normal, Gf.Vec3d(1,1,1).GetNormalized(), err("normal"))

        p = Gf.Plane(Gf.Vec3d(1,1,1), 10)
        self.assertEqual(p.distanceFromOrigin, 10, err("distanceFromOrigin"))
Пример #6
0
    def test_Methods(self):
        p = Gf.Plane(Gf.Vec3d(1, 1, 1), 1)
        self.assertTrue(
            Gf.IsClose(p.GetDistance(Gf.Vec3d(2, 2, 2)), 2.4641016151377553,
                       0.00001), err("GetDistance"))

        p = Gf.Plane(Gf.Vec3d(1, 1, 1), 0)
        self.assertTrue(Gf.IsClose(p.GetDistance(Gf.Vec3d(0,0,0)), 0, 0.00001), \
            err("GetDistance"))

        p = Gf.Plane(Gf.Vec3d(0, 1, 0), 0)
        self.assertEqual(p.Project(Gf.Vec3d(3, 3, 3)), Gf.Vec3d(3, 0, 3),
                         err("Project"))

        p = Gf.Plane(Gf.Vec3d(1, 1, 1), 0)
        p.Transform(Gf.Matrix4d().SetRotate(Gf.Rotation(Gf.Vec3d(1, 0, 0),
                                                        30)))
        self.assertTrue(
            Gf.IsClose(p.normal, Gf.Vec3d(0.57735, 0.211325, 0.788675),
                       0.0001))

        p = Gf.Plane(Gf.Vec3d(1, 1, 1), 1)
        self.assertEqual(p.normal * -1,
                         p.Reorient(Gf.Vec3d()).normal, err("Reorient"))

        b = Gf.Range3d()
        self.assertFalse(
            Gf.Plane(Gf.Vec3d(1, 1, 1), 1).IntersectsPositiveHalfSpace(b),
            err("IntersectsPositiveHalfSpace"))

        b = Gf.Range3d(Gf.Vec3d(-1, -1, -1), Gf.Vec3d(1, 1, 1))
        self.assertTrue(
            Gf.Plane(Gf.Vec3d(1, 1, 1), 1).IntersectsPositiveHalfSpace(b),
            err("IntersectsPositiveHalfSpace"))
        self.assertTrue(
            Gf.Plane(Gf.Vec3d(1, 1, -1), 1).IntersectsPositiveHalfSpace(b),
            err("IntersectsPositiveHalfSpace"))
        self.assertTrue(
            Gf.Plane(Gf.Vec3d(1, -1, 1), 1).IntersectsPositiveHalfSpace(b),
            err("IntersectsPositiveHalfSpace"))
        self.assertTrue(
            Gf.Plane(Gf.Vec3d(1, -1, -1), 1).IntersectsPositiveHalfSpace(b),
            err("IntersectsPositiveHalfSpace"))
        self.assertTrue(
            Gf.Plane(Gf.Vec3d(-1, 1, 1), 1).IntersectsPositiveHalfSpace(b),
            err("IntersectsPositiveHalfSpace"))
        self.assertTrue(
            Gf.Plane(Gf.Vec3d(-1, 1, -1), 1).IntersectsPositiveHalfSpace(b),
            err("IntersectsPositiveHalfSpace"))
        self.assertTrue(
            Gf.Plane(Gf.Vec3d(-1, -1, 1), 1).IntersectsPositiveHalfSpace(b),
            err("IntersectsPositiveHalfSpace"))
        self.assertTrue(
            Gf.Plane(Gf.Vec3d(-1, -1, -1), 1).IntersectsPositiveHalfSpace(b),
            err("IntersectsPositiveHalfSpace"))

        p = Gf.Plane(Gf.Vec3d(1, 1, 1), 10)
        self.assertFalse(
            p.IntersectsPositiveHalfSpace(
                Gf.Range3d(Gf.Vec3d(), Gf.Vec3d(1, 1, 1))),
            err("IntersectsPositiveHalfSpace"))

        p = Gf.Plane(Gf.Vec3d(1, 1, 1), 1)
        self.assertTrue(p.IntersectsPositiveHalfSpace(Gf.Vec3d(1, 1, 1)),
                        err("IntersectsPositiveHalfSpace"))

        p = Gf.Plane(Gf.Vec3d(1, 1, 1), 10)
        self.assertFalse(p.IntersectsPositiveHalfSpace(Gf.Vec3d()),
                         err("IntersectsPositiveHalfSpace"))

        self.assertEqual(p, eval(repr(p)), err("repr"))

        self.assertTrue(len(str(Gf.Plane())), err("str"))
Пример #7
0
    def test_Fitting(self):
        # Collinear points should not define a plane.
        a = Gf.Vec3d(0, 0, 0)
        b = Gf.Vec3d(1, 0, 0)
        c = Gf.Vec3d(2, 0, 0)
        self.assertIsNone(Gf.FitPlaneToPoints([a, b, c]), err("collinear"))

        # Cannot fit plane to 2 or fewer points.
        with self.assertRaises(Tf.ErrorException):
            Gf.FitPlaneToPoints([a, b])

        # Perfect fit (normal should be parallel to Z-axis, but OK if opposite
        # direction).
        c = Gf.Vec3d(0, 1, 0)
        p = Gf.FitPlaneToPoints([a, b, c])
        self.assertAlmostEqual(Gf.Dot(p.GetNormal(), Gf.Vec3d.ZAxis()), 1.0,
                msg=err("normal1"))
        self.assertAlmostEqual(p.GetDistanceFromOrigin(), 0.0,
                msg=err("distance1"))

        # Try the same plane but with non-unit vectors.
        b = Gf.Vec3d(1.5, 0, 0)
        c = Gf.Vec3d(0, 3.2, 0)
        p = Gf.FitPlaneToPoints([a, b, c])
        self.assertAlmostEqual(Gf.Dot(p.GetNormal(), Gf.Vec3d.ZAxis()), 1.0,
                msg=err("normal2"))
        self.assertAlmostEqual(p.GetDistanceFromOrigin(), 0.0,
                msg=err("distance2"))

        # Try a more complicated plane.
        p1 = Gf.Plane(Gf.Vec4d(3, 4, 0, 5)) # equation constructor
        a = p1.Project(Gf.Vec3d(2, 3, 6))
        b = p1.Project(Gf.Vec3d(34, -2, 2))
        c = p1.Project(Gf.Vec3d(-3, 7, -8))
        d = p1.Project(Gf.Vec3d(4, 1, 1))
        e = p1.Project(Gf.Vec3d(87, 67, 92))
        p2 = Gf.FitPlaneToPoints([a, b, c])
        self.assertAlmostEqual(
                Gf.Dot(p1.GetNormal(), p2.GetNormal()), 1.0,
                msg=err("p2 normal parallel to p1"))
        self.assertAlmostEqual(
                p1.GetDistanceFromOrigin(),
                p2.GetDistanceFromOrigin(),
                msg=err("p2 distance equals p1"))
        p3 = Gf.FitPlaneToPoints([a, b, c, d, e])
        self.assertAlmostEqual(
                Gf.Dot(p1.GetNormal(), p3.GetNormal()), 1.0,
                msg=err("p3 normal parallel to p1"))
        self.assertAlmostEqual(
                p1.GetDistanceFromOrigin(),
                p3.GetDistanceFromOrigin(),
                msg=err("p3 distance equals p1"))

        # Try fitting points that don't form a perfect plane.
        # This roughly forms the plane with normal (1, -1, 0) passing through
        # the origin.
        # Decrease the number of places of accuracy since these points are
        # fudged and don't form an exact plane.
        a = Gf.Vec3d(1.1, 1, 5)
        b = Gf.Vec3d(1, 1.1, 2)
        c = Gf.Vec3d(2, 2.1, -4)
        d = Gf.Vec3d(2.1, 2, 1)
        e = Gf.Vec3d(25.3, 25.2, 3)
        f = Gf.Vec3d(25.1, 25.4, 6)
        p = Gf.FitPlaneToPoints([a, b, c, d, e, f])
        expectedNormal = Gf.Vec3d(1, -1, 0).GetNormalized()
        self.assertAlmostEqual(
                Gf.Dot(p.GetNormal(), expectedNormal), 1.0,
                places=2,
                msg=err("normal3"))
        self.assertAlmostEqual(
                p.GetDistanceFromOrigin(), 0.0,
                places=2,
                msg=err("distance3"))