diff --git a/src/Mod/Part/App/AppPart.cpp b/src/Mod/Part/App/AppPart.cpp index 2a4e7fd1d7..78f1bb1580 100644 --- a/src/Mod/Part/App/AppPart.cpp +++ b/src/Mod/Part/App/AppPart.cpp @@ -104,6 +104,7 @@ #include #include #include +#include #include #include #include @@ -356,6 +357,7 @@ PyMOD_INIT_FUNC(Part) Base::Interpreter().addType(&Part::ShapeFix_SolidPy::Type, shapeFix, "Solid"); 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_SplitCommonVertexPy::Type, shapeFix, "SplitCommonVertex"); // ShapeUpgrade sub-module diff --git a/src/Mod/Part/App/CMakeLists.txt b/src/Mod/Part/App/CMakeLists.txt index ef5adf5600..61dcddf367 100644 --- a/src/Mod/Part/App/CMakeLists.txt +++ b/src/Mod/Part/App/CMakeLists.txt @@ -144,6 +144,7 @@ generate_from_xml(ShapeFix/ShapeFix_ShellPy) 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_SplitCommonVertexPy) generate_from_xml(ShapeUpgrade/UnifySameDomainPy) @@ -446,6 +447,8 @@ SET(ShapeFixPy_SRCS ShapeFix/ShapeFix_WirePyImp.cpp ShapeFix/ShapeFix_EdgeConnectPy.xml ShapeFix/ShapeFix_EdgeConnectPyImp.cpp + ShapeFix/ShapeFix_FaceConnectPy.xml + ShapeFix/ShapeFix_FaceConnectPyImp.cpp ShapeFix/ShapeFix_SplitCommonVertexPy.xml ShapeFix/ShapeFix_SplitCommonVertexPyImp.cpp ) diff --git a/src/Mod/Part/App/ShapeFix/ShapeFix_FaceConnectPy.xml b/src/Mod/Part/App/ShapeFix/ShapeFix_FaceConnectPy.xml new file mode 100644 index 0000000000..bfecf1e442 --- /dev/null +++ b/src/Mod/Part/App/ShapeFix/ShapeFix_FaceConnectPy.xml @@ -0,0 +1,35 @@ + + + + + + Rebuilds connectivity between faces in shell + + + + add(face, face) + + + + + build(shell, sewtolerance, fixtolerance) + + + + + Clears internal data structure + + + + diff --git a/src/Mod/Part/App/ShapeFix/ShapeFix_FaceConnectPyImp.cpp b/src/Mod/Part/App/ShapeFix/ShapeFix_FaceConnectPyImp.cpp new file mode 100644 index 0000000000..be3b72c6f3 --- /dev/null +++ b/src/Mod/Part/App/ShapeFix/ShapeFix_FaceConnectPyImp.cpp @@ -0,0 +1,102 @@ +/*************************************************************************** + * 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_FaceConnectPy.h" +#include "ShapeFix/ShapeFix_FaceConnectPy.cpp" +#include "TopoShapeFacePy.h" +#include "TopoShapeShellPy.h" + +using namespace Part; + +// returns a string which represents the object e.g. when printed in python +std::string ShapeFix_FaceConnectPy::representation() const +{ + return ""; +} + +PyObject *ShapeFix_FaceConnectPy::PyMake(struct _typeobject *, PyObject *, PyObject *) // Python wrapper +{ + return new ShapeFix_FaceConnectPy(new ShapeFix_FaceConnect); +} + +// constructor method +int ShapeFix_FaceConnectPy::PyInit(PyObject* args, PyObject* /*kwds*/) +{ + if (!PyArg_ParseTuple(args, "")) + return -1; + return 0; +} + +PyObject* ShapeFix_FaceConnectPy::add(PyObject *args) +{ + PyObject* face1; + PyObject* face2; + if (!PyArg_ParseTuple(args, "O!O!", &TopoShapeFacePy::Type, &face1, + &TopoShapeFacePy::Type, &face2)) + return nullptr; + + TopoDS_Shape f1 = static_cast(face1)->getTopoShapePtr()->getShape(); + TopoDS_Shape f2 = static_cast(face2)->getTopoShapePtr()->getShape(); + getShapeFix_FaceConnectPtr()->Add(TopoDS::Face(f1), TopoDS::Face(f2)); + Py_Return; +} + +PyObject* ShapeFix_FaceConnectPy::build(PyObject *args) +{ + PyObject* shell; + double sewtoler; + double fixtoler; + if (!PyArg_ParseTuple(args, "O!dd", &TopoShapeShellPy::Type, &shell, &sewtoler, &fixtoler)) + return nullptr; + + TopoDS_Shape sh = static_cast(shell)->getTopoShapePtr()->getShape(); + TopoShape res = getShapeFix_FaceConnectPtr()->Build(TopoDS::Shell(sh), sewtoler, fixtoler); + return res.getPyObject(); +} + +PyObject* ShapeFix_FaceConnectPy::clear(PyObject *args) +{ + if (!PyArg_ParseTuple(args, "")) + return nullptr; + + getShapeFix_FaceConnectPtr()->Clear(); + Py_Return; +} + +PyObject *ShapeFix_FaceConnectPy::getCustomAttributes(const char* /*attr*/) const +{ + return nullptr; +} + +int ShapeFix_FaceConnectPy::setCustomAttributes(const char* /*attr*/, PyObject* /*obj*/) +{ + return 0; +}