For all issues regarding the Forums use, please, refer to the Forum Rules.

Our Solutions

Need professional assistance?
Consider our:

Support Offerings

 

Need to speed up your development?
Have a look at our:

Samples & Tools

 

Need some functionality extending standard OCCT capabilities?
Check out our:

Adv. Components

How to decrease a surface's degree?

SunHongLei's picture
Forums: 

How to decrease a surface's degree?
I know it can be done by appromaxtion,but I do not know how ?
any information will be appreciated?

Rabih's picture

Hi,

Handle_Geom_BSplineSurface nurbs_surface = new Geom_BSplineSurface(poles,uknots, vknots, umults, vmults, UDegree, VDegree,IsUPeriodic, IsVPeriodic);

nurbs_surface->IncreaseDegree(UDegree, VDegree);

Best regards
Rabih

SunHongLei's picture

I want to decrease degree not to increase degree ,but thanks your information all the same!

Rabih's picture

Hi,
you need

Handle_Geom_BSplineSurface nurbs_surface = new Geom_BSplineSurface(poles,uknots, vknots, umults, vmults, UDegree, VDegree,IsUPeriodic, IsVPeriodic);

degree = nurbs_surface->GetDegree(); // degree = degree + 1 or +2 ... +3
nbKnots = nurbs_surface->getNBKnot();

if degree = degree + 2 -> Index + 2 and insert new knots or Multiplicities

nurbs_surface->Setknot(Index, knots);// new Knots

Please read the help

//! Modifies this BSpline curve by assigning the value K

//! to the knot of index Index in the knots table. This is a

//! relatively local modification because K must be such that:

//! Knots(Index - 1)
//! The second syntax allows you also to increase the

//! multiplicity of the knot to M (but it is not possible to

//! decrease the multiplicity of the knot with this function).

//! Standard_ConstructionError if:

//! - K is not such that:

//! Knots(Index - 1)
//! - M is greater than the degree of this BSpline curve

//! or lower than the previous multiplicity of knot of

//! index Index in the knots table.

//! Standard_OutOfRange if Index is outside the bounds of the knots table.

// formel
nbKnots = (degree + 1) + nbControlPoint

Best regards
Rabih

SunHongLei's picture

Dear Rabih
Thanks for your kindly help! But I do not understand how your code decrease the surface's degree?
I mean I need decrease a surface'degree along U direction or along V direction,but how can I do it with the function:
Handle_Geom_BSplineSurface nurbs_surface = new
Geom_BSplineSurface(poles,uknots, vknots, umults, vmults, UDegree, VDegree,IsUPeriodic, IsVPeriodic);

Please help again ,Thanks very much!

Best regards
SunHongLei