summaryrefslogtreecommitdiffstats
path: root/libdimension-python/dimension.pyx
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2014-06-07 15:43:19 -0400
committerTavian Barnes <tavianator@tavianator.com>2014-06-07 15:44:11 -0400
commit6c95702123269a674f0ffa0b57ec756bc611c643 (patch)
tree271a4a4e7e3912899bb31d62764f3d2fb9975729 /libdimension-python/dimension.pyx
parenta79085ab984979dbf4f78545f7592c8b47e4a794 (diff)
downloaddimension-6c95702123269a674f0ffa0b57ec756bc611c643.tar.xz
objects: Implement triangle fans.
Diffstat (limited to 'libdimension-python/dimension.pyx')
-rw-r--r--libdimension-python/dimension.pyx27
1 files changed, 27 insertions, 0 deletions
diff --git a/libdimension-python/dimension.pyx b/libdimension-python/dimension.pyx
index 0c4d665..1ad6d0b 100644
--- a/libdimension-python/dimension.pyx
+++ b/libdimension-python/dimension.pyx
@@ -1143,6 +1143,33 @@ cdef class Triangle(Object):
self._object = dmnsn_new_smooth_triangle(_get_pool(), vertices, normals)
Object.__init__(self, *args, **kwargs)
+cdef class TriangleFan(Object):
+ """A triangle."""
+ def __init__(self, vertices, *args, **kwargs):
+ """
+ Create a TriangleFan.
+
+ Keyword arguments:
+ vertices -- the vertices of the fan, starting in the center
+
+ Additionally, TriangleFan() accepts any arguments that Object() accepts.
+ """
+ cdef size_t nvertices = len(vertices)
+ if nvertices < 3:
+ raise TypeError("expected at least 3 vertices")
+
+ cdef dmnsn_vector *varray
+ try:
+ varray = <dmnsn_vector *>dmnsn_malloc(nvertices*sizeof(dmnsn_vector))
+ for i in range(nvertices):
+ varray[i] = Vector(vertices[i])._v
+
+ self._object = dmnsn_new_triangle_fan(_get_pool(), varray, nvertices)
+ finally:
+ dmnsn_free(varray)
+
+ Object.__init__(self, *args, **kwargs)
+
cdef class Plane(Object):
"""A plane."""
def __init__(self, normal, double distance, *args, **kwargs):