Example #1
0
 def runTest(self):
     # pa0 is square, containing triangles pa1 and pa2
     # pa3 is triangle outside them all
     pa0 = geom.PolyArea(
         geom.Points([(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 1.0)]),
         [0, 3, 2, 1])
     pa1 = geom.PolyArea(geom.Points([(0.2, 0.2), (0.8, 0.2), (0.5, 0.5)]),
                         [0, 1, 2])
     pa2 = geom.PolyArea(geom.Points([(0.3, 0.6), (0.7, 0.6), (0.5, 0.9)]),
                         [0, 1, 2])
     pa3 = geom.PolyArea(geom.Points([(2.0, 0.0), (3.0, 0.0), (3.0, 1.0)]),
                         [0, 1, 2])
     ans = art2polyarea.CombineSimplePolyAreas([pa0, pa1, pa2, pa3])
     self.assertEqual(len(ans), 2)
     a1 = ans[0]
     a2 = ans[1]
     self.assertEqual(a1.points.pos, [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0),
                                      (0.0, 1.0), (0.2, 0.2), (0.8, 0.2),
                                      (0.5, 0.5), (0.3, 0.6), (0.7, 0.6),
                                      (0.5, 0.9)])
     self.assertEqual(a1.poly, [0, 3, 2, 1])
     self.assertEqual(len(a1.holes), 2)
     self.assertIn([6, 5, 4], a1.holes)
     self.assertIn([9, 8, 7], a1.holes)
     self.assertEqual(a2.points.pos, [(2.0, 0.0), (3.0, 0.0), (3.0, 1.0)])
     self.assertEqual(a2.poly, [0, 1, 2])
     self.assertEqual(a2.holes, [])
Example #2
0
 def runTest(self):
     pts = geom.Points([(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 1.0),
                        (0.2, 0.2), (1.1, 0.1), (0.8, 0.5)])
     a = geom.PolyArea(pts, [0, 1, 2, 3])
     b = geom.PolyArea(pts, [4, 5, 2, 6])
     ans = art2polyarea._ClassifyPathPairs(a, b)
     self.assertEqual(ans, (2, 1))
     ans = art2polyarea._ClassifyPathPairs(b, a)
     self.assertEqual(ans, (0, 1))
Example #3
0
 def testOneHole(self):
     pa = geom.PolyArea(Vs1, F1square)
     pahole = geom.PolyArea(
         geom.Points([(0.3, 0.5, 0.0), (0.6, 0.65, 0.0), (0.45, 0.8, 0.0)]),
         [0, 1, 2])
     pa.AddHole(pahole)
     o = offset.Offset(pa, 0.0, 0.0)
     o.Build()
     self.assertEqual(len(o.inneroffsets), 1)
     if SHOW:
         ShowOffset(o)
Example #4
0
 def runTest(self):
     pa = geom.PolyArea(Vs1, F1tri)
     o = offset.Offset(pa, 0.0, 0.0)
     sp = o.facespokes[0][0]
     (t, ve, ee) = o.NextSpokeEvents(sp)
     self.assertEqual(len(ve), 1)
     pa = geom.PolyArea(Vs1, F1concave)
     o = offset.Offset(pa, 0.0, 0.0)
     sp = o.facespokes[0][1]
     (t, ve, ee) = o.NextSpokeEvents(sp)
     self.assertEqual(len(ee), 1)
     self.assertFalse(ee[0].is_vertex_event)
     self.assertEqual(len(ve), 0)
Example #5
0
 def testConcave(self):
     pa = geom.PolyArea(Vs1, F1concave)
     o = offset.Offset(pa, 0.0, 0.0)
     o.Build()
     self.assertEqual(len(o.inneroffsets), 2)
     if SHOW:
         ShowOffset(o)
Example #6
0
 def testIrreg(self):
     pa = geom.PolyArea(Vs4, F4)
     o = offset.Offset(pa, 0.0, 0.0)
     o.Build()
     self.assertAlmostEqual(o.endtime, 0.1155192686)
     self.assertEqual(len(o.inneroffsets), 1)
     if SHOW:
         ShowOffset(o)
Example #7
0
 def testRect(self):
     pa = geom.PolyArea(Vs2, [0, 12, 15, 1])
     o = offset.Offset(pa, 0.0, 0.0)
     o.Build()
     self.assertAlmostEqual(o.endtime, 0.5)
     self.assertEqual(len(o.inneroffsets), 0)
     if SHOW:
         ShowOffset(o)
Example #8
0
 def runTest(self):
     pa = geom.PolyArea(Vs1, F1tri)
     o = offset.Offset(pa, 0.0, 0.0)
     o.Build(0.1)
     pas = o.InnerPolyAreas()
     self.assertEqual(len(pas.polyareas), 1)
     ipa = pas.polyareas[0]
     self.assertEqual(len(ipa.poly), 3)
Example #9
0
 def runTest(self):
     pts = geom.Points([(0.0, -2.0), (0.5, 0.0), (1.0, 0.0), (2.0, 1.0),
                        (3.0, 0.0)])
     pa = geom.PolyArea(pts, [0, 1, 2, 3, 4])
     o = offset.Offset(pa, 0.0, 0.0)
     sp = o.facespokes[0][1]
     ev = sp.VertexEvent(o.facespokes[0][2], pa.points)
     self.assertEqual(ev, None)
