2013-04-14 18:39:47 -04:00
|
|
|
"""
|
|
|
|
Tests basic workplane functionality
|
|
|
|
"""
|
2017-09-17 00:57:12 +02:00
|
|
|
# core modules
|
2013-04-14 18:39:47 -04:00
|
|
|
|
2017-09-17 00:57:12 +02:00
|
|
|
# my modules
|
2013-04-14 18:39:47 -04:00
|
|
|
from cadquery import *
|
2017-09-17 00:57:12 +02:00
|
|
|
from tests import BaseTest, toTuple
|
2013-04-14 18:39:47 -04:00
|
|
|
|
2015-10-04 22:49:34 +02:00
|
|
|
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)
|
|
|
|
|
2017-09-17 00:57:12 +02:00
|
|
|
|
2013-04-16 22:29:06 -04:00
|
|
|
class TestWorkplanes(BaseTest):
|
2013-04-14 18:39:47 -04:00
|
|
|
def testYZPlaneOrigins(self):
|
2017-09-17 00:57:12 +02:00
|
|
|
# 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))
|
2013-04-14 18:39:47 -04:00
|
|
|
|
2017-09-17 00:57:12 +02:00
|
|
|
# origin is always (0,0,0) in local coordinates
|
2020-01-20 20:52:12 +01:00
|
|
|
self.assertTupleAlmostEquals((0, 0, 0), p.toLocalCoords(p.origin).toTuple(), 2)
|
2013-04-14 18:39:47 -04:00
|
|
|
|
2020-01-20 20:52:12 +01:00
|
|
|
# (0,0,0) is always the original base in global coordinates
|
2017-09-17 00:57:12 +02:00
|
|
|
self.assertTupleAlmostEquals(
|
2020-01-20 20:52:12 +01:00
|
|
|
base.toTuple(), p.toWorldCoords((0, 0)).toTuple(), 2
|
|
|
|
)
|
2013-04-14 18:39:47 -04:00
|
|
|
|
|
|
|
def testXYPlaneOrigins(self):
|
2017-09-17 00:57:12 +02:00
|
|
|
base = Vector(0, 0, 0.25)
|
|
|
|
p = Plane(base, Vector(1, 0, 0), Vector(0, 0, 1))
|
2013-04-14 18:39:47 -04:00
|
|
|
|
2017-09-17 00:57:12 +02:00
|
|
|
# origin is always (0,0,0) in local coordinates
|
2020-01-20 20:52:12 +01:00
|
|
|
self.assertTupleAlmostEquals((0, 0, 0), p.toLocalCoords(p.origin).toTuple(), 2)
|
2013-04-14 18:39:47 -04:00
|
|
|
|
2020-01-20 20:52:12 +01:00
|
|
|
# (0,0,0) is always the original base in global coordinates
|
2017-09-17 00:57:12 +02:00
|
|
|
self.assertTupleAlmostEquals(
|
2020-01-20 20:52:12 +01:00
|
|
|
toTuple(base), p.toWorldCoords((0, 0)).toTuple(), 2
|
|
|
|
)
|
2013-04-14 18:39:47 -04:00
|
|
|
|
|
|
|
def testXZPlaneOrigins(self):
|
2017-09-17 00:57:12 +02:00
|
|
|
base = Vector(0, 0.25, 0)
|
|
|
|
p = Plane(base, Vector(0, 0, 1), Vector(0, 1, 0))
|
2013-04-14 18:39:47 -04:00
|
|
|
|
2020-01-20 20:52:12 +01:00
|
|
|
# (0,0,0) is always the original base in global coordinates
|
2017-09-17 00:57:12 +02:00
|
|
|
self.assertTupleAlmostEquals(
|
2020-01-20 20:52:12 +01:00
|
|
|
toTuple(base), p.toWorldCoords((0, 0)).toTuple(), 2
|
|
|
|
)
|
2013-04-14 18:39:47 -04:00
|
|
|
|
2017-09-17 00:57:12 +02:00
|
|
|
# origin is always (0,0,0) in local coordinates
|
2020-01-20 20:52:12 +01:00
|
|
|
self.assertTupleAlmostEquals((0, 0, 0), p.toLocalCoords(p.origin).toTuple(), 2)
|
2013-04-14 18:39:47 -04:00
|
|
|
|
|
|
|
def testPlaneBasics(self):
|
|
|
|
p = Plane.XY()
|
2017-09-17 00:57:12 +02:00
|
|
|
# local to world
|
|
|
|
self.assertTupleAlmostEquals(
|
2020-01-20 20:52:12 +01:00
|
|
|
(1.0, 1.0, 0), p.toWorldCoords((1, 1)).toTuple(), 2
|
|
|
|
)
|
2017-09-17 00:57:12 +02:00
|
|
|
self.assertTupleAlmostEquals(
|
2020-01-20 20:52:12 +01:00
|
|
|
(-1.0, -1.0, 0), p.toWorldCoords((-1, -1)).toTuple(), 2
|
|
|
|
)
|
2017-09-17 00:57:12 +02:00
|
|
|
|
|
|
|
# world to local
|
|
|
|
self.assertTupleAlmostEquals(
|
2020-01-20 20:52:12 +01:00
|
|
|
(-1.0, -1.0), p.toLocalCoords(Vector(-1, -1, 0)).toTuple(), 2
|
|
|
|
)
|
2017-09-17 00:57:12 +02:00
|
|
|
self.assertTupleAlmostEquals(
|
2020-01-20 20:52:12 +01:00
|
|
|
(1.0, 1.0), p.toLocalCoords(Vector(1, 1, 0)).toTuple(), 2
|
|
|
|
)
|
2013-04-14 18:39:47 -04:00
|
|
|
|
|
|
|
p = Plane.YZ()
|
2017-09-17 00:57:12 +02:00
|
|
|
self.assertTupleAlmostEquals(
|
2020-01-20 20:52:12 +01:00
|
|
|
(0, 1.0, 1.0), p.toWorldCoords((1, 1)).toTuple(), 2
|
|
|
|
)
|
2013-04-14 18:39:47 -04:00
|
|
|
|
2017-09-17 00:57:12 +02:00
|
|
|
# world to local
|
|
|
|
self.assertTupleAlmostEquals(
|
2020-01-20 20:52:12 +01:00
|
|
|
(1.0, 1.0), p.toLocalCoords(Vector(0, 1, 1)).toTuple(), 2
|
|
|
|
)
|
2013-04-14 18:39:47 -04:00
|
|
|
|
|
|
|
p = Plane.XZ()
|
2017-09-17 00:57:12 +02:00
|
|
|
r = p.toWorldCoords((1, 1)).toTuple()
|
|
|
|
self.assertTupleAlmostEquals((1.0, 0.0, 1.0), r, 2)
|
2013-04-14 18:39:47 -04:00
|
|
|
|
2017-09-17 00:57:12 +02:00
|
|
|
# world to local
|
|
|
|
self.assertTupleAlmostEquals(
|
2020-01-20 20:52:12 +01:00
|
|
|
(1.0, 1.0), p.toLocalCoords(Vector(1, 0, 1)).toTuple(), 2
|
|
|
|
)
|
2013-04-14 18:39:47 -04:00
|
|
|
|
|
|
|
def testOffsetPlanes(self):
|
|
|
|
"Tests that a plane offset from the origin works ok too"
|
2017-09-17 00:57:12 +02:00
|
|
|
p = Plane.XY(origin=(10.0, 10.0, 0))
|
|
|
|
|
|
|
|
self.assertTupleAlmostEquals(
|
2020-01-20 20:52:12 +01:00
|
|
|
(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
|
|
|
|
)
|
2017-09-17 00:57:12 +02:00
|
|
|
|
|
|
|
# TODO test these offsets in the other dimensions too
|
|
|
|
p = Plane.YZ(origin=(0, 2, 2))
|
|
|
|
self.assertTupleAlmostEquals(
|
2020-01-20 20:52:12 +01:00
|
|
|
(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
|
|
|
|
)
|
2017-09-17 00:57:12 +02:00
|
|
|
|
|
|
|
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)
|
2020-01-20 20:52:12 +01:00
|
|
|
self.assertTupleAlmostEquals(
|
|
|
|
(10.0, 10.0), p.toLocalCoords(Vector(12.0, 0.0, 12.0)).toTuple(), 2
|
|
|
|
)
|
2015-10-04 22:49:34 +02:00
|
|
|
|
|
|
|
def testXYPlaneBasics(self):
|
2020-01-20 20:52:12 +01:00
|
|
|
p = Plane.named("XY")
|
2015-10-04 22:49:34 +02:00
|
|
|
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):
|
2020-01-20 20:52:12 +01:00
|
|
|
p = Plane.named("YZ")
|
2015-10-04 22:49:34 +02:00
|
|
|
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):
|
2020-01-20 20:52:12 +01:00
|
|
|
p = Plane.named("ZX")
|
2015-10-04 22:49:34 +02:00
|
|
|
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):
|
2020-01-20 20:52:12 +01:00
|
|
|
p = Plane.named("XZ")
|
2015-10-04 22:49:34 +02:00
|
|
|
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):
|
2020-01-20 20:52:12 +01:00
|
|
|
p = Plane.named("YX")
|
2015-10-04 22:49:34 +02:00
|
|
|
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):
|
2020-01-20 20:52:12 +01:00
|
|
|
p = Plane.named("ZY")
|
2015-10-04 22:49:34 +02:00
|
|
|
self.assertTupleAlmostEquals(p.zDir.toTuple(), xInvAxis_.toTuple(), 4)
|
|
|
|
self.assertTupleAlmostEquals(p.xDir.toTuple(), zAxis_.toTuple(), 4)
|
|
|
|
self.assertTupleAlmostEquals(p.yDir.toTuple(), yAxis_.toTuple(), 4)
|