Point Cloud Library (PCL)  1.14.1-dev
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 
20 class ON_PlaneSurface;
21 
22 class ON_CLASS ON_PlaneSurface : public ON_Surface
23 {
24  ON_OBJECT_DECLARE(ON_PlaneSurface);
25 
26 public:
30 
33 
34  virtual ~ON_PlaneSurface();
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  */
532  bool SetExtents(
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 
609 protected:
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);
621 public:
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_ClippingPlaneSurface & operator=(const ON_PlaneSurface &src)
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
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_PlaneSurface & operator=(const ON_PlaneSurface &)
ON_BOOL32 IsClosed(int) const
ON_BOOL32 Read(ON_BinaryArchive &)
ON_BOOL32 GetBBox(double *, double *, ON_BOOL32=false) const
int Degree(int) const
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_PlaneSurface & operator=(const ON_Plane &)
ON_BOOL32 Transform(const ON_Xform &)
ON_Curve * IsoCurve(int dir, double c) const
ON_BOOL32 GetSurfaceSize(double *width, double *height) const
ON_PlaneSurface(const ON_Plane &)
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)