#include <opennurbs_nurbssurface.h>
Public Member Functions | |
ON_NurbsSurface () | |
ON_NurbsSurface (const ON_NurbsSurface &nurbs_surface) | |
ON_NurbsSurface (const ON_BezierSurface &bezier_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) |
If the surface is closed in direction dir, then modify it so that the seam is at parameter t in the dir direction. More... | |
bool | ClampEnd (int dir, int end) |
bool | CollapseSide (int side, ON_3dPoint point=ON_3dPoint::UnsetPoint) |
Collapse the side of a NURBS surface to a single point. More... | |
const ON_4dPoint | ControlPoint (int i, int j) const |
double | ControlPolygonLength (int dir) const |
Interface. More... | |
bool | ConvertSpanToBezier (int span_index0, int span_index1, ON_BezierSurface &bezier_surface) const |
Convert a NURBS surface bispan into a bezier surface. More... | |
bool | Create (int dim, bool is_rat, int order0, int order1, int cv_count0, int cv_count1) |
int | CreateConeSurface (ON_3dPoint apex_point, const ON_Curve &curve, const ON_Interval *curve_domain=nullptr) |
Create a cone surface from a curve to a point. More... | |
virtual int | CreateRuledSurface (const ON_Curve &curveA, const ON_Curve &curveB, const ON_Interval *curveA_domain=nullptr, const ON_Interval *curveB_domain=nullptr) |
Create a ruled surface from two curves. More... | |
double * | CV (int i, int j) const |
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& ). More... | |
int | CVCount (int) const |
int | CVCount (void) const |
int | CVSize (void) const |
ON::point_style | CVStyle () const |
Returns the style of control vertices in the m_cv array. More... | |
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 |
Creates a text dump of the object. More... | |
void | EmergencyDestroy () |
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 |
Where possible, analytically extends surface to include domain. More... | |
bool | GetBBox (double *boxmin, double *boxmax, bool bGrowBox=false) const override |
virtual ON_Geometry GetBBox override More... | |
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 |
Search for a derivatitive, tangent, or curvature discontinuity. More... | |
int | GetNurbForm (ON_NurbsSurface &, double=0.0) const override |
Get a NURBS surface representation of this surface. More... | |
bool | GetParameterTolerance (int, double, double *, double *) const override |
bool | GetSpanVector (int, double *) const override |
bool | GetSurfaceSize (double *width, double *height) const override |
Get an estimate of the size of the rectangle that would be created if the 3d surface where flattened into a rectangle. More... | |
double | GrevilleAbcissa (int dir, int cv_index) const |
int | HasNurbForm () const override |
Is there a NURBS surface representation of this surface. More... | |
bool | IncreaseDegree (int dir, int desired_degree) |
void | Initialize (void) |
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 |
Test continuity at a surface parameter value. More... | |
bool | IsDeformable () const override |
virtual ON_Geometry::IsDeformable() override More... | |
bool | IsDuplicate (const ON_NurbsSurface &other, bool bIgnoreParameterization, double tolerance=ON_ZERO_TOLERANCE) const |
See if this and other are same NURBS geometry. More... | |
ON_Curve * | IsoCurve (int dir, double c) const override |
Get isoparametric curve. Overrides virtual ON_Surface::IsoCurve. More... | |
bool | IsPeriodic (int) const override |
bool | IsPlanar (ON_Plane *plane=nullptr, double tolerance=ON_ZERO_TOLERANCE) const override |
Test a surface to see if it is planar. More... | |
bool | IsRational (void) const |
bool | IsSingular (int) const override |
bool | IsValid (class ON_TextLog *text_log=nullptr) const override |
ON_Object overrides. More... | |
double | Knot (int dir, int knot_index) const |
const double * | Knot (int dir) const |
int | KnotCount (int dir) const |
int | KnotMultiplicity (int dir, int knot_index) const |
bool | MakeClampedUniformKnotVector (int dir, double delta=1.0) |
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. More... | |
bool | MakeDeformable () override |
virtual ON_Geometry::MakeDeformable() override More... | |
bool | MakeNonRational () |
bool | MakePeriodicUniformKnotVector (int dir, double delta=1.0) |
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. More... | |
bool | MakeRational () |
ON_Surface * | Offset (double offset_distance, double tolerance, double *max_deviation=nullptr) const |
Offset surface. More... | |
ON_NurbsSurface & | operator= (const ON_NurbsSurface &) |
ON_NurbsSurface & | operator= (const ON_BezierSurface &bezier_surface) |
Set NURBS surface equal to bezier surface with domain [0,1]x[0,1]. More... | |
int | Order (int) const |
bool | Read (ON_BinaryArchive &) override |
Low level archive writing tool used by ON_BinaryArchive::ReadObject(). More... | |
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, ON::point_style, const double *cv) |
bool | SetCV (int i, int j, const ON_3dPoint &cv) |
bool | SetCV (int i, int j, const ON_4dPoint &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 |
ON_Surface overrides. More... | |
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) |
Set value of control vertex weight. If surface is non-rational, it will be converted to rational. More... | |
unsigned int | SizeOf () const override |
virtual ON_Object::SizeOf override More... | |
int | SpanCount (int) const override |
bool | Split (int dir, double c, ON_Surface *&west_or_south_side, ON_Surface *&east_or_north_side) const override |
Splits (divides) the surface into two parts at the specified parameter. Overrides virtual ON_Surface::Split. More... | |
double | SuperfluousKnot (int dir, int end) const |
bool | SwapCoordinates (int, int) override |
Swaps object coordinate values with indices i and j. More... | |
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 |
Transforms the object. More... | |
bool | Transpose () override |
bool | Trim (int dir, const ON_Interval &domain) override |
Removes the portions of the surface outside of the specified interval. Overrides virtual ON_Surface::Trim. More... | |
double | Weight (int i, int j) const |
bool | Write (ON_BinaryArchive &) const override |
Low level archive writing tool used by ON_BinaryArchive::WriteObject(). More... | |
bool | ZeroCVs () |
Public Member Functions inherited from ON_Surface | |
ON_Surface () | |
ON_Surface (const ON_Surface &) | |
virtual | ~ON_Surface () |
ON_Brep * | BrepForm (ON_Brep *brep=nullptr) const override |
Overrides virtual ON_Geometry::HasBrepForm. Uses ON_Brep::Create( ON_Surface&* ) to create a brep form. The surface is copied for use in the returned brep. More... | |
void | DestroyRuntimeCache (bool bDelete=true) override |
virtual ON_Object::DestroyRuntimeCache override More... | |
void | DestroySurfaceTree () |
virtual ON_Surface * | DuplicateSurface () const |
Get a duplicate of the surface. More... | |
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 &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 | EvNormal (double u, double v, ON_3dPoint &point, ON_3dVector &du, ON_3dVector &dv, ON_3dVector &normal, int=0, int *=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 |
bool | GetDomain (int dir, double *t0, double *t1) const |
surface interface More... | |
virtual bool | GetNurbFormParameterFromSurfaceParameter (double surface_s, double surface_t, double *nurbs_s, double *nurbs_t) const |
virtual bool | GetSpanVectorIndex (int dir, double t, int side, int *span_vector_index, ON_Interval *span_interval) const |
virtual bool | GetSurfaceParameterFromNurbFormParameter (double nurbs_s, double nurbs_t, double *surface_s, double *surface_t) const |
bool | HasBrepForm () const override |
Overrides virtual ON_Geometry::HasBrepForm and returns true. Result: Returns true. More... | |
int | IsAtSeam (double s, double t) const |
Test if a surface parameter value is at a seam. More... | |
bool | IsAtSingularity (double s, double t, bool bExact=true) const |
Test if a surface parameter value is at a singularity. More... | |
bool | IsCone (ON_Cone *cone=nullptr, double tolerance=ON_ZERO_TOLERANCE) const |
Determine if the surface is a portion of a cone. More... | |
bool | IsCylinder (ON_Cylinder *cylinder=nullptr, double tolerance=ON_ZERO_TOLERANCE) const |
Determine if the surface is a portion of a cylinder. More... | |
virtual ISO | IsIsoparametric (const ON_Curve &curve, const ON_Interval *curve_domain=nullptr) const |
Test a 2d curve to see if it is iso parameteric in the surface's parameter space. More... | |
virtual ISO | IsIsoparametric (const ON_BoundingBox &bbox) const |
Test a 2d bounding box to see if it is iso parameteric in the surface's parameter space. More... | |
bool | IsSolid () const |
bool | IsSphere (ON_Sphere *sphere=nullptr, double tolerance=ON_ZERO_TOLERANCE) const |
Determine if the surface is a portion of a sphere. More... | |
bool | IsTorus (ON_Torus *torus=nullptr, double tolerance=ON_ZERO_TOLERANCE) const |
Determine if the surface is a portion of a torus. More... | |
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 |
Get a NURBS surface representation of this surface. More... | |
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... | |
bool | SetDomain (int dir, ON_Interval domain) |
unsigned int | SizeOf () const override |
virtual ON_Object::SizeOf override More... | |
Public Member Functions inherited from ON_Geometry | |
ON_Geometry ()=default | |
ON_Geometry (const ON_Geometry &)=default | |
~ON_Geometry ()=default | |
ON_BoundingBox | BoundingBox () const |
Get object's 3d axis aligned bounding box. More... | |
virtual void | ClearBoundingBox () |
Some objects cache bounding box information. If you modify an object, then call ClearBoundingBox() to inform the object that any cached bounding boxes are invalid. More... | |
virtual ON_COMPONENT_INDEX | ComponentIndex () const |
If this piece of geometry is a component in something larger, like an ON_BrepEdge in an ON_Brep, then this function returns the component index. More... | |
bool | GetBoundingBox (ON_BoundingBox &bbox, bool bGrowBox=false) const |
Get object's 3d axis aligned bounding box or the union of the input box with the object's bounding box. More... | |
bool | GetBoundingBox (ON_3dPoint &bbox_min, ON_3dPoint &bbox_max, bool bGrowBox=false) const |
Get corners of object's 3d axis aligned bounding box or the union of the input box with the object's bounding box. More... | |
virtual bool | GetTightBoundingBox (class ON_BoundingBox &tight_bbox, bool bGrowBox=false, const class ON_Xform *xform=nullptr) const |
Get tight bounding box. More... | |
ON_Geometry & | operator= (const ON_Geometry &)=default |
bool | Rotate (double sin_angle, double cos_angle, const ON_3dVector &rotation_axis, const ON_3dPoint &rotation_center) |
Rotates the object about the specified axis. A positive rotation angle results in a counter-clockwise rotation about the axis (right hand rule). More... | |
bool | Rotate (double rotation_angle, const ON_3dVector &rotation_axis, const ON_3dPoint &rotation_center) |
Rotates the object about the specified axis. A positive rotation angle results in a counter-clockwise rotation about the axis (right hand rule). More... | |
bool | Scale (double scale_factor) |
Scales the object by the specified facotor. The scale is centered at the origin. More... | |
bool | Translate (const ON_3dVector &translation_vector) |
Translates the object along the specified vector. More... | |
Public Member Functions inherited from ON_Object | |
ON_Object () ON_NOEXCEPT | |
ON_Object (const ON_Object &) | |
virtual | ~ON_Object () |
virtual ON_AggregateComponentStatus | AggregateComponentStatus () const |
Call whenever a component status setting is modifed by directly changing it on a component in a way that will result in any saved information about the parent object's aggretate component status becoming invalid. More... | |
bool | AttachUserData (class ON_UserData *pUserData) |
Attach user data to an object. More... | |
unsigned int | ClearAllComponentStates () const |
Set all active level component states to ON_ComponentStatus::NoneSet. More... | |
virtual unsigned int | ClearComponentStates (ON_ComponentStatus states_to_clear) const |
Clear the specified states on every component. More... | |
virtual unsigned int | ClearComponentStates (ON_COMPONENT_INDEX component_index, ON_ComponentStatus states_to_clear) const |
Clear states on an individual component. More... | |
unsigned int | CopyUserData (const ON_Object &source_object, ON_UUID source_userdata_item_id, ON_Object::UserDataConflictResolution userdata_conflict_resolution) |
Expert user tool that copies user data items with positive values of ON_UserData.m_userdata_copycount from source_object to "this. More... | |
void | CopyUserData (const ON_Object &source_object) |
Calls CopyUserData(source_object,ON_Object::UserDataConflictResolution::source_object). More... | |
virtual bool | DeleteComponents (const ON_COMPONENT_INDEX *ci_list, size_t ci_count) |
Delete the portions of the object identified in ci_list[]. More... | |
bool | DetachUserData (class ON_UserData *pUserData) |
Remove user data from an object. More... | |
void | EmergencyDestroy () |
Sets m_user_data_list = 0. More... | |
class ON_UserData * | FirstUserData () const |
User data is stored as a linked list of ON_UserData classes. FirstUserData gets the first item in the linked list. This is the most recent item attached using AttachUserData(). Remark: To iterate through all the user data on an object, call FirstUserData() and then use ON_UserData::Next() to traverse the list. More... | |
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 |
Get a pointer to user data. More... | |
bool | GetUserString (const wchar_t *key, ON_wString &string_value) const |
Get user string from the object. More... | |
int | GetUserStringKeys (ON_ClassArray< ON_wString > &user_string_keys) const |
Get a list of all user string keys on the object. More... | |
int | GetUserStrings (ON_ClassArray< ON_UserString > &user_strings) const |
Get a list of all user strings on the object. More... | |
bool | IsKindOf (const ON_ClassId *pClassId) const |
Low level tool to test if an object is derived from a specified class. More... | |
virtual void | MarkAggregateComponentStatusAsNotCurrent () const |
Call whenever a component status setting is modifed by directly changing it on a component in a way that will result in any saved information about the parent object's aggretate component status becoming invalid. More... | |
virtual void | MemoryRelocate () |
The MemoryRelocate() function is called when an object's location in memory is changed. For example, if an object resides in a chunk of memory that is grown by calling a realloc that has to allocate a new chunk and copy the contents of the old chunk to the new chunk, then the location of the object's memory changes. In practice this happens when classes derived from ON_Object are stored in dynamic arrays, like the default implementation of ON_ObjectArray<>'s that use realloc to grow the dynamic array. More... | |
virtual ON_UUID | ModelObjectId () const |
All objects in an opennurbs model have an id ( ON_Layer.m_layer_id, ON_Font.m_font_id, ON_Material.m_material_id, ON_3dmObjectAttributes.m_uuid ). More... | |
unsigned int | MoveUserData (ON_Object &source_object, ON_UUID source_userdata_item_id, ON_Object::UserDataConflictResolution userdata_conflict_resolution, bool bDeleteAllSourceItems) |
Expert user tool that moves user data items from source_object to "this. More... | |
void | MoveUserData (ON_Object &source_object) |
Calls MoveUserData(source_object,ON_Object::UserDataConflictResolution::source_object,true). More... | |
ON_Object & | operator= (const ON_Object &) |
void | PurgeUserData () |
PurgeUserData() removes all user data from object. More... | |
virtual unsigned int | SetComponentStates (ON_COMPONENT_INDEX component_index, ON_ComponentStatus states_to_set) const |
Set states on an individual component. More... | |
virtual unsigned int | SetComponentStatus (ON_COMPONENT_INDEX component_index, ON_ComponentStatus status_to_copy) const |
Copy status settings to an individual component. More... | |
bool | SetUserString (const wchar_t *key, const wchar_t *string_value) |
Attach a user string to the object. This information will perisist through copy construction, operator=, and file IO. More... | |
int | SetUserStrings (int count, const ON_UserString *user_strings, bool bReplace) |
Append entries to the user string list More... | |
void | TransformUserData (const class ON_Xform &xform) |
Objects derived from ON_Geometry must call TransformUserData() in their Transform() member function. More... | |
virtual bool | UpdateReferencedComponents (const class ON_ComponentManifest &source_manifest, const class ON_ComponentManifest &destination_manifest, const class ON_ManifestMap &manifest_map) |
Uses the destination_manifest to update references to other components. This is typically done when a component's references came from a "source" context and are being updated to the "destination" context. For example, inserting one model into another when index, id, and name conflicts need to be resolved at the time of insertion. More... | |
int | UserStringCount () const |
Static Public Member Functions | |
static ON_NurbsSurface * | New () |
Use ON_NurbsSurface::New(...) instead of new ON_NurbsSurface(...) More... | |
static ON_NurbsSurface * | New (const ON_NurbsSurface &nurbs_surface) |
static ON_NurbsSurface * | New (const ON_BezierSurface &bezier_surface) |
static ON_NurbsSurface * | New (int dimension, bool bIsRational, int order0, int order1, int cv_count0, int cv_count1) |
Public Attributes | |
double * | m_cv |
int | m_cv_capacity |
int | m_cv_count [2] |
int | m_cv_stride [2] |
control vertex net memory More... | |
int | m_dim |
Implementation. More... | |
int | m_is_rat |
double * | m_knot [2] |
int | m_knot_capacity [2] |
knot vector memory More... | |
int | m_order [2] |
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 } |
When a userdata item is copied or moved from a source object to a destination object, the ON_Object::UserDataConflictResolution enum values specify how conficts are resolved. Remark: A userdata item "conflict" occurs when both the destination and source object have a user data item with the same value of ON_UserData::m_userdata_uuid. More... | |
Static Public Attributes inherited from ON_Geometry | |
static const ON_Geometry | Unset |
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 | ||
) |
|
virtual |
bool ON_NurbsSurface::ChangeDimension | ( | int | desired_dimension | ) |
bool ON_NurbsSurface::ChangeSurfaceSeam | ( | int | dir, |
double | t | ||
) |
If the surface is closed in direction dir, then modify it so that the seam is at parameter t in the dir direction.
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. |
bool ON_NurbsSurface::ClampEnd | ( | int | dir, |
int | end | ||
) |
bool ON_NurbsSurface::CollapseSide | ( | int | side, |
ON_3dPoint | point = ON_3dPoint::UnsetPoint |
||
) |
Collapse the side of a NURBS surface to a single point.
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. |
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 |
i | [in] zero based control point index |
j | [in] zero based control point index |
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.
double ON_NurbsSurface::ControlPolygonLength | ( | int | dir | ) | const |
Interface.
Get the maximum length of a nurb surface's control polygon rows and/or columns
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 |
bool ON_NurbsSurface::ConvertSpanToBezier | ( | int | span_index0, |
int | span_index1, | ||
ON_BezierSurface & | bezier_surface | ||
) | const |
Convert a NURBS surface bispan into a bezier surface.
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 |
bool ON_NurbsSurface::Create | ( | int | dim, |
bool | is_rat, | ||
int | order0, | ||
int | order1, | ||
int | cv_count0, | ||
int | cv_count1 | ||
) |
int ON_NurbsSurface::CreateConeSurface | ( | ON_3dPoint | apex_point, |
const ON_Curve & | curve, | ||
const ON_Interval * | curve_domain = nullptr |
||
) |
Create a cone surface from a curve to a point.
apex_point | [in] |
curve | [in] |
curve_domain | [in] if not nullptr, then this is a subdomain of curve to use for the ruled surface. |
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.
|
virtual |
Create a ruled surface from two curves.
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. |
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 |
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& ).
i | [in] (0 <= i < m_cv_count[0]) |
j | [in] (0 <= j < m_cv_count[1]) |
If the NURBS surface is rational, the format of the returned array is a homogeneos 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
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 |
Returns the style of control vertices in the m_cv array.
|
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 |
void ON_NurbsSurface::EmergencyDestroy | ( | ) |
|
overridevirtual |
work horse evaluator
Implements ON_Surface.
|
overridevirtual |
Where possible, analytically extends surface to include domain.
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, |
Reimplemented from ON_Surface.
|
overridevirtual |
virtual ON_Geometry GetBBox override
Reimplemented from ON_Geometry.
bool ON_NurbsSurface::GetCV | ( | int | i, |
int | j, | ||
ON::point_style | , | ||
double * | cv | ||
) | const |
bool ON_NurbsSurface::GetCV | ( | int | i, |
int | j, | ||
ON_3dPoint & | cv | ||
) | const |
bool ON_NurbsSurface::GetCV | ( | int | i, |
int | j, | ||
ON_4dPoint & | cv | ||
) | const |
bool ON_NurbsSurface::GetGrevilleAbcissae | ( | int | dir, |
double * | g | ||
) | const |
|
overridevirtual |
Search for a derivatitive, tangent, or curvature discontinuity.
dir | [in] If 0, then "u" parameter is checked. If 1, then the "v" parameter is checked. |
c | [in] type of continity 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 ingored 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 teh 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. |
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 |
Get a NURBS surface representation of this surface.
nurbs_surface | [out] NURBS representation returned here |
tolerance | [in] tolerance to use when creating NURBS representation. |
s_subdomain | [in] if not nullptr, then the NURBS representation for this portion of the surface is returned. |
t_subdomain | [in] if not nullptr, then the NURBS representation for this portion of the surface is returned. |
This is a low-level virtual function. If you do not need the parameterization information provided by the return code, then ON_Surface::NurbsSurface may be easier to use.
Reimplemented from ON_Surface.
|
overridevirtual |
Reimplemented from ON_Surface.
|
overridevirtual |
Implements ON_Surface.
|
overridevirtual |
Get an estimate of the size of the rectangle that would be created if the 3d surface where flattened into a rectangle.
width | [out] (corresponds to the first surface parameter) |
height | [out] (corresponds to the first surface parameter) |
overrides virtual ON_Surface::GetSurfaceSize
Reimplemented from ON_Surface.
double ON_NurbsSurface::GrevilleAbcissa | ( | int | dir, |
int | cv_index | ||
) | const |
|
overridevirtual |
Is there a NURBS surface representation of this surface.
This is a low-level virtual function.
Reimplemented from ON_Surface.
bool ON_NurbsSurface::IncreaseDegree | ( | int | dir, |
int | desired_degree | ||
) |
void ON_NurbsSurface::Initialize | ( | void | ) |
bool ON_NurbsSurface::InsertKnot | ( | int | dir, |
double | knot_value, | ||
int | knot_multiplicity = 1 |
||
) |
bool ON_NurbsSurface::IsClamped | ( | int | dir, |
int | end = 2 |
||
) | const |
|
overridevirtual |
Reimplemented from ON_Surface.
|
overridevirtual |
Test continuity at a surface parameter value.
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. |
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 |
See if this and other are same NURBS geometry.
other | [in] other NURBS surface |
bIgnoreParameterization | [in] if true, parameterization and orientaion are ignored. |
tolerance | [in] tolerance to use when comparing control points. |
|
overridevirtual |
Get isoparametric curve. Overrides virtual ON_Surface::IsoCurve.
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 |
Reimplemented from ON_Surface.
|
overridevirtual |
Reimplemented from ON_Surface.
|
overridevirtual |
Test a surface to see if it is planar.
plane | [out] if not nullptr and true is returned, the plane parameters are filled in. |
tolerance | [in] tolerance to use when checking |
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.
double ON_NurbsSurface::Knot | ( | int | dir, |
int | knot_index | ||
) | const |
const double* ON_NurbsSurface::Knot | ( | int | dir | ) | const |
int ON_NurbsSurface::KnotCount | ( | int | dir | ) | const |
int ON_NurbsSurface::KnotMultiplicity | ( | int | dir, |
int | knot_index | ||
) | const |
bool ON_NurbsSurface::MakeClampedUniformKnotVector | ( | int | dir, |
double | delta = 1.0 |
||
) |
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.
dir | [in] 0 = u knots, 1 = v knots |
delta | in knot spacing. |
Allocates m_knot[] if it is not big enough.
|
overridevirtual |
virtual ON_Geometry::MakeDeformable() override
Reimplemented from ON_Geometry.
bool ON_NurbsSurface::MakeNonRational | ( | ) |
bool ON_NurbsSurface::MakePeriodicUniformKnotVector | ( | int | dir, |
double | delta = 1.0 |
||
) |
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.
dir | [in] 0 = u knots, 1 = v knots |
delta | in knot spacing. |
Allocates m_knot[] if it is not big enough.
bool ON_NurbsSurface::MakeRational | ( | ) |
|
static |
Use ON_NurbsSurface::New(...) instead of new ON_NurbsSurface(...)
See static ON_Brep* ON_Brep::New() for details.
|
static |
|
static |
|
static |
ON_Surface* ON_NurbsSurface::Offset | ( | double | offset_distance, |
double | tolerance, | ||
double * | max_deviation = nullptr |
||
) | const |
Offset surface.
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. |
ON_NurbsSurface& ON_NurbsSurface::operator= | ( | const ON_NurbsSurface & | ) |
ON_NurbsSurface& ON_NurbsSurface::operator= | ( | const ON_BezierSurface & | bezier_surface | ) |
Set NURBS surface equal to bezier surface with domain [0,1]x[0,1].
bezier_surface | [in] |
int ON_NurbsSurface::Order | ( | int | ) | const |
|
overridevirtual |
Low level archive writing tool used by ON_BinaryArchive::ReadObject().
binary_archive | archive to read from |
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::ReserveCVCapacity | ( | int | cv_array_capacity | ) |
bool ON_NurbsSurface::ReserveKnotCapacity | ( | int | dir, |
int | knot_array_capacity | ||
) |
Tools for managing CV and knot memory.
|
overridevirtual |
Implements ON_Surface.
bool ON_NurbsSurface::SetClampedGrevilleKnotVector | ( | int | dir, |
int | g_stride, | ||
const double * | g | ||
) |
bool ON_NurbsSurface::SetCV | ( | int | i, |
int | j, | ||
ON::point_style | , | ||
const double * | cv | ||
) |
bool ON_NurbsSurface::SetCV | ( | int | i, |
int | j, | ||
const ON_3dPoint & | cv | ||
) |
bool ON_NurbsSurface::SetCV | ( | int | i, |
int | j, | ||
const ON_4dPoint & | cv | ||
) |
bool ON_NurbsSurface::SetCVColumn | ( | int | col_index, |
const ON_3dPoint & | cv | ||
) |
bool ON_NurbsSurface::SetCVColumn | ( | int | col_index, |
int | v_stride, | ||
const double * | v | ||
) |
bool ON_NurbsSurface::SetCVRow | ( | int | row_index, |
const ON_3dPoint & | cv | ||
) |
bool ON_NurbsSurface::SetCVRow | ( | int | row_index, |
int | v_stride, | ||
const double * | v | ||
) |
|
overridevirtual |
ON_Surface overrides.
Reimplemented from ON_Surface.
bool ON_NurbsSurface::SetKnot | ( | int | dir, |
int | knot_index, | ||
double | knot_value | ||
) |
bool ON_NurbsSurface::SetPeriodicGrevilleKnotVector | ( | int | dir, |
int | g_stride, | ||
const double * | g | ||
) |
bool ON_NurbsSurface::SetWeight | ( | int | i, |
int | j, | ||
double | weight | ||
) |
Set value of control vertex weight. If surface is non-rational, it will be converted to rational.
|
overridevirtual |
virtual ON_Object::SizeOf override
Reimplemented from ON_Object.
|
overridevirtual |
Implements ON_Surface.
|
overridevirtual |
Splits (divides) the surface into two parts at the specified parameter. Overrides virtual ON_Surface::Split.
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 |
Reimplemented from ON_Surface.
double ON_NurbsSurface::SuperfluousKnot | ( | int | dir, |
int | end | ||
) | const |
|
overridevirtual |
Swaps object coordinate values with indices i and j.
i | [in] coordinate index |
j | [in] coordinate index |
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.
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 |
Transforms the object.
xform | [in] transformation to apply to object. If xform.IsSimilarity() is zero, then you may want to call MakeSquishy() before calling Transform. |
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 |
Implements ON_Surface.
|
overridevirtual |
Removes the portions of the surface outside of the specified interval. Overrides virtual ON_Surface::Trim.
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 |
|
overridevirtual |
Low level archive writing tool used by ON_BinaryArchive::WriteObject().
binary_archive | archive to write to |
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 | ( | ) |
double* ON_NurbsSurface::m_cv |
int ON_NurbsSurface::m_cv_capacity |
int ON_NurbsSurface::m_cv_count[2] |
int ON_NurbsSurface::m_cv_stride[2] |
control vertex net memory
int ON_NurbsSurface::m_dim |
Implementation.
int ON_NurbsSurface::m_is_rat |
double* ON_NurbsSurface::m_knot[2] |
int ON_NurbsSurface::m_knot_capacity[2] |
knot vector memory
int ON_NurbsSurface::m_order[2] |