Part: GeomBSpline enable direct construction from parameters
This commit is contained in:
@@ -620,6 +620,36 @@ GeomBSplineCurve::GeomBSplineCurve(const Handle_Geom_BSplineCurve& b)
|
||||
this->myCurve = Handle_Geom_BSplineCurve::DownCast(b->Copy());
|
||||
}
|
||||
|
||||
GeomBSplineCurve::GeomBSplineCurve( const std::vector<Base::Vector3d>& poles, const std::vector<double>& weights,
|
||||
const std::vector<double>& knots, const std::vector<int>& multiplicities,
|
||||
int degree, bool periodic, bool checkrational)
|
||||
{
|
||||
if (poles.size() != weights.size())
|
||||
throw Base::ValueError("poles and weights mismatch");
|
||||
|
||||
if (knots.size() != multiplicities.size())
|
||||
throw Base::ValueError("knots and multiplicities mismatch");
|
||||
|
||||
TColgp_Array1OfPnt p(1,poles.size());
|
||||
TColStd_Array1OfReal w(1,poles.size());
|
||||
TColStd_Array1OfReal k(1,knots.size());
|
||||
TColStd_Array1OfInteger m(1,knots.size());
|
||||
|
||||
for (int i = 1; i <= poles.size(); i++) {
|
||||
p.SetValue(i, gp_Pnt(poles[i-1].x,poles[i-1].y,poles[i-1].z));
|
||||
w.SetValue(i, weights[i-1]);
|
||||
}
|
||||
|
||||
for (int i = 1; i <= knots.size(); i++) {
|
||||
k.SetValue(i, knots[i-1]);
|
||||
m.SetValue(i, multiplicities[i-1]);
|
||||
}
|
||||
|
||||
this->myCurve = new Geom_BSplineCurve (p, w, k, m, degree, periodic?Standard_True:Standard_False, checkrational?Standard_True:Standard_False);
|
||||
|
||||
}
|
||||
|
||||
|
||||
GeomBSplineCurve::~GeomBSplineCurve()
|
||||
{
|
||||
}
|
||||
@@ -669,7 +699,7 @@ void GeomBSplineCurve::setPole(int index, const Base::Vector3d& pole, double wei
|
||||
void GeomBSplineCurve::setPoles(const std::vector<Base::Vector3d>& poles, const std::vector<double>& weights)
|
||||
{
|
||||
if (poles.size() != weights.size())
|
||||
throw Base::ValueError("knots and multiplicities mismatch");
|
||||
throw Base::ValueError("poles and weights mismatch");
|
||||
|
||||
Standard_Integer index=1;
|
||||
|
||||
|
||||
@@ -191,6 +191,11 @@ class PartExport GeomBSplineCurve : public GeomBoundedCurve
|
||||
public:
|
||||
GeomBSplineCurve();
|
||||
GeomBSplineCurve(const Handle_Geom_BSplineCurve&);
|
||||
|
||||
GeomBSplineCurve( const std::vector<Base::Vector3d>& poles, const std::vector<double>& weights,
|
||||
const std::vector<double>& knots, const std::vector<int>& multiplicities,
|
||||
int degree, bool periodic=false, bool checkrational = true);
|
||||
|
||||
virtual ~GeomBSplineCurve();
|
||||
virtual Geometry *clone(void) const;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user