[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56520] trunk/blender/source/blender: expose bmesh volume calculation to python api (use for print toolbox addon ).
Campbell Barton
ideasman42 at gmail.com
Tue May 7 02:00:32 CEST 2013
Revision: 56520
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56520
Author: campbellbarton
Date: 2013-05-07 00:00:32 +0000 (Tue, 07 May 2013)
Log Message:
-----------
expose bmesh volume calculation to python api (use for print toolbox addon).
Modified Paths:
--------------
trunk/blender/source/blender/bmesh/intern/bmesh_queries.c
trunk/blender/source/blender/bmesh/intern/bmesh_queries.h
trunk/blender/source/blender/bmesh/operators/bmo_smooth_laplacian.c
trunk/blender/source/blender/python/bmesh/bmesh_py_types.c
Modified: trunk/blender/source/blender/bmesh/intern/bmesh_queries.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_queries.c 2013-05-06 22:53:11 UTC (rev 56519)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_queries.c 2013-05-07 00:00:32 UTC (rev 56520)
@@ -1720,7 +1720,7 @@
*r_vol += (1.0f / 6.0f) * dot_v3v3(p1, cross);
}
}
-float BM_mesh_calc_volume(BMesh *bm)
+float BM_mesh_calc_volume(BMesh *bm, bool is_signed)
{
/* warning, calls own tessellation function, may be slow */
float vol = 0.0f;
@@ -1731,5 +1731,9 @@
bm_mesh_calc_volume_face(f, &vol);
}
- return fabsf(vol);
+ if (is_signed == false) {
+ vol = fabsf(vol);
+ }
+
+ return vol;
}
Modified: trunk/blender/source/blender/bmesh/intern/bmesh_queries.h
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_queries.h 2013-05-06 22:53:11 UTC (rev 56519)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_queries.h 2013-05-07 00:00:32 UTC (rev 56520)
@@ -113,6 +113,6 @@
bool BM_face_is_any_vert_flag_test(BMFace *f, const char hflag);
bool BM_face_is_any_edge_flag_test(BMFace *f, const char hflag);
-float BM_mesh_calc_volume(BMesh *bm);
+float BM_mesh_calc_volume(BMesh *bm, bool is_signed);
#endif /* __BMESH_QUERIES_H__ */
Modified: trunk/blender/source/blender/bmesh/operators/bmo_smooth_laplacian.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_smooth_laplacian.c 2013-05-06 22:53:11 UTC (rev 56519)
+++ trunk/blender/source/blender/bmesh/operators/bmo_smooth_laplacian.c 2013-05-07 00:00:32 UTC (rev 56520)
@@ -464,7 +464,7 @@
}
if (preserve_volume) {
- vini = BM_mesh_calc_volume(sys->bm);
+ vini = BM_mesh_calc_volume(sys->bm, false);
}
BMO_ITER (v, &siter, sys->op->slots_in, "verts", BM_VERT) {
m_vertex_id = BM_elem_index_get(v);
@@ -481,7 +481,7 @@
}
}
if (preserve_volume) {
- vend = BM_mesh_calc_volume(sys->bm);
+ vend = BM_mesh_calc_volume(sys->bm, false);
volume_preservation(sys->op, vini, vend, usex, usey, usez);
}
Modified: trunk/blender/source/blender/python/bmesh/bmesh_py_types.c
===================================================================
--- trunk/blender/source/blender/python/bmesh/bmesh_py_types.c 2013-05-06 22:53:11 UTC (rev 56519)
+++ trunk/blender/source/blender/python/bmesh/bmesh_py_types.c 2013-05-07 00:00:32 UTC (rev 56520)
@@ -1171,7 +1171,36 @@
Py_RETURN_NONE;
}
+PyDoc_STRVAR(bpy_bmesh_calc_volume_doc,
+".. method:: calc_volume(signed=False)\n"
+"\n"
+" Calculate mesh volume based on face normals.\n"
+"\n"
+" :arg signed: when signed is true, negative values may be returned.\n"
+" :type signed: bool\n"
+" :return: The volume of the mesh.\n"
+" :rtype: float\n"
+);
+static PyObject *bpy_bmesh_calc_volume(BPy_BMElem *self, PyObject *args, PyObject *kw)
+{
+ static const char *kwlist[] = {"signed", NULL};
+ PyObject *is_signed = Py_False;
+ BPY_BM_CHECK_OBJ(self);
+
+ if (!PyArg_ParseTupleAndKeywords(args, kw,
+ "|O!:calc_volume",
+ (char **)kwlist,
+ &PyBool_Type, &is_signed))
+ {
+ return NULL;
+ }
+ else {
+ return PyFloat_FromDouble(BM_mesh_calc_volume(self->bm, is_signed != Py_False));
+ }
+}
+
+
/* Elem
* ---- */
@@ -2454,6 +2483,9 @@
{"select_flush", (PyCFunction)bpy_bmesh_select_flush, METH_O, bpy_bmesh_select_flush_doc},
{"normal_update", (PyCFunction)bpy_bmesh_normal_update, METH_NOARGS, bpy_bmesh_normal_update_doc},
{"transform", (PyCFunction)bpy_bmesh_transform, METH_VARARGS | METH_KEYWORDS, bpy_bmesh_transform_doc},
+
+ /* calculations */
+ {"calc_volume", (PyCFunction)bpy_bmesh_calc_volume, METH_VARARGS | METH_KEYWORDS, bpy_bmesh_calc_volume_doc},
{NULL, NULL, 0, NULL}
};
More information about the Bf-blender-cvs
mailing list