Browse Source

python: expose trade.MeshData.index_data and .vertex_data.

Useful for rudimentary data size stats queries, not much else as the
other APIs are not exposed yet.
pull/20/head
Vladimír Vondruš 4 years ago
parent
commit
7bd8bd965b
  1. 19
      src/python/magnum/test/test_trade.py
  2. 8
      src/python/magnum/trade.cpp

19
src/python/magnum/test/test_trade.py

@ -105,10 +105,27 @@ class MeshData(unittest.TestCase):
importer = trade.ImporterManager().load_and_instantiate('GltfImporter')
importer.open_file(os.path.join(os.path.dirname(__file__), 'mesh.glb'))
mesh = importer.mesh(0)
mesh = importer.mesh(1)
mesh_refcount = sys.getrefcount(mesh)
self.assertEqual(mesh.primitive, MeshPrimitive.TRIANGLES)
# TODO: test more, once it's exposed
index_data = mesh.index_data
self.assertEqual(len(index_data), 3)
self.assertIs(index_data.owner, mesh)
self.assertEqual(sys.getrefcount(mesh), mesh_refcount + 1)
del index_data
self.assertEqual(sys.getrefcount(mesh), mesh_refcount)
vertex_data = mesh.vertex_data
self.assertEqual(len(vertex_data), 72)
self.assertIs(vertex_data.owner, mesh)
self.assertEqual(sys.getrefcount(mesh), mesh_refcount + 1)
del vertex_data
self.assertEqual(sys.getrefcount(mesh), mesh_refcount)
class Importer(unittest.TestCase):
def test(self):
manager = trade.ImporterManager()

8
src/python/magnum/trade.cpp

@ -307,9 +307,15 @@ void trade(py::module_& m) {
py::class_<Trade::MeshData>{m, "MeshData", "Mesh data"}
.def_property_readonly("primitive", &Trade::MeshData::primitive, "Primitive")
.def_property_readonly("index_data", [](Trade::MeshData& self) {
return Containers::pyArrayViewHolder(self.indexData(), py::cast(self));
}, "Raw index data")
.def_property_readonly("vertex_data", [](Trade::MeshData& self) {
return Containers::pyArrayViewHolder(self.vertexData(), py::cast(self));
}, "Raw vertex data")
.def_property_readonly("is_indexed", &Trade::MeshData::isIndexed, "Whether the mesh is indexed")
.def_property_readonly("vertex_count", &Trade::MeshData::vertexCount)
.def_property_readonly("index_count", &Trade::MeshData::indexCount)
.def_property_readonly("vertex_count", &Trade::MeshData::vertexCount)
.def_property_readonly("attribute_count", static_cast<UnsignedInt(Trade::MeshData::*)() const>(&Trade::MeshData::attributeCount));
py::class_<Trade::ImageData1D> imageData1D{m, "ImageData1D", "One-dimensional image data"};

Loading…
Cancel
Save