diff --git a/src/Mod/Part/App/AppPart.cpp b/src/Mod/Part/App/AppPart.cpp index 78f1bb1580..0cb14bebf7 100644 --- a/src/Mod/Part/App/AppPart.cpp +++ b/src/Mod/Part/App/AppPart.cpp @@ -106,6 +106,7 @@ #include #include #include +#include #include #include #include @@ -358,6 +359,7 @@ PyMOD_INIT_FUNC(Part) Base::Interpreter().addType(&Part::ShapeFix_WirePy::Type, shapeFix, "Wire"); Base::Interpreter().addType(&Part::ShapeFix_EdgeConnectPy::Type, shapeFix, "EdgeConnect"); Base::Interpreter().addType(&Part::ShapeFix_FaceConnectPy::Type, shapeFix, "FaceConnect"); + Base::Interpreter().addType(&Part::ShapeFix_ShapeTolerancePy::Type, shapeFix, "ShapeTolerance"); Base::Interpreter().addType(&Part::ShapeFix_SplitCommonVertexPy::Type, shapeFix, "SplitCommonVertex"); // ShapeUpgrade sub-module diff --git a/src/Mod/Part/App/CMakeLists.txt b/src/Mod/Part/App/CMakeLists.txt index 61dcddf367..ae67ccd17d 100644 --- a/src/Mod/Part/App/CMakeLists.txt +++ b/src/Mod/Part/App/CMakeLists.txt @@ -145,6 +145,7 @@ generate_from_xml(ShapeFix/ShapeFix_SolidPy) generate_from_xml(ShapeFix/ShapeFix_WirePy) generate_from_xml(ShapeFix/ShapeFix_EdgeConnectPy) generate_from_xml(ShapeFix/ShapeFix_FaceConnectPy) +generate_from_xml(ShapeFix/ShapeFix_ShapeTolerancePy) generate_from_xml(ShapeFix/ShapeFix_SplitCommonVertexPy) generate_from_xml(ShapeUpgrade/UnifySameDomainPy) @@ -449,6 +450,8 @@ SET(ShapeFixPy_SRCS ShapeFix/ShapeFix_EdgeConnectPyImp.cpp ShapeFix/ShapeFix_FaceConnectPy.xml ShapeFix/ShapeFix_FaceConnectPyImp.cpp + ShapeFix/ShapeFix_ShapeTolerancePy.xml + ShapeFix/ShapeFix_ShapeTolerancePyImp.cpp ShapeFix/ShapeFix_SplitCommonVertexPy.xml ShapeFix/ShapeFix_SplitCommonVertexPyImp.cpp ) diff --git a/src/Mod/Part/App/ShapeFix/ShapeFix_ShapeTolerancePy.xml b/src/Mod/Part/App/ShapeFix/ShapeFix_ShapeTolerancePy.xml new file mode 100644 index 0000000000..f135891776 --- /dev/null +++ b/src/Mod/Part/App/ShapeFix/ShapeFix_ShapeTolerancePy.xml @@ -0,0 +1,30 @@ + + + + + + Modifies tolerances of sub-shapes (vertices, edges, faces) + + + + limitTolerance(shape, tmin, [tmax=0, ShapeEnum=SHAPE]) + + + + + setTolerance(shape, precision, [ShapeEnum=SHAPE]) + + + + diff --git a/src/Mod/Part/App/ShapeFix/ShapeFix_ShapeTolerancePyImp.cpp b/src/Mod/Part/App/ShapeFix/ShapeFix_ShapeTolerancePyImp.cpp new file mode 100644 index 0000000000..9da4b99833 --- /dev/null +++ b/src/Mod/Part/App/ShapeFix/ShapeFix_ShapeTolerancePyImp.cpp @@ -0,0 +1,94 @@ +/*************************************************************************** + * 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 +# include +# include +# include +#endif + +#include "ShapeFix/ShapeFix_ShapeTolerancePy.h" +#include "ShapeFix/ShapeFix_ShapeTolerancePy.cpp" +#include "TopoShapePy.h" + +using namespace Part; + +// returns a string which represents the object e.g. when printed in python +std::string ShapeFix_ShapeTolerancePy::representation() const +{ + return ""; +} + +PyObject *ShapeFix_ShapeTolerancePy::PyMake(struct _typeobject *, PyObject *, PyObject *) // Python wrapper +{ + return new ShapeFix_ShapeTolerancePy(new ShapeFix_ShapeTolerance); +} + +// constructor method +int ShapeFix_ShapeTolerancePy::PyInit(PyObject* args, PyObject* /*kwds*/) +{ + if (!PyArg_ParseTuple(args, "")) + return -1; + return 0; +} + +PyObject* ShapeFix_ShapeTolerancePy::limitTolerance(PyObject *args) +{ + PyObject* shape; + double tmin; + double tmax = 0.0; + TopAbs_ShapeEnum styp = TopAbs_SHAPE; + if (!PyArg_ParseTuple(args, "O!d|di", &TopoShapePy::Type, &shape, + &tmin, &tmax, &styp)) + return nullptr; + + TopoDS_Shape sh = static_cast(shape)->getTopoShapePtr()->getShape(); + bool ok = getShapeFix_ShapeTolerancePtr()->LimitTolerance(sh, tmin, tmax, styp); + return Py::new_reference_to(Py::Boolean(ok)); +} + +PyObject* ShapeFix_ShapeTolerancePy::setTolerance(PyObject *args) +{ + PyObject* shape; + double prec; + TopAbs_ShapeEnum styp = TopAbs_SHAPE; + if (!PyArg_ParseTuple(args, "O!d|i", &TopoShapePy::Type, &shape, + &prec, &styp)) + return nullptr; + + TopoDS_Shape sh = static_cast(shape)->getTopoShapePtr()->getShape(); + getShapeFix_ShapeTolerancePtr()->SetTolerance(sh, prec, styp); + Py_Return; +} + +PyObject *ShapeFix_ShapeTolerancePy::getCustomAttributes(const char* /*attr*/) const +{ + return nullptr; +} + +int ShapeFix_ShapeTolerancePy::setCustomAttributes(const char* /*attr*/, PyObject* /*obj*/) +{ + return 0; +}