[Bf-blender-cvs] [f23b20b] temp-sybren-bpy-make-local: Added bpy.data.make_local() that can make a single ID block local.
Sybren A. Stüvel
noreply at git.blender.org
Tue Nov 8 15:06:43 CET 2016
Commit: f23b20b58aa90a4dca15cc6f951b3a4ac975fbf9
Author: Sybren A. Stüvel
Date: Fri Oct 14 16:35:19 2016 +0200
Branches: temp-sybren-bpy-make-local
https://developer.blender.org/rBf23b20b58aa90a4dca15cc6f951b3a4ac975fbf9
Added bpy.data.make_local() that can make a single ID block local.
Note that this will not work reliably when the idblock is referenced
from a library. It is the caller's responsibility to ensure a proper
state. Use with care.
===================================================================
M release/scripts/modules/bpy_types.py
M source/blender/python/intern/bpy_rna_id_collection.c
===================================================================
diff --git a/release/scripts/modules/bpy_types.py b/release/scripts/modules/bpy_types.py
index d64acd2..71705ff 100644
--- a/release/scripts/modules/bpy_types.py
+++ b/release/scripts/modules/bpy_types.py
@@ -28,6 +28,7 @@ StructMetaPropGroup = bpy_types.bpy_struct_meta_idprop
bpy_types.BlendDataLibraries.load = _bpy._library_load
bpy_types.BlendDataLibraries.write = _bpy._library_write
bpy_types.BlendData.user_map = _bpy._rna_id_collection_user_map
+bpy_types.BlendData.make_local = _bpy._rna_id_collection_make_local
class Context(StructRNA):
diff --git a/source/blender/python/intern/bpy_rna_id_collection.c b/source/blender/python/intern/bpy_rna_id_collection.c
index 1037c83..bf030eb 100644
--- a/source/blender/python/intern/bpy_rna_id_collection.c
+++ b/source/blender/python/intern/bpy_rna_id_collection.c
@@ -38,6 +38,7 @@
#include "BKE_main.h"
#include "BKE_library.h"
#include "BKE_library_query.h"
+#include "BKE_object.h"
#include "DNA_ID.h"
/* Those folowing are only to support hack of not listing some internal 'backward' pointers in generated user_map... */
@@ -291,12 +292,61 @@ error:
}
+PyDoc_STRVAR(bpy_make_local_doc,
+".. method:: make_local(idblock, clear_proxy=True)\n"
+"\n"
+" Makes the given ID datablock local.\n"
+"\n"
+" Note that this will not work reliably when the idblock is referenced from a library.\n"
+" It is the caller's responsibility to ensure a proper state. Use with care.\n"
+"\n"
+" :arg idblock: The data-blocks that will be made local.\n"
+" :type idblock: bpy.types.ID\n"
+" :arg clear_proxy: Whether to clear proxies (default) or not. Can cause proxies to be\n"
+" duplicated when still referred to from another library.\n"
+" :type clear_proxy: bool\n"
+);
+static PyObject *bpy_make_local(PyObject *UNUSED(self), PyObject *args, PyObject *kwds)
+{
+ Main *bmain = G.main; /* XXX see note in bpy_user_map() about this being ugly. */
+ ID *id;
+ static const char *kwlist[] = {"idblock", "clear_proxy", NULL};
+ PyObject *py_id;
+ bool clear_proxy=true;
+
+ if (!PyArg_ParseTupleAndKeywords(
+ args, kwds, "O|$p:make_local", (char **)kwlist,
+ &py_id, &clear_proxy))
+ {
+ return NULL;
+ }
+
+ if (!pyrna_id_FromPyObject(py_id, &id)) {
+ PyErr_SetString(PyExc_ValueError, "idblock parameter is not actually an ID datablock");
+ return NULL;
+ }
+
+ /* Special case, as we can't rely on id_make_local(); it clears proxies. */
+ if (!clear_proxy && GS(id->name) == ID_OB) {
+ BKE_object_make_local_ex(bmain, (Object *)id, false, clear_proxy);
+ }
+ else {
+ id_make_local(bmain, id, false, false);
+ }
+
+ Py_RETURN_NONE;
+}
+
+
int BPY_rna_id_collection_module(PyObject *mod_par)
{
static PyMethodDef user_map = {
"user_map", (PyCFunction)bpy_user_map, METH_VARARGS | METH_KEYWORDS, bpy_user_map_doc};
+ static PyMethodDef make_local_map = {
+ "make_local", (PyCFunction)bpy_make_local, METH_VARARGS | METH_KEYWORDS, bpy_make_local_doc};
PyModule_AddObject(mod_par, "_rna_id_collection_user_map", PyCFunction_New(&user_map, NULL));
+ PyModule_AddObject(mod_par, "_rna_id_collection_make_local", PyCFunction_New(&make_local_map, NULL));
return 0;
}
More information about the Bf-blender-cvs
mailing list