C3D Toolkit  Kernel - 117982, Vision - 2.9.2.2

NURBS surface. More...

#include <surf_spline_surface.h>

+ Inheritance diagram for MbSplineSurface:
+ Collaboration diagram for MbSplineSurface:

Public Member Functions

 MbSplineSurface ()
 Empty constructor.
 
 MbSplineSurface (size_t uDeg, size_t vDeg, bool uCls, bool vCls, const Array2< MbCartPoint3D > &initPoints, const SArray< double > &initUKnots, const SArray< double > &initVKnots)
 Constructor of NURBS surface. More...
 
 MbSplineSurface (size_t uDeg, size_t vDeg, bool uCls, bool vCls, const Array2< MbCartPoint3D > &initPoints, const Array2< double > &initWeights, const SArray< double > &initUKnots, const SArray< double > &initVKnots)
 Constructor of NURBS surface. More...
 
 MbSplineSurface (const MbCartPoint3D &p1, const MbCartPoint3D &p2, const MbCartPoint3D &p3, const MbCartPoint3D &p4, size_t iDegreeU, size_t iDegreeV, size_t iCountU, size_t iCountV)
 Constructor of NURBS surface by four angles of counterclockwise traverse. More...
 
void Init (const MbSplineSurface &)
 The initialization by another surface.
 
bool Init (const Array2< MbCartPoint3D > &cPoints, const Array2< double > &pWeights)
 Initialization of filled surface. More...
 
bool Init (size_t iDegreeU, size_t iDegreeV, bool iClosedU, bool iClosedV)
 Initialization of filled surface. More...
 
bool InitParasolid (bool uCls, bool vCls, bool brational, size_t uDgr, size_t vDgr, ptrdiff_t uCnt, ptrdiff_t vCnt, const CcArray< double > &vcs, ptrdiff_t vcsCnt, const CcArray< ptrdiff_t > &uKMul, ptrdiff_t uKMulCnt, const CcArray< ptrdiff_t > &vKMul, ptrdiff_t vKMulCnt, const CcArray< double > &uKnt, ptrdiff_t uKntCnt, const CcArray< double > &vKnt, ptrdiff_t vKntCnt, double scl)
 Fill spline surface by parasolid data. More...
 
Common functions of geometric object.
MbeSpaceType IsA () const override
 Get the type of the object.
 
MbSpaceItemDuplicate (MbRegDuplicate *=nullptr) const override
 Create a copy of the object. More...
 
bool IsSame (const MbSpaceItem &other, double accuracy=LENGTH_EPSILON) const override
 Determine whether an object is equal. More...
 
bool SetEqual (const MbSpaceItem &) override
 Make objects equal if they are similar. More...
 
void GetProperties (MbProperties &) override
 Outstanding properties of the object. More...
 
void SetProperties (const MbProperties &) override
 Change the properties of an object. More...
 
void GetBasisItems (RPArray< MbSpaceItem > &) override
 Outstanding reference objects in a container sent.
 
void GetBasisPoints (MbControlData3D &) const override
 Get control points of object.
 
void SetBasisPoints (const MbControlData3D &) override
 Change the object by control points.
 
Functions for surface domain description.
double GetUMin () const override
 Get the minimum value of u.
 
double GetVMin () const override
 Get the minimum value of v.
 
double GetUMax () const override
 Get the maximum value of u.
 
double GetVMax () const override
 Get the maximum value of v.
 
bool IsUClosed () const override
 Determine whether a surface is closed in u-parameter direction. More...
 
bool IsVClosed () const override
 Determine whether a surface is closed in v-parameter direction. More...
 
bool IsUTouch () const override
 Determine whether a surface is closed in u-parameter direction regardless of the smoothness of the closure. More...
 
bool IsVTouch () const override
 Determine whether a surface is closed in v-parameter direction regardless of the smoothness of the closure. More...
 
bool IsUPeriodic () const override
 Determine whether a surface is closed in u-parameter direction. More...
 
bool IsVPeriodic () const override
 Determine whether a surface is closed in v-parameter direction. More...
 
size_t GetUCount () const override
 The number of splittings by u-parameter for a check of events.
 
size_t GetVCount () const override
 The number of splittings by v-parameter for a check of events.
 
bool GetPoleUMin () const override
 Whether a pole exists on parametric region boundary.
 
bool GetPoleUMax () const override
 Whether a pole exists on parametric region boundary.
 
bool GetPoleVMin () const override
 Whether a pole exists on parametric region boundary.
 
bool GetPoleVMax () const override
 Whether a pole exists on parametric region boundary.
 
bool IsPole (double u, double v, double paramPrecision=PARAM_PRECISION) const override
 Whether the point is a pole.
 
Functions for working at surface domain

Functions PointOn, Derive... correct parameters when getting out of rectangular domain bounds.

void PointOn (double &u, double &v, MbCartPoint3D &) const override
 Calculate a point on the surface. More...
 
void DeriveU (double &u, double &v, MbVector3D &) const override
 Calculate first derivative with respect to u.
 
void DeriveV (double &u, double &v, MbVector3D &) const override
 Calculate first derivative with respect to v.
 
void DeriveUU (double &u, double &v, MbVector3D &) const override
 Calculate second derivative with respect to u.
 
void DeriveVV (double &u, double &v, MbVector3D &) const override
 Calculate second derivative with respect to v.
 
void DeriveUV (double &u, double &v, MbVector3D &) const override
 Calculate second derivative.
 
void DeriveUUU (double &u, double &v, MbVector3D &) const override
 Calculate third derivative.
 
void DeriveUUV (double &u, double &v, MbVector3D &) const override
 Calculate third derivative.
 
void DeriveUVV (double &u, double &v, MbVector3D &) const override
 Calculate third derivative.
 
void DeriveVVV (double &u, double &v, MbVector3D &) const override
 Calculate third derivative.
 
void Normal (double &u, double &v, MbVector3D &) const override
 Calculate normal.
 
void Explore (double &u, double &v, MbCartPoint3D &pnt, MbVector3D &uDer, MbVector3D &vDer) const override
 Calculate point and first derivatives with respect to u and with respect to v. More...
 
Functions for working inside and outside the surface domain.

functions _PointOn, _Derive... of surfaces don't correct parameters when getting out of rectangular domain bounds. Outside the limits of parametric region a surface is extended along a tangent.

void _PointOn (double u, double v, MbCartPoint3D &) const override
 Calculate a point on the surface. More...
 
void _DeriveU (double u, double v, MbVector3D &) const override
 Calculate first derivative with respect to u on extended surface.
 
void _DeriveV (double u, double v, MbVector3D &) const override
 Calculate first derivative with respect to v on extended surface.
 
void _DeriveUU (double u, double v, MbVector3D &) const override
 Calculate second derivative with respect to u on extended surface.
 
void _DeriveVV (double u, double v, MbVector3D &) const override
 Calculate second derivative with respect to v on extended surface.
 
void _DeriveUV (double u, double v, MbVector3D &) const override
 Calculate second derivative on extended surface.
 
void _DeriveUUU (double u, double v, MbVector3D &) const override
 Calculate third derivative on extended surface.
 
void _DeriveUUV (double u, double v, MbVector3D &) const override
 Calculate third derivative on extended surface.
 
void _DeriveUVV (double u, double v, MbVector3D &) const override
 Calculate third derivative on extended surface.
 
void _DeriveVVV (double u, double v, MbVector3D &) const override
 Calculate third derivative on extended surface.
 
void _Normal (double u, double v, MbVector3D &) const override
 Calculate a normal on extended surface.
 
Functions for get of the group of data inside and outside the surface's domain of parameters.
void Explore (double &u, double &v, bool ext, MbCartPoint3D &pnt, MbVector3D &uDer, MbVector3D &vDer, MbVector3D *uuDer, MbVector3D *vvDer, MbVector3D *uvDer, MbVector3D *nor) const override
 Calculate point and derivatives of object for given parameters. More...
 
Functions of moving on surface
double StepU (double u, double v, double sag) const override
 Calculate parameter step. More...
 
double StepV (double u, double v, double sag) const override
 Calculate parameter step. More...
 
double DeviationStepU (double u, double v, double sag) const override
 Calculate parameter step. More...
 
double DeviationStepV (double u, double v, double sag) const override
 Calculate parameter step. More...
 
- Public Member Functions inherited from MbPolySurface
MbeSpaceType Type () const override
 Get the group object type.
 
void Transform (const MbMatrix3D &, MbRegTransform *=nullptr) override
 Convert the object according to the matrix. More...
 
void Move (const MbVector3D &, MbRegTransform *=nullptr) override
 Move an object along a vector. More...
 
void Rotate (const MbAxis3D &, double angle, MbRegTransform *=nullptr) override
 Rotate an object around an axis at a given angle. More...
 
size_t GetPointsLines () const
 Return rows count in points matrix.
 
size_t GetPointsColumns () const
 Return columns count in points matrix.
 
void GetPoint (size_t i, size_t j, MbCartPoint3D &pnt) const
 Get the point located at row i and column j. More...
 
void SetPoint (size_t i, size_t j, const MbCartPoint3D &pnt)
 Change the point located at row i and column j. More...
 
void MovePoint (size_t i, size_t j, const MbVector3D &v)
 Translate the point located at row i and column j by the given vector. More...
 
size_t GetPointsUCount () const
 Get count of columns.
 
size_t GetPointsVCount () const
 Get count of rows.
 
bool GetPoints (Array2< MbCartPoint3D > &pnts) const
 Fill points matrix. More...
 
void GetLineSegments (RPArray< MbCurve3D > &segments) const
 Get the array of segments. More...
 
- Public Member Functions inherited from MbSurface
virtual ~MbSurface ()
 Destructor.
 
virtual void Accept (Visitor &visitor)
 Implementation of a function initializing a visit of an object.
 
MbeSpaceType Type () const override
 Get the group object type.
 
MbeSpaceType Family () const override
 Get family of objects.
 
double DistanceToPoint (const MbCartPoint3D &) const override
 Determine the distance to the point. More...
 
