Part: Add method to split B-spline curve
Add the method GeomBSplineCurve::split() to split a B-Spline curve into two curves.
This commit is contained in:
@@ -327,6 +327,26 @@ PyObject* BSplineCurvePy::segment(PyObject* args)
|
||||
}
|
||||
}
|
||||
|
||||
PyObject* BSplineCurvePy::split(PyObject* args) const
|
||||
{
|
||||
double u {};
|
||||
double tolerance = 0.0;
|
||||
if (!PyArg_ParseTuple(args, "d|d", &u, &tolerance)) {
|
||||
return nullptr;
|
||||
}
|
||||
try {
|
||||
auto curves = getGeomBSplineCurvePtr()->split(u, tolerance);
|
||||
Py::Tuple tuple(2);
|
||||
tuple.setItem(0, Py::asObject(std::get<0>(curves)->getPyObject()));
|
||||
tuple.setItem(1, Py::asObject(std::get<1>(curves)->getPyObject()));
|
||||
return Py::new_reference_to(tuple);
|
||||
}
|
||||
catch (Standard_Failure& e) {
|
||||
PyErr_SetString(PartExceptionOCCError, e.GetMessageString());
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
PyObject* BSplineCurvePy::setKnot(PyObject* args)
|
||||
{
|
||||
int Index, M = -1;
|
||||
|
||||
@@ -1711,6 +1711,18 @@ bool GeomBSplineCurve::join(const Handle(Geom_BoundedCurve) & other)
|
||||
return true;
|
||||
}
|
||||
|
||||
std::tuple<GeomBSplineCurvePtr, GeomBSplineCurvePtr> GeomBSplineCurve::split(double u, double tol) const
|
||||
{
|
||||
Handle(Geom_BSplineCurve) curveL
|
||||
= GeomConvert::SplitBSplineCurve(myCurve, myCurve->FirstParameter(), u, tol, true);
|
||||
Handle(Geom_BSplineCurve) curveR
|
||||
= GeomConvert::SplitBSplineCurve(myCurve, u, myCurve->LastParameter(), tol, true);
|
||||
return std::make_tuple(
|
||||
std::make_shared<GeomBSplineCurve>(curveL),
|
||||
std::make_shared<GeomBSplineCurve>(curveR)
|
||||
);
|
||||
}
|
||||
|
||||
void GeomBSplineCurve::interpolate(const std::vector<gp_Pnt>& p, Standard_Boolean periodic)
|
||||
{
|
||||
if (p.size() < 2) {
|
||||
|
||||
@@ -311,6 +311,7 @@ private:
|
||||
Handle(Geom_BezierCurve) myCurve;
|
||||
};
|
||||
|
||||
using GeomBSplineCurvePtr = std::shared_ptr<GeomBSplineCurve>;
|
||||
class PartExport GeomBSplineCurve: public GeomBoundedCurve
|
||||
{
|
||||
TYPESYSTEM_HEADER_WITH_OVERRIDE();
|
||||
@@ -377,6 +378,7 @@ public:
|
||||
void setPeriodic() const;
|
||||
bool isRational() const;
|
||||
bool join(const Handle(Geom_BoundedCurve) &);
|
||||
std::tuple<GeomBSplineCurvePtr, GeomBSplineCurvePtr> split(double u, double tol) const;
|
||||
void makeC1Continuous(double, double);
|
||||
std::list<Geometry*> toBiArcs(double tolerance) const;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user