Example #10
0
 def testTri(self):
     pa = geom.PolyArea(
         geom.Points([(0.0, 0.0, 0.0), (1.0, 0.0, 0.0), (0.5, 0.25, 0.0)]),
         [0, 1, 2])
     o = offset.Offset(pa, 0.0, 0.0)
     o.Build()
     m = geom.Model()
     m.points = pa.points
     model.AddOffsetFacesToModel(m, o)
     if SHOW:
         showfaces.ShowFaces(m.faces, m.points, "Tri")
Example #11
0
 def testCubeTop(self):
     m = Cube()
     pa = geom.PolyArea(m.points, m.faces[1])
     model.BevelPolyAreaInModel(m, pa, 0.1, math.pi / 4., True, False)
     self.assertEqual(m.points.pos[8:], [(-0.9, -0.9, 1.1),
                                         (0.9, -0.9, 1.1), (0.9, 0.9, 1.1),
                                         (-0.9, 0.9, 1.1)])
     self.assertEqual(
         m.faces[6:],
         [[4, 5, 9, 8], [5, 6, 10, 9], [6, 7, 11, 10], [7, 4, 8, 11],
          (9, 10, 11, 8)])
Example #12
0
 def testIrreg(self):
     pa = geom.PolyArea(
         geom.Points([(0.0, 0.1, 0.0), (-0.1, -0.2, 0.0), (0.1, -0.25, 0.0),
                      (0.3, 0.05, 0.0), (1.0, 0.0, 0.0), (1.1, 1.0, 0.0),
                      (-0.1, 1.2, 0.0)]), list(range(0, 7)))
     o = offset.Offset(pa, 0.0, 0.0)
     o.Build()
     m = geom.Model()
     m.points = pa.points
     model.AddOffsetFacesToModel(m, o)
     if SHOW:
         showfaces.ShowFaces(m.faces, m.points, "Irreg")
Example #13
0
 def runTest(self):
     pa = geom.PolyArea(Vs1, F1concave)
     o = offset.Offset(pa, 0.0, 0.0)
     sp = o.facespokes[0][1]
     other = o.facespokes[0][3]
     ev = sp.EdgeEvent(other, o)
     # trig shows t/(.75-h)=sin(alpha) where tan(alpha)=2
     alpha = math.atan(2)
     sinalpha = math.sin(alpha)
     t = 0.75 * sinalpha / (1.0 + sinalpha)
     self.assertAlmostEqual(ev.time, t)
     self.assertAlmostEqual(ev.event_vertex[0], 0.5)
     self.assertAlmostEqual(ev.event_vertex[1], 1.0 - t)
Example #14
0
 def testYZ(self):
     points = geom.Points([(0., 0., 0.), (0., 1., 0.), (0., 1., 1.),
                           (0., 0., 1.)])
     pa = geom.PolyArea(points, [0, 1, 2, 3])
     norm = pa.Normal()
     self.assertEqual(norm, (1.0, 0.0, 0.0))
     (pa, transform, newv2oldv) = model._RotatedPolyAreaToXY(pa, norm)
     self.assertEqual(pa.points.pos, [(0.0, 0.0, 0.0), (0.0, -1.0, 0.0),
                                      (1.0, -1.0, 0.0), (1.0, 0.0, 0.0)])
     for i in range(4):
         newc = pa.points.pos[i]
         oldc = points.pos[newv2oldv[i]]
         self.assertEqual(geom.MulPoint3(newc, transform), oldc)
Example #15
0
 def runTest(self):
     pa = geom.PolyArea(Vs1, F1tri)
     o = offset.Offset(pa, 0.0, 0.0)
     sp = o.facespokes[0][0]
     # spoke goes from (0,0) bisecting (1,0) and (1,.5) lines
     alpha = math.atan(0.5)
     halpha = alpha / 2.0  # angle of spoke
     self.assertAlmostEqual(sp.speed, 1.0 / math.sin(halpha))
     self.assertAlmostEqual(sp.dir[0], math.cos(halpha))
     self.assertAlmostEqual(sp.dir[1], math.sin(halpha))
     ev = sp.VertexEvent(o.facespokes[0][1], pa.points)
     # time is height of triangle with base .5 and angle halpha
     # that is also the y value of the intersection point
     self.assertAlmostEqual(ev.time, 0.5 * math.tan(halpha))
     self.assertAlmostEqual(ev.event_vertex[1], ev.time)
     self.assertAlmostEqual(ev.event_vertex[0], 0.5)
Example #16
0
 def testM(self):
     pa = geom.PolyArea(Vsm, Fsm)
     o = offset.Offset(pa, 0.0, 0.0)
     o.Build()
     if SHOW:
         ShowOffset(o)
Example #17
0
 def testTri(self):
     pa = geom.PolyArea(Vs1, F1tri)
     o = offset.Offset(pa, 0.0, 0.0)
     o.Build()
     self.assertAlmostEqual(o.endtime, 0.11803398875)
     self.assertEqual(len(o.inneroffsets), 0)
Example #18
0
 def testCubeBottom(self):
     m = Cube()
     pa = geom.PolyArea(m.points, m.faces[0])
     model.BevelPolyAreaInModel(m, pa, 0.1, math.pi / 4., True, True)
     self.assertEqual(len(m.points.pos), 12)
     self.assertEqual(len(m.faces), 11)
Example #19
0
 def test3(self):
     pa = geom.PolyArea(V3D, F3)
     o = offset.Offset(pa, 0.0, 0.0)
     o.Build()
     if SHOW:
         ShowOffset(o)
Example #20
0
 def testD(self):
     pa = geom.PolyArea(V3D, FDouter, [FDinner])
     o = offset.Offset(pa, 0.0, 0.0)
     o.Build()
     if SHOW:
         ShowOffset(o)