Point Cloud Library (PCL) 1.12.1
opennurbs_planesurface.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(ON_GEOMETRY_SURFACE_PLANE_INC_)
18#define ON_GEOMETRY_SURFACE_PLANE_INC_
19
20class ON_PlaneSurface;
21
22class ON_CLASS ON_PlaneSurface : public ON_Surface
23{
24 ON_OBJECT_DECLARE(ON_PlaneSurface);
25
26public:
30
33
35
36 // An ON_PlaneSurface is really a finite rectangle.
37 // m_plane defines the plane and m_extents[] stores
38 // the x and y intervals of the plane that define the
39 // rectangle. The m_domain[] intervals specify the
40 // evaluation domain. Changing the extents are domain
41 // are INDEPENDENT of each other. Use Domain() and
42 // SetDomain() to control the evluation domain. Use
43 // Extents() and SetExtents() to control the rectangle
44 // extents.
46
47 /////////////////////////////////////////////////////////////////
48 // ON_Object overrides
49
50 // virtual ON_Object::SizeOf override
51 unsigned int SizeOf() const;
52
53 // virtual ON_Object::DataCRC override
54 ON__UINT32 DataCRC(ON__UINT32 current_remainder) const;
55
56 /*
57 Description:
58 Tests an object to see if its data members are correctly
59 initialized.
60 Parameters:
61 text_log - [in] if the object is not valid and text_log
62 is not NULL, then a brief englis description of the
63 reason the object is not valid is appened to the log.
64 The information appended to text_log is suitable for
65 low-level debugging purposes by programmers and is
66 not intended to be useful as a high level user
67 interface tool.
68 Returns:
69 @untitled table
70 true object is valid
71 false object is invalid, uninitialized, etc.
72 Remarks:
73 Overrides virtual ON_Object::IsValid
74 */
75 ON_BOOL32 IsValid( ON_TextLog* text_log = NULL ) const;
76
77 void Dump( ON_TextLog& ) const; // for debugging
78
79 ON_BOOL32 Write(
80 ON_BinaryArchive& // open binary file
81 ) const;
82
83 ON_BOOL32 Read(
84 ON_BinaryArchive& // open binary file
85 );
86
87 /////////////////////////////////////////////////////////////////
88 // ON_Geometry overrides
89
90 int Dimension() const;
91
92 ON_BOOL32 GetBBox( // returns true if successful
93 double*, // minimum
94 double*, // maximum
95 ON_BOOL32 = false // true means grow box
96 ) const;
97
98 ON_BOOL32 Transform(
99 const ON_Xform&
100 );
101
102 /////////////////////////////////////////////////////////////////
103 // ON_Surface overrides
104
105 /*
106 Description:
107 Sets the evaluation domains. Does not change the geometry.
108 Parameters:
109 dir - [in] 0 sets first parameter's domain
110 1 sets second parameter's domain
111 t0 - [in]
112 t1 - [in] (t0 < t1) the interval (t0,t1) will be the new domain
113 Returns:
114 True if successful.
115 See Also:
116 ON_PlaneSurface::SetExtents
117 */
118 ON_BOOL32 SetDomain(
119 int dir,
120 double t0,
121 double t1
122 );
123
125 int // 0 gets first parameter's domain, 1 gets second parameter's domain
126 ) const;
127
128 /*
129 Description:
130 Get an estimate of the size of the rectangle that would
131 be created if the 3d surface where flattened into a rectangle.
132 Parameters:
133 width - [out] (corresponds to the first surface parameter)
134 height - [out] (corresponds to the first surface parameter)
135 Remarks:
136 overrides virtual ON_Surface::GetSurfaceSize
137 Returns:
138 true if successful.
139 */
140 ON_BOOL32 GetSurfaceSize(
141 double* width,
142 double* height
143 ) const;
144
146 int // 0 gets first parameter's domain, 1 gets second parameter's domain
147 ) const; // number of smooth spans in curve
148
149 ON_BOOL32 GetSpanVector( // span "knots"
150 int, // 0 gets first parameter's domain, 1 gets second parameter's domain
151 double* // array of length SpanCount() + 1
152 ) const; //
153
154 int Degree( // returns maximum algebraic degree of any span
155 // ( or a good estimate if curve spans are not algebraic )
156 int // 0 gets first parameter's domain, 1 gets second parameter's domain
157 ) const;
158
159 ON_BOOL32 GetParameterTolerance( // returns tminus < tplus: parameters tminus <= s <= tplus
160 int, // 0 gets first parameter, 1 gets second parameter
161 double, // t = parameter in domain
162 double*, // tminus
163 double* // tplus
164 ) const;
165
166 /*
167 Description:
168 Test a surface to see if it is planar.
169 Parameters:
170 plane - [out] if not NULL and true is returned,
171 the plane parameters are filled in.
172 tolerance - [in] tolerance to use when checking
173 Returns:
174 true if there is a plane such that the maximum distance from
175 the surface to the plane is <= tolerance.
176 Remarks:
177 Overrides virtual ON_Surface::IsPlanar.
178 */
179 ON_BOOL32 IsPlanar(
180 ON_Plane* plane = NULL,
181 double tolerance = ON_ZERO_TOLERANCE
182 ) const;
183
184 ON_BOOL32 IsClosed( // true if surface is closed in direction
185 int // dir 0 = "s", 1 = "t"
186 ) const;
187
188 ON_BOOL32 IsPeriodic( // true if surface is periodic in direction
189 int // dir 0 = "s", 1 = "t"
190 ) const;
191
192 ON_BOOL32 IsSingular( // true if surface side is collapsed to a point
193 int // side of parameter space to test
194 // 0 = south, 1 = east, 2 = north, 3 = west
195 ) const;
196
197 /*
198 Description:
199 Search for a derivatitive, tangent, or curvature
200 discontinuity.
201 Parameters:
202 dir - [in] If 0, then "u" parameter is checked. If 1, then
203 the "v" parameter is checked.
204 c - [in] type of continity to test for.
205 t0 - [in] Search begins at t0. If there is a discontinuity
206 at t0, it will be ignored. This makes it
207 possible to repeatedly call GetNextDiscontinuity
208 and step through the discontinuities.
209 t1 - [in] (t0 != t1) If there is a discontinuity at t1 is
210 will be ingored unless c is a locus discontinuity
211 type and t1 is at the start or end of the curve.
212 t - [out] if a discontinuity is found, then *t reports the
213 parameter at the discontinuity.
214 hint - [in/out] if GetNextDiscontinuity will be called
215 repeatedly, passing a "hint" with initial value *hint=0
216 will increase the speed of the search.
217 dtype - [out] if not NULL, *dtype reports the kind of
218 discontinuity found at *t. A value of 1 means the first
219 derivative or unit tangent was discontinuous. A value
220 of 2 means the second derivative or curvature was
221 discontinuous. A value of 0 means teh curve is not
222 closed, a locus discontinuity test was applied, and
223 t1 is at the start of end of the curve.
224 cos_angle_tolerance - [in] default = cos(1 degree) Used only
225 when c is ON::G1_continuous or ON::G2_continuous. If the
226 cosine of the angle between two tangent vectors is
227 <= cos_angle_tolerance, then a G1 discontinuity is reported.
228 curvature_tolerance - [in] (default = ON_SQRT_EPSILON) Used
229 only when c is ON::G2_continuous. If K0 and K1 are
230 curvatures evaluated from above and below and
231 |K0 - K1| > curvature_tolerance, then a curvature
232 discontinuity is reported.
233 Returns:
234 Parametric continuity tests c = (C0_continuous, ..., G2_continuous):
235
236 true if a parametric discontinuity was found strictly
237 between t0 and t1. Note well that all curves are
238 parametrically continuous at the ends of their domains.
239
240 Locus continuity tests c = (C0_locus_continuous, ...,G2_locus_continuous):
241
242 true if a locus discontinuity was found strictly between
243 t0 and t1 or at t1 is the at the end of a curve.
244 Note well that all open curves (IsClosed()=false) are locus
245 discontinuous at the ends of their domains. All closed
246 curves (IsClosed()=true) are at least C0_locus_continuous at
247 the ends of their domains.
248 */
250 int dir,
251 ON::continuity c,
252 double t0,
253 double t1,
254 double* t,
255 int* hint=NULL,
256 int* dtype=NULL,
257 double cos_angle_tolerance=ON_DEFAULT_ANGLE_TOLERANCE_COSINE,
258 double curvature_tolerance=ON_SQRT_EPSILON
259 ) const;
260
261 /*
262 Description:
263 Test continuity at a surface parameter value.
264 Parameters:
265 c - [in] continuity to test for
266 s - [in] surface parameter to test
267 t - [in] surface parameter to test
268 hint - [in] evaluation hint
269 point_tolerance - [in] if the distance between two points is
270 greater than point_tolerance, then the surface is not C0.
271 d1_tolerance - [in] if the difference between two first derivatives is
272 greater than d1_tolerance, then the surface is not C1.
273 d2_tolerance - [in] if the difference between two second derivatives is
274 greater than d2_tolerance, then the surface is not C2.
275 cos_angle_tolerance - [in] default = cos(1 degree) Used only when
276 c is ON::G1_continuous or ON::G2_continuous. If the cosine
277 of the angle between two normal vectors
278 is <= cos_angle_tolerance, then a G1 discontinuity is reported.
279 curvature_tolerance - [in] (default = ON_SQRT_EPSILON) Used only when
280 c is ON::G2_continuous. If K0 and K1 are curvatures evaluated
281 from above and below and |K0 - K1| > curvature_tolerance,
282 then a curvature discontinuity is reported.
283 Returns:
284 true if the surface has at least the c type continuity at the parameter t.
285 Remarks:
286 Overrides virtual ON_Surface::IsContinuous
287 */
289 ON::continuity c,
290 double s,
291 double t,
292 int* hint = NULL,
293 double point_tolerance=ON_ZERO_TOLERANCE,
294 double d1_tolerance=ON_ZERO_TOLERANCE,
295 double d2_tolerance=ON_ZERO_TOLERANCE,
296 double cos_angle_tolerance=ON_DEFAULT_ANGLE_TOLERANCE_COSINE,
297 double curvature_tolerance=ON_SQRT_EPSILON
298 ) const;
299
300 ON_BOOL32 Reverse( // reverse parameterizatrion, Domain changes from [a,b] to [-b,-a]
301 int // dir 0 = "s", 1 = "t"
302 );
303
304 ON_BOOL32 Transpose(); // transpose surface parameterization (swap "s" and "t")
305
306
307 ON_BOOL32 Evaluate( // returns false if unable to evaluate
308 double, double, // evaluation parameters
309 int, // number of derivatives (>=0)
310 int, // array stride (>=Dimension())
311 double*, // array of length stride*(ndir+1)*(ndir+2)/2
312 int = 0, // optional - determines which quadrant to evaluate from
313 // 0 = default
314 // 1 from NE quadrant
315 // 2 from NW quadrant
316 // 3 from SW quadrant
317 // 4 from SE quadrant
318 int* = 0 // optional - evaluation hint (int[2]) used to speed
319 // repeated evaluations
320 ) const;
321
322 /*
323 Description:
324 Get isoparametric curve.
325 Overrides virtual ON_Surface::IsoCurve.
326 Parameters:
327 dir - [in] 0 first parameter varies and second parameter is constant
328 e.g., point on IsoCurve(0,c) at t is srf(t,c)
329 1 first parameter is constant and second parameter varies
330 e.g., point on IsoCurve(1,c) at t is srf(c,t)
331
332 c - [in] value of constant parameter
333 Returns:
334 Isoparametric curve.
335 */
337 int dir,
338 double c
339 ) const;
340
341 /*
342 Description:
343 Removes the portions of the surface outside of the specified interval.
344 Overrides virtual ON_Surface::Trim.
345
346 Parameters:
347 dir - [in] 0 The domain specifies an sub-interval of Domain(0)
348 (the first surface parameter).
349 1 The domain specifies an sub-interval of Domain(1)
350 (the second surface parameter).
351 domain - [in] interval of the surface to keep. If dir is 0, then
352 the portions of the surface with parameters (s,t) satisfying
353 s < Domain(0).Min() or s > Domain(0).Max() are trimmed away.
354 If dir is 1, then the portions of the surface with parameters
355 (s,t) satisfying t < Domain(1).Min() or t > Domain(1).Max()
356 are trimmed away.
357 */
358 ON_BOOL32 Trim(
359 int dir,
360 const ON_Interval& domain
361 );
362
363 /*
364 Description:
365 Where possible, analytically extends surface to include domain.
366 Parameters:
367 dir - [in] 0 new Domain(0) will include domain.
368 (the first surface parameter).
369 1 new Domain(1) will include domain.
370 (the second surface parameter).
371 domain - [in] if domain is not included in surface domain,
372 surface will be extended so that its domain includes domain.
373 Will not work if surface is closed in direction dir.
374 Original surface is identical to the restriction of the
375 resulting surface to the original surface domain,
376 Returns:
377 true if successful.
378 */
379 bool Extend(
380 int dir,
381 const ON_Interval& domain
382 );
383
384 /*
385 Description:
386 Splits (divides) the surface into two parts at the
387 specified parameter.
388 Overrides virtual ON_Surface::Split.
389
390 Parameters:
391 dir - [in] 0 The surface is split vertically. The "west" side
392 is returned in "west_or_south_side" and the "east"
393 side is returned in "east_or_north_side".
394 1 The surface is split horizontally. The "south" side
395 is returned in "west_or_south_side" and the "north"
396 side is returned in "east_or_north_side".
397 c - [in] value of constant parameter in interval returned
398 by Domain(dir)
399 west_or_south_side - [out] west/south portion of surface returned here
400 east_or_north_side - [out] east/north portion of surface returned here
401
402 Example:
403
404 ON_PlaneSurface srf = ...;
405 int dir = 1;
406 ON_PlaneSurface* south_side = 0;
407 ON_PlaneSurface* north_side = 0;
408 srf.Split( dir, srf.Domain(dir).Mid() south_side, north_side );
409
410 */
411 ON_BOOL32 Split(
412 int dir,
413 double c,
414 ON_Surface*& west_or_south_side,
415 ON_Surface*& east_or_north_side
416 ) const;
417
418 /*
419 Description:
420 Get the parameters of the point on the surface that is closest to P.
421 Parameters:
422 P - [in]
423 test point
424 s - [out]
425 t - [out]
426 (*s,*t) = parameters of the surface point that
427 is closest to P.
428 maximum_distance = 0.0 - [in]
429 optional upper bound on the distance from P to
430 the surface. If you are only interested in
431 finding a point Q on the surface when
432 P.DistanceTo(Q) < maximum_distance, then set
433 maximum_distance to that value.
434 sdomain = 0 - [in] optional domain restriction
435 tdomain = 0 - [in] optional domain restriction
436 Returns:
437 True if successful. If false, the values of *s and *t
438 are undefined.
439 See Also:
440 ON_Surface::GetLocalClosestPoint.
441 */
443 const ON_3dPoint& P,
444 double* s,
445 double* t,
446 double maximum_distance = 0.0,
447 const ON_Interval* sdomain = 0,
448 const ON_Interval* tdomain = 0
449 ) const;
450
451 //////////
452 // Find parameters of the point on a surface that is locally closest to
453 // the test_point. The search for a local close point starts at
454 // seed parameters. If a sub_domain parameter is not NULL, then
455 // the search is restricted to the specified portion of the surface.
456 //
457 // true if returned if the search is successful. false is returned if
458 // the search fails.
459 ON_BOOL32 GetLocalClosestPoint( const ON_3dPoint&, // test_point
460 double,double, // seed_parameters
461 double*,double*, // parameters of local closest point returned here
462 const ON_Interval* = NULL, // first parameter sub_domain
463 const ON_Interval* = NULL // second parameter sub_domain
464 ) const;
465
466
467 /*
468 Description:
469 Offset surface.
470 Parameters:
471 offset_distance - [in] offset distance
472 tolerance - [in] Some surfaces do not have an exact offset that
473 can be represented using the same class of surface definition.
474 In that case, the tolerance specifies the desired accuracy.
475 max_deviation - [out] If this parameter is not NULL, the maximum
476 deviation from the returned offset to the true offset is returned
477 here. This deviation is zero except for cases where an exact
478 offset cannot be computed using the same class of surface definition.
479 Remarks:
480 Overrides virtual ON_Surface::Offset.
481 Returns:
482 Offset surface.
483 */
485 double offset_distance,
486 double tolerance,
487 double* max_deviation = NULL
488 ) const;
489
490
491 int GetNurbForm( // returns 0: unable to create NURBS representation
492 // with desired accuracy.
493 // 1: success - returned NURBS parameterization
494 // matches the surface's to wthe desired accuracy
495 // 2: success - returned NURBS point locus matches
496 // the surfaces's to the desired accuracy but, on
497 // the interior of the surface's domain, the
498 // surface's parameterization and the NURBS
499 // parameterization may not match to the
500 // desired accuracy.
502 double = 0.0
503 ) const;
504
505 int HasNurbForm( // returns 0: unable to create NURBS representation
506 // with desired accuracy.
507 // 1: success - returned NURBS parameterization
508 // matches the surface's to wthe desired accuracy
509 // 2: success - returned NURBS point locus matches
510 // the surfaces's to the desired accuracy but, on
511 // the interior of the surface's domain, the
512 // surface's parameterization and the NURBS
513 // parameterization may not match to the
514 // desired accuracy.
515 ) const;
516
517 /*
518 Description:
519 Sets the extents of then rectangle. Does not change the evaluation
520 domain.
521 Parameters:
522 dir - [in] 0 sets plane's x coordinate extents
523 0 sets plane's y coordinate extents
524 extents - [in] increasing interval
525 bSynchDomain - [in] if true, the corresponding evaluation interval
526 domain is set so that it matches the extents interval
527 Returns:
528 True if successful.
529 See Also:
530 ON_PlaneSurface::SetDomain
531 */
533 int dir,
534 ON_Interval extents,
535 bool bSynchDomain = false
536 );
537
538 /*
539 Description:
540 Gets the extents of the rectangle.
541 Parameters:
542 dir - [in] 0 gets plane's x coordinate extents
543 0 gets plane's y coordinate extents
544 Returns:
545 Increasing interval
546 See Also:
547 ON_PlaneSurface::Domain
548 */
550 int dir
551 ) const;
552
553 /*
554 Description:
555 Create a plane that contains the projection of a bounding box.
556 Parameters:
557 plane_equation - [in]
558 bbox - [in]
559 padding - [in]
560 amount of extra padding to add around the edges of the
561 plane. Default is 0.0625
562 Returns:
563 true if successful
564 */
566 ON_PlaneEquation plane_equation,
567 const ON_BoundingBox& bbox,
568 double padding = 0.0625
569 );
570
571 /*
572 Description:
573 Create a plane that contains the projection of a bounding box.
574 Parameters:
575 plane - [in]
576 bbox - [in]
577 padding - [in]
578 amount of extra padding to add around the edges of the
579 plane. Default is 0.0625
580 Returns:
581 true if successful
582 */
584 const ON_Plane& plane,
585 const ON_BoundingBox& bbox,
586 double padding = 0.0625
587 );
588
589 /*
590 Description:
591 Create a plane that contains the projection of a list of points.
592 Parameters:
593 plane - [in]
594 point_count - [in]
595 point_list - [in]
596 padding - [in]
597 amount of extra padding to add around the edges of the
598 plane. Default is 0.0625
599 Returns:
600 true if successful
601 */
603 const ON_Plane& plane,
604 int point_count,
605 const ON_3dPoint* point_list,
606 double padding = 0.0625
607 );
608
609protected:
610 // evaluation domain (always increasing)
611 ON_Interval m_domain[2]; // always increasing
612
613 // rectangle extents (in m_plane x,y coordinates)
614 ON_Interval m_extents[2];
615};
616
617
619{
620 ON_OBJECT_DECLARE(ON_ClippingPlaneSurface);
621public:
626
629
630 void Default();
631
632 // override ON_Object::ObjectType() - returns ON::clipplane_object
633 ON::object_type ObjectType() const;
634
635 // virtual ON_Object::SizeOf override
636 unsigned int SizeOf() const;
637
638 // virtual ON_Object::DataCRC override
639 ON__UINT32 DataCRC(ON__UINT32 current_remainder) const;
640
641 // virtual ON_Object::Dump override
642 void Dump( ON_TextLog& ) const; // for debugging
643
644 // virtual ON_Object::Write override
645 ON_BOOL32 Write(
646 ON_BinaryArchive& // open binary file
647 ) const;
648
649 // virtual ON_Object::Read override
650 ON_BOOL32 Read(
651 ON_BinaryArchive& // open binary file
652 );
653
655};
656
657
658#endif
ON_BOOL32 Read(ON_BinaryArchive &)
ON::object_type ObjectType() const
unsigned int SizeOf() const
ON_ClippingPlaneSurface & operator=(const ON_Plane &src)
ON_BOOL32 Write(ON_BinaryArchive &) const
ON_ClippingPlaneSurface(const ON_PlaneSurface &src)
ON__UINT32 DataCRC(ON__UINT32 current_remainder) const
ON_ClippingPlaneSurface & operator=(const ON_PlaneSurface &src)
void Dump(ON_TextLog &) const
ON_ClippingPlaneSurface(const ON_Plane &src)
int GetNurbForm(ON_NurbsSurface &, double=0.0) const
ON_Interval Extents(int dir) const
ON__UINT32 DataCRC(ON__UINT32 current_remainder) const
bool GetNextDiscontinuity(int dir, ON::continuity c, double t0, double t1, double *t, int *hint=NULL, int *dtype=NULL, double cos_angle_tolerance=ON_DEFAULT_ANGLE_TOLERANCE_COSINE, double curvature_tolerance=ON_SQRT_EPSILON) const
int Dimension() const
ON_BOOL32 Write(ON_BinaryArchive &) const
int SpanCount(int) const
ON_BOOL32 IsSingular(int) const
void Dump(ON_TextLog &) const
ON_BOOL32 Transpose()
ON_BOOL32 GetLocalClosestPoint(const ON_3dPoint &, double, double, double *, double *, const ON_Interval *=NULL, const ON_Interval *=NULL) const
bool CreatePseudoInfinitePlane(const ON_Plane &plane, const ON_BoundingBox &bbox, double padding=0.0625)
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=ON_DEFAULT_ANGLE_TOLERANCE_COSINE, double curvature_tolerance=ON_SQRT_EPSILON) const
ON_BOOL32 IsClosed(int) const
ON_BOOL32 Read(ON_BinaryArchive &)
ON_BOOL32 GetBBox(double *, double *, ON_BOOL32=false) const
ON_PlaneSurface & operator=(const ON_Plane &)
int Degree(int) const
ON_PlaneSurface & operator=(const ON_PlaneSurface &)
ON_BOOL32 IsValid(ON_TextLog *text_log=NULL) const
ON_BOOL32 IsPeriodic(int) const
ON_BOOL32 GetSpanVector(int, double *) const
bool Extend(int dir, const ON_Interval &domain)
ON_PlaneSurface(const ON_PlaneSurface &)
ON_BOOL32 Transform(const ON_Xform &)
ON_BOOL32 GetSurfaceSize(double *width, double *height) const
ON_PlaneSurface(const ON_Plane &)
ON_Curve * IsoCurve(int dir, double c) const
ON_BOOL32 GetParameterTolerance(int, double, double *, double *) const
ON_BOOL32 SetDomain(int dir, double t0, double t1)
ON_BOOL32 Reverse(int)
ON_BOOL32 IsPlanar(ON_Plane *plane=NULL, double tolerance=ON_ZERO_TOLERANCE) const
ON_BOOL32 Split(int dir, double c, ON_Surface *&west_or_south_side, ON_Surface *&east_or_north_side) const
ON_Interval Domain(int) const
ON_Surface * Offset(double offset_distance, double tolerance, double *max_deviation=NULL) const
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
unsigned int SizeOf() const
ON_BOOL32 Evaluate(double, double, int, int, double *, int=0, int *=0) const
virtual ~ON_PlaneSurface()
ON_BOOL32 Trim(int dir, const ON_Interval &domain)
bool CreatePseudoInfinitePlane(ON_PlaneEquation plane_equation, const ON_BoundingBox &bbox, double padding=0.0625)
bool CreatePseudoInfinitePlane(const ON_Plane &plane, int point_count, const ON_3dPoint *point_list, double padding=0.0625)
int HasNurbForm() const
bool SetExtents(int dir, ON_Interval extents, bool bSynchDomain=false)