예제 #1
0
    def testMergePolys(self):
        poly1 = Poly(name="Foo")
        poly1.AddPoint(Point(0, 1, 0).Normalize())
        poly1.AddPoint(Point(0, 0.5, 0.5).Normalize())
        poly1.AddPoint(Point(0, 0, 1).Normalize())
        poly1.AddPoint(Point(1, 1, 1).Normalize())

        poly2 = Poly()
        poly3 = Poly(name="Bar")
        poly3.AddPoint(Point(1, 1, 1).Normalize())
        poly3.AddPoint(Point(2, 0.5, 0.5).Normalize())

        merged1 = Poly.MergePolys([poly1, poly2])
        self.assertPointsApproxEq(poly1.GetPoints(), merged1.GetPoints())
        self.assertEqual("Foo;", merged1.GetName())

        merged2 = Poly.MergePolys([poly2, poly3])
        self.assertPointsApproxEq(poly3.GetPoints(), merged2.GetPoints())
        self.assertEqual(";Bar", merged2.GetName())

        merged3 = Poly.MergePolys([poly1, poly2, poly3],
                                  merge_point_threshold=0)
        mergedPoints = poly1.GetPoints()[:]
        mergedPoints.append(poly3.GetPoint(-1))
        self.assertPointsApproxEq(mergedPoints, merged3.GetPoints())
        self.assertEqual("Foo;;Bar", merged3.GetName())

        merged4 = Poly.MergePolys([poly2])
        self.assertEqual("", merged4.GetName())
        self.assertEqual(0, merged4.GetNumPoints())

        # test merging two nearby points
        newPoint = poly1.GetPoint(-1).Plus(Point(0.000001, 0, 0)).Normalize()
        poly1.AddPoint(newPoint)
        distance = poly1.GetPoint(-1).GetDistanceMeters(poly3.GetPoint(0))
        self.assertTrue(distance <= 10)
        self.assertTrue(distance > 5)

        merged5 = Poly.MergePolys([poly1, poly2, poly3],
                                  merge_point_threshold=10)
        mergedPoints = poly1.GetPoints()[:]
        mergedPoints.append(poly3.GetPoint(-1))
        self.assertPointsApproxEq(mergedPoints, merged5.GetPoints())
        self.assertEqual("Foo;;Bar", merged5.GetName())

        merged6 = Poly.MergePolys([poly1, poly2, poly3],
                                  merge_point_threshold=5)
        mergedPoints = poly1.GetPoints()[:]
        mergedPoints += poly3.GetPoints()
        self.assertPointsApproxEq(mergedPoints, merged6.GetPoints())
        self.assertEqual("Foo;;Bar", merged6.GetName())
예제 #2
0
  def testGetClosestPointShape(self):
    poly = Poly()

    poly.AddPoint(Point(1, 1, 0).Normalize())
    self.assertPointApproxEq(Point(
        0.707106781187, 0.707106781187, 0), poly.GetPoint(0))

    point = Point(0, 1, 1).Normalize()
    self.assertPointApproxEq(Point(1, 1, 0).Normalize(),
                                    poly.GetClosestPoint(point)[0])

    poly.AddPoint(Point(0, 1, 1).Normalize())

    self.assertPointApproxEq(
        Point(0, 1, 1).Normalize(),
        poly.GetClosestPoint(point)[0])