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/Scene.c | 117 -------------------------------------------- 1 file changed, 117 deletions(-) delete mode 100644 libdimension-python/Scene.c (limited to 'libdimension-python/Scene.c') diff --git a/libdimension-python/Scene.c b/libdimension-python/Scene.c deleted file mode 100644 index 0e43ec9..0000000 --- a/libdimension-python/Scene.c +++ /dev/null @@ -1,117 +0,0 @@ -/************************************************************************* - * Copyright (C) 2009-2011 Tavian Barnes * - * * - * This file is part of The Dimension Python Module. * - * * - * The Dimension Python Module is free software; you can redistribute it * - * and/ or modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either version * - * 3 of the License, or (at your option) any later version. * - * * - * The Dimension Python Module is distributed in the hope that it will * - * be useful, but WITHOUT ANY WARRANTY; without even the implied * - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See * - * the GNU Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this program. If not, see * - * . * - *************************************************************************/ - -#include "dimension-python.h" - -static int -dmnsn_py_Scene_init(dmnsn_py_Scene *self, PyObject *args, PyObject *kwds) -{ - dmnsn_delete_scene(self->scene); - self->scene = dmnsn_new_scene(); - - static char *kwlist[] = { "canvas", "camera", "objects", NULL }; - - dmnsn_py_Canvas *canvas; - dmnsn_py_Camera *camera; - PyObject *objects; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!O!O!", kwlist, - &dmnsn_py_CanvasType, &canvas, - &dmnsn_py_CameraType, &camera, - &PyList_Type, &objects)) - return -1; - - dmnsn_scene_set_canvas(self->scene, canvas->canvas); - - if (!PyObject_CallMethod((PyObject *)camera, "initialize", "")) - return -1; - - /* Account for image proportions in camera */ - dmnsn_matrix stretch = dmnsn_scale_matrix( - dmnsn_new_vector( - (double)canvas->canvas->width/canvas->canvas->height, - 1.0, - 1.0 - ) - ); - camera->camera->trans = dmnsn_matrix_mul(camera->camera->trans, stretch); - dmnsn_scene_set_camera(self->scene, camera->camera); - self->scene->background = dmnsn_white; - - Py_ssize_t size = PyList_Size(objects); - for (Py_ssize_t i = 0; i < size; ++i) { - PyObject *obj = PyList_GetItem(objects, i); - if (!PyObject_TypeCheck(obj, &dmnsn_py_ObjectType)) { - PyErr_SetString(PyExc_TypeError, "Expected a list of objects"); - return -1; - } - - if (!PyObject_CallMethod(obj, "initialize", "")) - return -1; - - dmnsn_py_Object *object = (dmnsn_py_Object *)obj; - dmnsn_scene_add_object(self->scene, object->object); - } - - return 0; -} - -static void -dmnsn_py_Scene_dealloc(dmnsn_py_Scene *self) -{ - dmnsn_delete_scene(self->scene); - Py_TYPE(self)->tp_free((PyObject *)self); -} - -static PyObject * -dmnsn_py_Scene_raytrace(dmnsn_py_Scene *self) -{ - dmnsn_raytrace_scene(self->scene); - Py_INCREF(Py_None); - return Py_None; -} - -static PyMethodDef dmnsn_py_Scene_methods[] = { - { "raytrace", (PyCFunction)dmnsn_py_Scene_raytrace, METH_NOARGS, - "Raytrace a scene" }, - { NULL } -}; - -static PyGetSetDef dmnsn_py_Scene_getsetters[] = { - { NULL } -}; - -PyTypeObject dmnsn_py_SceneType = { - PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = "dimension.Scene", - .tp_basicsize = sizeof(dmnsn_py_Scene), - .tp_dealloc = (destructor)dmnsn_py_Scene_dealloc, - .tp_flags = Py_TPFLAGS_DEFAULT, - .tp_doc = "Dimension scene", - .tp_methods = dmnsn_py_Scene_methods, - .tp_getset = dmnsn_py_Scene_getsetters, - .tp_init = (initproc)dmnsn_py_Scene_init, -}; - -bool -dmnsn_py_init_SceneType(void) -{ - dmnsn_py_SceneType.tp_new = PyType_GenericNew; - return PyType_Ready(&dmnsn_py_SceneType) >= 0; -} -- cgit v1.2.3