diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2013-04-06 17:24:34 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2013-04-06 17:24:34 +0400 |
commit | acfc0ea5111bcab5ea5795187d08b2f6ec5addaa (patch) | |
tree | d9fb7e477ac551859ca95c1f0482eca8b3af1077 /source/blender/python | |
parent | 72d0cc1f6123900f5593cd0fe428568f5aa7f682 (diff) | |
parent | 2ed2226ee753cc6a7a19806d99772efa61af897f (diff) |
svn merge ^/trunk/blender -r55815:55840
Diffstat (limited to 'source/blender/python')
-rw-r--r-- | source/blender/python/bmesh/bmesh_py_ops.c | 92 | ||||
-rw-r--r-- | source/blender/python/bmesh/bmesh_py_types.c | 17 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_library.c | 10 |
3 files changed, 102 insertions, 17 deletions
diff --git a/source/blender/python/bmesh/bmesh_py_ops.c b/source/blender/python/bmesh/bmesh_py_ops.c index cc87d34d769..234dd1e5fec 100644 --- a/source/blender/python/bmesh/bmesh_py_ops.c +++ b/source/blender/python/bmesh/bmesh_py_ops.c @@ -33,6 +33,7 @@ #include <Python.h> #include "BLI_utildefines.h" +#include "BLI_dynstr.h" #include "MEM_guardedalloc.h" @@ -68,6 +69,76 @@ static PyObject *bpy_bmesh_op_repr(BPy_BMeshOpFunc *self) } +/* methods + * ======= */ + + +/* __doc__ + * ------- */ + +static char *bmp_slots_as_args(const BMOSlotType slot_types[BMO_OP_MAX_SLOTS], const bool is_out) +{ + DynStr *dyn_str = BLI_dynstr_new(); + char *ret; + + int i = 0; + + while (*slot_types[i].name) { + /* cut off '.out' by using a string size arg */ + const int name_len = is_out ? + (strchr(slot_types[i].name, '.') - slot_types[i].name) : + sizeof(slot_types[i].name); + const char *value = "<Unknown>"; + switch (slot_types[i].type) { + case BMO_OP_SLOT_BOOL: value = "False"; break; + case BMO_OP_SLOT_INT: value = "0"; break; + case BMO_OP_SLOT_FLT: value = "0.0"; break; + case BMO_OP_SLOT_PTR: value = "None"; break; + case BMO_OP_SLOT_MAT: value = "Matrix()"; break; + case BMO_OP_SLOT_VEC: value = "Vector()"; break; + case BMO_OP_SLOT_ELEMENT_BUF: value = + (slot_types[i].subtype.elem & BMO_OP_SLOT_SUBTYPE_ELEM_IS_SINGLE) ? "None" : "[]"; break; + case BMO_OP_SLOT_MAPPING: value = "{}"; break; + } + BLI_dynstr_appendf(dyn_str, i ? ", %.*s=%s" : "%.*s=%s", name_len, slot_types[i].name, value); + i++; + }; + + ret = BLI_dynstr_get_cstring(dyn_str); + BLI_dynstr_free(dyn_str); + return ret; +} + +static PyObject *bpy_bmesh_op_doc_get(BPy_BMeshOpFunc *self, void *UNUSED(closure)) +{ + PyObject *ret; + char *slot_in; + char *slot_out; + int i; + + i = BMO_opcode_from_opname(self->opname); + + slot_in = bmp_slots_as_args(bmo_opdefines[i]->slot_types_in, false); + slot_out = bmp_slots_as_args(bmo_opdefines[i]->slot_types_out, true); + + ret = PyUnicode_FromFormat("%.200s bmesh.ops.%.200s(bmesh, %s)\n -> dict(%s)", + Py_TYPE(self)->tp_name, + self->opname, slot_in, slot_out); + + MEM_freeN(slot_in); + MEM_freeN(slot_out); + + return ret; +} + +static PyGetSetDef bpy_bmesh_op_getseters[] = { + {(char *)"__doc__", (getter)bpy_bmesh_op_doc_get, (setter)NULL, NULL, NULL}, + {NULL, NULL, NULL, NULL, NULL} /* Sentinel */ +}; + + +/* Types + * ===== */ PyTypeObject bmesh_op_Type = { PyVarObject_HEAD_INIT(NULL, 0) @@ -126,7 +197,7 @@ PyTypeObject bmesh_op_Type = { /*** Attribute descriptor and subclassing stuff ***/ NULL, /* struct PyMethodDef *tp_methods; */ NULL, /* struct PyMemberDef *tp_members; */ - NULL, /* struct PyGetSetDef *tp_getset; */ + bpy_bmesh_op_getseters, /* struct PyGetSetDef *tp_getset; */ NULL, /* struct _typeobject *tp_base; */ NULL, /* PyObject *tp_dict; */ NULL, /* descrgetfunc tp_descr_get; */ @@ -154,20 +225,17 @@ PyTypeObject bmesh_op_Type = { static PyObject *bpy_bmesh_ops_fakemod_getattro(PyObject *UNUSED(self), PyObject *pyname) { - const unsigned int tot = bmo_opdefines_total; - unsigned int i; const char *opname = _PyUnicode_AsString(pyname); - for (i = 0; i < tot; i++) { - if (STREQ(bmo_opdefines[i]->opname, opname)) { - return bpy_bmesh_op_CreatePyObject(opname); - } + if (BMO_opcode_from_opname(opname) != -1) { + return bpy_bmesh_op_CreatePyObject(opname); + } + else { + PyErr_Format(PyExc_AttributeError, + "BMeshOpsModule: operator \"%.200s\" doesn't exist", + opname); + return NULL; } - - PyErr_Format(PyExc_AttributeError, - "BMeshOpsModule: operator \"%.200s\" doesn't exist", - opname); - return NULL; } static PyObject *bpy_bmesh_ops_fakemod_dir(PyObject *UNUSED(self)) diff --git a/source/blender/python/bmesh/bmesh_py_types.c b/source/blender/python/bmesh/bmesh_py_types.c index 6aaa58f0ed4..f49018d6e18 100644 --- a/source/blender/python/bmesh/bmesh_py_types.c +++ b/source/blender/python/bmesh/bmesh_py_types.c @@ -1718,6 +1718,22 @@ static PyObject *bpy_bmface_calc_center_mean(BPy_BMFace *self) return Vector_CreatePyObject(cent, 3, Py_NEW, NULL); } +PyDoc_STRVAR(bpy_bmface_calc_center_mean_weighted_doc, +".. method:: calc_center_median_weighted()\n" +"\n" +" Return median center of the face weighted by edge lengths.\n" +"\n" +" :return: a 3D vector.\n" +" :rtype: :class:`mathutils.Vector`\n" +); +static PyObject *bpy_bmface_calc_center_mean_weighted(BPy_BMFace *self) +{ + float cent[3]; + + BPY_BM_CHECK_OBJ(self); + BM_face_calc_center_mean_weighted(self->f, cent); + return Vector_CreatePyObject(cent, 3, Py_NEW, NULL); +} PyDoc_STRVAR(bpy_bmface_calc_center_bounds_doc, ".. method:: calc_center_bounds()\n" @@ -2573,6 +2589,7 @@ static struct PyMethodDef bpy_bmface_methods[] = { {"calc_area", (PyCFunction)bpy_bmface_calc_area, METH_NOARGS, bpy_bmface_calc_area_doc}, {"calc_perimeter", (PyCFunction)bpy_bmface_calc_perimeter, METH_NOARGS, bpy_bmface_calc_perimeter_doc}, {"calc_center_median", (PyCFunction)bpy_bmface_calc_center_mean, METH_NOARGS, bpy_bmface_calc_center_mean_doc}, + {"calc_center_median_weighted", (PyCFunction)bpy_bmface_calc_center_mean_weighted, METH_NOARGS, bpy_bmface_calc_center_mean_weighted_doc}, {"calc_center_bounds", (PyCFunction)bpy_bmface_calc_center_bounds, METH_NOARGS, bpy_bmface_calc_center_bounds_doc}, {"normal_update", (PyCFunction)bpy_bmface_normal_update, METH_NOARGS, bpy_bmface_normal_update_doc}, diff --git a/source/blender/python/intern/bpy_library.c b/source/blender/python/intern/bpy_library.c index 623d45dfd90..0ab8543c4ac 100644 --- a/source/blender/python/intern/bpy_library.c +++ b/source/blender/python/intern/bpy_library.c @@ -31,20 +31,17 @@ * a context manager. */ -/* nifty feature. swap out strings for RNA data */ -#define USE_RNA_DATABLOCKS - #include <Python.h> #include <stddef.h> -#include "BLO_readfile.h" - #include "BLI_utildefines.h" #include "BLI_string.h" #include "BLI_linklist.h" #include "BLI_path_util.h" #include "BLI_listbase.h" +#include "BLO_readfile.h" + #include "BKE_global.h" #include "BKE_main.h" #include "BKE_library.h" @@ -57,6 +54,9 @@ #include "bpy_util.h" #include "bpy_library.h" +/* nifty feature. swap out strings for RNA data */ +#define USE_RNA_DATABLOCKS + #ifdef USE_RNA_DATABLOCKS # include "bpy_rna.h" # include "RNA_access.h" |