static PyObject *M_Blensorintern_copy_zbuf(PyObject *UNUSED(self), PyObject *obj) { PyObject *result; float *outbuffer; int outbuffer_len; struct ID *id; bContext *C; BPy_StructRNA *blender_obj = NULL; int status = 0; int idx; status = pyrna_id_FromPyObject(obj, &id); if (status) { blender_obj = (BPy_StructRNA *) obj; } C = (bContext *)BPy_GetContext(); blensor_Image_copy_zbuf((Image *)blender_obj->ptr.data, C, &outbuffer_len, &outbuffer); printf ("Size of buffer %d",outbuffer_len); result = PyTuple_New(outbuffer_len); for (idx = 0; idx < outbuffer_len; idx++) { PyTuple_SetItem(result, idx, PyFloat_FromDouble(outbuffer[idx])); } MEM_freeN(outbuffer); return result; }
static int bpy_bmtexpoly_image_set(BPy_BMTexPoly *self, PyObject *value, void *UNUSED(closure)) { ID *id; if (value == Py_None) { id = NULL; } else if (pyrna_id_FromPyObject(value, &id) && id && GS(id->name) == ID_IM) { /* pass */ } else { PyErr_Format(PyExc_KeyError, "BMTexPoly.image = x" "expected an image or None, not '%.200s'", Py_TYPE(value)->tp_name); return -1; } id_lib_extern(id); self->data->tpage = (struct Image *)id; return 0; }
static PyObject *bpy_lib_write(PyObject *UNUSED(self), PyObject *args, PyObject *kwds) { static const char *kwlist[] = { "filepath", "datablocks", /* optional */ "relative_remap", "fake_user", "compress", NULL, }; /* args */ const char *filepath; char filepath_abs[FILE_MAX]; PyObject *datablocks = NULL; bool use_relative_remap = false, use_fake_user = false, use_compress = false; if (!PyArg_ParseTupleAndKeywords( args, kwds, "sO!|$O&O&O&:write", (char **)kwlist, &filepath, &PySet_Type, &datablocks, PyC_ParseBool, &use_relative_remap, PyC_ParseBool, &use_fake_user, PyC_ParseBool, &use_compress)) { return NULL; } Main *bmain_src = G.main; int write_flags = 0; if (use_relative_remap) { write_flags |= G_FILE_RELATIVE_REMAP; } if (use_compress) { write_flags |= G_FILE_COMPRESS; } BLI_strncpy(filepath_abs, filepath, FILE_MAX); BLI_path_abs(filepath_abs, G.main->name); BKE_blendfile_write_partial_begin(bmain_src); /* array of ID's and backup any data we modify */ struct { ID *id; /* original values */ short id_flag; short id_us; } *id_store_array, *id_store; int id_store_len = 0; PyObject *ret; /* collect all id data from the set and store in 'id_store_array' */ { Py_ssize_t pos, hash; PyObject *key; id_store_array = MEM_mallocN(sizeof(*id_store_array) * PySet_Size(datablocks), __func__); id_store = id_store_array; pos = hash = 0; while (_PySet_NextEntry(datablocks, &pos, &key, &hash)) { if (!pyrna_id_FromPyObject(key, &id_store->id)) { PyErr_Format(PyExc_TypeError, "Expected and ID type, not %.200s", Py_TYPE(key)->tp_name); ret = NULL; goto finally; } else { id_store->id_flag = id_store->id->flag; id_store->id_us = id_store->id->us; if (use_fake_user) { id_store->id->flag |= LIB_FAKEUSER; } id_store->id->us = 1; BKE_blendfile_write_partial_tag_ID(id_store->id, true); id_store_len += 1; id_store++; } } } /* write blend */ int retval = 0; ReportList reports; BKE_reports_init(&reports, RPT_STORE); retval = BKE_blendfile_write_partial(bmain_src, filepath_abs, write_flags, &reports); /* cleanup state */ BKE_blendfile_write_partial_end(bmain_src); if (retval) { BKE_reports_print(&reports, RPT_ERROR_ALL); BKE_reports_clear(&reports); ret = Py_None; Py_INCREF(ret); } else { if (BPy_reports_to_error(&reports, PyExc_IOError, true) == 0) { PyErr_SetString(PyExc_IOError, "Unknown error writing library data"); } ret = NULL; } finally: /* clear all flags for ID's added to the store (may run on error too) */ id_store = id_store_array; for (int i = 0; i < id_store_len; id_store++, i++) { if (use_fake_user) { if ((id_store->id_flag & LIB_FAKEUSER) == 0) { id_store->id->flag &= ~LIB_FAKEUSER; } } id_store->id->us = id_store->id_us; BKE_blendfile_write_partial_tag_ID(id_store->id, false); } MEM_freeN(id_store_array); return ret; }
static IDProperty *idp_from_DatablockPointer(const char *name, PyObject *ob) { IDPropertyTemplate val = {0}; pyrna_id_FromPyObject(ob, &val.id); return IDP_New(IDP_ID, &val, name); }