Home

surface Class Reference
[surfaces]

Base class for all ACIS surface types, which defines the basic virtual functions that are supplied for all specific surface classes. More...

#include <surdef.hxx>

Inheritance diagram for surface:

Inheritance graph
[legend]
Collaboration diagram for surface:

Collaboration graph
[legend]

List of all members.

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_listcheck (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.
surfacecopy_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 surfacedeep_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 &param, 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 &param, 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 &param, 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_infoget_disc_info_u () const
 Returns read-only access to a discontinuity_info object, if there is one, detailing discontinuities in u.
virtual const discontinuity_infoget_disc_info_v () const
 Returns read-only access to a discontinuity_info object, if there is one, detailing discontinuities in v.
virtual curveget_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 curveget_profile (double param) const
 Returns the sweep profile on this surface.
virtual lawget_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 surfacemake_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 surfacenegate ()=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 surfaceoperator*= (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 &param_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 &param_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 &param_guess=*(SPApar_pos *) NULL_REF, SPApar_pos &param_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 &param_guess=*(SPApar_pos *) NULL_REF, SPApar_pos &param_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 &param_guess=*(SPApar_pos *) NULL_REF, SPApar_pos &param_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 &param_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).
surfacesubset (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.
surfacesubset_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.
surfacesubset_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 curveu_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.
surfaceunsubset () const
 Constructs a copy of the unbounded surface underlying this one.
surfaceunsubset_u () const
 Constructs a copy of the unbounded (in u) surface underlying this one.
surfaceunsubset_v () const
 Constructs a copy of the unbounded (in v) surface underlying this one.
virtual curvev_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 &param, 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.


Detailed Description

Base class for all ACIS surface types, which defines the basic virtual functions that are supplied for all specific surface classes.


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).

See also:
blend_support, int_cur, off_spl_sur, skin_spl_sur, surf_surf_int, surface_law_data, SPApar_box

Constructor & Destructor Documentation

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.


Member Function Documentation

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.

Parameters:
box portion of the surface to be considered (optional).

Reimplemented in cone, plane, sphere, spline, and torus.

virtual const double* surface::all_discontinuities_u ( int &  n_discont,
int  order 
) [virtual]

Returns the number and parameter values of all discontinuities in u of this surface, up to the given order (maximum three).



Role: The returned array is read-only.

Parameters:
n_discont number of discontinuities found.
order maximum order of the discontinuities.

Reimplemented in spline.

virtual const double* surface::all_discontinuities_v ( int &  n_discont,
int  order 
) [virtual]

Returns the number and parameter values of all discontinuities in v of this surface, up to the given order (maximum three).



Role: The returned array is read-only.

Parameters:
n_discont number of discontinuities found.
order maximum order of the discontinuities.

Reimplemented in spline.

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.

Parameters:
box the region of interest.
transf optional transformation.

Reimplemented in cone, plane, sphere, spline, and torus.

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.

Parameters:
parbox the region of interest.
transf optional transformation.

Reimplemented in cone, plane, sphere, spline, and torus.

virtual void surface::change_event (  )  [virtual]

Notifies the derived type that this surface has been changed.



Role: Used when the subset_range has changed, so that the surface can update itself. The default version of this method does nothing.

Reimplemented in spline.

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.

Parameters:
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]

Determines whether this surface is closed, smoothly or not, in the u-parameter direction.



Role: Always returns TRUE if the corresponding periodic method returns TRUE.

Reimplemented in cone, plane, sphere, spline, and torus.

virtual logical surface::closed_v (  )  const [virtual]

Determines whether this surface is closed, smoothly or not, in the v-parameter direction.



Role: Always returns TRUE if the corresponding periodic method returns TRUE.

Reimplemented in cone, plane, sphere, spline, and torus.

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]

Prints out a title line and details about this surface to the debug file or any other specified file.



Parameters:
title title string.
fp FILE pointer.

Implemented in cone, plane, sphere, spline, and torus.

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.

Parameters:
pm list of items within the object that are already deep copied.

Implemented in cone, plane, sphere, spline, and torus.

virtual const double* surface::discontinuities_u ( int &  n_discont,
int  order 
) const [virtual]

Returns the number and parameter values of discontinuities in u of this surface, of the given order (maximum three), in a read-only array.



Parameters:
n_discont number of discontinuities found.
order order of the discontinuities.

Reimplemented in spline.

virtual const double* surface::discontinuities_v ( int &  n_discont,
int  order 
) const [virtual]

Returns the number and parameter values of discontinuities in v of this surface, of the given order (maximum three), in a read-only array.



Parameters:
n_discont number of discontinuities found.
order order of the discontinuities.

Reimplemented in spline.

virtual int surface::discontinuous_at_u ( double  u  )  const [virtual]

Determines whether a particular value of u represents a discontinuity of this surface.



Parameters:
u parameter value to test.

Reimplemented in spline.

virtual int surface::discontinuous_at_v ( double  v  )  const [virtual]

Determines whether a particular value of v represents a discontinuity of this surface.



Parameters:
v parameter value to test.

Reimplemented in spline.

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.



Parameters:
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).

