api_make_VBL_output_surfaces
List of: Functions
Subjects: Blending
Contents: Kernel

Action: Splits the approximating surface for a VBL_SURF into n four-sided bs3_surface patches.

Prototype: outcome api_make_VBL_output_surfaces (


const surface* vbl_sf, // surface with




// underlying VBL_SURF


double& interior_fit, // achieved interior fit




// tolerance


double& boundary_fit, // achieved boundary fit




// tolerance


bs3_surface*& bs3_array, // array of returned




// bs3_surfaces


int& n, // number of returned




// bs3_surfaces


logical approx_error // if TRUE, approximate



= TRUE // the error


);

Includes: #include "kernel/acis.hxx"

#include "kernel/kernapi/api/api.hxx"

#include "kernel/kernapi/api/kernapi.hxx"

#include "kernel/kerngeom/surface/surdef.hxx"

#include "kernel/spline/bs3_srf/bs3surf.hxx"

#include "baseutil/logical.h"

Description: This API approximates an n-sided VBL_SURF by n four-sided bs3_surfaces, which enables ACIS to output vertex blend surfaces in a form that can be read and used by most other packages.


In ACIS, the VBL_SURF is approximated by a bs3_surface whose parameterization is defined over an n-sided regular polygon. This API makes up n four-sided patches that are separated from one another in the original approximating surface parameter space by straight lines radiating from the center of the n-sided polygon to the midpoint of each of the sides. The new approximating surfaces are parameterized over the unit square. Adjacent bs3_surface patches are made up to have the same number of knot points along common boundaries, and so the surfaces are C0 continuous across the boundaries. However, the parameter lines do not run smoothly across the boundaries, and so the approximation is not C1 or G1 continuous across the patch boundaries.


The API function receives a pointer to a surface, which has an underlying VBL_SURF. The caller should also supply two doubles, which specify the requested fit tolerances of the approximating surfaces, both on the interior of the VBL_SURF, and on its boundary. These will return the fit tolerances that the approximating surfaces have achieved, which may be larger than the requested fit tolerances, if these are particularly small, or if the surface is particularly complex. One might, for example, request an internal fit tolerance of .001 and a boundary fit tolerance that is 10 times smaller than this. Note that the interior fit tolerance (but NOT the boundary one) may be passed as exactly -1.0 to mean "do not measure the interior fit", in which case no particular interior fit is guaranteed, except that which comes about naturally by having fit the boundary correctly, and no meaningful value is returned for the achieved interior fit. The function can operate more quickly if no specific interior fit is requested. The internal joins between the patch boundaries are unaffected by this.


The caller must also supply the function with a pointer to a bs3_surface and a reference to an integer. These will be used to return an array of the approximating bs3_surfaces and the length of this array, respectively. Additionally, an approx_error flag can be supplied which specifies whether the errors returned need to be precise or merely a (close) upper bound. If passed TRUE, the error is bounded approximately but quite closely, and the function will be able to work more quickly.


If the supplied surface is of type spline and the underlying spl_sur is a VBL_SURF, this API function makes up n four-sided approximating bs3_surfaces. A pointer to an array of these bs3_surfaces is then returned, along with the number of bs3_surfaces in the array, and the maximum internal and boundary fit tolerances of the bs3_surfaces. If the supplied surface is not a spline, or if it is a spline and the underlying spl_sur is not a VBL_SURF, this API function returns a NULLbs3_surface pointer and sets the number of approximating bs3_surfaces to zero.

Errors: A NULL pointer to a surface is specified. The spl_sur underlying the surface is not a VBL_SURF.

Library: kernel

Filename: kern/kernel/kernapi/api/kernapi.hxx

Effect: Read-only
PDF/KERN/16FNA.PDF
HTM/DATA/KERN/KERN/16FNA/0097.HTM