opennurbs_polylinecurve.h
1 /* $NoKeywords: $ */
2 /*
3 //
4 // Copyright (c) 1993-2012 Robert McNeel & Associates. All rights reserved.
5 // OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert
6 // McNeel & Associates.
7 //
8 // THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
9 // ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF
10 // MERCHANTABILITY ARE HEREBY DISCLAIMED.
11 //
12 // For complete openNURBS copyright information see <http://www.opennurbs.org>.
13 //
14 ////////////////////////////////////////////////////////////////
15 */
16 
17 #if !defined(OPENNURBS_CURVE_POLYLINE_INC_)
18 #define OPENNURBS_CURVE_POLYLINE_INC_
19 
20 class ON_PolylineCurve;
21 class ON_CLASS ON_PolylineCurve : public ON_Curve
22 {
23  ON_OBJECT_DECLARE(ON_PolylineCurve);
24 
25 public:
26  ON_PolylineCurve() ON_NOEXCEPT;
27  virtual ~ON_PolylineCurve();
30 
31 #if defined(ON_HAS_RVALUEREF)
32  // rvalue copy constructor
33  ON_PolylineCurve( ON_PolylineCurve&& ) ON_NOEXCEPT;
34 
35  // The rvalue assignment operator calls ON_Object::operator=(ON_Object&&)
36  // which could throw exceptions. See the implementation of
37  // ON_Object::operator=(ON_Object&&) for details.
39 #endif
40 
41  // Construct polyline from points and parameters
45 
46 
47  // Description:
48  // Call if memory used by ON_PolylineCurve becomes invalid.
49  void EmergencyDestroy();
50 
51 
52  /////////////////////////////////////////////////////////////////
53  // ON_Object overrides
54 
55  // virtual ON_Object::SizeOf override
56  unsigned int SizeOf() const override;
57 
58  // virtual ON_Object::DataCRC override
59  ON__UINT32 DataCRC(ON__UINT32 current_remainder) const override;
60 
61  bool IsValid( class ON_TextLog* text_log = nullptr ) const override;
62 
63  // Description:
64  // virtual ON_Object::Dump override
65  void Dump(
66  ON_TextLog& dump
67  ) const override;
68 
69  // Description:
70  // virtual ON_Object::Write override
71  bool Write(
72  ON_BinaryArchive& binary_archive
73  ) const override;
74 
75  // Description:
76  // virtual ON_Object::Read override
77  bool Read(
78  ON_BinaryArchive& binary_archive
79  ) override;
80 
81  /////////////////////////////////////////////////////////////////
82  // ON_Geometry overrides
83 
84  // Description:
85  // virtual ON_Geometry::Dimension override
86  // Returns:
87  // value of m_dim
88  int Dimension() const override;
89 
90  // virtual ON_Geometry GetBBox override
91  bool GetBBox( double* boxmin, double* boxmax, bool bGrowBox = false ) const override;
92 
93  // virtual ON_Geometry GetTightBoundingBox override
94  bool GetTightBoundingBox( class ON_BoundingBox& tight_bbox, bool bGrowBox = false, const class ON_Xform* xform = nullptr ) const override;
95 
96  // Description:
97  // virtual ON_Geometry::Transform override.
98  // Transforms the NURBS curve.
99  //
100  // Parameters:
101  // xform - [in] transformation to apply to object.
102  //
103  // Remarks:
104  // When overriding this function, be sure to include a call
105  // to ON_Object::TransformUserData() which takes care of
106  // transforming any ON_UserData that may be attached to
107  // the object.
108  bool Transform(
109  const ON_Xform& xform
110  ) override;
111 
112  // virtual ON_Geometry::IsDeformable() override
113  bool IsDeformable() const override;
114 
115  // virtual ON_Geometry::MakeDeformable() override
116  bool MakeDeformable() override;
117 
118  // Description:
119  // virtual ON_Geometry::SwapCoordinates override.
120  // Swaps control point coordinate values with indices i and j.
121  // Parameters:
122  // i - [in] coordinate index
123  // j - [in] coordinate index
124  bool SwapCoordinates(
125  int i,
126  int j
127  ) override;
128 
129 
130  /////////////////////////////////////////////////////////////////
131  // ON_Curve overrides
132 
133  // Description:
134  // virtual ON_Curve::Domain override.
135  // Returns:
136  // domain of the polyline curve.
137  ON_Interval Domain() const override;
138 
139  // Description:
140  // virtual ON_Curve::SetDomain override.
141  // Set the domain of the curve
142  // Parameters:
143  // t0 - [in]
144  // t1 - [in] new domain will be [t0,t1]
145  // Returns:
146  // true if successful.
147  bool SetDomain(
148  double t0,
149  double t1
150  ) override;
151 
152  bool ChangeDimension(
153  int desired_dimension
154  ) override;
155 
156  /*
157  Description:
158  If this curve is closed, then modify it so that
159  the start/end point is at curve parameter t.
160  Parameters:
161  t - [in] curve parameter of new start/end point. The
162  returned curves domain will start at t.
163  Returns:
164  true if successful.
165  Remarks:
166  Overrides virtual ON_Curve::ChangeClosedCurveSeam
167  */
168  bool ChangeClosedCurveSeam(
169  double t
170  ) override;
171 
172  // Description:
173  // virtual ON_Curve::SpanCount override.
174  // Get number of segments in polyline.
175  // Returns:
176  // Number of segments in polyline.
177  int SpanCount() const override;
178 
179  // Description:
180  // virtual ON_Curve::GetSpanVector override.
181  // Get list of parameters at polyline points.
182  // Parameters:
183  // knot_values - [out] an array of length SpanCount()+1 is
184  // filled in with the parameter values. knot_values[i]
185  // is the parameter for the point m_pline[i].
186  // Returns:
187  // true if successful
188  bool GetSpanVector(
189  double* knot_values
190  ) const override;
191 
192  // Description:
193  // virtual ON_Curve::Degree override.
194  // Returns:
195  // 1
196  int Degree() const override;
197 
198  // Description:
199  // virtual ON_Curve::IsLinear override.
200  // Returns:
201  // true if all the polyline points are within tolerance
202  // of the line segment connecting the ends of the polyline.
203  bool IsLinear(
204  double tolerance = ON_ZERO_TOLERANCE
205  ) const override;
206 
207  /*
208  Description:
209  Several types of ON_Curve can have the form of a polyline including
210  a degree 1 ON_NurbsCurve, an ON_PolylineCurve, and an ON_PolyCurve
211  all of whose segments are some form of polyline. IsPolyline tests
212  a curve to see if it can be represented as a polyline.
213  Parameters:
214  pline_points - [out] if not nullptr and true is returned, then the
215  points of the polyline form are returned here.
216  t - [out] if not nullptr and true is returned, then the parameters of
217  the polyline points are returned here.
218  Returns:
219  @untitled table
220  0 curve is not some form of a polyline
221  >=2 number of points in polyline form
222  */
223  int IsPolyline(
224  ON_SimpleArray<ON_3dPoint>* pline_points = nullptr,
225  ON_SimpleArray<double>* pline_t = nullptr
226  ) const override;
227 
228  // Description:
229  // virtual ON_Curve::IsArc override.
230  // Returns:
231  // false for all polylines.
232  bool IsArc(
233  const ON_Plane* plane = nullptr,
234  ON_Arc* arc = nullptr,
235  double tolerance = ON_ZERO_TOLERANCE
236  ) const override;
237 
238  // Description:
239  // virtual ON_Curve::IsPlanar override.
240  // Returns:
241  // true if the polyline is planar.
242  bool IsPlanar(
243  ON_Plane* plane = nullptr,
244  double tolerance = ON_ZERO_TOLERANCE
245  ) const override;
246 
247  // Description:
248  // virtual ON_Curve::IsInPlane override.
249  // Returns:
250  // true if every point in the polyline is within
251  // tolerance of the test_plane.
252  bool IsInPlane(
253  const ON_Plane& test_plane,
254  double tolerance = ON_ZERO_TOLERANCE
255  ) const override;
256 
257  // Description:
258  // virtual ON_Curve::IsClosed override.
259  // Returns:
260  // true if the polyline has 4 or more point, the
261  // first point and the last point are equal, and
262  // some other point is distinct from the first and
263  // last point.
264  bool IsClosed() const override;
265 
266  // Description:
267  // virtual ON_Curve::IsPeriodic override.
268  // Returns:
269  // false for all polylines.
270  bool IsPeriodic( // true if curve is a single periodic segment
271  void
272  ) const override;
273 
274  /*
275  Description:
276  Search for a derivatitive, tangent, or curvature discontinuity.
277  Parameters:
278  c - [in] type of continity to test for. If ON::continuity::C1_continuous
279  t0 - [in] search begins at t0
280  t1 - [in] (t0 < t1) search ends at t1
281  t - [out] if a discontinuity is found, the *t reports the
282  parameter at the discontinuity.
283  hint - [in/out] if GetNextDiscontinuity will be called repeatedly,
284  passing a "hint" with initial value *hint=0 will increase the speed
285  of the search.
286  dtype - [out] if not nullptr, *dtype reports the kind of discontinuity
287  found at *t. A value of 1 means the first derivative or unit tangent
288  was discontinuous. A value of 2 means the second derivative or
289  curvature was discontinuous.
290  cos_angle_tolerance - [in] default = cos(1 degree) Used only when
291  c is ON::continuity::G1_continuous or ON::continuity::G2_continuous. If the cosine
292  of the angle between two tangent vectors
293  is <= cos_angle_tolerance, then a G1 discontinuity is reported.
294  curvature_tolerance - [in] (default = ON_SQRT_EPSILON) Used only when
295  c is ON::continuity::G2_continuous or ON::continuity::Gsmooth_continuous.
296  ON::continuity::G2_continuous:
297  If K0 and K1 are curvatures evaluated
298  from above and below and |K0 - K1| > curvature_tolerance,
299  then a curvature discontinuity is reported.
300  ON::continuity::Gsmooth_continuous:
301  If K0 and K1 are curvatures evaluated from above and below
302  and the angle between K0 and K1 is at least twice angle tolerance
303  or ||K0| - |K1|| > (max(|K0|,|K1|) > curvature_tolerance,
304  then a curvature discontinuity is reported.
305  Returns:
306  true if a discontinuity was found on the interior of the interval (t0,t1).
307  Remarks:
308  Overrides ON_Curve::GetNextDiscontinuity.
309  */
310  bool GetNextDiscontinuity(
311  ON::continuity c,
312  double t0,
313  double t1,
314  double* t,
315  int* hint=nullptr,
316  int* dtype=nullptr,
317  double cos_angle_tolerance=ON_DEFAULT_ANGLE_TOLERANCE_COSINE,
318  double curvature_tolerance=ON_SQRT_EPSILON
319  ) const override;
320 
321  /*
322  Description:
323  Test continuity at a curve parameter value.
324  Parameters:
325  c - [in] continuity to test for
326  t - [in] parameter to test
327  hint - [in] evaluation hint
328  point_tolerance - [in] if the distance between two points is
329  greater than point_tolerance, then the curve is not C0.
330  d1_tolerance - [in] if the difference between two first derivatives is
331  greater than d1_tolerance, then the curve is not C1.
332  d2_tolerance - [in] if the difference between two second derivatives is
333  greater than d2_tolerance, then the curve is not C2.
334  cos_angle_tolerance - [in] default = cos(1 degree) Used only when
335  c is ON::continuity::G1_continuous or ON::continuity::G2_continuous. If the cosine
336  of the angle between two tangent vectors
337  is <= cos_angle_tolerance, then a G1 discontinuity is reported.
338  curvature_tolerance - [in] (default = ON_SQRT_EPSILON) Used only when
339  c is ON::continuity::G2_continuous or ON::continuity::Gsmooth_continuous.
340  ON::continuity::G2_continuous:
341  If K0 and K1 are curvatures evaluated
342  from above and below and |K0 - K1| > curvature_tolerance,
343  then a curvature discontinuity is reported.
344  ON::continuity::Gsmooth_continuous:
345  If K0 and K1 are curvatures evaluated from above and below
346  and the angle between K0 and K1 is at least twice angle tolerance
347  or ||K0| - |K1|| > (max(|K0|,|K1|) > curvature_tolerance,
348  then a curvature discontinuity is reported.
349  Returns:
350  true if the curve has at least the c type continuity at the parameter t.
351  Remarks:
352  Overrides ON_Curve::IsContinuous.
353  */
354  bool IsContinuous(
355  ON::continuity c,
356  double t,
357  int* hint = nullptr,
358  double point_tolerance=ON_ZERO_TOLERANCE,
359  double d1_tolerance=ON_ZERO_TOLERANCE,
360  double d2_tolerance=ON_ZERO_TOLERANCE,
361  double cos_angle_tolerance=ON_DEFAULT_ANGLE_TOLERANCE_COSINE,
362  double curvature_tolerance=ON_SQRT_EPSILON
363  ) const override;
364 
365  // Description:
366  // virtual ON_Curve::Reverse override.
367  // Reverse parameterizatrion by negating all m_t values
368  // and reversing the order of the m_pline points.
369  // Remarks:
370  // Domain changes from [a,b] to [-b,-a]
371  bool Reverse() override;
372 
373  /*
374  Description:
375  Force the curve to start at a specified point.
376  Parameters:
377  start_point - [in]
378  Returns:
379  true if successful.
380  Remarks:
381  Some start points cannot be moved. Be sure to check return
382  code.
383  See Also:
384  ON_Curve::SetEndPoint
385  ON_Curve::PointAtStart
386  ON_Curve::PointAtEnd
387  */
388  // virtual
389  bool SetStartPoint(
390  ON_3dPoint start_point
391  ) override;
392 
393  /*
394  Description:
395  Force the curve to end at a specified point.
396  Parameters:
397  end_point - [in]
398  Returns:
399  true if successful.
400  Remarks:
401  Some end points cannot be moved. Be sure to check return
402  code.
403  See Also:
404  ON_Curve::SetStartPoint
405  ON_Curve::PointAtStart
406  ON_Curve::PointAtEnd
407  */
408  //virtual
409  bool SetEndPoint(
410  ON_3dPoint end_point
411  ) override;
412 
413  bool Evaluate( // returns false if unable to evaluate
414  double, // evaluation parameter
415  int, // number of derivatives (>=0)
416  int, // array stride (>=Dimension())
417  double*, // array of length stride*(ndir+1)
418  int = 0, // optional - determines which side to evaluate from
419  // 0 = default
420  // < 0 to evaluate from below,
421  // > 0 to evaluate from above
422  int* = 0 // optional - evaluation hint (int) used to speed
423  // repeated evaluations
424  ) const override;
425 
426 
427  // Description:
428  // virtual ON_Curve::Trim override.
429  bool Trim( const ON_Interval& ) override;
430 
431  // Description:
432  // Where possible, analytically extends curve to include domain.
433  // Parameters:
434  // domain - [in] if domain is not included in curve domain,
435  // curve will be extended so that its domain includes domain.
436  // Will not work if curve is closed. Original curve is identical
437  // to the restriction of the resulting curve to the original curve domain,
438  // Returns:
439  // true if successful.
440  bool Extend(
441  const ON_Interval& domain
442  ) override;
443 
444  // Description:
445  // virtual ON_Curve::Split override.
446  //
447  // Split() divides the polyline at the specified parameter. The parameter
448  // must be in the interior of the curve's domain. The pointers passed
449  // to ON_NurbsCurve::Split must either be nullptr or point to an ON_NurbsCurve.
450  // If the pointer is nullptr, then a curve will be created
451  // in Split(). You may pass "this" as one of the pointers to Split().
452  // For example,
453  //
454  // ON_NurbsCurve right_side;
455  // crv.Split( crv.Domain().Mid() &crv, &right_side );
456  //
457  // would split crv at the parametric midpoint, put the left side in crv,
458  // and return the right side in right_side.
459  bool Split(
460  double, // t = curve parameter to split curve at
461  ON_Curve*&, // left portion returned here (must be an ON_NurbsCurve)
462  ON_Curve*& // right portion returned here (must be an ON_NurbsCurve)
463  ) const override;
464 
465  int GetNurbForm( // returns 0: unable to create NURBS representation
466  // with desired accuracy.
467  // 1: success - returned NURBS parameterization
468  // matches the curve's to wthe desired accuracy
469  // 2: success - returned NURBS point locus matches
470  // the curve's to the desired accuracy but, on
471  // the interior of the curve's domain, the
472  // curve's parameterization and the NURBS
473  // parameterization may not match to the
474  // desired accuracy.
475  ON_NurbsCurve&,
476  double = 0.0,
477  const ON_Interval* = nullptr // OPTIONAL subdomain of polyline
478  ) const override;
479 
480  int HasNurbForm( // returns 0: unable to create NURBS representation
481  // with desired accuracy.
482  // 1: success - returned NURBS parameterization
483  // matches the curve's to wthe desired accuracy
484  // 2: success - returned NURBS point locus matches
485  // the curve's to the desired accuracy but, on
486  // the interior of the curve's domain, the
487  // curve's parameterization and the NURBS
488  // parameterization may not match to the
489  // desired accuracy.
490  ) const override;
491 
492  // virtual ON_Curve::GetCurveParameterFromNurbFormParameter override
494  double, // nurbs_t
495  double* // curve_t
496  ) const override;
497 
498  // virtual ON_Curve::GetNurbFormParameterFromCurveParameter override
500  double, // curve_t
501  double* // nurbs_t
502  ) const override;
503 /*
504  Description:
505  Lookup a parameter in the m_t array, optionally using a built in snap tolerance to
506  snap a parameter value to an element of m_t.
507  Parameters:
508  t - [in] parameter
509  index -[out] index into m_t such that
510  if function returns false then value of index is
511 
512  @table
513  value of index condition
514  -1 t<m_t[0] or m_t is empty
515  0<=i<=m_t.Count()-2 m_t[i] < t < m_t[i+1]
516  m_t.Count()-1 t>m_t[ m_t.Count()-1]
517 
518  if the function returns true then t is equal to, or is closest to and
519  within tolerance of m_t[index].
520 
521  bEnableSnap-[in] enable snapping
522  Returns:
523  true if the t is exactly equal to, or within tolerance of
524  (only if bEnableSnap==true) m_t[index].
525 */
526  bool ParameterSearch(double t, int& index, bool bEnableSnap) const;
527 
528  bool Append( const ON_PolylineCurve& );
529 
530  /////////////////////////////////////////////////////////////////
531  // Interface
532  public:
533  int PointCount() const; // number of points in polyline
534 
535  ON_Polyline m_pline;
536  ON_SimpleArray<double> m_t; // parameters
537  int m_dim; // 2 or 3 (2 so ON_PolylineCurve can be uses as a trimming curve)
538 };
539 
540 
541 #endif
virtual bool IsClosed() const
Test a curve to see if it is closed.
Definition: opennurbs_polyline.h:20
virtual int SpanCount() const =0
Get number of nonempty smooth (c-infinity) spans in curve
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.
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.
virtual int Dimension() const
Dimension of the object.
An ON_Arc is a subcurve of 3d circle.
Definition: opennurbs_arc.h:33
virtual bool GetBBox(double *boxmin, double *boxmax, bool bGrowBox=false) const
This is the virtual function that actually calculates axis aligned bounding boxes.
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 v...
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.
virtual bool SetStartPoint(ON_3dPoint start_point)
Force the curve to start at a specified point.
virtual int HasNurbForm() const
Does a NURBS curve representation of this curve.
virtual bool GetSpanVector(double *knots) const =0
Get number of parameters of "knots".
virtual bool MakeDeformable()
If possible, converts the object into a form that can be accuratly modified with "squishy" transforma...
virtual bool Reverse()=0
Reverse the direction of the curve.
virtual bool Extend(const ON_Interval &domain)
Pure virtual function. Default returns false. Where possible, analytically extends curve to include d...
ON_Curve is a pure virtual class for curve objects
Definition: opennurbs_curve.h:93
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.
virtual int Degree() const =0
Returns maximum algebraic degree of any span or a good estimate if curve spans are not algebraic...
virtual bool IsPlanar(ON_Plane *plane=nullptr, double tolerance=ON_ZERO_TOLERANCE) const
Test a curve to see if it is planar.
virtual bool SwapCoordinates(int i, int j)
Swaps object coordinate values with indices i and j.
virtual bool GetNurbFormParameterFromCurveParameter(double curve_t, double *nurbs_t) const
Convert a curve parameter to a NURBS curve parameter.
virtual bool ChangeDimension(int desired_dimension)
Change the dimension of a curve.
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.
bool Transform(const ON_Xform &xform) override
overrides virtual ON_Geometry::Transform(). ON_Curve::Transform() calls ON_Geometry::Transform(xform)...
Definition: opennurbs_point.h:2018
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.
virtual bool ChangeClosedCurveSeam(double t)
If this curve is closed, then modify it so that the start/end point is at curve parameter t...
Definition: opennurbs_bounding_box.h:25
Definition: opennurbs_xform.h:28
bool GetTightBoundingBox(class ON_BoundingBox &tight_bbox, bool bGrowBox=false, const class ON_Xform *xform=nullptr) const override
virtual ON_Geometry GetTightBoundingBox override
virtual void Dump(ON_TextLog &) const
Creates a text dump of the object.
void EmergencyDestroy()
Sets m_user_data_list = 0.
virtual bool IsDeformable() const
ON_Curve & operator=(const ON_Curve &)
virtual bool IsPeriodic() const
Test a curve to see if it is periodic.
bool SetDomain(ON_Interval domain)
Set the domain of the curve.
virtual bool GetCurveParameterFromNurbFormParameter(double nurbs_t, double *curve_t) const
Convert a NURBS curve parameter to a curve parameter
virtual bool Trim(const ON_Interval &domain)
Removes portions of the curve outside the specified interval.
virtual bool SetEndPoint(ON_3dPoint end_point)
Force the curve to end at a specified point.
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 func...
Definition: opennurbs_nurbscurve.h:26
Definition: opennurbs_polylinecurve.h:21
Definition: opennurbs_textlog.h:20
Definition: opennurbs_archive.h:1783
virtual bool Read(ON_BinaryArchive &binary_archive)
Low level archive writing tool used by ON_BinaryArchive::ReadObject().
Definition: opennurbs_point.h:460
bool IsValid(class ON_TextLog *text_log=nullptr) const override
Tests an object to see if its data members are correctly initialized.
virtual bool Write(ON_BinaryArchive &binary_archive) const
Low level archive writing tool used by ON_BinaryArchive::WriteObject().
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 quic...
Definition: opennurbs_plane.h:20
unsigned int SizeOf() const override
virtual ON_Object::SizeOf override
virtual bool IsLinear(double tolerance=ON_ZERO_TOLERANCE) const
Test a curve to see if the locus if its points is a line segment.
Definition: opennurbs_point.h:46
virtual ON_Interval Domain() const =0
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 c...