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, [])
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))
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)
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)
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)
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)
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)
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)
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)
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")
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)])
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")
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)
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)
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)
def testM(self): pa = geom.PolyArea(Vsm, Fsm) o = offset.Offset(pa, 0.0, 0.0) o.Build() if SHOW: ShowOffset(o)
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)
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)
def test3(self): pa = geom.PolyArea(V3D, F3) o = offset.Offset(pa, 0.0, 0.0) o.Build() if SHOW: ShowOffset(o)
def testD(self): pa = geom.PolyArea(V3D, FDouter, [FDinner]) o = offset.Offset(pa, 0.0, 0.0) o.Build() if SHOW: ShowOffset(o)