From ede51b792ab5200efeb67c1d81199d952e1b4df5 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 5 May 2022 15:23:46 +0200 Subject: [PATCH] Part: expose ShapeFix_Wireframe to Python --- src/Mod/Part/App/AppPart.cpp | 2 + src/Mod/Part/App/CMakeLists.txt | 3 + .../App/ShapeFix/ShapeFix_WireframePy.xml | 56 +++++++ .../App/ShapeFix/ShapeFix_WireframePyImp.cpp | 139 ++++++++++++++++++ 4 files changed, 200 insertions(+) create mode 100644 src/Mod/Part/App/ShapeFix/ShapeFix_WireframePy.xml create mode 100644 src/Mod/Part/App/ShapeFix/ShapeFix_WireframePyImp.cpp diff --git a/src/Mod/Part/App/AppPart.cpp b/src/Mod/Part/App/AppPart.cpp index 0adfab763b..04c5593cba 100644 --- a/src/Mod/Part/App/AppPart.cpp +++ b/src/Mod/Part/App/AppPart.cpp @@ -113,6 +113,7 @@ #include #include #include +#include #include #include #include "Mod/Part/App/SpherePy.h" @@ -360,6 +361,7 @@ PyMOD_INIT_FUNC(Part) Base::Interpreter().addType(&Part::ShapeFix_ShellPy::Type, shapeFix, "Shell"); Base::Interpreter().addType(&Part::ShapeFix_SolidPy::Type, shapeFix, "Solid"); Base::Interpreter().addType(&Part::ShapeFix_WirePy::Type, shapeFix, "Wire"); + Base::Interpreter().addType(&Part::ShapeFix_WireframePy::Type, shapeFix, "Wireframe"); Base::Interpreter().addType(&Part::ShapeFix_WireVertexPy::Type, shapeFix, "WireVertex"); Base::Interpreter().addType(&Part::ShapeFix_EdgeConnectPy::Type, shapeFix, "EdgeConnect"); Base::Interpreter().addType(&Part::ShapeFix_FaceConnectPy::Type, shapeFix, "FaceConnect"); diff --git a/src/Mod/Part/App/CMakeLists.txt b/src/Mod/Part/App/CMakeLists.txt index cd99aa965e..21accb67cd 100644 --- a/src/Mod/Part/App/CMakeLists.txt +++ b/src/Mod/Part/App/CMakeLists.txt @@ -143,6 +143,7 @@ generate_from_xml(ShapeFix/ShapeFix_ShapePy) generate_from_xml(ShapeFix/ShapeFix_ShellPy) generate_from_xml(ShapeFix/ShapeFix_SolidPy) generate_from_xml(ShapeFix/ShapeFix_WirePy) +generate_from_xml(ShapeFix/ShapeFix_WireframePy) generate_from_xml(ShapeFix/ShapeFix_WireVertexPy) generate_from_xml(ShapeFix/ShapeFix_EdgeConnectPy) generate_from_xml(ShapeFix/ShapeFix_FaceConnectPy) @@ -449,6 +450,8 @@ SET(ShapeFixPy_SRCS ShapeFix/ShapeFix_SolidPyImp.cpp ShapeFix/ShapeFix_WirePy.xml ShapeFix/ShapeFix_WirePyImp.cpp + ShapeFix/ShapeFix_WireframePy.xml + ShapeFix/ShapeFix_WireframePyImp.cpp ShapeFix/ShapeFix_WireVertexPy.xml ShapeFix/ShapeFix_WireVertexPyImp.cpp ShapeFix/ShapeFix_EdgeConnectPy.xml diff --git a/src/Mod/Part/App/ShapeFix/ShapeFix_WireframePy.xml b/src/Mod/Part/App/ShapeFix/ShapeFix_WireframePy.xml new file mode 100644 index 0000000000..756d242ef0 --- /dev/null +++ b/src/Mod/Part/App/ShapeFix/ShapeFix_WireframePy.xml @@ -0,0 +1,56 @@ + + + + + + Provides methods for fixing wireframe of shape + + + + Clears all statuses + + + + + Loads a shape, resets statuses + + + + + Fixes gaps between ends of curves of adjacent edges + + + + + Fixes small edges in shape by merging adjacent edges + + + + + + + + + + Returns mode managing removing small edges + + + + + + Limit angle for merging edges + + + + + diff --git a/src/Mod/Part/App/ShapeFix/ShapeFix_WireframePyImp.cpp b/src/Mod/Part/App/ShapeFix/ShapeFix_WireframePyImp.cpp new file mode 100644 index 0000000000..093fa973c5 --- /dev/null +++ b/src/Mod/Part/App/ShapeFix/ShapeFix_WireframePyImp.cpp @@ -0,0 +1,139 @@ +/*************************************************************************** + * Copyright (c) 2022 Werner Mayer * + * * + * This file is part of the FreeCAD CAx development system. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Library General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Library General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this library; see the file COPYING.LIB. If not, * + * write to the Free Software Foundation, Inc., 59 Temple Place, * + * Suite 330, Boston, MA 02111-1307, USA * + * * + ***************************************************************************/ + + +#include "PreCompiled.h" +#ifndef _PreComp_ +# include +#endif + +#include "ShapeFix/ShapeFix_WireframePy.h" +#include "ShapeFix/ShapeFix_WireframePy.cpp" +#include "ShapeFix/ShapeFix_WirePy.h" +#include +#include + +using namespace Part; + + +std::string ShapeFix_WireframePy::representation() const +{ + return ""; +} + +PyObject *ShapeFix_WireframePy::PyMake(struct _typeobject *, PyObject *, PyObject *) // Python wrapper +{ + return new ShapeFix_WireframePy(nullptr); +} + +// constructor method +int ShapeFix_WireframePy::PyInit(PyObject* args, PyObject* /*kwds*/) +{ + PyObject* shape = nullptr; + if (!PyArg_ParseTuple(args, "|O!", &TopoShapePy::Type, &shape)) + return -1; + + if (shape) { + setHandle(new ShapeFix_Wireframe(static_cast(shape)->getTopoShapePtr()->getShape())); + } + else { + setHandle(new ShapeFix_Wireframe()); + } + + return 0; +} + +PyObject* ShapeFix_WireframePy::load(PyObject *args) +{ + PyObject* shape; + if (!PyArg_ParseTuple(args, "O!", &TopoShapePy::Type, &shape)) + return nullptr; + + getShapeFix_WireframePtr()->Load(static_cast(shape)->getTopoShapePtr()->getShape()); + Py_Return; +} + +PyObject* ShapeFix_WireframePy::clearStatuses(PyObject *args) +{ + if (!PyArg_ParseTuple(args, "")) + return nullptr; + + getShapeFix_WireframePtr()->ClearStatuses(); + Py_Return; +} + +PyObject* ShapeFix_WireframePy::fixWireGaps(PyObject *args) +{ + if (!PyArg_ParseTuple(args, "")) + return nullptr; + + bool ok = getShapeFix_WireframePtr()->FixWireGaps(); + return Py::new_reference_to(Py::Boolean(ok)); +} + +PyObject* ShapeFix_WireframePy::fixSmallEdges(PyObject *args) +{ + if (!PyArg_ParseTuple(args, "")) + return nullptr; + + bool ok = getShapeFix_WireframePtr()->FixSmallEdges(); + return Py::new_reference_to(Py::Boolean(ok)); +} + +PyObject* ShapeFix_WireframePy::shape(PyObject *args) +{ + if (!PyArg_ParseTuple(args, "")) + return nullptr; + + TopoShape sh = getShapeFix_WireframePtr()->Shape(); + return sh.getPyObject(); +} + +Py::Boolean ShapeFix_WireframePy::getModeDropSmallEdges() const +{ + return Py::Boolean(getShapeFix_WireframePtr()->ModeDropSmallEdges()); +} + +void ShapeFix_WireframePy::setModeDropSmallEdges(Py::Boolean arg) +{ + getShapeFix_WireframePtr()->ModeDropSmallEdges() = arg; +} + +Py::Float ShapeFix_WireframePy::getLimitAngle() const +{ + return Py::Float(getShapeFix_WireframePtr()->LimitAngle()); +} + +void ShapeFix_WireframePy::setLimitAngle(Py::Float arg) +{ + getShapeFix_WireframePtr()->SetLimitAngle(arg); +} + +PyObject *ShapeFix_WireframePy::getCustomAttributes(const char* /*attr*/) const +{ + return nullptr; +} + +int ShapeFix_WireframePy::setCustomAttributes(const char* /*attr*/, PyObject* /*obj*/) +{ + return 0; +}