""" Tests basic workplane functionality """ # core modules # my modules from cadquery import * from tests import BaseTest, toTuple xAxis_ = Vector(1, 0, 0) yAxis_ = Vector(0, 1, 0) zAxis_ = Vector(0, 0, 1) xInvAxis_ = Vector(-1, 0, 0) yInvAxis_ = Vector(0, -1, 0) zInvAxis_ = Vector(0, 0, -1) class TestWorkplanes(BaseTest): def testYZPlaneOrigins(self): # xy plane-- with origin at x=0.25 base = Vector(0.25, 0, 0) p = Plane(base, Vector(0, 1, 0), Vector(1, 0, 0)) # origin is always (0,0,0) in local coordinates self.assertTupleAlmostEquals( (0, 0, 0), p.toLocalCoords(p.origin).toTuple(), 2) #(0,0,0) is always the original base in global coordinates self.assertTupleAlmostEquals( base.toTuple(), p.toWorldCoords((0, 0)).toTuple(), 2) def testXYPlaneOrigins(self): base = Vector(0, 0, 0.25) p = Plane(base, Vector(1, 0, 0), Vector(0, 0, 1)) # origin is always (0,0,0) in local coordinates self.assertTupleAlmostEquals( (0, 0, 0), p.toLocalCoords(p.origin).toTuple(), 2) #(0,0,0) is always the original base in global coordinates self.assertTupleAlmostEquals( toTuple(base), p.toWorldCoords((0, 0)).toTuple(), 2) def testXZPlaneOrigins(self): base = Vector(0, 0.25, 0) p = Plane(base, Vector(0, 0, 1), Vector(0, 1, 0)) #(0,0,0) is always the original base in global coordinates self.assertTupleAlmostEquals( toTuple(base), p.toWorldCoords((0, 0)).toTuple(), 2) # origin is always (0,0,0) in local coordinates self.assertTupleAlmostEquals( (0, 0, 0), p.toLocalCoords(p.origin).toTuple(), 2) def testPlaneBasics(self): p = Plane.XY() # local to world self.assertTupleAlmostEquals( (1.0, 1.0, 0), p.toWorldCoords((1, 1)).toTuple(), 2) self.assertTupleAlmostEquals( (-1.0, -1.0, 0), p.toWorldCoords((-1, -1)).toTuple(), 2) # world to local self.assertTupleAlmostEquals( (-1.0, -1.0), p.toLocalCoords(Vector(-1, -1, 0)).toTuple(), 2) self.assertTupleAlmostEquals( (1.0, 1.0), p.toLocalCoords(Vector(1, 1, 0)).toTuple(), 2) p = Plane.YZ() self.assertTupleAlmostEquals( (0, 1.0, 1.0), p.toWorldCoords((1, 1)).toTuple(), 2) # world to local self.assertTupleAlmostEquals( (1.0, 1.0), p.toLocalCoords(Vector(0, 1, 1)).toTuple(), 2) p = Plane.XZ() r = p.toWorldCoords((1, 1)).toTuple() self.assertTupleAlmostEquals((1.0, 0.0, 1.0), r, 2) # world to local self.assertTupleAlmostEquals( (1.0, 1.0), p.toLocalCoords(Vector(1, 0, 1)).toTuple(), 2) def testOffsetPlanes(self): "Tests that a plane offset from the origin works ok too" p = Plane.XY(origin=(10.0, 10.0, 0)) self.assertTupleAlmostEquals( (11.0, 11.0, 0.0), p.toWorldCoords((1.0, 1.0)).toTuple(), 2) self.assertTupleAlmostEquals((2.0, 2.0), p.toLocalCoords( Vector(12.0, 12.0, 0)).toTuple(), 2) # TODO test these offsets in the other dimensions too p = Plane.YZ(origin=(0, 2, 2)) self.assertTupleAlmostEquals( (0.0, 5.0, 5.0), p.toWorldCoords((3.0, 3.0)).toTuple(), 2) self.assertTupleAlmostEquals((10, 10.0, 0.0), p.toLocalCoords( Vector(0.0, 12.0, 12.0)).toTuple(), 2) p = Plane.XZ(origin=(2, 0, 2)) r = p.toWorldCoords((1.0, 1.0)).toTuple() self.assertTupleAlmostEquals((3.0, 0.0, 3.0), r, 2) self.assertTupleAlmostEquals((10.0, 10.0), p.toLocalCoords( Vector(12.0, 0.0, 12.0)).toTuple(), 2) def testXYPlaneBasics(self): p = Plane.named('XY') self.assertTupleAlmostEquals(p.zDir.toTuple(), zAxis_.toTuple(), 4) self.assertTupleAlmostEquals(p.xDir.toTuple(), xAxis_.toTuple(), 4) self.assertTupleAlmostEquals(p.yDir.toTuple(), yAxis_.toTuple(), 4) def testYZPlaneBasics(self): p = Plane.named('YZ') self.assertTupleAlmostEquals(p.zDir.toTuple(), xAxis_.toTuple(), 4) self.assertTupleAlmostEquals(p.xDir.toTuple(), yAxis_.toTuple(), 4) self.assertTupleAlmostEquals(p.yDir.toTuple(), zAxis_.toTuple(), 4) def testZXPlaneBasics(self): p = Plane.named('ZX') self.assertTupleAlmostEquals(p.zDir.toTuple(), yAxis_.toTuple(), 4) self.assertTupleAlmostEquals(p.xDir.toTuple(), zAxis_.toTuple(), 4) self.assertTupleAlmostEquals(p.yDir.toTuple(), xAxis_.toTuple(), 4) def testXZPlaneBasics(self): p = Plane.named('XZ') self.assertTupleAlmostEquals(p.zDir.toTuple(), yInvAxis_.toTuple(), 4) self.assertTupleAlmostEquals(p.xDir.toTuple(), xAxis_.toTuple(), 4) self.assertTupleAlmostEquals(p.yDir.toTuple(), zAxis_.toTuple(), 4) def testYXPlaneBasics(self): p = Plane.named('YX') self.assertTupleAlmostEquals(p.zDir.toTuple(), zInvAxis_.toTuple(), 4) self.assertTupleAlmostEquals(p.xDir.toTuple(), yAxis_.toTuple(), 4) self.assertTupleAlmostEquals(p.yDir.toTuple(), xAxis_.toTuple(), 4) def testZYPlaneBasics(self): p = Plane.named('ZY') self.assertTupleAlmostEquals(p.zDir.toTuple(), xInvAxis_.toTuple(), 4) self.assertTupleAlmostEquals(p.xDir.toTuple(), zAxis_.toTuple(), 4) self.assertTupleAlmostEquals(p.yDir.toTuple(), yAxis_.toTuple(), 4)