Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWillian Padovani Germano <wpgermano@gmail.com>2003-11-23 20:46:06 +0300
committerWillian Padovani Germano <wpgermano@gmail.com>2003-11-23 20:46:06 +0300
commit5e7f9dfa084d978bbcb96dad7ac2bae80789714e (patch)
tree65767c41ef26feb0a7724ad3b4f05daaa69e253e /source/blender/python/api2_2x/MTex.c
parent511b098c81913a8ce437ebed6c7f211dd9563f1b (diff)
BPython:
-- New module: Blender.Texture, by new developer Alex Mole. Most of it is done: guess only Ipo, envmap, colorband and plugin were not implemented yet.
Diffstat (limited to 'source/blender/python/api2_2x/MTex.c')
-rw-r--r--source/blender/python/api2_2x/MTex.c255
1 files changed, 255 insertions, 0 deletions
diff --git a/source/blender/python/api2_2x/MTex.c b/source/blender/python/api2_2x/MTex.c
new file mode 100644
index 00000000000..3740e30cc8f
--- /dev/null
+++ b/source/blender/python/api2_2x/MTex.c
@@ -0,0 +1,255 @@
+/*
+ *
+ * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License. See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * This is a new part of Blender.
+ *
+ * Contributor(s): Alex Mole
+ *
+ * ***** END GPL/BL DUAL LICENSE BLOCK *****
+*/
+
+#include <BKE_main.h>
+#include <BKE_global.h>
+#include <BKE_object.h>
+#include <BKE_library.h>
+#include <BLI_blenlib.h>
+#include <BKE_texture.h>
+#include <BKE_utildefines.h>
+
+#include "MTex.h"
+#include "Texture.h"
+#include "constant.h"
+#include "gen_utils.h"
+#include "modules.h"
+
+
+/*****************************************************************************/
+/* Python BPy_MTex methods declarations: */
+/*****************************************************************************/
+static PyObject *MTex_setTex(BPy_MTex *self, PyObject *args);
+
+/*****************************************************************************/
+/* Python method structure definition for Blender.Texture.MTex module: */
+/*****************************************************************************/
+struct PyMethodDef M_MTex_methods[] = {
+ {NULL, NULL, 0, NULL}
+};
+
+/*****************************************************************************/
+/* Python BPy_MTex methods table: */
+/*****************************************************************************/
+static PyMethodDef BPy_MTex_methods[] = {
+ /* name, method, flags, doc */
+ {"setTex", (PyCFunction)MTex_setTex, METH_VARARGS,
+ "(i) - Set MTex Texture"},
+ {0}
+};
+
+/*****************************************************************************/
+/* Python MTex_Type callback function prototypes: */
+/*****************************************************************************/
+static void MTex_dealloc (BPy_MTex *self);
+static int MTex_setAttr (BPy_MTex *self, char *name, PyObject *v);
+static int MTex_compare (BPy_MTex *a, BPy_MTex *b);
+static PyObject *MTex_getAttr (BPy_MTex *self, char *name);
+static PyObject *MTex_repr (BPy_MTex *self);
+
+
+/*****************************************************************************/
+/* Python MTex_Type structure definition: */
+/*****************************************************************************/
+PyTypeObject MTex_Type =
+{
+ PyObject_HEAD_INIT(NULL)
+ 0, /* ob_size */
+ "Blender MTex", /* tp_name */
+ sizeof (BPy_MTex), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ /* methods */
+ (destructor)MTex_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ (getattrfunc)MTex_getAttr, /* tp_getattr */
+ (setattrfunc)MTex_setAttr, /* tp_setattr */
+ (cmpfunc)MTex_compare, /* tp_compare */
+ (reprfunc)MTex_repr, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_as_hash */
+ 0,0,0,0,0,0,
+ 0, /* tp_doc */
+ 0,0,0,0,0,0,
+ 0, /* tp_methods */
+ 0, /* tp_members */
+};
+
+
+PyObject *MTex_Init (void)
+{
+ PyObject *submodule;
+
+ MTex_Type.ob_type = &PyType_Type;
+
+ submodule = Py_InitModule("Blender.Texture.MTex", M_MTex_methods);
+
+ return submodule;
+}
+
+PyObject *MTex_CreatePyObject (MTex *mtex)
+{
+ BPy_MTex *pymtex;
+
+ pymtex = (BPy_MTex *) PyObject_NEW (BPy_MTex, &MTex_Type);
+ if (!pymtex)
+ return EXPP_ReturnPyObjError (PyExc_MemoryError,
+ "couldn't create BPy_MTex PyObject");
+
+ pymtex->mtex = mtex;
+ return (PyObject *) pymtex;
+}
+
+MTex *MTex_FromPyObject (PyObject *pyobj)
+{
+ return ((BPy_MTex *)pyobj)->mtex;
+}
+
+
+int MTex_CheckPyObject (PyObject *pyobj)
+{
+ return (pyobj->ob_type == &MTex_Type);
+}
+
+
+/*****************************************************************************/
+/* Python BPy_MTex methods: */
+/*****************************************************************************/
+
+static PyObject *MTex_setTex(BPy_MTex *self, PyObject *args)
+{
+ BPy_Texture *pytex = NULL;
+ if (!PyArg_ParseTuple(args, "O!", &Texture_Type, &pytex))
+ return EXPP_ReturnPyObjError (PyExc_TypeError,
+ "expected Texture argument");
+
+ if (self->mtex->tex)
+ self->mtex->tex->id.us--;
+
+ self->mtex->tex = Texture_FromPyObject((PyObject*)pytex);
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+static void MTex_dealloc (BPy_MTex *self)
+{
+ PyObject_DEL (self);
+}
+
+static PyObject *MTex_getAttr (BPy_MTex *self, char *name)
+{
+ if (STREQ(name, "tex"))
+ {
+ if (self->mtex->tex)
+ return Texture_CreatePyObject (self->mtex->tex);
+ else
+ {
+ Py_INCREF (Py_None);
+ return Py_None;
+ }
+ }
+ else if (STREQ(name, "texco"))
+ return PyInt_FromLong(self->mtex->texco);
+ else if (STREQ(name, "mapto"))
+ return PyInt_FromLong(self->mtex->mapto);
+
+ else if (STREQ(name, "__members__"))
+ return Py_BuildValue("[s,s,s]", "tex", "texco", "mapto");
+
+ /* not an attribute, search the methods table */
+ return Py_FindMethod(BPy_MTex_methods, (PyObject *)self, name);
+}
+
+static int MTex_setAttr (BPy_MTex *self, char *name, PyObject *value)
+{
+ PyObject *valtuple;
+ PyObject *error = NULL;
+
+ /* Put "value" in a tuple, because we want to pass it to functions *
+ * that only accept PyTuples. */
+ valtuple = Py_BuildValue("(O)", value);
+ if (!valtuple)
+ return EXPP_ReturnIntError(PyExc_MemoryError,
+ "MTex_setAttr: couldn't create PyTuple");
+
+ if (STREQ(name, "tex"))
+ error = MTex_setTex(self, valtuple);
+ else if (STREQ(name, "texco"))
+ {
+ if (PyInt_Check(value))
+ {
+ int texco = PyInt_AsLong(value);
+ /* TODO: sanity-check this input! */
+ self->mtex->texco = texco;
+ Py_INCREF (Py_None); /* because we decref it below */
+ error = Py_None;
+ }
+ }
+ else if (STREQ(name, "mapto"))
+ {
+ if (PyInt_Check(value))
+ {
+ int mapto = PyInt_AsLong(value);
+ /* TODO: sanity-check this input! */
+ self->mtex->mapto = mapto;
+ Py_INCREF (Py_None); /* because we decref it below */
+ error = Py_None;
+ }
+ }
+
+ else {
+ /* Error */
+ Py_DECREF(valtuple);
+ return EXPP_ReturnIntError (PyExc_KeyError, "attribute not found");
+ }
+
+ Py_DECREF (valtuple);
+
+ if (error != Py_None) return -1;
+
+ /* Py_None was INCREF'd by the set*() function, so we need to DECREF it */
+ Py_DECREF (Py_None);
+
+ return 0;
+}
+
+static int MTex_compare (BPy_MTex *a, BPy_MTex *b)
+{
+ return (a->mtex == b->mtex) ? 0 : -1;
+}
+
+static PyObject *MTex_repr (BPy_MTex *self)
+{
+ return PyString_FromFormat("[MTex]");
+}
+