From 03dd79c155a51d8479f7d7ee0c7920103d4843f9 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 14 Nov 2021 20:05:22 +0100 Subject: [PATCH] Base: add methods to Vector2dPy --- src/Base/GeometryPyCXX.cpp | 104 +++++++++++++++++++++++++++++++++++++ src/Base/GeometryPyCXX.h | 13 +++++ 2 files changed, 117 insertions(+) diff --git a/src/Base/GeometryPyCXX.cpp b/src/Base/GeometryPyCXX.cpp index 1c9bf7638e..806a11ca79 100644 --- a/src/Base/GeometryPyCXX.cpp +++ b/src/Base/GeometryPyCXX.cpp @@ -285,6 +285,96 @@ Py::Object Vector2dPy::number_power( const Py::Object &, const Py::Object & ) throw Py::TypeError("Not defined"); } +Py::Object Vector2dPy::isNull(const Py::Tuple& args) +{ + double tol = 0.0; + if (args.size() > 0) { + tol = static_cast(Py::Float(args[0])); + } + return Py::Boolean(v.IsNull(tol)); +} +PYCXX_VARARGS_METHOD_DECL(Vector2dPy, isNull) + +Py::Object Vector2dPy::length(const Py::Tuple&) +{ + return Py::Float(v.Length()); +} +PYCXX_VARARGS_METHOD_DECL(Vector2dPy, length) + +Py::Object Vector2dPy::atan2(const Py::Tuple&) +{ + return Py::Float(v.Angle()); +} +PYCXX_VARARGS_METHOD_DECL(Vector2dPy, atan2) + +Py::Object Vector2dPy::square(const Py::Tuple&) +{ + return Py::Float(v.Sqr()); +} +PYCXX_VARARGS_METHOD_DECL(Vector2dPy, square) + +Py::Object Vector2dPy::scale(const Py::Tuple& args) +{ + double f = static_cast(Py::Float(args[0])); + v.Scale(f); + return Py::None(); +} +PYCXX_VARARGS_METHOD_DECL(Vector2dPy, scale) + +Py::Object Vector2dPy::rotate(const Py::Tuple& args) +{ + double f = static_cast(Py::Float(args[0])); + v.Rotate(f); + return Py::None(); +} +PYCXX_VARARGS_METHOD_DECL(Vector2dPy, rotate) + +Py::Object Vector2dPy::normalize(const Py::Tuple&) +{ + v.Normalize(); + return Py::None(); +} +PYCXX_VARARGS_METHOD_DECL(Vector2dPy, normalize) + +Py::Object Vector2dPy::perpendicular(const Py::Tuple& args) +{ + bool f = static_cast(Py::Boolean(args[0])); + Base::Vector2d p = v.Perpendicular(f); + return create(p); +} +PYCXX_VARARGS_METHOD_DECL(Vector2dPy, perpendicular) + +Py::Object Vector2dPy::distance(const Py::Tuple& args) +{ + Base::Vector2d p = Py::toVector2d(args[0]); + return Py::Float(p.Distance(v)); +} +PYCXX_VARARGS_METHOD_DECL(Vector2dPy, distance) + +Py::Object Vector2dPy::isEqual(const Py::Tuple& args) +{ + Base::Vector2d p = Py::toVector2d(args[0]); + double f = static_cast(Py::Float(args[1])); + return Py::Boolean(v.IsEqual(p, f)); +} +PYCXX_VARARGS_METHOD_DECL(Vector2dPy, isEqual) + +Py::Object Vector2dPy::getAngle(const Py::Tuple& args) +{ + Base::Vector2d p = Py::toVector2d(args[0]); + return Py::Float(v.GetAngle(p)); +} +PYCXX_VARARGS_METHOD_DECL(Vector2dPy, getAngle) + +Py::Object Vector2dPy::projectToLine(const Py::Tuple& args) +{ + Base::Vector2d p = Py::toVector2d(args[0]); + Base::Vector2d d = Py::toVector2d(args[1]); + v.ProjectToLine(p, d); + return Py::None(); +} +PYCXX_VARARGS_METHOD_DECL(Vector2dPy, projectToLine) + void Vector2dPy::init_type(void) { behaviors().name( "Vector2d" ); @@ -293,6 +383,20 @@ void Vector2dPy::init_type(void) behaviors().supportSetattro(); behaviors().supportRepr(); behaviors().supportNumberType(); + + PYCXX_ADD_VARARGS_METHOD(isNull, isNull, "isNull()"); + PYCXX_ADD_VARARGS_METHOD(length, length, "length()"); + PYCXX_ADD_VARARGS_METHOD(atan2, atan2, "atan2()"); + PYCXX_ADD_VARARGS_METHOD(square, square, "square()"); + PYCXX_ADD_VARARGS_METHOD(scale, scale, "scale()"); + PYCXX_ADD_VARARGS_METHOD(rotate, rotate, "rotate()"); + PYCXX_ADD_VARARGS_METHOD(normalize, normalize, "normalize()"); + PYCXX_ADD_VARARGS_METHOD(perpendicular, perpendicular, "perpendicular()"); + PYCXX_ADD_VARARGS_METHOD(distance, distance, "distance()"); + PYCXX_ADD_VARARGS_METHOD(isEqual, isEqual, "isEqual()"); + PYCXX_ADD_VARARGS_METHOD(getAngle, getAngle, "getAngle()"); + PYCXX_ADD_VARARGS_METHOD(projectToLine, projectToLine, "projectToLine()"); + // Call to make the type ready for use behaviors().readyType(); } diff --git a/src/Base/GeometryPyCXX.h b/src/Base/GeometryPyCXX.h index 73231cd72c..24faa31fe4 100644 --- a/src/Base/GeometryPyCXX.h +++ b/src/Base/GeometryPyCXX.h @@ -93,6 +93,19 @@ public: virtual Py::Object number_power( const Py::Object &, const Py::Object & ); //@} + Py::Object isNull(const Py::Tuple&); + Py::Object length(const Py::Tuple&); + Py::Object atan2(const Py::Tuple&); + Py::Object square(const Py::Tuple&); + Py::Object scale(const Py::Tuple&); + Py::Object rotate(const Py::Tuple&); + Py::Object normalize(const Py::Tuple&); + Py::Object perpendicular(const Py::Tuple&); + Py::Object distance(const Py::Tuple&); + Py::Object isEqual(const Py::Tuple&); + Py::Object getAngle(const Py::Tuple&); + Py::Object projectToLine(const Py::Tuple&); + private: Vector2d v; };