void AddYourGabaritTo (MbCube &c) const override
 Expand sent bounding box (a.k.a. gabarit), so that it included the object. More...
 
void Refresh () override
 Translate all the time (mutable) data objects in an inconsistent (initial) state.
 
virtual void PrepareIntegralData (const bool forced) const
 Calculate temporary (mutable) data of an object. More...
 
void CalculateMesh (const MbStepData &stepData, const MbFormNote &note, MbMesh &mesh) const override
 Build polygonal copy mesh. More...
 
MbPropertyCreateProperty (MbePrompt name) const override
 Create your own property with the name.
 
void GetBasisPoints (MbControlData3D &) const override
 Get control points of object.
 
void SetBasisPoints (const MbControlData3D &) override
 Change the object by control points.
 
size_t size () const
 Number of objects if object is interpreted as vector of objects.
 
const MbSurfaceoperator[] (size_t) const
 An access operator.
 
virtual double GetUPeriod () const
 Return period for smoothly closed surface or 0.
 
virtual double GetVPeriod () const
 Return period for smoothly closed surface or 0.
 
virtual double GetPeriod (ptrdiff_t i) const
 Return period. More...
 
virtual size_t Periodicity () const
 Determine periodicity. More...
 
bool IsPole (const MbCartPoint &uv, double paramPrecision=PARAM_PRECISION) const
 Whether the point is a pole.
 
virtual void TangentU (double &u, double &v, MbVector3D &) const
 Calculate tangent vector in u.
 
virtual void TangentV (double &u, double &v, MbVector3D &) const
 Calculate tangent vector in v.
 
virtual void NormalU (double &u, double &v, MbVector3D &) const
 Calculate derivative of normal with respect to U.
 
virtual void NormalV (double &u, double &v, MbVector3D &) const
 Calculate derivative of normal with respect to V.
 
virtual void _TangentU (double u, double v, MbVector3D &) const
 Calculate tangent vector in u direction on extended surface.
 
virtual void _TangentV (double u, double v, MbVector3D &) const
 Calculate tangent vector in v direction on extended surface.
 
virtual void _NormalU (double u, double v, MbVector3D &) const
 Calculate derivative of normal vector on extended surface.
 
virtual void _NormalV (double u, double v, MbVector3D &) const
 Calculate derivative of normal vector on extended surface.
 
virtual void _NormalUU (double u, double v, MbVector3D &) const
 Calculate second derivative of normal vector on extended surface.
 
virtual void _NormalUV (double u, double v, MbVector3D &) const
 Calculate second derivative of normal vector on extended surface.
 
virtual void _NormalVV (double u, double v, MbVector3D &) const
 Calculate second derivative of normal vector on extended surface.
 
virtual void _NormalD (double u, double v, double du, double dv, MbVector3D &der) const
 Calculate derivative of normal vector at the point with the given parameters u and v along the line with the given direction (du,dv).
 
virtual void _NormalDD (double u, double v, double du, double dv, MbVector3D &der) const
 Calculate second derivative of normal vector at the point with the given parameters u and v along the line with the given direction (du,dv).
 
virtual void _PointNormal (double u, double v, MbCartPoint3D &pnt, MbVector3D &deru, MbVector3D &derv, MbVector3D &norm, MbVector3D &noru, MbVector3D &norv, MbVector3D &deruu, MbVector3D &dervv, MbVector3D &deruv) const
 Calculate all derivatives at point. More...
 
virtual double MetricStepU (double u, double v, double length) const
 Calculate parameter step. More...
 
virtual double MetricStepV (double u, double v, double length) const
 Calculate parameter step. More...
 
double SurfaceStep (const double &u, const double &v, bool alongU, const MbStepData &stepData) const
 Calculate parameter step. More...
 
virtual const MbSurfaceGetSurface () const
 Get itself (it is overloaded only in CurveBoundedSurface).
 
virtual const MbSurfaceGetBasisSurface () const
 Get the base surface if exists or itself.
 
virtual MbSurfaceSetSurface ()
 Get itself (it is overloaded only in CurveBoundedSurface).
 
virtual MbSurfaceSetBasisSurface ()
 Get the base surface if exists or itself.
 
virtual void GetLimitPoint (ptrdiff_t number, MbCartPoint3D &pnt) const
 Calculate the boundary point. More...
 
virtual void GetLimitPoint (ptrdiff_t number, MbCartPoint &pnt) const
 Calculate the boundary two-dimensional point. More...
 
MbCartPoint3D GetLimitPoint (ptrdiff_t number) const
 Calculate the boundary point. More...
 
virtual double CurvatureU (double u, double v) const
 Calculate line curvature along the direction of u. More...
 
virtual double CurvatureV (double u, double v) const
 Calculate line curvature along the direction of v. More...
 
double NormalCurvatureU (double u, double v) const
 Calculate a normal curvature of line along the direction of u. More...
 
double NormalCurvatureV (double u, double v) const
 Calculate a normal curvature of line along the direction of v. More...
 
double NormalCurvature (double u, double v, double du, double dv) const
 Calculate a normal curvature of surface. More...
 
bool MeanGaussCurvature (double u, double v, double &mean, double &gauss) const
 Calculate the mean and the Gaussian curvature.
More...
 
bool MainCurvatures (double u, double v, double &c1, double &c2, double &du, double &dv) const
 Calculate the mean and the Gaussian curvature.
More...
 
virtual bool IsSameBase (const MbSurface &) const
 Whether a base surface is a copy of the base surface of the given object.
 
virtual bool GetCentre (MbCartPoint3D &c) const
 Give the center of sphere surface.
 
virtual bool GetCenterLines (std::vector< MbCurve3D * > &clCurves) const
 Get center lines of a surface.
 
virtual void ChangeCarrier (const MbSpaceItem &item, MbSpaceItem &init)
 Changing of carrier. More...
 
virtual bool ChangeCarrierBorne (const MbSurface &item, MbSurface &init, const MbMatrix &matr)
 Changing of carrier elements. More...
 
virtual bool IsSpinePeriodic () const
 Periodicity of the guide. More...
 
MbSplineSurfaceNurbsSurface (bool bmatch=false) const
 Construct a NURBS copy of a surface. More...
 
bool NurbsParam (const MbNurbsParameters &tParam, bool uParam, double op1, double op2, bool &isClosedNurbs, double &epsilon, SArray< double > &params) const
 Prepare parameters for the transformation to NURBS surface. More...
 
void CheckApproxPointParamsOpen (bool isU, double par, size_t degree, size_t pCount, SArray< double > &tList, SArray< double > &aKnots) const
 Chose points for approximation along the parameter. More...
 
void CheckApproxPointParamsClosed (bool isU, double par, size_t degree, size_t pCount, SArray< double > &tList, SArray< double > &aKnots) const
 Chose points for approximation along the parameter. More...
 
virtual MbSurfaceOffset (double d, bool same) const
 Create an offset surface. More...
 
virtual MbCurve3DCurveUV (const MbLineSegment &segm, bool bApprox=true) const
 Construct spatial copy of line by parametric line. More...
 
virtual MbeItemLocation PointRelative (const MbCartPoint3D &pnt, double eps=ANGLE_REGION) const
 Get point location relative to the surface. More...
 
virtual MbeItemLocation PointClassification (const MbCartPoint &pnt, bool ignoreClosed=false) const
 A point is located inside the region on a surface. More...
 
virtual double DistanceToBorder (const MbCartPoint &point, double &epsilon) const
 Calculate the parametric distance to the nearest boundary. More...
 
virtual size_t CurveClassification (const MbCurve &curve, SArray< double > &tcurv, SArray< MbVector > &dir) const
 Determine points of intersections between the curve and the surface contours. More...
 
size_t SurfaceBorderIntersection (const MbCurve &curve, SArray< double > &tcurv, SArray< MbVector > &dir) const
 Determine points of intersections between the curve and the surface contours. More...
 
virtual MbeNewtonResult PointProjectionNewton (const MbCartPoint3D &p, size_t iterLimit, double &u, double &v, bool ext) const
 Finding of point projection on surface. For internal use only.
 
virtual MbeNewtonResult DirectPointProjectionNewton (const MbCartPoint3D &p, const MbVector3D &vect, size_t iterLimit, double &u, double &v, double &w, bool ext) const
 Finding of point projections to the surface in direction of the vector. For internal use only.
 
virtual bool NearDirectPointProjection (const MbCartPoint3D &pnt, const MbVector3D &vect, double &u, double &v, bool ext, MbRect2D *uvRange=nullptr, bool onlyPositiveDirection=false) const
 Find the nearest point projection to the surface in the vector direction. More...
 
virtual MbeNewtonResult CurveIntersectNewton (const MbCurve3D &curv1, double funcEpsilon, size_t iterLimit, double &u0, double &v0, double &t1, bool ext0, bool ext1) const
 Solution of equation system for determination of intersections between a surface and a curve. For internal use only.
 
virtual MbeNewtonResult CurveTangentNewton (const MbCurve3D &curv1, double funcEpsilon, size_t iterLimit, double &u0, double &v0, double &t1, bool ext0, bool ext1) const
 Solution of equation system for determination of tangency between a surface and a curve. For internal use only.
 
virtual void CurveIntersection (const MbCurve3D &curv, SArray< MbCartPoint > &uv, SArray< double > &tt, bool ext0, bool ext, bool touchInclude=false) const
 Determine points of intersection between a surface and a curve. More...
 
virtual MbeNewtonResult SurfaceIntersectNewton (const MbSurface &surf1, MbeParamDir switchPar, double funcEpsilon, size_t iterLimit, double &u0, double &v0, double &u1, double &v1, bool ext0, bool ext1) const
 Solution of equation system for determination of surfaces intersections. For internal use only.
 
virtual MbeNewtonResult SurfaceTangentNewton (const MbSurface &surf1, MbeParamDir switchPar, double funcEpsilon, size_t iterLimit, double &u0, double &v0, double &u1, double &v1, bool ext0, bool ext1) const
 Solution of equation system for determination of surfaces tangency. For internal use only.
 
