Use a shorter/simpler license convention, stops the header taking so much space. Follow the SPDX license specification: https://spdx.org/licenses - C/C++/objc/objc++ - Python - Shell Scripts - CMake, GNUmakefile While most of the source tree has been included - `./extern/` was left out. - `./intern/cycles` & `./intern/atomic` are also excluded because they use different header conventions. doc/license/SPDX-license-identifiers.txt has been added to list SPDX all used identifiers. See P2788 for the script that automated these edits. Reviewed By: brecht, mont29, sergey Ref D14069
83 lines
2.4 KiB
C
83 lines
2.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later
|
|
* Copyright 2012 Blender Foundation. All rights reserved. */
|
|
|
|
/** \file
|
|
* \ingroup pybmesh
|
|
*
|
|
* This file defines the 'bmesh.geometry' module.
|
|
* Utility functions for operating on 'bmesh.types'
|
|
*/
|
|
|
|
#include <Python.h>
|
|
|
|
#include "BLI_utildefines.h"
|
|
|
|
#include "../mathutils/mathutils.h"
|
|
|
|
#include "bmesh.h"
|
|
#include "bmesh_py_geometry.h" /* own include */
|
|
#include "bmesh_py_types.h"
|
|
|
|
PyDoc_STRVAR(bpy_bm_geometry_intersect_face_point_doc,
|
|
".. method:: intersect_face_point(face, point)\n"
|
|
"\n"
|
|
" Tests if the projection of a point is inside a face (using the face's normal).\n"
|
|
"\n"
|
|
" :arg face: The face to test.\n"
|
|
" :type face: :class:`bmesh.types.BMFace`\n"
|
|
" :arg point: The point to test.\n"
|
|
" :type point: float triplet\n"
|
|
" :return: True when the projection of the point is in the face.\n"
|
|
" :rtype: bool\n");
|
|
static PyObject *bpy_bm_geometry_intersect_face_point(BPy_BMFace *UNUSED(self), PyObject *args)
|
|
{
|
|
BPy_BMFace *py_face;
|
|
PyObject *py_point;
|
|
float point[3];
|
|
bool ret;
|
|
|
|
if (!PyArg_ParseTuple(args, "O!O:intersect_face_point", &BPy_BMFace_Type, &py_face, &py_point)) {
|
|
return NULL;
|
|
}
|
|
|
|
BPY_BM_CHECK_OBJ(py_face);
|
|
if (mathutils_array_parse(point, 3, 3, py_point, "intersect_face_point") == -1) {
|
|
return NULL;
|
|
}
|
|
|
|
ret = BM_face_point_inside_test(py_face->f, point);
|
|
|
|
return PyBool_FromLong(ret);
|
|
}
|
|
|
|
static struct PyMethodDef BPy_BM_geometry_methods[] = {
|
|
{"intersect_face_point",
|
|
(PyCFunction)bpy_bm_geometry_intersect_face_point,
|
|
METH_VARARGS,
|
|
bpy_bm_geometry_intersect_face_point_doc},
|
|
{NULL, NULL, 0, NULL},
|
|
};
|
|
|
|
PyDoc_STRVAR(BPy_BM_utils_doc,
|
|
"This module provides access to bmesh geometry evaluation functions.");
|
|
static struct PyModuleDef BPy_BM_geometry_module_def = {
|
|
PyModuleDef_HEAD_INIT,
|
|
"bmesh.geometry", /* m_name */
|
|
BPy_BM_utils_doc, /* m_doc */
|
|
0, /* m_size */
|
|
BPy_BM_geometry_methods, /* m_methods */
|
|
NULL, /* m_reload */
|
|
NULL, /* m_traverse */
|
|
NULL, /* m_clear */
|
|
NULL, /* m_free */
|
|
};
|
|
|
|
PyObject *BPyInit_bmesh_geometry(void)
|
|
{
|
|
PyObject *submodule;
|
|
|
|
submodule = PyModule_Create(&BPy_BM_geometry_module_def);
|
|
|
|
return submodule;
|
|
}
|