diff --git a/src/Mod/Part/App/TopoShape.cpp b/src/Mod/Part/App/TopoShape.cpp index f81a04122..c17aa3b1a 100644 --- a/src/Mod/Part/App/TopoShape.cpp +++ b/src/Mod/Part/App/TopoShape.cpp @@ -1679,13 +1679,10 @@ TopoDS_Shape TopoShape::removeShape(const std::vector& s) const void TopoShape::sewShape() { - //ShapeFix_Shape fixer(this->_Shape); - //fixer.Perform(); BRepBuilderAPI_Sewing sew; - sew.Load(this->_Shape/*fixer.Shape()*/); + sew.Load(this->_Shape); sew.Perform(); - //shape = ShapeUpgrade_ShellSewing().ApplySewing(shape); this->_Shape = sew.SewedShape(); } @@ -1722,6 +1719,10 @@ bool TopoShape::fix(double precision, double mintol, double maxtol) fix.FixFaceTool()->Perform(); this->_Shape = fix.Shape(); } + else if (type == TopAbs_WIRE) { + fix.FixWireTool()->Perform(); + this->_Shape = fix.Shape(); + } else { this->_Shape = fix.Shape(); } diff --git a/src/Mod/Part/App/TopoShapeEdgePy.xml b/src/Mod/Part/App/TopoShapeEdgePy.xml index a7f314e79..7e01e5a42 100644 --- a/src/Mod/Part/App/TopoShapeEdgePy.xml +++ b/src/Mod/Part/App/TopoShapeEdgePy.xml @@ -59,6 +59,12 @@ Set the tolerance for the edge. + + + Set or get the tolerance of the vertex + + + Returns the length of the edge diff --git a/src/Mod/Part/App/TopoShapeEdgePyImp.cpp b/src/Mod/Part/App/TopoShapeEdgePyImp.cpp index b69049e6e..d33159b6f 100644 --- a/src/Mod/Part/App/TopoShapeEdgePyImp.cpp +++ b/src/Mod/Part/App/TopoShapeEdgePyImp.cpp @@ -409,6 +409,19 @@ PyObject* TopoShapeEdgePy::setTolerance(PyObject *args) // ====== Attributes ====================================================================== +Py::Float TopoShapeEdgePy::getTolerance(void) const +{ + const TopoDS_Edge& e = TopoDS::Edge(getTopoShapePtr()->_Shape); + return Py::Float(BRep_Tool::Tolerance(e)); +} + +void TopoShapeEdgePy::setTolerance(Py::Float tol) +{ + BRep_Builder aBuilder; + const TopoDS_Edge& e = TopoDS::Edge(getTopoShapePtr()->_Shape); + aBuilder.UpdateEdge(e, (double)tol); +} + Py::Float TopoShapeEdgePy::getLength(void) const { const TopoDS_Edge& e = TopoDS::Edge(getTopoShapePtr()->_Shape); diff --git a/src/Mod/Part/App/TopoShapeFacePy.xml b/src/Mod/Part/App/TopoShapeFacePy.xml index 5c9c62691..f958d0440 100644 --- a/src/Mod/Part/App/TopoShapeFacePy.xml +++ b/src/Mod/Part/App/TopoShapeFacePy.xml @@ -64,6 +64,12 @@ Set the tolerance for the face. + + + Set or get the tolerance of the vertex + + + Returns a 4 tuple with the parameter range diff --git a/src/Mod/Part/App/TopoShapeFacePyImp.cpp b/src/Mod/Part/App/TopoShapeFacePyImp.cpp index 60a1e5e5d..9c65d51f2 100644 --- a/src/Mod/Part/App/TopoShapeFacePyImp.cpp +++ b/src/Mod/Part/App/TopoShapeFacePyImp.cpp @@ -417,17 +417,6 @@ PyObject* TopoShapeFacePy::makeHalfSpace(PyObject *args) } } -PyObject* TopoShapeFacePy::setTolerance(PyObject *args) -{ - double tol; - if (!PyArg_ParseTuple(args, "d", &tol)) - return 0; - BRep_Builder aBuilder; - const TopoDS_Face& f = TopoDS::Face(getTopoShapePtr()->_Shape); - aBuilder.UpdateFace(f, tol); - Py_Return; -} - Py::Object TopoShapeFacePy::getSurface() const { const TopoDS_Face& f = TopoDS::Face(getTopoShapePtr()->_Shape); @@ -518,6 +507,30 @@ Py::Object TopoShapeFacePy::getSurface() const throw Py::TypeError("undefined surface type"); } +PyObject* TopoShapeFacePy::setTolerance(PyObject *args) +{ + double tol; + if (!PyArg_ParseTuple(args, "d", &tol)) + return 0; + BRep_Builder aBuilder; + const TopoDS_Face& f = TopoDS::Face(getTopoShapePtr()->_Shape); + aBuilder.UpdateFace(f, tol); + Py_Return; +} + +Py::Float TopoShapeFacePy::getTolerance(void) const +{ + const TopoDS_Face& f = TopoDS::Face(getTopoShapePtr()->_Shape); + return Py::Float(BRep_Tool::Tolerance(f)); +} + +void TopoShapeFacePy::setTolerance(Py::Float tol) +{ + BRep_Builder aBuilder; + const TopoDS_Face& f = TopoDS::Face(getTopoShapePtr()->_Shape); + aBuilder.UpdateFace(f, (double)tol); +} + Py::Tuple TopoShapeFacePy::getParameterRange(void) const { const TopoDS_Face& f = TopoDS::Face(getTopoShapePtr()->_Shape); diff --git a/src/Mod/Part/App/TopoShapeVertexPy.xml b/src/Mod/Part/App/TopoShapeVertexPy.xml index a66f85f4d..38a3c141b 100644 --- a/src/Mod/Part/App/TopoShapeVertexPy.xml +++ b/src/Mod/Part/App/TopoShapeVertexPy.xml @@ -38,6 +38,12 @@ + + + Set or get the tolerance of the vertex + + + Set the tolerance for the vertex. diff --git a/src/Mod/Part/App/TopoShapeVertexPyImp.cpp b/src/Mod/Part/App/TopoShapeVertexPyImp.cpp index 4a0741268..013a5167c 100644 --- a/src/Mod/Part/App/TopoShapeVertexPyImp.cpp +++ b/src/Mod/Part/App/TopoShapeVertexPyImp.cpp @@ -130,6 +130,19 @@ PyObject* TopoShapeVertexPy::setTolerance(PyObject *args) Py_Return; } +Py::Float TopoShapeVertexPy::getTolerance(void) const +{ + const TopoDS_Vertex& v = TopoDS::Vertex(getTopoShapePtr()->_Shape); + return Py::Float(BRep_Tool::Tolerance(v)); +} + +void TopoShapeVertexPy::setTolerance(Py::Float tol) +{ + BRep_Builder aBuilder; + const TopoDS_Vertex& v = TopoDS::Vertex(getTopoShapePtr()->_Shape); + aBuilder.UpdateVertex(v, (double)tol); +} + Py::Float TopoShapeVertexPy::getX(void) const { const TopoDS_Vertex& v = TopoDS::Vertex(getTopoShapePtr()->_Shape); diff --git a/src/Mod/Part/App/TopoShapeWirePy.xml b/src/Mod/Part/App/TopoShapeWirePy.xml index d3a3780c8..21f6419d2 100644 --- a/src/Mod/Part/App/TopoShapeWirePy.xml +++ b/src/Mod/Part/App/TopoShapeWirePy.xml @@ -19,7 +19,12 @@ Offset the shape by a given ammount - + + + Add an edge to the wire + + + Make this and the given wire homogenous to have the same number of edges diff --git a/src/Mod/Part/App/TopoShapeWirePyImp.cpp b/src/Mod/Part/App/TopoShapeWirePyImp.cpp index 55bcb8b3e..839c75172 100644 --- a/src/Mod/Part/App/TopoShapeWirePyImp.cpp +++ b/src/Mod/Part/App/TopoShapeWirePyImp.cpp @@ -42,6 +42,7 @@ #include "BSplineCurvePy.h" #include "TopoShape.h" #include "TopoShapeShellPy.h" +#include "TopoShapeEdgePy.h" #include "TopoShapeWirePy.h" #include "TopoShapeWirePy.cpp" @@ -135,6 +136,39 @@ int TopoShapeWirePy::PyInit(PyObject* args, PyObject* /*kwd*/) return -1; } +PyObject* TopoShapeWirePy::add(PyObject *args) +{ + PyObject* edge; + if (!PyArg_ParseTuple(args, "O!",&(TopoShapePy::Type), &edge)) + return 0; + const TopoDS_Wire& w = TopoDS::Wire(getTopoShapePtr()->_Shape); + BRepBuilderAPI_MakeWire mkWire(w); + + const TopoDS_Shape& sh = static_cast(edge)->getTopoShapePtr()->_Shape; + if (sh.IsNull()) { + PyErr_SetString(PyExc_TypeError, "given shape is invalid"); + return 0; + } + if (sh.ShapeType() == TopAbs_EDGE) + mkWire.Add(TopoDS::Edge(sh)); + else if (sh.ShapeType() == TopAbs_WIRE) + mkWire.Add(TopoDS::Wire(sh)); + else { + PyErr_SetString(PyExc_TypeError, "shape is neither edge nor wire"); + return 0; + } + + try { + getTopoShapePtr()->_Shape = mkWire.Wire(); + Py_Return; + } + catch (Standard_Failure) { + Handle_Standard_Failure e = Standard_Failure::Caught(); + PyErr_SetString(PyExc_Exception, e->GetMessageString()); + return 0; + } +} + PyObject* TopoShapeWirePy::makeOffset(PyObject *args) { float dist;