Skip to content

Commit

Permalink
fixing create_tuple calls to make_tuple
Browse files Browse the repository at this point in the history
  • Loading branch information
fraguada committed Jan 30, 2025
1 parent 09162c6 commit a900a86
Show file tree
Hide file tree
Showing 6 changed files with 78 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/bindings/bindings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ BND_TUPLE CreateTuple(int count)
#if defined(ON_PYTHON_COMPILE)

#if defined(NANOBIND)
BND_TUPLE rc = py::make_tuple(count);
BND_TUPLE rc = py::tuple();
#else
BND_TUPLE rc = py::tuple(count);
#endif
Expand Down
1 change: 1 addition & 0 deletions src/bindings/bindings.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#include <nanobind/operators.h>
#include <nanobind/stl/vector.h>
#include <vector>
#include <tuple>
namespace py = nanobind;
typedef nanobind::module_ rh3dmpymodule;
#define RH3DM_PYTHON_BINDING(name, variable) NB_MODULE(name, variable)
Expand Down
4 changes: 4 additions & 0 deletions src/bindings/bnd_bezier.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,14 @@ BND_TUPLE BND_BezierCurve::Split(double t)
delete right;
right = nullptr;
}
#if defined(ON_PYTHON_COMPILE) && defined(NANOBIND)
BND_TUPLE rc = py::make_tuple(success, left, right);
#else
BND_TUPLE rc = CreateTuple(3);
SetTuple(rc, 0, success);
SetTuple(rc, 1, left);
SetTuple(rc, 2, right);
#endif
return rc;
}

Expand Down
17 changes: 17 additions & 0 deletions src/bindings/bnd_curve.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -159,9 +159,13 @@ BND_TUPLE BND_Curve::FrameAt(double t) const
{
ON_Plane plane;
bool success = m_curve->FrameAt(t, plane);
#if defined(ON_PYTHON_COMPILE) && defined(NANOBIND)
BND_TUPLE rc = py::make_tuple(success, BND_Plane::FromOnPlane(plane));
#else
BND_TUPLE rc = CreateTuple(2);
SetTuple(rc, 0, success);
SetTuple(rc, 1, BND_Plane::FromOnPlane(plane));
#endif
return rc;
}

Expand Down Expand Up @@ -190,19 +194,27 @@ BND_TUPLE BND_Curve::GetCurveParameterFromNurbsFormParameter(double nurbsParamet
{
double curve_t = 0;
bool success = m_curve->GetCurveParameterFromNurbFormParameter(nurbsParameter, &curve_t);
#if defined(ON_PYTHON_COMPILE) && defined(NANOBIND)
BND_TUPLE rc = py::make_tuple(success, curve_t);
#else
BND_TUPLE rc = CreateTuple(2);
SetTuple(rc, 0, success);
SetTuple(rc, 1, curve_t);
#endif
return rc;
}

BND_TUPLE BND_Curve::GetNurbsFormParameterFromCurveParameter(double curveParameter)
{
double nurbs_t = 0;
bool success = m_curve->GetNurbFormParameterFromCurveParameter(curveParameter, &nurbs_t);
#if defined(ON_PYTHON_COMPILE) && defined(NANOBIND)
BND_TUPLE rc = py::make_tuple(success, nurbs_t);
#else
BND_TUPLE rc = CreateTuple(2);
SetTuple(rc, 0, success);
SetTuple(rc, 1, nurbs_t);
#endif
return rc;
}

Expand All @@ -224,12 +236,17 @@ BND_TUPLE BND_Curve::Split(double t) const
ON_Curve* right = nullptr;
if (m_curve->Split(t, left, right))
{
#if defined(ON_PYTHON_COMPILE) && defined(NANOBIND)
BND_TUPLE rc = py::make_tuple(BND_CommonObject::CreateWrapper(left, nullptr), BND_CommonObject::CreateWrapper(right, nullptr));
#else
BND_TUPLE rc = CreateTuple(2);
SetTuple(rc, 0, BND_CommonObject::CreateWrapper(left, nullptr));
SetTuple(rc, 1, BND_CommonObject::CreateWrapper(right, nullptr));
#endif
return rc;
}
return NullTuple();

}


Expand Down
16 changes: 16 additions & 0 deletions tests/python/test_Circle.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import rhino3dm
import unittest

#objective:
class TestCircle(unittest.TestCase):
def test_Circle(self):

circle = rhino3dm.Circle(5)
result = circle.ClosestParameter(rhino3dm.Point3d(0, 0, 0))
self.assertTrue(result[0] == True)


if __name__ == '__main__':
print("running tests")
unittest.main()
print("tests complete")
39 changes: 39 additions & 0 deletions tests/python/test_Curve.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,45 @@ def test_createControlPointCurve(self):

self.assertEqual( curveFromArray.PointAt(0.5), curveFromList.PointAt(0.5) )

def test_tuples(self):

pointArray = []
for i in range(15):
point = rhino3dm.Point3d(i, i, i)
pointArray.append(point)

curve = rhino3dm.Curve.CreateControlPointCurve(pointArray, 3)

#FrameAt
with self.subTest(msg="FrameAt"):
frameResult = curve.FrameAt(0.5)
self.assertTrue( len(frameResult) == 2 )
self.assertTrue( type(frameResult[0]) == bool )
self.assertTrue( type(frameResult[1]) == rhino3dm.Plane )
self.assertTrue( frameResult[0] == True )

with self.subTest(msg="GetCurveParameterFromNurbsFormParameter"):
curveParamFromResult = curve.GetCurveParameterFromNurbsFormParameter(0.5)
self.assertTrue( len(curveParamFromResult) == 2 )
self.assertTrue( type(curveParamFromResult[0]) == bool )
self.assertTrue( type(curveParamFromResult[1]) == float )
self.assertTrue( curveParamFromResult[0] == True )

with self.subTest(msg="GetNurbsFormParameterFromCurveParameter"):
curveParamNurbsResult = curve.GetNurbsFormParameterFromCurveParameter(0.5)
self.assertTrue( len(curveParamNurbsResult) == 2 )
self.assertTrue( type(curveParamNurbsResult[0]) == bool )
self.assertTrue( type(curveParamNurbsResult[1]) == float )
self.assertTrue( curveParamNurbsResult[0] == True )

with self.subTest(msg="Split"):
curveSplitResult = curve.Split(0.1)
self.assertTrue( len(curveSplitResult) == 2 )
self.assertTrue( type(curveSplitResult[0]) == rhino3dm.NurbsCurve )
self.assertTrue( type(curveSplitResult[1]) == rhino3dm.NurbsCurve )



if __name__ == '__main__':
print("running tests")
unittest.main()
Expand Down

0 comments on commit a900a86

Please sign in to comment.