virtual MbeNewtonResult SilhouetteNewton (const MbVector3D &eye, bool perspective, const MbAxis3D *axis, MbeParamDir switchPar, double funcEpsilon, size_t iterLimit, double &u, double &v, bool ext) const
 Solution of equation system for determination of surface silhouette points. For internal use only.

 
virtual bool ProjectCurveOnSimilarSurface (const MbCurve3D &spaceCurve, const MbCurve &curve, const MbSurface &surfNew, MbCurve *&curveNew) const
 Construction of projection of a surface curve on coincident surface. More...
 
bool ProjectCurveOnSimilarSurface (const MbCurve3D &spaceCurve, const MbCurve &curve, const MbSurface &surfNew, SPtr< MbCurve > &curveNew) const
 Construction of projection of a surface curve on coincident surface. More...
 
virtual ThreeStates Salient () const
 Determine whether the surface is convex. More...
 
virtual double DistanceToCurve (const MbCurve3D &curve, double &u, double &v, double &t, bool tCalc=false) const
 Calculate the nearest distance to a curve. More...
 
virtual double DistanceToSurface (const MbSurface &surf1, double &u0, double &v0, double &u1, double &v1) const
 Calculate the nearest distance to a surface. More...
 
virtual bool CreateNormalPlacements (const MbVector3D &axisZ, double angle, SArray< MbPlacement3D > &places, VERSION version=Math::DefaultMathVersion()) const
 Construct normal placements of constructive planes.

 
virtual bool CreateTangentPlacements (const MbVector3D &axisZ, SArray< MbPlacement3D > &places) const
 Construct tangent placements of constructive planes.
 
MbeNewtonResult PlacementNewton (const MbVector3D &vec, double angle, MbeParamDir switchPar, size_t iterLimit, double &u, double &v) const
 Construct tangent placements of constructive planes. For internal use only.
 
bool CreateVconstPlacements (const MbVector3D &axisZ, double angle, bool normalPlace, SArray< MbPlacement3D > &places) const
 Construct the normal or tangent placements on v-lines.
 
bool CreateUconstPlacements (const MbVector3D &axisZ, double angle, bool normalPlace, SArray< MbPlacement3D > &places) const
 Construct the normal or tangent placements on u-lines.
 
virtual double ParamArea () const
 Calculate the area of parameters domain.
 
virtual size_t GetUPairs (double v, SArray< double > &u) const
 Calculate U-pairs by V. More...
 
virtual size_t GetVPairs (double u, SArray< double > &v) const
 Calculate V-pairs by U. More...
 
MbeNewtonResult IsoclinalNewton (const MbVector3D &dir, size_t iterLimit, double &u, double &v) const
 Determination of parameters of a surface isocline point. For internal use only.
 
virtual void GetIsoclinal (const MbVector3D &nor, SArray< MbCartPoint > &uv) const
 Find all isoclines of a surface. More...
 
virtual void CalculateGabarit (MbCube &cube) const
 Calculate bounding box of surface. It is recommended to use GetGabarit.
 
void CalculateLocalGabarit (const MbMatrix3D &into, MbCube &cube) const override
 Calculate bounding box in the local coordinate system.
 
const MbCubeGetGabarit () const
 Calculate bounding box of surface.
 
const MbCubeCube () const
 Return saved bounding box. It should be empty. It is recommended to use GetGabarit.
 
void SetDirtyGabarit () const
 Make the bounding box empty. For internal use only.
 
void CopyGabarit (const MbSurface &s, const MbVector3D *to=nullptr)
 Copy the bounding box from the copy. More...
 
double GetGabDiagonal () const
 Calculate the diagonal of the bounding box.
 
void CalculateRect (const MbPlacement3D &place, MbRect &rect) const
 Calculate the rectangular bounding box of a surface in the given plane. More...
 
virtual MbContourMakeContour (bool sense) const
 Return the bounding two-dimensional contour. More...
 
virtual MbCurveMakeSegment (size_t i, bool sense) const
 Return a segment of the bounding two-dimensional contour. More...
 
MbCurveMakeCurve (size_t number1, size_t number2) const
 Return a segment of the bounding two-dimensional contour. More...
 
bool SetLimit (const MbRect &)
 Set surface limits. For internal use only.
 
virtual void SetExtendedParamRegion (double u1, double v1, double u2, double v2)
 Set extended limits of surface. For internal use only.
 
virtual void IncludePoint (double u, double v)
 Include a point into domain. For internal use only.
 
double GetMaxParamDeltaU () const
 Get the maximum increment of U-parameter.
 
double GetMaxParamDeltaV () const
 Get the maximum increment of V-parameter.
 
virtual double GetParamDelta () const
 Get the maximum increment of parameter.
 
virtual double GetParamPrice () const
 Get the minimum distinguishable value of parameter.
 
virtual double GetUParamToUnit () const
 Get increment of u-parameter, corresponding to the unit length in space.
 
virtual double GetVParamToUnit () const
 Get increment of v-parameter, corresponding to the unit length in space.
 
virtual double GetUParamToUnit (double u, double v) const
 Get increment of u-parameter, corresponding to the unit length in space.
 
virtual double GetVParamToUnit (double u, double v) const
 Get increment of v-parameter, corresponding to the unit length in space.
 
double GetUParamToUnit (const MbCartPoint &uv) const
 Get increment of u-parameter, corresponding to the unit length in space.
 
double GetVParamToUnit (const MbCartPoint &uv) const
 Get increment of v-parameter, corresponding to the unit length in space.
 
virtual void GetParamsToUnit (double u, double v, double &uParam, double &vParam) const
 Get increment of parameters, corresponding to the unit length in space.
 
double GetUEpsilon () const
 Get the minimum distinguishable value of u-parameter. It corresponds to the length Math::metricEpsilon in space.
 
double GetVEpsilon () const
 Get the minimum distinguishable value of v-parameter. It corresponds to the length Math::metricEpsilon in space.
 
double GetUEpsilon (double u, double v) const
 Get the minimum distinguishable value of u-parameter. It corresponds to the length Math::metricEpsilon in space.
 
double GetVEpsilon (double u, double v) const
 Get the minimum distinguishable value of v-parameter. It corresponds to the length Math::metricEpsilon in space.
 
double GetURegion () const
 Get the minimum distinguishable value of u-parameter. It corresponds to the length Math::metricRegion in space.
 
double GetVRegion () const
 Get the minimum distinguishable value of v-parameter. It corresponds to the length Math::metricRegion in space.
 
double GetURegion (double u, double v) const
 Get the minimum distinguishable value of u-parameter. It corresponds to the length Math::metricRegion in space.
 
double GetVRegion (double u, double v) const
 Get the minimum distinguishable value of v-parameter. It corresponds to the length Math::metricRegion in space.
 
void CalculatePolygon (double minPar, double maxPar, double constPar, MbeParamDir dir, const MbStepData &stepData, MbPolygon3D &polygon) const
 Calculate polygon by u or v. More...
 
virtual void CalculateSurfaceWire (const MbStepData &stepData, size_t beg, MbMesh &mesh, size_t uMeshCount=c3d::WIRE_MAX, size_t vMeshCount=c3d::WIRE_MAX) const
 Calculate mesh. More...
 
void AddTesselation (const MbStepData &stepData, MbeParamDir dir, double u1, double u2, double v1, double v2, SArray< double > &uu, SArray< double > &vv) const
 Determine splitting of the surface parametric region according to direction. More...
 
virtual void CalculateSurfaceGrid (const MbStepData &stepData, bool sense, MbGrid &grid) const
 Approximate a surface by triangular plates. More...
 
virtual bool IsRectangular () const
 Determine whether derivatives with respect to u and v are orthogonal.
 
virtual bool IsShift (const MbSpaceItem &obj, MbVector3D &dir, bool &isSame, double accuracy=LENGTH_EPSILON) const
 Determine whether the object is a translation. More...
 
bool GetPlacement (MbPlacement3D *place, bool exact=false) const
 Get a local coordinate system of planar surface (or only a possibility of getting it).
 
bool GetPlanePlacement (MbPlacement3D &place) const
 Get a local coordinate system if a surface is a plane.
 
bool GetControlPlacement (MbPlacement3D &place, bool sameSense=true) const
 Construct a local coordinate system of a surface with origin at the middle point of base surface parametric limits. More...
 
bool OrientPlacement (MbPlacement3D &place, bool normalSense=true) const
 Orient an axis X of a placement along the line of its intersection with surface.
 
bool IsPointOn (const MbCartPoint3D &, double eps=METRIC_PRECISION) const
 Determine whether a point is located on a surface or not.
 
void PointOn (MbCartPoint &uv, MbCartPoint3D &p) const
 Calculate the point on a surface inside the domain of surface.
 
void _PointOn (const MbCartPoint &uv, MbCartPoint3D &p) const
 Calculate a point on a surface extension.
 
void Normal (MbCartPoint &uv, MbVector3D &v) const
 Calculate the normal vector to a surface inside the domain of surface.
 
bool GetMatrix (double xMin, double xMax, double yMin, double yMax, MbMatrix &matr) const
 Find a matrix of transformation for the curves on a surface when the parameterization is changed. More...
 
double GetUMid () const
 The middle value of u.
 
double GetVMid () const
 The middle value of v.
 
double GetURange () const
 Parametric length by u.
 
double GetVRange () const
 Parametric length by v.
 
void GetRect (MbRect &r) const
 Get parametric bounding box.
 
void GetRect (MbRect2D &r) const
 Get parametric bounding box.
 
- Public Member Functions inherited from MbSpaceItem
virtual ~MbSpaceItem ()
 Destructor.
 
void PrepareWrite () const
 Register object. More...
 
MbeRefType RefType () const override
 Get a registration type (for copying, duplication).
 
bool IsFamilyRegistrable () const override
 Whether the object belongs to a registrable family.
 
virtual bool IsSimilar (const MbSpaceItem &item) const
 Determine whether an object is similar. More...
 
void CalculateWire (const MbStepData &stepData, MbMesh &mesh) const
 
void CalculateWire (double sag, MbMesh &mesh) const
 
