Skip to content

Commit ecec7f4

Browse files
author
Roberto De Ioris
committed
expose import-time vertex mappign for skeletal meshes
1 parent d119c45 commit ecec7f4

3 files changed

Lines changed: 41 additions & 1 deletion

File tree

‎Source/UnrealEnginePython/Private/UEPyModule.cpp‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -766,6 +766,8 @@ static PyMethodDef ue_PyUObject_methods[] = {
766766
#endif
767767
{ "skeletal_mesh_register_morph_target", (PyCFunction)py_ue_skeletal_mesh_register_morph_target, METH_VARARGS, "" },
768768

769+
{ "skeletal_mesh_to_import_vertex_map", (PyCFunction)py_ue_skeletal_mesh_to_import_vertex_map, METH_VARARGS, "" },
770+
769771
{ "morph_target_populate_deltas", (PyCFunction)py_ue_morph_target_populate_deltas, METH_VARARGS, "" },
770772
{ "morph_target_get_deltas", (PyCFunction)py_ue_morph_target_get_deltas, METH_VARARGS, "" },
771773

‎Source/UnrealEnginePython/Private/UObject/UEPySkeletal.cpp‎

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -924,7 +924,12 @@ PyObject *py_ue_morph_target_populate_deltas(ue_PyUObject *self, PyObject * args
924924

925925
morph->PopulateDeltas(deltas, lod_index);
926926

927-
Py_RETURN_NONE;
927+
if (morph->HasValidData())
928+
{
929+
Py_RETURN_TRUE;
930+
}
931+
932+
Py_RETURN_FALSE;
928933
}
929934

930935
PyObject *py_ue_morph_target_get_deltas(ue_PyUObject *self, PyObject * args)
@@ -952,5 +957,37 @@ PyObject *py_ue_morph_target_get_deltas(ue_PyUObject *self, PyObject * args)
952957
PyList_Append(py_list, py_ue_new_fmorph_target_delta(delta));
953958
}
954959

960+
return py_list;
961+
}
962+
963+
PyObject *py_ue_skeletal_mesh_to_import_vertex_map(ue_PyUObject *self, PyObject * args)
964+
{
965+
ue_py_check(self);
966+
967+
int lod_index = 0;
968+
969+
if (!PyArg_ParseTuple(args, "|i:skeletal_mesh_to_import_vertex_map", &lod_index))
970+
{
971+
return nullptr;
972+
}
973+
974+
USkeletalMesh *mesh = ue_py_check_type<USkeletalMesh>(self);
975+
if (!mesh)
976+
return PyErr_Format(PyExc_Exception, "uobject is not a USkeletalMesh");
977+
978+
FSkeletalMeshResource *resource = mesh->GetImportedResource();
979+
980+
if (lod_index < 0 || lod_index > resource->LODModels.Num())
981+
return PyErr_Format(PyExc_Exception, "invalid LOD index, must be between 0 and %d", resource->LODModels.Num());
982+
983+
FStaticLODModel& LODModel = resource->LODModels[lod_index];
984+
985+
PyObject *py_list = PyList_New(0);
986+
987+
for (int32 value : LODModel.MeshToImportVertexMap)
988+
{
989+
PyList_Append(py_list, PyLong_FromLong(value));
990+
}
991+
955992
return py_list;
956993
}

‎Source/UnrealEnginePython/Private/UObject/UEPySkeletal.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,4 @@ PyObject *py_ue_skeletal_mesh_register_morph_target(ue_PyUObject *, PyObject *);
3434

3535
PyObject *py_ue_morph_target_populate_deltas(ue_PyUObject *, PyObject *);
3636
PyObject *py_ue_morph_target_get_deltas(ue_PyUObject *, PyObject *);
37+
PyObject *py_ue_skeletal_mesh_to_import_vertex_map(ue_PyUObject *, PyObject *);

0 commit comments

Comments
 (0)