Reimplemented in cone, plane, sphere, spline, and torus.

virtual double surface::eval_cross ( const SPApar_pos pos,
const SPAunit_vector normal 
) const [virtual]

Finds the curvature of a cross-sectional curve of the parametric surface at the point with the given parameter position.



Role: The cross-sectional curve is given by the intersection of the surface with a plane passing through the given point and with the given normal.

Parameters:
pos position on the interecting plane.
normal normal to the interecting plane.

Reimplemented in plane, sphere, and spline.

virtual SPAunit_vector surface::eval_normal ( const SPApar_pos pos  )  const [virtual]

Finds the normal to a parametric surface at the point with the given parameter position.



Parameters:
pos parameter position at which to evaluate the surface normal.

Reimplemented in plane, sphere, spline, and torus.

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.

Parameters:
pos parameter position at which to evaluate the outward direction.

Reimplemented in cone, and spline.

virtual SPAposition surface::eval_position ( const SPApar_pos pos  )  const [virtual]

Finds the point on a parametric surface with the given parameter position.



Parameters:
pos parameter position at which to evaluate the surface position.

Reimplemented in spline.

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.



Parameters:
pos parameter position at which to evaluate the curvature.

Reimplemented in cone, plane, sphere, spline, and torus.

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.



Parameters:
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.

Reimplemented in cone, plane, sphere, spline, and torus.

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.

Parameters:
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).

Reimplemented in cone, plane, sphere, spline, and torus.

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.

Parameters:
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.

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]

Returns the sweep path curve for this surface.

Reimplemented in cone, plane, spline, and torus.

virtual sweep_path_type surface::get_path_type (  )  const [inline, virtual]

Returns the sweep path type for this surface.

Reimplemented in cone, plane, spline, and torus.

virtual curve* surface::get_profile ( double  param  )  const [inline, virtual]

Returns the sweep profile on this surface.



Parameters:
param parameter at which to get the profile.

Reimplemented in cone, spline, and torus.

virtual law* surface::get_rail (  )  const [inline, virtual]

Returns the rail law for this swept surface.

Reimplemented in cone, plane, spline, and torus.

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.

Reimplemented in cone, plane, sphere, spline, and torus.

void surface::limit ( const SPApar_box box  ) 

Subsets this surface in place, according to the given parameter box.



Parameters:
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.



Parameters:
range interval defining the subset.

void surface::limit_v ( const SPAinterval range  ) 

Subsets this surface in place, according to the given interval in v.



Parameters:
range interval defining the subset.

virtual surface* surface::make_copy (  )  const [pure virtual]

Makes a copy of this surface on the heap, and returns a pointer to it.

Implemented in cone, plane, sphere, spline, and torus.

virtual surface_evaldata* surface::make_evaldata (  )  const [virtual]

Constructs a data object to retain evaluation information across calls to evaluate_iter.



Role: This is to allow subsidiary calls within an iterative evaluator to start iteration much closer to the required result than is possible just using the curve information itself.

Reimplemented in spline.

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.

Parameters:
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]

Reverses the sense of this surface.

Implemented in cone, plane, sphere, spline, and torus.

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.

Parameters:
parbox the given region.
approx_OK approximate result is ok.
transf transformation to apply.

Reimplemented in cone, plane, sphere, spline, and torus.

logical surface::operator!= ( const surface surf  )  const [inline]

Tests this surface for inequality to another surface.



Role: This method does not guarantee equality for effectively-equal surfaces, but it is guaranteed to determine inequality if the two surfaces are not equal. Use this result for optimization.

Parameters:
surf surface to compare for inequality.

virtual surface& surface::operator*= ( const SPAtransf transf  )  [pure virtual]

Transforms this surface by the given transformation.



Parameters:
transf transformation to apply.

Implemented in cone, plane, sphere, spline, and torus.

virtual logical surface::operator== ( const surface surf  )  const [virtual]

Tests this surface for equality to another surface.



Role: This method does not guarantee equality for effectively-equal surfaces, but it is guaranteed to determine inequality if the two surfaces are not equal. Use this result for optimization.

Parameters:
surf surface to compare for equality.

Reimplemented in cone, plane, sphere, spline, and torus.

virtual SPApar_pos surface::param ( const SPAposition pos,
const SPApar_pos guess = *(SPApar_pos *) NULL_REF 
) const [virtual]

Finds the parameter position of a given point on this surface, given an optional first guess.



Parameters:
pos the position for which the parameter position is to be found.
param_guess parameter guess.

Reimplemented in cone, plane, sphere, spline, and torus.

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.



Parameters:
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]

Returns the period, in u, of a periodic parametric surface.



Role: If the surface is not parametric, or is not periodic in the u-direction, this method returns 0.

Reimplemented in cone, plane, sphere, spline, and torus.

virtual double surface::param_period_v (  )  const [virtual]

Returns the period, in v, of a periodic parametric surface.



Role: If the surface is not parametric or is not periodic in the v-direction, this method returns 0.

Reimplemented in cone, plane, sphere, spline, and torus.

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.

Parameters:
box box restricting the result.

