QCAD
Open Source 2D CAD
Loading...
Searching...
No Matches
opennurbs_polylinecurve.h
Go to the documentation of this file.
1/* $NoKeywords: $ */
2/*
3//
4// Copyright (c) 1993-2007 Robert McNeel & Associates. All rights reserved.
5// Rhinoceros is a registered trademark of Robert McNeel & Assoicates.
6//
7// THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
8// ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF
9// MERCHANTABILITY ARE HEREBY DISCLAIMED.
10//
11// For complete openNURBS copyright information see <http://www.opennurbs.org>.
12//
14*/
15
16#if !defined(OPENNURBS_CURVE_POLYLINE_INC_)
17#define OPENNURBS_CURVE_POLYLINE_INC_
18
21{
23
24public:
30
31 virtual ~ON_PolylineCurve();
32
33 // Description:
34 // Call if memory used by ON_PolylineCurve becomes invalid.
35 void EmergencyDestroy();
36
37
39 // ON_Object overrides
40
41 // virtual ON_Object::SizeOf override
42 unsigned int SizeOf() const;
43
44 // virtual ON_Object::DataCRC override
45 ON__UINT32 DataCRC(ON__UINT32 current_remainder) const;
46
47 /*
48 Description:
49 Tests an object to see if its data members are correctly
50 initialized.
51 Parameters:
52 text_log - [in] if the object is not valid and text_log
53 is not NULL, then a brief englis description of the
54 reason the object is not valid is appened to the log.
55 The information appended to text_log is suitable for
56 low-level debugging purposes by programmers and is
57 not intended to be useful as a high level user
58 interface tool.
59 Returns:
60 @untitled table
61 true object is valid
62 false object is invalid, uninitialized, etc.
63 Remarks:
64 Overrides virtual ON_Object::IsValid
65 */
66 ON_BOOL32 IsValid( ON_TextLog* text_log = NULL ) const;
67
68 // Description:
69 // virtual ON_Object::Dump override
70 void Dump(
71 ON_TextLog& dump
72 ) const;
73
74 // Description:
75 // virtual ON_Object::Write override
77 ON_BinaryArchive& binary_archive
78 ) const;
79
80 // Description:
81 // virtual ON_Object::Read override
83 ON_BinaryArchive& binary_archive
84 );
85
87 // ON_Geometry overrides
88
89 // Description:
90 // virtual ON_Geometry::Dimension override
91 // Returns:
92 // value of m_dim
93 int Dimension() const;
94
95 // Description:
96 // virtual ON_Geometry::GetBBox override
97 // Calculates axis aligned bounding box.
98 // Parameters:
99 // boxmin - [in/out] array of Dimension() doubles
100 // boxmax - [in/out] array of Dimension() doubles
101 // bGrowBox - [in] (default=false)
102 // If true, then the union of the input bbox and the
103 // object's bounding box is returned in bbox.
104 // If false, the object's bounding box is returned in bbox.
105 // Returns:
106 // true if object has bounding box and calculation was successful
107 ON_BOOL32 GetBBox( // returns true if successful
108 double* boxmin,
109 double* boxmax,
110 int bGrowBox = false
111 ) const;
112
113 /*
114 Description:
115 Get tight bounding box.
116 Parameters:
117 tight_bbox - [in/out] tight bounding box
118 bGrowBox -[in] (default=false)
119 If true and the input tight_bbox is valid, then returned
120 tight_bbox is the union of the input tight_bbox and the
121 polyline's tight bounding box.
122 xform -[in] (default=NULL)
123 If not NULL, the tight bounding box of the transformed
124 polyline is calculated. The polyline is not modified.
125 Returns:
126 True if a valid tight_bbox is returned.
127 */
129 ON_BoundingBox& tight_bbox,
130 int bGrowBox = false,
131 const ON_Xform* xform = 0
132 ) const;
133
134 // Description:
135 // virtual ON_Geometry::Transform override.
136 // Transforms the NURBS curve.
137 //
138 // Parameters:
139 // xform - [in] transformation to apply to object.
140 //
141 // Remarks:
142 // When overriding this function, be sure to include a call
143 // to ON_Object::TransformUserData() which takes care of
144 // transforming any ON_UserData that may be attached to
145 // the object.
147 const ON_Xform& xform
148 );
149
150 // virtual ON_Geometry::IsDeformable() override
151 bool IsDeformable() const;
152
153 // virtual ON_Geometry::MakeDeformable() override
154 bool MakeDeformable();
155
156 // Description:
157 // virtual ON_Geometry::SwapCoordinates override.
158 // Swaps control point coordinate values with indices i and j.
159 // Parameters:
160 // i - [in] coordinate index
161 // j - [in] coordinate index
163 int i,
164 int j
165 );
166
167 // virtual ON_Geometry override
168 bool Morph( const ON_SpaceMorph& morph );
169
170 // virtual ON_Geometry override
171 bool IsMorphable() const;
172
174 // ON_Curve overrides
175
176 // Description:
177 // virtual ON_Curve::Domain override.
178 // Returns:
179 // domain of the polyline curve.
180 ON_Interval Domain() const;
181
182 // Description:
183 // virtual ON_Curve::SetDomain override.
184 // Set the domain of the curve
185 // Parameters:
186 // t0 - [in]
187 // t1 - [in] new domain will be [t0,t1]
188 // Returns:
189 // true if successful.
191 double t0,
192 double t1
193 );
194
195 bool ChangeDimension(
196 int desired_dimension
197 );
198
199 /*
200 Description:
201 If this curve is closed, then modify it so that
202 the start/end point is at curve parameter t.
203 Parameters:
204 t - [in] curve parameter of new start/end point. The
205 returned curves domain will start at t.
206 Returns:
207 true if successful.
208 Remarks:
209 Overrides virtual ON_Curve::ChangeClosedCurveSeam
210 */
212 double t
213 );
214
215 // Description:
216 // virtual ON_Curve::SpanCount override.
217 // Get number of segments in polyline.
218 // Returns:
219 // Number of segments in polyline.
220 int SpanCount() const;
221
222 // Description:
223 // virtual ON_Curve::GetSpanVector override.
224 // Get list of parameters at polyline points.
225 // Parameters:
226 // knot_values - [out] an array of length SpanCount()+1 is
227 // filled in with the parameter values. knot_values[i]
228 // is the parameter for the point m_pline[i].
229 // Returns:
230 // true if successful
232 double* knot_values
233 ) const;
234
235 // Description:
236 // virtual ON_Curve::Degree override.
237 // Returns:
238 // 1
239 int Degree() const;
240
241 // Description:
242 // virtual ON_Curve::IsLinear override.
243 // Returns:
244 // true if all the polyline points are within tolerance
245 // of the line segment connecting the ends of the polyline.
247 double tolerance = ON_ZERO_TOLERANCE
248 ) const;
249
250 /*
251 Description:
252 Several types of ON_Curve can have the form of a polyline including
253 a degree 1 ON_NurbsCurve, an ON_PolylineCurve, and an ON_PolyCurve
254 all of whose segments are some form of polyline. IsPolyline tests
255 a curve to see if it can be represented as a polyline.
256 Parameters:
257 pline_points - [out] if not NULL and true is returned, then the
258 points of the polyline form are returned here.
259 t - [out] if not NULL and true is returned, then the parameters of
260 the polyline points are returned here.
261 Returns:
262 @untitled table
263 0 curve is not some form of a polyline
264 >=2 number of points in polyline form
265 */
266 int IsPolyline(
267 ON_SimpleArray<ON_3dPoint>* pline_points = NULL,
269 ) const;
270
271 // Description:
272 // virtual ON_Curve::IsArc override.
273 // Returns:
274 // false for all polylines.
276 const ON_Plane* plane = NULL,
277 ON_Arc* arc = NULL,
278 double tolerance = ON_ZERO_TOLERANCE
279 ) const;
280
281 // Description:
282 // virtual ON_Curve::IsPlanar override.
283 // Returns:
284 // true if the polyline is planar.
286 ON_Plane* plane = NULL,
287 double tolerance = ON_ZERO_TOLERANCE
288 ) const;
289
290 // Description:
291 // virtual ON_Curve::IsInPlane override.
292 // Returns:
293 // true if every point in the polyline is within
294 // tolerance of the test_plane.
296 const ON_Plane& test_plane,
297 double tolerance = ON_ZERO_TOLERANCE
298 ) const;
299
300 // Description:
301 // virtual ON_Curve::IsClosed override.
302 // Returns:
303 // true if the polyline has 4 or more point, the
304 // first point and the last point are equal, and
305 // some other point is distinct from the first and
306 // last point.
307 ON_BOOL32 IsClosed() const;
308
309 // Description:
310 // virtual ON_Curve::IsPeriodic override.
311 // Returns:
312 // false for all polylines.
313 ON_BOOL32 IsPeriodic( // true if curve is a single periodic segment
314 void
315 ) const;
316
317 /*
318 Description:
319 Search for a derivatitive, tangent, or curvature discontinuity.
320 Parameters:
321 c - [in] type of continity to test for. If ON::C1_continuous
322 t0 - [in] search begins at t0
323 t1 - [in] (t0 < t1) search ends at t1
324 t - [out] if a discontinuity is found, the *t reports the
325 parameter at the discontinuity.
326 hint - [in/out] if GetNextDiscontinuity will be called repeatedly,
327 passing a "hint" with initial value *hint=0 will increase the speed
328 of the search.
329 dtype - [out] if not NULL, *dtype reports the kind of discontinuity
330 found at *t. A value of 1 means the first derivative or unit tangent
331 was discontinuous. A value of 2 means the second derivative or
332 curvature was discontinuous.
333 cos_angle_tolerance - [in] default = cos(1 degree) Used only when
334 c is ON::G1_continuous or ON::G2_continuous. If the cosine
335 of the angle between two tangent vectors
336 is <= cos_angle_tolerance, then a G1 discontinuity is reported.
337 curvature_tolerance - [in] (default = ON_SQRT_EPSILON) Used only when
338 c is ON::G2_continuous. If K0 and K1 are curvatures evaluated
339 from above and below and |K0 - K1| > curvature_tolerance,
340 then a curvature discontinuity is reported.
341 Returns:
342 true if a discontinuity was found on the interior of the interval (t0,t1).
343 Remarks:
344 Overrides ON_Curve::GetNextDiscontinuity.
345 */
347 ON::continuity c,
348 double t0,
349 double t1,
350 double* t,
351 int* hint=NULL,
352 int* dtype=NULL,
353 double cos_angle_tolerance=0.99984769515639123915701155881391,
354 double curvature_tolerance=ON_SQRT_EPSILON
355 ) const;
356
357 /*
358 Description:
359 Test continuity at a curve parameter value.
360 Parameters:
361 c - [in] continuity to test for
362 t - [in] parameter to test
363 hint - [in] evaluation hint
364 point_tolerance - [in] if the distance between two points is
365 greater than point_tolerance, then the curve is not C0.
366 d1_tolerance - [in] if the difference between two first derivatives is
367 greater than d1_tolerance, then the curve is not C1.
368 d2_tolerance - [in] if the difference between two second derivatives is
369 greater than d2_tolerance, then the curve is not C2.
370 cos_angle_tolerance - [in] default = cos(1 degree) Used only when
371 c is ON::G1_continuous or ON::G2_continuous. If the cosine
372 of the angle between two tangent vectors
373 is <= cos_angle_tolerance, then a G1 discontinuity is reported.
374 curvature_tolerance - [in] (default = ON_SQRT_EPSILON) Used only when
375 c is ON::G2_continuous. If K0 and K1 are curvatures evaluated
376 from above and below and |K0 - K1| > curvature_tolerance,
377 then a curvature discontinuity is reported.
378 Returns:
379 true if the curve has at least the c type continuity at the parameter t.
380 Remarks:
381 Overrides ON_Curve::IsContinuous.
382 */
383 bool IsContinuous(
384 ON::continuity c,
385 double t,
386 int* hint = NULL,
387 double point_tolerance=ON_ZERO_TOLERANCE,
388 double d1_tolerance=ON_ZERO_TOLERANCE,
389 double d2_tolerance=ON_ZERO_TOLERANCE,
390 double cos_angle_tolerance=0.99984769515639123915701155881391,
391 double curvature_tolerance=ON_SQRT_EPSILON
392 ) const;
393
394 // Description:
395 // virtual ON_Curve::Reverse override.
396 // Reverse parameterizatrion by negating all m_t values
397 // and reversing the order of the m_pline points.
398 // Remarks:
399 // Domain changes from [a,b] to [-b,-a]
401
402 /*
403 Description:
404 Force the curve to start at a specified point.
405 Parameters:
406 start_point - [in]
407 Returns:
408 true if successful.
409 Remarks:
410 Some start points cannot be moved. Be sure to check return
411 code.
412 See Also:
413 ON_Curve::SetEndPoint
414 ON_Curve::PointAtStart
415 ON_Curve::PointAtEnd
416 */
417 // virtual
419 ON_3dPoint start_point
420 );
421
422 /*
423 Description:
424 Force the curve to end at a specified point.
425 Parameters:
426 end_point - [in]
427 Returns:
428 true if successful.
429 Remarks:
430 Some end points cannot be moved. Be sure to check return
431 code.
432 See Also:
433 ON_Curve::SetStartPoint
434 ON_Curve::PointAtStart
435 ON_Curve::PointAtEnd
436 */
437 //virtual
439 ON_3dPoint end_point
440 );
441
442 ON_BOOL32 Evaluate( // returns false if unable to evaluate
443 double, // evaluation parameter
444 int, // number of derivatives (>=0)
445 int, // array stride (>=Dimension())
446 double*, // array of length stride*(ndir+1)
447 int = 0, // optional - determines which side to evaluate from
448 // 0 = default
449 // < 0 to evaluate from below,
450 // > 0 to evaluate from above
451 int* = 0 // optional - evaluation hint (int) used to speed
452 // repeated evaluations
453 ) const;
454
456 // Find parameter of the point on a curve that is closest to test_point.
457 // If the maximum_distance parameter is > 0, then only points whose distance
458 // to the given point is <= maximum_distance will be returned. Using a
459 // positive value of maximum_distance can substantially speed up the search.
460 // If the sub_domain parameter is not NULL, then the search is restricted
461 // to the specified portion of the curve.
462 //
463 // true if returned if the search is successful. false is returned if
464 // the search fails.
465 bool GetClosestPoint( const ON_3dPoint&, // test_point
466 double*, // parameter of local closest point returned here
467 double = 0.0, // maximum_distance
468 const ON_Interval* = NULL // sub_domain
469 ) const;
470
472 // Find parameter of the point on a curve that is locally closest to
473 // the test_point. The search for a local close point starts at
474 // seed_parameter. If the sub_domain parameter is not NULL, then
475 // the search is restricted to the specified portion of the curve.
476 //
477 // true if returned if the search is successful. false is returned if
478 // the search fails.
479 ON_BOOL32 GetLocalClosestPoint( const ON_3dPoint&, // test_point
480 double, // seed_parameter
481 double*, // parameter of local closest point returned here
482 const ON_Interval* = NULL // sub_domain
483 ) const;
484
486 // Length of curve.
487 // true if returned if the length calculation is successful.
488 // false is returned if the length is not calculated.
489 //
490 // The arc length will be computed so that
491 // (returned length - real length)/(real length) <= fractional_tolerance
492 // More simply, if you want N significant figures in the answer, set the
493 // fractional_tolerance to 1.0e-N. For "nice" curves, 1.0e-8 works
494 // fine. For very high degree nurbs and nurbs with bad parameterizations,
495 // use larger values of fractional_tolerance.
496 ON_BOOL32 GetLength( // returns true if length successfully computed
497 double*, // length returned here
498 double = 1.0e-8, // fractional_tolerance
499 const ON_Interval* = NULL // (optional) sub_domain
500 ) const;
501
502 /*
503 Description:
504 Used to quickly find short curves.
505 Parameters:
506 tolerance - [in] (>=0)
507 sub_domain - [in] If not NULL, the test is performed
508 on the interval that is the intersection of
509 sub_domain with Domain().
510 Returns:
511 True if the length of the curve is <= tolerance.
512 Remarks:
513 Faster than calling Length() and testing the
514 result.
515 */
516 bool IsShort(
517 double tolerance,
518 const ON_Interval* sub_domain = NULL
519 ) const;
520
521 /*
522 Description:
523 Looks for segments that are shorter than tolerance
524 that can be removed. If bRemoveShortSegments is true,
525 then the short segments are removed. Does not change the
526 domain, but it will change the relative parameterization.
527 Parameters:
528 tolerance - [in]
529 bRemoveShortSegments - [in] If true, then short segments
530 are removed.
531 Returns:
532 True if removable short segments can were found.
533 False if no removable short segments can were found.
534 */
536 double tolerance,
537 bool bRemoveShortSegments = true
538 );
539
540 // Description:
541 // virtual ON_Curve::GetNormalizedArcLengthPoint override.
542 // Get the parameter of the point on the curve that is a
543 // prescribed arc length from the start of the curve.
544 // Parameters:
545 // s - [in] normalized arc length parameter. E.g., 0 = start
546 // of curve, 1/2 = midpoint of curve, 1 = end of curve.
547 // t - [out] parameter such that the length of the curve
548 // from its start to t is arc_length.
549 // fractional_tolerance - [in] desired fractional precision.
550 // fabs(("exact" length from start to t) - arc_length)/arc_length <= fractional_tolerance
551 // sub_domain - [in] If not NULL, the calculation is performed on
552 // the specified sub-domain of the curve.
553 // Returns:
554 // true if successful
556 double s,
557 double* t,
558 double fractional_tolerance = 1.0e-8,
559 const ON_Interval* sub_domain = NULL
560 ) const;
561
562 /*
563 Description:
564 virtual ON_Curve::GetNormalizedArcLengthPoints override.
565 Get the parameter of the point on the curve that is a
566 prescribed arc length from the start of the curve.
567 Parameters:
568 count - [in] number of parameters in s.
569 s - [in] array of normalized arc length parameters. E.g., 0 = start
570 of curve, 1/2 = midpoint of curve, 1 = end of curve.
571 t - [out] array of curve parameters such that the length of the
572 curve from its start to t[i] is s[i]*curve_length.
573 absolute_tolerance - [in] if absolute_tolerance > 0, then the difference
574 between (s[i+1]-s[i])*curve_length and the length of the curve
575 segment from t[i] to t[i+1] will be <= absolute_tolerance.
576 fractional_tolerance - [in] desired fractional precision for each segment.
577 fabs("true" length - actual length)/(actual length) <= fractional_tolerance
578 sub_domain - [in] If not NULL, the calculation is performed on
579 the specified sub-domain of the curve. A 0.0 s value corresponds to
580 sub_domain->Min() and a 1.0 s value corresponds to sub_domain->Max().
581 Returns:
582 true if successful
583 */
585 int count,
586 const double* s,
587 double* t,
588 double absolute_tolerance = 0.0,
589 double fractional_tolerance = 1.0e-8,
590 const ON_Interval* sub_domain = NULL
591 ) const;
592
593 // Description:
594 // virtual ON_Curve::Trim override.
595 ON_BOOL32 Trim( const ON_Interval& );
596
597 // Description:
598 // Where possible, analytically extends curve to include domain.
599 // Parameters:
600 // domain - [in] if domain is not included in curve domain,
601 // curve will be extended so that its domain includes domain.
602 // Will not work if curve is closed. Original curve is identical
603 // to the restriction of the resulting curve to the original curve domain,
604 // Returns:
605 // true if successful.
606 bool Extend(
607 const ON_Interval& domain
608 );
609
610 // Description:
611 // virtual ON_Curve::Split override.
612 //
613 // Split() divides the polyline at the specified parameter. The parameter
614 // must be in the interior of the curve's domain. The pointers passed
615 // to ON_NurbsCurve::Split must either be NULL or point to an ON_NurbsCurve.
616 // If the pointer is NULL, then a curve will be created
617 // in Split(). You may pass "this" as one of the pointers to Split().
618 // For example,
619 //
620 // ON_NurbsCurve right_side;
621 // crv.Split( crv.Domain().Mid() &crv, &right_side );
622 //
623 // would split crv at the parametric midpoint, put the left side in crv,
624 // and return the right side in right_side.
626 double, // t = curve parameter to split curve at
627 ON_Curve*&, // left portion returned here (must be an ON_NurbsCurve)
628 ON_Curve*& // right portion returned here (must be an ON_NurbsCurve)
629 ) const;
630
631 int GetNurbForm( // returns 0: unable to create NURBS representation
632 // with desired accuracy.
633 // 1: success - returned NURBS parameterization
634 // matches the curve's to wthe desired accuracy
635 // 2: success - returned NURBS point locus matches
636 // the curve's to the desired accuracy but, on
637 // the interior of the curve's domain, the
638 // curve's parameterization and the NURBS
639 // parameterization may not match to the
640 // desired accuracy.
642 double = 0.0,
643 const ON_Interval* = NULL // OPTIONAL subdomain of polyline
644 ) const;
645
646 int HasNurbForm( // returns 0: unable to create NURBS representation
647 // with desired accuracy.
648 // 1: success - returned NURBS parameterization
649 // matches the curve's to wthe desired accuracy
650 // 2: success - returned NURBS point locus matches
651 // the curve's to the desired accuracy but, on
652 // the interior of the curve's domain, the
653 // curve's parameterization and the NURBS
654 // parameterization may not match to the
655 // desired accuracy.
656 ) const;
657
658 // virtual ON_Curve::GetCurveParameterFromNurbFormParameter override
660 double, // nurbs_t
661 double* // curve_t
662 ) const;
663
664 // virtual ON_Curve::GetNurbFormParameterFromCurveParameter override
666 double, // curve_t
667 double* // nurbs_t
668 ) const;
669/*
670 Description:
671 Lookup a parameter in the m_t array, optionally using a built in snap tolerance to
672 snap a parameter value to an element of m_t.
673 Parameters:
674 t - [in] parameter
675 index -[out] index into m_t such that
676 if function returns false then value of index is
677
678 @table
679 value of index condition
680 -1 t<m_t[0] or m_t is empty
681 0<=i<=m_t.Count()-2 m_t[i] < t < m_t[i+1]
682 m_t.Count()-1 t>m_t[ m_t.Count()-1]
683
684 if the function returns true then t is equal to, or is closest to and
685 within tolerance of m_t[index].
686
687 bEnableSnap-[in] enable snapping
688 Returns:
689 true if the t is exactly equal to, or within tolerance of
690 (only if bEnableSnap==true) m_t[index].
691*/
692 bool ParameterSearch(double t, int& index, bool bEnableSnap) const;
693
694 bool Append( const ON_PolylineCurve& );
695
697 // Interface
698 public:
699 int PointCount() const; // number of points in polyline
700
703 int m_dim; // 2 or 3 (2 so ON_PolylineCurve can be uses as a trimming curve)
704};
705
706
707#endif
@ Transform
Definition RSMetaType.h:67
int i
Copyright (c) 2011-2018 by Andrew Mustun.
Definition autostart.js:32
Definition opennurbs_array.h:398
Definition opennurbs_point.h:403
Definition opennurbs_arc.h:34
Definition opennurbs_archive.h:152
Definition opennurbs_bounding_box.h:25
Definition opennurbs_curve.h:88
virtual bool IsContinuous(ON::continuity c, double t, int *hint=NULL, double point_tolerance=ON_ZERO_TOLERANCE, double d1_tolerance=ON_ZERO_TOLERANCE, double d2_tolerance=ON_ZERO_TOLERANCE, double cos_angle_tolerance=0.99984769515639123915701155881391, double curvature_tolerance=ON_SQRT_EPSILON) const
Definition opennurbs_curve.cpp:602
virtual ON_BOOL32 IsArc(const ON_Plane *plane=NULL, ON_Arc *arc=NULL, double tolerance=ON_ZERO_TOLERANCE) const
Definition opennurbs_curve.cpp:248
bool GetTightBoundingBox(ON_BoundingBox &tight_bbox, int bGrowBox=false, const ON_Xform *xform=0) const
Definition opennurbs_basic.cpp:333
virtual int GetNurbForm(ON_NurbsCurve &nurbs_curve, double tolerance=0.0, const ON_Interval *subdomain=NULL) const
Definition opennurbs_curve.cpp:2625
virtual ON_BOOL32 ChangeClosedCurveSeam(double t)
Definition opennurbs_curve.cpp:117
virtual ON_BOOL32 GetNormalizedArcLengthPoint(double s, double *t, double fractional_tolerance=1.0e-8, const ON_Interval *sub_domain=NULL) const
Definition opennurbs_curve.cpp:2489
virtual bool GetClosestPoint(const ON_3dPoint &, double *t, double maximum_distance=0.0, const ON_Interval *sub_domain=NULL) const
Definition opennurbs_basic.cpp:322
virtual bool ChangeDimension(int desired_dimension)
Definition opennurbs_curve.cpp:124
virtual ON_BOOL32 Evaluate(double t, int der_count, int v_stride, double *v, int side=0, int *hint=0) const =0
ON_Curve & operator=(const ON_Curve &)
Definition opennurbs_curve.cpp:26
virtual int Degree() const =0
virtual bool GetNextDiscontinuity(ON::continuity c, double t0, double t1, double *t, int *hint=NULL, int *dtype=NULL, double cos_angle_tolerance=0.99984769515639123915701155881391, double curvature_tolerance=ON_SQRT_EPSILON) const
Definition opennurbs_curve.cpp:450
unsigned int SizeOf() const
Definition opennurbs_curve.cpp:52
virtual int HasNurbForm() const
Definition opennurbs_curve.cpp:2635
virtual ON_BOOL32 GetLocalClosestPoint(const ON_3dPoint &test_point, double seed_parameter, double *t, const ON_Interval *sub_domain=0) const
Definition opennurbs_curve.cpp:1209
virtual ON_BOOL32 SetStartPoint(ON_3dPoint start_point)
Definition opennurbs_curve.cpp:779
virtual ON_BOOL32 IsPeriodic() const
Definition opennurbs_curve.cpp:444
virtual ON_BOOL32 Split(double t, ON_Curve *&left_side, ON_Curve *&right_side) const
Definition opennurbs_curve.cpp:2614
bool IsShort(double tolerance, const ON_Interval *sub_domain=NULL) const
Definition opennurbs_curve.cpp:1482
bool RemoveShortSegments(double tolerance, bool bRemoveShortSegments=true)
Definition opennurbs_curve.cpp:2425
virtual bool Extend(const ON_Interval &domain)
Definition opennurbs_curve.cpp:2521
virtual ON_BOOL32 GetNormalizedArcLengthPoints(int count, const double *s, double *t, double absolute_tolerance=0.0, double fractional_tolerance=1.0e-8, const ON_Interval *sub_domain=NULL) const
Definition opennurbs_curve.cpp:2500
virtual ON_BOOL32 IsClosed() const
Definition opennurbs_curve.cpp:408
virtual ON_BOOL32 Reverse()=0
virtual ON_BOOL32 GetCurveParameterFromNurbFormParameter(double nurbs_t, double *curve_t) const
Definition opennurbs_curve.cpp:2659
bool SetDomain(ON_Interval domain)
Definition opennurbs_curve.cpp:105
virtual ON_BOOL32 GetLength(double *length, double fractional_tolerance=1.0e-8, const ON_Interval *sub_domain=NULL) const
Definition opennurbs_curve.cpp:1220
virtual ON_BOOL32 SetEndPoint(ON_3dPoint end_point)
Definition opennurbs_curve.cpp:784
virtual int SpanCount() const =0
virtual ON_BOOL32 GetNurbFormParameterFromCurveParameter(double curve_t, double *nurbs_t) const
Definition opennurbs_curve.cpp:2668
virtual ON_BOOL32 GetSpanVector(double *knots) const =0
virtual ON_BOOL32 IsLinear(double tolerance=ON_ZERO_TOLERANCE) const
Definition opennurbs_curve.cpp:184
virtual ON_BOOL32 IsPlanar(ON_Plane *plane=NULL, double tolerance=ON_ZERO_TOLERANCE) const
Definition opennurbs_curve.cpp:317
virtual ON_Interval Domain() const =0
virtual ON_BOOL32 Trim(const ON_Interval &domain)
Definition opennurbs_curve.cpp:2514
bool ParameterSearch(double t, int &index, bool bEnableSnap, const ON_SimpleArray< double > &m_t, double RelTol=ON_SQRT_EPSILON) const
Definition opennurbs_curve.cpp:3226
virtual ON_BOOL32 IsInPlane(const ON_Plane &test_plane, double tolerance=ON_ZERO_TOLERANCE) const =0
virtual int IsPolyline(ON_SimpleArray< ON_3dPoint > *pline_points=NULL, ON_SimpleArray< double > *pline_t=NULL) const
Definition opennurbs_curve.cpp:174
virtual bool IsDeformable() const
Definition opennurbs_geometry.cpp:205
virtual ON_BOOL32 GetBBox(double *boxmin, double *boxmax, int bGrowBox=false) const =0
virtual ON_BOOL32 SwapCoordinates(int i, int j)
Definition opennurbs_geometry.cpp:135
virtual bool MakeDeformable()
Definition opennurbs_geometry.cpp:210
virtual bool Morph(const ON_SpaceMorph &morph)
Definition opennurbs_geometry.cpp:254
virtual int Dimension() const =0
virtual bool IsMorphable() const
Definition opennurbs_geometry.cpp:259
Definition opennurbs_point.h:46
Definition opennurbs_nurbscurve.h:27
virtual ON__UINT32 DataCRC(ON__UINT32 current_remainder) const
Definition opennurbs_object.cpp:1689
virtual void Dump(ON_TextLog &) const
Definition opennurbs_object.cpp:1695
virtual ON_BOOL32 IsValid(ON_TextLog *text_log=NULL) const =0
virtual ON_BOOL32 Read(ON_BinaryArchive &binary_archive)
Definition opennurbs_object.cpp:1734
virtual ON_BOOL32 Write(ON_BinaryArchive &binary_archive) const
Definition opennurbs_object.cpp:1714
Definition opennurbs_plane.h:20
Definition opennurbs_polylinecurve.h:21
ON_Polyline m_pline
Definition opennurbs_polylinecurve.h:701
int m_dim
Definition opennurbs_polylinecurve.h:703
ON_OBJECT_DECLARE(ON_PolylineCurve)
ON_SimpleArray< double > m_t
Definition opennurbs_polylinecurve.h:702
Definition opennurbs_polyline.h:20
Definition opennurbs_array.h:46
Definition opennurbs_xform.h:1146
Definition opennurbs_textlog.h:20
Definition opennurbs_xform.h:28
#define ON_ZERO_TOLERANCE
Definition opennurbs_defines.h:238
#define ON_CLASS
Definition opennurbs_defines.h:91
#define ON_SQRT_EPSILON
Definition opennurbs_defines.h:147
char s
Definition opennurbs_string.cpp:32
#define NULL
Definition opennurbs_system.h:256
int ON_BOOL32
Definition opennurbs_system.h:362
unsigned int ON__UINT32
Definition opennurbs_system.h:326