- Public Member Functions inherited from TapeBase
 TapeBase (RegistrableRec regs=noRegistrable)
 Constructor.
 
 TapeBase (const TapeBase &)
 Copy-constructor.
 
virtual ~TapeBase ()
 Destructor.
 
RegistrableRec GetRegistrable () const
 Whether the stream class is registrable.
 
void SetRegistrable (RegistrableRec regs=registrable) const
 Set the state of registration of the stream class.
 
virtual const char * GetPureName (const VersionContainer &) const
 Get the class name.
 
- Public Member Functions inherited from MbRefItem
refcount_t GetUseCount () const
 Get count of references (get count of owners of an object).
 
refcount_t AddRef () const
 Increase count of references by one.
 
refcount_t DecRef () const
 Decrease count of references by one.
 
refcount_t Release () const
 Decrease count of references by one and if count of references became zero, then remove itself.
 
- Public Member Functions inherited from MbNestSyncItem
void Lock () const
 Switch lock on (locking happens only in parallel region).
 
void Unlock () const
 Switch lock off if locking has been set.
 
CommonRecursiveMutexGetLock () const
 Get a pointer to the mutex object. Return nullptr if no parallelism. For use in ScopedLock.
 

Protected Member Functions

 MbSplineSurface (const MbSplineSurface &)
 Copy-constructor.
 
- Protected Member Functions inherited from MbPolySurface
 MbPolySurface ()
 Empty constructor.
 
 MbPolySurface (Array2< MbCartPoint3D > &vert, bool ucl, bool vcl)
 Constructor of surface. More...
 
 MbPolySurface (size_t nu, size_t nv, const SArray< MbCartPoint3D > &vert, bool ucl, bool vcl)
 Constructor of surface. More...
 
 MbPolySurface (const MbPolySurface &)
 Copy-constructor.
 
- Protected Member Functions inherited from MbSurface
 MbSurface ()
 Constructor.
 
 MbSurface (const MbSurface &)
 Copy-constructor.
 
void MoveGabarit (const MbVector3D &v)
 Move bounding box.
 
void NormalCalculation (const MbVector3D &uDer, const MbVector3D &vDer, double u, double v, bool ext, MbVector3D &nor) const
 Normal calculation by derivatives uDer and vDer on point with parameters u, v.
 
double StepAlong (double u, double v, double sag, bool alongU, double stepMinCoeff, const MbVector3D &der, const MbVector3D &sec) const
 Step calculation by sag.
 
double DeviationStepAlong (double u, double v, double angle, bool alongU, const MbVector3D &der, const MbVector3D &sec) const
 Step calculation by normal deviation.
 
- Protected Member Functions inherited from MbSpaceItem
 MbSpaceItem ()
 Default constructor.
 
- Protected Member Functions inherited from MbRefItem
 MbRefItem ()
 Constructor without parameters.
 

Common functions of surface.

void SetUClosed (bool cls) override
 Set the attribute of closedness in direction of u.
 
void SetVClosed (bool cls) override
 Set the attribute of closedness in direction of v.
 
MbSplineSurfaceNurbsSurface (double umin, double umax, double vmin, double vmax, bool bmatch=false) const override
 Construct a NURBS copy of trimmed surface. More...
 
MbSurfaceNurbsSurface (const MbNurbsParameters &uParam, const MbNurbsParameters &vParam) const override
 Construct a NURBS copy of a surface. More...
 
MbCurve3DCurveU (double v, MbRect1D *pRgn, bool bApprox=true) const override
 Construct spatial copy of the line v = const. More...
 
MbCurve3DCurveV (double u, MbRect1D *pRgn, bool bApprox=true) const override
 Construct spatial copy of the line u = const.
More...
 
void Refresh () override
 Translate all the time (mutable) data objects in an inconsistent (initial) state.
 
void Rebuild () override
 Rebuild a surface.
 
void GetTesselation (const MbStepData &stepData, double u1, double u2, double v1, double v2, SArray< double > &uu, SArray< double > &vv) const override
 Determine a splitting of parametric region of a surface by verticals and horizontals. More...
 
bool SetLimit (double u1, double v1, double u2, double v2) override
 Set surface limits. For internal use only.
 
void CheckSurfParams (double &u, double &v) const override
 Check parameters. Analogue of the global function _CheckParams, optimized for caches usage. More...
 
MbSplineSurfaceTrimmed (double uBeg, double uEnd, double vBeg, double vEnd) const
 Construct a trimmed surface. More...
 
bool IsPlanar (double accuracy=METRIC_EPSILON) const override
 Whether a surface is planar.
 
bool NearPointProjection (const MbCartPoint3D &pnt, double &u, double &v, bool ext, MbRect2D *uvRange=nullptr) const override
 Find the projection of a point onto the surface. More...
 
void DirectPointProjection (const MbCartPoint3D &pnt, const MbVector3D &vect, SArray< MbCartPoint > &uv, bool ext, MbRect2D *uvRange=nullptr) const override
 Find all a point projection onto the surface along a vector in either of two directions. More...
 
bool IsKnotsTheSame (const MbSplineSurface &e, bool sameDir, double precision) const
 
bool IsPointsTheSame (const MbSplineSurface &e, bool sameDir, bool uBeg, bool vBeg, double precision) const
 
bool IsSimilarToSurface (const MbSurface &surf, VERSION version, double precision=METRIC_PRECISION) const override
 Define whether the surfaces are similar for merge. More...
 
bool IsSpecialSimilarToSurface (const MbSurface &surf, VERSION version, double precision=METRIC_PRECISION) const override
 Whether the surfaces are similar to merge. Special case. For internal use only.
 
bool GetMatrixToSurface (const MbSurface &surf, MbMatrix &matr, VERSION version, double precision=METRIC_PRECISION) const override
 Get two-dimensional matrix of transformation from its parametric region to the parametric region of 'surf'. More...
 
void ChangeWeight (ptrdiff_t i, ptrdiff_t j, double w)
 Changing of one point weight. More...
 
bool UDecompose ()
 Transform NURBS surface into surface whose number of control points is equal to the order of the surface in the first coordinate.
 
bool VDecompose ()
 Transform NURBS surface into surface whose number of control points is equal to the order of the surface in the second coordinate.
 
bool RaiseUDegree (size_t newDegree, double relEps)
 Increase order of surface by first coordinate without changing its geometric shape and parametrization. More...
 
bool RaiseVDegree (size_t newDegree, double relEps)
 Increase order of surface by second coordinate without changing its geometric shape and parametrization. More...
 
void SetDegree (bool isU, ptrdiff_t order)
 Changing of surface order. More...
 
MbMatrix SetLimitParam (double pmin, double pmax, double qmin, double qmax)
 Set the range of parameters. More...
 
size_t GetUDegree () const
 Get the order of B-spline by u.
 
size_t GetVDegree () const
 Get the order of B-spline by v.
 
size_t GetWeightsLines () const
 Get rows count in weights matrix.
 
size_t GetWeightsColumns () const
 Get columns count in weights matrix.
 
double GetWeight (ptrdiff_t i, ptrdiff_t j) const
 Get vertex weight. More...
 
void GetWeights (Array2< double > &wts) const override
 Get the matrix of vertices weights. More...
 
size_t GetKnotsCount (bool isU) const
 Get the number of elements in a knot vector. More...
 
void GetKnots (bool isU, SArray< double > &knots) const override
 Get a knots vector by the chosen parameter. More...
 
double GetKnot (bool isU, size_t i) const
 Get the value of one knot. More...
 
void InsertUKnotsInRegion (ptrdiff_t idBegin, ptrdiff_t num=1) override
 Insertion of a row after the row with the index idBegin without changing of a surface by u. More...
 
void InsertUKnots (double &newKnot, ptrdiff_t multiplicity)
 Insertion of a row with the value of the knot newKnot without changing of a surface by u. More...
 
void InsertVKnotsInRegion (ptrdiff_t idBegin, ptrdiff_t num=1) override
 Insertion of a row after the row with the index idBegin without changing of a surface by v. More...
 
void InsertVKnots (double &newKnot, ptrdiff_t multiplicity)
 Insertion of a row with the value of the knot newKnot without changing of a surface by v. More...
 
void CalculateUVParameters (Array2< MbCartPoint > &params) const override
 Calculation of points on surface corresponding to knots. More...
 
bool CalculateUVParameterForKnot (size_t uIndex, size_t vIndex, MbCartPoint &point) const override
 Calculation of point on surface corresponding to control point. More...
 
bool CalculatePartsForSpecMove (const Array2< bool > &movedPoints, size_t uIndex, size_t vIndex, const MbVector3D &moveVector, MbeDirectSmoothType smoothType, double smoothDegree, Array2< double > &partsPoints) const override
 Calculation of a shift part of knots during the translation with blending. More...
 
bool CalculateFixedPoints (const RPArray< const MbSurfaceIntersectionCurve > &curves, Array2< bool > &fixedPoints) const override
 Calculation of fixed control points. More...
 
bool CalculateFixedLimits (const MbSurfaceCurve &curve, ptrdiff_t &u1, ptrdiff_t &u2, ptrdiff_t &v1, ptrdiff_t &v2) const
 
ptrdiff_t RemoveUKnotsWithoutApprox (ptrdiff_t id, ptrdiff_t num, double relEps=Math::paramEpsilon, double absEps=Math::lengthEpsilon)
 
ptrdiff_t RemoveVKnotsWithoutApprox (ptrdiff_t id, ptrdiff_t num, double relEps=Math::paramEpsilon, double absEps=Math::lengthEpsilon)
 
size_t RemoveUKnots (ptrdiff_t &rowId, ptrdiff_t num=1, double absEps=Math::lengthEpsilon) override
 Deletion of a column of control points without changing of a surface. More...
 
size_t RemoveVKnots (ptrdiff_t &rowId, ptrdiff_t num=1, double absEps=Math::lengthEpsilon) override
 Deletion of a row of control points without changing of a surface. More...
 