Reimplemented in cone, plane, sphere, spline, and torus.

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.

Parameters:
box box restricting the result.

Reimplemented in cone, plane, sphere, spline, and torus.

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.

Parameters:
box box restricting the result.

Reimplemented in cone, plane, sphere, spline, and torus.

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.



Parameters:
dir object-space direction for which the result is determined.
pos parameter position at which the result is determined.

Reimplemented in cone, plane, sphere, spline, and torus.

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.

Reimplemented in cone, plane, sphere, spline, and torus.

virtual logical surface::periodic_u (  )  const [virtual]

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).

Reimplemented in cone, plane, sphere, spline, and torus.

virtual logical surface::periodic_v (  )  const [virtual]

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).

Reimplemented in cone, plane, sphere, spline, and torus.

virtual logical surface::planar ( SPAposition pos,
SPAunit_vector normal 
) const [virtual]

Reports whether this surface is planar.



Parameters:
pos point on the surface.
normal the planar normal.

Reimplemented in plane, and spline.

virtual double surface::point_cross ( const SPAposition pos,
const SPAunit_vector normal,
const SPApar_pos param_guess = *(SPApar_pos *) NULL_REF 
) const [virtual]

Finds the curvature of a cross-sectional curve of this surface at the given point.



Role: The cross-sectional curve is given by the intersection of the surface with a plane passing through the given point and with the given normal.

Parameters:
pos position on the plane.
normal normal to the plane.
param_guess parameter guess.

Reimplemented in plane, sphere, and spline.

virtual SPAunit_vector surface::point_normal ( const SPAposition pos,
const SPApar_pos param_guess = *(SPApar_pos *) NULL_REF 
) const [pure virtual]

Finds the normal to this surface at a point on the surface nearest to the given position.



Parameters:
pos the given position.
param_guess parameter guess.

Implemented in cone, plane, sphere, spline, and torus.

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.

Parameters:
pos given position.
guess parameter guess.

Reimplemented in cone, spline, and torus.

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.

Parameters:
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.

Reimplemented in cone, plane, sphere, spline, and torus.

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.

Parameters:
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.

Reimplemented in cone, plane, sphere, spline, and torus.

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.

Parameters:
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.

Implemented in cone, plane, sphere, spline, and torus.

surf_princurv surface::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.



Parameters:
pos position at which to evaluate the curvature.
guess parameter guess

Reimplemented in cone, plane, sphere, spline, and torus.

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.



Parameters:
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.

Implemented in cone, plane, sphere, spline, and torus.

void surface::restore_data (  ) 

Restores the data for this surface from a save file.



Role:

    if (restore_version_number >= BNDSUR_VERSION)
 	     read_interval		subset u interval
 	     read_interval		subset v interval 

Reimplemented in cone, plane, sphere, spline, and torus.

virtual void surface::save (  )  const [pure virtual]

Calls the virtual save method for the particular type of this surface.

Implemented in cone, plane, sphere, spline, and torus.

void surface::save_data (  )  const

Saves the information for this surface to a save file.

Reimplemented in cone, plane, sphere, spline, and torus.

void surface::save_surface (  )  const

Saves this surface if the surface is of an unknown type or NULL.



Role: Checks for NULL, then calls the save method.

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.

Parameters:
uparam u-parameter value to test.

Reimplemented in cone, plane, sphere, spline, and torus.

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.

Parameters:
vparam v-parameter value to test.

Reimplemented in cone, plane, sphere, spline, and torus.

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.

Parameters:
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.

Parameters:
pieces the returned split pieces.
curvature the minimum curvature.

Reimplemented in cone, and spline.

surface* surface::subset ( const SPApar_box box  )  const

Constructs a subset copy, within the given parameter box, of this surface.



Parameters:
box parameter box.

Reimplemented in spline.

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.



Parameters:
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.



Parameters:
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.



Parameters:
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]

Determines whether a point lies on this surface to the given tolerance.



Parameters:
pos position to test.
tol tolerance to use (defaults to SPAresabs).
uv_guess parameter guess.
uv_actual actual parameter.

Implemented in cone, plane, sphere, spline, and torus.

virtual int surface::type (  )  const [pure virtual]

Returns the type of this surface.

Implemented in cone, plane, sphere, spline, and torus.

virtual const char* surface::type_name (  )  const [pure virtual]

Returns the string "surface".

Implemented in cone, plane, sphere, spline, and torus.

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.

Parameters:
vparam v parameter defining the parameter line.

Reimplemented in cone, plane, sphere, spline, and torus.

virtual logical surface::undef (  )  const [virtual]

Determines whether this surface is defined or undefined.



Role: A NULL or generic surface is always undefined; for other surfaces, it depend on their contents.

Reimplemented in cone, plane, sphere, spline, and torus.

logical surface::undefined (  )  const [inline]

Determines whether this surface is defined or undefined.



Role: A NULL or generic surface is always undefined; for other surfaces, it depends on their contents.

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.

Parameters:
uparam u parameter defining the parameter line.

Reimplemented in cone, plane, sphere, spline, and torus.


Member Data Documentation

Range to which this surface is subsetted.