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