bool ChangeUDegreeApprox (size_t newDegree) override
 Change the order of NURBS by construction of a surface by the function NurbsSurface. More...
 
bool ChangeVDegreeApprox (size_t newDegree) override
 Change the order of NURBS by construction of a surface by the function NurbsSurface. More...
 
bool ChangeParametersApprox (size_t nUDegree, size_t nVDegree, ptrdiff_t nUCount, ptrdiff_t nVCount) override
 Change the order and the number of knots of NURBS by construction of a surface by the function NurbsSurface. More...
 
bool ApproxSurfWithoutMultKnots ()
 Rebuild a surface by the function NurbsSurface without multiple knots. More...
 
void GetPointsWithVisible (Array2< MbNurbsPointInfo > &params) const override
 Return an array of knot points and their visibility for the operation of editing as spline. More...
 
void ModifyPointsWithVisible (const Array2< MbCartPoint3D > &oldPoints, Array2< MbCartPoint3D > &newPoints) const
 Modify an array of knot points considering the moving of invisible points. More...
 
bool UnClampedU (bool clm)
 Whether to clamp a knot vector. More...
 
bool UnClampedV (bool clm)
 Whether to clamp a knot vector. More...
 
void SetClampedU ()
 Make a clumped knot vector.
 
void SetClampedV ()
 Make a clumped knot vector.
 
void SetBordersTypes (bool cuMin, bool cuMax, bool cvMin, bool cvMax)
 Set types of surfaces boundaries. More...
 
bool CheckPolePoint (const MbCartPoint3D &pnt, double absEps, bool bSet)
 Check whether a point is a pole and remove discontinuity of the first derivative. More...
 
void SoftUTouch ()
 If surface is touched by U then remove the discontinuity of the first derivative.
 
void SoftVTouch ()
 If surface is touched by V then remove the discontinuity of the first derivative.
 
bool IsLineU () const override
 Check that all derivatives of surface with respect to u which have more than first order are equal to null.
 
bool IsLineV () const override
 Check that all derivatives of surface with respect to v which have more than first order are equal to null.
 
double GetRadius () const override
 Get the physical radius of the object or null if it impossible.
 
double GetFilletRadius (const MbCartPoint3D &p, double accuracy=METRIC_REGION) const override
 Get fillet radius if the surface is a fillet surface.
 
MbeParamDir GetFilletDirection (double accuracy=METRIC_REGION) const override
 Direction of fillet surface.
 
bool GetCylinderAxis (MbAxis3D &) const override
 Get rotation axis of a surface.
 
size_t GetUMeshCount () const override
 The the number of splittings in u-direction.
 
size_t GetVMeshCount () const override
 The the number of splittings in v-direction.
 
bool IsRational () const
 Check whether a surface is rational but not regular.
 
void DeleteTesselation () const
 Delete the temporary data structure - surface tesselation.
 
MbCurveIsSplineBorder (const MbCurve3D &curve) const
 Create a two-dimensional curve if a space curve is a surface boundary. More...
 
void DirectParallelRects (const MbVector3D &direction, std::vector< MbRect > &parallelRects) const
 Regions of a surface parallel to the direction. More...
 
bool CheckUTouch (double precision) const
 Can the surface be closed by the first parameter?
 
bool CheckVTouch (double precision) const
 Can the surface be closed by the second parameter?
 

Additional Inherited Members

- Protected Attributes inherited from MbPolySurface
Array2< MbCartPoint3Dpoints
 A matrix of control points.
 
bool uclosed
 An attribute of closedness by u-parameter.
 
bool vclosed
 An attribute of closedness by v-parameter.
 
size_t ucount
 Count of columns.
 
size_t vcount
 Count of rows.
 
- Protected Attributes inherited from MbSurface
MbCube cube
 Bounding box of surface. More...
 

Detailed Description

NURBS surface.

NURBS surface is constructed by a given matrix relative to control points. Each control point has a weight which is given in the matrix of weights (by default all weights are equal to 1).
Abbreviation of NURBS is obtained from the first letters of the Non-Uniform Rational B-Spline phrase. NURBS surface doesn't pass through its control points. Calculation of a surface at each point is performed on the basis of two families of normalized non-uniform B-splines.
Each family of B-splines is defined by the given nondecreasing sequence of knot parameters and the given order of B-spline. For an unclosed by the first parameter surface the knot vector 'uknots' should contain a count of columns of matrix control points plus udegree. For a closed by the first parameter surface the knot vector 'uknots' should contain a count of columns of matrix control points plus 2*udegree-1. For an unclosed by the second parameter surface the knot vector 'vknots' should contain a count of rows of matrix control points plus vdegree. For a closed by the second parameter surface the knot vector 'vknots' should contain a count of rows of matrix control points plus 2*vdegree-1.

Constructor & Destructor Documentation

◆ MbSplineSurface() [1/3]

MbSplineSurface::MbSplineSurface ( size_t  uDeg,
size_t  vDeg,
bool  uCls,
bool  vCls,
const Array2< MbCartPoint3D > &  initPoints,
const SArray< double > &  initUKnots,
const SArray< double > &  initVKnots 
)

Constructor of NURBS surface.

Constructor of NURBS surface.

Parameters
[in]uDeg- Splines order by U.
[in]vDeg- Splines order by V.
[in]uCls- Closedness of a surface in u direction.
[in]vCls- Closedness of a surface in v direction.
[in]initPoints- A matrix of control points.
[in]initUKnots- A knot vector by U.
[in]initVKnots- A knot vector by V.

◆ MbSplineSurface() [2/3]

MbSplineSurface::MbSplineSurface ( size_t  uDeg,
size_t  vDeg,
bool  uCls,
bool  vCls,
const Array2< MbCartPoint3D > &  initPoints,
const Array2< double > &  initWeights,
const SArray< double > &  initUKnots,
const SArray< double > &  initVKnots 
)

Constructor of NURBS surface.

Constructor of NURBS surface.

Parameters
[in]uDeg- Splines degree by U.
[in]vDeg- Splines degree by V.
[in]uCls- Closedness of a surface in u direction.
[in]vCls- Closedness of a surface in v direction.
[in]initPoints- A matrix of control points.
[in]initWeights- Matrix of point weights.
[in]initUKnots- A knot vector by U.
[in]initVKnots- A knot vector by V.

◆ MbSplineSurface() [3/3]

MbSplineSurface::MbSplineSurface ( const MbCartPoint3D p1,
const MbCartPoint3D p2,
const MbCartPoint3D p3,
const MbCartPoint3D p4,
size_t  iDegreeU,
size_t  iDegreeV,
size_t  iCountU,
size_t  iCountV 
)

Constructor of NURBS surface by four angles of counterclockwise traverse.

Surface angles are given. Other points are uniformly distributed inside the rectangle which is given by angular points.

Parameters
[in]p1- Left bottom angle. It corresponds to the point (0,0).
[in]p2- Right bottom angle. It corresponds to the point (1, 0).
[in]p3- Right top angle. It corresponds to the point (1, 1).
[in]p4- Left top angle. It corresponds to the point (0, 1).
[in]iDegreeU- Splines degree by U.
[in]iDegreeV- Splines degree by V.
[in]iCountU- The number of points by u (the number of columns in the points matrix).
[in]iCountV- The number of points by v (the number of rows in the points matrix).

Member Function Documentation

◆ Init() [1/2]

bool MbSplineSurface::Init ( const Array2< MbCartPoint3D > &  cPoints,
const Array2< double > &  pWeights 
)

Initialization of filled surface.

Initialization of filled surface.

Parameters
[in]cPoints- A matrix of control points.
[in]pWeights- Matrix of point weights.

◆ Init() [2/2]

bool MbSplineSurface::Init ( size_t  iDegreeU,
size_t  iDegreeV,
bool  iClosedU,
bool  iClosedV 
)

Initialization of filled surface.

Initialization of filled surface.

Parameters
[in]iDegreeU- New degree of splines by u.
[in]iDegreeV- New degree of splines by v.
[in]iClosedU- Closedness of a surface in u direction.
[in]iClosedV- Closedness of a surface in v direction.

◆ InitParasolid()

bool MbSplineSurface::InitParasolid ( bool  uCls,
bool  vCls,
bool  brational,
size_t  uDgr,
size_t  vDgr,
ptrdiff_t  uCnt,
ptrdiff_t  vCnt,
const CcArray< double > &  vcs,
ptrdiff_t  vcsCnt,
const CcArray< ptrdiff_t > &  uKMul,
ptrdiff_t  uKMulCnt,
const CcArray< ptrdiff_t > &  vKMul,
ptrdiff_t  vKMulCnt,
const CcArray< double > &  uKnt,
ptrdiff_t  uKntCnt,
const CcArray< double > &  vKnt,
ptrdiff_t  vKntCnt,
double  scl 
)

Fill spline surface by parasolid data.

Fill spline surface by parasolid data.

Parameters
[in]uCls- Closedness of a surface in u direction.
[in]vCls- Closedness of a surface in v direction.
[in]brational- Whether a surface is rational. true - NURBS surface is constructed, false - Bezier surface.
[in]uDgr- Splines degree by U.
[in]vDgr- Splines degree by V.
[in]uCnt- A number of points by U direction.
[in]vCnt- A number of points by V direction.
[in]vcs- A set of points coordinates.. If spline is rational, then the fourth coordinate is the weight of a point.
[in]vcsCnt- Count of elements in the array vcs.
[in]uKMul- A set with the data about the multiplicity of each knot by u.
[in]uKMulCnt- Count of elements in the array uKMul.
[in]vKMul- A set with the data about the multiplicity of each knot by v.
[in]vKMulCnt- Count of elements in the array vKMul.
[in]uKnt- A set with values of knots by u. Each value is represented once. Information about knot multiplicity is in the element of 'uKMul' array with the same index.
[in]uKntCnt- Count of elements in the array uKnt.
[in]vKnt- A set with values of knots by v. Each value is represented once. Information about knot multiplicity is in the element of 'vKMul ' array with the same index.
[in]vKntCnt- Count of elements in the array vKnt.
[in]scl- Scale factor.

◆ Duplicate()

