44#define BPy_BMLoopUV_Check(v) (Py_TYPE(v) == &BPy_BMLoopUV_Type)
65 "Loops UV (as a 2D Vector).\n"
67 ":type: :class:`mathutils.Vector`\n");
86 bpy_bmloopuv_pin_uv_doc,
94 return self->pin ? PyBool_FromLong(*
self->pin) :
nullptr;
109 PyErr_SetString(PyExc_RuntimeError,
110 "active uv layer has no associated pin layer. This is a bug!");
122 bpy_bmloopuv_pin_uv_doc,
124 {
nullptr,
nullptr,
nullptr,
nullptr,
nullptr}
147 PyErr_Format(PyExc_TypeError,
"expected BMLoopUV, not a %.200s", Py_TYPE(value)->tp_name);
171 return (PyObject *)
self;
179#define BPy_BMVertSkin_Check(v) (Py_TYPE(v) == &BPy_BMVertSkin_Type)
188 bpy_bmvertskin_radius_doc,
189 "Vert skin radii (as a 2D Vector).\n"
191 ":type: :class:`mathutils.Vector`\n");
210 bpy_bmvertskin_flag__use_root_doc,
211 "Use as root vertex. Setting this flag does not clear other roots in the same mesh island.\n"
216 bpy_bmvertskin_flag__use_loose_doc,
217 "Use loose vertex.\n"
224 return PyBool_FromLong(
self->data->flag &
flag);
249 bpy_bmvertskin_radius_doc,
254 bpy_bmvertskin_flag__use_root_doc,
259 bpy_bmvertskin_flag__use_loose_doc,
262 {
nullptr,
nullptr,
nullptr,
nullptr,
nullptr}
285 PyErr_Format(PyExc_TypeError,
"expected BMVertSkin, not a %.200s", Py_TYPE(value)->tp_name);
296 self->data = mvertskin;
297 return (PyObject *)
self;
309#define MLOOPCOL_FROM_CAPSULE(color_capsule) \
310 ((MLoopCol *)PyCapsule_GetPointer(color_capsule, nullptr))
355 const float f = bmo->data[index];
362 bmo->data[index] = f;
393 PyObject *color_capsule;
394 color_capsule = PyCapsule_New(mloopcol,
nullptr,
nullptr);
398#undef MLOOPCOL_FROM_CAPSULE
429#define BPy_BMDeformVert_Check(v) (Py_TYPE(v) == &BPy_BMDeformVert_Type)
441 return self->data->totweight;
446 if (PyIndex_Check(key)) {
448 i = PyNumber_AsSsize_t(key, PyExc_IndexError);
449 if (
i == -1 && PyErr_Occurred()) {
456 PyErr_SetString(PyExc_KeyError,
457 "BMDeformVert[key] = x: "
462 return PyFloat_FromDouble(dw->
weight);
466 PyExc_TypeError,
"BMDeformVert keys must be integers, not %.200s", Py_TYPE(key)->tp_name);
472 if (PyIndex_Check(key)) {
475 i = PyNumber_AsSsize_t(key, PyExc_IndexError);
476 if (
i == -1 && PyErr_Occurred()) {
483 PyErr_SetString(PyExc_KeyError,
484 "BMDeformVert[key] = x: "
485 "weight keys cannot be negative");
490 const float f = PyFloat_AsDouble(value);
491 if (f == -1 && PyErr_Occurred()) {
492 PyErr_SetString(PyExc_TypeError,
493 "BMDeformVert[key] = x: "
494 "assigned value not a number");
505 PyErr_SetString(PyExc_KeyError,
506 "del BMDeformVert[key]: "
516 PyExc_TypeError,
"BMDeformVert keys must be integers, not %.200s", Py_TYPE(key)->tp_name);
522 const int key = PyLong_AsSsize_t(value);
524 if (key == -1 && PyErr_Occurred()) {
525 PyErr_SetString(PyExc_TypeError,
"BMDeformVert.__contains__: expected an int");
559 bpy_bmdeformvert_keys_doc,
560 ".. method:: keys()\n"
562 " Return the group indices used by this vertex\n"
563 " (matching Python's dict.keys() functionality).\n"
565 " :return: the deform group this vertex uses\n"
566 " :rtype: list[int]\n");
573 ret = PyList_New(
self->data->totweight);
574 for (
i = 0;
i <
self->data->totweight;
i++, dw++) {
575 PyList_SET_ITEM(
ret,
i, PyLong_FromLong(dw->
def_nr));
583 bpy_bmdeformvert_values_doc,
584 ".. method:: values()\n"
586 " Return the weights of the deform vertex\n"
587 " (matching Python's dict.values() functionality).\n"
589 " :return: The weights that influence this vertex\n"
590 " :rtype: list[float]\n");
597 ret = PyList_New(
self->data->totweight);
598 for (
i = 0;
i <
self->data->totweight;
i++, dw++) {
599 PyList_SET_ITEM(
ret,
i, PyFloat_FromDouble(dw->
weight));
607 bpy_bmdeformvert_items_doc,
608 ".. method:: items()\n"
610 " Return (group, weight) pairs for this vertex\n"
611 " (matching Python's dict.items() functionality).\n"
613 " :return: (key, value) pairs for each deform weight of this vertex.\n"
614 " :rtype: list[tuple[int, float]]\n");
622 ret = PyList_New(
self->data->totweight);
623 for (
i = 0;
i <
self->data->totweight;
i++, dw++) {
624 item = PyTuple_New(2);
626 PyList_SET_ITEM(
ret,
i, item);
634 bpy_bmdeformvert_get_doc,
635 ".. method:: get(key, default=None)\n"
637 " Returns the deform weight matching the key or default\n"
638 " when not found (matches Python's dictionary function of the same name).\n"
640 " :arg key: The key associated with deform weight.\n"
642 " :arg default: Optional argument for the value to return if\n"
643 " *key* is not found.\n"
644 " :type default: Any\n");
648 PyObject *def = Py_None;
650 if (!PyArg_ParseTuple(args,
"i|O:get", &key, &def)) {
657 return PyFloat_FromDouble(dw->
weight);
660 return Py_NewRef(def);
665 bpy_bmdeformvert_clear_doc,
666 ".. method:: clear()\n"
668 " Clears all weights.\n");
678# pragma clang diagnostic push
679# pragma clang diagnostic ignored "-Wcast-function-type"
681# pragma GCC diagnostic push
682# pragma GCC diagnostic ignored "-Wcast-function-type"
693 {
nullptr,
nullptr, 0,
nullptr},
698# pragma clang diagnostic pop
700# pragma GCC diagnostic pop
727 PyErr_Format(PyExc_TypeError,
"expected BMDeformVert, not a %.200s", Py_TYPE(value)->tp_name);
732 if (
LIKELY(dvert != dvert_src)) {
742 return (PyObject *)
self;
CustomData interface, see also DNA_customdata_types.h.
MINLINE float clamp_f(float value, float min, float max)
MINLINE void rgba_float_to_uchar(unsigned char r_col[4], const float col_f[4])
MINLINE void rgba_uchar_to_float(float r_col[4], const unsigned char col_ub[4])
MINLINE void copy_v2_v2(float r[2], const float a[2])
#define POINTER_AS_INT(i)
#define BM_ELEM_CD_GET_FLOAT_P(ele, offset)
#define BM_ELEM_CD_SET_BOOL(ele, offset, f)
#define BM_ELEM_CD_GET_BOOL_P(ele, offset)
BMesh const char void * data
static PyObject * bpy_bmdeformvert_items(BPy_BMDeformVert *self)
static int bpy_bmloopuv_uv_set(BPy_BMLoopUV *self, PyObject *value, void *)
static PySequenceMethods bpy_bmdeformvert_as_sequence
static int mathutils_bmloopcol_set(BaseMathObject *bmo, int)
int BPy_BMVertSkin_AssignPyObject(MVertSkin *mvertskin, PyObject *value)
static PyObject * bpy_bmdeformvert_clear(BPy_BMDeformVert *self)
static void bm_init_types_bmloopuv()
static PyObject * bpy_bmloopuv_pin_uv_get(BPy_BMLoopUV *self, void *)
static int bpy_bmvertskin_flag_set(BPy_BMVertSkin *self, PyObject *value, void *flag_p)
static PyObject * bpy_bmdeformvert_subscript(BPy_BMDeformVert *self, PyObject *key)
static void mloopcol_to_float(const MLoopCol *mloopcol, float r_col[4])
static PyObject * bpy_bmvertskin_flag_get(BPy_BMVertSkin *self, void *flag_p)
static PyMethodDef bpy_bmdeformvert_methods[]
PyObject * BPy_BMDeformVert_CreatePyObject(MDeformVert *dvert)
static int bpy_bmloopuv_pin_uv_set(BPy_BMLoopUV *self, PyObject *value, void *)
static PyObject * bpy_bmdeformvert_keys(BPy_BMDeformVert *self)
#define MLOOPCOL_FROM_CAPSULE(color_capsule)
static PyObject * bpy_bmdeformvert_get(BPy_BMDeformVert *self, PyObject *args)
int BPy_BMDeformVert_AssignPyObject(MDeformVert *dvert, PyObject *value)
static void bm_init_types_bmdvert()
void BPy_BM_init_types_meshdata()
PyObject * BPy_BMLoopColor_CreatePyObject(MLoopCol *mloopcol)
PyDoc_STRVAR(bpy_bmloopuv_uv_doc, "Loops UV (as a 2D Vector).\n" "\n" ":type: :class:`mathutils.Vector`\n")
static int mathutils_bmloopcol_get_index(BaseMathObject *bmo, int subtype, int)
static int mathutils_bmloopcol_set_index(BaseMathObject *bmo, int subtype, int index)
static Mathutils_Callback mathutils_bmloopcol_cb
static PyObject * bpy_bmvertskin_radius_get(BPy_BMVertSkin *self, void *)
static PyGetSetDef bpy_bmloopuv_getseters[]
static void bm_init_types_bmvertskin()
static int mathutils_bmloopcol_get(BaseMathObject *bmo, int)
PyObject * BPy_BMLoopUV_CreatePyObject(BMesh *bm, BMLoop *loop, int layer)
static PyObject * bpy_bmloopuv_uv_get(BPy_BMLoopUV *self, void *)
static int bpy_bmdeformvert_contains(BPy_BMDeformVert *self, PyObject *value)
static int bpy_bmdeformvert_ass_subscript(BPy_BMDeformVert *self, PyObject *key, PyObject *value)
PyTypeObject BPy_BMDeformVert_Type
static PyGetSetDef bpy_bmvertskin_getseters[]
static PyObject * bpy_bmdeformvert_values(BPy_BMDeformVert *self)
#define BPy_BMVertSkin_Check(v)
static int bpy_bmvertskin_radius_set(BPy_BMVertSkin *self, PyObject *value, void *)
static void mloopcol_from_float(MLoopCol *mloopcol, const float col[4])
#define BPy_BMDeformVert_Check(v)
int BPy_BMLoopColor_AssignPyObject(MLoopCol *mloopcol, PyObject *value)
static uchar mathutils_bmloopcol_cb_index
static void bm_init_types_bmloopcol()
int BPy_BMLoopUV_AssignPyObject(BMesh *bm, BMLoop *loop, PyObject *value)
static Py_ssize_t bpy_bmdeformvert_len(BPy_BMDeformVert *self)
PyTypeObject BPy_BMLoopUV_Type
static int mathutils_bmloopcol_check(BaseMathObject *)
PyObject * BPy_BMVertSkin_CreatePyObject(MVertSkin *mvertskin)
#define BPy_BMLoopUV_Check(v)
static PyMappingMethods bpy_bmdeformvert_as_mapping
static PyTypeObject BPy_BMVertSkin_Type
BMUVOffsets BM_uv_map_offsets_get(const BMesh *bm)
BMUVOffsets BM_uv_map_offsets_from_layer(const BMesh *bm, const int layer)
int mathutils_array_parse(float *array, int array_num_min, int array_num_max, PyObject *value, const char *error_prefix)
uchar Mathutils_RegisterCallback(Mathutils_Callback *cb)
PyObject * Vector_CreatePyObject_cb(PyObject *cb_user, int vec_num, uchar cb_type, uchar cb_subtype)
PyObject * Vector_CreatePyObject_wrap(float *vec, const int vec_num, PyTypeObject *base_type)
int PyC_Long_AsBool(PyObject *value)
#define PyTuple_SET_ITEMS(op_arg,...)
PyObject_VAR_HEAD float * uv
PyObject_VAR_HEAD MVertSkin * data