22 #include "pybind11/pybind11.h"
31 using namespace pybind11::literals;
38 py::module::import(
"lsst.sphgeom.interval1d");
39 py::module::import(
"lsst.sphgeom.vector3d");
41 py::class_<Box3d, std::shared_ptr<Box3d>>
cls(mod,
"Box3d");
43 cls.def_static(
"empty", &Box3d::empty);
44 cls.def_static(
"full", &Box3d::full);
45 cls.def_static(
"aroundUnitSphere", &Box3d::aroundUnitSphere);
47 cls.def(py::init<>());
48 cls.def(py::init<Vector3d const &>(),
"vector"_a);
49 cls.def(py::init<Vector3d const &, Vector3d const &>(),
"vector1"_a,
51 cls.def(py::init<Vector3d const &, double, double, double>(),
"center"_a,
52 "halfWidth"_a,
"halfHeight"_a,
"halfDepth"_a);
53 cls.def(
py::init<Interval1d
const &, Interval1d
const &,
54 Interval1d
const &>(),
56 cls.def(py::init<Box3d const &>(),
"box3d"_a);
59 (
bool (Box3d::*)(Box3d
const &)
const) & Box3d::operator==,
62 (
bool (Box3d::*)(Vector3d
const &)
const) & Box3d::operator==,
65 (
bool (Box3d::*)(Box3d
const &)
const) & Box3d::operator!=,
68 (
bool (Box3d::*)(Vector3d
const &)
const) & Box3d::operator!=,
70 cls.def(
"__contains__",
73 cls.def(
"__contains__",
76 cls.def(
"__len__", [](Box3d
const &
self) {
return py::int_(3); });
77 cls.def(
"__getitem__", [](Box3d
const &
self, py::int_
row) {
78 return self(
static_cast<int>(python::convertIndex(3,
row)));
84 cls.def(
"isEmpty", &Box3d::isEmpty);
85 cls.def(
"isFull", &Box3d::isFull);
86 cls.def(
"getCenter", &Box3d::getCenter);
87 cls.def(
"getWidth", &Box3d::getWidth);
88 cls.def(
"getHeight", &Box3d::getHeight);
89 cls.def(
"getDepth", &Box3d::getDepth);
95 cls.def(
"isDisjointFrom",
96 (
bool (Box3d::*)(Vector3d
const &)
const) & Box3d::isDisjointFrom);
97 cls.def(
"isDisjointFrom",
98 (
bool (Box3d::*)(Box3d
const &)
const) & Box3d::isDisjointFrom);
100 (
bool (Box3d::*)(Vector3d
const &)
const) & Box3d::intersects);
101 cls.def(
"intersects",
102 (
bool (Box3d::*)(Box3d
const &)
const) & Box3d::intersects);
104 (
bool (Box3d::*)(Vector3d
const &)
const) & Box3d::isWithin);
106 (
bool (Box3d::*)(Box3d
const &)
const) & Box3d::isWithin);
108 cls.def(
"clipTo", (Box3d & (Box3d::*)(Vector3d
const &)) & Box3d::clipTo);
109 cls.def(
"clipTo", (Box3d & (Box3d::*)(Box3d
const &)) & Box3d::clipTo);
111 (Box3d(Box3d::*)(Vector3d
const &)
const) & Box3d::clippedTo);
113 (Box3d(Box3d::*)(Box3d
const &)
const) & Box3d::clippedTo);
115 (Box3d & (Box3d::*)(Vector3d
const &)) & Box3d::expandTo);
116 cls.def(
"expandTo", (Box3d & (Box3d::*)(Box3d
const &)) & Box3d::expandTo);
117 cls.def(
"expandedTo",
118 (Box3d(Box3d::*)(Vector3d
const &)
const) & Box3d::expandedTo);
119 cls.def(
"expandedTo",
120 (Box3d(Box3d::*)(Box3d
const &)
const) & Box3d::expandedTo);
122 cls.def(
"dilateBy", (Box3d & (Box3d::*)(double)) & Box3d::dilateBy,
125 (Box3d & (Box3d::*)(double, double, double)) & Box3d::dilateBy,
126 "width"_a,
"height"_a,
"depth"_a);
127 cls.def(
"dilatedBy", (Box3d(Box3d::*)(double)
const) & Box3d::dilatedBy,
130 (Box3d(Box3d::*)(double, double, double)
const) & Box3d::dilatedBy,
131 "width"_a,
"height"_a,
"depth"_a);
132 cls.def(
"erodeBy", (Box3d & (Box3d::*)(double)) & Box3d::erodeBy,
135 (Box3d & (Box3d::*)(double, double, double)) & Box3d::erodeBy,
136 "width"_a,
"height"_a,
"depth"_a);
137 cls.def(
"erodedBy", (Box3d(Box3d::*)(double)
const) & Box3d::erodedBy,
140 (Box3d(Box3d::*)(double, double, double)
const) & Box3d::erodedBy,
141 "width"_a,
"height"_a,
"depth"_a);
148 cls.def(
"__str__", [](Box3d
const &
self) {
149 return py::str(
"[{!s},\n"
152 .format(
self.
x(),
self.
y(),
self.
z());
154 cls.def(
"__repr__", [](Box3d
const &
self) {
155 return py::str(
"Box3d({!r},\n"
158 .format(
self.
x(),
self.
y(),
self.
z());
160 cls.def(
"__reduce__", [
cls](Box3d
const &
self) {
161 return py::make_tuple(
cls,
162 py::make_tuple(
self.
x(),
self.
y(),
self.
z()));