C3D Toolkit
Kernel - 117982, Vision - 2.9.2.2
|
NURBS surface. More...
#include <surf_spline_surface.h>
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. | |
MbSpaceItem & | Duplicate (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... | |
![]() | |
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... | |
![]() | |
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 ¬e, MbMesh &mesh) const override |
Build polygonal copy mesh. More... | |
MbProperty & | CreateProperty (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 MbSurface * | operator[] (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 MbSurface & | GetSurface () const |
Get itself (it is overloaded only in CurveBoundedSurface). | |
virtual const MbSurface & | GetBasisSurface () const |
Get the base surface if exists or itself. | |
virtual MbSurface & | SetSurface () |
Get itself (it is overloaded only in CurveBoundedSurface). | |
virtual MbSurface & | SetBasisSurface () |
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... | |
MbSplineSurface * | NurbsSurface (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 > ¶ms) 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 MbSurface * | Offset (double d, bool same) const |
Create an offset surface. More... | |
virtual MbCurve3D * | CurveUV (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 MbCube & | GetGabarit () const |
Calculate bounding box of surface. | |
const MbCube & | Cube () 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 MbContour & | MakeContour (bool sense) const |
Return the bounding two-dimensional contour. More... | |
virtual MbCurve & | MakeSegment (size_t i, bool sense) const |
Return a segment of the bounding two-dimensional contour. More... | |
MbCurve & | MakeCurve (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. | |
![]() | |
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 |
![]() | |
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. | |
![]() | |
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. | |
![]() | |
void | Lock () const |
Switch lock on (locking happens only in parallel region). | |
void | Unlock () const |
Switch lock off if locking has been set. | |
CommonRecursiveMutex * | GetLock () 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. | |
![]() | |
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. | |
![]() | |
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. | |
![]() | |
MbSpaceItem () | |
Default constructor. | |
![]() | |
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. | |
MbSplineSurface * | NurbsSurface (double umin, double umax, double vmin, double vmax, bool bmatch=false) const override |
Construct a NURBS copy of trimmed surface. More... | |
MbSurface * | NurbsSurface (const MbNurbsParameters &uParam, const MbNurbsParameters &vParam) const override |
Construct a NURBS copy of a surface. More... | |
MbCurve3D * | CurveU (double v, MbRect1D *pRgn, bool bApprox=true) const override |
Construct spatial copy of the line v = const. More... | |
MbCurve3D * | CurveV (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... | |
MbSplineSurface * | Trimmed (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 > ¶ms) 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 > ¶ms) 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. | |
MbCurve * | IsSplineBorder (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 > ¶llelRects) 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 | |
![]() | |
Array2< MbCartPoint3D > | points |
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. | |
![]() | |
MbCube | cube |
Bounding box of surface. More... | |
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.
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.
[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::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.
[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::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.
[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). |
bool MbSplineSurface::Init | ( | const Array2< MbCartPoint3D > & | cPoints, |
const Array2< double > & | pWeights | ||
) |
Initialization of filled surface.
Initialization of filled surface.
[in] | cPoints | - A matrix of control points. |
[in] | pWeights | - Matrix of point weights. |
bool MbSplineSurface::Init | ( | size_t | iDegreeU, |
size_t | iDegreeV, | ||
bool | iClosedU, | ||
bool | iClosedV | ||
) |
Initialization of filled surface.
Initialization of filled surface.
[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. |
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.
[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. |
|
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.
[in] | iReg | - Registrator. |
Implements MbSpaceItem.
|
overridevirtual |
Determine whether an object is equal.
Still considered objects of the same type, all data is the same (equal).
[in] | item | - The object to compare. |
[in] | accuracy | - The accuracy to compare. |
Implements MbSpaceItem.
|
overridevirtual |
Make objects equal if they are similar.
You can still make only a similar objects.
[in] | item | - The object to initialize. |
Implements MbSpaceItem.
|
overridevirtual |
Outstanding properties of the object.
Issue internal data (properties) of the object for viewing and modification.
[in] | properties | - Container for the internal data of the object. |
Implements MbSpaceItem.
|
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.
[in] | properties | - Container for the internal data of the object. |
Implements MbSpaceItem.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
overridevirtual |
Calculate a point on the surface.
Correct parameters when getting out of rectangular domain bounds and Calculate a point on the surface.
[in] | u | - First surface parameter. |
[in] | v | - Second surface parameter. |
[out] | p | - A point on the surface. |
Implements MbSurface.
|
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.
[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.
|
overridevirtual |
Calculate a point on the surface.
Calculate a point on the surface including the outside area determination 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.
|
overridevirtual |
Calculate point and derivatives of object for given parameters.
Values of point and derivatives are calculated on parameters area and on extended surface.
[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.
|
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.
[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. |
Reimplemented from MbSurface.
|
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.
[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. |
Reimplemented from MbSurface.
|
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.
[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. |
Reimplemented from MbSurface.
|
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.
[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. |
Reimplemented from MbSurface.
|
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.
[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.
|
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.
[in] | uParam | - Parameters of construction in u direction. |
[in] | vParam | - Parameters of construction in v direction. |
Reimplemented from MbSurface.
|
overridevirtual |
Construct spatial copy of the line v = const.
[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. |
Reimplemented from MbSurface.
|
overridevirtual |
Construct spatial copy of the line u = const.
[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. |
Reimplemented from MbSurface.
|
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.
[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.
|
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.
[in] | surface | - Surface. |
[in] | u | - First parameter. |
[in] | v | - Second parameter. |
Reimplemented from MbSurface.
MbSplineSurface* MbSplineSurface::Trimmed | ( | double | uBeg, |
double | uEnd, | ||
double | vBeg, | ||
double | vEnd | ||
) | const |
Construct a trimmed surface.
Construct a trimmed surface.
[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. |
|
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.
[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. |
Reimplemented from MbSurface.
|
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.
[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.
|
overridevirtual |
Define whether the surfaces are similar for merge.
Surfaces are similar for merge if they coincide geometrically or one surface transits to another.
[in] | surf | - A given surface. |
[in] | version | - Version of operation. |
[in] | precision | - Precision of calculation. |
Reimplemented from MbSurface.
|
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.
[in] | surf | - A given surface. |
[out] | matr | - A transformation matrix. |
[in] | version | - Version of operation. |
[in] | precision | - Precision of calculation. |
Reimplemented from MbSurface.
void MbSplineSurface::ChangeWeight | ( | ptrdiff_t | i, |
ptrdiff_t | j, | ||
double | w | ||
) |
Changing of one point weight.
Changing of one point weight
[in] | i | - Row index. |
[in] | j | - Column index. |
[in] | w | - New value of weight. |
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.
[in] | newDegree | - New order of surface by first coordinate. |
[in] | relEps | - Permissible shape error. |
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.
[in] | newDegree | - New order of surface by second coordinate. |
[in] | relEps | - Permissible shape error. |
void MbSplineSurface::SetDegree | ( | bool | isU, |
ptrdiff_t | order | ||
) |
Changing of surface order.
Changing of surface order.
[in] | isU | - Determines a coordinate of the order changing: true - u, false - v. |
[in] | order | - A new surface order. |
MbMatrix MbSplineSurface::SetLimitParam | ( | double | pmin, |
double | pmax, | ||
double | qmin, | ||
double | qmax | ||
) |
Set the range of parameters.
Set the range of 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. |
|
inline |
Get vertex weight.
Get vertex weight.
[in] | i | - Row index. |
[in] | j | - Column index. |
Get the matrix of vertices weights.
Get the matrix of vertices weights.
[in,out] | wts | - A matrix for weights values filling. |
Implements MbPolySurface.
|
inline |
Get the number of elements in a knot vector.
Get the number of elements in a knot vector.
[in] | isU | - Determines the requested coordinate of a knot vector: true - u, false - v. |
Get a knots vector by the chosen parameter.
Get a knots vector by the chosen parameter.
[in] | isU | - Determines the requested coordinate of a knot vector: true - u, false - v. |
[in,out] | knots | - Matrix for knot vector storage. |
Implements MbPolySurface.
double MbSplineSurface::GetKnot | ( | bool | isU, |
size_t | i | ||
) | const |
Get the value of one knot.
Get the value of one knot.
[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. |
|
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.
[in] | idBegin | - An index of the row a new row will be inserted after. |
[in] | num | - Count of inserted rows. |
Implements MbPolySurface.
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.
[in] | newKnot | - A value of knot. |
[in] | multiplicity | - Count of inserted rows. |
|
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.
[in] | idBegin | - An index of the row a new row will be inserted after. |
[in] | num | - Count of inserted rows. |
Implements MbPolySurface.
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.
[in] | newKnot | - A value of knot. |
[in] | multiplicity | - Count of inserted rows. |
|
overridevirtual |
Calculation of points on surface corresponding to knots.
Calculation of points on surface corresponding to knots.
[in,out] | params | - A matrix for keeping of points on surface corresponding to control points. |
Implements MbPolySurface.
|
overridevirtual |
Calculation of point on surface corresponding to control point.
Calculation of point on surface corresponding to control point.
[in] | uIndex | - A column of control point. |
[in] | vIndex | - A row of control point. |
[in,out] | point | - A point on surface. |
Implements MbPolySurface.
|
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.
[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. |
Implements MbPolySurface.
|
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.
[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. |
Implements MbPolySurface.
|
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.
[in] | rowId | - Index of the first deleted column. |
[in] | num | - Count of deleted columns. |
[in] | absEps | - Approximation tolerance. |
Implements MbPolySurface.
|
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.
[in] | rowId | - Index of the first deleted row. |
[in] | num | - Count of deleted rows. |
[in] | absEps | - Approximation tolerance. |
Implements MbPolySurface.
|
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.
[in] | newDegree | - New surface degree by u. |
Implements MbPolySurface.
|
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.
[in] | newDegree | - New surface degree by v. |
Implements MbPolySurface.
|
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.
[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. |
Implements MbPolySurface.
bool MbSplineSurface::ApproxSurfWithoutMultKnots | ( | ) |
Rebuild a surface by the function NurbsSurface without multiple knots.
Rebuild a surface by the function NurbsSurface without multiple knots.
|
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.
[in,out] | params | - A matrix of control points with specifying of visibility of each control point for editing. |
Implements MbPolySurface.
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.
[in] | oldPoints | - A matrix of control points. |
[in,out] | newPoints | - A matrix of control points after the correction of invisible points location. |
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.
[in] | clm | - Whether to clamp a knot vector. |
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.
[in] | clm | - Whether to clamp a knot vector. |
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.
[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. |
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.
[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. |
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.
[in] | curve | - A given space curve. |
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.
[in] | direction | - Direction. |
[out] | collinearRects | - Found regions inside the domain of a surface. |