Skip to content

Commit a5559e7

Browse files
author
Roberto De Ioris
committed
added thumbnail api to FAssetData, #254
1 parent 706edaf commit a5559e7

File tree

1 file changed

+78
-15
lines changed

1 file changed

+78
-15
lines changed

Source/UnrealEnginePython/Private/Wrappers/UEPyFAssetData.cpp

Lines changed: 78 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,58 +2,117 @@
22

33
#if WITH_EDITOR
44

5-
static PyObject *py_ue_fassetdata_get_asset(ue_PyFAssetData *self, PyObject * args) {
5+
#include "ObjectTools.h"
6+
7+
static PyObject *py_ue_fassetdata_get_asset(ue_PyFAssetData *self, PyObject * args)
8+
{
69
PyObject *ret = (PyObject *)ue_get_python_wrapper(self->asset_data.GetAsset());
7-
if (!ret) {
10+
if (!ret)
11+
{
812
return PyErr_Format(PyExc_Exception, "unable to get UObject from asset");
913
}
1014
Py_INCREF(ret);
1115
return ret;
1216
}
1317

14-
static PyObject *py_ue_fassetdata_is_asset_loaded(ue_PyFAssetData *self, PyObject * args) {
18+
static PyObject *py_ue_fassetdata_is_asset_loaded(ue_PyFAssetData *self, PyObject * args)
19+
{
1520
if (self->asset_data.IsAssetLoaded())
1621
Py_RETURN_TRUE;
1722
Py_RETURN_FALSE;
1823
}
1924

25+
static PyObject *py_ue_fassetdata_get_thumbnail(ue_PyFAssetData *self, PyObject * args)
26+
{
27+
TArray<FName> names;
28+
FName name = FName(*self->asset_data.GetFullName());
29+
names.Add(name);
30+
FThumbnailMap map;
31+
32+
if (!ThumbnailTools::ConditionallyLoadThumbnailsForObjects(names, map))
33+
{
34+
return PyErr_Format(PyExc_Exception, "Unable to retrieve thumbnail from FAssetData");
35+
}
36+
37+
FObjectThumbnail *thumbnail = map.Find(name);
38+
if (!thumbnail)
39+
{
40+
return PyErr_Format(PyExc_Exception, "Unable to retrieve thumbnail from FAssetData");
41+
}
42+
43+
return py_ue_new_fobject_thumbnail(*thumbnail);
44+
}
45+
46+
static PyObject *py_ue_fassetdata_has_custom_thumbnail(ue_PyFAssetData *self, PyObject * args)
47+
{
48+
49+
if (!ThumbnailTools::AssetHasCustomThumbnail(self->asset_data))
50+
{
51+
Py_RETURN_FALSE;
52+
}
53+
54+
Py_RETURN_TRUE;
55+
}
56+
57+
static PyObject *py_ue_fassetdata_has_cached_thumbnail(ue_PyFAssetData *self, PyObject * args)
58+
{
59+
60+
if (!ThumbnailTools::FindCachedThumbnail(self->asset_data.GetFullName()))
61+
{
62+
Py_RETURN_FALSE;
63+
}
64+
65+
Py_RETURN_TRUE;
66+
}
67+
2068
static PyMethodDef ue_PyFAssetData_methods[] = {
2169
{ "get_asset", (PyCFunction)py_ue_fassetdata_get_asset, METH_VARARGS, "" },
2270
{ "is_asset_loaded", (PyCFunction)py_ue_fassetdata_is_asset_loaded, METH_VARARGS, "" },
71+
{ "get_thumbnail", (PyCFunction)py_ue_fassetdata_get_thumbnail, METH_VARARGS, "" },
72+
{ "has_custom_thumbnail", (PyCFunction)py_ue_fassetdata_has_custom_thumbnail, METH_VARARGS, "" },
73+
{ "has_cached_thumbnail", (PyCFunction)py_ue_fassetdata_has_cached_thumbnail, METH_VARARGS, "" },
2374
{ NULL } /* Sentinel */
2475
};
2576

26-
static PyObject *py_ue_fassetdata_get_asset_class(ue_PyFAssetData *self, void *closure) {
77+
static PyObject *py_ue_fassetdata_get_asset_class(ue_PyFAssetData *self, void *closure)
78+
{
2779
return PyUnicode_FromString(TCHAR_TO_UTF8(*self->asset_data.AssetClass.ToString()));
2880
}
2981

30-
static PyObject *py_ue_fassetdata_get_asset_name(ue_PyFAssetData *self, void *closure) {
82+
static PyObject *py_ue_fassetdata_get_asset_name(ue_PyFAssetData *self, void *closure)
83+
{
3184
return PyUnicode_FromString(TCHAR_TO_UTF8(*self->asset_data.AssetName.ToString()));
3285
}
3386

3487
#if ENGINE_MINOR_VERSION < 17
35-
static PyObject *py_ue_fassetdata_get_group_names(ue_PyFAssetData *self, void *closure) {
88+
static PyObject *py_ue_fassetdata_get_group_names(ue_PyFAssetData *self, void *closure)
89+
{
3690
return PyUnicode_FromString(TCHAR_TO_UTF8(*self->asset_data.GroupNames.ToString()));
3791
}
3892
#endif
3993

40-
static PyObject *py_ue_fassetdata_get_object_path(ue_PyFAssetData *self, void *closure) {
94+
static PyObject *py_ue_fassetdata_get_object_path(ue_PyFAssetData *self, void *closure)
95+
{
4196
return PyUnicode_FromString(TCHAR_TO_UTF8(*self->asset_data.ObjectPath.ToString()));
4297
}
4398

44-
static PyObject *py_ue_fassetdata_get_package_flags(ue_PyFAssetData *self, void *closure) {
99+
static PyObject *py_ue_fassetdata_get_package_flags(ue_PyFAssetData *self, void *closure)
100+
{
45101
return PyLong_FromUnsignedLong(self->asset_data.PackageFlags);
46102
}
47103

48-
static PyObject *py_ue_fassetdata_get_package_name(ue_PyFAssetData *self, void *closure) {
104+
static PyObject *py_ue_fassetdata_get_package_name(ue_PyFAssetData *self, void *closure)
105+
{
49106
return PyUnicode_FromString(TCHAR_TO_UTF8(*self->asset_data.PackageName.ToString()));
50107
}
51108

52-
static PyObject *py_ue_fassetdata_get_package_path(ue_PyFAssetData *self, void *closure) {
109+
static PyObject *py_ue_fassetdata_get_package_path(ue_PyFAssetData *self, void *closure)
110+
{
53111
return PyUnicode_FromString(TCHAR_TO_UTF8(*self->asset_data.PackagePath.ToString()));
54112
}
55113

56-
static PyObject *py_ue_fassetdata_get_tags_and_values(ue_PyFAssetData *self, void *closure) {
114+
static PyObject *py_ue_fassetdata_get_tags_and_values(ue_PyFAssetData *self, void *closure)
115+
{
57116
PyObject *ret = PyDict_New();
58117
for (auto It = self->asset_data.TagsAndValues.CreateConstIterator(); It; ++It)
59118
{
@@ -78,7 +137,8 @@ static PyGetSetDef ue_PyFAssetData_getseters[] = {
78137
{ NULL } /* Sentinel */
79138
};
80139

81-
static int ue_py_fassetdata_init(ue_PyFAssetData *self, PyObject *args, PyObject *kwargs) {
140+
static int ue_py_fassetdata_init(ue_PyFAssetData *self, PyObject *args, PyObject *kwargs)
141+
{
82142
// avoid FAssetData manual creation
83143
return -1;
84144
}
@@ -122,7 +182,8 @@ static PyTypeObject ue_PyFAssetDataType = {
122182
ue_PyFAssetData_getseters, /* tp_getset */
123183
};
124184

125-
void ue_python_init_fassetdata(PyObject *ue_module) {
185+
void ue_python_init_fassetdata(PyObject *ue_module)
186+
{
126187
ue_PyFAssetDataType.tp_new = PyType_GenericNew;;
127188
ue_PyFAssetDataType.tp_init = (initproc)ue_py_fassetdata_init;
128189
if (PyType_Ready(&ue_PyFAssetDataType) < 0)
@@ -132,14 +193,16 @@ void ue_python_init_fassetdata(PyObject *ue_module) {
132193
PyModule_AddObject(ue_module, "FAssetData", (PyObject *)&ue_PyFAssetDataType);
133194
}
134195

135-
PyObject *py_ue_new_fassetdata(FAssetData asset_data) {
196+
PyObject *py_ue_new_fassetdata(FAssetData asset_data)
197+
{
136198
ue_PyFAssetData *ret = (ue_PyFAssetData *)PyObject_New(ue_PyFAssetData, &ue_PyFAssetDataType);
137199

138200
new(&ret->asset_data) FAssetData(asset_data);
139201
return (PyObject *)ret;
140202
}
141203

142-
ue_PyFAssetData *py_ue_is_fassetdata(PyObject *obj) {
204+
ue_PyFAssetData *py_ue_is_fassetdata(PyObject *obj)
205+
{
143206
if (!PyObject_IsInstance(obj, (PyObject *)&ue_PyFAssetDataType))
144207
return nullptr;
145208
return (ue_PyFAssetData *)obj;

0 commit comments

Comments
 (0)