#include <surdef.hxx>


Public Member Functions | |
| virtual int | accurate_derivs (const SPApar_box &box=*(SPApar_box *) NULL_REF) const |
Returns the number of derivatives of this surface that can be found accurately and relatively directly. | |
| virtual const double * | all_discontinuities_u (int &n_discont, int order) |
Returns the number and parameter values of all discontinuities in u of this surface, up to the given order (maximum three). | |
| virtual const double * | all_discontinuities_v (int &n_discont, int order) |
Returns the number and parameter values of all discontinuities in v of this surface, up to the given order (maximum three). | |
| virtual SPAbox | bound (const SPAbox &box, const SPAtransf &transf=*(SPAtransf *) NULL_REF) const |
Returns an object-space box bounding this surface. | |
| virtual SPAbox | bound (const SPApar_box &parbox=*(SPApar_box *) NULL_REF, const SPAtransf &transf=*(SPAtransf *) NULL_REF) const |
Returns an object-space box bounding this surface. | |
| virtual void | change_event () |
Notifies the derived type that this surface has been changed. | |
| virtual check_status_list * | check (const check_fix &input=*(const check_fix *) NULL_REF, check_fix &result=*(check_fix *) NULL_REF, const check_status_list *chks=(const check_status_list *) NULL_REF) |
Checks for any data errors in this surface, and corrects the errors if possible. | |
| virtual logical | closed_u () const |
Determines whether this surface is closed, smoothly or not, in the u-parameter direction. | |
| virtual logical | closed_v () const |
Determines whether this surface is closed, smoothly or not, in the v-parameter direction. | |
| surface * | copy_surf () const |
Makes a copy of this surface. | |
| virtual void | debug (const char *title, FILE *fp=debug_file_ptr) const =0 |
Prints out a title line and details about this surface to the debug file or any other specified file. | |
| virtual surface * | deep_copy (pointer_map *pm=NULL) const =0 |
| Creates a copy of this object that does not share any data with the original. | |
| virtual const double * | discontinuities_u (int &n_discont, int order) const |
Returns the number and parameter values of discontinuities in u of this surface, of the given order (maximum three), in a read-only array. | |
| virtual const double * | discontinuities_v (int &n_discont, int order) const |
Returns the number and parameter values of discontinuities in v of this surface, of the given order (maximum three), in a read-only array. | |
| virtual int | discontinuous_at_u (double u) const |
Determines whether a particular value of u represents a discontinuity of this surface. | |
| virtual int | discontinuous_at_v (double v) const |
Determines whether a particular value of v represents a discontinuity of this surface. | |
| virtual void | eval (const SPApar_pos ¶m, SPAposition &pos, SPAvector *first_derivs=NULL, SPAvector *second_derivs=NULL) const |
| Finds the position on a parametric surface corresponding to the given parameter values, and optionally the first and second derivatives as well. | |
| virtual double | eval_cross (const SPApar_pos &pos, const SPAunit_vector &normal) const |
| Finds the curvature of a cross-sectional curve of the parametric surface at the point with the given parameter position. | |
| virtual SPAunit_vector | eval_normal (const SPApar_pos &pos) const |
| Finds the normal to a parametric surface at the point with the given parameter position. | |
| virtual SPAunit_vector | eval_outdir (const SPApar_pos &pos) const |
Finds the outward direction from this surface at the point with the given parameter position. | |
| virtual SPAposition | eval_position (const SPApar_pos &pos) const |
| Finds the point on a parametric surface with the given parameter position. | |
| surf_princurv | eval_prin_curv (const SPApar_pos &pos) const |
Finds the principal axes of curvature of this surface at the point with the given parameter position and the curvatures in those directions, in a structure defined for the purpose. | |
| virtual void | eval_prin_curv (const SPApar_pos &pos, SPAunit_vector &axis1, double &cur1, SPAunit_vector &axis2, double &cur2) const |
Finds the principal axes of curvature of this surface at the point with the given parameter position, and the curvatures in those directions. | |
| virtual int | evaluate (const SPApar_pos ¶m, SPAposition &pos, SPAvector **derivs=NULL, int nd=0, evaluate_surface_quadrant quad=evaluate_surface_unknown) const |
| Calculates derivatives, of any order up to the number requested, and stores them in vectors provided by the user. | |
| virtual int | evaluate_iter (const SPApar_pos ¶m, surface_evaldata *data, SPAposition &pos, SPAvector **derivs=NULL, int nd=0, evaluate_surface_quadrant quad=evaluate_surface_unknown) const |
| Calculates derivatives, of any order up to the number requested, in an iterative fashion. | |
| virtual const discontinuity_info & | get_disc_info_u () const |
Returns read-only access to a discontinuity_info object, if there is one, detailing discontinuities in u. | |
| virtual const discontinuity_info & | get_disc_info_v () const |
Returns read-only access to a discontinuity_info object, if there is one, detailing discontinuities in v. | |
| virtual curve * | get_path () const |
Returns the sweep path curve for this surface. | |
| virtual sweep_path_type | get_path_type () const |
Returns the sweep path type for this surface. | |
| virtual curve * | get_profile (double param) const |
Returns the sweep profile on this surface. | |
| virtual law * | get_rail () const |
| Returns the rail law for this swept surface. | |
| virtual logical | left_handed_uv () const |
Indicates whether the parameter coordinate system of this surface is right-handed or left-handed. | |
| void | limit (const SPApar_box &box) |
Subsets this surface in place, according to the given parameter box. | |
| void | limit_u (const SPAinterval &range) |
Subsets this surface in place, according to the given interval in u. | |
| void | limit_v (const SPAinterval &range) |
Subsets this surface in place, according to the given interval in v. | |
| virtual surface * | make_copy () const =0 |
Makes a copy of this surface on the heap, and returns a pointer to it. | |
| virtual surface_evaldata * | make_evaldata () const |
Constructs a data object to retain evaluation information across calls to evaluate_iter. | |
| virtual logical | need_save_as_approx (int save_to_version, logical check_progenitors) const |
| Queries whether the object needs to be saved to an old version as an approximation. | |
| virtual surface & | negate ()=0 |
Reverses the sense of this surface. | |
| virtual surf_normcone | normal_cone (const SPApar_box &parbox, logical approx_OK=FALSE, const SPAtransf &transf=*(SPAtransf *) NULL_REF) const |
Returns a cone bounding the normal direction of this surface. | |
| logical | operator!= (const surface &surf) const |
Tests this surface for inequality to another surface. | |
| virtual surface & | operator*= (const SPAtransf &transf)=0 |
Transforms this surface by the given transformation. | |
| virtual logical | operator== (const surface &surf) const |
Tests this surface for equality to another surface. | |
| virtual SPApar_pos | param (const SPAposition &pos, const SPApar_pos &guess=*(SPApar_pos *) NULL_REF) const |
Finds the parameter position of a given point on this surface, given an optional first guess. | |
| SPApar_dir | param_dir (const SPAunit_vector &dir, const SPApar_pos &pos) const |
Finds the direction in parameter space of a given object-space direction on this surface, at a given parameter position. | |
| virtual double | param_period_u () const |
| Returns the period, in u, of a periodic parametric surface. | |
| virtual double | param_period_v () const |
| Returns the period, in v, of a periodic parametric surface. | |
| virtual SPApar_box | param_range (const SPAbox &box=*(SPAbox *) NULL_REF) const |
Returns the principal parameter range of this surface. | |
| virtual SPAinterval | param_range_u (const SPAbox &box=*(SPAbox *) NULL_REF) const |
| Returns the principal parameter range of a surface in the u-parameter direction. | |
| virtual SPAinterval | param_range_v (const SPAbox &box=*(SPAbox *) NULL_REF) const |
| Returns the principal parameter range of a surface in the v-parameter direction. | |
| virtual SPApar_vec | param_unitvec (const SPAunit_vector &dir, const SPApar_pos &pos) const |
| Finds the rate of change in the surface parameter corresponding to a unit velocity in a given object-space direction, at a given position in parameter space. | |
| virtual logical | parametric () const |
Returns TRUE if this surface is a parametric surface - otherwise returns FALSE. | |
| virtual logical | periodic_u () const |
Determines if this surface is periodic in the u-parameter direction (i.e., if it is smoothly closed, so that faces can run over the seam). | |
| virtual logical | periodic_v () const |
Determines if this surface is periodic in the v-parameter direction (i.e., if it is smoothly closed, so that faces can run over the seam). | |
| virtual logical | planar (SPAposition &pos, SPAunit_vector &normal) const |
Reports whether this surface is planar. | |
| virtual double | point_cross (const SPAposition &pos, const SPAunit_vector &normal, const SPApar_pos ¶m_guess=*(SPApar_pos *) NULL_REF) const |
Finds the curvature of a cross-sectional curve of this surface at the given point. | |
| virtual SPAunit_vector | point_normal (const SPAposition &pos, const SPApar_pos ¶m_guess=*(SPApar_pos *) NULL_REF) const =0 |
Finds the normal to this surface at a point on the surface nearest to the given position. | |
| virtual SPAunit_vector | point_outdir (const SPAposition &pos, const SPApar_pos &guess=*(SPApar_pos *) NULL_REF) const |
Finds the outward direction from this surface at a point nearest the given position. | |
| void | point_perp (const SPAposition &pos, SPAposition &foot, const SPApar_pos ¶m_guess=*(SPApar_pos *) NULL_REF, SPApar_pos ¶m_actual=*(SPApar_pos *) NULL_REF, logical f_weak=FALSE) const |
Finds the point on this surface nearest to the given point. | |
| void | point_perp (const SPAposition &pos, SPAposition &foot, SPAunit_vector &normal, const SPApar_pos ¶m_guess=*(SPApar_pos *) NULL_REF, SPApar_pos ¶m_actual=*(SPApar_pos *) NULL_REF, logical f_weak=FALSE) const |
Finds the point on this surface nearest to the given point and, optionally, the normal to the surface at that point. | |
| virtual void | point_perp (const SPAposition &pos, SPAposition &foot, SPAunit_vector &normal, surf_princurv &cur, const SPApar_pos ¶m_guess=*(SPApar_pos *) NULL_REF, SPApar_pos ¶m_actual=*(SPApar_pos *) NULL_REF, logical f_weak=FALSE) const =0 |
Finds the point on this surface nearest to the given point and, optionally, the normal to and the principal curvatures of the surface at that point. | |
| surf_princurv | point_prin_curv (const SPAposition &pos, const SPApar_pos &guess=*(SPApar_pos *) NULL_REF) const |
Finds the principal axes of curvature of this surface at a given point and the curvatures in those directions, in a structure defined for the purpose. | |
| virtual void | point_prin_curv (const SPAposition &pos, SPAunit_vector &axis1, double &cur1, SPAunit_vector &axis2, double &cur2, const SPApar_pos ¶m_guess=*(SPApar_pos *) NULL_REF) const =0 |
Finds the principal axes of curvature of this surface at a given point, and the curvatures along these axes. | |
| void | restore_data () |
Restores the data for this surface from a save file. | |
| virtual void | save () const =0 |
Calls the virtual save method for the particular type of this surface. | |
| void | save_data () const |
Saves the information for this surface to a save file. | |
| void | save_surface () const |
Saves this surface if the surface is of an unknown type or NULL. | |
| virtual logical | singular_u (double uparam) const |
Determines whether the parameterization of this surface is singular at the specified u-parameter value. | |
| virtual logical | singular_v (double vparam) const |
Determines whether the parameterization of this surface is singular at the specified v-parameter value. | |
| virtual int | split_at_kinks_u (spline **&pieces, double curvature=0.0) const |
Divides this surface along u into separate pieces that are smooth (and therefore suitable for offsetting or blending). | |
| virtual int | split_at_kinks_v (spline **&pieces, double curvature=0.0) const |
Divides this surface along v into separate pieces that are smooth (and therefore suitable for offsetting or blending). | |
| surface * | subset (const SPApar_box &box) const |
| Constructs a subset copy, within the given parameter box, of this surface. | |
| SPApar_box | subset_box () const |
Returns the subset box of this surface. | |
| surface * | subset_u (const SPAinterval &range) const |
| Constructs a subset copy, within the given u interval, of this surface. | |
| SPAinterval | subset_u_interval () const |
Returns a subset interval of this surface, in u. | |
| surface * | subset_v (const SPAinterval &range) const |
| Constructs a subset copy within the given v interval. | |
| SPAinterval | subset_v_interval () const |
Returns a subset interval of this surface, in v. | |
| logical | subsetted () const |
Determines whether this surface has a significant subset range. | |
| logical | subsetted_u () const |
Determines whether this surface has a significant subset range in the u direction. | |
| logical | subsetted_v () const |
Determines whether this surface has a significant subset range in the v direction. | |
| surface () | |
Constructs a surface (default constructor). | |
| logical | test_point (const SPAposition &pos, const SPApar_pos &uv_guess=*(SPApar_pos *) NULL_REF, SPApar_pos &uv_actual=*(SPApar_pos *) NULL_REF) const |
Determines whether a point lies on this surface to the system precision. | |
| virtual logical | test_point_tol (const SPAposition &pos, double tol=0, const SPApar_pos &uv_guess=*(SPApar_pos *) NULL_REF, SPApar_pos &uv_actual=*(SPApar_pos *) NULL_REF) const =0 |
Determines whether a point lies on this surface to the given tolerance. | |
| virtual int | type () const =0 |
Returns the type of this surface. | |
| virtual const char * | type_name () const =0 |
Returns the string "surface". | |
| virtual curve * | u_param_line (double vparam) const |
Constructs a parameter line on this surface. | |
| virtual logical | undef () const |
Determines whether this surface is defined or undefined. | |
| logical | undefined () const |
Determines whether this surface is defined or undefined. | |
| void | unlimit () |
Removes the subsetting from this surface. | |
| void | unlimit_u () |
Removes the subsetting from this surface, in the u direction. | |
| void | unlimit_v () |
Removes the subsetting from this surface, in the v direction. | |
| surface * | unsubset () const |
| Constructs a copy of the unbounded surface underlying this one. | |
| surface * | unsubset_u () const |
| Constructs a copy of the unbounded (in u) surface underlying this one. | |
| surface * | unsubset_v () const |
| Constructs a copy of the unbounded (in v) surface underlying this one. | |
| virtual curve * | v_param_line (double uparam) const |
| Constructs a parameter line on the surface. | |
| virtual | ~surface () |
C++ destructor, deleting a surface. | |
Protected Member Functions | |
| int | finite_difference_derivatives (const SPApar_pos ¶m, SPAposition &pos, SPAvector **derivs, int nd, int nfound, double du, double dv, evaluate_surface_quadrant quad) const |
Evaluate higher derivatives than are available accurately in evaluate by finite differencing. | |
Protected Attributes | |
| SPApar_box | subset_range |
Range to which this surface is subsetted. | |
Role: The surface class is the base class that all ACIS surface types (plane, cone, sphere, torus, and spline) are derived. The surface class defines the basic virtual functions that are supplied for all specific surface classes. Some of these functions are pure; i.e., the derived classes must define their own version; others have default definitions that can be used by the derived classes.
All ACIS surfaces have a parameterization scheme defined for them; however, the analytic surfaces (plane, cone, sphere, and torus) are not considered parametric surfaces. The only true parametric surface is the spline surface.
The parameterization of any ACIS surface maps a rectangle within a 2D vector space (u,v-parameter space) into a 3D real vector space (xyz object space). A surface is closed in u (or v) if the opposite sides of the rectangle map into identical curves in object space. If the derivatives also match at these boundaries, the surface is periodic in that parameter. If one side of this rectangle maps into a single point in object space, this point is a parametric singularity. If the surface normal is not continuous at this point, the point is a surface singularity.
The parameterization can be either right-handed (i.e., the surface normal is the cross product of u and v) or left-handed (i.e., the normal is the cross product of v and u).
| surface::surface | ( | ) |
Constructs a surface (default constructor).
Role: Requests memory for this object but does not populate it.
| virtual surface::~surface | ( | ) | [virtual] |
C++ destructor, deleting a surface.
| virtual int surface::accurate_derivs | ( | const SPApar_box & | box = *(SPApar_box *) NULL_REF |
) | const [virtual] |
Returns the number of derivatives of this surface that can be found accurately and relatively directly.
Role: Returns the number of derivatives that can be found by evaluate accurately and relatively directly, rather than by finite differencing over the given portion of the surface. If there is no limit to the number of accurate derivatives, returns the value ALL_SURFACE_DERIVATIVES.
| box | portion of the surface to be considered (optional). |
| virtual const double* surface::all_discontinuities_u | ( | int & | n_discont, | |
| int | order | |||
| ) | [virtual] |
| virtual const double* surface::all_discontinuities_v | ( | int & | n_discont, | |
| int | order | |||
| ) | [virtual] |
| virtual SPAbox surface::bound | ( | const SPAbox & | box, | |
| const SPAtransf & | transf = *(SPAtransf *) NULL_REF | |||
| ) | const [virtual] |
Returns an object-space box bounding this surface.
Role: This box need not be the smallest box that contains the specified portion of the surface, but it must balance the tightness of the bound against the cost of the evaluation.
| box | the region of interest. | |
| transf | optional transformation. |
| virtual SPAbox surface::bound | ( | const SPApar_box & | parbox = *(SPApar_box *) NULL_REF, |
|
| const SPAtransf & | transf = *(SPAtransf *) NULL_REF | |||
| ) | const [virtual] |
Returns an object-space box bounding this surface.
Role: This box need not be the smallest box that contains the specified portion of the surface, but it must balance the tightness of the bound against the cost of the evaluation.
| parbox | the region of interest. | |
| transf | optional transformation. |
| virtual void surface::change_event | ( | ) | [virtual] |
| virtual check_status_list* surface::check | ( | const check_fix & | input = *(const check_fix *) NULL_REF, |
|
| check_fix & | result = *(check_fix *) NULL_REF, |
|||
| const check_status_list * | chks = (const check_status_list *) NULL_REF | |||
| ) | [virtual] |
Checks for any data errors in this surface, and corrects the errors if possible.
Role: The various arguments provide control over which checks are made, which fixes can be applied and which fixes were actually applied. The function returns a list of errors that remain in the surface on exit.
The default for the set of flags which say which fixes are allowable is none (nothing is fixed). If the list of checks to be made is NULL, then every possible check will be made. Otherwise, the function will only check for things in the list. Note that it is possible for errors not in the input list to be returned, as certain problems preclude other checks being performed. In such situations, the return list will contain errors which were not requested, but which have prevented requested checks from being made.
| input | set of flags for fixes allowed. | |
| result | fixes applied. | |
| chks | checks to be made (default is none). |
Reimplemented in spline.
| virtual logical surface::closed_u | ( | ) | const [virtual] |
| virtual logical surface::closed_v | ( | ) | const [virtual] |
| surface* surface::copy_surf | ( | ) | const |
Makes a copy of this surface.
Role: This method calls make_copy.
| virtual void surface::debug | ( | const char * | title, | |
| FILE * | fp = debug_file_ptr | |||
| ) | const [pure virtual] |
| virtual surface* surface::deep_copy | ( | pointer_map * | pm = NULL |
) | const [pure virtual] |
Creates a copy of this object that does not share any data with the original.
Role: Allocates new storage for all member data and any pointers. Returns a pointer to the copied item.
In a deep copy, all the information about the copied item is self-contained in a new memory block. By comparison, a shallow copy stores only the first instance of the item in memory, and increments the reference count for each copy.
The pointer_map keeps a list of all pointers in the original object that have already been deep copied. For example, a deep copy of a complex model results in self contained data, but identical sub-parts within the model are allowed to share a single set of data.
| pm | list of items within the object that are already deep copied. |
| virtual const double* surface::discontinuities_u | ( | int & | n_discont, | |
| int | order | |||
| ) | const [virtual] |
| virtual const double* surface::discontinuities_v | ( | int & | n_discont, | |
| int | order | |||
| ) | const [virtual] |
| virtual int surface::discontinuous_at_u | ( | double | u | ) | const [virtual] |
| virtual int surface::discontinuous_at_v | ( | double | v | ) | const [virtual] |
| virtual void surface::eval | ( | const SPApar_pos & | param, | |
| SPAposition & | pos, | |||
| SPAvector * | first_derivs = NULL, |
|||
| SPAvector * | second_derivs = NULL | |||
| ) | const [virtual] |
Finds the position on a parametric surface corresponding to the given parameter values, and optionally the first and second derivatives as well.
| param | parameter position at which to perform the evaluation. | |
| pos | position on surface at the specified parameter position. | |
| first_derivs | first derivatives (array of length 2 in the order Xu, Xv). | |
| second_derivs | second derivatives (array of length 3 in the order Xuu, Xuv, Xvv). |
| virtual double surface::eval_cross | ( | const SPApar_pos & | pos, | |
| const SPAunit_vector & | normal | |||
| ) | const [virtual] |
| virtual SPAunit_vector surface::eval_normal | ( | const SPApar_pos & | pos | ) | const [virtual] |
| virtual SPAunit_vector surface::eval_outdir | ( | const SPApar_pos & | pos | ) | const [virtual] |
Finds the outward direction from this surface at the point with the given parameter position.
Role: This method usually returns the normal, but if the nearest point is a singularity (like the apex of a cone), it still returns an outward direction.
| pos | parameter position at which to evaluate the outward direction. |
| virtual SPAposition surface::eval_position | ( | const SPApar_pos & | pos | ) | const [virtual] |
| surf_princurv surface::eval_prin_curv | ( | const SPApar_pos & | pos | ) | const |
Finds the principal axes of curvature of this surface at the point with the given parameter position and the curvatures in those directions, in a structure defined for the purpose.
| pos | parameter position at which to evaluate the curvature. |
| virtual void surface::eval_prin_curv | ( | const SPApar_pos & | pos, | |
| SPAunit_vector & | axis1, | |||
| double & | cur1, | |||
| SPAunit_vector & | axis2, | |||
| double & | cur2 | |||
| ) | const [virtual] |
Finds the principal axes of curvature of this surface at the point with the given parameter position, and the curvatures in those directions.
| pos | parameter position at which to evaluate the curvatures and curvature axes. | |
| axis1 | first axis of curvature. | |
| cur1 | curvature along the first axis. | |
| axis2 | second axis of curvature. | |
| cur2 | curvature along the second axis. |
| virtual int surface::evaluate | ( | const SPApar_pos & | param, | |
| SPAposition & | pos, | |||
| SPAvector ** | derivs = NULL, |
|||
| int | nd = 0, |
|||
| evaluate_surface_quadrant | quad = evaluate_surface_unknown | |||
| ) | const [virtual] |
Calculates derivatives, of any order up to the number requested, and stores them in vectors provided by the user.
Role: This method returns the number of derivatives it was able to calculate; usually, this equals the requested number. A certain number are evaluated directly and accurately; higher derivatives are automatically calculated by finite differencing. The accuracy of these decreases with the order of the derivative, as the cost increases. Any of the pointers may be NULL, in which case the corresponding derivatives will not be returned. Otherwise they must point to arrays long enough for all the derivatives of that order.
| param | the parameter position at which the surface is to be evaluated. | |
| pos | point on the surface at the given parameter position. | |
| derivs | pointer arrays of derivatives. | |
| nd | the number of derivatives required. | |
| quad | the evaluation location - above, below, or "don't care" (for each parameter direction). |
| virtual int surface::evaluate_iter | ( | const SPApar_pos & | param, | |
| surface_evaldata * | data, | |||
| SPAposition & | pos, | |||
| SPAvector ** | derivs = NULL, |
|||
| int | nd = 0, |
|||
| evaluate_surface_quadrant | quad = evaluate_surface_unknown | |||
| ) | const [virtual] |
Calculates derivatives, of any order up to the number requested, in an iterative fashion.
Role: The purpose of this method is the same as that of evaluate, but evaluate_iter is additionally supplied with a data object which contains results from a previous close evaluation, for use as initial values for any iteration involved. This object may furthermore be updated to reflect the results of this evaluation.
| param | the parameter position at which the surface is to be evaluated. | |
| data | data supplying initial values, and set to reflect the results of this evaluation. | |
| pos | point on the curve at the given parameter. | |
| derivs | pointer arrays of derivatives. | |
| nd | the number of derivatives required. | |
| quad | the evaluation location - above, below, or "don't care" (for each parameter direction). |
Reimplemented in spline.
| int surface::finite_difference_derivatives | ( | const SPApar_pos & | param, | |
| SPAposition & | pos, | |||
| SPAvector ** | derivs, | |||
| int | nd, | |||
| int | nfound, | |||
| double | du, | |||
| double | dv, | |||
| evaluate_surface_quadrant | quad | |||
| ) | const [protected] |
Evaluate higher derivatives than are available accurately in evaluate by finite differencing.
Role: This method is available to any derived class for use in its own evaluate method. It calls back the evaluate function for adjacent points to evaluate a number of derivatives, so evaluate must ensure that this does not cause a further call to this method. See evaluate for details regarding the parameters.
| param | the parameter position at which the surface is to be evaluated. | |
| pos | point on the surface at the given parameter. | |
| derivs | pointer arrays of derivatives. | |
| nd | the number of derivatives required. | |
| nfound | the number of derivatives already evaluated, and directly evaluable in the neighborhood of the param. | |
| du | the finite differencing step to use in the u-direction. | |
| dv | the finite differencing step to use in the v-direction. | |
| quad | the evaluation location - above, below, or "don't care" (for each parameter direction). |
| virtual const discontinuity_info& surface::get_disc_info_u | ( | ) | const [virtual] |
Returns read-only access to a discontinuity_info object, if there is one, detailing discontinuities in u.
Role: The default version of this method returns NULL.
Reimplemented in spline.
| virtual const discontinuity_info& surface::get_disc_info_v | ( | ) | const [virtual] |
Returns read-only access to a discontinuity_info object, if there is one, detailing discontinuities in v.
Role: The default version of this method returns NULL.
Reimplemented in spline.
| virtual curve* surface::get_path | ( | ) | const [inline, virtual] |
| virtual sweep_path_type surface::get_path_type | ( | ) | const [inline, virtual] |
| virtual curve* surface::get_profile | ( | double | param | ) | const [inline, virtual] |
| virtual law* surface::get_rail | ( | ) | const [inline, virtual] |
| virtual logical surface::left_handed_uv | ( | ) | const [virtual] |
Indicates whether the parameter coordinate system of this surface is right-handed or left-handed.
Role: With a right-handed system, the outward normal at any point is given by the cross product of the increasing u-direction with the increasing v-direction, in that order. With a left-handed system, the outward normal is in the opposite direction from this cross product.
| void surface::limit | ( | const SPApar_box & | box | ) |
Subsets this surface in place, according to the given parameter box.
| box | parameter box defining the subset. |
| void surface::limit_u | ( | const SPAinterval & | range | ) |
Subsets this surface in place, according to the given interval in u.
| range | interval defining the subset. |
| void surface::limit_v | ( | const SPAinterval & | range | ) |
Subsets this surface in place, according to the given interval in v.
| range | interval defining the subset. |
| virtual surface* surface::make_copy | ( | ) | const [pure virtual] |
| virtual surface_evaldata* surface::make_evaldata | ( | ) | const [virtual] |
| virtual logical surface::need_save_as_approx | ( | int | save_to_version, | |
| logical | check_progenitors | |||
| ) | const [virtual] |
Queries whether the object needs to be saved to an old version as an approximation.
Role: Called by SAT save APIs with check_progenitors==TRUE to determine if an object needs to be tolerantly simplified before being saved to an old version. The check_progenitors flag indicates that the object should call need_save_as_approx() on any curve or surface construction geometry upon which it depends, and return TRUE if any of the progenitors do. Customers with their own derived curve or surface types should override this routine to return true whenever they want their geometry to be imported (as a B-spline approximation) into other applications or when saving to a version of their application before the derived geometry type in question existed.
| save_to_version | version to which the object will be saved | |
| check_progenitors | if TRUE, query construction geometry and base class as well |
Reimplemented in spline.
| virtual surface& surface::negate | ( | ) | [pure virtual] |
| virtual surf_normcone surface::normal_cone | ( | const SPApar_box & | parbox, | |
| logical | approx_OK = FALSE, |
|||
| const SPAtransf & | transf = *(SPAtransf *) NULL_REF | |||
| ) | const [virtual] |
Returns a cone bounding the normal direction of this surface.
Role: The cone is deemed to have its apex at the origin and have a given axis direction and (positive) half-angle. If the logical argument is TRUE, then this method finds a quick approximation. The approximate result may lie wholly within or wholly outside the guaranteed bound (obtained with a FALSE argument), but may not cross from inside to outside. Flags in the turned object indicate whether the cone is the best available and, if not, whether this result is inside or outside the best cone.
| parbox | the given region. | |
| approx_OK | approximate result is ok. | |
| transf | transformation to apply. |
| logical surface::operator!= | ( | const surface & | surf | ) | const [inline] |
| virtual logical surface::operator== | ( | const surface & | surf | ) | const [virtual] |
| virtual SPApar_pos surface::param | ( | const SPAposition & | pos, | |
| const SPApar_pos & | guess = *(SPApar_pos *) NULL_REF | |||
| ) | const [virtual] |
| SPApar_dir surface::param_dir | ( | const SPAunit_vector & | dir, | |
| const SPApar_pos & | pos | |||
| ) | const |
Finds the direction in parameter space of a given object-space direction on this surface, at a given parameter position.
| dir | object-space direction for which the parameter-space direction is to be determined. | |
| pos | parameter position at which the direction is to be determined. |
| virtual double surface::param_period_u | ( | ) | const [virtual] |
| virtual double surface::param_period_v | ( | ) | const [virtual] |
| virtual SPApar_box surface::param_range | ( | const SPAbox & | box = *(SPAbox *) NULL_REF |
) | const [virtual] |
Returns the principal parameter range of this surface.
Role: A periodic surface is defined for all parameter values in the periodic direction by reducing the given parameter modulo the period into this principal range. For a surface that is open or nonperiodic in the chosen direction, the surface evaluation functions are defined only for the parameter values in the returned range.
If a box is provided, the parameter range returned may be restricted to a portion of the surface that is guaranteed to contain all portions of the surface that lie within the region of interest. If none is provided and the parameter range in some direction is unbounded, then this method returns an empty interval.
| box | box restricting the result. |
| virtual SPAinterval surface::param_range_u | ( | const SPAbox & | box = *(SPAbox *) NULL_REF |
) | const [virtual] |
Returns the principal parameter range of a surface in the u-parameter direction.
Role: A periodic surface is defined for all parameter values in the periodic direction by reducing the given parameter modulo the period into this principal range. For a surface that is open or nonperiodic in the chosen direction, the surface evaluation functions are defined only for the parameter values in the returned range.
If a box is provided, the parameter range returned may be restricted to a portion of the surface that is guaranteed to contain all portions of the surface that lie within the region of interest. If none is provided and the parameter range in some direction is unbounded, then this method returns an empty interval.
| box | box restricting the result. |
| virtual SPAinterval surface::param_range_v | ( | const SPAbox & | box = *(SPAbox *) NULL_REF |
) | const [virtual] |
Returns the principal parameter range of a surface in the v-parameter direction.
Role: A periodic surface is defined for all parameter values in the periodic direction by reducing the given parameter modulo the period into this principal range. For a surface that is open or nonperiodic in the chosen direction, the surface evaluation functions are defined only for the parameter values in the returned range.
If a box is provided, the parameter range returned may be restricted to a portion of the surface that is guaranteed to contain all portions of the surface that lie within the region of interest. If none is provided and the parameter range in some direction is unbounded, then this method returns an empty interval.
| box | box restricting the result. |
| virtual SPApar_vec surface::param_unitvec | ( | const SPAunit_vector & | dir, | |
| const SPApar_pos & | pos | |||
| ) | const [virtual] |
Finds the rate of change in the surface parameter corresponding to a unit velocity in a given object-space direction, at a given position in parameter space.
| dir | object-space direction for which the result is determined. | |
| pos | parameter position at which the result is determined. |
| virtual logical surface::parametric | ( | ) | const [virtual] |
Returns TRUE if this surface is a parametric surface - otherwise returns FALSE.
Role: This result reflects the fundamental nature of the surface and is used by the ACIS kernel to avoid using parameters when they are not necessary. For a surface, the ACIS kernel does not use any of the parameter-based functions, though they are implemented for the sake of those components and applications that prefer parameter-based representations of every surface.
Whether to declare a surface parametric or not depends on the implementation of the point-based evaluations. If the availability of a good approximation to the point's parameter values makes no significant improvement to the speed of these functions, then the surface is nonparametric; otherwise, it is parametric. A plane is an obvious nonparametric surface; a B-spline is a parametric surface.
| virtual logical surface::periodic_u | ( | ) | const [virtual] |
| virtual logical surface::periodic_v | ( | ) | const [virtual] |
| virtual logical surface::planar | ( | SPAposition & | pos, | |
| SPAunit_vector & | normal | |||
| ) | const [virtual] |
| virtual double surface::point_cross | ( | const SPAposition & | pos, | |
| const SPAunit_vector & | normal, | |||
| const SPApar_pos & | param_guess = *(SPApar_pos *) NULL_REF | |||
| ) | const [virtual] |
| virtual SPAunit_vector surface::point_normal | ( | const SPAposition & | pos, | |
| const SPApar_pos & | param_guess = *(SPApar_pos *) NULL_REF | |||
| ) | const [pure virtual] |
| virtual SPAunit_vector surface::point_outdir | ( | const SPAposition & | pos, | |
| const SPApar_pos & | guess = *(SPApar_pos *) NULL_REF | |||
| ) | const [virtual] |
Finds the outward direction from this surface at a point nearest the given position.
Role: This method usually returns the normal, but if the nearest point is a singularity (like the apex of a cone), this method still returns an outward direction. The base class definition returns point_normal, which is used by default on simple surfaces.
| pos | given position. | |
| guess | parameter guess. |
| void surface::point_perp | ( | const SPAposition & | pos, | |
| SPAposition & | foot, | |||
| const SPApar_pos & | param_guess = *(SPApar_pos*)NULL_REF, |
|||
| SPApar_pos & | param_actual = *(SPApar_pos*)NULL_REF, |
|||
| logical | f_weak = FALSE | |||
| ) | const [inline] |
Finds the point on this surface nearest to the given point.
Role: If the surface is parametric, this method also returns the parameter values at the found point.
| pos | the input position. | |
| foot | the position on the surface. | |
| param_guess | parameter guess. | |
| param_actual | actual parameter position. | |
| f_weak | weak flag - for internal use. |
| void surface::point_perp | ( | const SPAposition & | pos, | |
| SPAposition & | foot, | |||
| SPAunit_vector & | normal, | |||
| const SPApar_pos & | param_guess = *(SPApar_pos*)NULL_REF, |
|||
| SPApar_pos & | param_actual = *(SPApar_pos*)NULL_REF, |
|||
| logical | f_weak = FALSE | |||
| ) | const [inline] |
Finds the point on this surface nearest to the given point and, optionally, the normal to the surface at that point.
Role: If the surface is parametric, this method also returns the parameter values at the found point.
| pos | the input position. | |
| foot | the position on the surface. | |
| normal | the returned normal. | |
| param_guess | parameter guess. | |
| param_actual | actual parameter position. | |
| f_weak | weak flag - for internal use. |
| virtual void surface::point_perp | ( | const SPAposition & | pos, | |
| SPAposition & | foot, | |||
| SPAunit_vector & | normal, | |||
| surf_princurv & | cur, | |||
| const SPApar_pos & | param_guess = *(SPApar_pos *) NULL_REF, |
|||
| SPApar_pos & | param_actual = *(SPApar_pos *) NULL_REF, |
|||
| logical | f_weak = FALSE | |||
| ) | const [pure virtual] |
Finds the point on this surface nearest to the given point and, optionally, the normal to and the principal curvatures of the surface at that point.
Role: If the surface is parametric, this method also returns the parameter values at the found point.
| pos | the input position. | |
| foot | the position on the surface. | |
| normal | the returned normal. | |
| cur | the principal curvature. | |
| param_guess | parameter guess. | |
| param_actual | actual parameter position. | |
| f_weak | weak flag - for internal use. |
| surf_princurv surface::point_prin_curv | ( | const SPAposition & | pos, | |
| const SPApar_pos & | guess = *(SPApar_pos *) NULL_REF | |||
| ) | const |
| virtual void surface::point_prin_curv | ( | const SPAposition & | pos, | |
| SPAunit_vector & | axis1, | |||
| double & | cur1, | |||
| SPAunit_vector & | axis2, | |||
| double & | cur2, | |||
| const SPApar_pos & | param_guess = *(SPApar_pos *) NULL_REF | |||
| ) | const [pure virtual] |
Finds the principal axes of curvature of this surface at a given point, and the curvatures along these axes.
| pos | position at which to evaluate the curvatures and curvature axes. | |
| axis1 | first axis of curvature. | |
| cur1 | curvature along the first axis. | |
| axis2 | second axis of curvature. | |
| cur2 | curvature along the second axis. | |
| param_guess | parameter guess. |
| void surface::restore_data | ( | ) |
| virtual void surface::save | ( | ) | const [pure virtual] |
| void surface::save_data | ( | ) | const |
| void surface::save_surface | ( | ) | const |
| virtual logical surface::singular_u | ( | double | uparam | ) | const [virtual] |
Determines whether the parameterization of this surface is singular at the specified u-parameter value.
Role: The only singularity recognized is where every value of the nonconstant parameter generates the same object-space point, and these can only occur at the ends of the parameter range.
| uparam | u-parameter value to test. |
| virtual logical surface::singular_v | ( | double | vparam | ) | const [virtual] |
Determines whether the parameterization of this surface is singular at the specified v-parameter value.
Role: The only singularity recognized is where every value of the nonconstant parameter generates the same object-space point, and these can only occur at the ends of the parameter range.
| vparam | v-parameter value to test. |
| virtual int surface::split_at_kinks_u | ( | spline **& | pieces, | |
| double | curvature = 0.0 | |||
| ) | const [virtual] |
Divides this surface along u into separate pieces that are smooth (and therefore suitable for offsetting or blending).
Role: The surface is split if the curvature exceeds the minimum curvature argument. If it is closed after this, it is then split into two. The split pieces are stored in the pieces argument. The function returns the count of split pieces. Only implemented for splines and elliptical cones.
| pieces | the returned split pieces. | |
| curvature | the minimum curvature. |
Reimplemented in spline.
| virtual int surface::split_at_kinks_v | ( | spline **& | pieces, | |
| double | curvature = 0.0 | |||
| ) | const [virtual] |
Divides this surface along v into separate pieces that are smooth (and therefore suitable for offsetting or blending).
Role: The surface is split if the curvature exceeds the minimum curvature argument. If it is closed after this, it is then split into two. The split pieces are stored in the pieces argument. The function returns the count of split pieces. Only implemented for splines and elliptical cones.
| pieces | the returned split pieces. | |
| curvature | the minimum curvature. |
| surface* surface::subset | ( | const SPApar_box & | box | ) | const |
| SPApar_box surface::subset_box | ( | ) | const |
Returns the subset box of this surface.
| surface* surface::subset_u | ( | const SPAinterval & | range | ) | const |
Constructs a subset copy, within the given u interval, of this surface.
| range | u interval. |
| SPAinterval surface::subset_u_interval | ( | ) | const |
Returns a subset interval of this surface, in u.
| surface* surface::subset_v | ( | const SPAinterval & | range | ) | const |
Constructs a subset copy within the given v interval.
| range | v interval |
| SPAinterval surface::subset_v_interval | ( | ) | const |
Returns a subset interval of this surface, in v.
| logical surface::subsetted | ( | ) | const |
Determines whether this surface has a significant subset range.
| logical surface::subsetted_u | ( | ) | const |
Determines whether this surface has a significant subset range in the u direction.
| logical surface::subsetted_v | ( | ) | const |
Determines whether this surface has a significant subset range in the v direction.
| logical surface::test_point | ( | const SPAposition & | pos, | |
| const SPApar_pos & | uv_guess = *(SPApar_pos*)NULL_REF, |
|||
| SPApar_pos & | uv_actual = *(SPApar_pos*)NULL_REF | |||
| ) | const [inline] |
Determines whether a point lies on this surface to the system precision.
| pos | position to test. | |
| uv_guess | parameter guess. | |
| uv_actual | actual parameter. |
| virtual logical surface::test_point_tol | ( | const SPAposition & | pos, | |
| double | tol = 0, |
|||
| const SPApar_pos & | uv_guess = *(SPApar_pos *) NULL_REF, |
|||
| SPApar_pos & | uv_actual = *(SPApar_pos *) NULL_REF | |||
| ) | const [pure virtual] |
| virtual int surface::type | ( | ) | const [pure virtual] |
| virtual const char* surface::type_name | ( | ) | const [pure virtual] |
| virtual curve* surface::u_param_line | ( | double | vparam | ) | const [virtual] |
Constructs a parameter line on this surface.
Role: A u-parameter line runs in the direction of increasing u parameter, at constant v. The parameterization in the nonconstant direction matches that of the surface, and it has the range obtained by the use of param_range_u. If the supplied constant parameter value is outside the valid range for the surface, or if it is at a singularity, this method returns NULL.
The new curve is constructed in free storage, so it is the responsibility of the caller to ensure that it is correctly deleted.
| vparam | v parameter defining the parameter line. |
| virtual logical surface::undef | ( | ) | const [virtual] |
| logical surface::undefined | ( | ) | const [inline] |
| void surface::unlimit | ( | ) |
Removes the subsetting from this surface.
| void surface::unlimit_u | ( | ) |
Removes the subsetting from this surface, in the u direction.
| void surface::unlimit_v | ( | ) |
Removes the subsetting from this surface, in the v direction.
| surface* surface::unsubset | ( | ) | const |
Constructs a copy of the unbounded surface underlying this one.
| surface* surface::unsubset_u | ( | ) | const |
Constructs a copy of the unbounded (in u) surface underlying this one.
| surface* surface::unsubset_v | ( | ) | const |
Constructs a copy of the unbounded (in v) surface underlying this one.
| virtual curve* surface::v_param_line | ( | double | uparam | ) | const [virtual] |
Constructs a parameter line on the surface.
Role: A v-parameter line runs in the direction of increasing v parameter, at constant u. The parameterization int he nonconstant direction matches that of the surface, and it has the range obtained by the use of param_range_v. If the supplied constant parameter value is outside the valid range for the surface, or if it is at a singularity, this method returns NULL.
The new curve is constructed in free storage, so it is the responsibility of the caller to ensure that it is correctly deleted.
| uparam | u parameter defining the parameter line. |
SPApar_box surface::subset_range [protected] |
Range to which this surface is subsetted.