Rhino C++ API
8.13
|
#include <opennurbs_nurbssurface.h>
Public Member Functions | |
ON_NurbsSurface () | |
ON_NurbsSurface (const ON_BezierSurface &bezier_surface) | |
ON_NurbsSurface (const ON_NurbsSurface &nurbs_surface) | |
ON_NurbsSurface (int dimension, bool bIsRational, int order0, int order1, int cv_count0, int cv_count1) | |
virtual | ~ON_NurbsSurface () |
bool | ChangeDimension (int desired_dimension) |
bool | ChangeSurfaceSeam (int dir, double t) |
bool | ClampEnd (int dir, int end) |
bool | CollapseSide (int side, ON_3dPoint point=ON_3dPoint::UnsetPoint) |
const ON_4dPoint | ControlPoint (int i, int j) const |
const ON_2dex | ControlPointSpans (int dir, int control_point_index) const |
Get the indices of the spans where the specified control point is active. More... | |
const ON_Interval | ControlPointSupport (int dir, int control_point_index) const |
Get the interval in the surface's domain where the specified control point is active (helps determine the value of the surface). Put another way, if ControlPointSupport(0,i).Contains(u) or ControlPointSupport(1,j).Contains(v) is false, then surface->PointAt(u,v) does not depend on the location of CV(i,j). More... | |
double | ControlPolygonLength (int dir) const |
Interface. More... | |
bool | ConvertSpanToBezier (int span_index0, int span_index1, ON_BezierSurface &bezier_surface) const |
bool | Create (int dim, bool is_rat, int order0, int order1, int cv_count0,) |
int | CreateConeSurface (ON_3dPoint apex_point, const ON_Curve &curve, const ON_Interval *curve_domain=nullptr) |
ON_Mesh * | CreateMesh (const ON_MeshParameters &mp, ON_Mesh *mesh=nullptr) const override |
ON_Surface overrides. More... | |
virtual int | CreateRuledSurface (const ON_Curve &curveA, const ON_Curve &curveB, const ON_Interval *curveA_domain=nullptr, const ON_Interval *curveB_domain=nullptr) |
double * | CV (int i, int j) const |
double * | CV (ON_2dex cvdex) const |
double * | CV (ON_2udex cvdex) const |
int | CVCount (int) const |
int | CVCount (void) const |
int | CVSize (void) const |
ON::point_style | CVStyle () const |
ON__UINT32 | DataCRC (ON__UINT32 current_remainder) const override |
virtual ON_Object::DataCRC override More... | |
int | Degree (int) const override |
void | Destroy () |
int | Dimension () const override |
ON_Geometry overrides. More... | |
ON_Interval | Domain (int) const override |
void | Dump (ON_TextLog &) const override |
for debugging More... | |
void | EmergencyDestroy () |
call if memory used by this class becomes invalid More... | |
bool | Evaluate (double, double, int, int, double *, int=0, int *=0) const override |
work horse evaluator More... | |
bool | Extend (int dir, const ON_Interval &domain) override |
bool | GetBBox (double *boxmin, double *boxmax, bool bGrowBox=false) const override |
virtual ON_Geometry GetBBox override More... | |
double | GetCubicBezierApproximation (double max_deviation, class ON_BezierSurface &bezierSurface) const |
double | GetCubicBezierApproximation (double max_deviation, ON_3dPoint bezCV[4][4]) const |
bool | GetCV (int i, int j, ON::point_style, double *cv) const |
bool | GetCV (int i, int j, ON_3dPoint &cv) const |
bool | GetCV (int i, int j, ON_4dPoint &cv) const |
bool | GetGrevilleAbcissae (int dir, double *g) const |
bool | GetNextDiscontinuity (int dir, ON::continuity c, double t0, double t1, double *t, int *hint=nullptr, int *dtype=nullptr, double cos_angle_tolerance=ON_DEFAULT_ANGLE_TOLERANCE_COSINE, double curvature_tolerance=ON_SQRT_EPSILON) const override |
int | GetNurbForm (ON_NurbsSurface &, double=0.0) const override |
NOTE: some compilers believe the above is an override and msvc/others do not. More... | |
bool | GetParameterTolerance (int, double, double *, double *) const override |
bool | GetSpanVector (int, double *) const override |
bool | GetSurfaceSize (double *width, double *height) const override |
double | GrevilleAbcissa (int dir, int cv_index) const |
int | HasNurbForm () const override |
bool | IncreaseDegree (int dir, int desired_degree) |
void | Initialize (void) |
zeros all fields More... | |
bool | InsertKnot (int dir, double knot_value, int knot_multiplicity=1) |
bool | IsClamped (int dir, int end=2) const |
bool | IsClosed (int) const override |
bool | IsContinuous (ON::continuity c, double s, double t, int *hint=nullptr, double point_tolerance=ON_ZERO_TOLERANCE, double d1_tolerance=ON_ZERO_TOLERANCE, double d2_tolerance=ON_ZERO_TOLERANCE, double cos_angle_tolerance=ON_DEFAULT_ANGLE_TOLERANCE_COSINE, double curvature_tolerance=ON_SQRT_EPSILON) const override |
bool | IsDeformable () const override |
virtual ON_Geometry::IsDeformable() override More... | |
bool | IsDuplicate (const ON_NurbsSurface &other, bool bIgnoreParameterization, double tolerance=ON_ZERO_TOLERANCE) const |
bool | IsMorphable () const override |
virtual ON_Geometry override More... | |
bool | IsNatural (int dir, int end=2) const |
bool | IsNatural (int dir, size_t t_count, const double *t) const |
ON_Curve * | IsoCurve (int dir, double c) const override |
bool | IsPeriodic (int) const override |
periodic.) More... | |
bool | IsPlanar (ON_Plane *plane=nullptr, double tolerance=ON_ZERO_TOLERANCE) const override |
bool | IsRational (void) const |
bool | IsSingular (int) const override |
bool | IsValid (class ON_TextLog *text_log=nullptr) const override |
ON_Object overrides. More... | |
const double * | Knot (int dir) const |
double | Knot (int dir, int knot_index) const |
int | KnotCount (int dir) const |
int | KnotMultiplicity (int dir, int knot_index) const |
bool | MakeClampedUniformKnotVector (int dir, double delta=1.0) |
bool | MakeDeformable () override |
virtual ON_Geometry::MakeDeformable() override More... | |
bool | MakeNonRational () |
bool | MakePeriodicUniformKnotVector (int dir, double delta=1.0) |
bool | MakeRational () |
bool | Morph (const ON_SpaceMorph &morph) override |
virtual ON_Geometry override More... | |
ON_Surface * | Offset (double offset_distance, double tolerance, double *max_deviation=nullptr) const |
ON_NurbsSurface & | operator= (const ON_BezierSurface &bezier_surface) |
ON_NurbsSurface & | operator= (const ON_NurbsSurface &) |
int | Order (int) const |
bool | Read (ON_BinaryArchive &) override |
bool | RemoveKnots (int dir, int i0, int i1) |
bool | ReserveCVCapacity (int cv_array_capacity) |
bool | ReserveKnotCapacity (int dir, int knot_array_capacity) |
Tools for managing CV and knot memory. More... | |
bool | Reverse (int) override |
bool | SetClampedGrevilleKnotVector (int dir, int g_stride, const double *g) |
bool | SetCV (int i, int j, const ON_3dPoint &cv) |
bool | SetCV (int i, int j, const ON_4dPoint &cv) |
bool | SetCV (int i, int j, ON::point_style, const double *cv) |
bool | SetCVColumn (int col_index, const ON_3dPoint &cv) |
bool | SetCVColumn (int col_index, int v_stride, const double *v) |
bool | SetCVRow (int row_index, const ON_3dPoint &cv) |
bool | SetCVRow (int row_index, int v_stride, const double *v) |
bool | SetDomain (int dir, double t0, double t1) override |
bool | SetKnot (int dir, int knot_index, double knot_value) |
bool | SetPeriodicGrevilleKnotVector (int dir, int g_stride, const double *g) |
bool | SetWeight (int i, int j, double weight) |
unsigned int | SizeOf () const override |
virtual ON_Object::SizeOf override More... | |
int | SpanCount (int) const override |
number of smooth spans in curve More... | |
bool | Split (int dir, double c, ON_Surface *&west_or_south_side, ON_Surface *&east_or_north_side) const override |
double | SuperfluousKnot (int dir, int end) const |
bool | SwapCoordinates (int, int) override |
bool | TensorProduct (const ON_NurbsCurve &, const ON_NurbsCurve &, ON_TensorProduct &) |
Creates a tensor product nurbs surface with srf(s,t) = T(A(s),B(t));. More... | |
bool | Transform (const ON_Xform &) override |
bool | Transpose () override |
transpose surface parameterization (swap "s" and "t") More... | |
bool | Trim (int dir, const ON_Interval &domain) override |
double | Weight (int i, int j) const |
bool | Write (ON_BinaryArchive &) const override |
bool | ZeroCVs () |
zeros all CVs (any weights set to 1); More... | |
Public Member Functions inherited from ON_Surface | |
ON_Surface () | |
ON_Surface (const ON_Surface &) | |
virtual | ~ON_Surface () |
bool | AreaMassProperties (class ON_MassProperties &mp, bool bArea=true, bool bFirstMoments=true, bool bSecondMoments=true, bool bProductMoments=true, double rel_tol=1.0e-6, double abs_tol=1.0e-6) const |
ON_Brep * | BrepForm (ON_Brep *brep=nullptr) const override |
virtual ON_SurfaceTree * | CreateSurfaceTree () const |
void | DestroyRuntimeCache (bool bDelete=true) override |
virtual ON_Object::DestroyRuntimeCache override More... | |
void | DestroySurfaceTree () |
virtual ON_Surface * | DuplicateSurface () const |
bool | Ev1Der (double u, double v, ON_3dPoint &point, ON_3dVector &du, ON_3dVector &dv, int quadrant=0, int *hint=0) const |
bool | Ev2Der (double u, double v, ON_3dPoint &point, ON_3dVector &du, ON_3dVector &dv, ON_3dVector &duu, ON_3dVector &duv, ON_3dVector &dvv, int quadrant=0, int *hint=0) const |
bool | EvaluatePoint (const class ON_ObjRef &objref, ON_3dPoint &P) const override |
virtual ON_Geometry override More... | |
bool | EvNormal (double u, double v, ON_3dPoint &point, ON_3dVector &du, ON_3dVector &dv, ON_3dVector &normal, int=0, int *=0) const |
bool | EvNormal (double u, double v, ON_3dPoint &point, ON_3dVector &normal, int quadrant=0, int *hint=0) const |
bool | EvNormal (double u, double v, ON_3dVector &normal, int quadrant=0, int *hint=0) const |
bool | EvPoint (double u, double v, ON_3dPoint &point, int quadrant=0, int *hint=0) const |
bool | FrameAt (double u, double v, ON_Plane &frame) const |
virtual bool | GetClosestPoint (const ON_3dPoint &P, double *s, double *t, double maximum_distance=0.0, const ON_Interval *sdomain=0, const ON_Interval *tdomain=0) const |
bool | GetDomain (int dir, double *t0, double *t1) const |
int | GetIsoPushupDirection (const ON_Curve &curve_2d, double tolerance, const ON_Interval *curve_2d_subdomain, double *c, ON_Interval *c3_dom) const |
virtual bool | GetLocalClosestPoint (const ON_3dPoint &, double, double, double *, double *, const ON_Interval *=nullptr, const ON_Interval *=nullptr) const |
virtual bool | GetNurbFormParameterFromSurfaceParameter (double surface_s, double surface_t, double *nurbs_s, double *nurbs_t) const |
bool | GetSilhouette (const ON_Interval *udom, const ON_Interval *vdom, const ON_SilhouetteParameters parameters, const ON_PlaneEquation *clipping_planes, size_t clipping_plane_count, ON_ClassArray< ON_SIL_EVENT > &silhouettes, ON_ProgressReporter *progress, ON_Terminator *terminator) const |
virtual bool | GetSpanVectorIndex (int dir, double t, int side, int *span_vector_index, ON_Interval *span_interval) const |
ON_Curve * | GetSurfaceParameterFromNurbFormParameter (const ON_Curve &curve3d, const ON_Curve &ns_curve2dX, double fit_tolerance) const |
virtual bool | GetSurfaceParameterFromNurbFormParameter (double nurbs_s, double nurbs_t, double *surface_s, double *surface_t) const |
bool | HasBrepForm () const override |
int | IntersectPlane (ON_PlaneEquation plane_equation, ON_ClassArray< ON_SSX_EVENT > &x, double intersection_tolerance=0.0, double overlap_tolerance=0.0, double fitting_tolerance=0.0, const ON_Interval *surface_udomain=0, const ON_Interval *surface_vdomain=0) const |
int | IntersectSurface (const ON_Surface *surfaceB, ON_ClassArray< ON_SSX_EVENT > &x, double intersection_tolerance=0.0, double overlap_tolerance=0.0, double fitting_tolerance=0.0, const ON_Interval *surfaceA_udomain=0, const ON_Interval *surfaceA_vdomain=0, const ON_Interval *surfaceB_udomain=0, const ON_Interval *surfaceB_vdomain=0) const |
int | IsAtSeam (double s, double t) const |
bool | IsAtSingularity (double s, double t, bool bExact=true) const |
bool | IsCone (ON_Cone *cone=nullptr, double tolerance=ON_ZERO_TOLERANCE) const |
bool | IsCylinder (ON_Cylinder *cylinder=nullptr, double tolerance=ON_ZERO_TOLERANCE) const |
virtual ISO | IsIsoparametric (const ON_BoundingBox &bbox) const |
virtual ISO | IsIsoparametric (const ON_Curve &curve, const ON_Interval *curve_domain=nullptr) const |
bool | IsSolid () const |
bool | IsSphere (ON_Sphere *sphere=nullptr, double tolerance=ON_ZERO_TOLERANCE) const |
bool | IsTorus (ON_Torus *torus=nullptr, double tolerance=ON_ZERO_TOLERANCE) const |
ON_3dVector | NormalAt (double, double) const |
ON_NurbsSurface * | NurbsSurface (ON_NurbsSurface *pNurbsSurface=nullptr, double tolerance=0.0, const ON_Interval *s_subdomain=nullptr, const ON_Interval *t_subdomain=nullptr) const |
ON::object_type | ObjectType () const override |
override ON_Object::ObjectType() - returns ON::surface_object More... | |
ON_Surface & | operator= (const ON_Surface &) |
ON_3dPoint | PointAt (double, double) const |
simple evaluation interface - no error handling More... | |
virtual ON_Curve * | Pullback (const ON_Curve &curve_3d, double tolerance, const ON_Interval *curve_3d_subdomain=nullptr, ON_3dPoint start_uv=ON_3dPoint::UnsetPoint, ON_3dPoint end_uv=ON_3dPoint::UnsetPoint, ON_FitResult *rc=0) const |
virtual ON_Curve * | Pushup (const ON_Curve &curve_2d, double tolerance, const ON_Interval *curve_2d_subdomain=nullptr, ON_FitResult *rc=0) const |
bool | SetDomain (int dir, ON_Interval domain) |
unsigned int | SizeOf () const override |
virtual ON_Object::SizeOf override More... | |
const ON_SimpleArray< double > | SpanVector (int dir) const |
The surface's span vectors are a stricltly monotone increasing lists of doubles that specify the rectangles in the domain where the surface is C-infinity. More... | |
const ON_SurfaceTree * | SurfaceTree () const |
bool | VolumeMassProperties (class ON_MassProperties &mp, bool bVolume=true, bool bFirstMoments=true, bool bSecondMoments=true, bool bProductMoments=true, ON_3dPoint base_point=ON_3dPoint::UnsetPoint, double rel_tol=1.0e-6, double abs_tol=1.0e-6) const |
Public Member Functions inherited from ON_Geometry | |
ON_Geometry ()=default | |
ON_Geometry (const ON_Geometry &)=default | |
~ON_Geometry ()=default | |
ON_BoundingBox | BoundingBox () const |
virtual void | ClearBoundingBox () |
virtual ON_COMPONENT_INDEX | ComponentIndex () const |
bool | GetBoundingBox (ON_3dPoint &bbox_min, ON_3dPoint &bbox_max, bool bGrowBox=false) const |
bool | GetBoundingBox (ON_BoundingBox &bbox, bool bGrowBox=false) const |
virtual bool | GetTightBoundingBox (class ON_BoundingBox &tight_bbox, bool bGrowBox=false, const class ON_Xform *xform=nullptr) const |
virtual bool | Morph (const class ON_SpaceMorph &morph) |
ON_Geometry & | operator= (const ON_Geometry &)=default |
bool | Rotate (double rotation_angle, const ON_3dVector &rotation_axis, const ON_3dPoint &rotation_center) |
bool | Rotate (double sin_angle, double cos_angle, const ON_3dVector &rotation_axis, const ON_3dPoint &rotation_center) |
bool | Scale (double scale_factor) |
const ON_BoundingBox | TightBoundingBox () const |
bool | Translate (const ON_3dVector &translation_vector) |
Public Member Functions inherited from ON_Object | |
ON_Object () ON_NOEXCEPT | |
ON_Object (const ON_Object &) | |
virtual | ~ON_Object () |
virtual ON_AggregateComponentStatus | AggregateComponentStatus () const |
bool | AttachUserData (class ON_UserData *pUserData) |
unsigned int | ClearAllComponentStates () const |
virtual unsigned int | ClearComponentStates (ON_COMPONENT_INDEX component_index, ON_ComponentStatus states_to_clear) const |
virtual unsigned int | ClearComponentStates (ON_ComponentStatus states_to_clear) const |
void | CopyUserData (const ON_Object &source_object) |
unsigned int | CopyUserData (const ON_Object &source_object, ON_UUID source_userdata_item_id, ON_Object::UserDataConflictResolution userdata_conflict_resolution) |
virtual bool | DeleteComponents (const ON_COMPONENT_INDEX *ci_list, size_t ci_count) |
bool | DetachUserData (class ON_UserData *pUserData) |
void | EmergencyDestroy () |
class ON_UserData * | FirstUserData () const |
virtual unsigned int | GetComponentsWithSetStates (ON_ComponentStatus states_filter, bool bAllEqualStates, ON_SimpleArray< ON_COMPONENT_INDEX > &components) const |
class ON_UserData * | GetUserData (const ON_UUID &userdata_uuid) const |
bool | GetUserString (const wchar_t *key, ON_wString &string_value) const |
int | GetUserStringKeys (ON_ClassArray< ON_wString > &user_string_keys) const |
int | GetUserStrings (ON_ClassArray< ON_UserString > &user_strings) const |
bool | IsCorrupt (bool bRepair, bool bSilentError, class ON_TextLog *text_log) const |
bool | IsKindOf (const ON_ClassId *pClassId) const |
virtual void | MarkAggregateComponentStatusAsNotCurrent () const |
virtual void | MemoryRelocate () |
virtual ON_UUID | ModelObjectId () const |
void | MoveUserData (ON_Object &source_object) |
unsigned int | MoveUserData (ON_Object &source_object, ON_UUID source_userdata_item_id, ON_Object::UserDataConflictResolution userdata_conflict_resolution, bool bDeleteAllSourceItems) |
ON_Object & | operator= (const ON_Object &) |
void | PurgeUserData () |
virtual unsigned int | SetComponentStates (ON_COMPONENT_INDEX component_index, ON_ComponentStatus states_to_set) const |
virtual unsigned int | SetComponentStatus (ON_COMPONENT_INDEX component_index, ON_ComponentStatus status_to_copy) const |
bool | SetUserString (const wchar_t *key, const wchar_t *string_value) |
int | SetUserStrings (int count, const ON_UserString *user_strings, bool bReplace) |
bool | ThisIsNullptr (bool bSilentError) const |
void | TransformUserData (const class ON_Xform &xform) |
virtual bool | UpdateReferencedComponents (const class ON_ComponentManifest &source_manifest, const class ON_ComponentManifest &destination_manifest, const class ON_ManifestMap &manifest_map) |
int | UserStringCount () const |
Static Public Member Functions | |
static class ON_NurbsSurface * | CreateHermiteSurface (const ON_SimpleArray< double > &u_Parameters, const ON_SimpleArray< double > &v_Parameters, const ON_ClassArray< ON_SimpleArray< ON_3dPoint >> &GridPoints, const ON_ClassArray< ON_SimpleArray< ON_3dVector >> &u_Tangents, const ON_ClassArray< ON_SimpleArray< ON_3dVector >> &v_Tangents, const ON_ClassArray< ON_SimpleArray< ON_3dVector >> &TwistVectors, class ON_NurbsSurface *hermite_surface=0) |
static ON_NurbsSurface * | New () |
static ON_NurbsSurface * | New (const ON_BezierSurface &bezier_surface) |
static ON_NurbsSurface * | New (const ON_NurbsSurface &nurbs_surface) |
static ON_NurbsSurface * | New (int dimension, bool bIsRational, int order0, int order1, int cv_count0, int cv_count1) |
Static Public Member Functions inherited from ON_Surface | |
static class ON_NurbsSurface * | CreateCubicLoft (int curve_count, const ON_Curve *const *curve_list, double k, int is_closed=0, ON::cubic_loft_end_condition start_shape=ON::cubic_loft_ec_quadratic, ON::cubic_loft_end_condition end_shape=ON::cubic_loft_ec_quadratic, class ON_NurbsSurface *nurbs_surface=0) |
static class ON_NurbsSurface * | CreateLinearLoft (int curve_count, const ON_Curve *const *curve_list, double k, int is_closed=0, class ON_NurbsSurface *nurbs_surface=0) |
Public Attributes | |
double * | m_cv |
int | m_cv_capacity |
int | m_cv_count [2] |
number of control vertices ( >= order ) More... | |
int | m_cv_stride [2] |
control vertex net memory More... | |
int | m_dim |
< ON_COMPILING_OPENNURBS More... | |
int | m_is_rat |
double * | m_knot [2] |
int | m_knot_capacity [2] |
knot vector memory More... | |
int | m_order [2] |
order = degree+1 (>=2) More... | |
Additional Inherited Members | |
Public Types inherited from ON_Surface | |
enum | ISO { not_iso = 0, x_iso = 1, y_iso = 2, W_iso = 3, S_iso = 4, E_iso = 5, N_iso = 6, iso_count = 7 } |
pure virtual class for surface objects More... | |
Public Types inherited from ON_Object | |
enum | UserDataConflictResolution : unsigned char { UserDataConflictResolution::destination_object = 0, UserDataConflictResolution::source_object = 1, UserDataConflictResolution::source_copycount_gt = 2, UserDataConflictResolution::source_copycount_ge = 3, UserDataConflictResolution::destination_copycount_gt = 4, UserDataConflictResolution::destination_copycount_ge = 5, UserDataConflictResolution::delete_item = 6 } |
Static Public Attributes inherited from ON_Geometry | |
const static ON_Geometry | Unset |
Protected Member Functions inherited from ON_Surface | |
ON_Curve * | PullbackCurveProxy (const ON_CurveProxy &curveproxy_3d, double tolerance, const ON_Interval *curve_3d_subdomain, ON_3dPoint start_uv, ON_3dPoint end_uv, ON_FitResult *rc) const |
Helper for ON_Surface::Pullback overrides that handles "real" curve issues. More... | |
ON_Curve * | PullbackPolyCurve (const ON_PolyCurve &polycurve_3d, double tolerance, const ON_Interval *curve_3d_subdomain, ON_3dPoint start_uv, ON_3dPoint end_uv, ON_FitResult *rc) const |
ON_Curve * | PushupCurveProxy (const ON_CurveProxy &curveproxy_2d, double tolerance, const ON_Interval *curve_2d_subdomain, ON_FitResult *rc) const |
Helper for ON_Surface::Pushup overrides that handles "real" curve issues. More... | |
ON_Curve * | PushupPolyCurve (const ON_PolyCurve &polycurve_2d, double tolerance, const ON_Interval *curve_2d_subdomain, ON_FitResult *rc) const |
ON_NurbsSurface::ON_NurbsSurface | ( | ) |
ON_NurbsSurface::ON_NurbsSurface | ( | const ON_NurbsSurface & | nurbs_surface | ) |
ON_NurbsSurface::ON_NurbsSurface | ( | const ON_BezierSurface & | bezier_surface | ) |
ON_NurbsSurface::ON_NurbsSurface | ( | int | dimension, |
bool | bIsRational, | ||
int | order0, | ||
int | order1, | ||
int | cv_count0, | ||
int | cv_count1 | ||
) |
dimension | dimension (>= 1) |
bIsRational | true to make a rational NURBS |
order0 | order0 (>= 2) |
order1 | order1 (>= 2) |
cv_count0 | cv count0 (>= order0) |
cv_count1 | cv count1 (>= order1) |
|
virtual |
bool ON_NurbsSurface::ChangeDimension | ( | int | desired_dimension | ) |
desired_dimension | desired_dimension |
bool ON_NurbsSurface::ChangeSurfaceSeam | ( | int | dir, |
double | t | ||
) |
Description: If the surface is closed in direction dir, then modify it so that the seam is at parameter t in the dir direction. Parameters: dir - [in] must be 0 or 1 t - [in] dir parameter of seam, must have Domain(dir).Includes(t). The resulting surface domain in the dir direction will start at t. Returns: true if successful.
bool ON_NurbsSurface::ClampEnd | ( | int | dir, |
int | end | ||
) |
dir | dir 0 = "s", 1 = "t" |
end | 0 = clamp start, 1 = clamp end, 2 = clamp start and end |
bool ON_NurbsSurface::CollapseSide | ( | int | side, |
ON_3dPoint | point = ON_3dPoint::UnsetPoint |
||
) |
Description: Collapse the side of a NURBS surface to a single point. Parameters: side - [in] 0 = south west, 1 = south east, 2 = north east, 3 = north west point - [in] point to collapse to. If point is ON_3dPoint::UnsetPoint, the the current location of the start of the side is used. Returns: True if successful. Remarks: If the surface is rational, the weights of the side control points must be set before calling CollapseSide.
const ON_4dPoint ON_NurbsSurface::ControlPoint | ( | int | i, |
int | j | ||
) | const |
Parameters: i - [in] zero based control point index j - [in] zero based control point index Returns: Control point as an ON_4dPoint. Remarks: If i, j, or the nurbs surface is not valid, then ON_4dPoint::Nan is returned. If dim < 3, unused coordinates are zero. If dim >= 4, the first three coordinates are returned. If is_rat is false, the weight is 1.
const ON_2dex ON_NurbsSurface::ControlPointSpans | ( | int | dir, |
int | control_point_index | ||
) | const |
Get the indices of the spans where the specified control point is active.
dir | 0: first surface paramter 1: second surface parameter |
control_point_index | 0 <= control_point_index < control_point_count |
const ON_Interval ON_NurbsSurface::ControlPointSupport | ( | int | dir, |
int | control_point_index | ||
) | const |
Get the interval in the surface's domain where the specified control point is active (helps determine the value of the surface). Put another way, if ControlPointSupport(0,i).Contains(u) or ControlPointSupport(1,j).Contains(v) is false, then surface->PointAt(u,v) does not depend on the location of CV(i,j).
dir | 0: first surface paramter 1: second surface parameter |
control_point_index | If dir = 0, then this is the first index of the surface control point. If dir = 1, then this is the second index of the surface control point. 0 <= control_point_index < CVCount(dir). |
double ON_NurbsSurface::ControlPolygonLength | ( | int | dir | ) | const |
Interface.
Description: Get the maximum length of a nurb surface's control polygon rows and/or columns Parameters: dir - [in] 0 to get "u" direction length, 1 to get "v" direction length length - [out] maximum length of a polygon "row" in the specified direction Returns: true if successful.
bool ON_NurbsSurface::ConvertSpanToBezier | ( | int | span_index0, |
int | span_index1, | ||
ON_BezierSurface & | bezier_surface | ||
) | const |
Description: Convert a NURBS surface bispan into a bezier surface. Parameters: span_index0 - [in] Specifies the "u" span and must satisfy 0 <= span_index0 <= m_cv_count[0]-m_order[0] m_knot[0][span_index0+m_order[0]-2] < m_knot[0][span_index0+m_order[0]-1] span_index1 - [in] Specifies the "v" span and must satisfy 0 <= span_index1 <= m_cv_count[1]-m_order[1] m_knot[1][span_index1+m_order[1]-2] < m_knot[1][span_index1+m_order[1]-1] bezier_surface - [out] bezier surface returned here Returns: true if successful false if input is not valid
bool ON_NurbsSurface::Create | ( | int | dim, |
bool | is_rat, | ||
int | order0, | ||
int | order1, | ||
int | cv_count0 | ||
) |
dim | dimension (>= 1) |
is_rat | true to make a rational NURBS |
order0 | order0 (>= 2) |
order1 | order1 (>= 2) |
cv_count0 | cv count0 (>= order0) int cv_count1 ///< cv count1 (>= order1) |
int ON_NurbsSurface::CreateConeSurface | ( | ON_3dPoint | apex_point, |
const ON_Curve & | curve, | ||
const ON_Interval * | curve_domain = nullptr |
||
) |
Description: Create a cone surface from a curve to a point. Parameters: apex_point - [in] curve - [in] curve_domain - [in] if not nullptr, then this is a subdomain of curve to use for the ruled surface. Returns: @untitled table 0 failure 1 success - parameterization is exact 2 success - parameterization is not exact Remarks: The ruling parameter is the second surface parameter and it is in the interval [0,1]. The true cone surface has parameterization srf(s,t) = (1.0-t)*curve(s) + t*apex_point. The returned NURBS surface has parameterization srf(s,t) = (1.0-t)*nurbs_curve(s) + t*apex_point, where nurbs_curve is the NURBS form of curve. If the parameterization of nurbs_curve does not match the parameterization of curve, then 2 is returned.
|
static |
Description: Create an ON_NurbsSurface satisfying Hermite interpolation conditions at a grid of points. Parameters: u_Parameters v_Parameters - [in] Specifies the "u"( or "v") parameters defining the grid of parameter values u_Parameters.Count()>1 u_Parameters are strictly increasing, i.e. u_Parameters[i] < u_Parameters[i+1] same conditions on v_Parameters Let n = u_Parameters.Count() and m = v_Parameters.Count().
Each of GridPoints, u_Tangents, v_Tangents and TwistVectors are data on a grid of parameters. The size of each of these arrays must be n x m, s GridPoints.Count() == n and GridPoints[i].Count() == m.
GridPoints - [in] Grid of points to interpolate. u_Tangents - [in] Grid of Tangent directions ( actually first derivatives) to interpolate. v_Tangents - [in] Grid of Tangent directions ( actually first derivatives) to interpolate. TwistVectors - [in] Grid of twist vectors (mixed second partial derivative) to interpolate.
hermite_surface -[in] optional existing ON_NurbsSurface returned here. Returns: A hermite-surface satisfying interpolation conditions. Null if error. Notes: The Hermite surface, H, is bicubic on each patch [u_i, u_(i+1)] x [v_j, v_(j+1)] and satisfies H( u_i, v_j) = GridData[i][j] H_u(u_i, v_j) = u_Tangents[i][j] H_v(u_i, v_j) = v_Tangents[i][j] H_uv(u_i, v_j) = Twist[i][j]
|
overridevirtual |
ON_Surface overrides.
Reimplemented from ON_Surface.
|
virtual |
Description: Create a ruled surface from two curves. Parameters: curveA - [in] (must have same NURBS form knots as curveB) curveB - [in] (must have same NURBS form knots as curveA) curveA_domain - [in] if not nullptr, then this is a subdomain of curveA to use for the ruled surface. curveB_domain - [in] if not nullptr, then this is a subdomain of curveA to use for the ruled surface. Returns: @untitled table 0 failure 1 success - parameterization is exact 2 success - parameterization is not exact Remarks: The ruling parameter is the second surface parameter and it is in the interval [0,1]. The true ruled surface has parameterization srf(s,t) = (1.0-t)*curveA(s) + t*curveB(s). The returned NURBS surface has parameterization srf(s,t) = (1.0-t)*nurbs_curveA(s) + t*nurbs_curveB(s), where nurbs_curveX is the NURBS form of curveX. If the parameterization of nurbs_curveX does not match the parameterization of curveX, then 2 is returned.
double* ON_NurbsSurface::CV | ( | int | i, |
int | j | ||
) | const |
Description: Expert user function to get a pointer to control vertex memory. If you are not an expert user, please use ON_NurbsSurface::GetCV( ON_3dPoint& ) or ON_NurbsSurface::GetCV( ON_4dPoint& ). Parameters: i - [in] (0 <= i < m_cv_count[0]) j - [in] (0 <= j < m_cv_count[1]) Returns: Pointer to control vertex. Remarks: If the NURBS surface is rational, the format of the returned array is a homogeneous rational point with length m_dim+1. If the NURBS surface is not rational, the format of the returned array is a nonrational euclidean point with length m_dim. See Also ON_NurbsSurface::CVStyle ON_NurbsSurface::GetCV ON_NurbsSurface::Weight
double* ON_NurbsSurface::CV | ( | ON_2dex | cvdex | ) | const |
double* ON_NurbsSurface::CV | ( | ON_2udex | cvdex | ) | const |
int ON_NurbsSurface::CVCount | ( | int | ) | const |
int ON_NurbsSurface::CVCount | ( | void | ) | const |
int ON_NurbsSurface::CVSize | ( | void | ) | const |
ON::point_style ON_NurbsSurface::CVStyle | ( | ) | const |
Description: Returns the style of control vertices in the m_cv array. Returns: @untitled table ON::not_rational m_is_rat is false ON::homogeneous_rational m_is_rat is true
|
overridevirtual |
virtual ON_Object::DataCRC override
Reimplemented from ON_Object.
|
overridevirtual |
Implements ON_Surface.
void ON_NurbsSurface::Destroy | ( | ) |
|
overridevirtual |
ON_Geometry overrides.
Reimplemented from ON_Geometry.
|
overridevirtual |
Implements ON_Surface.
|
overridevirtual |
for debugging
Reimplemented from ON_Object.
void ON_NurbsSurface::EmergencyDestroy | ( | ) |
call if memory used by this class becomes invalid
|
overridevirtual |
work horse evaluator
u | returns false if unable to evaluate |
v | evaluation parameters |
num_der | number of derivatives (>=0) |
array_stride | array stride (>=Dimension()) |
der_array | array of length stride*(ndir+1)*(ndir+2)/2 |
quadrant | optional - determines which quadrant to evaluate from 0 = default 1 from NE quadrant 2 from NW quadrant 3 from SW quadrant 4 from SE quadrant |
hint | optional - evaluation hint (int[2]) used to speed repeated evaluations |
Implements ON_Surface.
|
overridevirtual |
Description: Where possible, analytically extends surface to include domain. Parameters: dir - [in] 0 new Domain(0) will include domain. (the first surface parameter). 1 new Domain(1) will include domain. (the second surface parameter). domain - [in] if domain is not included in surface domain, surface will be extended so that its domain includes domain.
Will not work if surface is closed in direction dir. Original surface is identical to the restriction of the resulting surface to the original surface domain, Returns: true if successful.
Reimplemented from ON_Surface.
|
overridevirtual |
virtual ON_Geometry GetBBox override
Reimplemented from ON_Geometry.
double ON_NurbsSurface::GetCubicBezierApproximation | ( | double | max_deviation, |
class ON_BezierSurface & | bezierSurface | ||
) | const |
Description: Approximate the entire NURBS surface with a single nonrational cubic bezier surface. Typically, the NURBS surface has only a few bispans. Parameters: max_deviation - [in] If max_deviation >= 0.0, then the approximation is returned only if the deviation sample is <= max_deviation. bezierSurface - [out] Returns: ON_DBL_QNAN: no bezier surface is returned. If a bezier surface is returned, then the maximum deviation between the bezier surface this NURBS surface sampled at the Greville abcissa.
double ON_NurbsSurface::GetCubicBezierApproximation | ( | double | max_deviation, |
ON_3dPoint | bezCV[4][4] | ||
) | const |
Description: Approximate the entire NURBS surface with a single nonrational cubic bezier surface. Typically, the NURBS surface has only a few bispans. Parameters: max_deviation - [in] If max_deviation >= 0.0, then the approximation is returned only if the deviation sample is <= max_deviation. bezierSurface - [out] Returns: ON_DBL_QNAN: no bezier surface is returned. If a bezier surface is returned, then the maximum deviation between the bezier surface this NURBS surface sampled at the Greville abcissa.
bool ON_NurbsSurface::GetCV | ( | int | i, |
int | j, | ||
ON::point_style | , | ||
double * | cv | ||
) | const |
i | get a single control vertex |
j | CV index ( 0 <= i <= CVCount(0), 0 <= j <= CVCount(1) |
cv | array of length >= CVSize() |
bool ON_NurbsSurface::GetCV | ( | int | i, |
int | j, | ||
ON_3dPoint & | cv | ||
) | const |
i | get a single control vertex |
j | CV index ( 0 <= i <= CVCount(0), 0 <= j <= CVCount(1) |
cv | gets euclidean cv when NURBS is rational |
bool ON_NurbsSurface::GetCV | ( | int | i, |
int | j, | ||
ON_4dPoint & | cv | ||
) | const |
i | get a single control vertex |
j | CV index ( 0 <= i <= CVCount(0), 0 <= j <= CVCount(1) |
cv | gets homogeneous cv |
bool ON_NurbsSurface::GetGrevilleAbcissae | ( | int | dir, |
double * | g | ||
) | const |
dir | see ON_GetGrevilleAbcissa() for details dir |
g | g[cv count] |
|
overridevirtual |
Description: Search for a derivative, tangent, or curvature discontinuity. Parameters: dir - [in] If 0, then "u" parameter is checked. If 1, then the "v" parameter is checked. c - [in] type of continuity to test for. t0 - [in] Search begins at t0. If there is a discontinuity at t0, it will be ignored. This makes it possible to repeatedly call GetNextDiscontinuity and step through the discontinuities. t1 - [in] (t0 != t1) If there is a discontinuity at t1 is will be ignored unless c is a locus discontinuity type and t1 is at the start or end of the curve. t - [out] if a discontinuity is found, then *t reports the parameter at the discontinuity. hint - [in/out] if GetNextDiscontinuity will be called repeatedly, passing a "hint" with initial value *hint=0 will increase the speed of the search.
dtype - [out] if not nullptr, *dtype reports the kind of discontinuity found at *t. A value of 1 means the first derivative or unit tangent was discontinuous. A value of 2 means the second derivative or curvature was discontinuous. A value of 0 means the curve is not closed, a locus discontinuity test was applied, and t1 is at the start of end of the curve. cos_angle_tolerance - [in] default = cos(1 degree) Used only when c is ON::continuity::G1_continuous or ON::continuity::G2_continuous. If the cosine of the angle between two tangent vectors is <= cos_angle_tolerance, then a G1 discontinuity is reported. curvature_tolerance - [in] (default = ON_SQRT_EPSILON) Used only when c is ON::continuity::G2_continuous. If K0 and K1 are curvatures evaluated from above and below and |K0 - K1| > curvature_tolerance, then a curvature discontinuity is reported. Returns: Parametric continuity tests c = (C0_continuous, ..., G2_continuous):
true if a parametric discontinuity was found strictly between t0 and t1. Note well that all curves are parametrically continuous at the ends of their domains.
Locus continuity tests c = (C0_locus_continuous, ...,G2_locus_continuous):
true if a locus discontinuity was found strictly between t0 and t1 or at t1 is the at the end of a curve. Note well that all open curves (IsClosed()=false) are locus discontinuous at the ends of their domains. All closed curves (IsClosed()=true) are at least C0_locus_continuous at the ends of their domains.
Reimplemented from ON_Surface.
|
overridevirtual |
NOTE: some compilers believe the above is an override and msvc/others do not.
virtual ON_Surface::GetNurbForm() override. The ON_NurbsSurface version returns 1 and a copy of the ON_NurbsSurface.
Reimplemented from ON_Surface.
|
overridevirtual |
Reimplemented from ON_Surface.
|
overridevirtual |
Implements ON_Surface.
|
overridevirtual |
Description: Get an estimate of the size of the rectangle that would be created if the 3d surface where flattened into a rectangle. Parameters: width - [out] (corresponds to the first surface parameter) height - [out] (corresponds to the first surface parameter) Remarks: overrides virtual ON_Surface::GetSurfaceSize Returns: true if successful.
Reimplemented from ON_Surface.
double ON_NurbsSurface::GrevilleAbcissa | ( | int | dir, |
int | cv_index | ||
) | const |
dir | dir |
cv_index | index (0 <= index < CVCount(dir) |
|
overridevirtual |
virtual ON_Surface::HasNurbForm() override. The ON_NurbsSurface version returns 1.
Reimplemented from ON_Surface.
bool ON_NurbsSurface::IncreaseDegree | ( | int | dir, |
int | desired_degree | ||
) |
dir | dir 0 = "s", 1 = "t" |
desired_degree | desired_degree |
void ON_NurbsSurface::Initialize | ( | void | ) |
zeros all fields
bool ON_NurbsSurface::InsertKnot | ( | int | dir, |
double | knot_value, | ||
int | knot_multiplicity = 1 |
||
) |
dir | dir 0 = "s", 1 = "t" |
knot_value | value of knot |
knot_multiplicity | multiplicity of knot ( >= 1 and <= degree ) |
bool ON_NurbsSurface::IsClamped | ( | int | dir, |
int | end = 2 |
||
) | const |
Description: Test the knot vector to see if it is clamped. Parameters: dir: 0: first parameter 1: second parameter end: 0: test start 1: test end 2: test start and end.
|
overridevirtual |
CV = euclidean location of end CV, or surface is
Reimplemented from ON_Surface.
|
overridevirtual |
Description: Test continuity at a surface parameter value. Parameters: c - [in] continuity to test for s - [in] surface parameter to test t - [in] surface parameter to test hint - [in] evaluation hint point_tolerance - [in] if the distance between two points is greater than point_tolerance, then the surface is not C0. d1_tolerance - [in] if the difference between two first derivatives is greater than d1_tolerance, then the surface is not C1. d2_tolerance - [in] if the difference between two second derivatives is greater than d2_tolerance, then the surface is not C2. cos_angle_tolerance - [in] default = cos(1 degree) Used only when c is ON::continuity::G1_continuous or ON::continuity::G2_continuous. If the cosine of the angle between two normal vectors is <= cos_angle_tolerance, then a G1 discontinuity is reported. curvature_tolerance - [in] (default = ON_SQRT_EPSILON) Used only when c is ON::continuity::G2_continuous. If K0 and K1 are curvatures evaluated from above and below and |K0 - K1| > curvature_tolerance, then a curvature discontinuity is reported. Returns: true if the surface has at least the c type continuity at the parameter t. Remarks: Overrides virtual ON_Surface::IsContinuous
Reimplemented from ON_Surface.
|
overridevirtual |
virtual ON_Geometry::IsDeformable() override
Reimplemented from ON_Geometry.
bool ON_NurbsSurface::IsDuplicate | ( | const ON_NurbsSurface & | other, |
bool | bIgnoreParameterization, | ||
double | tolerance = ON_ZERO_TOLERANCE |
||
) | const |
Description: See if this and other are same NURBS geometry. Parameters: other - [in] other NURBS surface bIgnoreParameterization - [in] if true, parameterization and orientation are ignored. tolerance - [in] tolerance to use when comparing control points. Returns: true if curves are the same.
|
overridevirtual |
virtual ON_Geometry override
Reimplemented from ON_Geometry.
bool ON_NurbsSurface::IsNatural | ( | int | dir, |
int | end = 2 |
||
) | const |
Description: Test the side of a surface to see if it's natural (Zero 2nd derivative). Parameters: dir: 0: first parameter 1: second parameter end: 0: test start 1: test end 2: test start and end.
dir | determine if knot vector is clamped dir 0 = "s", 1 = "t" |
end | end to check: 0 = start, 1 = end, 2 = start and end |
bool ON_NurbsSurface::IsNatural | ( | int | dir, |
size_t | t_count, | ||
const double * | t | ||
) | const |
Description: Test a surface to see if it's natural (Zero 2nd derivative) on an iso curve. Parameters: dir: 0: first parameter 1: second parameter t_count - [in] t - [in] t[] is a list of parameters to check.
dir | determine if knot vector is clamped dir 0 = "s", 1 = "t" |
|
overridevirtual |
Description: Get isoparametric curve. Overrides virtual ON_Surface::IsoCurve. Parameters: dir - [in] 0 first parameter varies and second parameter is constant e.g., point on IsoCurve(0,c) at t is srf(t,c) 1 first parameter is constant and second parameter varies e.g., point on IsoCurve(1,c) at t is srf(c,t)
c - [in] value of constant parameter Returns: Isoparametric curve.
Reimplemented from ON_Surface.
|
overridevirtual |
|
overridevirtual |
Description: Test a surface to see if it is planar. Parameters: plane - [out] if not nullptr and true is returned, the plane parameters are filled in. tolerance - [in] tolerance to use when checking Returns: true if there is a plane such that the maximum distance from the surface to the plane is <= tolerance. Remarks: Overrides virtual ON_Surface::IsPlanar.
Reimplemented from ON_Surface.
bool ON_NurbsSurface::IsRational | ( | void | ) | const |
|
overridevirtual |
Reimplemented from ON_Surface.
|
overridevirtual |
ON_Object overrides.
Reimplemented from ON_Geometry.
const double* ON_NurbsSurface::Knot | ( | int | dir | ) | const |
dir | knot[] array dir 0 = "s", 1 = "t" |
double ON_NurbsSurface::Knot | ( | int | dir, |
int | knot_index | ||
) | const |
dir | dir 0 = "s", 1 = "t" |
knot_index | knot index ( >= 0 and < Order + CV_count - 2 ) |
int ON_NurbsSurface::KnotCount | ( | int | dir | ) | const |
dir | total number of knots in knot vector dir 0 = "s", 1 = "t" |
int ON_NurbsSurface::KnotMultiplicity | ( | int | dir, |
int | knot_index | ||
) | const |
dir | dir 0 = "s", 1 = "t" |
knot_index | knot index ( >= 0 and < Order + CV_count - 2 ) |
bool ON_NurbsSurface::MakeClampedUniformKnotVector | ( | int | dir, |
double | delta = 1.0 |
||
) |
Description: Make knot vector a clamped uniform knot vector based on the current values of m_order and m_cv_count. Does not change values of control vertices. Parameters: dir - [in] 0 = u knots, 1 = v knots delta - in knot spacing. Returns: true if successful. Remarks: Allocates m_knot[] if it is not big enough. See Also: ON_MakeClampedUniformKnotVector
|
overridevirtual |
virtual ON_Geometry::MakeDeformable() override
Reimplemented from ON_Geometry.
bool ON_NurbsSurface::MakeNonRational | ( | ) |
bool ON_NurbsSurface::MakePeriodicUniformKnotVector | ( | int | dir, |
double | delta = 1.0 |
||
) |
Description: Make knot vector a periodic uniform knot vector based on the current values of m_order and m_cv_count. Does not change values of control vertices. Parameters: dir - [in] 0 = u knots, 1 = v knots delta - in knot spacing. Returns: true if successful. Remarks: Allocates m_knot[] if it is not big enough. See Also: ON_MakePeriodicUniformKnotVector
bool ON_NurbsSurface::MakeRational | ( | ) |
|
override |
virtual ON_Geometry override
|
static |
Description: Use ON_NurbsSurface::New(...) instead of new ON_NurbsSurface(...) Returns: Pointer to an ON_NurbsSurface. Destroy by calling delete. Remarks: See static ON_Brep* ON_Brep::New() for details.
|
static |
|
static |
|
static |
|
virtual |
Description: Offset surface. Parameters: offset_distance - [in] offset distance tolerance - [in] Some surfaces do not have an exact offset that can be represented using the same class of surface definition. In that case, the tolerance specifies the desired accuracy. max_deviation - [out] If this parameter is not nullptr, the maximum deviation from the returned offset to the true offset is returned here. This deviation is zero except for cases where an exact offset cannot be computed using the same class of surface definition. Returns: Offset surface.
Reimplemented from ON_Surface.
ON_NurbsSurface& ON_NurbsSurface::operator= | ( | const ON_BezierSurface & | bezier_surface | ) |
Description: Set NURBS surface equal to bezier surface with domain [0,1]x[0,1]. Parameters: bezier_surface - [in]
ON_NurbsSurface& ON_NurbsSurface::operator= | ( | const ON_NurbsSurface & | ) |
int ON_NurbsSurface::Order | ( | int | ) | const |
|
overridevirtual |
Description: Low level archive writing tool used by ON_BinaryArchive::ReadObject(). Parameters: binary_archive - archive to read from Returns: Returns true if the read is successful. Remarks: Use ON_BinaryArchive::ReadObject() to read objects. This Read() function should read the objects definition back into its data members.
The default implementation of this virtual function returns false and does nothing.
Reimplemented from ON_Object.
bool ON_NurbsSurface::RemoveKnots | ( | int | dir, |
int | i0, | ||
int | i1 | ||
) |
Description: Remove knots from parameter 0 or parameter 1 knot vector. Adjust the remaining control points to maintain surface position as closely as possible. Parameters: dir - [in] 0 or 1. 0 for the first parameter, 1 for the second parameter. i0, i1 - [in] ( Order(dir)-2 < i0 < i1 <= CVCount(dir)-1 The knots from Knot(dir,i0) through Knot(dir,i1-1) will be removed. Returns: true if successful.
bool ON_NurbsSurface::ReserveCVCapacity | ( | int | cv_array_capacity | ) |
cv_array_capacity | returns false if allocation fails does not change m_order or m_cv_count minimum capacity of m_cv[] array |
bool ON_NurbsSurface::ReserveKnotCapacity | ( | int | dir, |
int | knot_array_capacity | ||
) |
Tools for managing CV and knot memory.
dir | returns false if allocation fails does not change m_order or m_cv_count dir 0 = "s", 1 = "t" |
knot_array_capacity | minimum capacity of m_knot[] array |
|
overridevirtual |
Implements ON_Surface.
bool ON_NurbsSurface::SetClampedGrevilleKnotVector | ( | int | dir, |
int | g_stride, | ||
const double * | g | ||
) |
dir | dir |
g_stride | g_stride |
g | g[], CVCount(dir) many Greville abcissa |
bool ON_NurbsSurface::SetCV | ( | int | i, |
int | j, | ||
const ON_3dPoint & | cv | ||
) |
i | set a single control vertex |
j | CV index ( 0 <= i <= CVCount(0), 0 <= j <= CVCount(1) |
cv | value of control vertex If NURBS is rational, weight will be set to 1. |
bool ON_NurbsSurface::SetCV | ( | int | i, |
int | j, | ||
const ON_4dPoint & | cv | ||
) |
i | set a single control vertex |
j | CV index ( 0 <= i <= CVCount(0), 0 <= j <= CVCount(1) |
cv | value of control vertex |
bool ON_NurbsSurface::SetCV | ( | int | i, |
int | j, | ||
ON::point_style | , | ||
const double * | cv | ||
) |
i | set a single control vertex |
j | CV index ( 0 <= i <= CVCount(0), 0 <= j <= CVCount(1) |
cv | value of control vertex |
bool ON_NurbsSurface::SetCVColumn | ( | int | col_index, |
const ON_3dPoint & | cv | ||
) |
col_index | Sets CV( col_index, * ) col_index >= 0 and < m_cv_count[0] |
cv | value of control vertex If NURBS is rational, weight will be set to 1. |
bool ON_NurbsSurface::SetCVColumn | ( | int | col_index, |
int | v_stride, | ||
const double * | v | ||
) |
col_index | Sets CV( col_index, * ) col_index >= 0 and < m_cv_count[0] |
v_stride | v stride |
v | v[] = values (same dim and is_rat as surface) |
bool ON_NurbsSurface::SetCVRow | ( | int | row_index, |
const ON_3dPoint & | cv | ||
) |
row_index | Sets CV( *, row_index ) row_index >= 0 and < m_cv_count[1] |
cv | value of control vertex If NURBS is rational, weight will be set to 1. |
bool ON_NurbsSurface::SetCVRow | ( | int | row_index, |
int | v_stride, | ||
const double * | v | ||
) |
row_index | Sets CV( *, row_index ) row_index >= 0 and < m_cv_count[1] |
v_stride | v stride |
v | v[] = values (same dim and is_rat as surface) |
|
overridevirtual |
dir | 0 sets first parameter's domain, 1 gets second parameter's domain |
Reimplemented from ON_Surface.
bool ON_NurbsSurface::SetKnot | ( | int | dir, |
int | knot_index, | ||
double | knot_value | ||
) |
dir | dir 0 = "s", 1 = "t" |
knot_index | knot index ( 0 to KnotCount - 1 ) |
knot_value | value for knot |
bool ON_NurbsSurface::SetPeriodicGrevilleKnotVector | ( | int | dir, |
int | g_stride, | ||
const double * | g | ||
) |
dir | dir |
g_stride | g_stride |
g | g[], Greville abcissa |
bool ON_NurbsSurface::SetWeight | ( | int | i, |
int | j, | ||
double | weight | ||
) |
Description: Set value of control vertex weight. If surface is non-rational, it will be converted to rational.
j | CV index ( 0 <= i <= CVCount(0), 0 <= j <= CVCount(1) |
weight | value of control point weight |
|
overridevirtual |
virtual ON_Object::SizeOf override
Reimplemented from ON_Object.
|
overridevirtual |
number of smooth spans in curve
Implements ON_Surface.
|
overridevirtual |
Description: Splits (divides) the surface into two parts at the specified parameter. Overrides virtual ON_Surface::Split.
Parameters: dir - [in] 0 The surface is split vertically. The "west" side is returned in "west_or_south_side" and the "east" side is returned in "east_or_north_side". 1 The surface is split horizontally. The "south" side is returned in "west_or_south_side" and the "north" side is returned in "east_or_north_side". c - [in] value of constant parameter in interval returned by Domain(dir) west_or_south_side - [out] west/south portion of surface returned here east_or_north_side - [out] east/north portion of surface returned here
Example:
ON_NurbsSurface srf = ...; int dir = 1; ON_NurbsSurface* south_side = 0; ON_NurbsSurface* north_side = 0; srf.Split( dir, srf.Domain(dir).Mid() south_side, north_side );
Reimplemented from ON_Surface.
double ON_NurbsSurface::SuperfluousKnot | ( | int | dir, |
int | end | ||
) | const |
dir | dir 0 = "s", 1 = "t" |
end | 0 = start, 1 = end |
|
overridevirtual |
Description: Swaps object coordinate values with indices i and j.
Parameters: i - [in] coordinate index j - [in] coordinate index
Remarks: The default implementation uses the virtual Transform() function to calculate the result. If you are creating an object where Transform() is slow, coordinate swapping will be frequently used, and coordinate swapping can be quickly accomplished, then override this function.
Example:
ON_Point point(7,8,9); point.SwapCoordinates(0,2); ///< point = (9,8,7)
Reimplemented from ON_Geometry.
bool ON_NurbsSurface::TensorProduct | ( | const ON_NurbsCurve & | , |
const ON_NurbsCurve & | , | ||
ON_TensorProduct & | |||
) |
Creates a tensor product nurbs surface with srf(s,t) = T(A(s),B(t));.
|
overridevirtual |
Description: Transforms the object.
Parameters: xform - [in] transformation to apply to object. If xform.IsSimilarity() is zero, then you may want to call MakeSquishy() before calling Transform.
Remarks: When overriding this function, be sure to include a call to ON_Object::TransformUserData() which takes care of transforming any ON_UserData that may be attached to the object.
See Also: ON_Geometry::IsDeformable();
Remarks: Classes derived from ON_Geometry should call ON_Geometry::Transform() to handle user data transformations and then transform their definition.
Reimplemented from ON_Geometry.
|
overridevirtual |
transpose surface parameterization (swap "s" and "t")
Implements ON_Surface.
|
overridevirtual |
Description: Removes the portions of the surface outside of the specified interval. Overrides virtual ON_Surface::Trim.
Parameters: dir - [in] 0 The domain specifies an sub-interval of Domain(0) (the first surface parameter). 1 The domain specifies an sub-interval of Domain(1) (the second surface parameter). domain - [in] interval of the surface to keep. If dir is 0, then the portions of the surface with parameters (s,t) satisfying s < Domain(0).Min() or s > Domain(0).Max() are trimmed away. If dir is 1, then the portions of the surface with parameters (s,t) satisfying t < Domain(1).Min() or t > Domain(1).Max() are trimmed away.
Reimplemented from ON_Surface.
double ON_NurbsSurface::Weight | ( | int | i, |
int | j | ||
) | const |
i | get value of control vertex weight |
j | CV index ( 0 <= i <= CVCount(0), 0 <= j <= CVCount(1) |
|
overridevirtual |
Description: Low level archive writing tool used by ON_BinaryArchive::WriteObject(). Parameters: binary_archive - archive to write to Returns: Returns true if the write is successful. Remarks: Use ON_BinaryArchive::WriteObject() to write objects. This Write() function should just write the specific definition of this object. It should not write and any chunk typecode or length information.
The default implementation of this virtual function returns false and does nothing.
Reimplemented from ON_Object.
bool ON_NurbsSurface::ZeroCVs | ( | ) |
zeros all CVs (any weights set to 1);
double* ON_NurbsSurface::m_cv |
Control points. If m_is_rat is false, then control point is
( CV(i)[0], ..., CV(i)[m_dim-1] ).
If m_is_rat is true, then the control point is stored in HOMOGENEOUS form and is
[ CV(i)[0], ..., CV(i)[m_dim] ].
int ON_NurbsSurface::m_cv_capacity |
If m_cv_capacity > 0, then m_cv[] is an array of at least m_cv_capacity doubles whose memory is managed by the ON_NurbsSurface class using rhmalloc(), onrealloc(), and rhfree(). If m_cv_capacity is 0 and m_cv is not nullptr, then m_cv[] is assumed to be big enough for any requested operation and m_cv[] is not deleted by the destructor.
int ON_NurbsSurface::m_cv_count[2] |
number of control vertices ( >= order )
int ON_NurbsSurface::m_cv_stride[2] |
control vertex net memory
The pointer to start of "CV[i]" is m_cv + i*m_cv_stride.
int ON_NurbsSurface::m_dim |
< ON_COMPILING_OPENNURBS
Implementation NOTE: These members are left "public" so that expert users may efficiently create NURBS curves using the default constructor and borrow the knot and CV arrays from their native NURBS representation. No technical support will be provided for users who access these members directly. If you can't get your stuff to work, then use the constructor with the arguments and the SetKnot() and SetCV() functions to fill in the arrays. (>=1)
int ON_NurbsSurface::m_is_rat |
1 for rational B-splines. (Control vertices use homogeneous form.) 0 for non-rational B-splines. (Control vertices do not have a weight coordinate.)
double* ON_NurbsSurface::m_knot[2] |
Knot vector. ( The knot vector has length m_order+m_cv_count-2. )
int ON_NurbsSurface::m_knot_capacity[2] |
knot vector memory
If m_knot_capacity > 0, then m_knot[] is an array of at least m_knot_capacity doubles whose memory is managed by the ON_NurbsSurface class using rhmalloc(), onrealloc(), and rhfree(). If m_knot_capacity is 0 and m_knot is not nullptr, then m_knot[] is assumed to be big enough for any requested operation and m_knot[] is not deleted by the destructor.
int ON_NurbsSurface::m_order[2] |
order = degree+1 (>=2)