QCAD
Open Source 2D CAD
Loading...
Searching...
No Matches
opennurbs_revsurface.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_REVSURFACE_INC_)
17#define OPENNURBS_REVSURFACE_INC_
18
19// surface of revolution
21{
23
24public:
25 // virtual ON_Object::DestroyRuntimeCache override
26 void DestroyRuntimeCache( bool bDelete = true );
27
28public:
29 // Revolute curve.
30 // If m_curve is not NULL, then ~ON_RevSurface() deletes m_curve.
32
33 // Axis of revolution.
35
36 // Start and end angles of revolution in radians.
37 // The interval m_angle must be increasing and satisfiy
38 // ON_ZERO_TOLERANCE < m_angle.Length() <= 2.0*ON_PI
40
41 // The interval m_t specifies the parameterization for the
42 // angular parameter; m_t must be an increasing interval.
43 // The parameter m_t[0] corresonds to angle m_angle[0] and
44 // the parameter m_t[1] corresponds to angle m_angle[1].
45 // Changing m_t and leaving m_angle unchanged will change the
46 // parameterization but not change the locus of the surface.
47 // Changing m_angle and leaving m_t unchanged, will change the
48 // locus of the surface but not change the evaluation domain.
50
51 // If false, the "u" parameter is the angle parameter
52 // and the "v" parameter is the curve parameter.
53 // If true, the "u" parameter is the curve parameter
54 // and the "v" parameter is the angle parameter.
56
57 // Bounding box of the surface of revolution.
59
60 /*
61 Description:
62 Use ON_RevSurface::New(...) instead of new ON_RevSurface(...)
63 Returns:
64 Pointer to an ON_RevSurface. Destroy by calling delete.
65 Remarks:
66 See static ON_Brep* ON_Brep::New() for details.
67 */
68 static ON_RevSurface* New();
69 static ON_RevSurface* New( const ON_RevSurface& rev_surface );
70
71
76
77 void Destroy();
78
79 ON_BOOL32 SetAngleRadians(
80 double start_angle_radians,
81 double end_angle_radians
82 );
83
84 ON_BOOL32 SetAngleDegrees(
85 double start_angle_degrees,
86 double end_angle_degrees
87 );
88
90 //
91 // overrides of virtual ON_Object functions
92 //
93
94 // virtual ON_Object::SizeOf override
95 unsigned int SizeOf() const;
96
97 // virtual ON_Object::DataCRC override
98 ON__UINT32 DataCRC(ON__UINT32 current_remainder) const;
99
100 /*
101 Description:
102 Tests an object to see if its data members are correctly
103 initialized.
104 Parameters:
105 text_log - [in] if the object is not valid and text_log
106 is not NULL, then a brief englis description of the
107 reason the object is not valid is appened to the log.
108 The information appended to text_log is suitable for
109 low-level debugging purposes by programmers and is
110 not intended to be useful as a high level user
111 interface tool.
112 Returns:
113 @untitled table
114 true object is valid
115 false object is invalid, uninitialized, etc.
116 Remarks:
117 Overrides virtual ON_Object::IsValid
118 */
119 ON_BOOL32 IsValid( ON_TextLog* text_log = NULL ) const;
120
121 void Dump( ON_TextLog& ) const; // for debugging
122
123 // Use ON_BinaryArchive::WriteObject() and ON_BinaryArchive::ReadObject()
124 // for top level serialization. These Read()/Write() members should just
125 // write/read specific definitions. In particular, they should not write/
126 // read any chunk typecode or length information. The default
127 // implementations return false and do nothing.
129 ON_BinaryArchive& // serialize definition to binary archive
130 ) const;
131
133 ON_BinaryArchive& // restore definition from binary archive
134 );
135
137 //
138 // overrides of virtual ON_Geometry functions
139 //
140 int Dimension() const;
141
142 ON_BOOL32 GetBBox( // returns true if successful
143 double*, // boxmin[dim]
144 double*, // boxmax[dim]
145 ON_BOOL32 = false // true means grow box
146 ) const;
147
148 void ClearBoundingBox();
149
151 const ON_Xform&
152 );
153
155 //
156 // overrides of virtual ON_Surface functions
157 //
158
160 const ON_MeshParameters& mp,
161 ON_Mesh* mesh = NULL
162 ) const;
163
165 int dir, // 0 sets first parameter's domain, 1 gets second parameter's domain
166 double t0,
167 double t1
168 );
169
171 int // 0 gets first parameter's domain, 1 gets second parameter's domain
172 ) const;
173
174 /*
175 Description:
176 Get an estimate of the size of the rectangle that would
177 be created if the 3d surface where flattened into a rectangle.
178 Parameters:
179 width - [out] (corresponds to the first surface parameter)
180 height - [out] (corresponds to the first surface parameter)
181 Remarks:
182 overrides virtual ON_Surface::GetSurfaceSize
183 Returns:
184 true if successful.
185 */
187 double* width,
188 double* height
189 ) const;
190
191 int SpanCount(
192 int // 0 gets first parameter's domain, 1 gets second parameter's domain
193 ) const; // number of smooth spans in curve
194
195 ON_BOOL32 GetSpanVector( // span "knots"
196 int, // 0 gets first parameter's domain, 1 gets second parameter's domain
197 double* // array of length SpanCount() + 1
198 ) const; //
199
200 int Degree( // returns maximum algebraic degree of any span
201 // ( or a good estimate if curve spans are not algebraic )
202 int // 0 gets first parameter's domain, 1 gets second parameter's domain
203 ) const;
204
205 ON_BOOL32 GetParameterTolerance( // returns tminus < tplus: parameters tminus <= s <= tplus
206 int, // 0 gets first parameter, 1 gets second parameter
207 double, // t = parameter in domain
208 double*, // tminus
209 double* // tplus
210 ) const;
211
212 /*
213 Description:
214 Test a surface of revolution to see if it is a portion
215 of a sphere.
216 Parameters:
217 sphere - [out] if not NULL and true is returned,
218 the sphere parameters are filled in.
219 tolerance - [in] tolerance to use when checking
220 Returns:
221 true if the surface of revolution is a portion of a sphere.
222 */
223 ON_BOOL32 IsSpherical(
224 ON_Sphere* sphere = NULL,
225 double tolerance = ON_ZERO_TOLERANCE
226 ) const;
227
228 /*
229 Description:
230 Test a surface of revolution to see if it is a portion
231 of a cylinder.
232 Parameters:
233 cylinder - [out] if not NULL and true is returned,
234 the cylinder parameters are filled in.
235 tolerance - [in] tolerance to use when checking
236 Returns:
237 true if the surface of revolution is a portion of a cylinder.
238 */
239 ON_BOOL32 IsCylindrical(
240 ON_Cylinder* cylinder = NULL,
241 double tolerance = ON_ZERO_TOLERANCE
242 ) const;
243
244 /*
245 Description:
246 Test a surface of revolution to see if it is a portion
247 of a cone.
248 Parameters:
249 cone - [out] if not NULL and true is returned,
250 the cone parameters are filled in.
251 tolerance - [in] tolerance to use when checking
252 Returns:
253 true if the surface of revolution is a portion of a cone.
254 */
255 ON_BOOL32 IsConical(
256 ON_Cone* cone = NULL,
257 double tolerance = ON_ZERO_TOLERANCE
258 ) const;
259
260 /*
261 Description:
262 Test a surface to see if it is planar.
263 Parameters:
264 plane - [out] if not NULL and true is returned,
265 the plane parameters are filled in.
266 tolerance - [in] tolerance to use when checking
267 Returns:
268 true if there is a plane such that the maximum distance from
269 the surface to the plane is <= tolerance.
270 Remarks:
271 Overrides virtual ON_Surface::IsPlanar.
272 */
274 ON_Plane* plane = NULL,
275 double tolerance = ON_ZERO_TOLERANCE
276 ) const;
277
278 ON_BOOL32 IsClosed( // true if surface is closed in direction
279 int // dir 0 = "s", 1 = "t"
280 ) const;
281
282 ON_BOOL32 IsPeriodic( // true if surface is periodic in direction
283 int // dir 0 = "s", 1 = "t"
284 ) const;
285
286 ON_BOOL32 IsSingular( // true if surface side is collapsed to a point
287 int // side of parameter space to test
288 // 0 = south, 1 = east, 2 = north, 3 = west
289 ) const;
290
291 /*
292 Description:
293 Search for a derivatitive, tangent, or curvature
294 discontinuity.
295 Parameters:
296 dir - [in] If 0, then "u" parameter is checked. If 1, then
297 the "v" parameter is checked.
298 c - [in] type of continity to test for.
299 t0 - [in] Search begins at t0. If there is a discontinuity
300 at t0, it will be ignored. This makes it
301 possible to repeatedly call GetNextDiscontinuity
302 and step through the discontinuities.
303 t1 - [in] (t0 != t1) If there is a discontinuity at t1 is
304 will be ingored unless c is a locus discontinuity
305 type and t1 is at the start or end of the curve.
306 t - [out] if a discontinuity is found, then *t reports the
307 parameter at the discontinuity.
308 hint - [in/out] if GetNextDiscontinuity will be called
309 repeatedly, passing a "hint" with initial value *hint=0
310 will increase the speed of the search.
311 dtype - [out] if not NULL, *dtype reports the kind of
312 discontinuity found at *t. A value of 1 means the first
313 derivative or unit tangent was discontinuous. A value
314 of 2 means the second derivative or curvature was
315 discontinuous. A value of 0 means teh curve is not
316 closed, a locus discontinuity test was applied, and
317 t1 is at the start of end of the curve.
318 cos_angle_tolerance - [in] default = cos(1 degree) Used only
319 when c is ON::G1_continuous or ON::G2_continuous. If the
320 cosine of the angle between two tangent vectors is
321 <= cos_angle_tolerance, then a G1 discontinuity is reported.
322 curvature_tolerance - [in] (default = ON_SQRT_EPSILON) Used
323 only when c is ON::G2_continuous. If K0 and K1 are
324 curvatures evaluated from above and below and
325 |K0 - K1| > curvature_tolerance, then a curvature
326 discontinuity is reported.
327 Returns:
328 Parametric continuity tests c = (C0_continuous, ..., G2_continuous):
329
330 true if a parametric discontinuity was found strictly
331 between t0 and t1. Note well that all curves are
332 parametrically continuous at the ends of their domains.
333
334 Locus continuity tests c = (C0_locus_continuous, ...,G2_locus_continuous):
335
336 true if a locus discontinuity was found strictly between
337 t0 and t1 or at t1 is the at the end of a curve.
338 Note well that all open curves (IsClosed()=false) are locus
339 discontinuous at the ends of their domains. All closed
340 curves (IsClosed()=true) are at least C0_locus_continuous at
341 the ends of their domains.
342 */
344 int dir,
345 ON::continuity c,
346 double t0,
347 double t1,
348 double* t,
349 int* hint=NULL,
350 int* dtype=NULL,
351 double cos_angle_tolerance=0.99984769515639123915701155881391,
352 double curvature_tolerance=ON_SQRT_EPSILON
353 ) const;
354
355/*
356 Description:
357 Test continuity at a surface parameter value.
358 Parameters:
359 c - [in] continuity to test for
360 s - [in] surface parameter to test
361 t - [in] surface parameter to test
362 hint - [in] evaluation hint
363 point_tolerance - [in] if the distance between two points is
364 greater than point_tolerance, then the surface is not C0.
365 d1_tolerance - [in] if the difference between two first derivatives is
366 greater than d1_tolerance, then the surface is not C1.
367 d2_tolerance - [in] if the difference between two second derivatives is
368 greater than d2_tolerance, then the surface is not C2.
369 cos_angle_tolerance - [in] default = cos(1 degree) Used only when
370 c is ON::G1_continuous or ON::G2_continuous. If the cosine
371 of the angle between two normal vectors
372 is <= cos_angle_tolerance, then a G1 discontinuity is reported.
373 curvature_tolerance - [in] (default = ON_SQRT_EPSILON) Used only when
374 c is ON::G2_continuous. If K0 and K1 are curvatures evaluated
375 from above and below and |K0 - K1| > curvature_tolerance,
376 then a curvature discontinuity is reported.
377 Returns:
378 true if the surface has at least the c type continuity at the parameter t.
379 Remarks:
380 Overrides virtual ON_Surface::IsContinuous
381 */
382 bool IsContinuous(
383 ON::continuity c,
384 double s,
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 ON_BOOL32 Reverse( // reverse parameterizatrion, Domain changes from [a,b] to [-b,-a]
395 int // dir 0 = "s", 1 = "t"
396 );
397
398 ON_BOOL32 Transpose(); // transpose surface parameterization (swap "s" and "t")
399
400 ON_BOOL32 Evaluate( // returns false if unable to evaluate
401 double, double, // evaluation parameters (see m_bTransposed)
402 int, // number of derivatives (>=0)
403 int, // array stride (>=Dimension())
404 double*, // array of length stride*(ndir+1)*(ndir+2)/2
405 int = 0, // optional - determines which quadrant to evaluate from
406 // 0 = default
407 // 1 from NE quadrant
408 // 2 from NW quadrant
409 // 3 from SW quadrant
410 // 4 from SE quadrant
411 int* = 0 // optional - evaluation hint (int[2]) used to speed
412 // repeated evaluations
413 ) const;
414
415 /*
416 Description:
417 Get isoparametric curve.
418 Overrides virtual ON_Surface::IsoCurve.
419 Parameters:
420 dir - [in] 0 first parameter varies and second parameter is constant
421 e.g., point on IsoCurve(0,c) at t is srf(t,c)
422 1 first parameter is constant and second parameter varies
423 e.g., point on IsoCurve(1,c) at t is srf(c,t)
424
425 c - [in] value of constant parameter
426 Returns:
427 Isoparametric curve.
428 */
430 int dir,
431 double c
432 ) const;
433
434 /*
435 Description:
436 Removes the portions of the surface outside of the specified interval.
437
438 Parameters:
439 dir - [in] 0 The domain specifies an sub-interval of Domain(0)
440 (the first surface parameter).
441 1 The domain specifies an sub-interval of Domain(1)
442 (the second surface parameter).
443 domain - [in] interval of the surface to keep. If dir is 0, then
444 the portions of the surface with parameters (s,t) satisfying
445 s < Domain(0).Min() or s > Domain(0).Max() are trimmed away.
446 If dir is 1, then the portions of the surface with parameters
447 (s,t) satisfying t < Domain(1).Min() or t > Domain(1).Max()
448 are trimmed away.
449 */
451 int dir,
452 const ON_Interval& domain
453 );
454
455 /*
456 Description:
457 Where possible, analytically extends surface to include domain.
458 Parameters:
459 dir - [in] 0 new Domain(0) will include domain.
460 (the first surface parameter).
461 1 new Domain(1) will include domain.
462 (the second surface parameter).
463 domain - [in] if domain is not included in surface domain,
464 surface will be extended so that its domain includes domain.
465 Will not work if surface is closed in direction dir.
466 Original surface is identical to the restriction of the
467 resulting surface to the original surface domain,
468 Returns:
469 true if successful.
470 */
471 bool Extend(
472 int dir,
473 const ON_Interval& domain
474 );
475
476 /*
477 Description:
478 Splits (divides) the surface into two parts at the
479 specified parameter.
480
481 Parameters:
482 dir - [in] 0 The surface is split vertically. The "west" side
483 is returned in "west_or_south_side" and the "east"
484 side is returned in "east_or_north_side".
485 1 The surface is split horizontally. The "south" side
486 is returned in "west_or_south_side" and the "north"
487 side is returned in "east_or_north_side".
488 c - [in] value of constant parameter in interval returned
489 by Domain(dir)
490 west_or_south_side - [out] west/south portion of surface returned here
491 east_or_north_side - [out] east/north portion of surface returned here
492
493 Example:
494
495 ON_NurbsSurface srf = ...;
496 int dir = 1;
497 ON_RevSurface* south_side = 0;
498 ON_RevSurface* north_side = 0;
499 srf.Split( dir, srf.Domain(dir).Mid() south_side, north_side );
500
501 */
503 int dir,
504 double c,
505 ON_Surface*& west_or_south_side,
506 ON_Surface*& east_or_north_side
507 ) const;
508
509 /*
510 Description:
511 Get the parameters of the point on the surface that is closest to P.
512 Parameters:
513 P - [in]
514 test point
515 s - [out]
516 t - [out]
517 (*s,*t) = parameters of the surface point that
518 is closest to P.
519 maximum_distance = 0.0 - [in]
520 optional upper bound on the distance from P to
521 the surface. If you are only interested in
522 finding a point Q on the surface when
523 P.DistanceTo(Q) < maximum_distance, then set
524 maximum_distance to that value.
525 sdomain = 0 - [in] optional domain restriction
526 tdomain = 0 - [in] optional domain restriction
527 Returns:
528 True if successful. If false, the values of *s and *t
529 are undefined.
530 See Also:
531 ON_Surface::GetLocalClosestPoint.
532 */
533 bool GetClosestPoint(
534 const ON_3dPoint& P,
535 double* s,
536 double* t,
537 double maximum_distance = 0.0,
538 const ON_Interval* sdomain = 0,
539 const ON_Interval* tdomain = 0
540 ) const;
541
542 int GetNurbForm( // returns 0: unable to create NURBS representation
543 // with desired accuracy.
544 // 1: success - returned NURBS parameterization
545 // matches the surface's to wthe desired accuracy
546 // 2: success - returned NURBS point locus matches
547 // the surfaces's to the desired accuracy but, on
548 // the interior of the surface's domain, the
549 // surface's parameterization and the NURBS
550 // parameterization may not match to the
551 // desired accuracy.
553 double = 0.0
554 ) const;
555
556 int HasNurbForm( // returns 0: unable to create NURBS representation
557 // with desired accuracy.
558 // 1: success - returned NURBS parameterization
559 // matches the surface's to wthe desired accuracy
560 // 2: success - returned NURBS point locus matches
561 // the surfaces's to the desired accuracy but, on
562 // the interior of the surface's domain, the
563 // surface's parameterization and the NURBS
564 // parameterization may not match to the
565 // desired accuracy.
566 ) const;
567
569 double nurbs_s, double nurbs_t,
570 double* surface_s, double* surface_t
571 ) const;
572
574 double surface_s, double surface_t,
575 double* nurbs_s, double* nurbs_t
576 ) const;
577};
578
579#endif
@ Transform
Definition RSMetaType.h:67
Definition opennurbs_point.h:403
Definition opennurbs_archive.h:152
Definition opennurbs_bounding_box.h:25
Definition opennurbs_cone.h:26
Definition opennurbs_curve.h:88
Definition opennurbs_cylinder.h:28
virtual ON_BOOL32 GetBBox(double *boxmin, double *boxmax, int bGrowBox=false) const =0
virtual int Dimension() const =0
virtual void ClearBoundingBox()
Definition opennurbs_geometry.cpp:215
Definition opennurbs_point.h:46
Definition opennurbs_line.h:20
Definition opennurbs_mesh.h:795
Definition opennurbs_mesh.h:33
Definition opennurbs_nurbssurface.h:62
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_revsurface.h:21
ON_Interval m_angle
Definition opennurbs_revsurface.h:39
ON_Interval m_t
Definition opennurbs_revsurface.h:49
ON_Curve * m_curve
Definition opennurbs_revsurface.h:31
ON_BOOL32 m_bTransposed
Definition opennurbs_revsurface.h:55
ON_Line m_axis
Definition opennurbs_revsurface.h:34
ON_OBJECT_DECLARE(ON_RevSurface)
ON_BoundingBox m_bbox
Definition opennurbs_revsurface.h:58
Definition opennurbs_sphere.h:22
Definition opennurbs_surface.h:58
virtual ON_BOOL32 Split(int dir, double c, ON_Surface *&west_or_south_side, ON_Surface *&east_or_north_side) const
Definition opennurbs_surface.cpp:1956
virtual ON_BOOL32 GetSpanVector(int dir, double *span_vector) const =0
virtual ON_BOOL32 IsPlanar(ON_Plane *plane=NULL, double tolerance=ON_ZERO_TOLERANCE) const
Definition opennurbs_surface.cpp:316
virtual ON_BOOL32 GetParameterTolerance(int dir, double t, double *tminus, double *tplus) const
Definition opennurbs_surface.cpp:147
virtual ON_BOOL32 IsClosed(int) const
Definition opennurbs_surface.cpp:322
virtual int Degree(int dir) const =0
virtual ON_BOOL32 IsPeriodic(int) const
Definition opennurbs_surface.cpp:373
unsigned int SizeOf() const
Definition opennurbs_surface.cpp:26
virtual ON_BOOL32 Reverse(int)=0
virtual ON_BOOL32 Evaluate(double u, double v, int num_der, int array_stride, double *der_array, int quadrant=0, int *hint=0) const =0
virtual bool Extend(int dir, const ON_Interval &domain)
Definition opennurbs_surface.cpp:1947
virtual ON_BOOL32 GetSurfaceSize(double *width, double *height) const
Definition opennurbs_surface.cpp:81
bool SetDomain(int dir, ON_Interval domain)
Definition opennurbs_surface.cpp:93
virtual ON_BOOL32 IsSingular(int) const
Definition opennurbs_surface.cpp:768
virtual ON_BOOL32 Transpose()=0
virtual bool GetNextDiscontinuity(int dir, 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_surface.cpp:378
virtual int HasNurbForm() const
Definition opennurbs_surface.cpp:2120
virtual ON_Curve * IsoCurve(int dir, double c) const
Definition opennurbs_surface.cpp:1213
virtual bool IsContinuous(ON::continuity c, double s, 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_surface.cpp:547
virtual ON_Interval Domain(int dir) const =0
void DestroyRuntimeCache(bool bDelete=true)
Definition opennurbs_object.cpp:1793
virtual int GetNurbForm(ON_NurbsSurface &nurbs_surface, double tolerance=0.0) const
Definition opennurbs_surface.cpp:2111
virtual ON_BOOL32 Trim(int dir, const ON_Interval &domain)
Definition opennurbs_surface.cpp:1938
virtual ON_Mesh * CreateMesh(const ON_MeshParameters &mp, ON_Mesh *mesh=NULL) const
Definition opennurbs_mesh.cpp:527
ON_Surface & operator=(const ON_Surface &)
Definition opennurbs_surface.cpp:39
virtual bool GetSurfaceParameterFromNurbFormParameter(double nurbs_s, double nurbs_t, double *surface_s, double *surface_t) const
Definition opennurbs_surface.cpp:2125
virtual int SpanCount(int dir) const =0
virtual bool GetClosestPoint(const ON_3dPoint &P, double *s, double *t, double maximum_distance=0.0, const ON_Interval *sdomain=0, const ON_Interval *tdomain=0) const
Definition opennurbs_surface.cpp:1967
virtual bool GetNurbFormParameterFromSurfaceParameter(double surface_s, double surface_t, double *nurbs_s, double *nurbs_t) const
Definition opennurbs_surface.cpp:2136
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