ON_Curve is a pure virtual class for curve objects More...
#include <opennurbs_curve.h>
Public Member Functions | |
ON_Curve () ON_NOEXCEPT | |
ON_Curve (const ON_Curve &) | |
virtual | ~ON_Curve () |
virtual bool | ChangeClosedCurveSeam (double t) |
If this curve is closed, then modify it so that the start/end point is at curve parameter t. More... | |
virtual bool | ChangeDimension (int desired_dimension) |
Change the dimension of a curve. More... | |
ON_3dVector | CurvatureAt (double t) const |
Evaluate the curvature vector at a parameter. More... | |
virtual int | Degree () const =0 |
Returns maximum algebraic degree of any span or a good estimate if curve spans are not algebraic. More... | |
ON_3dVector | DerivativeAt (double t) const |
Evaluate first derivative at a parameter. More... | |
void | DestroyCurveTree () |
Destroys the runtime curve tree used to speed closest point and intersection calcuations. More... | |
void | DestroyRuntimeCache (bool bDelete=true) override |
virtual ON_Object::DestroyRuntimeCache override More... | |
virtual ON_Interval | Domain () const =0 |
virtual ON_Curve * | DuplicateCurve () const |
Get a duplicate of the curve. More... | |
bool | Ev1Der (double t, ON_3dPoint &point, ON_3dVector &first_derivative, int side=0, int *hint=0) const |
Evaluate first derivative at a parameter with error checking. More... | |
bool | Ev2Der (double t, ON_3dPoint &point, ON_3dVector &first_derivative, ON_3dVector &second_derivative, int side=0, int *hint=0) const |
Evaluate second derivative at a parameter with error checking. More... | |
virtual bool | Evaluate (double t, int der_count, int v_stride, double *v, int side=0, int *hint=0) const =0 |
This evaluator actually does all the work. The other ON_Curve evaluation tools call this virtual function. More... | |
bool | EvaluatePoint (const class ON_ObjRef &objref, ON_3dPoint &P) const override |
virtual ON_Geometry override More... | |
bool | EvCurvature (double t, ON_3dPoint &point, ON_3dVector &tangent, ON_3dVector &kappa, int side=0, int *hint=0) const |
Evaluate unit tangent and curvature at a parameter with error checking. More... | |
bool | EvPoint (double t, ON_3dPoint &point, int side=0, int *hint=0) const |
Evaluate point at a parameter with error checking. More... | |
bool | EvTangent (double t, ON_3dPoint &point, ON_3dVector &tangent, int side=0, int *hint=0) const |
Evaluate unit tangent at a parameter with error checking. More... | |
virtual bool | Extend (const ON_Interval &domain) |
Pure virtual function. Default returns false. Where possible, analytically extends curve to include domain. More... | |
bool | FirstSpanIsLinear (double min_length, double tolerance) const |
bool | FirstSpanIsLinear (double min_length, double tolerance, ON_Line *span_line) const |
bool | FrameAt (double t, ON_Plane &plane) const |
Return a 3d frame at a parameter. More... | |
virtual bool | GetCurveParameterFromNurbFormParameter (double nurbs_t, double *curve_t) const |
Convert a NURBS curve parameter to a curve parameter More... | |
bool | GetDomain (double *t0, double *t1) const |
curve interface More... | |
virtual bool | GetNextDiscontinuity (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 |
Search for a derivatitive, tangent, or curvature discontinuity. More... | |
virtual int | GetNurbForm (ON_NurbsCurve &nurbs_curve, double tolerance=0.0, const ON_Interval *subdomain=nullptr) const |
Get a NURBS curve representation of this curve. More... | |
virtual bool | GetNurbFormParameterFromCurveParameter (double curve_t, double *nurbs_t) const |
Convert a curve parameter to a NURBS curve parameter. More... | |
virtual bool | GetParameterTolerance (double t, double *tminus, double *tplus) const |
Returns maximum algebraic degree of any span or a good estimate if curve spans are not algebraic. More... | |
virtual bool | GetSpanVector (double *knots) const =0 |
Get number of parameters of "knots". More... | |
virtual bool | GetSpanVectorIndex (double t, int side, int *span_vector_index, ON_Interval *span_domain) const |
bool | GetTightBoundingBox (class ON_BoundingBox &tight_bbox, bool bGrowBox=false, const class ON_Xform *xform=nullptr) const override |
virtual ON_Geometry GetTightBoundingBox override More... | |
virtual int | HasNurbForm () const |
Does a NURBS curve representation of this curve. More... | |
virtual bool | IsArc (const ON_Plane *plane=nullptr, ON_Arc *arc=nullptr, double tolerance=ON_ZERO_TOLERANCE) const |
Test a curve to see if the locus if its points is an arc or circle. More... | |
bool | IsArcAt (double t, const ON_Plane *plane=0, ON_Arc *arc=0, double tolerance=ON_ZERO_TOLERANCE, double *t0=0, double *t1=0) const |
bool | IsClosable (double tolerance, double min_abs_size=0.0, double min_rel_size=10.0) const |
Decide if it makes sense to close off this curve by moving the endpoint to the start based on start-end gap size and length of curve as approximated by chord defined by 6 points. More... | |
virtual bool | IsClosed () const |
Test a curve to see if it is closed. More... | |
virtual bool | IsContinuous (ON::continuity c, 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 |
Test continuity at a curve parameter value. More... | |
virtual bool | IsEllipse (const ON_Plane *plane=nullptr, ON_Ellipse *ellipse=nullptr, double tolerance=ON_ZERO_TOLERANCE) const |
virtual bool | IsInPlane (const ON_Plane &test_plane, double tolerance=ON_ZERO_TOLERANCE) const =0 |
Test a curve to see if it lies in a specific plane. More... | |
virtual bool | IsLinear (double tolerance=ON_ZERO_TOLERANCE) const |
Test a curve to see if the locus if its points is a line segment. More... | |
virtual bool | IsPeriodic () const |
Test a curve to see if it is periodic. More... | |
virtual bool | IsPlanar (ON_Plane *plane=nullptr, double tolerance=ON_ZERO_TOLERANCE) const |
Test a curve to see if it is planar. More... | |
virtual int | IsPolyline (ON_SimpleArray< ON_3dPoint > *pline_points=nullptr, ON_SimpleArray< double > *pline_t=nullptr) const |
Several types of ON_Curve can have the form of a polyline including a degree 1 ON_NurbsCurve, an ON_PolylineCurve, and an ON_PolyCurve all of whose segments are some form of polyline. IsPolyline tests a curve to see if it can be represented as a polyline. More... | |
bool | LastSpanIsLinear (double min_length, double tolerance) const |
bool | LastSpanIsLinear (double min_length, double tolerance, ON_Line *span_line) const |
ON_NurbsCurve * | NurbsCurve (ON_NurbsCurve *pNurbsCurve=nullptr, double tolerance=0.0, const ON_Interval *subdomain=nullptr) const |
Get a NURBS curve representation of this curve. More... | |
ON::object_type | ObjectType () const override |
overrides virtual ON_Object::ObjectType. More... | |
ON_Curve & | operator= (const ON_Curve &) |
ON_3dPoint | PointAt (double t) const |
Evaluate point at a parameter. More... | |
ON_3dPoint | PointAtEnd () const |
Evaluate point at the end of the curve. More... | |
ON_3dPoint | PointAtStart () const |
Evaluate point at the start of the curve. More... | |
virtual bool | Reverse ()=0 |
Reverse the direction of the curve. More... | |
bool | SetDomain (ON_Interval domain) |
Set the domain of the curve. More... | |
virtual bool | SetDomain (double t0, double t1) |
Set the domain of the curve More... | |
virtual bool | SetEndPoint (ON_3dPoint end_point) |
Force the curve to end at a specified point. More... | |
virtual bool | SetStartPoint (ON_3dPoint start_point) |
Force the curve to start at a specified point. More... | |
unsigned int | SizeOf () const override |
virtual ON_Object::SizeOf override More... | |
virtual int | SpanCount () const =0 |
Get number of nonempty smooth (c-infinity) spans in curve More... | |
virtual bool | Split (double t, ON_Curve *&left_side, ON_Curve *&right_side) const |
Splits (divides) the curve at the specified parameter. The parameter must be in the interior of the curve's domain. The pointers passed to Split must either be nullptr or point to an ON_Curve object of the same type. If the pointer is nullptr, then a curve will be created in Split(). You may pass "this" as left_side or right_side. More... | |
ON_3dVector | TangentAt (double t) const |
Evaluate unit tangent vector at a parameter. More... | |
bool | Transform (const ON_Xform &xform) override |
overrides virtual ON_Geometry::Transform(). ON_Curve::Transform() calls ON_Geometry::Transform(xform), which calls ON_Object::TransformUserData(xform), and then calls this->DestroyCurveTree(). More... | |
virtual bool | Trim (const ON_Interval &domain) |
Removes portions of the curve outside the specified interval. 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 class ON_Brep * | BrepForm (class ON_Brep *brep=nullptr) const |
If possible, BrepForm() creates a brep form of the ON_Geometry. 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... | |
virtual int | Dimension () const |
Dimension of the object. More... | |
virtual bool | GetBBox (double *boxmin, double *boxmax, bool bGrowBox=false) const |
This is the virtual function that actually calculates axis aligned bounding boxes. 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 | HasBrepForm () const |
Query an object to see if it has an ON_Brep form. Result: Returns true if the virtual ON_Geometry::BrepForm can compute an ON_Brep representation of this object. More... | |
virtual bool | IsDeformable () const |
bool | IsValid (class ON_TextLog *text_log=nullptr) const override |
Tests an object to see if its data members are correctly initialized. More... | |
virtual bool | MakeDeformable () |
If possible, converts the object into a form that can be accuratly modified with "squishy" transformations like projections, shears, an non-uniform scaling. 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... | |
virtual bool | SwapCoordinates (int i, int j) |
Swaps object coordinate values with indices i and j. 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 ON__UINT32 | DataCRC (ON__UINT32 current_remainder) const |
Returns a CRC calculated from the information that defines the object. This CRC can be used as a quick way to see if two objects are not identical. 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... | |
virtual void | Dump (ON_TextLog &) const |
Creates a text dump of the 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 bool | Read (ON_BinaryArchive &binary_archive) |
Low level archive writing tool used by ON_BinaryArchive::ReadObject(). 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 |
virtual bool | Write (ON_BinaryArchive &binary_archive) const |
Low level archive writing tool used by ON_BinaryArchive::WriteObject(). More... | |
Protected Member Functions | |
bool | ParameterSearch (double t, int &index, bool bEnableSnap, const ON_SimpleArray< double > &m_t, double RelTol=ON_SQRT_EPSILON) const |
Lookup a parameter in the m_t array, optionally using a built in snap tolerance to snap a parameter value to an element of m_t. This function is used by some types derived from ON_Curve to snap parameter values More... | |
Additional Inherited Members | |
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_Curve is a pure virtual class for curve objects
ON_Curve::ON_Curve | ( | ) |
|
virtual |
ON_Curve::ON_Curve | ( | const ON_Curve & | ) |
|
virtual |
If this curve is closed, then modify it so that the start/end point is at curve parameter t.
t | [in] curve parameter of new start/end point. The returned curves domain will start at t. |
Reimplemented in ON_NurbsCurve, ON_PolyCurve, ON_PolylineCurve, ON_ArcCurve, and ON_PolyEdgeCurve.
|
virtual |
Change the dimension of a curve.
desired_dimension | [in] |
Reimplemented in ON_NurbsCurve, ON_PolyCurve, ON_PolylineCurve, ON_ArcCurve, and ON_LineCurve.
ON_3dVector ON_Curve::CurvatureAt | ( | double | t | ) | const |
Evaluate the curvature vector at a parameter.
t | [in] evaluation parameter |
No error handling.
|
pure virtual |
Returns maximum algebraic degree of any span or a good estimate if curve spans are not algebraic.
Implemented in ON_NurbsCurve, ON_CurveProxy, ON_PolylineCurve, ON_PolyCurve, ON_ArcCurve, ON_LineCurve, and ON_CurveOnSurface.
ON_3dVector ON_Curve::DerivativeAt | ( | double | t | ) | const |
Evaluate first derivative at a parameter.
t | [in] evaluation parameter |
No error handling.
void ON_Curve::DestroyCurveTree | ( | ) |
Destroys the runtime curve tree used to speed closest point and intersection calcuations.
If the geometry of the curve is modified in any way, then call DestroyCurveTree(); The curve tree is created as needed.
|
overridevirtual |
virtual ON_Object::DestroyRuntimeCache override
Reimplemented from ON_Object.
Reimplemented in ON_PolyEdgeSegment, ON_CurveProxy, ON_PolyCurve, and ON_PolyEdgeCurve.
|
pure virtual |
Implemented in ON_NurbsCurve, ON_CurveProxy, ON_ArcCurve, ON_PolyCurve, ON_PolylineCurve, ON_LineCurve, and ON_CurveOnSurface.
|
virtual |
Get a duplicate of the curve.
The caller must delete the returned curve. For non-ON_CurveProxy objects, this simply duplicates the curve using ON_Object::Duplicate. For ON_CurveProxy objects, this duplicates the actual proxy curve geometry and, if necessary, trims and reverse the result to that the returned curve's parameterization and locus match the proxy curve's.
Reimplemented in ON_CurveProxy, ON_PolyEdgeSegment, ON_PolyCurve, and ON_PolyEdgeCurve.
bool ON_Curve::Ev1Der | ( | double | t, |
ON_3dPoint & | point, | ||
ON_3dVector & | first_derivative, | ||
int | side = 0 , |
||
int * | hint = 0 |
||
) | const |
Evaluate first derivative at a parameter with error checking.
t | [in] evaluation parameter |
point | [out] value of curve at t |
first_derivative | [out] value of first derivative at t |
side | [in] optional - determines which side to evaluate from =0 default <0 to evaluate from below, >0 to evaluate from above |
hint | [in/out] optional evaluation hint used to speed repeated evaluations |
bool ON_Curve::Ev2Der | ( | double | t, |
ON_3dPoint & | point, | ||
ON_3dVector & | first_derivative, | ||
ON_3dVector & | second_derivative, | ||
int | side = 0 , |
||
int * | hint = 0 |
||
) | const |
Evaluate second derivative at a parameter with error checking.
t | [in] evaluation parameter |
point | [out] value of curve at t |
first_derivative | [out] value of first derivative at t |
second_derivative | [out] value of second derivative at t |
side | [in] optional - determines which side to evaluate from =0 default <0 to evaluate from below, >0 to evaluate from above |
hint | [in/out] optional evaluation hint used to speed repeated evaluations |
|
pure virtual |
This evaluator actually does all the work. The other ON_Curve evaluation tools call this virtual function.
t | [in] evaluation parameter ( usually in Domain() ). |
der_count | [in] (>=0) number of derivatives to evaluate |
v_stride | [in] (>=Dimension()) stride to use for the v[] array |
v | [out] array of length (der_count+1)*v_stride curve(t) is returned in (v[0],...,v[m_dim-1]), curve'(t) is retuned in (v[v_stride],...,v[v_stride+m_dim-1]), curve"(t) is retuned in (v[2*v_stride],...,v[2*v_stride+m_dim-1]), etc. |
side | [in] optional - determines which side to evaluate from =0 default <0 to evaluate from below, >0 to evaluate from above |
hint | [in/out] optional evaluation hint used to speed repeated evaluations |
Implemented in ON_NurbsCurve, ON_PolylineCurve, ON_CurveProxy, ON_PolyCurve, ON_ArcCurve, ON_LineCurve, and ON_CurveOnSurface.
|
overridevirtual |
bool ON_Curve::EvCurvature | ( | double | t, |
ON_3dPoint & | point, | ||
ON_3dVector & | tangent, | ||
ON_3dVector & | kappa, | ||
int | side = 0 , |
||
int * | hint = 0 |
||
) | const |
Evaluate unit tangent and curvature at a parameter with error checking.
t | [in] evaluation parameter |
point | [out] value of curve at t |
tangent | [out] value of unit tangent |
kappa | [out] value of curvature vector |
side | [in] optional - determines which side to evaluate from =0 default <0 to evaluate from below, >0 to evaluate from above |
hint | [in/out] optional evaluation hint used to speed repeated evaluations |
bool ON_Curve::EvPoint | ( | double | t, |
ON_3dPoint & | point, | ||
int | side = 0 , |
||
int * | hint = 0 |
||
) | const |
Evaluate point at a parameter with error checking.
t | [in] evaluation parameter |
point | [out] value of curve at t |
side | [in] optional - determines which side to evaluate from =0 default <0 to evaluate from below, >0 to evaluate from above |
hint | [in/out] optional evaluation hint used to speed repeated evaluations |
bool ON_Curve::EvTangent | ( | double | t, |
ON_3dPoint & | point, | ||
ON_3dVector & | tangent, | ||
int | side = 0 , |
||
int * | hint = 0 |
||
) | const |
Evaluate unit tangent at a parameter with error checking.
t | [in] evaluation parameter |
point | [out] value of curve at t |
tangent | [out] value of unit tangent |
side | [in] optional - determines which side to evaluate from =0 default <0 to evaluate from below, >0 to evaluate from above |
hint | [in/out] optional evaluation hint used to speed repeated evaluations |
|
virtual |
Pure virtual function. Default returns false. Where possible, analytically extends curve to include domain.
domain | [in] if domain is not included in curve domain, curve will be extended so that its domain includes domain. Will not work if curve is closed. Original curve is identical to the restriction of the resulting curve to the original curve domain, |
Reimplemented in ON_NurbsCurve, ON_PolylineCurve, ON_PolyCurve, ON_ArcCurve, and ON_LineCurve.
bool ON_Curve::FirstSpanIsLinear | ( | double | min_length, |
double | tolerance | ||
) | const |
min_length | [in] minimum length of a linear span |
tolerance | [in] distance tolerance to use when checking linearity. Returns true if the span is a non-degenrate line. This means:
|
bool ON_Curve::FirstSpanIsLinear | ( | double | min_length, |
double | tolerance, | ||
ON_Line * | span_line | ||
) | const |
bool ON_Curve::FrameAt | ( | double | t, |
ON_Plane & | plane | ||
) | const |
Return a 3d frame at a parameter.
t | [in] evaluation parameter |
plane | [out] the frame is returned here |
|
virtual |
Convert a NURBS curve parameter to a curve parameter
nurbs_t | [in] nurbs form parameter |
curve_t | [out] curve parameter |
If GetNurbForm returns 2, this function converts the curve parameter to the NURBS curve parameter.
Reimplemented in ON_NurbsCurve, ON_PolylineCurve, ON_PolyCurve, ON_CurveProxy, ON_LineCurve, and ON_ArcCurve.
bool ON_Curve::GetDomain | ( | double * | t0, |
double * | t1 | ||
) | const |
curve interface
Gets domain of the curve
t0 | [out] |
t1 | [out] domain is [*t0, *t1] |
|
virtual |
Search for a derivatitive, tangent, or curvature discontinuity.
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. If 'c', the type of continuity to test for is ON::continuity::Gsmooth_continuous and the curvature changes from curved to 0 or 0 to curved and there is no tangency kink dtype is returns 3 |
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 in ON_NurbsCurve, ON_PolylineCurve, ON_CurveProxy, and ON_PolyCurve.
|
virtual |
Get a NURBS curve representation of this curve.
nurbs_curve | [out] NURBS representation returned here |
tolerance | [in] tolerance to use when creating NURBS representation. |
subdomain | [in] if not nullptr, then the NURBS representation for this portion of the curve is returned. |
This is a low-level virtual function. If you do not need the parameterization information provided by the return code, then ON_Curve::NurbsCurve may be easier to use.
Reimplemented in ON_NurbsCurve, ON_PolylineCurve, ON_PolyCurve, ON_CurveProxy, ON_LineCurve, ON_ArcCurve, and ON_CurveOnSurface.
|
virtual |
Convert a curve parameter to a NURBS curve parameter.
curve_t | [in] curve parameter |
nurbs_t | [out] nurbs form parameter |
If GetNurbForm returns 2, this function converts the curve parameter to the NURBS curve parameter.
Reimplemented in ON_NurbsCurve, ON_PolylineCurve, ON_PolyCurve, ON_CurveProxy, ON_LineCurve, and ON_ArcCurve.
|
virtual |
Returns maximum algebraic degree of any span or a good estimate if curve spans are not algebraic.
Reimplemented in ON_NurbsCurve, ON_CurveProxy, and ON_CurveOnSurface.
|
pure virtual |
Get number of parameters of "knots".
knots | [out] an array of length SpanCount()+1 is filled in with the parameters where the curve is not smooth (C-infinity). |
Implemented in ON_NurbsCurve, ON_CurveProxy, ON_PolylineCurve, ON_PolyCurve, ON_ArcCurve, ON_LineCurve, and ON_CurveOnSurface.
|
virtual |
|
overridevirtual |
virtual ON_Geometry GetTightBoundingBox override
Reimplemented from ON_Geometry.
Reimplemented in ON_PolyCurve, ON_PolylineCurve, and ON_LineCurve.
|
virtual |
Does a NURBS curve representation of this curve.
This is a low-level virtual function.
Reimplemented in ON_NurbsCurve, ON_PolylineCurve, ON_PolyCurve, ON_CurveProxy, ON_LineCurve, and ON_ArcCurve.
|
virtual |
Test a curve to see if the locus if its points is an arc or circle.
plane | [in] if not nullptr, test is performed in this plane |
arc | [out] if not nullptr and true is returned, then arc parameters are filled in |
tolerance | [in] tolerance to use when checking |
Reimplemented in ON_NurbsCurve, ON_CurveProxy, ON_PolylineCurve, ON_PolyCurve, ON_ArcCurve, ON_LineCurve, and ON_CurveOnSurface.
bool ON_Curve::IsArcAt | ( | double | t, |
const ON_Plane * | plane = 0 , |
||
ON_Arc * | arc = 0 , |
||
double | tolerance = ON_ZERO_TOLERANCE , |
||
double * | t0 = 0 , |
||
double * | t1 = 0 |
||
) | const |
t | [in] curve parameter |
plane | [in] if not nullptr, test is performed in this plane |
arc | [out] if not nullptr and true is returned, then arc parameters are filled in |
tolerance | [in] tolerance to use when checking |
t0 | [out] if not nullptr, and then *t0 is set to the parameter at the start of the G2 curve segment that was tested. |
t1 | [out] if not nullptr, and then *t0 is set to the parameter at the start of the G2 curve segment that was tested. |
bool ON_Curve::IsClosable | ( | double | tolerance, |
double | min_abs_size = 0.0 , |
||
double | min_rel_size = 10.0 |
||
) | const |
Decide if it makes sense to close off this curve by moving the endpoint to the start based on start-end gap size and length of curve as approximated by chord defined by 6 points.
tolerance | [in] maximum allowable distance between start and end. if start - end gap is greater than tolerance, returns false |
min_abs_size | [in] if greater than 0.0 and none of the interior sampled points are at least min_abs_size from start, returns false. |
min_rel_size | [in] if greater than 1.0 and chord length is less than min_rel_size*gap, returns false. |
|
virtual |
Test a curve to see if it is closed.
Reimplemented in ON_NurbsCurve, ON_CurveProxy, ON_PolylineCurve, ON_PolyCurve, ON_BrepEdge, ON_ArcCurve, ON_LineCurve, ON_PolyEdgeSegment, ON_CurveOnSurface, and ON_PolyEdgeCurve.
|
virtual |
Test continuity at a curve parameter value.
c | [in] type of continuity to test for. Read ON::continuity comments for details. |
t | [in] parameter to test |
hint | [in] evaluation hint |
point_tolerance | [in] if the distance between two points is greater than point_tolerance, then the curve is not C0. |
d1_tolerance | [in] if the difference between two first derivatives is greater than d1_tolerance, then the curve is not C1. |
d2_tolerance | [in] if the difference between two second derivatives is greater than d2_tolerance, then the curve 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 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 or ON::continuity::Gsmooth_continuous. 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. ON::continuity::Gsmooth_continuous: If K0 and K1 are curvatures evaluated from above and below and the angle between K0 and K1 is at least twice angle tolerance or ||K0| - |K1|| > (max(|K0|,|K1|) > curvature_tolerance, then a curvature discontinuity is reported. |
Reimplemented in ON_NurbsCurve, ON_PolylineCurve, ON_CurveProxy, ON_PolyCurve, and ON_ArcCurve.
|
virtual |
|
pure virtual |
Test a curve to see if it lies in a specific plane.
test_plane | [in] |
tolerance | [in] tolerance to use when checking |
Implemented in ON_NurbsCurve, ON_CurveProxy, ON_PolylineCurve, ON_PolyCurve, ON_ArcCurve, ON_LineCurve, and ON_CurveOnSurface.
|
virtual |
Test a curve to see if the locus if its points is a line segment.
tolerance | [in] // tolerance to use when checking linearity |
Reimplemented in ON_NurbsCurve, ON_CurveProxy, ON_PolylineCurve, ON_PolyCurve, ON_ArcCurve, ON_LineCurve, and ON_CurveOnSurface.
|
virtual |
Test a curve to see if it is periodic.
Reimplemented in ON_NurbsCurve, ON_PolylineCurve, ON_CurveProxy, ON_PolyCurve, ON_ArcCurve, ON_LineCurve, and ON_CurveOnSurface.
|
virtual |
Test a curve 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 |
Reimplemented in ON_NurbsCurve, ON_CurveProxy, ON_PolylineCurve, ON_PolyCurve, ON_ArcCurve, ON_LineCurve, and ON_CurveOnSurface.
|
virtual |
Several types of ON_Curve can have the form of a polyline including a degree 1 ON_NurbsCurve, an ON_PolylineCurve, and an ON_PolyCurve all of whose segments are some form of polyline. IsPolyline tests a curve to see if it can be represented as a polyline.
pline_points | [out] if not nullptr and true is returned, then the points of the polyline form are returned here. |
t | [out] if not nullptr and true is returned, then the parameters of the polyline points are returned here. |
Reimplemented in ON_NurbsCurve, ON_CurveProxy, ON_PolylineCurve, ON_PolyCurve, and ON_LineCurve.
bool ON_Curve::LastSpanIsLinear | ( | double | min_length, |
double | tolerance | ||
) | const |
bool ON_Curve::LastSpanIsLinear | ( | double | min_length, |
double | tolerance, | ||
ON_Line * | span_line | ||
) | const |
ON_NurbsCurve* ON_Curve::NurbsCurve | ( | ON_NurbsCurve * | pNurbsCurve = nullptr , |
double | tolerance = 0.0 , |
||
const ON_Interval * | subdomain = nullptr |
||
) | const |
Get a NURBS curve representation of this curve.
pNurbsCurve | [in/out] if not nullptr, this ON_NurbsCurve will be used to store the NURBS representation of the curve will be returned. |
tolerance | [in] tolerance to use when creating NURBS representation. |
subdomain | [in] if not nullptr, then the NURBS representation for this portion of the curve is returned. |
See ON_Surface::GetNurbForm for important details about the NURBS surface parameterization.
|
overridevirtual |
|
protected |
Lookup a parameter in the m_t array, optionally using a built in snap tolerance to snap a parameter value to an element of m_t. This function is used by some types derived from ON_Curve to snap parameter values
t | [in] parameter |
index | [out] index into m_t such that if function returns false then |
value condition -1 t<m_t[0] or m_t is empty 0<=i<=m_t.Count()-2 m_t[i] < t < m_t[i+1] m_t.Count()-1 t>m_t[ m_t.Count()-1]
if the function returns true then t is equal to, or is closest to and within tolerance of m_t[index].
bEnableSnap | [in] enable snapping |
m_t | [in] Array of parameter values to snap to |
RelTol | [in] tolerance used in snapping |
ON_3dPoint ON_Curve::PointAt | ( | double | t | ) | const |
Evaluate point at a parameter.
t | [in] evaluation parameter |
No error handling.
ON_3dPoint ON_Curve::PointAtEnd | ( | ) | const |
Evaluate point at the end of the curve.
t | [in] evaluation parameter |
No error handling.
ON_3dPoint ON_Curve::PointAtStart | ( | ) | const |
Evaluate point at the start of the curve.
t | [in] evaluation parameter |
No error handling.
|
pure virtual |
Reverse the direction of the curve.
If reveresed, the domain changes from [a,b] to [-b,-a]
Implemented in ON_NurbsCurve, ON_BrepTrim, ON_PolylineCurve, ON_CurveProxy, ON_PolyCurve, ON_BrepEdge, ON_LineCurve, ON_ArcCurve, and ON_CurveOnSurface.
bool ON_Curve::SetDomain | ( | ON_Interval | domain | ) |
Set the domain of the curve.
domain | [in] increasing interval |
|
virtual |
Set the domain of the curve
t0 | [in] |
t1 | [in] new domain will be [t0,t1] |
Reimplemented in ON_NurbsCurve, ON_CurveProxy, ON_PolyCurve, ON_PolylineCurve, ON_ArcCurve, and ON_LineCurve.
|
virtual |
Force the curve to end at a specified point.
end_point | [in] |
Some end points cannot be moved. Be sure to check return code. ON_Curve::SetEndPoint() returns true if end_point is the same as the end of the curve, false otherwise.
Reimplemented in ON_NurbsCurve, ON_PolylineCurve, ON_PolyCurve, ON_ArcCurve, ON_LineCurve, and ON_PolyEdgeCurve.
|
virtual |
Force the curve to start at a specified point.
start_point | [in] |
Some end points cannot be moved. Be sure to check return code. ON_Curve::SetStartPoint() returns true if start_point is the same as the start of the curve, false otherwise.
Reimplemented in ON_NurbsCurve, ON_PolylineCurve, ON_PolyCurve, ON_ArcCurve, ON_LineCurve, and ON_PolyEdgeCurve.
|
overridevirtual |
virtual ON_Object::SizeOf override
Reimplemented from ON_Object.
Reimplemented in ON_NurbsCurve, ON_PolyCurve, ON_CurveProxy, ON_CurveOnSurface, ON_PolylineCurve, and ON_LineCurve.
|
pure virtual |
Get number of nonempty smooth (c-infinity) spans in curve
Implemented in ON_NurbsCurve, ON_CurveProxy, ON_PolylineCurve, ON_PolyCurve, ON_ArcCurve, ON_LineCurve, and ON_CurveOnSurface.
|
virtual |
Splits (divides) the curve at the specified parameter. The parameter must be in the interior of the curve's domain. The pointers passed to Split must either be nullptr or point to an ON_Curve object of the same type. If the pointer is nullptr, then a curve will be created in Split(). You may pass "this" as left_side or right_side.
t | [in] parameter to split the curve at in the interval returned by Domain(). |
left_side | [out] left portion of curve returned here |
right_side | [out] right portion of curve returned here |
true - The curve was split into two pieces. false - The curve could not be split. For example if the parameter is too close to an endpoint.
Reimplemented in ON_NurbsCurve, ON_PolylineCurve, ON_PolyCurve, ON_CurveProxy, ON_ArcCurve, and ON_LineCurve.
ON_3dVector ON_Curve::TangentAt | ( | double | t | ) | const |
Evaluate unit tangent vector at a parameter.
t | [in] evaluation parameter |
No error handling.
|
overridevirtual |
overrides virtual ON_Geometry::Transform(). ON_Curve::Transform() calls ON_Geometry::Transform(xform), which calls ON_Object::TransformUserData(xform), and then calls this->DestroyCurveTree().
xform | [in] transformation to apply to object. |
Classes derived from ON_Curve should call ON_Curve::Transform() to handle user data transformations and curve tree destruction and then transform their definition.
Reimplemented from ON_Geometry.
Reimplemented in ON_NurbsCurve, ON_CurveProxy, ON_PolyCurve, ON_PolylineCurve, ON_CurveOnSurface, and ON_LineCurve.
|
virtual |
Removes portions of the curve outside the specified interval.
domain | [in] interval of the curve to keep. Portions of the curve before curve(domain[0]) and after curve(domain[1]) are removed. |
Reimplemented in ON_NurbsCurve, ON_PolylineCurve, ON_CurveProxy, ON_PolyCurve, ON_ArcCurve, and ON_LineCurve.