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())
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])