add first python bindings
This commit is contained in:
152
src/Python/math_bindings.cpp
Normal file
152
src/Python/math_bindings.cpp
Normal file
@@ -0,0 +1,152 @@
|
||||
#include <pybind11/pybind11.h>
|
||||
#include <pybind11/eigen.h>
|
||||
#include <pybind11/stl.h>
|
||||
|
||||
#include "Math/Dense.h"
|
||||
#include "Math/Transform.h"
|
||||
#include "Math/Geometry.h"
|
||||
#include "Math/ContainerBox.h"
|
||||
#include "Math/StructuredData.h"
|
||||
#include "Math/StructuredGrid.h"
|
||||
#include "Math/Structured2DGrid.h"
|
||||
#include "Math/Structured4DGrid.h"
|
||||
#include "Math/TriangleMesh.h"
|
||||
#include "Math/VoxRaytracer.h"
|
||||
#include "Math/Accumulator.h"
|
||||
|
||||
namespace py = pybind11;
|
||||
using namespace uLib;
|
||||
|
||||
void init_math(py::module_ &m) {
|
||||
|
||||
// Math/Transform.h
|
||||
py::class_<AffineTransform>(m, "AffineTransform")
|
||||
.def(py::init<>())
|
||||
.def("GetWorldMatrix", &AffineTransform::GetWorldMatrix)
|
||||
.def("SetPosition", &AffineTransform::SetPosition)
|
||||
.def("GetPosition", &AffineTransform::GetPosition)
|
||||
.def("Translate", &AffineTransform::Translate)
|
||||
.def("Scale", &AffineTransform::Scale)
|
||||
.def("SetRotation", &AffineTransform::SetRotation)
|
||||
.def("GetRotation", &AffineTransform::GetRotation)
|
||||
.def("Rotate", py::overload_cast<const Matrix3f &>(&AffineTransform::Rotate))
|
||||
.def("Rotate", py::overload_cast<const Vector3f>(&AffineTransform::Rotate))
|
||||
.def("EulerYZYRotate", &AffineTransform::EulerYZYRotate)
|
||||
.def("FlipAxes", &AffineTransform::FlipAxes);
|
||||
|
||||
// Math/Geometry.h
|
||||
py::class_<Geometry, AffineTransform>(m, "Geometry")
|
||||
.def(py::init<>())
|
||||
.def("GetWorldPoint", py::overload_cast<const Vector4f &>(&Geometry::GetWorldPoint, py::const_))
|
||||
.def("GetLocalPoint", py::overload_cast<const Vector4f &>(&Geometry::GetLocalPoint, py::const_));
|
||||
|
||||
// Math/ContainerBox.h
|
||||
py::class_<ContainerBox, AffineTransform>(m, "ContainerBox")
|
||||
.def(py::init<>())
|
||||
.def("SetOrigin", &ContainerBox::SetOrigin)
|
||||
.def("GetOrigin", &ContainerBox::GetOrigin)
|
||||
.def("SetSize", &ContainerBox::SetSize)
|
||||
.def("GetSize", &ContainerBox::GetSize)
|
||||
.def("GetWorldMatrix", &ContainerBox::GetWorldMatrix)
|
||||
.def("GetWorldPoint", py::overload_cast<const Vector4f &>(&ContainerBox::GetWorldPoint, py::const_))
|
||||
.def("GetLocalPoint", py::overload_cast<const Vector4f &>(&ContainerBox::GetLocalPoint, py::const_));
|
||||
|
||||
// Math/StructuredData.h
|
||||
py::enum_<StructuredData::_Order>(m, "StructuredDataOrder")
|
||||
.value("CustomOrder", StructuredData::CustomOrder)
|
||||
.value("XYZ", StructuredData::XYZ)
|
||||
.value("XZY", StructuredData::XZY)
|
||||
.value("YXZ", StructuredData::YXZ)
|
||||
.value("YZX", StructuredData::YZX)
|
||||
.value("ZXY", StructuredData::ZXY)
|
||||
.value("ZYX", StructuredData::ZYX)
|
||||
.export_values();
|
||||
|
||||
py::class_<StructuredData>(m, "StructuredData")
|
||||
.def(py::init<const Vector3i &>())
|
||||
.def("GetDims", &StructuredData::GetDims)
|
||||
.def("SetDims", &StructuredData::SetDims)
|
||||
.def("GetIncrements", &StructuredData::GetIncrements)
|
||||
.def("SetIncrements", &StructuredData::SetIncrements)
|
||||
.def("SetDataOrder", &StructuredData::SetDataOrder)
|
||||
.def("GetDataOrder", &StructuredData::GetDataOrder)
|
||||
.def("IsInsideGrid", &StructuredData::IsInsideGrid)
|
||||
.def("Map", &StructuredData::Map)
|
||||
.def("UnMap", &StructuredData::UnMap);
|
||||
|
||||
// Math/StructuredGrid.h
|
||||
py::class_<StructuredGrid, ContainerBox, StructuredData>(m, "StructuredGrid")
|
||||
.def(py::init<const Vector3i &>())
|
||||
.def("SetSpacing", &StructuredGrid::SetSpacing)
|
||||
.def("GetSpacing", &StructuredGrid::GetSpacing)
|
||||
.def("IsInsideBounds", &StructuredGrid::IsInsideBounds)
|
||||
.def("Find", [](StructuredGrid &self, Vector3f pt) {
|
||||
return self.Find(HPoint3f(pt));
|
||||
});
|
||||
|
||||
// Math/Structured2DGrid.h
|
||||
py::class_<Structured2DGrid>(m, "Structured2DGrid")
|
||||
.def(py::init<>())
|
||||
.def("SetDims", &Structured2DGrid::SetDims)
|
||||
.def("GetDims", &Structured2DGrid::GetDims)
|
||||
.def("IsInsideGrid", &Structured2DGrid::IsInsideGrid)
|
||||
.def("Map", &Structured2DGrid::Map)
|
||||
.def("UnMap", &Structured2DGrid::UnMap)
|
||||
.def("SetPhysicalSpace", &Structured2DGrid::SetPhysicalSpace)
|
||||
.def("GetSpacing", &Structured2DGrid::GetSpacing)
|
||||
.def("GetOrigin", &Structured2DGrid::GetOrigin)
|
||||
.def("IsInsideBounds", &Structured2DGrid::IsInsideBounds)
|
||||
.def("PhysicsToUnitSpace", &Structured2DGrid::PhysicsToUnitSpace)
|
||||
.def("UnitToPhysicsSpace", &Structured2DGrid::UnitToPhysicsSpace)
|
||||
.def("SetDebug", &Structured2DGrid::SetDebug);
|
||||
|
||||
// Math/Structured4DGrid.h
|
||||
py::class_<Structured4DGrid>(m, "Structured4DGrid")
|
||||
.def(py::init<>())
|
||||
.def("SetDims", &Structured4DGrid::SetDims)
|
||||
.def("GetDims", &Structured4DGrid::GetDims)
|
||||
.def("IsInsideGrid", &Structured4DGrid::IsInsideGrid)
|
||||
.def("Map", &Structured4DGrid::Map)
|
||||
.def("UnMap", &Structured4DGrid::UnMap)
|
||||
.def("SetPhysicalSpace", &Structured4DGrid::SetPhysicalSpace)
|
||||
.def("GetSpacing", &Structured4DGrid::GetSpacing)
|
||||
.def("GetOrigin", &Structured4DGrid::GetOrigin)
|
||||
.def("IsInsideBounds", &Structured4DGrid::IsInsideBounds)
|
||||
.def("PhysicsToUnitSpace", &Structured4DGrid::PhysicsToUnitSpace)
|
||||
.def("UnitToPhysicsSpace", &Structured4DGrid::UnitToPhysicsSpace)
|
||||
.def("SetDebug", &Structured4DGrid::SetDebug);
|
||||
|
||||
// Math/TriangleMesh.h
|
||||
py::class_<TriangleMesh>(m, "TriangleMesh")
|
||||
.def(py::init<>())
|
||||
.def("AddPoint", &TriangleMesh::AddPoint)
|
||||
.def("AddTriangle", py::overload_cast<const Vector3i &>(&TriangleMesh::AddTriangle))
|
||||
.def("Points", &TriangleMesh::Points, py::return_value_policy::reference_internal)
|
||||
.def("Triangles", &TriangleMesh::Triangles, py::return_value_policy::reference_internal);
|
||||
|
||||
// Math/VoxRaytracer.h
|
||||
py::class_<VoxRaytracer::RayData::Element>(m, "VoxRaytracerRayDataElement")
|
||||
.def(py::init<>())
|
||||
.def_readwrite("vox_id", &VoxRaytracer::RayData::Element::vox_id)
|
||||
.def_readwrite("L", &VoxRaytracer::RayData::Element::L);
|
||||
|
||||
py::class_<VoxRaytracer::RayData>(m, "VoxRaytracerRayData")
|
||||
.def(py::init<>())
|
||||
.def("AppendRay", &VoxRaytracer::RayData::AppendRay)
|
||||
.def("Count", &VoxRaytracer::RayData::Count)
|
||||
.def("TotalLength", &VoxRaytracer::RayData::TotalLength)
|
||||
.def("SetCount", &VoxRaytracer::RayData::SetCount)
|
||||
.def("SetTotalLength", &VoxRaytracer::RayData::SetTotalLength);
|
||||
|
||||
py::class_<VoxRaytracer>(m, "VoxRaytracer")
|
||||
.def(py::init<StructuredGrid &>(), py::keep_alive<1, 2>())
|
||||
.def("GetImage", &VoxRaytracer::GetImage, py::return_value_policy::reference_internal);
|
||||
|
||||
// Math/Accumulator.h
|
||||
py::class_<Accumulator_Mean<float>>(m, "Accumulator_Mean_f")
|
||||
.def(py::init<>())
|
||||
.def("AddPass", &Accumulator_Mean<float>::AddPass)
|
||||
.def("__call__", py::overload_cast<const float>(&Accumulator_Mean<float>::operator()))
|
||||
.def("__call__", py::overload_cast<>(&Accumulator_Mean<float>::operator(), py::const_));
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user