QCAD
Open Source 2D CAD
Loading...
Searching...
No Matches
opennurbs_curveproxy.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
17//
18// Definition of curve proxy object
19//
21
22#if !defined(OPENNURBS_CURVEPROXY_INC_)
23#define OPENNURBS_CURVEPROXY_INC_
24
25/*
26Description:
27 An ON_CurveProxy is a reference to an ON_Curve.
28 One may specify a subdomain of the referenced curve
29 and apply a affine reparameterization, possibly reversing
30 the orientation. The underlying curve cannot be modified through
31 the curve proxy.
32Details:
33 The reference to the "real_curve" is const, so most functions
34 which modify an ON_Curve will fail when passed an ON_CurveProxy.
35*/
36class ON_CurveProxy;
38{
40
41public:
42 // virtual ON_Object::DestroyRuntimeCache override
43 void DestroyRuntimeCache( bool bDelete = true );
44
45public:
48 ON_CurveProxy( const ON_Curve* );
50
52
53 virtual ~ON_CurveProxy();
54
55 // virtual ON_Object::SizeOf override
56 unsigned int SizeOf() const;
57
58 // virtual ON_Object::DataCRC override
59 ON__UINT32 DataCRC(ON__UINT32 current_remainder) const;
60
61 /*
62 Description:
63 Sets the curve geometry that "this" is a proxy for.
64 Sets proxy domain to proxy_curve->Domain().
65 Parameters:
66 real_curve - [in]
67 */
68 void SetProxyCurve( const ON_Curve* real_curve );
69
70 /*
71 Description:
72 Sets the curve geometry that "this" is a proxy for.
73 Sets proxy domain to proxy_curve->Domain().
74 Parameters:
75 real_curve - [in]
76 real_curve_subdomain - [in] increasing sub interval of
77 real_curve->Domain(). This interval defines the
78 portion the "real" curve geometry that "this" proxy
79 uses.
80 bReversed - [in] true if the parameterization of "this" proxy
81 as a curve is reversed from the underlying "real" curve
82 geometry.
83 */
84 void SetProxyCurve( const ON_Curve* real_curve,
85 ON_Interval real_curve_subdomain
86 );
87
88 /*
89 Returns:
90 "Real" curve geometry that "this" is a proxy for.
91 */
92 const ON_Curve* ProxyCurve() const;
93
94 /*
95 Description:
96 Sets portion of the "real" curve that this proxy represents.
97 Does NOT change the domain of "this" curve.
98 Parameters:
99 proxy_curve_subdomain - [in] increasing sub interval of
100 ProxyCurve()->Domain(). This interval defines the
101 portion the curve geometry that "this" proxy uses.
102 Remarks:
103 This function is poorly named. It does NOT set the proxy
104 curve's domain. It does set the interval of the "real"
105 curve for which "this" is a proxy.
106 */
107 bool SetProxyCurveDomain( ON_Interval proxy_curve_subdomain );
108
109
110 /*
111 Returns:
112 Sub interval of the "real" curve's domain that "this" uses.
113 This interval is not necessarily the same as "this" curve's
114 domain.
115 Remarks:
116 This function is poorly named. It does NOT get the proxy
117 curve's domain. It does get the evaluation interval
118 of the "real" curve for which "this" is a proxy.
119 */
120 ON_Interval ProxyCurveDomain() const;
121
122 /*
123 Returns:
124 True if "this" as a curve is reversed from the "real" curve
125 geometry.
126 */
127 bool ProxyCurveIsReversed() const;
128
129 /*
130 Parameters:
131 t - [in] parameter for "this" curve
132 Returns:
133 Corresponding parameter in m_real_curve's domain.
134 */
135 double RealCurveParameter( double t ) const;
136
137 /*
138 Parameters:
139 real_curve_parameter - [in] m_real_curve parameter
140 Returns:
141 Corresponding parameter for "this" curve
142 */
143 double ThisCurveParameter( double real_curve_parameter ) const;
144
145private:
146 // "real" curve geometry that "this" is a proxy for.
148
149 // If true, the parameterization of "this" proxy is
150 // the reverse of the m_curve parameterization.
152
153 // The m_domain interval is always increasing and included in
154 // m_curve->Domain(). The m_domain interval defines the portion
155 // of m_curve that "this" proxy uses and it can be a proper
156 // sub-interval of m_curve->Domain().
158
159 // The evaluation domain of this curve. If "t" is a parameter for
160 // "this" and "r" is a parameter for m_curve, then when m_bReversed==false
161 // we have
162 // t = m_this_domain.ParameterAt(m_real_curve_domain.NormalizedParameterAt(r))
163 // r = m_real_curve_domain.ParameterAt(m_this_domain.NormalizedParameterAt(t))
164 // and when m_bReversed==true we have
165 // t = m_this_domain.ParameterAt(1 - m_real_curve_domain.NormalizedParameterAt(r))
166 // r = m_real_curve_domain.ParameterAt(1 - m_this_domain.NormalizedParameterAt(t))
168
169 ON_Interval RealCurveInterval( const ON_Interval* sub_domain ) const;
170
171
172public:
173 /*
174 Description:
175 Get a duplicate of the curve.
176 Returns:
177 A duplicate of the curve.
178 Remarks:
179 The caller must delete the returned curve.
180 For non-ON_CurveProxy objects, this simply duplicates the curve using
181 ON_Object::Duplicate.
182 For ON_CurveProxy objects, this duplicates the actual proxy curve
183 geometry and, if necessary, trims and reverse the result to that
184 the returned curve's parameterization and locus match the proxy curve's.
185 */
186 ON_Curve* DuplicateCurve() const;
187
189 // ON_Object overrides
190
191 /*
192 Description:
193 Tests an object to see if its data members are correctly
194 initialized.
195 Parameters:
196 text_log - [in] if the object is not valid and text_log
197 is not NULL, then a brief englis description of the
198 reason the object is not valid is appened to the log.
199 The information appended to text_log is suitable for
200 low-level debugging purposes by programmers and is
201 not intended to be useful as a high level user
202 interface tool.
203 Returns:
204 @untitled table
205 true object is valid
206 false object is invalid, uninitialized, etc.
207 Remarks:
208 Overrides virtual ON_Object::IsValid
209 */
210 ON_BOOL32 IsValid( ON_TextLog* text_log = NULL ) const;
211
212 void Dump( ON_TextLog& ) const; // for debugging
213
214 ON_BOOL32 Write( // returns false - nothing serialized
215 ON_BinaryArchive& // open binary file
216 ) const;
217
218 ON_BOOL32 Read( // returns false - nothing serialized
219 ON_BinaryArchive& // open binary file
220 );
221
223 // ON_Geometry overrides
224
225 int Dimension() const;
226
227 ON_BOOL32 GetBBox( // returns true if successful
228 double*, // minimum
229 double*, // maximum
230 ON_BOOL32 = false // true means grow box
231 ) const;
232
234 const ON_Xform&
235 );
236
238 // ON_Curve overrides
239
240 // Returns:
241 // domain of the curve.
242 // Remarks:
243 // If m_bReverse is true, this returns the reverse
244 // of m_domain.
245 ON_Interval Domain() const;
246
247 /* virtual ON_Curve::SetDomain() override */
249 double t0,
250 double t1
251 );
252
253 bool SetDomain( ON_Interval domain );
254
255 int SpanCount() const; // number of smooth spans in curve
256
258 double*
259 ) const;
260
261 int Degree( // returns maximum algebraic degree of any span
262 // ( or a good estimate if curve spans are not algebraic )
263 ) const;
264
265 // (optional - override if curve is piecewise smooth)
266 ON_BOOL32 GetParameterTolerance( // returns tminus < tplus: parameters tminus <= s <= tplus
267 double, // t = parameter in domain
268 double*, // tminus
269 double* // tplus
270 ) const;
271
272 ON_BOOL32 IsLinear( // true if curve locus is a line segment between
273 // between specified points
274 double = ON_ZERO_TOLERANCE // tolerance to use when checking linearity
275 ) const;
276
277 // virtual override of ON_Curve::IsPolyline
278 int IsPolyline(
279 ON_SimpleArray<ON_3dPoint>* pline_points = NULL,
281 ) const;
282
283 ON_BOOL32 IsArc( // ON_Arc.m_angle > 0 if curve locus is an arc between
284 // specified points
285 const ON_Plane* = NULL, // if not NULL, test is performed in this plane
286 ON_Arc* = NULL, // if not NULL and true is returned, then arc parameters
287 // are filled in
288 double = ON_ZERO_TOLERANCE // tolerance to use when checking
289 ) const;
290
292 ON_Plane* = NULL, // if not NULL and true is returned, then plane parameters
293 // are filled in
294 double = ON_ZERO_TOLERANCE // tolerance to use when checking
295 ) const;
296
298 const ON_Plane&, // plane to test
299 double = ON_ZERO_TOLERANCE // tolerance to use when checking
300 ) const;
301
302 ON_BOOL32 IsClosed( // true if curve is closed (either curve has
303 void // clamped end knots and euclidean location of start
304 ) const; // CV = euclidean location of end CV, or curve is
305 // periodic.)
306
307 ON_BOOL32 IsPeriodic( // true if curve is a single periodic segment
308 void
309 ) const;
310
311 /*
312 Description:
313 Search for a derivatitive, tangent, or curvature discontinuity.
314 Parameters:
315 c - [in] type of continity to test for. If ON::C1_continuous
316 t0 - [in] search begins at t0
317 t1 - [in] (t0 < t1) search ends at t1
318 t - [out] if a discontinuity is found, the *t reports the
319 parameter at the discontinuity.
320 hint - [in/out] if GetNextDiscontinuity will be called repeatedly,
321 passing a "hint" with initial value *hint=0 will increase the speed
322 of the search.
323 dtype - [out] if not NULL, *dtype reports the kind of discontinuity
324 found at *t. A value of 1 means the first derivative or unit tangent
325 was discontinuous. A value of 2 means the second derivative or
326 curvature was discontinuous.
327 cos_angle_tolerance - [in] default = cos(1 degree) Used only when
328 c is ON::G1_continuous or ON::G2_continuous. If the cosine
329 of the angle between two tangent vectors
330 is <= cos_angle_tolerance, then a G1 discontinuity is reported.
331 curvature_tolerance - [in] (default = ON_SQRT_EPSILON) Used only when
332 c is ON::G2_continuous. If K0 and K1 are curvatures evaluated
333 from above and below and |K0 - K1| > curvature_tolerance,
334 then a curvature discontinuity is reported.
335 Returns:
336 true if a discontinuity was found on the interior of the interval (t0,t1).
337 Remarks:
338 Overrides ON_Curve::GetNextDiscontinuity.
339 */
341 ON::continuity c,
342 double t0,
343 double t1,
344 double* t,
345 int* hint=NULL,
346 int* dtype=NULL,
347 double cos_angle_tolerance=0.99984769515639123915701155881391,
348 double curvature_tolerance=ON_SQRT_EPSILON
349 ) const;
350
351 /*
352 Description:
353 Test continuity at a curve parameter value.
354 Parameters:
355 c - [in] continuity to test for
356 t - [in] parameter to test
357 hint - [in] evaluation hint
358 point_tolerance - [in] if the distance between two points is
359 greater than point_tolerance, then the curve is not C0.
360 d1_tolerance - [in] if the difference between two first derivatives is
361 greater than d1_tolerance, then the curve is not C1.
362 d2_tolerance - [in] if the difference between two second derivatives is
363 greater than d2_tolerance, then the curve is not C2.
364 cos_angle_tolerance - [in] default = cos(1 degree) Used only when
365 c is ON::G1_continuous or ON::G2_continuous. If the cosine
366 of the angle between two tangent vectors
367 is <= cos_angle_tolerance, then a G1 discontinuity is reported.
368 curvature_tolerance - [in] (default = ON_SQRT_EPSILON) Used only when
369 c is ON::G2_continuous. If K0 and K1 are curvatures evaluated
370 from above and below and |K0 - K1| > curvature_tolerance,
371 then a curvature discontinuity is reported.
372 Returns:
373 true if the curve has at least the c type continuity at the parameter t.
374 Remarks:
375 Overrides ON_Curve::IsContinuous.
376 */
377 bool IsContinuous(
378 ON::continuity c,
379 double t,
380 int* hint = NULL,
381 double point_tolerance=ON_ZERO_TOLERANCE,
382 double d1_tolerance=ON_ZERO_TOLERANCE,
383 double d2_tolerance=ON_ZERO_TOLERANCE,
384 double cos_angle_tolerance=0.99984769515639123915701155881391,
385 double curvature_tolerance=ON_SQRT_EPSILON
386 ) const;
387
388 ON_BOOL32 Reverse(); // reverse parameterizatrion
389 // Domain changes from [a,b] to [-b,-a]
390
391 ON_BOOL32 Evaluate( // returns false if unable to evaluate
392 double, // evaluation parameter
393 int, // number of derivatives (>=0)
394 int, // array stride (>=Dimension())
395 double*, // array of length stride*(ndir+1)
396 int = 0, // optional - determines which side to evaluate from
397 // 0 = default
398 // < 0 to evaluate from below,
399 // > 0 to evaluate from above
400 int* = 0 // optional - evaluation hint (int) used to speed
401 // repeated evaluations
402 ) const;
403
405 // Find parameter of the point on a curve that is closest to test_point.
406 // If the maximum_distance parameter is > 0, then only points whose distance
407 // to the given point is <= maximum_distance will be returned. Using a
408 // positive value of maximum_distance can substantially speed up the search.
409 // If the sub_domain parameter is not NULL, then the search is restricted
410 // to the specified portion of the curve.
411 //
412 // true if returned if the search is successful. false is returned if
413 // the search fails.
414 bool GetClosestPoint( const ON_3dPoint&, // test_point
415 double*, // parameter of local closest point returned here
416 double = 0.0, // maximum_distance
417 const ON_Interval* = NULL // sub_domain
418 ) const;
419
421 // Find parameter of the point on a curve that is locally closest to
422 // the test_point. The search for a local close point starts at
423 // seed_parameter. If the sub_domain parameter is not NULL, then
424 // the search is restricted to the specified portion of the curve.
425 //
426 // true if returned if the search is successful. false is returned if
427 // the search fails.
428 ON_BOOL32 GetLocalClosestPoint( const ON_3dPoint&, // test_point
429 double, // seed_parameter
430 double*, // parameter of local closest point returned here
431 const ON_Interval* = NULL // sub_domain
432 ) const;
433
435 // Length of curve.
436 // true if returned if the length calculation is successful.
437 // false is returned if the length is not calculated.
438 //
439 // The arc length will be computed so that
440 // (returned length - real length)/(real length) <= fractional_tolerance
441 // More simply, if you want N significant figures in the answer, set the
442 // fractional_tolerance to 1.0e-N. For "nice" curves, 1.0e-8 works
443 // fine. For very high degree nurbs and nurbs with bad parameterizations,
444 // use larger values of fractional_tolerance.
445 ON_BOOL32 GetLength( // returns true if length successfully computed
446 double*, // length returned here
447 double = 1.0e-8, // fractional_tolerance
448 const ON_Interval* = NULL // (optional) sub_domain
449 ) const;
450
451 /*
452 Description:
453 Used to quickly find short curves.
454 Parameters:
455 tolerance - [in] (>=0)
456 sub_domain - [in] If not NULL, the test is performed
457 on the interval that is the intersection of
458 sub_domain with Domain().
459 Returns:
460 True if the length of the curve is <= tolerance.
461 Remarks:
462 Faster than calling Length() and testing the
463 result.
464 */
465 bool IsShort(
466 double tolerance,
467 const ON_Interval* sub_domain = NULL
468 ) const;
469
470 // override of virtual ON_Curve::GetNormalizedArcLengthPoint(...)
471 virtual
473 double s,
474 double* t,
475 double fractional_tolerance = 1.0e-8,
476 const ON_Interval* sub_domain = NULL
477 ) const;
478
479 // override of virtual ON_Curve::GetNormalizedArcLengthPoints(...)
480 virtual
482 int count,
483 const double* s,
484 double* t,
485 double absolute_tolerance = 0.0,
486 double fractional_tolerance = 1.0e-8,
487 const ON_Interval* sub_domain = NULL
488 ) const;
489
490 // override of virtual ON_Curve::Trim
492 const ON_Interval& domain
493 );
494
495 // override of virtual ON_Curve::Split
497 double t,
498 ON_Curve*& left_side,
499 ON_Curve*& right_side
500 ) const;
501
502 int GetNurbForm( // returns 0: unable to create NURBS representation
503 // with desired accuracy.
504 // 1: success - returned NURBS parameterization
505 // matches the curve's to wthe desired accuracy
506 // 2: success - returned NURBS point locus matches
507 // the curve's to the desired accuracy but, on
508 // the interior of the curve's domain, the
509 // curve's parameterization and the NURBS
510 // parameterization may not match to the
511 // desired accuracy.
513 double = 0.0,
514 const ON_Interval* = NULL // OPTIONAL subdomain of ON_CurveProxy::Domain()
515 ) const;
516
517 int HasNurbForm( // returns 0: unable to create NURBS representation
518 // with desired accuracy.
519 // 1: success - returned NURBS parameterization
520 // matches the curve's to wthe desired accuracy
521 // 2: success - returned NURBS point locus matches
522 // the curve's to the desired accuracy but, on
523 // the interior of the curve's domain, the
524 // curve's parameterization and the NURBS
525 // parameterization may not match to the
526 // desired accuracy.
527 ) const;
528
529 // virtual ON_Curve::GetCurveParameterFromNurbFormParameter override
531 double, // nurbs_t
532 double* // curve_t
533 ) const;
534
535 // virtual ON_Curve::GetNurbFormParameterFromCurveParameter override
537 double, // curve_t
538 double* // nurbs_t
539 ) const;
540};
541
542
543#endif
@ Transform
Definition RSMetaType.h:67
Definition opennurbs_point.h:403
Definition opennurbs_arc.h:34
Definition opennurbs_archive.h:152
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
void DestroyRuntimeCache(bool bDelete=true)
Definition opennurbs_object.cpp:1761
virtual ON_BOOL32 IsArc(const ON_Plane *plane=NULL, ON_Arc *arc=NULL, double tolerance=ON_ZERO_TOLERANCE) const
Definition opennurbs_curve.cpp:248
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 GetNormalizedArcLengthPoint(double s, double *t, double fractional_tolerance=1.0e-8, const ON_Interval *sub_domain=NULL) const
Definition opennurbs_curve.cpp:2489
virtual ON_Curve * DuplicateCurve() const
Definition opennurbs_curve.cpp:66
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 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 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
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 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
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 ON_BOOL32 GetParameterTolerance(double t, double *tminus, double *tplus) const
Definition opennurbs_curve.cpp:161
Definition opennurbs_curveproxy.h:38
bool m_bReversed
Definition opennurbs_curveproxy.h:151
ON_Interval m_this_domain
Definition opennurbs_curveproxy.h:167
ON_OBJECT_DECLARE(ON_CurveProxy)
const ON_Curve * m_real_curve
Definition opennurbs_curveproxy.h:147
ON_Interval m_real_curve_domain
Definition opennurbs_curveproxy.h:157
virtual ON_BOOL32 GetBBox(double *boxmin, double *boxmax, int bGrowBox=false) const =0
virtual int Dimension() const =0
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_array.h:46
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