[Part] Add methods to create an arc of the curve
This commit is contained in:
@@ -793,6 +793,11 @@ GeomBSplineCurve* GeomCurve::toNurbs(double first, double last) const
|
||||
return toBSpline(first, last);
|
||||
}
|
||||
|
||||
GeomCurve* GeomCurve::createArc([[maybe_unused]] double first, [[maybe_unused]] double last) const
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool GeomCurve::tangent(double u, gp_Dir& dir) const
|
||||
{
|
||||
Handle(Geom_Curve) curve = Handle(Geom_Curve)::DownCast(handle());
|
||||
@@ -1380,6 +1385,14 @@ Geometry *GeomBSplineCurve::copy() const
|
||||
}
|
||||
}
|
||||
|
||||
GeomCurve* GeomBSplineCurve::createArc(double first, double last) const
|
||||
{
|
||||
auto newBsp = static_cast<Part::GeomBSplineCurve*>(this->copy());
|
||||
newBsp->Trim(first, last);
|
||||
|
||||
return newBsp;
|
||||
}
|
||||
|
||||
int GeomBSplineCurve::countPoles() const
|
||||
{
|
||||
return myCurve->NbPoles();
|
||||
@@ -2270,6 +2283,14 @@ Geometry *GeomTrimmedCurve::copy() const
|
||||
return newCurve;
|
||||
}
|
||||
|
||||
GeomCurve* GeomTrimmedCurve::createArc(double first, double last) const
|
||||
{
|
||||
auto newArc = static_cast<Part::GeomTrimmedCurve*>(this->copy());
|
||||
newArc->setRange(first, last);
|
||||
|
||||
return newArc;
|
||||
}
|
||||
|
||||
// Persistence implementer
|
||||
unsigned int GeomTrimmedCurve::getMemSize () const
|
||||
{
|
||||
@@ -2592,6 +2613,14 @@ Geometry *GeomCircle::copy() const
|
||||
return newCirc;
|
||||
}
|
||||
|
||||
GeomCurve* GeomCircle::createArc(double first, double last) const
|
||||
{
|
||||
auto newArc = new GeomArcOfCircle(Handle(Geom_Circle)::DownCast(this->handle()->Copy()));
|
||||
newArc->setRange(first, last, false);
|
||||
|
||||
return newArc;
|
||||
}
|
||||
|
||||
GeomBSplineCurve* GeomCircle::toNurbs(double first, double last) const
|
||||
{
|
||||
// for an arc of circle use the generic method
|
||||
@@ -3030,6 +3059,14 @@ Geometry *GeomEllipse::copy() const
|
||||
return newEllipse;
|
||||
}
|
||||
|
||||
GeomCurve* GeomEllipse::createArc(double first, double last) const
|
||||
{
|
||||
auto newArc = new GeomArcOfEllipse(Handle(Geom_Ellipse)::DownCast(this->handle()->Copy()));
|
||||
newArc->setRange(first, last, false);
|
||||
|
||||
return newArc;
|
||||
}
|
||||
|
||||
GeomBSplineCurve* GeomEllipse::toNurbs(double first, double last) const
|
||||
{
|
||||
// for an arc of ellipse use the generic method
|
||||
|
||||
@@ -209,8 +209,15 @@ public:
|
||||
The default implementation does the same as \ref toBSpline.
|
||||
In sub-classes this can be reimplemented to create a real
|
||||
NURBS curve and not just an approximation.
|
||||
*/
|
||||
*/
|
||||
virtual GeomBSplineCurve* toNurbs(double first, double last) const;
|
||||
/*!
|
||||
* \brief getArc Generates a curve that is an arc of this curve between given parameters
|
||||
* \param first Parameter at start of arc
|
||||
* \param last Parameter at end of arc. This may be < `first` for periodic curves.
|
||||
* \return the new curve
|
||||
*/
|
||||
virtual GeomCurve* createArc(double first, double last) const;
|
||||
bool tangent(double u, gp_Dir&) const;
|
||||
bool tangent(double u, Base::Vector3d& dir) const;
|
||||
Base::Vector3d pointAtParameter(double u) const;
|
||||
@@ -294,6 +301,8 @@ public:
|
||||
~GeomBSplineCurve() override;
|
||||
Geometry *copy() const override;
|
||||
|
||||
GeomCurve* createArc(double first, double last) const override;
|
||||
|
||||
/*!
|
||||
* Interpolate a spline passing through the given points without tangency.
|
||||
*/
|
||||
@@ -430,6 +439,7 @@ public:
|
||||
~GeomTrimmedCurve() override;
|
||||
Geometry *copy() const override;
|
||||
|
||||
GeomCurve* createArc(double first, double last) const override;
|
||||
// Persistence implementer ---------------------
|
||||
unsigned int getMemSize() const override;
|
||||
void Save(Base::Writer &/*writer*/) const override;
|
||||
@@ -514,6 +524,7 @@ public:
|
||||
~GeomCircle() override;
|
||||
Geometry *copy() const override;
|
||||
|
||||
GeomCurve* createArc(double first, double last) const override;
|
||||
double getRadius() const;
|
||||
void setRadius(double Radius);
|
||||
|
||||
@@ -575,6 +586,7 @@ public:
|
||||
~GeomEllipse() override;
|
||||
Geometry *copy() const override;
|
||||
|
||||
GeomCurve* createArc(double first, double last) const override;
|
||||
double getMajorRadius() const;
|
||||
void setMajorRadius(double Radius);
|
||||
double getMinorRadius() const;
|
||||
|
||||
Reference in New Issue
Block a user