work om WP Spline: detect closing similar to ArcTo and LineTo, remove "name" arg

This commit is contained in:
Matthias Rambausek 2021-12-22 16:21:24 +01:00
parent fdf26641dd
commit 6656181e2b

View File

@ -443,7 +443,7 @@ public:
return shared_from_this(); return shared_from_this();
} }
auto Spline(const std::vector<gp_Pnt2d> &points, bool periodic, double tol, const std::map<int, gp_Vec2d> &tangents, optional<string> name = nullopt) auto Spline(const std::vector<gp_Pnt2d> &points, bool periodic, double tol, const std::map<int, gp_Vec2d> &tangents)
{ {
gp_Pnt2d P1 = localpos.Location(); gp_Pnt2d P1 = localpos.Location();
gp_Pnt P13d = surf->Value(P1.X(), P1.Y()); gp_Pnt P13d = surf->Value(P1.X(), P1.Y());
@ -485,9 +485,10 @@ public:
builder.Perform(); builder.Perform();
auto curve2d = builder.Curve(); auto curve2d = builder.Curve();
const bool closing = periodic || PLast.Distance(startpnt) < 1e-10;
if (startvertex.IsNull()) if (startvertex.IsNull())
startvertex = lastvertex = BRepBuilderAPI_MakeVertex(P13d).Vertex(); startvertex = lastvertex = BRepBuilderAPI_MakeVertex(P13d).Vertex();
auto endv = periodic ? startvertex : BRepBuilderAPI_MakeVertex(PLast3d).Vertex(); auto endv = closing ? startvertex : BRepBuilderAPI_MakeVertex(PLast3d).Vertex();
//create 3d edge from 2d curve using surf //create 3d edge from 2d curve using surf
auto edge = BRepBuilderAPI_MakeEdge(curve2d, surf, lastvertex, endv).Edge(); auto edge = BRepBuilderAPI_MakeEdge(curve2d, surf, lastvertex, endv).Edge();
@ -509,7 +510,7 @@ public:
//update localpos.Direction() //update localpos.Direction()
Rotate(angle*180/M_PI); Rotate(angle*180/M_PI);
if (periodic) if (closing)
Finish(); Finish();
return shared_from_this(); return shared_from_this();
@ -2453,7 +2454,7 @@ degen_tol : double
.def("Line", [](WorkPlane&wp,double h,double v, optional<string> name) { return wp.Line(h,v,name); }, .def("Line", [](WorkPlane&wp,double h,double v, optional<string> name) { return wp.Line(h,v,name); },
py::arg("dx"), py::arg("dy"), py::arg("name")=nullopt) py::arg("dx"), py::arg("dy"), py::arg("name")=nullopt)
.def("Spline", &WorkPlane::Spline, py::arg("points"), py::arg("periodic")=false, py::arg("tol")=1e-8, .def("Spline", &WorkPlane::Spline, py::arg("points"), py::arg("periodic")=false, py::arg("tol")=1e-8,
py::arg("tangents")=std::map<int, gp_Vec2d>{}, py::arg("name")=nullopt, py::arg("tangents")=std::map<int, gp_Vec2d>{},
"draw spline starting from current position (implicitly added to given list of points), tangents can be specified for each point (0 refers to current position)") "draw spline starting from current position (implicitly added to given list of points), tangents can be specified for each point (0 refers to current position)")
.def("Rectangle", &WorkPlane::Rectangle, py::arg("l"), py::arg("w"), "draw rectangle, with current position as corner, use current direction") .def("Rectangle", &WorkPlane::Rectangle, py::arg("l"), py::arg("w"), "draw rectangle, with current position as corner, use current direction")
.def("RectangleC", &WorkPlane::RectangleCentered, py::arg("l"), py::arg("w"), "draw rectangle, with current position as center, use current direction") .def("RectangleC", &WorkPlane::RectangleCentered, py::arg("l"), py::arg("w"), "draw rectangle, with current position as center, use current direction")