MbSpaceItem& MbSplineSurface::Duplicate ( MbRegDuplicate iReg = nullptr) const
overridevirtual

Create a copy of the object.

Create a copy of an object using the registrator. Registrator is used to prevent multiple copy of the object. If the object contains references to the other objects, then nested objects are copied as well. It is allowed not to pass registrator into the function. Then new copy of object will be created. While copying of single object or set of not connected objects, it is allowed not to use registrator. Registrator should be used if it is required to copy several connected objects. It is possible, that objects connection is based on the references to common objects. Then, while copying without using of registrator, it is possible to obtain set of copies, that contain references to the different copies of the same nested object, that leads to loss of connection between copies.

Parameters
[in]iReg- Registrator.
Returns
A copy of the object.

Implements MbSpaceItem.

◆ IsSame()

bool MbSplineSurface::IsSame ( const MbSpaceItem other,
double  accuracy = LENGTH_EPSILON 
) const
overridevirtual

Determine whether an object is equal.

Still considered objects of the same type, all data is the same (equal).

Parameters
[in]item- The object to compare.
[in]accuracy- The accuracy to compare.
Returns
Whether the objects are equal.

Implements MbSpaceItem.

◆ SetEqual()

bool MbSplineSurface::SetEqual ( const MbSpaceItem item)
overridevirtual

Make objects equal if they are similar.

You can still make only a similar objects.

Parameters
[in]item- The object to initialize.
Returns
Object is changed.

Implements MbSpaceItem.

◆ GetProperties()

void MbSplineSurface::GetProperties ( MbProperties properties)
overridevirtual

Outstanding properties of the object.

Issue internal data (properties) of the object for viewing and modification.

Parameters
[in]properties- Container for the internal data of the object.

Implements MbSpaceItem.

◆ SetProperties()

void MbSplineSurface::SetProperties ( const MbProperties properties)
overridevirtual

Change the properties of an object.

Changing the internal data (properties) of the object you are copying the corresponding values from the sent object.

Parameters
[in]properties- Container for the internal data of the object.

Implements MbSpaceItem.

◆ IsUClosed()

bool MbSplineSurface::IsUClosed ( ) const
overridevirtual

Determine whether a surface is closed in u-parameter direction.

Determine whether a surface is closed smoothly in u-parameter direction without regard to the boundary contour. It is always false for MbCurveBoundSurface. It is recommended to use IsUPeriodic.

Reimplemented from MbPolySurface.

◆ IsVClosed()

bool MbSplineSurface::IsVClosed ( ) const
overridevirtual

Determine whether a surface is closed in v-parameter direction.

Determine whether a surface is closed smoothly in v-parameter direction without regard to the boundary contour. It is always false for MbCurveBoundSurface. It is recommended to use IsVPeriodic.

Reimplemented from MbPolySurface.

◆ IsUTouch()

bool MbSplineSurface::IsUTouch ( ) const
overridevirtual

Determine whether a surface is closed in u-parameter direction regardless of the smoothness of the closure.

Determine whether a surface is actually closed in u-parameter direction regardless of the smoothness of the closure.

Reimplemented from MbSurface.

◆ IsVTouch()

bool MbSplineSurface::IsVTouch ( ) const
overridevirtual

Determine whether a surface is closed in v-parameter direction regardless of the smoothness of the closure.

Determine whether a surface is actually closed in v-parameter direction regardless of the smoothness of the closure.

Reimplemented from MbSurface.

◆ IsUPeriodic()

bool MbSplineSurface::IsUPeriodic ( ) const
overridevirtual

Determine whether a surface is closed in u-parameter direction.

Determine whether a surface is smoothly closed in u-parameter direction.

Reimplemented from MbSurface.

◆ IsVPeriodic()

bool MbSplineSurface::IsVPeriodic ( ) const
overridevirtual

Determine whether a surface is closed in v-parameter direction.

Determine whether a surface is smoothly closed in v-parameter direction.

Reimplemented from MbSurface.

◆ PointOn()

void MbSplineSurface::PointOn ( double &  u,
double &  v,
MbCartPoint3D p 
) const
overridevirtual

Calculate a point on the surface.

Correct parameters when getting out of rectangular domain bounds and Calculate a point on the surface.

Parameters
[in]u- First surface parameter.
[in]v- Second surface parameter.
[out]p- A point on the surface.

Implements MbSurface.

◆ Explore() [1/2]

void MbSplineSurface::Explore ( double &  u,
double &  v,
MbCartPoint3D pnt,
MbVector3D uDer,
MbVector3D vDer 
) const
overridevirtual

Calculate point and first derivatives with respect to u and with respect to v.

Correct parameters when getting out of rectangular domain bounds and calculate point and first derivatives with respect to u and with respect to v.

Parameters
[in]u- Parameter.
[in]v- Parameter.
[out]pnt- Point.
[out]uDer- Derivative with respect to u.
[out]vDer- Derivative with respect to v.

Reimplemented from MbSurface.

◆ _PointOn()

void MbSplineSurface::_PointOn ( double  u,
double  v,
MbCartPoint3D p 
) const
overridevirtual

Calculate a point on the surface.

Calculate a point on the surface including the outside area determination parameters.

Parameters
[in]u- First surface parameter.
[in]v- Second surface parameter.
[out]p- A point on the surface or on extended surface.

Reimplemented from MbSurface.

◆ Explore() [2/2]

void MbSplineSurface::Explore ( double &  u,
double &  v,
bool  ext,
MbCartPoint3D pnt,
MbVector3D uDer,
MbVector3D vDer,
MbVector3D uuDer,
MbVector3D vvDer,
MbVector3D uvDer,
MbVector3D nor 
) const
overridevirtual

Calculate point and derivatives of object for given parameters.

Values of point and derivatives are calculated on parameters area and on extended surface.

Parameters
[in]u- Parameter.
[in]v- Parameter.
[in]ext- On parameters area (false), on extended surface (true).
[out]pnt- Point.
[out]uDer- Derivative with respect to u.
[out]vDer- Derivative with respect to v.
[out]uuDer- Second derivative with respect to u, if not nullptr.
[out]vvDer- Second derivative with respect to v, if not nullptr.
[out]uvDer- Second derivative with respect to u and v, if not nullptr.

Reimplemented from MbSurface.

◆ StepU()

double MbSplineSurface::StepU ( double  u,
double  v,
double  sag 
) const
overridevirtual

Calculate parameter step.

Calculate parameter step for the surface approximation by its sag value along a line with a constant value of v. Calculation of the step is performed with consideration of curvature radius. A step of surface approximation along a curve is chosen in such way, that the deviation from its polygon does not exceed the given value of sag.

Parameters
[in]u- A parameter defining a point on the surface.
[in]v- A parameter defining a point on the surface.
[in]sag- Maximum feasible sag value.
Returns
A sag value by parameter at given point.

Reimplemented from MbSurface.

◆ StepV()

double MbSplineSurface::StepV ( double  u,
double  v,
double  sag 
) const
overridevirtual

Calculate parameter step.

Calculate parameter step for the surface approximation by its sag value along a line with a constant value of u. Calculation of the step is performed with consideration of curvature radius. A step of surface approximation along a curve is chosen in such way, that the deviation from its polygon does not exceed the given value of sag.

Parameters
[in]u- A parameter defining a point on the surface.
[in]v- A parameter defining a point on the surface.
[in]sag- Maximum feasible sag value.
Returns
A sag value by parameter at given point.

Reimplemented from MbSurface.

◆ DeviationStepU()

double MbSplineSurface::DeviationStepU ( double  u,
double  v,
double  angle 
) const
overridevirtual

Calculate parameter step.

Calculate parameter step for the surface approximation by the deviation angle of the tangent vector along a line with a constant value of u. A step of surface approximation along a curve is chosen in such way, that angular deviation of the tangent to the curve at the next point does not exceed the given value ang.

Parameters
[in]u- A parameter defining a point on the surface.
[in]v- A parameter defining a point on the surface.
[in]ang- The maximum feasible deviation angle of tangent.
Returns
A sag value by parameter at given point.

Reimplemented from MbSurface.

◆ DeviationStepV()

double MbSplineSurface::DeviationStepV ( double  u,
double  v,
double  angle 
) const
overridevirtual

Calculate parameter step.

Calculate parameter step for the surface approximation by the deviation angle of the tangent vector along a line with a constant value of v. A step of surface approximation along a curve is chosen in such way, that angular deviation of the tangent to the curve at the next point does not exceed the given value ang.

Parameters
[in]u- A parameter defining a point on the surface.
[in]v- A parameter defining a point on the surface.
[in]ang- The maximum feasible deviation angle of tangent.
Returns
A sag value by parameter at given point.

Reimplemented from MbSurface.

◆ NurbsSurface() [1/2]

MbSplineSurface* MbSplineSurface::NurbsSurface ( double  u1,
double  u2,
double  v1,
double  v2,
bool  bmatch = false 
) const
overridevirtual

Construct a NURBS copy of trimmed surface.

An obtained surface is always unclosed in u and in v. The exception is the NURBS surface itself. If the surface does not require recalculation, then a copy of it is returned. Parameters u1, u2, v1 and v2 are the bounds of surface trimming.

Parameters
[in]u1- Minimum parameter in U.
[in]u2- Maximum parameter in U.
[in]v1- Minimum parameter in V.
[in]v2- Maximum parameter in V.
[in]bmatch- true, if it is required to keep one-to-one correspondence of parametric regions in mapping.

Reimplemented from MbSurface.

◆ NurbsSurface() [2/2]

MbSurface* MbSplineSurface::NurbsSurface ( const MbNurbsParameters uParam,
const MbNurbsParameters vParam 
) const
overridevirtual

Construct a NURBS copy of a surface.

Constructs a NURBS surface which approximates a given surface with the given parameters in each direction. In parameters the degree and the number of knots of a spline and the range of curve's parameters changing may be set. If the flag of accurate approximation is not set in parameters then NURBS without multiple knots is constructed.

