Part: GeomBSpline enable direct construction from parameters

This commit is contained in:
Abdullah Tahiri
2017-02-27 15:39:40 +01:00
committed by wmayer
parent 298e962d26
commit 6301b814ee
2 changed files with 36 additions and 1 deletions

View File

@@ -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;

View File

@@ -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;