26 "Class hierarchy: :class:`Interface0D` > :class:`SVertex`\n"
28 "Class to define a vertex of the embedding.\n"
30 ".. method:: __init__()\n"
31 " __init__(brother)\n"
32 " __init__(point_3d, id)\n"
34 " Builds a :class:`SVertex` using the default constructor,\n"
35 " copy constructor or the overloaded constructor which builds"
36 " a :class:`SVertex` from 3D coordinates and an Id.\n"
38 " :arg brother: A SVertex object.\n"
39 " :type brother: :class:`SVertex`\n"
40 " :arg point_3d: A three-dimensional vector.\n"
41 " :type point_3d: :class:`mathutils.Vector`\n"
42 " :arg id: An Id object.\n"
43 " :type id: :class:`Id`");
47 static const char *kwlist_1[] = {
"brother",
nullptr};
48 static const char *kwlist_2[] = {
"point_3d",
"id",
nullptr};
49 PyObject *obj =
nullptr;
52 if (PyArg_ParseTupleAndKeywords(args, kwds,
"|O!", (
char **)kwlist_1, &
SVertex_Type, &obj)) {
60 else if ((
void)PyErr_Clear(),
61 PyArg_ParseTupleAndKeywords(
68 PyErr_SetString(PyExc_TypeError,
"invalid argument(s)");
72 self->py_if0D.borrowed =
false;
78 SVertex_add_normal_doc,
79 ".. method:: add_normal(normal)\n"
81 " Adds a normal to the SVertex's set of normals. If the same normal\n"
82 " is already in the set, nothing changes.\n"
84 " :arg normal: A three-dimensional vector.\n"
85 " :type normal: :class:`mathutils.Vector` | tuple[float, float, float] | list[float]");
89 static const char *kwlist[] = {
"normal",
nullptr};
93 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"O", (
char **)kwlist, &py_normal)) {
97 PyErr_SetString(PyExc_TypeError,
98 "argument 1 must be a 3D vector (either a list of 3 elements or Vector)");
101 self->sv->AddNormal(n);
107 SVertex_add_fedge_doc,
108 ".. method:: add_fedge(fedge)\n"
110 " Add an FEdge to the list of edges emanating from this SVertex.\n"
112 " :arg fedge: An FEdge.\n"
113 " :type fedge: :class:`FEdge`");
117 static const char *kwlist[] = {
"fedge",
nullptr};
120 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"O!", (
char **)kwlist, &
FEdge_Type, &py_fe)) {
131# pragma clang diagnostic push
132# pragma clang diagnostic ignored "-Wcast-function-type"
134# pragma GCC diagnostic push
135# pragma GCC diagnostic ignored "-Wcast-function-type"
142 METH_VARARGS | METH_KEYWORDS,
143 SVertex_add_normal_doc},
146 METH_VARARGS | METH_KEYWORDS,
147 SVertex_add_fedge_doc},
148 {
nullptr,
nullptr, 0,
nullptr},
153# pragma clang diagnostic pop
155# pragma GCC diagnostic pop
162#define MATHUTILS_SUBTYPE_POINT3D 1
163#define MATHUTILS_SUBTYPE_POINT2D 2
178 bmo->data[0] =
self->sv->getX();
179 bmo->data[1] =
self->sv->getY();
180 bmo->data[2] =
self->sv->getZ();
183 bmo->data[0] =
self->sv->getProjectedX();
184 bmo->data[1] =
self->sv->getProjectedY();
185 bmo->data[2] =
self->sv->getProjectedZ();
198 Vec3r p(bmo->data[0], bmo->data[1], bmo->data[2]);
199 self->sv->setPoint3D(p);
203 Vec3r p(bmo->data[0], bmo->data[1], bmo->data[2]);
204 self->sv->setPoint2D(p);
220 bmo->data[0] =
self->sv->getX();
223 bmo->data[1] =
self->sv->getY();
226 bmo->data[2] =
self->sv->getZ();
235 bmo->data[0] =
self->sv->getProjectedX();
238 bmo->data[1] =
self->sv->getProjectedY();
241 bmo->data[2] =
self->sv->getProjectedZ();
259 p[index] = bmo->data[index];
260 self->sv->setPoint3D(p);
265 p[index] = bmo->data[index];
266 self->sv->setPoint2D(p);
294 SVertex_point_3d_doc,
295 "The 3D coordinates of the SVertex.\n"
297 ":type: :class:`mathutils.Vector`");
312 self->sv->setPoint3D(p);
318 SVertex_point_2d_doc,
319 "The projected 3D coordinates of the SVertex.\n"
321 ":type: :class:`mathutils.Vector`");
336 self->sv->setPoint2D(p);
343 "The Id of this SVertex.\n"
345 ":type: :class:`Id`");
356 PyErr_SetString(PyExc_TypeError,
"value must be an Id");
366 "The normals for this Vertex as a list. In a sharp surface, an SVertex\n"
367 "has exactly one normal. In a smooth surface, an SVertex can have any\n"
368 "number of normals.\n"
370 ":type: list of :class:`mathutils.Vector`");
374 PyObject *py_normals;
376 set<Vec3r>::iterator it;
377 py_normals = PyList_New(
normals.size());
389 SVertex_normals_size_doc,
390 "The number of different normals for this SVertex.\n"
396 return PyLong_FromLong(
self->sv->normalsSize());
401 SVertex_viewvertex_doc,
402 "If this SVertex is also a ViewVertex, this property refers to the\n"
403 "ViewVertex, and None otherwise.\n"
405 ":type: :class:`ViewVertex`");
418 SVertex_curvatures_doc,
419 "Curvature information expressed in the form of a seven-element tuple\n"
420 "(K1, e1, K2, e2, Kr, er, dKr), where K1 and K2 are scalar values\n"
421 "representing the first (maximum) and second (minimum) principal\n"
422 "curvatures at this SVertex, respectively; e1 and e2 are\n"
423 "three-dimensional vectors representing the first and second principal\n"
424 "directions, i.e. the directions of the normal plane where the\n"
425 "curvature takes its maximum and minimum values, respectively; and Kr,\n"
426 "er and dKr are the radial curvature, radial direction, and the\n"
427 "derivative of the radial curvature at this SVertex, respectively.\n"
440 PyObject *retval = PyTuple_New(7);
442 PyFloat_FromDouble(info->
K1),
443 PyFloat_FromDouble(info->
K2),
446 PyFloat_FromDouble(info->
Kr),
448 PyFloat_FromDouble(info->
dKr));
456 SVertex_point_3d_doc,
461 SVertex_point_2d_doc,
468 SVertex_normals_size_doc,
473 SVertex_viewvertex_doc,
478 SVertex_curvatures_doc,
480 {
nullptr,
nullptr,
nullptr,
nullptr,
nullptr}
486 PyVarObject_HEAD_INIT(
nullptr, 0)
505 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
PyObject * Vector_from_Vec3r(Vec3r &vec)
PyObject * BPy_Id_from_Id(Id &id)
PyObject * Any_BPy_ViewVertex_from_ViewVertex(ViewVertex &vv)
int convert_v3(PyObject *obj, void *v)
bool Vec3r_ptr_from_PyObject(PyObject *obj, Vec3r &vec)
PyTypeObject Interface0D_Type
static PyObject * SVertex_point_3d_get(BPy_SVertex *self, void *)
static int SVertex_point_3d_set(BPy_SVertex *self, PyObject *value, void *)
static int SVertex_point_2d_set(BPy_SVertex *self, PyObject *value, void *)
static PyObject * SVertex_add_normal(BPy_SVertex *self, PyObject *args, PyObject *kwds)
#define MATHUTILS_SUBTYPE_POINT3D
#define MATHUTILS_SUBTYPE_POINT2D
void SVertex_mathutils_register_callback()
static PyObject * SVertex_viewvertex_get(BPy_SVertex *self, void *)
static PyObject * SVertex_point_2d_get(BPy_SVertex *self, void *)
static uchar SVertex_mathutils_cb_index
PyTypeObject SVertex_Type
static int SVertex_mathutils_set_index(BaseMathObject *bmo, int subtype, int index)
static PyMethodDef BPy_SVertex_methods[]
static int SVertex_init(BPy_SVertex *self, PyObject *args, PyObject *kwds)
static PyObject * SVertex_curvatures_get(BPy_SVertex *self, void *)
static PyObject * SVertex_normals_size_get(BPy_SVertex *self, void *)
static Mathutils_Callback SVertex_mathutils_cb
static PyObject * SVertex_normals_get(BPy_SVertex *self, void *)
static int SVertex_mathutils_get(BaseMathObject *bmo, int subtype)
static PyObject * SVertex_add_fedge(BPy_SVertex *self, PyObject *args, PyObject *kwds)
PyDoc_STRVAR(SVertex_doc, "Class hierarchy: :class:`Interface0D` > :class:`SVertex`\n" "\n" "Class to define a vertex of the embedding.\n" "\n" ".. method:: __init__()\n" " __init__(brother)\n" " __init__(point_3d, id)\n" "\n" " Builds a :class:`SVertex` using the default constructor,\n" " copy constructor or the overloaded constructor which builds" " a :class:`SVertex` from 3D coordinates and an Id.\n" "\n" " :arg brother: A SVertex object.\n" " :type brother: :class:`SVertex`\n" " :arg point_3d: A three-dimensional vector.\n" " :type point_3d: :class:`mathutils.Vector`\n" " :arg id: An Id object.\n" " :type id: :class:`Id`")
static int SVertex_mathutils_set(BaseMathObject *bmo, int subtype)
static int SVertex_id_set(BPy_SVertex *self, PyObject *value, void *)
static PyObject * SVertex_id_get(BPy_SVertex *self, void *)
static int SVertex_mathutils_get_index(BaseMathObject *bmo, int subtype, int index)
static int SVertex_mathutils_check(BaseMathObject *bmo)
static PyGetSetDef BPy_SVertex_getseters[]
#define BPy_SVertex_Check(v)
ATTR_WARN_UNUSED_RESULT const BMVert * v
static float normals[][3]
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)
VecMat::Vec3< real > Vec3r
#define PyTuple_SET_ITEMS(op_arg,...)