Parameters
[in]uParam- Parameters of construction in u direction.
[in]vParam- Parameters of construction in v direction.
Returns
The constructed NURBS surface or nullptr in a case of failure.

Reimplemented from MbSurface.

◆ CurveU()

MbCurve3D* MbSplineSurface::CurveU ( double  v,
MbRect1D pRgn,
bool  bApprox = true 
) const
overridevirtual

Construct spatial copy of the line v = const.

Parameters
[in]v- Parameter in V direction.
[in]pRgn- A range of u-parameters.
[in]bApprox- If false, then it returns null only in a case when the exact curve has been successfully created.
If true, then it returns null in a case when the curve is not degenerate.
Returns
Constructed curve.

Reimplemented from MbSurface.

◆ CurveV()

MbCurve3D* MbSplineSurface::CurveV ( double  u,
MbRect1D pRgn,
bool  bApprox = true 
) const
overridevirtual

Construct spatial copy of the line u = const.

Parameters
[in]u- Parameter in U direction.
[in]pRgn- A range of v-parameters.
[in]bApprox- If false, then it returns null only in a case when the exact curve has been successfully created.
If true, then it returns null in a case when the curve is not degenerate.
Returns
Constructed curve.

Reimplemented from MbSurface.

◆ GetTesselation()

void MbSplineSurface::GetTesselation ( const MbStepData stepData,
double  u1,
double  u2,
double  v1,
double  v2,
SArray< double > &  uu,
SArray< double > &  vv 
) const
overridevirtual

Determine a splitting of parametric region of a surface by verticals and horizontals.

Determine a splitting of parametric region of a surface by verticals and horizontals during triangulation.

Parameters
[in]stepData- Data for step calculation during triangulation.
[in]u1- Minimal value of u-parameter in the region of surface splitting.
[in]u2- Maximal value of u-parameter in the region of surface splitting.
[in]v1- Minimal value of v-parameter in the region of surface splitting.
[in]v2- Maximal value of v-parameter in the region of surface splitting.
[out]uu- A set of parameters of splitting by u.
[out]vv- A set of parameters of splitting by v.

Reimplemented from MbSurface.

◆ CheckSurfParams()

void MbSplineSurface::CheckSurfParams ( double &  u,
double &  v 
) const
overridevirtual

Check parameters. Analogue of the global function _CheckParams, optimized for caches usage.

Check parameters and move them inside domain if parameter is out of pole.

Parameters
[in]surface- Surface.
[in]u- First parameter.
[in]v- Second parameter.

Reimplemented from MbSurface.

◆ Trimmed()

MbSplineSurface* MbSplineSurface::Trimmed ( double  uBeg,
double  uEnd,
double  vBeg,
double  vEnd 
) const

Construct a trimmed surface.

Construct a trimmed surface.

Parameters
[in]uBeg- Parameter U corresponding to start of a trimmed surface.
[in]uEnd- Parameter U corresponding to end of a trimmed surface.
[in]vBeg- Parameter V corresponding to start of a trimmed surface.
[in]vEnd- Parameter V corresponding to end of a trimmed surface.
Returns
A constructed trimmed surface.

◆ NearPointProjection()

bool MbSplineSurface::NearPointProjection ( const MbCartPoint3D pnt,
double &  u,
double &  v,
bool  ext,
MbRect2D uvRange = nullptr 
) const
overridevirtual

Find the projection of a point onto the surface.

Find the nearest point projection to the surface or its extension by the given initial approximation. If the range of parameters changing 'uvRange' is set, then it is required to find a projection in the given range. A range of parameters may not belong to the domain of a surface. The Newton method is used.

Parameters
[in]pnt- A given point.
[in,out]u- Input - initial approximation, output - parameter of a surface, corresponding to the nearest projection.
[in,out]v- Input - initial approximation, output - parameter of a surface, corresponding to the nearest projection.
[in]ext- A flag defining whether to seek projection on the extension of the surface.
[in]uvRange- A range of parameters changing in which the solution should be found.
Returns
True - if there is found a projection which satisfies to all input conditions.

Reimplemented from MbSurface.

◆ DirectPointProjection()

void MbSplineSurface::DirectPointProjection ( const MbCartPoint3D pnt,
const MbVector3D vect,
SArray< MbCartPoint > &  uv,
bool  ext,
MbRect2D uvRange = nullptr 
) const
overridevirtual

Find all a point projection onto the surface along a vector in either of two directions.

Calculate all points of intersection with the ray outgoing from the given point 'p' by the direction 'vect'. If the range of parameters changing 'uvRange' is set, then it is required to find a projection in the given range. A range of parameters may not belong to the domain of a surface.

Parameters
[in]pnt- A given point.
[in]vect- A direction vector.
[out]uv- A set of projection points in the area of surface definition.
[in]ext- A flag defining whether to seek projection on the extension of the surface.
[in]uvRange- A range of surface parameters changing in which the solution should be found.

Reimplemented from MbSurface.

◆ IsSimilarToSurface()

bool MbSplineSurface::IsSimilarToSurface ( const MbSurface surf,
VERSION  version,
double  precision = METRIC_PRECISION 
) const
overridevirtual

Define whether the surfaces are similar for merge.

Surfaces are similar for merge if they coincide geometrically or one surface transits to another.

Parameters
[in]surf- A given surface.
[in]version- Version of operation.
[in]precision- Precision of calculation.
Returns
True - if surfaces are similar.

Reimplemented from MbSurface.

◆ GetMatrixToSurface()

bool MbSplineSurface::GetMatrixToSurface ( const MbSurface surf,
MbMatrix matr,
VERSION  version,
double  precision = METRIC_PRECISION 
) const
overridevirtual

Get two-dimensional matrix of transformation from its parametric region to the parametric region of 'surf'.

Calculation of matrix of transformation from one parametric region to another. it is performed for the surfaces which are similar for merge.

Parameters
[in]surf- A given surface.
[out]matr- A transformation matrix.
[in]version- Version of operation.
[in]precision- Precision of calculation.
Returns
True - matrix is calculated.

Reimplemented from MbSurface.

◆ ChangeWeight()

void MbSplineSurface::ChangeWeight ( ptrdiff_t  i,
ptrdiff_t  j,
double  w 
)

Changing of one point weight.

Changing of one point weight

Parameters
[in]i- Row index.
[in]j- Column index.
[in]w- New value of weight.

◆ RaiseUDegree()

bool MbSplineSurface::RaiseUDegree ( size_t  newDegree,
double  relEps 
)

Increase order of surface by first coordinate without changing its geometric shape and parametrization.

Increase order of surface by first coordinate without changing its geometric shape and parametrization.

Parameters
[in]newDegree- New order of surface by first coordinate.
[in]relEps- Permissible shape error.
Returns
Returns true if the order of the surface was changed.

◆ RaiseVDegree()

bool MbSplineSurface::RaiseVDegree ( size_t  newDegree,
double  relEps 
)

Increase order of surface by second coordinate without changing its geometric shape and parametrization.

Increase order of surface by second coordinate without changing its geometric shape and parametrization.

Parameters
[in]newDegree- New order of surface by second coordinate.
[in]relEps- Permissible shape error.
Returns
Returns true if the order of the surface was changed.

◆ SetDegree()

void MbSplineSurface::SetDegree ( bool  isU,
ptrdiff_t  order 
)

Changing of surface order.

Changing of surface order.

Parameters
[in]isU- Determines a coordinate of the order changing: true - u, false - v.
[in]order- A new surface order.

◆ SetLimitParam()

MbMatrix MbSplineSurface::SetLimitParam ( double  pmin,
double  pmax,
double  qmin,
double  qmax 
)

Set the range of parameters.

Set the range of parameters.

Parameters
[in]pmin- The minimal parameter value by U.
[in]pmax- The maximal parameter value by U.
[in]qmin- The minimal parameter value by V.
[in]qmax- The maximal parameter value by V.

◆ GetWeight()

double MbSplineSurface::GetWeight ( ptrdiff_t  i,
ptrdiff_t  j 
) const
inline

Get vertex weight.

Get vertex weight.

Parameters
[in]i- Row index.
[in]j- Column index.
Returns
A value of weight.

◆ GetWeights()

void MbSplineSurface::GetWeights ( Array2< double > &  wts) const
inlineoverridevirtual

Get the matrix of vertices weights.

Get the matrix of vertices weights.

Parameters
[in,out]wts- A matrix for weights values filling.

Implements MbPolySurface.

◆ GetKnotsCount()

size_t MbSplineSurface::GetKnotsCount ( bool  isU) const
inline

Get the number of elements in a knot vector.

Get the number of elements in a knot vector.

Parameters
[in]isU- Determines the requested coordinate of a knot vector: true - u, false - v.
Returns
The number of elements in a knot vector.

◆ GetKnots()

void MbSplineSurface::GetKnots ( bool  isU,
SArray< double > &  knots 
) const
inlineoverridevirtual

Get a knots vector by the chosen parameter.

Get a knots vector by the chosen parameter.

Parameters
[in]isU- Determines the requested coordinate of a knot vector: true - u, false - v.
[in,out]knots- Matrix for knot vector storage.

Implements MbPolySurface.

◆ GetKnot()

double MbSplineSurface::GetKnot ( bool  isU,
size_t  i 
) const

Get the value of one knot.

Get the value of one knot.

Parameters
[in]isU- Determines the requested coordinate of a knot vector: true - u, false - v.
[in]i- The index of an element in a knot vector.
Returns
A value of knot.

◆ InsertUKnotsInRegion()

void MbSplineSurface::InsertUKnotsInRegion ( ptrdiff_t  idBegin,
ptrdiff_t  num = 1 
)
overridevirtual

Insertion of a row after the row with the index idBegin without changing of a surface by u.

Insertion of a row after the row with the index idBegin without changing of a surface by u.

Parameters
[in]idBegin- An index of the row a new row will be inserted after.
[in]num- Count of inserted rows.

Implements MbPolySurface.

◆ InsertUKnots()

void MbSplineSurface::InsertUKnots ( double &  newKnot,
ptrdiff_t  multiplicity 
)

