PyAPI: add read-only 'is_valid' attribute to mathutils types
There was no convenient way to check if the owner of a mathutils type was valid. Added to support issue reported in T91111.
This commit is contained in:
@@ -599,6 +599,15 @@ uchar Mathutils_RegisterCallback(Mathutils_Callback *cb)
|
|||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int _BaseMathObject_CheckCallback(BaseMathObject *self)
|
||||||
|
{
|
||||||
|
Mathutils_Callback *cb = mathutils_callbacks[self->cb_type];
|
||||||
|
if (LIKELY(cb->check(self) != -1)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* use macros to check for NULL */
|
/* use macros to check for NULL */
|
||||||
int _BaseMathObject_ReadCallback(BaseMathObject *self)
|
int _BaseMathObject_ReadCallback(BaseMathObject *self)
|
||||||
{
|
{
|
||||||
@@ -687,6 +696,13 @@ PyObject *BaseMathObject_is_frozen_get(BaseMathObject *self, void *UNUSED(closur
|
|||||||
return PyBool_FromLong((self->flag & BASE_MATH_FLAG_IS_FROZEN) != 0);
|
return PyBool_FromLong((self->flag & BASE_MATH_FLAG_IS_FROZEN) != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char BaseMathObject_is_valid_doc[] =
|
||||||
|
"True when the owner of this data is valid.\n\n:type: boolean";
|
||||||
|
PyObject *BaseMathObject_is_valid_get(BaseMathObject *self, void *UNUSED(closure))
|
||||||
|
{
|
||||||
|
return PyBool_FromLong(BaseMath_CheckCallback(self) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
char BaseMathObject_freeze_doc[] =
|
char BaseMathObject_freeze_doc[] =
|
||||||
".. function:: freeze()\n"
|
".. function:: freeze()\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ struct DynStr;
|
|||||||
|
|
||||||
extern char BaseMathObject_is_wrapped_doc[];
|
extern char BaseMathObject_is_wrapped_doc[];
|
||||||
extern char BaseMathObject_is_frozen_doc[];
|
extern char BaseMathObject_is_frozen_doc[];
|
||||||
|
extern char BaseMathObject_is_valid_doc[];
|
||||||
extern char BaseMathObject_owner_doc[];
|
extern char BaseMathObject_owner_doc[];
|
||||||
|
|
||||||
#define BASE_MATH_NEW(struct_name, root_type, base_type) \
|
#define BASE_MATH_NEW(struct_name, root_type, base_type) \
|
||||||
@@ -81,6 +82,7 @@ typedef struct {
|
|||||||
PyObject *BaseMathObject_owner_get(BaseMathObject *self, void *);
|
PyObject *BaseMathObject_owner_get(BaseMathObject *self, void *);
|
||||||
PyObject *BaseMathObject_is_wrapped_get(BaseMathObject *self, void *);
|
PyObject *BaseMathObject_is_wrapped_get(BaseMathObject *self, void *);
|
||||||
PyObject *BaseMathObject_is_frozen_get(BaseMathObject *self, void *);
|
PyObject *BaseMathObject_is_frozen_get(BaseMathObject *self, void *);
|
||||||
|
PyObject *BaseMathObject_is_valid_get(BaseMathObject *self, void *);
|
||||||
|
|
||||||
extern char BaseMathObject_freeze_doc[];
|
extern char BaseMathObject_freeze_doc[];
|
||||||
PyObject *BaseMathObject_freeze(BaseMathObject *self);
|
PyObject *BaseMathObject_freeze(BaseMathObject *self);
|
||||||
@@ -117,6 +119,7 @@ struct Mathutils_Callback {
|
|||||||
|
|
||||||
unsigned char Mathutils_RegisterCallback(Mathutils_Callback *cb);
|
unsigned char Mathutils_RegisterCallback(Mathutils_Callback *cb);
|
||||||
|
|
||||||
|
int _BaseMathObject_CheckCallback(BaseMathObject *self);
|
||||||
int _BaseMathObject_ReadCallback(BaseMathObject *self);
|
int _BaseMathObject_ReadCallback(BaseMathObject *self);
|
||||||
int _BaseMathObject_WriteCallback(BaseMathObject *self);
|
int _BaseMathObject_WriteCallback(BaseMathObject *self);
|
||||||
int _BaseMathObject_ReadIndexCallback(BaseMathObject *self, int index);
|
int _BaseMathObject_ReadIndexCallback(BaseMathObject *self, int index);
|
||||||
@@ -126,6 +129,8 @@ void _BaseMathObject_RaiseFrozenExc(const BaseMathObject *self);
|
|||||||
void _BaseMathObject_RaiseNotFrozenExc(const BaseMathObject *self);
|
void _BaseMathObject_RaiseNotFrozenExc(const BaseMathObject *self);
|
||||||
|
|
||||||
/* since this is called so often avoid where possible */
|
/* since this is called so often avoid where possible */
|
||||||
|
#define BaseMath_CheckCallback(_self) \
|
||||||
|
(((_self)->cb_user ? _BaseMathObject_CheckCallback((BaseMathObject *)_self) : 0))
|
||||||
#define BaseMath_ReadCallback(_self) \
|
#define BaseMath_ReadCallback(_self) \
|
||||||
(((_self)->cb_user ? _BaseMathObject_ReadCallback((BaseMathObject *)_self) : 0))
|
(((_self)->cb_user ? _BaseMathObject_ReadCallback((BaseMathObject *)_self) : 0))
|
||||||
#define BaseMath_WriteCallback(_self) \
|
#define BaseMath_WriteCallback(_self) \
|
||||||
|
|||||||
@@ -866,6 +866,11 @@ static PyGetSetDef Color_getseters[] = {
|
|||||||
(setter)NULL,
|
(setter)NULL,
|
||||||
BaseMathObject_is_frozen_doc,
|
BaseMathObject_is_frozen_doc,
|
||||||
NULL},
|
NULL},
|
||||||
|
{"is_valid",
|
||||||
|
(getter)BaseMathObject_is_valid_get,
|
||||||
|
(setter)NULL,
|
||||||
|
BaseMathObject_is_valid_doc,
|
||||||
|
NULL},
|
||||||
{"owner", (getter)BaseMathObject_owner_get, (setter)NULL, BaseMathObject_owner_doc, NULL},
|
{"owner", (getter)BaseMathObject_owner_get, (setter)NULL, BaseMathObject_owner_doc, NULL},
|
||||||
{NULL, NULL, NULL, NULL, NULL} /* Sentinel */
|
{NULL, NULL, NULL, NULL, NULL} /* Sentinel */
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -699,6 +699,11 @@ static PyGetSetDef Euler_getseters[] = {
|
|||||||
(setter)NULL,
|
(setter)NULL,
|
||||||
BaseMathObject_is_frozen_doc,
|
BaseMathObject_is_frozen_doc,
|
||||||
NULL},
|
NULL},
|
||||||
|
{"is_valid",
|
||||||
|
(getter)BaseMathObject_is_valid_get,
|
||||||
|
(setter)NULL,
|
||||||
|
BaseMathObject_is_valid_doc,
|
||||||
|
NULL},
|
||||||
{"owner", (getter)BaseMathObject_owner_get, (setter)NULL, BaseMathObject_owner_doc, NULL},
|
{"owner", (getter)BaseMathObject_owner_get, (setter)NULL, BaseMathObject_owner_doc, NULL},
|
||||||
{NULL, NULL, NULL, NULL, NULL} /* Sentinel */
|
{NULL, NULL, NULL, NULL, NULL} /* Sentinel */
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3148,6 +3148,11 @@ static PyGetSetDef Matrix_getseters[] = {
|
|||||||
(setter)NULL,
|
(setter)NULL,
|
||||||
BaseMathObject_is_frozen_doc,
|
BaseMathObject_is_frozen_doc,
|
||||||
NULL},
|
NULL},
|
||||||
|
{"is_valid",
|
||||||
|
(getter)BaseMathObject_is_valid_get,
|
||||||
|
(setter)NULL,
|
||||||
|
BaseMathObject_is_valid_doc,
|
||||||
|
NULL},
|
||||||
{"owner", (getter)BaseMathObject_owner_get, (setter)NULL, BaseMathObject_owner_doc, NULL},
|
{"owner", (getter)BaseMathObject_owner_get, (setter)NULL, BaseMathObject_owner_doc, NULL},
|
||||||
{NULL, NULL, NULL, NULL, NULL} /* Sentinel */
|
{NULL, NULL, NULL, NULL, NULL} /* Sentinel */
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1505,6 +1505,11 @@ static PyGetSetDef Quaternion_getseters[] = {
|
|||||||
(setter)NULL,
|
(setter)NULL,
|
||||||
BaseMathObject_is_frozen_doc,
|
BaseMathObject_is_frozen_doc,
|
||||||
NULL},
|
NULL},
|
||||||
|
{"is_valid",
|
||||||
|
(getter)BaseMathObject_is_valid_get,
|
||||||
|
(setter)NULL,
|
||||||
|
BaseMathObject_is_valid_doc,
|
||||||
|
NULL},
|
||||||
{"owner", (getter)BaseMathObject_owner_get, (setter)NULL, BaseMathObject_owner_doc, NULL},
|
{"owner", (getter)BaseMathObject_owner_get, (setter)NULL, BaseMathObject_owner_doc, NULL},
|
||||||
{NULL, NULL, NULL, NULL, NULL} /* Sentinel */
|
{NULL, NULL, NULL, NULL, NULL} /* Sentinel */
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2551,6 +2551,11 @@ static PyGetSetDef Vector_getseters[] = {
|
|||||||
(setter)NULL,
|
(setter)NULL,
|
||||||
BaseMathObject_is_frozen_doc,
|
BaseMathObject_is_frozen_doc,
|
||||||
NULL},
|
NULL},
|
||||||
|
{"is_valid",
|
||||||
|
(getter)BaseMathObject_is_valid_get,
|
||||||
|
(setter)NULL,
|
||||||
|
BaseMathObject_is_valid_doc,
|
||||||
|
NULL},
|
||||||
{"owner", (getter)BaseMathObject_owner_get, (setter)NULL, BaseMathObject_owner_doc, NULL},
|
{"owner", (getter)BaseMathObject_owner_get, (setter)NULL, BaseMathObject_owner_doc, NULL},
|
||||||
|
|
||||||
/* Auto-generated swizzle attributes, see Python script above. */
|
/* Auto-generated swizzle attributes, see Python script above. */
|
||||||
|
|||||||
Reference in New Issue
Block a user