From 38d3f816f2178e23f85350eb790418fc0a78b782 Mon Sep 17 00:00:00 2001 From: Michael Kennard Date: Fri, 5 Jan 2024 10:35:28 -0700 Subject: [PATCH] GmMultiPolyIntersector for python - Try to resolve errors with BSHP --- .../geometry/GmMultiPolyIntersector_py.cpp | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/xmsgrid/python/geometry/GmMultiPolyIntersector_py.cpp b/xmsgrid/python/geometry/GmMultiPolyIntersector_py.cpp index 72a48148..20948080 100644 --- a/xmsgrid/python/geometry/GmMultiPolyIntersector_py.cpp +++ b/xmsgrid/python/geometry/GmMultiPolyIntersector_py.cpp @@ -20,11 +20,16 @@ namespace py = pybind11; //----- Python Interface ------------------------------------------------------- -PYBIND11_DECLARE_HOLDER_TYPE(T, BSHP); +//PYBIND11_DECLARE_HOLDER_TYPE(T, BSHP); + +struct wrapper { + BSHP p = nullptr; +}; void initGmMultiPolyIntersector(py::module &m) { // GmMultiPolyIntersector class - py::class_> gmMpi(m, "GmMultiPolyIntersector"); +// py::class_> gmMpi(m, "GmMultiPolyIntersector"); + py::class_ gmMpi(m, "GmMultiPolyIntersector"); // --------------------------------------------------------------------------- // function: init @@ -34,28 +39,30 @@ void initGmMultiPolyIntersector(py::module &m) { BSHP vec_pts = xms::VecPt3dFromPyIter(poly_points); BSHP vec_polys = xms::VecInt2dFromPyIter(polys); BSHP sorter(new xms::GmMultiPolyIntersectionSorterTerse); - BSHP rval(xms::GmMultiPolyIntersector::New(*vec_pts, *vec_polys, sorter, starting_id)); - rval->SetQuery(query == "covered_by" ? xms::GMMPIQ_COVEREDBY : xms::GMMPIQ_INTERSECTS); +// BSHP 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")); } \ No newline at end of file