144 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""
 | 
						|
    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)
 |