Insertion of a row with the value of the knot newKnot without changing of a surface by u.

Insertion of a row with the value of the knot newKnot without changing of a surface by u.

Parameters
[in]newKnot- A value of knot.
[in]multiplicity- Count of inserted rows.

◆ InsertVKnotsInRegion()

void MbSplineSurface::InsertVKnotsInRegion ( ptrdiff_t  idBegin,
ptrdiff_t  num = 1 
)
overridevirtual

Insertion of a row after the row with the index idBegin without changing of a surface by v.

Insertion of a row after the row with the index idBegin without changing of a surface by v.

Parameters
[in]idBegin- An index of the row a new row will be inserted after.
[in]num- Count of inserted rows.

Implements MbPolySurface.

◆ InsertVKnots()

void MbSplineSurface::InsertVKnots ( double &  newKnot,
ptrdiff_t  multiplicity 
)

Insertion of a row with the value of the knot newKnot without changing of a surface by v.

Insertion of a row with the value of the knot newKnot without changing of a surface by v.

Parameters
[in]newKnot- A value of knot.
[in]multiplicity- Count of inserted rows.

◆ CalculateUVParameters()

void MbSplineSurface::CalculateUVParameters ( Array2< MbCartPoint > &  params) const
overridevirtual

Calculation of points on surface corresponding to knots.

Calculation of points on surface corresponding to knots.

Parameters
[in,out]params- A matrix for keeping of points on surface corresponding to control points.

Implements MbPolySurface.

◆ CalculateUVParameterForKnot()

bool MbSplineSurface::CalculateUVParameterForKnot ( size_t  uIndex,
size_t  vIndex,
MbCartPoint point 
) const
overridevirtual

Calculation of point on surface corresponding to control point.

Calculation of point on surface corresponding to control point.

Parameters
[in]uIndex- A column of control point.
[in]vIndex- A row of control point.
[in,out]point- A point on surface.
Returns
True if a point on surface was successfully found.

Implements MbPolySurface.

◆ CalculatePartsForSpecMove()

bool MbSplineSurface::CalculatePartsForSpecMove ( const Array2< bool > &  movedPoints,
size_t  uIndex,
size_t  vIndex,
const MbVector3D moveVector,
MbeDirectSmoothType  smoothType,
double  smoothDegree,
Array2< double > &  partsPoints 
) const
overridevirtual

Calculation of a shift part of knots during the translation with blending.

A translation of one control point is known. Translation of other points which marked as movable in the matrix movedPoints depends on the direction of its translation, the distance from the points to the translation line (moveVector) and the function of blending. There are three modes of blending: convex, concave and smooth transition.

Parameters
[in]movedPoints- A matrix containing data about moved points. If an element of the matrix equals 1 then the corresponding control point can be moved, otherwise - it is fixed.
[in]uIndex- A column of a moved control point relative to which there will be the blending.
[in]vIndex- A row of a moved control point relative to which there will be the blending.
[in]moveVector- A vector in direction of which the control point is translated.
[in]smoothType- The type of blending.
dst_None - no blending, dst_Convex - convex, dst_Concave - concave, dst_Smooth - smooth transition.
[in]smoothDegree- A degree of the blending function. A positive value.
[in,out]partsPoints- A matrix with the data about a part of shift of each point relative to the moved point.
Returns
True if the calculations were successfully performed..

Implements MbPolySurface.

◆ CalculateFixedPoints()

bool MbSplineSurface::CalculateFixedPoints ( const RPArray< const MbSurfaceIntersectionCurve > &  curves,
Array2< bool > &  fixedPoints 
) const
overridevirtual

Calculation of fixed control points.

Calculation of knots which should be fixed to forbid the deformation of curves in the given array when a surface deforms.

Parameters
[in]curves- A set of curves.
[in,out]fixedPoints- A matrix where the data about necessity of angles fixation is written to save curves. If an element of matrix equals true then the control point corresponding to it should be fixed.
Returns
True if calculations are successfully performed.

Implements MbPolySurface.

◆ RemoveUKnots()

size_t MbSplineSurface::RemoveUKnots ( ptrdiff_t &  rowId,
ptrdiff_t  num = 1,
double  absEps = Math::lengthEpsilon 
)
overridevirtual

Deletion of a column of control points without changing of a surface.

Deletion of a column of control points without changing of a surface.

Parameters
[in]rowId- Index of the first deleted column.
[in]num- Count of deleted columns.
[in]absEps- Approximation tolerance.
Returns
Count of columns which are succeeded to delete.

Implements MbPolySurface.

◆ RemoveVKnots()

size_t MbSplineSurface::RemoveVKnots ( ptrdiff_t &  rowId,
ptrdiff_t  num = 1,
double  absEps = Math::lengthEpsilon 
)
overridevirtual

Deletion of a row of control points without changing of a surface.

Deletion of a row of control points without changing of a surface.

Parameters
[in]rowId- Index of the first deleted row.
[in]num- Count of deleted rows.
[in]absEps- Approximation tolerance.
Returns
Count of rows which are succeeded to delete.

Implements MbPolySurface.

◆ ChangeUDegreeApprox()

bool MbSplineSurface::ChangeUDegreeApprox ( size_t  newDegree)
overridevirtual

Change the order of NURBS by construction of a surface by the function NurbsSurface.

Change the order of NURBS by construction of a surface by the function NurbsSurface.

Parameters
[in]newDegree- New surface degree by u.
Returns
True if approximation is succeeded.

Implements MbPolySurface.

◆ ChangeVDegreeApprox()

bool MbSplineSurface::ChangeVDegreeApprox ( size_t  newDegree)
overridevirtual

Change the order of NURBS by construction of a surface by the function NurbsSurface.

Change the order of NURBS by construction of a surface by the function NurbsSurface.

Parameters
[in]newDegree- New surface degree by v.
Returns
True if approximation is succeeded.

Implements MbPolySurface.

◆ ChangeParametersApprox()

bool MbSplineSurface::ChangeParametersApprox ( size_t  nUDegree,
size_t  nVDegree,
ptrdiff_t  nUCount,
ptrdiff_t  nVCount 
)
overridevirtual

Change the order and the number of knots of NURBS by construction of a surface by the function NurbsSurface.

Change the order and the number of knots of NURBS by construction of a surface by the function NurbsSurface.

Parameters
[in]nUDegree- New surface degree by u.
[in]nVDegree- New surface degree by v.
[in]nUCount- A number of control points in U direction.
[in]nVCount- A number of control points in V direction.
Returns
True if approximation is succeeded.

Implements MbPolySurface.

◆ ApproxSurfWithoutMultKnots()

bool MbSplineSurface::ApproxSurfWithoutMultKnots ( )

Rebuild a surface by the function NurbsSurface without multiple knots.

Rebuild a surface by the function NurbsSurface without multiple knots.

Returns
True if approximation is succeeded.

◆ GetPointsWithVisible()

void MbSplineSurface::GetPointsWithVisible ( Array2< MbNurbsPointInfo > &  params) const
overridevirtual

Return an array of knot points and their visibility for the operation of editing as spline.

Return an array of knot points and their visibility for the operation of editing as spline.

Parameters
[in,out]params- A matrix of control points with specifying of visibility of each control point for editing.

Implements MbPolySurface.

◆ ModifyPointsWithVisible()

void MbSplineSurface::ModifyPointsWithVisible ( const Array2< MbCartPoint3D > &  oldPoints,
Array2< MbCartPoint3D > &  newPoints 
) const

Modify an array of knot points considering the moving of invisible points.

Modify an array of knot points considering the moving of invisible points.

Parameters
[in]oldPoints- A matrix of control points.
[in,out]newPoints- A matrix of control points after the correction of invisible points location.

◆ UnClampedU()

bool MbSplineSurface::UnClampedU ( bool  clm)

Whether to clamp a knot vector.

Make a knot vector by u clamped if a surface is closed in u direction and clm = false. If it is not closed and clm = true then make knot vector unclamped.

Parameters
[in]clm- Whether to clamp a knot vector.

◆ UnClampedV()

bool MbSplineSurface::UnClampedV ( bool  clm)

Whether to clamp a knot vector.

Make a knot vector by v clamped if a surface is closed in v direction and clm = false. If it is not closed and clm = true then make knot vector unclamped.

Parameters
[in]clm- Whether to clamp a knot vector.

◆ SetBordersTypes()

void MbSplineSurface::SetBordersTypes ( bool  cuMin,
bool  cuMax,
bool  cvMin,
bool  cvMax 
)

Set types of surfaces boundaries.

Set types of surfaces boundaries. This is used in converters.

Parameters
[in]cuMin- A type of surface when u is minimal.
[in]cuMax- A type of surface when u is maximal.
[in]cvMin- A type of surface when v is minimal.
[in]cvMax- A type of surface when v is maximal.

◆ CheckPolePoint()

bool MbSplineSurface::CheckPolePoint ( const MbCartPoint3D pnt,
double  absEps,
bool  bSet 
)

Check whether a point is a pole and remove discontinuity of the first derivative.

Check whether a point is a pole and remove discontinuity of the first derivative.

Parameters
[in]pnt- A point where the check is performed.
[in]absEps- Tolerance.
[in]bSet- Whether to replace control points corresponding to the pole and coincident with the given tolerance with the point pnt.

◆ IsSplineBorder()

MbCurve* MbSplineSurface::IsSplineBorder ( const MbCurve3D curve) const

Create a two-dimensional curve if a space curve is a surface boundary.

Create a two-dimensional curve if a space curve is a surface boundary.

Parameters
[in]curve- A given space curve.
Returns
A reference to the two-dimensional curve on a surface or nullptr if the construction of it is failed.

◆ DirectParallelRects()

void MbSplineSurface::DirectParallelRects ( const MbVector3D direction,
std::vector< MbRect > &  parallelRects 
) const

Regions of a surface parallel to the direction.

Regions of a surface the point sets of which are parallel to the given direction.

Parameters
[in]direction- Direction.
[out]collinearRects- Found regions inside the domain of a surface.
Warning
Under development.

The documentation for this class was generated from the following file: