
Add simple tests for named planes Use isinstance instead of type in Vector because type caused the problem that 'type(Vector) is FreeCAD.Base.Vector'.
126 lines
5.1 KiB
Python
126 lines
5.1 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)
|