An ON_PolyCurve is an ON_Curve represented by a sequence of contiguous ON_Curve segments. A valid polycurve is represented by an array m_segment of Count()>=1 curve objects and a strictly increasing array m_t of Count()+1 parameter values. The i-th curve segment, when considered as part of the polycurve, is affinely reparamaterized from m_t[i] to m_t[i+1], i.e., m_segment[i].Domain()[0] is mapped to m_t[i] and m_segment[i].Domain()[1] is mapped to m_t[i+1]. More...
#include <opennurbs_polycurve.h>
Public Member Functions | |
ON_PolyCurve () ON_NOEXCEPT | |
ON_PolyCurve (const ON_PolyCurve &) | |
ON_PolyCurve (int) | |
virtual | ~ON_PolyCurve () |
bool | Append (ON_Curve *) |
bool | AppendAndMatch (ON_Curve *) |
bool | ChangeClosedCurveSeam (double t) override |
If this curve is closed, then modify it so that the start/end point is at curve parameter t. More... | |
bool | ChangeDimension (int desired_dimension) override |
Change the dimension of a curve. More... | |
bool | CloseGap (int gap_index, int segments_to_modify) |
Modify the one or both locations at the end of segment[gap_index-1] and the start of segment[gap_index] so they are coindicent. More... | |
int | CloseGaps () |
Searches for and closes all gaps that can be found. More... | |
int | Count () const |
Interface. More... | |
ON__UINT32 | DataCRC (ON__UINT32 current_remainder) const override |
virtual ON_Object::DataCRC override More... | |
int | Degree () const override |
Returns maximum algebraic degree of any span or a good estimate if curve spans are not algebraic. More... | |
void | Destroy () |
void | DestroyRuntimeCache (bool bDelete=true) override |
virtual ON_Object::DestroyRuntimeCache override More... | |
int | Dimension () const override |
ON_Geometry overrides. More... | |
ON_Interval | Domain () const override |
void | Dump (ON_TextLog &) const override |
Creates a text dump of the object. More... | |
ON_Curve * | DuplicateCurve () const override |
ON_Curve overrides. More... | |
void | EmergencyDestroy () |
bool | Evaluate (double, int, int, double *, int=0, int *=0) const override |
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 | Extend (const ON_Interval &domain) override |
Where possible, analytically extends curve to include domain. More... | |
int | FindNextGap (int segment_index0) const |
Search the curve for gaps between the sub curve segments. More... | |
ON_Curve * | FirstSegmentCurve () const |
bool | GetBBox (double *boxmin, double *boxmax, bool bGrowBox=false) const override |
virtual ON_Geometry GetBBox override More... | |
bool | GetCurveParameterFromNurbFormParameter (double, double *) const override |
virtual ON_Curve::GetCurveParameterFromNurbFormParameter override More... | |
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 override |
Search for a derivatitive, tangent, or curvature discontinuity. More... | |
int | GetNurbForm (ON_NurbsCurve &, double=0.0, const ON_Interval *=nullptr) const override |
Get a NURBS curve representation of this curve. More... | |
bool | GetNurbFormParameterFromCurveParameter (double, double *) const override |
virtual ON_Curve::GetNurbFormParameterFromCurveParameter override More... | |
bool | GetSpanVector (double *) const override |
Get number of parameters of "knots". More... | |
bool | GetTightBoundingBox (class ON_BoundingBox &tight_bbox, bool bGrowBox=false, const class ON_Xform *xform=nullptr) const override |
virtual ON_Geometry GetTightBoundingBox override More... | |
ON_Curve * | HarvestSegment (int) |
bool | HasGapAt (int segment_index) const |
Determine if there is a gap between the end of segment[segment_index] and the start of segment[segment_index+1]. More... | |
int | HasNurbForm () const override |
Does a NURBS curve representation of this curve. More... | |
bool | HasSynchronizedSegmentDomains () const |
bool | Insert (int, ON_Curve *) |
bool | IsArc (const ON_Plane *=nullptr, ON_Arc *=nullptr, double=ON_ZERO_TOLERANCE) const override |
Test a curve to see if the locus if its points is an arc or circle. More... | |
bool | IsClosed (void) const override |
Test a curve to see if it is closed. More... | |
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 override |
Test continuity at a curve parameter value. More... | |
bool | IsDeformable () const override |
virtual ON_Geometry::IsDeformable() override More... | |
bool | IsInPlane (const ON_Plane &, double=ON_ZERO_TOLERANCE) const override |
Test a curve to see if it lies in a specific plane. More... | |
bool | IsLinear (double=ON_ZERO_TOLERANCE) const override |
Test a curve to see if the locus if its points is a line segment. More... | |
bool | IsNested () const |
bool | IsPeriodic (void) const override |
Test a curve to see if it is periodic. More... | |
bool | IsPlanar (ON_Plane *=nullptr, double=ON_ZERO_TOLERANCE) const override |
Test a curve to see if it is planar. More... | |
int | IsPolyline (ON_SimpleArray< ON_3dPoint > *pline_points=nullptr, ON_SimpleArray< double > *pline_t=nullptr) const override |
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 | IsValid (class ON_TextLog *text_log=nullptr) const override |
Tests an object to see if its data members are correctly initialized. More... | |
bool | IsValid (bool bAllowGaps, ON_TextLog *text_log) const |
Tests an object to see if its data members are correctly initialized. More... | |
ON_Curve * | LastSegmentCurve () const |
bool | MakeDeformable () override |
virtual ON_Geometry::MakeDeformable() override More... | |
ON_DEPRECATED_MSG ("Replace calls to HasGap() with FindNextGap(0)") int HasGap() const | |
ON_DEPRECATED_MSG ("Use RemoveNesting(). RemoveNestingEx() will be removed in the next release.") bool RemoveNestingEx() | |
ON_PolyCurve & | operator= (const ON_PolyCurve &) |
ON_Curve * | operator[] (int) const |
These operator[] functions return nullptr if index is out of range. More... | |
bool | ParameterSearch (double t, int &index, bool bEnableSnap) 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. More... | |
double | PolyCurveParameter (int segment_index, double segmentcurve_parameter) const |
Converts a segment curve parameter to a polycurve parameter. More... | |
bool | Prepend (ON_Curve *) |
bool | PrependAndMatch (ON_Curve *) |
bool | Read (ON_BinaryArchive &) override |
Low level archive writing tool used by ON_BinaryArchive::ReadObject(). More... | |
bool | Remove () |
bool | Remove (int) |
bool | RemoveNesting () |
Removes the nested of polycurves. The result will have not have an ON_PolyCurve as a segment but will have identical locus and parameterization. More... | |
void | Reserve (int) |
bool | Reverse () override |
Reverse the direction of the curve. More... | |
ON_Curve * | SegmentCurve (int segment_index) const |
Returns a pointer to a segment curve. More... | |
double | SegmentCurveParameter (double polycurve_parameter) const |
Converts a polycurve parameter to a segment curve parameter. More... | |
const ON_CurveArray & | SegmentCurves () const |
ON_Interval | SegmentDomain (int segment_index) const |
Returns the polycurve subdomain assigned to a segment curve. More... | |
int | SegmentIndex (double polycurve_parameter) const |
Find the segment used for evaluation at polycurve_parameter. More... | |
int | SegmentIndex (ON_Interval sub_domain, int *segment_index0, int *segment_index1) const |
Find the segments with support on sub_domain. More... | |
const ON_SimpleArray< double > & | SegmentParameters () const |
bool | SetDomain (double t0, double t1) override |
virtual ON_Curve::SetDomain override. Set the domain of the curve More... | |
bool | SetEndPoint (ON_3dPoint end_point) override |
Force the curve to end at a specified point. More... | |
bool | SetParameterization (const double *t) |
Expert user function to set the m_t[] array. More... | |
void | SetSegment (int index, ON_Curve *crv) |
bool | SetStartPoint (ON_3dPoint start_point) override |
Force the curve to start at a specified point. More... | |
unsigned int | SizeOf () const override |
ON_Object overrides. More... | |
int | SpanCount () const override |
Get number of nonempty smooth (c-infinity) spans in curve More... | |
bool | Split (double t, ON_Curve *&left_side, ON_Curve *&right_side) const override |
virtual ON_Curve::Split override. Divide 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 of the same type. If the pointer is nullptr, then a curve will be created in Split(). You may pass "this" as one of the pointers to Split(). More... | |
bool | SwapCoordinates (int, int) override |
Swaps object coordinate values with indices i and j. More... | |
bool | SynchronizeSegmentDomains () |
Sets the domain of the curve int the m_segment[] array to exactly match the domain defined in the m_t[] array. This is not required, but can simplify some coding situations. More... | |
bool | Transform (const ON_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... | |
bool | Trim (const ON_Interval &domain) override |
virtual ON_Curve::Trim override. Removes portions of the curve outside the specified interval. More... | |
bool | Write (ON_BinaryArchive &) const override |
Low level archive writing tool used by ON_BinaryArchive::WriteObject(). More... | |
Public Member Functions inherited from ON_Curve | |
ON_Curve () ON_NOEXCEPT | |
ON_Curve (const ON_Curve &) | |
virtual | ~ON_Curve () |
ON_3dVector | CurvatureAt (double t) const |
Evaluate the curvature vector at a parameter. 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... | |
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... | |
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... | |
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... | |
bool | GetDomain (double *t0, double *t1) const |
curve interface 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 | GetSpanVectorIndex (double t, int side, int *span_vector_index, ON_Interval *span_domain) const |
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 | IsEllipse (const ON_Plane *plane=nullptr, ON_Ellipse *ellipse=nullptr, double tolerance=ON_ZERO_TOLERANCE) const |
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... | |
bool | SetDomain (ON_Interval domain) |
Set the domain of the curve. More... | |
ON_3dVector | TangentAt (double t) const |
Evaluate unit tangent vector at a parameter. 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... | |
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... | |
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 |
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 |
Protected Member Functions inherited from ON_Curve | |
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... | |
An ON_PolyCurve is an ON_Curve represented by a sequence of contiguous ON_Curve segments. A valid polycurve is represented by an array m_segment of Count()>=1 curve objects and a strictly increasing array m_t of Count()+1 parameter values. The i-th curve segment, when considered as part of the polycurve, is affinely reparamaterized from m_t[i] to m_t[i+1], i.e., m_segment[i].Domain()[0] is mapped to m_t[i] and m_segment[i].Domain()[1] is mapped to m_t[i+1].
ON_PolyCurve::ON_PolyCurve | ( | ) |
|
virtual |
ON_PolyCurve::ON_PolyCurve | ( | const ON_PolyCurve & | ) |
ON_PolyCurve::ON_PolyCurve | ( | int | ) |
bool ON_PolyCurve::Append | ( | ON_Curve * | ) |
bool ON_PolyCurve::AppendAndMatch | ( | ON_Curve * | ) |
|
overridevirtual |
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. |
Overrides virtual ON_Curve::ChangeClosedCurveSeam
Reimplemented from ON_Curve.
Reimplemented in ON_PolyEdgeCurve.
|
overridevirtual |
Change the dimension of a curve.
desired_dimension | [in] |
Reimplemented from ON_Curve.
bool ON_PolyCurve::CloseGap | ( | int | gap_index, |
int | segments_to_modify | ||
) |
Modify the one or both locations at the end of segment[gap_index-1] and the start of segment[gap_index] so they are coindicent.
gap_index | [in] 1 <= gap_index < Count() If the locations at the end of segment[gap_index-1] and the start of segment[gap_index] are not identical, then an attempt is made to modify the segments so these locations are closer. |
ends_to_modify | [in] 0: (suggested) The code will decide what segments to modify. 1: modify the end location of segment[gap_index-1] 2: modify the start location of segment[gap_index] |
Note that passing the return value from FindNextGap() will close the gap found by FindNextGap().
int ON_PolyCurve::CloseGaps | ( | ) |
Searches for and closes all gaps that can be found.
int ON_PolyCurve::Count | ( | ) | const |
Interface.
|
overridevirtual |
virtual ON_Object::DataCRC override
Reimplemented from ON_Object.
|
overridevirtual |
Returns maximum algebraic degree of any span or a good estimate if curve spans are not algebraic.
Implements ON_Curve.
void ON_PolyCurve::Destroy | ( | ) |
|
overridevirtual |
virtual ON_Object::DestroyRuntimeCache override
Reimplemented from ON_Curve.
Reimplemented in ON_PolyEdgeCurve.
|
overridevirtual |
ON_Geometry overrides.
Reimplemented from ON_Geometry.
|
overridevirtual |
Implements ON_Curve.
|
overridevirtual |
|
overridevirtual |
void ON_PolyCurve::EmergencyDestroy | ( | ) |
|
overridevirtual |
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 |
Implements ON_Curve.
|
overridevirtual |
virtual ON_Geometry override
Reimplemented from ON_Curve.
|
overridevirtual |
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 from ON_Curve.
int ON_PolyCurve::FindNextGap | ( | int | segment_index0 | ) | const |
Search the curve for gaps between the sub curve segments.
segment_index0 | [in] The search for gaps starts at with the comparing the end of segment[segment_index0] and the start of segment[segment_index0+1]. |
ON_Curve* ON_PolyCurve::FirstSegmentCurve | ( | ) | const |
|
overridevirtual |
virtual ON_Geometry GetBBox override
Reimplemented from ON_Geometry.
|
overridevirtual |
virtual ON_Curve::GetCurveParameterFromNurbFormParameter override
Reimplemented from ON_Curve.
|
overridevirtual |
Search for a derivatitive, tangent, or curvature discontinuity.
c | [in] type of continity to test for. If ON::continuity::C1_continuous |
t0 | [in] search begins at t0 |
t1 | [in] (t0 < t1) search ends at t1 |
t | [out] if a discontinuity is found, the *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. |
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. |
Overrides ON_Curve::GetNextDiscontinuity.
Reimplemented from ON_Curve.
|
overridevirtual |
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 from ON_Curve.
|
overridevirtual |
virtual ON_Curve::GetNurbFormParameterFromCurveParameter override
Reimplemented from ON_Curve.
|
overridevirtual |
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). |
Implements ON_Curve.
|
overridevirtual |
virtual ON_Geometry GetTightBoundingBox override
Reimplemented from ON_Curve.
ON_Curve* ON_PolyCurve::HarvestSegment | ( | int | ) |
bool ON_PolyCurve::HasGapAt | ( | int | segment_index | ) | const |
Determine if there is a gap between the end of segment[segment_index] and the start of segment[segment_index+1].
segment_index | [in] >= 0 |
|
overridevirtual |
Does a NURBS curve representation of this curve.
This is a low-level virtual function.
Reimplemented from ON_Curve.
bool ON_PolyCurve::HasSynchronizedSegmentDomains | ( | ) | const |
bool ON_PolyCurve::Insert | ( | int | , |
ON_Curve * | |||
) |
|
overridevirtual |
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 from ON_Curve.
|
overridevirtual |
Test a curve to see if it is closed.
Reimplemented from ON_Curve.
Reimplemented in ON_PolyEdgeCurve.
|
overridevirtual |
Test continuity at a curve parameter value.
c | [in] continuity to test for |
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. |
Overrides ON_Curve::IsContinuous.
Reimplemented from ON_Curve.
|
overridevirtual |
virtual ON_Geometry::IsDeformable() override
Reimplemented from ON_Geometry.
|
overridevirtual |
Test a curve to see if it lies in a specific plane.
test_plane | [in] |
tolerance | [in] tolerance to use when checking |
Implements ON_Curve.
|
overridevirtual |
Test a curve to see if the locus if its points is a line segment.
tolerance | [in] // tolerance to use when checking linearity |
Reimplemented from ON_Curve.
bool ON_PolyCurve::IsNested | ( | ) | const |
|
overridevirtual |
Test a curve to see if it is periodic.
Reimplemented from ON_Curve.
|
overridevirtual |
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 from ON_Curve.
|
overridevirtual |
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 from ON_Curve.
|
overridevirtual |
Tests an object to see if its data members are correctly initialized.
text_log | [in] if the object is not valid and text_log is not nullptr, then a brief englis description of the reason the object is not valid is appened to the log. The information appended to text_log is suitable for |
low | level debugging purposes by programmers and is not intended to be useful as a high level user interface tool. |
Reimplemented from ON_Geometry.
bool ON_PolyCurve::IsValid | ( | bool | bAllowGaps, |
ON_TextLog * | text_log | ||
) | const |
Tests an object to see if its data members are correctly initialized.
bAllowGaps | [in] If true, gaps are allowed between polycurve segments. If false, gaps are not allowed between polycurve segments. |
text_log | [in] if the object is not valid and text_log is not nullptr, then a brief englis description of the reason the object is not valid is appened to the log. The information appended to text_log is suitable for |
low | level debugging purposes by programmers and is not intended to be useful as a high level user interface tool. |
Overrides virtual ON_Object::IsValid
ON_Curve* ON_PolyCurve::LastSegmentCurve | ( | ) | const |
|
overridevirtual |
virtual ON_Geometry::MakeDeformable() override
Reimplemented from ON_Geometry.
ON_PolyCurve::ON_DEPRECATED_MSG | ( | "Replace calls to HasGap() with FindNextGap(0)" | ) | const |
ON_PolyCurve::ON_DEPRECATED_MSG | ( | "Use RemoveNesting(). RemoveNestingEx() will be removed in the next release." | ) |
ON_PolyCurve& ON_PolyCurve::operator= | ( | const ON_PolyCurve & | ) |
ON_Curve* ON_PolyCurve::operator[] | ( | int | ) | const |
These operator[] functions return nullptr if index is out of range.
bool ON_PolyCurve::ParameterSearch | ( | double | t, |
int & | index, | ||
bool | bEnableSnap | ||
) | 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.
t | [in] parameter |
index | [out] index into m_t such that if the function returns true then t is equal to, or is within tolerance of m_t[index]. if function returns false then the value of index is |
condition value of index t<m_t[0] or m_t is empty -1 m_t[i] < t < m_t[i+1] i for 0<=i<=m_t.Count()-2 t>m_t[ m_t.Count()-1] m_t.Count()-1
bEnableSnap | [in] if true use tolerance when comparing to m_t values Returns true if the t is exactly equal to, or within tolerance of (only if bEnableSnap==true) m_t[index]. |
double ON_PolyCurve::PolyCurveParameter | ( | int | segment_index, |
double | segmentcurve_parameter | ||
) | const |
Converts a segment curve parameter to a polycurve parameter.
segment_index | [in] |
segmentcurve_parameter | [in] |
bool ON_PolyCurve::Prepend | ( | ON_Curve * | ) |
bool ON_PolyCurve::PrependAndMatch | ( | ON_Curve * | ) |
|
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_PolyCurve::Remove | ( | ) |
bool ON_PolyCurve::Remove | ( | int | ) |
bool ON_PolyCurve::RemoveNesting | ( | ) |
Removes the nested of polycurves. The result will have not have an ON_PolyCurve as a segment but will have identical locus and parameterization.
void ON_PolyCurve::Reserve | ( | int | ) |
|
overridevirtual |
Reverse the direction of the curve.
If reveresed, the domain changes from [a,b] to [-b,-a]
Implements ON_Curve.
ON_Curve* ON_PolyCurve::SegmentCurve | ( | int | segment_index | ) | const |
double ON_PolyCurve::SegmentCurveParameter | ( | double | polycurve_parameter | ) | const |
Converts a polycurve parameter to a segment curve parameter.
polycurve_parameter | [in] |
const ON_CurveArray& ON_PolyCurve::SegmentCurves | ( | ) | const |
ON_Interval ON_PolyCurve::SegmentDomain | ( | int | segment_index | ) | const |
int ON_PolyCurve::SegmentIndex | ( | double | polycurve_parameter | ) | const |
Find the segment used for evaluation at polycurve_parameter.
polycurve_parameter | [in] |
int ON_PolyCurve::SegmentIndex | ( | ON_Interval | sub_domain, |
int * | segment_index0, | ||
int * | segment_index1 | ||
) | const |
Find the segments with support on sub_domain.
sub_domain | [in] increasing interval |
segment_index0 | [out] |
segment_index1 | [out] segments with index i where *segment_index0 <= i < *segment_index1 are the segments with support on the sub_domain |
const ON_SimpleArray<double>& ON_PolyCurve::SegmentParameters | ( | ) | const |
|
overridevirtual |
virtual ON_Curve::SetDomain override. Set the domain of the curve
t0 | [in] |
t1 | [in] new domain will be [t0,t1] |
Reimplemented from ON_Curve.
|
overridevirtual |
Force the curve to end at a specified point.
end_point | [in] |
Some end points cannot be moved. Be sure to check return code.
virtual
Reimplemented from ON_Curve.
Reimplemented in ON_PolyEdgeCurve.
bool ON_PolyCurve::SetParameterization | ( | const double * | t | ) |
Expert user function to set the m_t[] array.
t | [in] increasing array of SegmentCount()+1 parameters. Returns True if successful. |
void ON_PolyCurve::SetSegment | ( | int | index, |
ON_Curve * | crv | ||
) |
|
overridevirtual |
Force the curve to start at a specified point.
start_point | [in] |
Some start points cannot be moved. Be sure to check return code.
virtual
Reimplemented from ON_Curve.
Reimplemented in ON_PolyEdgeCurve.
|
overridevirtual |
|
overridevirtual |
Get number of nonempty smooth (c-infinity) spans in curve
Implements ON_Curve.
|
overridevirtual |
virtual ON_Curve::Split override. Divide 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 of the same type. If the pointer is nullptr, then a curve will be created in Split(). You may pass "this" as one of the pointers to Split().
t | [in] parameter in interval Domain(). |
left_side | [out] left portion of curve |
right_side | [out] right portion of curve |
Reimplemented from ON_Curve.
|
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_PolyCurve::SynchronizeSegmentDomains | ( | ) |
Sets the domain of the curve int the m_segment[] array to exactly match the domain defined in the m_t[] array. This is not required, but can simplify some coding situations.
|
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_Curve.
|
overridevirtual |
virtual ON_Curve::Trim override. 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 from ON_Curve.
|
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.