From 80f166bbf77113dbb6bc1bc90361bb0e440c2302 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 8 Jan 2014 12:54:45 +0100 Subject: [PATCH] + Allow to get/set x/y axes of circle --- src/Mod/Part/App/CirclePy.xml | 12 ++++++ src/Mod/Part/App/CirclePyImp.cpp | 72 ++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) diff --git a/src/Mod/Part/App/CirclePy.xml b/src/Mod/Part/App/CirclePy.xml index e607e62a8470..e80ffe200e60 100644 --- a/src/Mod/Part/App/CirclePy.xml +++ b/src/Mod/Part/App/CirclePy.xml @@ -48,5 +48,17 @@ Part.Circle(Point1,Point2,Point3) + + + The X axis direction of the circle + + + + + + The Y axis direction of the circle + + + diff --git a/src/Mod/Part/App/CirclePyImp.cpp b/src/Mod/Part/App/CirclePyImp.cpp index cc53de534355..ad1f80b1aaef 100644 --- a/src/Mod/Part/App/CirclePyImp.cpp +++ b/src/Mod/Part/App/CirclePyImp.cpp @@ -233,6 +233,78 @@ void CirclePy::setAxis(Py::Object arg) } } +Py::Object CirclePy::getXAxis(void) const +{ + Handle_Geom_Circle circle = Handle_Geom_Circle::DownCast(getGeomCirclePtr()->handle()); + gp_Ax1 axis = circle->XAxis(); + gp_Dir dir = axis.Direction(); + return Py::Vector(Base::Vector3d(dir.X(), dir.Y(), dir.Z())); +} + +void CirclePy::setXAxis(Py::Object arg) +{ + PyObject* p = arg.ptr(); + Base::Vector3d val; + if (PyObject_TypeCheck(p, &(Base::VectorPy::Type))) { + val = static_cast(p)->value(); + } + else if (PyTuple_Check(p)) { + val = Base::getVectorFromTuple(p); + } + else { + std::string error = std::string("type must be 'Vector', not "); + error += p->ob_type->tp_name; + throw Py::TypeError(error); + } + + Handle_Geom_Circle circle = Handle_Geom_Circle::DownCast(getGeomCirclePtr()->handle()); + try { + gp_Ax2 pos; + pos = circle->Position(); + pos.SetXDirection(gp_Dir(val.x, val.y, val.z)); + circle->SetPosition(pos); + } + catch (Standard_Failure) { + throw Py::Exception("cannot set X axis"); + } +} + +Py::Object CirclePy::getYAxis(void) const +{ + Handle_Geom_Circle circle = Handle_Geom_Circle::DownCast(getGeomCirclePtr()->handle()); + gp_Ax1 axis = circle->YAxis(); + gp_Dir dir = axis.Direction(); + return Py::Vector(Base::Vector3d(dir.X(), dir.Y(), dir.Z())); +} + +void CirclePy::setYAxis(Py::Object arg) +{ + PyObject* p = arg.ptr(); + Base::Vector3d val; + if (PyObject_TypeCheck(p, &(Base::VectorPy::Type))) { + val = static_cast(p)->value(); + } + else if (PyTuple_Check(p)) { + val = Base::getVectorFromTuple(p); + } + else { + std::string error = std::string("type must be 'Vector', not "); + error += p->ob_type->tp_name; + throw Py::TypeError(error); + } + + Handle_Geom_Circle circle = Handle_Geom_Circle::DownCast(getGeomCirclePtr()->handle()); + try { + gp_Ax2 pos; + pos = circle->Position(); + pos.SetYDirection(gp_Dir(val.x, val.y, val.z)); + circle->SetPosition(pos); + } + catch (Standard_Failure) { + throw Py::Exception("cannot set Y axis"); + } +} + PyObject *CirclePy::getCustomAttributes(const char* attr) const { return 0;