QCAD
Open Source 2D CAD
Loading...
Searching...
No Matches
opennurbs_beam.h
Go to the documentation of this file.
1#if !defined(OPENNURBS_EXTRUSION_INC_)
2#define OPENNURBS_EXTRUSION_INC_
3
4/*
5Description:
6 Get the transformation that maps the ON_Extrusion
7 2d xy profile to 3d world space.
8Parameters:
9 P - [in] start or end of path
10 T - [in] unit tanget to path
11 U - [in] unit up vector perpindicular to T
12 Normal - [in] optional unit vector with Normal->x > 0 that
13 defines the unit normal to the miter plane.
14 xform - [out]
15 transformation that maps the profile curve to 3d world space
16 scale2d - [out]
17 If not NULL, this is the scale part of the transformation.
18 If there is no mitering, then this is the identity.
19 rot2d - [out]
20 If not null, this is the part of the transformation
21 that rotates the xy plane into its 3d world location.
22Returns:
23 true if successful.
24*/
27 ON_3dPoint P,
28 ON_3dVector T,
29 ON_3dVector U,
30 const ON_3dVector* Normal,
31 ON_Xform& xform, // = rot3d*scale2d
32 ON_Xform* scale2d,
33 ON_Xform* rot2d
34 );
35
37{
39public:
41 ON_Extrusion(const ON_Extrusion& src);
43
45
47 //
48 // overrides of virtual ON_Object functions
49 //
50 ON_BOOL32 IsValid( ON_TextLog* text_log = NULL ) const;
51 void Dump( ON_TextLog& ) const;
52 unsigned int SizeOf() const;
53 ON__UINT32 DataCRC( ON__UINT32 current_remainder ) const;
54 ON_BOOL32 Write( ON_BinaryArchive& binary_archive) const;
55 ON_BOOL32 Read( ON_BinaryArchive& binary_archive );
56 ON::object_type ObjectType() const;
57
59 //
60 // overrides of virtual ON_Geometry functions
61 //
62 int Dimension() const;
64 double* boxmin,
65 double* boxmax,
66 int bGrowBox = false
67 ) const;
69 ON_BoundingBox& tight_bbox,
70 int bGrowBox = false,
71 const ON_Xform* xform = 0
72 ) const;
74 const ON_Xform& xform
75 );
76
77 /*
78 Description:
79 Build a brep form of the extrusion. The outer profile is always
80 the first face in the brep. If there are inner profiles,
81 additional brep faces are created for each profile. If the
82 outer profile is closed, then end caps are added as the last
83 two faces in the brep.
84 Parameters:
85 brep - [in]
86 If the brep pointer is not null, then the brep form is constructed
87 in brep. If the brep pointer is null, then an ON_Brep is allocated
88 on the heap.
89 Returns:
90 If successful, a pointer to the brep form. If unsuccessful, null.
91 */
93 ON_Brep* brep = NULL
94 ) const;
95
96 /*
97 Description:
98 Build a brep form of the extrusion. The outer profile is always
99 the first face in the brep. If there are inner profiles,
100 additional brep faces are created for each profile. If the
101 outer profile is closed, then end caps are added as the last
102 two faces in the brep.
103 Parameters:
104 brep - [in]
105 If the brep pointer is not null, then the brep form is constructed
106 in brep. If the brep pointer is null, then an ON_Brep is allocated
107 on the heap.
108 bSplitKinkyFaces - [in]
109 If true and the profiles have kinks, then the faces corresponding
110 to those profiles are split so they will be G1.
111 Returns:
112 If successful, a pointer to the brep form. If unsuccessful, null.
113 */
115 ON_Brep* brep,
116 bool bSplitKinkyFaces
117 ) const;
118
120 //
121 // overrides of virtual ON_Surface functions
122 //
124 const ON_MeshParameters& mp,
125 ON_Mesh* mesh = NULL
126 ) const;
128 int dir,
129 double t0,
130 double t1
131 );
133 int dir
134 ) const;
136 double* width,
137 double* height
138 ) const;
139 int SpanCount(
140 int dir
141 ) const;
143 int dir,
144 double* span_vector
145 ) const;
147 int dir,
148 double t,
149 int side,
150 int* span_vector_index,
151 ON_Interval* span_interval
152 ) const;
153 int Degree(
154 int dir
155 ) const;
157 int dir,
158 double t,
159 double* tminus,
160 double* tplus
161 ) const;
163 const ON_Curve& curve,
164 const ON_Interval* curve_domain = NULL
165 ) const;
167 ON_Plane* plane = NULL,
168 double tolerance = ON_ZERO_TOLERANCE
169 ) const;
171 int
172 ) const;
174 int
175 ) const;
177 int dir,
178 ON::continuity c,
179 double t0,
180 double t1,
181 double* t,
182 int* hint=NULL,
183 int* dtype=NULL,
184 double cos_angle_tolerance=0.99984769515639123915701155881391,
185 double curvature_tolerance=ON_SQRT_EPSILON
186 ) const;
187 bool IsContinuous(
188 ON::continuity c,
189 double s,
190 double t,
191 int* hint = NULL,
192 double point_tolerance=ON_ZERO_TOLERANCE,
193 double d1_tolerance=ON_ZERO_TOLERANCE,
194 double d2_tolerance=ON_ZERO_TOLERANCE,
195 double cos_angle_tolerance=0.99984769515639123915701155881391,
196 double curvature_tolerance=ON_SQRT_EPSILON
197 ) const;
199 const ON_BoundingBox& bbox
200 ) const;
201 ON_BOOL32 Reverse( int dir );
204 double u, double v,
205 int num_der,
206 int array_stride,
207 double* der_array,
208 int quadrant = 0,
209 int* hint = 0
210 ) const;
212 int dir,
213 double c
214 ) const;
216 int dir,
217 const ON_Interval& domain
218 );
219 bool Extend(
220 int dir,
221 const ON_Interval& domain
222 );
224 int dir,
225 double c,
226 ON_Surface*& west_or_south_side,
227 ON_Surface*& east_or_north_side
228 ) const;
229
230 bool GetClosestPoint(
231 const ON_3dPoint& P,
232 double* s,
233 double* t,
234 double maximum_distance = 0.0,
235 const ON_Interval* sdomain = 0,
236 const ON_Interval* tdomain = 0
237 ) const;
238
239 ON_BOOL32 GetLocalClosestPoint( const ON_3dPoint&, // test_point
240 double,double, // seed_parameters
241 double*,double*, // parameters of local closest point returned here
242 const ON_Interval* = NULL, // first parameter sub_domain
243 const ON_Interval* = NULL // second parameter sub_domain
244 ) const;
245
246 //ON_Surface* Offset(
247 // double offset_distance,
248 // double tolerance,
249 // double* max_deviation = NULL
250 // ) const;
251
252 int GetNurbForm(
253 ON_NurbsSurface& nurbs_surface,
254 double tolerance = 0.0
255 ) const;
256 int HasNurbForm() const;
258 double nurbs_s, double nurbs_t,
259 double* surface_s, double* surface_t
260 ) const;
262 double surface_s, double surface_t,
263 double* nurbs_s, double* nurbs_t
264 ) const;
265
267 //
268 // ON_Extrusion interface
269 //
270 void Destroy();
271
272 /*
273 Description:
274 Sets m_path to (A,B), m_path_domain to [0,Length(AB)],
275 and m_t to [0,1].
276 Parameters:
277 A - [in] path start
278 B - [in] path end
279 Returns:
280 true A and B are valid, the distance from A to B is larger
281 than ON_ZERO_TOLERANCE, and the path was set.
282 false A or B is not valid or the distance from A to B is
283 at most ON_ZERO_TOLERANCE. In this case nothing is set.
284 Remark:
285 You must also set the up direction to be perpendicular to the path.
286 */
287 bool SetPath(ON_3dPoint A, ON_3dPoint B);
288
289 /*
290 Description:
291 Sets m_path to (A,B), m_path_domain to [0,Length(AB)],
292 m_t to [0,1], and m_up.
293 Parameters:
294 A - [in] path start
295 B - [in] path end
296 up - [in] up direction
297 If up is a unit vector and perpindicular to the line
298 segment from A to B, then m_up is set to up.
299 Otherwise up will be adjusted so it is perpendicular
300 to the line segment from A to B and unitized.
301 Returns:
302 true A and B are valid, the distance from A to B is larger
303 than ON_ZERO_TOLERANCE, and the path was set.
304 false A or B is not valid, or the distance from A to B is
305 at most ON_ZERO_TOLERANCE, or up is invalid, or up
306 is zero, or up is parallel to the line segment.
307 In this case nothing is set.
308 */
309 bool SetPathAndUp(ON_3dPoint A, ON_3dPoint B, ON_3dVector up );
310
311 /*
312 Description:
313 Get the surface parameter for the path.
314 Returns:
315 0: The first surface parameter corresponds to the path direction.
316 (m_bTransposed = true)
317 1: The second surface parameter corresponds to the path direction.
318 (m_bTransposed = false)
319 Remarks:
320 The default ON_Extrusion constructor sets
321 m_bTransposed = false which corresponds to the 1 = PathParameter().
322 */
323 int PathParameter() const;
324
325 ON_3dPoint PathStart() const;
326 ON_3dPoint PathEnd() const;
327 ON_3dVector PathTangent() const;
328
329 /*
330 Description:
331 Set miter plane normal.
332 Parameters:
333 N - [in] If ON_UNSET_VECTOR or N is parallel to the z-axis,
334 then the miter plane is the default plane
335 perpindicular to the path.
336 If N is valid and the z coordinate of a unitized
337 N is greater than m_Nz_tol, then the miter plane
338 normal is set.
339 end - [in] 0 = set miter plane at the start of the path.
340 1 = set miter plane at the end of the path.
341 */
342 bool SetMiterPlaneNormal(ON_3dVector N, int end);
343
344 void GetMiterPlaneNormal(int end, ON_3dVector& N) const;
345
346 /*
347 Returns:
348 0: not mitered.
349 1: start of path is mitered.
350 2: end of path is mitered.
351 3: start and end are mitered.
352 */
353 int IsMitered() const;
354
355 /*
356 Returns:
357 True if extrusion object is a capped solid.
358 */
359 bool IsSolid() const;
360
361 /*
362 Returns:
363 0: no or profile is open
364 1: bottom cap
365 2: top cap
366 3: both ends capped.
367 */
368 int IsCapped() const;
369
370 /*
371 Description:
372 Get the transformation that maps the xy profile curve
373 to its 3d location.
374 Parameters:
375 s - [in] 0.0 = starting profile
376 1.0 = ending profile
377 */
378 bool GetProfileTransformation( double s, ON_Xform& xform ) const;
379
380 /*
381 Description:
382 Get the the 3d plane containing the profile curve at a
383 normalized path parameter.
384 Parameters:
385 s - [in] 0.0 = starting plane
386 1.0 = ending plane
387 plane - [out]
388 Plane containing profile is returned in plane. If
389 false is returned, then the input value of plane
390 is not changed.
391 Returns:
392 true if plane was set. False if this is invalid and plane
393 could not be set.
394 Remarks:
395 When no mitering is happening, GetPathPlane() and
396 GetProfilePlane() return the same plane.
397 */
398 bool GetProfilePlane( double s, ON_Plane& plane ) const;
399
400
401 /*
402 Description:
403 Get the the 3d plane perpindicular to the path at a
404 normalized path parameter.
405 Parameters:
406 s - [in] 0.0 = starting plane
407 1.0 = ending plane
408 plane - [out]
409 Plane is returned here. If
410 false is returned, then the input value of plane
411 is not changed.
412 Returns:
413 true if plane was set. False if this is invalid and plane
414 could not be set.
415 Remarks:
416 When no mitering is happening, GetPathPlane() and
417 GetProfilePlane() return the same plane.
418 */
419 bool GetPathPlane( double s, ON_Plane& plane ) const;
420
421 /*
422 Description:
423 Set the outer profile of the extrusion.
424 Paramters:
425 outer_profile - [in]
426 curve in the xy plane or a 2d curve.
427 bCap - [in]
428 If outer_profile is a closed curve, then bCap
429 determines if the extrusion has end caps.
430 If outer_profile is an open curve, bCap is ignored.
431 Returns:
432 True if the profile was set. In this case the ON_Extrusion class
433 manages the curve and ~ON_Extrusion will delete it. If the outer
434 profile is closed, then the extrusion may also have inner profiles.
435 If the outer profile is open, the extrusion may not have inner
436 profiles. If the extrusion already has a profile, the set will
437 fail.
438 Remarks:
439 If needed, outer_profile will be converted to a 2d
440 curve. If outer_curve is closed but not correctly oriented,
441 it will reversed so it has a counter-clockwise orientation.
442 */
443 bool SetOuterProfile( ON_Curve* outer_profile, bool bCap );
444
445 /*
446 Description:
447 Add an inner profile.
448 Paramters:
449 inner_profile - [in]
450 closed curve in the xy plane or a 2d curve.
451 Returns:
452 True if the profile was set. In this case the
453 ON_Extrusion class manages the curve and ~ON_Extrusion will
454 delete it. The extrusion must already have an outer profile.
455 If the extrusion already has a profile, the set will
456 fail.
457 Remarks:
458 If needed, innter_profile will be converted to a 2d
459 curve. If inner_profile is not correctly oriented, it
460 will be reversed so it has a clockwise orientation.
461 */
462 bool AddInnerProfile( ON_Curve* inner_profile );
463
464
465 /*
466 Returns:
467 Number of profile curves.
468 */
469 int ProfileCount() const;
470
471
472 /*
473 Description:
474 Get the surface parameter for the profile.
475 Returns:
476 0: The first surface parameter corresponds to the profile direction.
477 (m_bTransposed = false)
478 1: The second surface parameter corresponds to the profile direction.
479 (m_bTransposed = true)
480 Remarks:
481 The default ON_Extrusion constructor sets
482 m_bTransposed = false which corresponds to the 0 = ProfileParameter().
483 */
484 int ProfileParameter() const;
485
486 /*
487 Paramters:
488 profile_index - [in]
489 0 <= profile_index < ProfileCount().
490 The outer profile has index 0.
491 Returns:
492 Pointer to the i-th 2d profile. The ON_Extrusion
493 class manages this curve. Do not delete it
494 and do not use the pointer if the ON_Extrusion
495 class changes.
496 */
497 const ON_Curve* Profile(int profile_index) const;
498
499 /*
500 Paramters:
501 profile_index - [in]
502 0 <= profile_index < ProfileCount().
503 The outer profile has index 0.
504 s - [in] ( 0.0 <= s <= 1.0 )
505 A relative parameter controling which priofile
506 is returned. s = 0.0 returns the bottom profile
507 and s = 1.0 returns the top profile.
508 Returns:
509 NULL if the input parameters or the ON_Extrusion class is
510 not valid. Otherwise a pointer to a 3d curve for
511 the requested profile. This curve is on the heap and
512 the caller is responsible for deleting this curve.
513 */
514 ON_Curve* Profile3d(int profile_index, double s ) const;
515
516 /*
517 Paramters:
518 ci - [in]
519 component index identifying a 3d extrusion profile curve.
520 Returns:
521 NULL if the component index or the ON_Extrusion class is
522 not valid. Otherwise a pointer to a 3d curve for
523 the requested profile. This curve is on the heap and
524 the caller is responsible for deleting this curve.
525 */
526 ON_Curve* Profile3d( ON_COMPONENT_INDEX ci ) const;
527
528 /*
529 Returns:
530 If m_profile_count >= 2 and m_profile is an ON_PolyCurve
531 with m_profile_count segments defining outer and inner
532 profiles, a pointer to the polycurve is returned.
533 Otherwise null is returned.
534 */
535 const ON_PolyCurve* PolyProfile() const;
536
537 /*
538 Description:
539 Get a list of the profile curves.
540 Returns:
541 Number of curves appended to the list.
542 */
543 int GetProfileCurves( ON_SimpleArray<const ON_Curve*>& profile_curves ) const;
544
545 /*
546 Description:
547 Test a polycurve to determine if it meets the necessary
548 conditions to be used as a multi-segment profile in a extrusion.
549 Returns:
550 True if the returned polycurve can be used a a multi-segment
551 profile in a extrusion.
552 */
553 static bool IsValidPolyCurveProfile( const ON_PolyCurve& polycurve, ON_TextLog* text_log = 0 );
554
555 /*
556 Description:
557 If possible, modify a polycurve so it meets the necessary conditions
558 to be used as a multi-segment profile in a extrusion.
559 Returns:
560 True if the returned polycurve can be used a a multi-segment
561 profile in a extrusion.
562 */
563 static bool CleanupPolyCurveProfile( ON_PolyCurve& polycurve );
564
565 // path definition:
566 // The line m_path must have length > m_path_length_min.
567 // The interval m_t must statisfy 0 <= m_t[0] < m_t[1] <= 1.
568 // The extrusion starts at m_path.PointAt(m_t[0]) and ends
569 // at m_path.PointAt(m_t[1]).
570 // The "up" direction m_up is a unit vector that must
571 // be perpindicular to m_path.Tangent().
575
576 // profile information:
577 // In general, use SetOuterProfile() and AddInnerProfile()
578 // to set m_profile_count and m_profile. If you are
579 // a glutton for punishment, then you might be interested
580 // in the following.
581 // The profile curves must be in the x-y plane.
582 // The profiles' "y" axis corresponds to m_up.
583 // The point (0,0) is extruded along the m_path line.
584 // If m_profile_count = 1, then m_profile can be any
585 // type of continous curve. If m_profile_count > 1,
586 // then m_profile must be an ON_PolyCurve with
587 // m_profile_count segments, the domain of each segment
588 // must exactly match the polycurve's segment domain,
589 // every segment must be continuous and closed,
590 // the first segement curve must have counter-clockwise
591 // orientation, and the rest must have clockwise
592 // orientations.
595
596 // capped end information:
597 // If the profile is closed, then m_bCap[] determines
598 // if the ends are capped.
599 bool m_bCap[2];
600
601 // mitered end information:
602 // The normals m_N[] are with respect to the xy plane.
603 // A normal parallel to the z axis has no mitering.
604 // If m_bHaveN[i] is true, then m_N[i] must be a 3d unit
605 // vector with m_N[i].z > m_Nz_tol; If m_bHaveN[i]
606 // is false, then m_N[i] is ignored. The normal m_N[0]
607 // defines the start miter plane and m_N[1] defines the
608 // end miter plane.
609 bool m_bHaveN[2];
611
612 // Surface parameterization information
614 bool m_bTransposed; // false: (s,t) = (profile,path)
615
616 // The z coordinates of miter plane normals must be
617 // greater than m_Nz_tol
618 static const double m_Nz_min; // 1/64;
619
620 // The length of the m_path line must be greater than
621 // m_path_length_min
622 static const double m_path_length_min; // ON_ZERO_TOLERANCE;
623
624 /*
625 Description:
626 Get an ON_Exrusion form of a cylinder.
627 Parameters:
628 cylinder - [in] cylinder.IsFinite() must be true
629 bCapBottom - [in] if true, the end at cylinder.m_height[0] will be capped
630 bCapTop - [in] if true, the end at cylinder.m_height[1] will be capped
631 extrusion - [in]
632 If the input extrusion pointer is null, one will be allocated on the heap
633 and it is the caller's responsibility to delte it at an appropriate time.
634 If the input point is not null, this extrusion will be used and the same
635 pointer will be returned, provided the input is valid.
636 Returns:
637 If the input is valid, a pointer to an ON_Exrusion form of the cylinder.
638 If the input is not valid, then null, even when the input extrusion
639 object is not null.
640 Example:
641
642 ON_Cylinder cylinder = ...;
643 bool bCapBottom = true;
644 bool bCapTop = true;
645 ON_Extrusion extrusion;
646 if ( 0 == ON_Extrusion::Cylinder(cylinder,bCapBottom,bCapTop,&extrusion) )
647 {
648 // input is not valid - nothing set
649 ...
650 }
651 else
652 {
653 // extrusion = cylinder
654 ...
655 }
656 */
657 static ON_Extrusion* Cylinder(
658 const ON_Cylinder& cylinder,
659 bool bCapBottom,
660 bool bCapTop,
661 ON_Extrusion* extrusion = 0
662 );
663
664 /*
665 Description:
666 Get an ON_Exrusion form of a pipe.
667 Parameters:
668 cylinder - [in] cylinder.IsFinite() must be true
669 The cylinder can be either the inner or outer wall of the pipe.
670 other_radius - [in] ( != cylinder.Radius() )
671 If cylinder.Radius() < other_radius, then the cylinder will be
672 the inside of the pipe. If cylinder.Radius() > other_radius, then
673 the cylinder will be the outside of the pipe.
674 bCapBottom - [in] if true, the end at cylinder.m_height[0] will be capped
675 bCapTop - [in] if true, the end at cylinder.m_height[1] will be capped
676 extrusion - [in]
677 If the input extrusion pointer is null, one will be allocated on the heap
678 and it is the caller's responsibility to delte it at an appropriate time.
679 If the input point is not null, this extrusion will be used and the same
680 pointer will be returned, provided the input is valid.
681 Returns:
682 If the input is valid, a pointer to an ON_Exrusion form of the pipe.
683 If the input is not valid, then null, even when the input extrusion
684 object is not null.
685 Example:
686
687 ON_Cylinder cylinder = ...;
688 double other_radius = cylinder.Radius()+1.0;
689 bool bCapBottom = true;
690 bool bCapTop = true;
691 ON_Extrusion extrusion;
692 if ( 0 == ON_Extrusion::Pipe(cylinder,other_radius,bCapBottom,bCapTop,&extrusion) )
693 {
694 // input is not valid - nothing set
695 ...
696 }
697 else
698 {
699 // extrusion = pipe
700 ...
701 }
702 */
703 static ON_Extrusion* Pipe(
704 const ON_Cylinder& cylinder,
705 double other_radius,
706 bool bCapBottom,
707 bool bCapTop,
708 ON_Extrusion* extrusion = 0
709 );
710};
711
712#endif
713
@ Transform
Definition RSMetaType.h:67
Definition opennurbs_point.h:403
Definition opennurbs_point.h:931
Definition opennurbs_archive.h:152
Definition opennurbs_bounding_box.h:25
Definition opennurbs_brep.h:1585
Definition opennurbs_curve.h:88
Definition opennurbs_cylinder.h:28
Definition opennurbs_beam.h:37
ON_Curve * m_profile
Definition opennurbs_beam.h:594
ON_OBJECT_DECLARE(ON_Extrusion)
ON_Line m_path
Definition opennurbs_beam.h:572
ON_Interval m_t
Definition opennurbs_beam.h:573
ON_Interval m_path_domain
Definition opennurbs_beam.h:613
bool m_bTransposed
Definition opennurbs_beam.h:614
static const double m_path_length_min
Definition opennurbs_beam.h:622
int m_profile_count
Definition opennurbs_beam.h:593
ON_3dVector m_up
Definition opennurbs_beam.h:574
static const double m_Nz_min
Definition opennurbs_beam.h:618
virtual ON_BOOL32 GetBBox(double *boxmin, double *boxmax, int bGrowBox=false) const =0
virtual bool GetTightBoundingBox(ON_BoundingBox &tight_bbox, int bGrowBox=false, const ON_Xform *xform=0) const
Definition opennurbs_geometry.cpp:98
virtual int Dimension() const =0
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_polycurve.h:38
Definition opennurbs_array.h:46
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
virtual ON_BOOL32 GetSpanVectorIndex(int dir, double t, int side, int *span_vector_index, ON_Interval *span_interval) const
Definition opennurbs_surface.cpp:117
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
ISO
Definition opennurbs_surface.h:73
bool SetDomain(int dir, ON_Interval domain)
Definition opennurbs_surface.cpp:93
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 ISO IsIsoparametric(const ON_Curve &curve, const ON_Interval *curve_domain=NULL) const
Definition opennurbs_surface.cpp:162
virtual ON_Mesh * CreateMesh(const ON_MeshParameters &mp, ON_Mesh *mesh=NULL) const
Definition opennurbs_mesh.cpp:527
bool IsSolid() const
Definition opennurbs_surface.cpp:773
ON_Brep * BrepForm(ON_Brep *brep=NULL) const
Definition opennurbs_surface.cpp:2285
ON::object_type ObjectType() const
Definition opennurbs_surface.cpp:68
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 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
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
ON_DECL bool ON_GetEndCapTransformation(ON_3dPoint P, ON_3dVector T, ON_3dVector U, const ON_3dVector *Normal, ON_Xform &xform, ON_Xform *scale2d, ON_Xform *rot2d)
Definition opennurbs_beam.cpp:195
#define ON_ZERO_TOLERANCE
Definition opennurbs_defines.h:238
#define ON_DECL
Definition opennurbs_defines.h:92
#define ON_CLASS
Definition opennurbs_defines.h:91
#define ON_SQRT_EPSILON
Definition opennurbs_defines.h:147
#define N
Definition opennurbs_rand.cpp:70
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