Skip to content

Commit

Permalink
GmMultiPolyIntersector for python - Try to resolve errors with BSHP
Browse files Browse the repository at this point in the history
  • Loading branch information
mkennard-aquaveo committed Jan 5, 2024
1 parent 627c0c3 commit 38d3f81
Showing 1 changed file with 15 additions and 8 deletions.
23 changes: 15 additions & 8 deletions xmsgrid/python/geometry/GmMultiPolyIntersector_py.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,16 @@
namespace py = pybind11;

//----- Python Interface -------------------------------------------------------
PYBIND11_DECLARE_HOLDER_TYPE(T, BSHP<T>);
//PYBIND11_DECLARE_HOLDER_TYPE(T, BSHP<T>);

struct wrapper {
BSHP<xms::GmMultiPolyIntersector> p = nullptr;
};

void initGmMultiPolyIntersector(py::module &m) {
// GmMultiPolyIntersector class
py::class_<xms::GmMultiPolyIntersector, BSHP<xms::GmMultiPolyIntersector>> gmMpi(m, "GmMultiPolyIntersector");
// py::class_<xms::GmMultiPolyIntersector, BSHP<xms::GmMultiPolyIntersector>> gmMpi(m, "GmMultiPolyIntersector");
py::class_<wrapper> gmMpi(m, "GmMultiPolyIntersector");

// ---------------------------------------------------------------------------
// function: init
Expand All @@ -34,28 +39,30 @@ void initGmMultiPolyIntersector(py::module &m) {
BSHP<xms::VecPt3d> vec_pts = xms::VecPt3dFromPyIter(poly_points);
BSHP<xms::VecInt2d> vec_polys = xms::VecInt2dFromPyIter(polys);
BSHP<xms::GmMultiPolyIntersectionSorterTerse> sorter(new xms::GmMultiPolyIntersectionSorterTerse);
BSHP<xms::GmMultiPolyIntersector> rval(xms::GmMultiPolyIntersector::New(*vec_pts, *vec_polys, sorter, starting_id));
rval->SetQuery(query == "covered_by" ? xms::GMMPIQ_COVEREDBY : xms::GMMPIQ_INTERSECTS);
// BSHP<xms::GmMultiPolyIntersector> rval(xms::GmMultiPolyIntersector::New(*vec_pts, *vec_polys, sorter, starting_id));
wrapper rval;
rval.p = xms::GmMultiPolyIntersector::New(*vec_pts, *vec_polys, sorter, starting_id);
rval.p->SetQuery(query == "covered_by" ? xms::GMMPIQ_COVEREDBY : xms::GMMPIQ_INTERSECTS);
return rval;
}), py::arg("poly_points"), py::arg("polys"), py::arg("starting_id") = 1, py::arg("query") = "covered_by");
// ---------------------------------------------------------------------------
// function: TraverseLineSegment
// ---------------------------------------------------------------------------
gmMpi.def("TraverseLineSegment", [](xms::GmMultiPolyIntersector &self, py::iterable pt1, py::iterable pt2)
gmMpi.def("TraverseLineSegment", [](wrapper &self, py::iterable pt1, py::iterable pt2)
-> py::tuple {
xms::Pt3d p1 = xms::Pt3dFromPyIter(pt1);
xms::Pt3d p2 = xms::Pt3dFromPyIter(pt2);
xms::VecInt poly_ids;
xms::VecDbl t_vals;
xms::VecPt3d pts;
self.TraverseLineSegment(p1.x, p1.y, p2.x, p2.y, poly_ids, t_vals, pts);
self.p->TraverseLineSegment(p1.x, p1.y, p2.x, p2.y, poly_ids, t_vals, pts);
return py::make_tuple(xms::PyIterFromVecInt(poly_ids), xms::PyIterFromVecDbl(t_vals), xms::PyIterFromVecPt3d(pts));
}, py::arg("pt1"), py::arg("pt2"));
// ---------------------------------------------------------------------------
// function: PolygonFromPoint
// ---------------------------------------------------------------------------
gmMpi.def("PolygonFromPoint", [](xms::GmMultiPolyIntersector &self, py::iterable point) -> int {
gmMpi.def("PolygonFromPoint", [](wrapper &self, py::iterable point) -> int {
xms::Pt3d p = xms::Pt3dFromPyIter(point);
return self.PolygonFromPoint(p);
return self.p->PolygonFromPoint(p);
}, py::arg("point"));
}

0 comments on commit 38d3f81

Please sign in to comment.