From 9b758508df283a533a4cfc605545a35f77bc9d5f Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Mon, 13 Jun 2011 00:16:27 -0600 Subject: Use Cython for the Python module. --- libdimension-python/tests/demo.py | 138 +++++++++++++++++++++++++++++++--- libdimension-python/tests/geometry.py | 23 +++--- 2 files changed, 140 insertions(+), 21 deletions(-) (limited to 'libdimension-python/tests') diff --git a/libdimension-python/tests/demo.py b/libdimension-python/tests/demo.py index fd4d193..4b68114 100755 --- a/libdimension-python/tests/demo.py +++ b/libdimension-python/tests/demo.py @@ -24,29 +24,145 @@ from dimension import * # Treat warnings as errors for tests dieOnWarnings(True) +# Canvas canvas = Canvas(width = 768, height = 480) havePNG = True try: - canvas.optimizePNG() + canvas.optimizePNG() except OSError as e: - if e.errno == errno.ENOSYS: - havePNG = False - else: - raise + if e.errno == errno.ENOSYS: + havePNG = False + else: + raise +# Camera camera = PerspectiveCamera(location = (0, 0.25, -4), - look_at = Zero) + lookAt = 0) camera.transform(rotate(53*Y)) +# Lights +lights = [ + PointLight(location = (-15, 20, 10), color = White), +] + +# Objects + +hollowCube = Difference( + [ + Box( + (-1, -1, -1), (1, 1, 1), + + texture = Texture( + pigment = Color(0, 0, 1, trans = 0.75, filter = 1/3), + finish = Reflection(0.5), + ), + interior = Interior( + ior = 1.1, + ), + ) + .transform(rotate(45*X)), + + Sphere( + center = 0, radius = 1.25, + texture = Texture( + pigment = Green, + finish = Phong(strength = 0.2, size = 40), + ), + ) + ], +) + +arrow = Union( + [ + Cylinder(bottom = -1.25*Y, top = 1.25*Y, radius = 0.1), + Cone( + bottom = 1.25*Y, bottomRadius = 0.1, + top = 1.5*Y, topRadius = 0, + open = True + ), + ], + texture = Texture( + pigment = ColorMap( + Gradient(Y), + { + 0/6: Red, + 1/6: Orange, + 2/6: Yellow, + 3/6: Green, + 4/6: Blue, + 5/6: Magenta, + 6/6: Red, + }, + ) + .transform(scale(1, 2.75, 1)) + .transform(translate(-1.25*Y)), + ), +) +arrow.transform(rotate(-45*X)) + +torii = Union( + [ + Torus(majorRadius = 0.15, minorRadius = 0.05) + .transform(translate(-Y)), + + Torus(majorRadius = 0.15, minorRadius = 0.05), + + Torus(majorRadius = 0.15, minorRadius = 0.05) + .transform(translate(Y)), + ], + texture = Texture( + pigment = Blue, + finish = Ambient(1), + ), +) +torii.transform(rotate(-45*X)) + +ground = Plane( + normal = Y, distance = -2, + + texture = Texture( + pigment = PigmentMap( + Checker(), + [ + White, + ColorMap(Checker(), [Black, White]).transform(scale(1/3, 1/3, 1/3)) + ], + ), + ), +) + objects = [ - Sphere(radius = 1, center = Zero) + hollowCube, + arrow, + torii, + ground, ] -scene = Scene(canvas = canvas, - camera = camera, - objects = objects) +# Sky sphere +skySphere = SkySphere( + [ + ColorMap( + pattern = Gradient(Y), + map = { + 0: Orange, + 0.35: Color(0, 0.1, 0.2, trans = 0.1, filter = 0.0), + }, + ), + ] +) + +# Scene +scene = Scene(canvas = canvas, + objects = objects, + lights = lights, + camera = camera) +scene.defaultTexture = Texture(finish = Ambient(0.1) + Diffuse(0.6)) +scene.background = Clear +scene.skySphere = skySphere +scene.adcBailout = 1/255 +scene.recursionLimit = 5 scene.raytrace() if havePNG: - canvas.writePNG('demo.png') + canvas.writePNG('demo.png') diff --git a/libdimension-python/tests/geometry.py b/libdimension-python/tests/geometry.py index 0c53ad6..c1d4f48 100755 --- a/libdimension-python/tests/geometry.py +++ b/libdimension-python/tests/geometry.py @@ -24,10 +24,13 @@ from dimension import * # Treat warnings as errors for tests dieOnWarnings(True) -assert Zero == Vector(0, 0, 0), Zero -assert X == Vector(1, 0, 0), X -assert Y == Vector(0, 1, 0), Y -assert Z == Vector(0, 0, 1), Z +assert 0 == Vector(0, 0, 0), Vector(0) +assert X == Vector(1, 0, 0), X +assert Y == Vector(0, 1, 0), Y +assert Z == Vector(0, 0, 1), Z + +assert Vector((1, 2, 3)) == Vector(1, 2, 3), Vector((1, 2, 3)) +assert Vector(X) == X, Vector(X) v = Vector(1.5, 2.5, 3.5) @@ -44,15 +47,15 @@ assert v.normalized() == v/7, v.normalized() assert v + v == 2*v == v*2 == Vector(4, 6, 12), v + v assert v/2 == v - v/2 == Vector(1, 1.5, 3), v/2 assert +v == v, +v -assert v + -v == Zero, v + -v -assert cross(v, v) == Zero, cross(v, v) +assert v + -v == 0, v + -v +assert cross(v, v) == 0, cross(v, v) assert dot(v, v) == v.norm()**2, dot(v, v) assert v, bool(v) -assert not Zero, not Zero +assert not Vector(0), not Vector(0) assert proj(v, X) == 2*X, proj(v, X) -m = Matrix(1, 2, 3, 4, - 5, 6, 7, 8, +m = Matrix(1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12) assert repr(m) == 'dimension.Matrix(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, \ @@ -68,7 +71,7 @@ assert s == Matrix(1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0), s -t = translate((1, 2, 3)) +t = translate(1, 2, 3) assert t == Matrix(1, 0, 0, 1, 0, 1, 0, 2, 0, 0, 1, 3), t -- cgit v1.2.3