## BspCrvDeriveRational

(symb_lib/bsp_sym.c:364)
Prototype:

      CagdCrvStruct *BspCrvDeriveRational(CagdCrvStruct *Crv)

Description:
Given a rational Bspline curve - computes its derivative curve (Hodograph) using the quotient rule for differentiation.
Parameters:

Crv: | Bspline curve to differentiate.
--- | ---

Returned Value:

CagdCrvStruct *: Differentiated rational Bspline curve.

See Also:
BzrCrvDerive BspCrvDerive BzrCrvDeriveRational CagdCrvDerive
Keywords:
derivatives

## BspCrvMult

(symb_lib/bsp_sym.c:58)
Prototype:

      CagdCrvStruct *BspCrvMult(CagdCrvStruct *Crv1, CagdCrvStruct *Crv2)

Description:
Given two Bspline curves - multiply them coordinatewise. The two curves are promoted to same point type before the multiplication can take place. See also BspMultInterpFlag.
Parameters:

Crv1, Crv2: | The two curves to multiply.
--- | ---

Returned Value:

CagdCrvStruct *: The product Crv1 * Crv2 coordinatewise.

Keywords:
product

## BspMultInterpFlag

(symb_lib/bsp_sym.c:34)
Prototype:

      int BspMultInterpFlag(int BspMultUsingInter)

Description:
Sets method of Bspline product computation.
Parameters:

BspMultUsingInter: | If TRUE, Bspline product is computed by setting an interpolation problem. Otherwise, by decomposing the Bspline geometry to Bezier geometry.
--- | ---

Returned Value:

int: Previous setting.

Keywords:
product

## BspSrfDeriveRational

(symb_lib/bsp_sym.c:461)
Prototype:

      CagdSrfStruct *BspSrfDeriveRational(CagdSrfStruct *Srf, CagdSrfDirType Dir)

Description:
Given a rational Bspline surface - computes its derivative surface in direction Dir, using the quotient rule for differentiation.
Parameters:

Srf: | Bspline surface to differentiate.
--- | ---
Dir: | Direction of Differentiation. Either U or V.

Returned Value:

CagdSrfStruct *: Differentiated rational Bspline surface.

See Also:
CagdSrfDerive BzrSrfDerive BspSrfDerive BzrSrfDeriveRational
Keywords:
derivatives

## BspSrfMult

(symb_lib/bsp_sym.c:223)
Prototype:

      CagdSrfStruct *BspSrfMult(CagdSrfStruct *Srf1, CagdSrfStruct *Srf2)

Description:
Given two Bspline surfaces - multiply them coordinatewise. The two surfaces are promoted to same point type before multiplication can take place. See also BspMultInterpFlag.
Parameters:

Srf1, Srf2: | The two surfaces to multiply.
--- | ---

Returned Value:

CagdSrfStruct *: The product Srf1 * Srf2 coordinatewise.

Keywords:
product

## BzrApproxBzrCrvAsCubicPoly

(symb_lib/bzr_sym.c:491)
Prototype:

      CagdCrvStruct *BzrApproxBzrCrvAsCubicPoly(CagdCrvStruct *Crv, CagdRType Tol2)

Description:
Given a Bezier curve with order larger than cubic, approximate it using piecewise cubic curves. A C^1 continuous approximation is computed so that the approximation is at most sqrt(Tol2) away from the given curve. Input curve can be rational, although output is always polynomial.
Parameters:

Crv: | To approximate using cubic Bezier curves.
--- | ---
Tol2: | Accuracy control.

Returned Value:

CagdCrvStruct *: List of cubic Bezier curves approximating Crv.

Keywords:
approximation conversion

## BzrApproxBzrCrvAsCubics

(symb_lib/bzr_sym.c:415)
Prototype:

      CagdCrvStruct *BzrApproxBzrCrvAsCubics(CagdCrvStruct *Crv,
                                             CagdRType Tol,
                                             CagdRType MaxLen,
                                             CagdBType NoRational)

Description:
Given a Bezier curve - convert it to (possibly) piecewise cubic. If the curve is 1. A cubic - a copy if it is returned. 2. Lower than cubic - a degree raised (to a cubic) curve is returned. 3. Higher than cubic - a C^1 continuous piecewise cubic approximation is computed for Crv. In case 3 a list of polynomial cubic curves is returned. Tol is then used for the distance tolerance error measure for the approximation. If, however, NoRational is set, rational curves of any order will also be approximated using cubic polynomials. Furthermore if the total length of control polygon is more than MaxLen, the curve is subdivided until this is not the case.
Parameters:

Crv: | To approximate using cubic Bezier polynomials.
--- | ---
Tol: | Accuracy control.
MaxLen: | Maximum arc length of curve.
NoRational: | Do we want to approximate rational curves as well?

Returned Value:

CagdCrvStruct *: A list of cubic Bezier polynomials approximating Crv.

Keywords:
conversion approximation

## BzrComposeCrvCrv

(symb_lib/composit.c:283)
Prototype:

      CagdCrvStruct *BzrComposeCrvCrv(CagdCrvStruct *Crv1, CagdCrvStruct *Crv2)

Description:
Given two Bezier curves, Crv1 and Crv2, computes their composition Crv1(Crv2(t)). Crv2 must be a scalar curve completely contained in Crv1's parametric domain. See: "Freeform surfcae analysis using a hybrid of symbolic and numeric computation" by Gershon Elber, PhD thesis, University of Utah, 1992.
Parameters:

Crv1, Crv2: | The two curve to compose together.
--- | ---

Returned Value:

CagdCrvStruct *: The composed curve.

Keywords:
composition

## BzrComposeSrfCrv

(symb_lib/composit.c:479)
Prototype:

      CagdCrvStruct *BzrComposeSrfCrv(CagdSrfStruct *Srf, CagdCrvStruct *Crv)

Description:
Given a Bezier curve Crv and a Bezier surface Srf, computes their coomposition Srf(Crv(t)). Crv must be a two dimensional curve completely contained in the parametric domain of Srf. See: "Freeform surfcae analysis using a hybrid of symbolic and numeric computation" by Gershon Elber, PhD thesis, University of Utah, 1992.
Parameters:

Srf, Crv: | The curve and surface to compose.
--- | ---

Returned Value:

CagdCrvStruct *: The resulting composition.

Keywords:
composition

## BzrCrvDeriveRational

(symb_lib/bzr_sym.c:214)
Prototype:

      CagdCrvStruct *BzrCrvDeriveRational(CagdCrvStruct *Crv)

Description:
Given a rational Bezier curve - computes its derivative curve (Hodograph) using the quotient rule for differentiation.
Parameters:

Crv: | Bezier curve to differentiate.
--- | ---

Returned Value:

CagdCrvStruct *: Differentiated rational Bezier curve.

See Also:
BzrCrvDerive BspCrvDerive BspCrvDeriveRational CagdCrvDerive
Keywords:
derivatives

## BzrCrvMult

(symb_lib/bzr_sym.c:26)
Prototype:

      CagdCrvStruct *BzrCrvMult(CagdCrvStruct *Crv1, CagdCrvStruct *Crv2)

Description:
Given two Bezier curves - multiply them coordinatewise. The two curves are promoted to same point type before the multiplication can take place.
Parameters:

Crv1, Crv2: | The two curves to multiply.
--- | ---

Returned Value:

CagdCrvStruct *: The product Crv1 * Crv2 coordinatewise.

Keywords:
product

## BzrCrvMultList

(symb_lib/bzr_sym.c:90)
Prototype:

      CagdCrvStruct *BzrCrvMultList(CagdCrvStruct *Crv1Lst, CagdCrvStruct *Crv2Lst)

Description:
Given two Bezier curve lists - multiply them one at a time. Return a Bezier curve lists representing their products.
Parameters:

Crv1Lst: | First list of Bezier curves to multiply.
--- | ---
Crv2Lst: | Second list of Bezier curves to multiply.

Returned Value:

CagdCrvStruct *: A list of product curves

Keywords:
product

## BzrSrfDeriveRational

(symb_lib/bzr_sym.c:309)
Prototype:

      CagdSrfStruct *BzrSrfDeriveRational(CagdSrfStruct *Srf, CagdSrfDirType Dir)

Description:
Given a rational Bezier surface - computes its derivative surface in direction Dir, using the quotient rule for differentiation.
Parameters:

Srf: | Bezier surface to differentiate.
--- | ---
Dir: | Direction of Differentiation. Either U or V.

Returned Value:

CagdSrfStruct *: Differentiated rational Bezier surface.

See Also:
CagdSrfDerive BzrSrfDerive BspSrfDerive BspSrfDeriveRational
Keywords:
derivatives

## BzrSrfMult

(symb_lib/bzr_sym.c:128)
Prototype:

      CagdSrfStruct *BzrSrfMult(CagdSrfStruct *Srf1, CagdSrfStruct *Srf2)

Description:
Given two Bezier surfaces - multiply them coordinatewise. The two surfaces are promoted to same point type before multiplication can take place.
Parameters:

Srf1, Srf2: | The two surfaces to multiply.
--- | ---

Returned Value:

CagdSrfStruct *: The product Srf1 * Srf2 coordinatewise.

Keywords:
product

## SymbAdapIsoExtract

(symb_lib/adap_iso.c:103)
Prototype:

      CagdCrvStruct *SymbAdapIsoExtract(CagdSrfStruct *Srf,
                                        CagdSrfStruct *NSrf,
                                        SymbAdapIsoDistSqrFuncType AdapIsoDistFunc,
                                        CagdSrfDirType Dir,
                                        CagdRType Eps,
                                        CagdBType FullIso,
                                        CagdBType SinglePath)

Description:
Extracts a valid coverage set of isolines from the given surface in the given direction and epsilon. If FullIso is TRUE, all extracted isocurves are spanning the entire parametric domain. If SinglePath is TRUE, the entire coverage is going to be a single curve. If NSrf != NULL, every second curve will be a vector field curve representing the unnormalized normal for the previous Euclidean curve. This mode disable the SinglePath mode. See also function SymbSetAdapIsoExtractMinLevel.
Parameters:

Srf: | To compute adaptive isocurve coverage form
--- | ---
NSrf: | Normal vector field defining the normals of Srf.
AdapIsoDistFunc: | ptional function to invoke with the two adjacent isoparametric curves of the coverage to evaluate the distance between them.
Dir: | Direction of adaptive isocurve extraction. Either U or V.
Eps: | Tolerance of adaptive isocurve cuverage. For every point P on Srf there will be a point Q in one of the extracted isocurves such the |P - Q| < Eps.
FullIso: | Do we want all isocurves to span the entire domain?
SinglePath: | o we want a single curve through them all?

Returned Value:

CagdCrvStruct *: A list of curves representing the computed adaptive isocurve coverage for surface Srf. If normal field, NSrf, is prescribed, normal curves are concatenated alternatingly in this list.

Keywords:
adaptive isocurves

## SymbAllPrisaSrfs

(symb_lib/prisa.c:54)
Prototype:

      CagdSrfStruct *SymbAllPrisaSrfs(CagdSrfStruct *Srfs,
                                      int SamplesPerCurve,
                                      CagdRType Epsilon,
                                      CagdSrfDirType Dir,
                                      CagdVType Space)

Description:
Computes a piecewise ruled surface approximation to a given set of surfaces with given Epsilon, and lay them out "nicely" onto the XY plane, by approximating each ruled surface as a developable surface with SamplesPerCurve samples. Dir controls the direction of ruled approximation, SpaceScale and Offset controls the placement of the different planar pieces. Prisa is the hebrew word for the process of flattening out a three dimensional surface. I have still to find an english word for it.
Parameters:

Srfs: | To approximate and faltten out.
--- | ---
SamplesPerCurve: | uring the approximation of a ruled surface as a developable surface.
Epsilon: | Accuracy control for the piecewise ruled surface approximation.
Dir: | Direction of ruled/developable surface approximation. Either U or V.
Space: | A vector in the XY plane to denote the amount of translation from one flattened out surface to the next.

Returned Value:

CagdSrfStruct *: A list of planar surfaces denoting the layout (prisa) of the given Srfs to the accuracy requested.

Keywords:
layout prisa

## SymbComposeCrvCrv

(symb_lib/composit.c:37)
Prototype:

      CagdCrvStruct *SymbComposeCrvCrv(CagdCrvStruct *Crv1, CagdCrvStruct *Crv2)

Description:
Given two curves, Crv1 and Crv2, computes the composition Crv1(Crv2(t)). Crv2 must be a scalar curve completely contained in Crv1's parametric domain.
Parameters:

Crv1, Crv2: | The two curve to compose together.
--- | ---

Returned Value:

CagdCrvStruct *: The composed curve.

Keywords:
composition

## SymbComposeSrfCrv

(symb_lib/composit.c:366)
Prototype:

      CagdCrvStruct *SymbComposeSrfCrv(CagdSrfStruct *Srf, CagdCrvStruct *Crv)

Description:
Given a curve Crv and surface Srf, computes the composition Srf(Crv(t)). Crv must be a two dimensional curve completely contained in the parametric domain of Srf.
Parameters:

Srf, Crv: | The curve and surface to compose.
--- | ---

Returned Value:

CagdCrvStruct *: The resulting composition.

Keywords:
composition

## SymbCrv2DCurvatureSign

(symb_lib/curvatur.c:447)
Prototype:

      CagdCrvStruct *SymbCrv2DCurvatureSign(CagdCrvStruct *Crv)

Description:
Computes a scalar curve representing the curvature sign of a planar curve. The given curve is assumed to be planar and only its x and y coordinates are considered. Then the curvature sign is equal to

##

         .  ..    .  ..
    s =  X  Y  -  Y  X

    Parameters:

     Crv:

    Returned Value:

      CagdCrvStruct *:

    See Also:

      SymbCrv2DCurvatureSqr
      SymbCrv3DCurvatureSqr
      SymbCrv3DCurvatureSqr

      SymbCrv3DRadiusNormal
      SymbCrv3DCurvatureNormal
      SymbCrv2DInflectionPts

      SymbCrv2DExtremCrvtrPts

    Keywords:

      curvature

     SymbCrv2DCurvatureSqr   (symb_lib/curvatur.c:41)

    Prototype:

      CagdCrvStruct *SymbCrv2DCurvatureSqr(CagdCrvStruct *Crv)

    Description:

Computes a scalar curve representing the curvature of a planar curve. The given curve is assumed to be planar and only its x and y coordinates are considered. Then the curvature k is equal to

         .  ..    .  ..
         X  Y  -  Y  X
    k =  -------------
            .2   .2  3/2
         (  X  + Y  )

Since we cannot represent k because of the square root, we compute and represent k^2.
Parameters:

Crv: | To compute the square of teh curvature field for.
--- | ---

Returned Value:

CagdCrvStruct *: The square of the curvature field of Crv.

See Also:
SymbCrv3DCurvatureSqr SymbCrv3DRadiusNormal SymbCrv3DCurvatureNormal SymbCrv2DCurvatureSign SymbCrv2DInflectionPts SymbCrv2DExtremCrvtrPts
Keywords:
curvature

## SymbCrv2DExtremCrvtrPts

(symb_lib/curvatur.c:628)
Prototype:

      CagdPtStruct *SymbCrv2DExtremCrvtrPts(CagdCrvStruct *Crv, CagdRType Epsilon)

Description:
Given a planar curve, finds all its extreme curvatrue points by finding the set of extreme locations on the curvature function of Crv.
Parameters:

Crv: | To find all int extrem curvature locations.
--- | ---
Epsilon: | Accuracy control.

Returned Value:

CagdPtStruct *: A list of parameter values on Crv that have extrem curvature values.

See Also:
SymbCrv2DCurvatureSqr SymbCrv3DCurvatureSqr SymbCrv3DCurvatureSqr SymbCrv3DRadiusNormal SymbCrv3DCurvatureNormal SymbCrv2DCurvatureSign SymbCrv2DInflectionPts
Keywords:
curvature

## SymbCrv2DInflectionPts

(symb_lib/curvatur.c:595)
Prototype:

      CagdPtStruct *SymbCrv2DInflectionPts(CagdCrvStruct *Crv, CagdRType Epsilon)

Description:
Given a planar curve, finds all its inflection points by finding the zero set of the sign of the curvature function of the curve.
Parameters:

Crv: | To find all its inflection points.
--- | ---
Epsilon: | Accuracy control.

Returned Value:

CagdPtStruct *: A list of parameter values on Crv that are inflection points.

See Also:
SymbCrv2DCurvatureSqr SymbCrv3DCurvatureSqr SymbCrv3DCurvatureSqr SymbCrv3DRadiusNormal SymbCrv3DCurvatureNormal SymbCrv2DCurvatureSign SymbCrv2DExtremCrvtrPts
Keywords:
curvature inflection points

## SymbCrv2DUnnormNormal

(symb_lib/curvatur.c:299)
Prototype:

      CagdCrvStruct *SymbCrv2DUnnormNormal(CagdCrvStruct *Crv)

Description:
Computes the unnormalized normal of a planar 2D curve as a 90 rotation in the plane of the tangent field.
Parameters:

Crv: | Planar curve to compute unnormalized normal field for.
--- | ---

Returned Value:

CagdCrvStruct *: The normal field.

See Also:
SymbCrv3DRadiusNormal
Keywords:

## SymbCrv2Polyline

(symb_lib/symbpoly.c:231)
Prototype:

      CagdPolylineStruct *SymbCrv2Polyline(CagdCrvStruct *Crv,
                                           CagdRType TolSamples,
                                           SymbCrvApproxMethodType Method,
                                           CagdBType OptiLin)

Description:
Routine to approx. a single curve as a polyline with TolSamples samples/tolerance. Polyline is always E3 CagdPolylineStruct type. NULL is returned in case of an error, otherwise CagdPolylineStruct.
Parameters:

Crv: | To approximate as a polyline.
--- | ---
TolSamples: | Tolerance of approximation error (Method = 2) or Number of samples to compute on polyline (Method = 0, 1).
Method: | 0 - TolSamples are set uniformly in parametric space, 1 - TolSamples are set optimally, considering the isocurve's curvature. 2 - TolSamples sets the maximum error allowed between the piecewise linear approximation and original curve.
OptiLin: | If TRUE, optimize linear curves.

Returned Value:

CagdPolylineStruct *: A polyline representing the piecewise linear approximation from, or NULL in case of an error.

See Also:
BspCrv2Polyline BzrCrv2Polyline IritCurve2Polylines
Keywords:
piecewise linear approximation polyline

## SymbCrv3DCurvatureNormal

(symb_lib/curvatur.c:350)
Prototype:

      CagdCrvStruct *SymbCrv3DCurvatureNormal(CagdCrvStruct *Crv)

Description:
Computes a vector field curve representing the curvature of a curve, in the normal direction, that is kN.

##

                   .   ..      .       .   ..     .
                   C x C       C     ( C x C  ) x C
    kN = kB x T =  -----  x  ----- = --------------
                     .  3      .           .  4
                   | C |     | C |       | C |

    Parameters:

     Crv:        To compute the normal curvature field.

    Returned Value:

      CagdCrvStruct *:   Computed normal curvature field.

    See Also:

      SymbCrv2DCurvatureSqr
      SymbCrv3DCurvatureSqr
      SymbCrv3DCurvatureSqr

      SymbCrv3DRadiusNormal
      SymbCrv2DCurvatureSign
      SymbCrv2DInflectionPts

      SymbCrv2DExtremCrvtrPts

    Keywords:

      curvature

     SymbCrv3DCurvatureSqr   (symb_lib/curvatur.c:147)

    Prototype:

      CagdCrvStruct *SymbCrv3DCurvatureSqr(CagdCrvStruct *Crv)

    Description:

Computes a scalar field curve representing the square of the curvature of a given 3D curve.
Parameters:

Crv: | To compute scalar field of curvatrue square for.
--- | ---

Returned Value:

CagdCrvStruct *: Computed scalar field of curvature square of Crv.

See Also:
SymbCrv2DCurvatureSqr SymbCrv3DRadiusNormal SymbCrv3DCurvatureNormal SymbCrv2DCurvatureSign SymbCrv2DInflectionPts SymbCrv2DExtremCrvtrPts
Keywords:
curvature

## SymbCrv3DRadiusNormal

(symb_lib/curvatur.c:229)
Prototype:

      CagdCrvStruct *SymbCrv3DRadiusNormal(CagdCrvStruct *Crv)

Description:
Computes a vector field curve representing the radius (1/curvature) of a curve, in the normal direction, that is N / k:

##

                      .   ..    .      .  6        .   ..    .     .  2
             k N     (C x C ) x C    | C |      ( (C x C ) x C ) | C |
    N / k =  ----- = ------------ . --------- = -----------------------
               2          .  4       .   .. 2           .   .. 2
              k         | C |       (C x C )           (C x C )

    Parameters:

     Crv:        To compute the normal field with radius as magnitude.

    Returned Value:

      CagdCrvStruct *:   Computed normal field with 1 / k as magnitude.

    See Also:

      SymbCrv2DCurvatureSqr
      SymbCrv3DCurvatureSqr
      SymbCrv3DCurvatureSqr

      SymbCrv3DCurvatureNormal
      SymbCrv2DCurvatureSign

      SymbCrv2DInflectionPts
      SymbCrv2DExtremCrvtrPts
      SymbCrv2DUnnormNormal

    Keywords:

      curvature

     SymbCrvAdapOffset   (symb_lib/offset.c:463)

    Prototype:

      CagdCrvStruct *SymbCrvAdapOffset(CagdCrvStruct *OrigCrv,
                                       CagdRType OffsetDist,
                                       CagdRType OffsetError,
                                       SymbOffCrvFuncType OffsetAprxFunc,
                                       CagdBType BezInterp)

    Description:

Given a curve and an offset amount OffsetDist, returns an approximation to the offset curve by offseting the control polygon in the normal direction. This function computes an approximation to the offset using OffsetAprxFunc, measure the error and use it to refine and decrease the error adaptively. Bezier curves are promoted to Bsplines curves. See also: Gershon Elber and Elaine Cohen, "Error Bounded Variable Distance Offset Operator for Free Form Curves and Surfaces". International Journal of Computational Geometry & Applications, Vol. 1, Num. 1, March 1991, pp 67-78.
Parameters:

OrigCrv: | To approximate its offset curve with distance OffsetDist.
--- | ---
OffsetDist: | Amount of offset. Negative denotes other offset direction.
OffsetError: | Tolerance control.
OffsetAprxFunc: | A function that can be used to approximate an offset of a curve. If NULL SymbCrvOffset function is selected.
BezInterp: | If TRUE, control points are interpolated when the curve is reduced to a Bezier form. Otherwise, control points are translated OffsetDist amount only, under estimating the Offset.

Returned Value:

CagdCrvStruct *: An approximation to the offset curve, to within OffsetError.

See Also:
SymbCrvOffset SymbCrvSubdivOffset SymbSrfOffset SymbSrfSubdivOffset SymbCrvAdapOffsetTrim SymbCrvLeastSquarOffset SymbCrvMatchingOffset
Keywords:
offset

## SymbCrvAdapOffsetTrim

(symb_lib/offset.c:594)
Prototype:

      CagdCrvStruct *SymbCrvAdapOffsetTrim(CagdCrvStruct *OrigCrv,
                                           CagdRType OffsetDist,
                                           CagdRType OffsetError,
                                           SymbOffCrvFuncType OffsetAprxFunc,
                                           CagdBType BezInterp)

Description:
Same function as CagdCrvAdapOffset, but trims the self intersection loops. See also: Gershon Elber and Elaine Cohen, "Error Bounded Variable Distance Offset Operator for Free Form Curves and Surfaces". International Journal of Computational Geometry & Applications, Vol. 1, Num. 1, March 1991, pp 67-78.
Parameters:

OrigCrv: | To approximate its offset curve with distance OffsetDist.
--- | ---
OffsetDist: | Amount of offset. Negative denotes other offset direction.
OffsetError: | Tolerance control.
OffsetAprxFunc: | A function that can be used to approximate an offset of a curve. If NULL SymbCrvOffset function is selected. Third parameter of SymbOffCrvFuncType is optional.
BezInterp: | If TRUE, control points are interpolated when the curve is reduced to a Bezier form. Otherwise, control points are translated OffsetDist amount only, under estimating the Offset.

Returned Value:

CagdCrvStruct *: An approximation to the offset curve, to within OffsetError.

See Also:
SymbCrvOffset SymbCrvSubdivOffset SymbSrfOffset SymbSrfSubdivOffset SymbCrvAdapOffset SymbCrvLeastSquarOffset SymbCrvMatchingOffset
Keywords:
offset

## SymbCrvAdd

(symb_lib/symbolic.c:39)
Prototype:

      CagdCrvStruct *SymbCrvAdd(CagdCrvStruct *Crv1, CagdCrvStruct *Crv2)

Description:
Given two curves - add them coordinatewise. The two curves are promoted to same point type before the multiplication can take place. Furthermore, order and continuity are matched as well.
Parameters:

Crv1, Crv2: | Two curve to add up coordinatewise.
--- | ---

Returned Value:

CagdCrvStruct *: The summation of Crv1 + Crv2 coordinatewise.

See Also:
SymbCrvSub SymbCrvMult
Keywords:
addition symbolic computation

## SymbCrvArcLen

(symb_lib/arc_len.c:387)
Prototype:

      CagdRType SymbCrvArcLen(CagdCrvStruct *Crv, CagdRType Epsilon)

Description:
Computes a tight approximation to the arc length of a curve. Estimates the arc length scalar field of Crv using SymbCrvArcLenCrv and evaluate the estimate on the curve's domain boundary.
Parameters:

Crv: | Curve to compute a tight approximation on arc length.
--- | ---
Epsilon: | Accuracy control.

Returned Value:

CagdRType: The approximated arc length of the given curve Crv.

Keywords:
arc length

## SymbCrvArcLenCrv

(symb_lib/arc_len.c:356)
Prototype:

      CagdCrvStruct *SymbCrvArcLenCrv(CagdCrvStruct *Crv, CagdRType Epsilon)

Description:
Computes a scalar curve approximating the arc length of given curve Crv. Arc length is astimated by computing the square of Crv first derivative approximating its square root and integrating symbolically.
Parameters:

Crv: | To approximate its arc length scalar field.
--- | ---
Epsilon: | Accuracy of approximating.

Returned Value:

CagdCrvStruct *: A scalar field approximating Crv arc length.

Keywords:
arc length

## SymbCrvArcLenPoly

(symb_lib/arc_len.c:71)
Prototype:

      CagdRType SymbCrvArcLenPoly(CagdCrvStruct *Crv)

Description:
Computes a bound on the arc length of a curve by computing the length of its control polygon.
Parameters:

Crv: | To bound its length.
--- | ---

Returned Value:

CagdRType: An upper bound on the curve Crv length as the length of Crv's control polygon.

Keywords:
arc length

## SymbCrvArcLenSteps

(symb_lib/arc_len.c:419)
Prototype:

      CagdPtStruct *SymbCrvArcLenSteps(CagdCrvStruct *Crv,
                                       CagdRType Length,
                                       CagdRType Epsilon)

Description:
Computes parameter values to move steps of Length at a time on curve Crv. Returned is a list of parameter values to move along.
Parameters:

Crv: | Curve to compute constant arc Length steps.
--- | ---
Length: | The step size.
Epsilon: | Accuracy control.

Returned Value:

CagdPtStruct *: List of parameter values to march along Crv with arc Length between them.

Keywords:
arc length

## SymbCrvBisectors

(symb_lib/crv_skel.c:67)
Prototype:

      CagdCrvStruct *SymbCrvBisectors(CagdCrvStruct *Crv,
                                      int UseNrmlTan,
                                      RealType Tolerance,
                                      CagdBType NumerImprove,
                                      CagdBType SameNormal)

Description:
Computes the skeleton curves (bisectors) of a given curve or two. If Crv contains a list of two curves the bisector between the two curves is computed. Otherwise, Crv self bisectors are computed.
Parameters:

Crv: | Either one or two curves to compute bisectors for. Assumes E2 curves.
--- | ---
UseNrmlTan: | If 0, tangent fields are used to compute bisector surface. If 1, normal fields instead of tangents are used to compute the bisector surface function. If 2, a blend of the normal field and tangent field computation is used.
Tolerance: | Accuracy of computation.
NumerImprove: | f TRUE, a numerical improvment stage is applied.
SameNormal: | If TRUE, the bisector should be oriented for inner or outer side of the curves, with respect to their normals.

Returned Value:

CagdCrvStruct *: A list of piecewise linear curves approximating the bisectors of Crv.

See Also:
SymbCrvCnvxHull SymbCrvDiameter SymbCrvBisectorsSrf
Keywords:
bisectors skeleton

## SymbCrvBisectorsSrf

(symb_lib/crv_skel.c:324)
Prototype:

      CagdSrfStruct *SymbCrvBisectorsSrf(CagdCrvStruct *Crv, int UseNrmlTan)

Description:
Computes the bisector surface definition of a given curve or two. If Crv contains a list of two curves the bisector between the two curves is computed. Otherwise, Crv self--bisectors are sought. The result is a scalar surface whose zero set is the set of bisector(s) of the curves.
Parameters:

Crv: | Either one or two curves to compute bisectors for. Assumes E2 curves.
--- | ---
UseNrmlTan: | f 0, tangent fields are used to compute bisector surface. If 1, normal fields instead of tangents are used to compute the bisector surface function. If 2, a blend of the normal field and tangent field computation is used. if -1, the curves are assumed three space curve and the real bisector surface is returned in such a case.

Returned Value:

CagdSrfStruct *: A scalar surface whose zero set provides matching bisecting points on Crv, if UseNrmlTan >= 0. The real bisector surface for three space curves, if UseNrmlTan = -1.

See Also:
SymbCrvCnvxHull SymbCrvDiameter SymbCrvBisectors SymbCrvBisectorsSrf2 SymbCrvPtBisectorsSrf3D SymbCrvCrvBisectorSrf3D
Keywords:
bisectors skeleton

## SymbCrvBisectorsSrf

(symb_lib/crv_skel.c:508)
Prototype:

      CagdSrfStruct *SymbCrvBisectorsSrf2(CagdCrvStruct *Crv)

Description:
Computes the bisector surface definition of a given curve or two. If Crv contains a list of two curves the bisector between the two curves is computed. Otherwise, Crv self--bisectors are sought. The result is a scalar surface whose zero set is the set of bisector(s) of the curves. Solve for the planar bisector surface in the plane and then elevate in Z using the rational function of

##

                                      ||P - C1(s)||^2 - ||P - C2(t)||^2.

    Parameters:

     Crv:        Either one or two curves to compute bisectors for.  Assumes
                   E2 curves.

    Returned Value:

      CagdSrfStruct *:   A scalar surface whose zero set provides matching
                  bisecting points on Crv, if UseNrmlTan >= 0.  The real
                  bisector surface for three space curves, if UseNrmlTan = -1.

    See Also:

      SymbCrvCnvxHull
      SymbCrvDiameter
      SymbCrvBisectors

      SymbCrvBisectorsSrf
      SymbCrvPtBisectorsSrf3D
      SymbCrvCrvBisectorSrf3D

    Keywords:

      bisectors
      skeleton

     SymbCrvCnvxHull   (symb_lib/ffcnvhul.c:54)

    Prototype:

      CagdCrvStruct *SymbCrvCnvxHull(CagdCrvStruct *Crv, RealType FineNess)

    Description:

Computes the convex hull of a C1 freeform planar curve, in the XY plane. The convex hull is computed by symbolically isolating the non negative set (in t) of:

                  C'(t) x (C(r) - C(t)) >= 0,   forall r.

Note the above equation yields a scalar value since C(t) is planar. The resulting set in t contains all the subdomain in C(t) that is on the convex hull of C(t). Connecting these pieces with straight lines yeilds the final convex hull curve.
Parameters:

Crv: | To compute its convex hull.
--- | ---
FineNess: | Of numeric search for the zero set (for surface subdivision). A positive value (10 is a good start).

Returned Value:

CagdCrvStruct *: A curve representing the convex hull of Crv.

See Also:
SymbCrvPtTangents SymbCrvDiameter
Keywords:

## SymbCrvConstSet

(symb_lib/symbzero.c:149)
Prototype:

      CagdPtStruct *SymbCrvConstSet(CagdCrvStruct *Crv,
                                    int Axis,
                                    CagdRType Epsilon,
                                    CagdRType ConstVal)

Description:
Computes the constant set of a given curve, in the given axis (1-3 for X-Z). Returned is a list of the constant set points holding the parameter values at Pt[0] of each point.
Parameters:

Crv: | To compute its constant set.
--- | ---
Axis: | The axis of Crv to compute constant set for.
Epsilon: | Tolerance control.
ConstVal: | The value at which to compute the constant set.

Returned Value:

CagdPtStruct *: List of parameter values form which Crv has an value of ConstVal in axis Axis.

Keywords:
constant set zero set symbolic computation

## SymbCrvCrossProd

(symb_lib/symbolic.c:381)
Prototype:

      CagdCrvStruct *SymbCrvCrossProd(CagdCrvStruct *Crv1, CagdCrvStruct *Crv2)

Description:
Given two curves - computes their cross product. Returned curve is a scalar curve representing the cross product of the two given curves.
Parameters:

Crv1, Crv2: | Two curve to multiply and compute a cross product for.
--- | ---

Returned Value:

CagdCrvStruct *: A scalar curve representing the cross product of Crv1 x Crv2.

See Also:
SymbCrvDotProd SymbCrvVecDotProd SymbCrvMult SymbCrvMultScalar
Keywords:
product cross product symbolic computation

## SymbCrvCrvBisectorSrf3D

(symb_lib/crv_skel.c:661)
Prototype:

      CagdSrfStruct *SymbCrvCrvBisectorSrf3D(CagdCrvStruct *Crv1,
                                             CagdCrvStruct *Crv2)

Description:
Computes the bisector surface of two curve in arbitrary general three space position.
Parameters:

Crv1, Crv2: | Two three space curves to compute their bisector surface.
--- | ---

Returned Value:

CagdSrfStruct *: The bisector surface.

See Also:
SymbCrvDiameter SymbCrvCnvxHull SymbCrvBisectorsSrf SymbCrvPtBisectorSrf3D
Keywords:
bisectors skeleton

## SymbCrvCrvConvolution

(symb_lib/offset.c:915)
Prototype:

      CagdCrvStruct *SymbCrvCrvConvolution(CagdCrvStruct *Crv1,
                                           CagdCrvStruct *Crv2,
                                           CagdRType OffsetDist,
                                           CagdRType Tolerance)

Description:
Computes the convolution of the given two curves by matching their tangents and reparametrizing Crv2. If Crv2 is NULL, an Arc of radius OffsetDist is used, resulting in an offset operation of Crv1. Both Crv1 and Crv2 are assumed to have no inflection points and to span the same angular domain. That is Crv1'(0) || Crv2'(0) and similarly Crv1'(1) || Crv2'(1), where || denotes parallel.
Parameters:

Crv1, Crv2: | The two curves to convolve.
--- | ---
OffsetDist: | Amount of offset, if Crv2 == NULL. Negative value denotes other offset/convolution direction.
Tolerance: | Of angular discrepancy that is allowed.

Returned Value:

CagdCrvStruct *: The offset curve approximation.

See Also:
SymbCrvOffset SymbCrvSubdivOffset SymbSrfOffset SymbSrfSubdivOffset SymbCrvAdapOffset SymbCrvAdapOffsetTrim SymbCrvLeastSquarOffset SymbCrvMatchingOffset
Keywords:

## SymbCrvCrvInter

(symb_lib/distance.c:425)
Prototype:

      CagdPtStruct *SymbCrvCrvInter(CagdCrvStruct *Crv1,
                                    CagdCrvStruct *Crv2,
                                    CagdRType CCIEpsilon,
                                    CagdBType SelfInter)

Description:
Computes the intersection points of two planar curves, in the XY plane
Parameters:

Crv1, Crv2: | The two curves to intersect.
--- | ---
CCIEpsilon: | Tolerance of computation.
SelfInter: | If TRUE, needs to handle a curve against itself detecting self intersections in Crv1 (== Crv2).

Returned Value:

CagdPtStruct *: List of intersection points. Each point holds the intersection location in Crv1 as first coefficient and the intersection location in Crv2 as second coefficient.

See Also:
SymbSrfDistCrvCrv SymbSrfDistFindPoints
Keywords:

## SymbCrvDeterminant2

(symb_lib/crv_skel.c:1133)
Prototype:

      CagdCrvStruct *SymbCrvDeterminant2(CagdCrvStruct *Crv11,
                                         CagdCrvStruct *Crv12,
                                         CagdCrvStruct *Crv21,
                                         CagdCrvStruct *Crv22)

Description:
Computes the expression of Crv11 * Crv22 - Crv12 * Crv21, which is a determinant of a 2 by 2 matrix.
Parameters:

Crv11, Crv12, Crv21, Crv22: | The four factors of the determinant.
--- | ---

Returned Value:

CagdCrvStruct *: A scalar field representing the determinant computation.

See Also:
SymbCrvDeterminant3 SymbSrfDeterminant2
Keywords:
determinant

## SymbCrvDeterminant3

(symb_lib/crv_skel.c:1090)
Prototype:

      CagdCrvStruct *SymbCrvDeterminant3(CagdCrvStruct *Crv11,
                                         CagdCrvStruct *Crv12,
                                         CagdCrvStruct *Crv13,
                                         CagdCrvStruct *Crv21,
                                         CagdCrvStruct *Crv22,
                                         CagdCrvStruct *Crv23,
                                         CagdCrvStruct *Crv31,
                                         CagdCrvStruct *Crv32,
                                         CagdCrvStruct *Crv33)

Description:
Computes the expression of a 3 by 3 determinants.
Parameters:

Crv11, Crv12, ..., Crv33: | The nine factors of the determinant.
--- | ---

Returned Value:

CagdCrvStruct *: A scalar field representing the determinant computation.

See Also:
SymbCrvDeterminant2 SymbSrfDeterminant3
Keywords:
determinant

## SymbCrvDiameter

(symb_lib/ffcnvhul.c:322)
Prototype:

      struct IPPolygonStruct *SymbCrvDiameter(CagdCrvStruct *Crv, RealType FineNess)

Description:
Given a freeform curve, compute its diameter as a function. If the curve is a convex, probably as a result of a convex hull computation of an original curve, the matching will be one to one.
Parameters:

Crv: | A curve to process its diameter function.
--- | ---
FineNess: | Of numeric search for the zero set (for surface subdivision). A positive value (10 is a good start).

Returned Value:

IPPolygonStruct *: Contours of the matched parallel lines on Crv. Each vertex will hold two parameter values on Crv.

See Also:
SymbCrvCnvxHull SymbCrvPtTangents SymbCrvDiameterMinMax
Keywords:

## SymbCrvDiameterMinMax

(symb_lib/ffcnvhul.c:458)
Prototype:

      CagdRType *SymbCrvDiameterMinMax(CagdCrvStruct *Crv,
                                       struct IPPolygonStruct *Cntrs,
                                       int Min)

Description:
Computes the maximum or minimum diameter out of diameter matched list
Parameters:

Crv: | To compute its diameter.
--- | ---
Cntrs: | utput of SymbCrvDiameter - the matched paraller tangents.
Min: | TRUE of minimum diameter, FALSE for maximum diameter.

Returned Value:

CagdPype *: Two parameter values on Crv of tangent lines extreme value. Returns an address to a statically allocated point.

See Also:
SymbCrvDiameter
Keywords:

## SymbCrvDotProd

(symb_lib/symbolic.c:203)
Prototype:

      CagdCrvStruct *SymbCrvDotProd(CagdCrvStruct *Crv1, CagdCrvStruct *Crv2)

Description:
Given two curves - computes their dot product. Returned curve is a scalar curve representing the dot product of the two given curves.
Parameters:

Crv1, Crv2: | Two curve to multiply and compute a dot product for.
--- | ---

Returned Value:

CagdCrvStruct *: A scalar curve representing the dot product of Crv1 . Crv2.

See Also:
SymbCrvScalarScale SymbCrvVecDotProd SymbCrvMult SymbCrvMultScalar
Keywords:
product dot product symbolic computation

## SymbCrvEnclosedArea

(symb_lib/symbolic.c:657)
Prototype:

      CagdCrvStruct *SymbCrvEnclosedArea(CagdCrvStruct *Crv)

Description:
Given a planar curve, compute its enclosed area field curve. This has little meaning unless Crv is closed, in which by evaluation the resulting area filed curve at the end points, the area enclosed by Crv can be computed.
Parameters:

Crv: | A curve to compute area filed curve for.
--- | ---

Returned Value:

CagdCrvStruct *: The area field curve.

Keywords:
area symbolic computation

## SymbCrvExtremSet

(symb_lib/symbzero.c:69)
Prototype:

      CagdPtStruct *SymbCrvExtremSet(CagdCrvStruct *Crv, int Axis, CagdRType Epsilon)

Description:
Computes the extremum set of a given curve, in given axis (1-3 for X-Z). Returned is a list of the extreme set points holding the parameter values at Pt[0] of each point. One could compute the derivative of the curve and find its zero set. However, for rational curves, this will double the degree and slow down the computation considerably.
Parameters:

Crv: | To compute its extremum set.
--- | ---
Axis: | The axis of Crv to compute extremum set for.
Epsilon: | Tolerance control.

Returned Value:

CagdPtStruct *: List of parameter values form which Crv has an extremum value in axis Axis.

Keywords:
extremum set symbolic computation

## SymbCrvInvert

(symb_lib/symbolic.c:123)
Prototype:

      CagdCrvStruct *SymbCrvInvert(CagdCrvStruct *Crv)

Description:
Given a scalar curve, returns a scalar curve representing the reciprocal values, by making it rational (if was not one) and flipping the numerator and the denominator.
Parameters:

Crv: | A scalar curve to compute a reciprocal value for.
--- | ---

Returned Value:

CagdCrvStruct *: A rational scalar curve that is equalto the reciprocal value of Crv.

See Also:
SymbCrvDotProd SymbCrvVecDotProd SymbCrvMult SymbCrvMultScalar
Keywords:
division symbolic computation reciprocal value

## SymbCrvLeastSquarOffset

(symb_lib/offset.c:770)
Prototype:

      CagdCrvStruct *SymbCrvLeastSquarOffset(CagdCrvStruct *Crv,
                                             CagdRType OffsetDist,
                                             int NumOfSamples,
                                             int NumOfDOF,
                                             int Order,
                                             CagdRType *Tolerance)

Description:
Given a curve and an offset amount OffsetDist, returns an approximation to the offset curve by least square fitting a curve to samples taken on the offset curve. Resulting curve of order Order (degree of Crv if Order == 0) will have NumOfDOF control points that least sqaure fit NumOfSamples samples on the offset curve. Tolerance will be updated to hold an error distance measure.
Parameters:

Crv: | To approximate its offset curve with distance OffsetDist.
--- | ---
OffsetDist: | Amount of offset. Negative denotes other offset direction.
NumOfSamples: | umber of samples to sample the offset curve at.
NumOfDOF: | Number of degrees of freedom on the newly computed offset approximation. This is thesame as the number of control points the new curve will have.
Order: | Of the newly constructed offset approximation. If equal to zero, the order of Crv will be used.
Tolerance: | To return an error estimate in the L-infinity norm.

Returned Value:

CagdCrvStruct *: An approximation to the offset curve.

See Also:
SymbCrvOffset SymbCrvSubdivOffset SymbSrfOffset SymbSrfSubdivOffset SymbCrvAdapOffset SymbCrvAdapOffsetTrim SymbCrvMatchingOffset
Keywords:
offset

## SymbCrvMatchingOffset

(symb_lib/offset.c:852)
Prototype:

      CagdCrvStruct *SymbCrvMatchingOffset(CagdCrvStruct *Crv,
                                           CagdRType OffsetDist,
                                           CagdRType Tolerance)

Description:
Computes an offset to a freeform curve using matching of tangent fields. The given curve is split at all its inflection points, made sure it spans less than 90 degrees, and then is matched against an arc of the proper angular span of tangents. Unlike other offset methods, this method allways preserves the distance between the original curve ans its offset. The error in this methods can surface only in the non orthogonality of the offset direction.
Parameters:

Crv: | To approximate its offset curve with distance OffsetDist.
--- | ---
OffsetDist: | Amount of offset. Negative denotes other offset direction.
Tolerance: | Of angular discrepancy that is allowed.

Returned Value:

CagdCrvStruct *: The offset curve approximation.

See Also:
SymbCrvOffset SymbCrvSubdivOffset SymbSrfOffset SymbSrfSubdivOffset SymbCrvAdapOffset SymbCrvAdapOffsetTrim SymbCrvLeastSquarOffset SymbCrvCrvConvolution
Keywords:

## SymbCrvMergeScalar

(symb_lib/symbolic.c:1512)
Prototype:

      CagdCrvStruct *SymbCrvMergeScalar(CagdCrvStruct *CrvW,
                                        CagdCrvStruct *CrvX,
                                        CagdCrvStruct *CrvY,
                                        CagdCrvStruct *CrvZ)

Description:
Given a set of scalar curves, treat them as coordinates into a new curve. Assumes at least CrvX is not NULL in which a scalar curve is returned. Assumes CrvX/Y/Z/W are either E1 or P1 in which the weights are assumed to be identical and can be ignored if CrvW exists or copied otheriwse.
Parameters:

CrvW: | The weight component of new constructed curve, if have any.
--- | ---
CrvX: | The X component of new constructed curve.
CrvY: | The Y component of new constructed curve, if have any.
CrvZ: | The Z component of new constructed curve, if have any.

Returned Value:

CagdCrvStruct *: A new curve constructed from given scalar curves.

See Also:
SymbSrfMergeScalar SymbCrvSplitScalar
Keywords:
merge symbolic computation

## SymbCrvMult

(symb_lib/symbolic.c:85)
Prototype:

      CagdCrvStruct *SymbCrvMult(CagdCrvStruct *Crv1, CagdCrvStruct *Crv2)

Description:
Given two curves - multiply them coordinatewise. The two curves are promoted to same point type before the multiplication can take place.
Parameters:

Crv1, Crv2: | Two curve to multiply coordinatewise.
--- | ---

Returned Value:

CagdCrvStruct *: The product of Crv1 * Crv2 coordinatewise.

See Also:
SymbCrvDotProd SymbCrvVecDotProd SymbCrvInvert SymbCrvMultScalar
Keywords:
product symbolic computation

## SymbCrvMultScalar

(symb_lib/symbolic.c:313)
Prototype:

      CagdCrvStruct *SymbCrvMultScalar(CagdCrvStruct *Crv1, CagdCrvStruct *Crv2)

Description:
Given two curves - a vector curve Crv1 and a scalar curve Crv2, multiply all Crv1's coordinates by the scalar curve Crv2. Returned curve is a curve representing the product of the two given curves.
Parameters:

Crv1, Crv2: | Two curve to multiply.
--- | ---

Returned Value:

CagdCrvStruct *: A curve representing the product of Crv1 and Crv2.

See Also:
SymbCrvDotProd SymbCrvVecDotProd SymbCrvMult SymbCrvCrossProd SymbSrfMultScalar
Keywords:
product symbolic computation

## SymbCrvMultiResCompos

(symb_lib/multires.c:237)
Prototype:

      CagdCrvStruct *SymbCrvMultiResCompos(SymbMultiResCrvStruct *MRCrv)

Description:
Given a multi resolution decomposition of a Bspline curve, computes the regular Bspline curve out of it. *
Parameters:

MRCrv: | A multi resolution decomposition of a curve.
--- | ---

Returned Value:

CagdCrvStruct *: A curve that adds up all components of the multi resolution decomposition MRCrv.

Keywords:
multi resolution least square decomposition

## SymbCrvMultiResComposAtT

(symb_lib/multires.c:266)
Prototype:

      CagdCrvStruct *SymbCrvMultiResComposAtT(SymbMultiResCrvStruct *MRCrv,
                                              CagdRType T)

Description:
Given a multi resolution decomposition of a Bspline curve, computes a regular Bspline curve out of it representing the decomposed curve at the multi resolution hierarchy level of T. Although decomposition is discrete, T can be any real number between these discrete levels and a linear interpolation of adjacent levels is exploited.
Parameters:

MRCrv: | A multi resolution decomposition of a curve.
--- | ---
T: | A mult resolution hierarcy level to compute curve for.

Returned Value:

CagdCrvStruct *: A curve that adds up all components of the multi resolution decomposition MRCrv up to and including level T.

Keywords:
multi resolution least square decomposition

## SymbCrvMultiResCopy

(symb_lib/multires.c:575)
Prototype:

      SymbMultiResCrvStruct *SymbCrvMultiResCopy(SymbMultiResCrvStruct *MRCrvOrig)

Description:
Given a multi resolution decomposition of a Bspline curve, copy it.
Parameters:

MRCrv: | A multi resolution decomposition of a curve to copy.
--- | ---

Returned Value:

SymbMultiResCrvStruct *: A duplicated structure of MRCrv.

Keywords:
multi resolution least square decomposition

## SymbCrvMultiResDecomp

(symb_lib/multires.c:37)
Prototype:

      SymbMultiResCrvStruct *SymbCrvMultiResDecomp(CagdCrvStruct *Crv, int Discont)

Description:
Given a Bspline curve, computes a hierarch of Bspline curves, each being represented using a subspace of the previous, upto a curve with no interior knots (i.e. a polynomial Bezier). However, if Discont == TRUE, then C1 discontinuities are preserved through out the hierarchy decomposition. Each level in hierarchy has approximately half the number of control points of the previous one. Least square curve fitting is used to build the hierarchy.
Parameters:

Crv: | To compute a least square multi resolution decomposition for.
--- | ---
Discont: | Do we want to preserve discontinuities?

Returned Value:

SymbMultiResCrvStruct *: A multi resolution curve structure hold the multi resolution decomposition of Crv.

Keywords:
multi resolution least square decomposition

## SymbCrvMultiResEdit

(symb_lib/multires.c:325)
Prototype:

      void SymbCrvMultiResEdit(SymbMultiResCrvStruct *MRCrv,
                               CagdRType t,
                               CagdVType TransDir,
                               CagdRType Level,
                               CagdRType FracLevel)

Description:
Given a multi resolution decomposition of a Bspline curve, edit it by modifying its Level'th Level according to the TransDir of Position at parametr t. Level can be a fraction number between the discrete levels of the decomposition denoting a linear blend of two neighboring discrete levels. Editing is performed in place.
Parameters:

MRCrv: | A multi resolution decomposition of a curve to edit it in place.
--- | ---
t: | Parameter value at which to modify MRCrv.
TransDir: | Directional tranlation transformation to apply.
Level: | Of multi resolution hierarchy to edit.
FracLevel: | The fraction level to edit - will blend two neighboring levels.
SpanDiscont: | re we allowed to cross over discontinuities?

Returned Value:

void

Keywords:
multi resolution least square decomposition

## SymbCrvMultiResFree

(symb_lib/multires.c:514)
Prototype:

      void SymbCrvMultiResFree(SymbMultiResCrvStruct *MRCrv)

Description:
Given a multi resolution decomposition of a Bspline curve, free it.
Parameters:

MRCrv: | A multi resolution decomposition of a curve to free.
--- | ---

Returned Value:

void

Keywords:
multi resolution least square decomposition

## SymbCrvMultiResNew

(symb_lib/multires.c:544)
Prototype:

      SymbMultiResCrvStruct *SymbCrvMultiResNew(int Levels, CagdBType Periodic)

Description:
Allocates a data structure for multi resolution decomposition of a Bspline curve of Levels levels and possiblt periodic.
Parameters:

Levels: | Number of levels to expect in the decomposition.
--- | ---
Periodic: | Is the curve periodic?

Returned Value:

SymbMultiResCrvStruct *: A structure to hold a multi resolution decomposition of a curve of Levels levels.

Keywords:
multi resolution least square decomposition

## SymbCrvMultiResRefineLevel

(symb_lib/multires.c:432)
Prototype:

      CagdRType *SymbCrvMultiResRefineLevel(SymbMultiResCrvStruct *MRCrv,
                                            CagdRType T,
                                            int SpanDiscont)

Description:
Given a multi resolution decomposition of a Bspline curve, refine it at neighborhood of parameter value t, in place.
Parameters:

MRCrv: | A multi resolution decomposition of a curve, to refine in place.
--- | ---
T: | Parameter value at which to refine MRCrv.
SpanDiscont: | o we want to refine beyond discontinuities?

Returned Value:

CagdRType *: A pointer to an array of two real numbers holding the domain in MRCrv that was refined.

Keywords:
multi resolution least square decomposition

## SymbCrvOffset

(symb_lib/offset.c:51)
Prototype:

      CagdCrvStruct *SymbCrvOffset(CagdCrvStruct *Crv,
                                   CagdRType OffsetDist,
                                   CagdBType BezInterp)

Description:
Given a curve and an offset amount OffsetDist, returns an approximation to the offset curve by offseting the control polygon in the normal direction.
Parameters:

Crv: | To approximate its offset curve with distance OffsetDist.
--- | ---
OffsetDist: | Amount of offset. Negative denotes other offset direction.
BezInterp: | If TRUE, control points are interpolated when the curve is reduced to a Bezier form. Otherwise, control points are translated OffsetDist amount only, under estimating the Offset.

Returned Value:

CagdCrvStruct *: An approximation to the offset curve.

See Also:
SymbCrvSubdivOffset SymbSrfOffset SymbSrfSubdivOffset SymbCrvAdapOffset SymbCrvAdapOffsetTrim SymbCrvLeastSquarOffset SymbCrvMatchingOffset
Keywords:
offset

## SymbCrvOrthotomic

(symb_lib/orthotom.c:34)
Prototype:

      CagdCrvStruct *SymbCrvOrthotomic(CagdCrvStruct *Crv,
                                       CagdPType P,
                                       CagdRType K)

Description:
Computes the K-orthotomic of a curve with respect to point P:

          P + K < (C(t) - P), N(t) > N(t)

See "Fundamentals of Computer Aided Geometric Design", by J. Hoschek and and D. Lasser.
Parameters:

Crv: | To compute its K-orthotomic
--- | ---
P: | The points to which the K-orthotomic is computed for Crv for.
K: | The magnitude of the orthotomic function.

Returned Value:

CagdCrvStruct *: The K-orthotomic

See Also:
SymbSrfOrthotomic
Keywords:

## SymbCrvPosNegWeights

(symb_lib/symbzero.c:369)
Prototype:

      CagdBType SymbCrvPosNegWeights(CagdCrvStruct *Crv)

Description:
Returns TRUE iff the Crv is not rational or rational with weights that are entirely positive or entirely negative.
Parameters:

Crv: | To examine for same sign weights, if any.
--- | ---

Returned Value:

CagdBType: TRUE if no weights or all of same sign.

Keywords:
symbolic computation

## SymbCrvPtBisectorSrf3D

(symb_lib/crv_skel.c:843)
Prototype:

      CagdSrfStruct *SymbCrvPtBisectorSrf3D(CagdCrvStruct *Crv,
                                            CagdPType Pt,
                                            CagdRType RulingScale)

Description:
Computes the bisector surface of a curve in arbitrary general three space position and a point in three space.
Parameters:

Crv: | Three space curve to compute its bisector surface with Pt.
--- | ---
Pt: | A point in three space to compute its bisector with Crv.
RulingScale: | The scaling factor for the ruling direction.

Returned Value:

CagdSrfStruct *: The bisector surface.

See Also:
SymbCrvDiameter SymbCrvCnvxHull SymbCrvBisectorsSrf SymbCrvCrvBisectorSrf3D SymbSrfPtBisectorSrf3D
Keywords:
bisector

## SymbCrvPtTangents

(symb_lib/crv_tans.c:43)
Prototype:

      CagdPtStruct *SymbCrvPtTangents(CagdCrvStruct *Crv,
                                      CagdPType Pt,
                                      RealType Tolerance)

Description:
Computes the points on a C1 freeform planar Bspline curve, Crv, that a line tangent to Crv there goes through point Pt. That is,

                  (C(t) - P) || C'(t),

where || denotes a parallel constraint.
Parameters:

Crv: | To compute its tangent lines through Pt.
--- | ---
Pt: | Point of origin, all tangents to Crv goes through.
Tolerance: | ccuracy of computation.

Returned Value:

CagdPtStruct *: A list of parameter location on Crv with tangent lines through Pt. Parameters are save in the X coordinate.

See Also:
SymbCrvCnvxHull SymbTangentToCrvAtTwoPts SymbCrvDiameter
Keywords:

## SymbCrvRtnlMult

(symb_lib/symbolic.c:499)
Prototype:

      CagdCrvStruct *SymbCrvRtnlMult(CagdCrvStruct *Crv1X,
                                     CagdCrvStruct *Crv1W,
                                     CagdCrvStruct *Crv2X,
                                     CagdCrvStruct *Crv2W,
                                     CagdBType OperationAdd)

Description:
Given two curves - multiply them using the quotient product rule:

     X = X1 W2 +/- X2 W1

All provided curves are assumed to be non rational scalar curves. Returned is a non rational scalar curve (CAGD_PT_E1_TYPE).
Parameters:

Crv1X: | Numerator of first curve.
--- | ---
Crv1W: | Denominator of first curve.
Crv2X: | Numerator of second curve.
Crv2W: | Denominator of second curve.
OperationAdd: | TRUE for addition, FALSE for subtraction.

Returned Value:

CagdCrvStruct *: The result of Crv1X Crv2W +/- Crv2X Crv1W.

See Also:
SymbCrvDotProd SymbCrvVecDotProd SymbCrvMult SymbCrvMultScalar
Keywords:
product symbolic computation

## SymbCrvScalarScale

(symb_lib/symbolic.c:170)
Prototype:

      CagdCrvStruct *SymbCrvScalarScale(CagdCrvStruct *Crv, CagdRType Scale)

Description:
Given a curve, scale it by Scale.
Parameters:

Crv: | A curve to scale by magnitude Scale.
--- | ---
Scale: | Scaling factor.

Returned Value:

CagdCrvStruct *: A curves scaled by Scale compared to Crv.

See Also:
SymbCrvDotProd SymbCrvVecDotProd SymbCrvMult SymbCrvMultScalar
Keywords:
scaling symbolic computation

## SymbCrvSplitScalar

(symb_lib/symbolic.c:1457)
Prototype:

      void SymbCrvSplitScalar(CagdCrvStruct *Crv,
                              CagdCrvStruct **CrvW,
                              CagdCrvStruct **CrvX,
                              CagdCrvStruct **CrvY,
                              CagdCrvStruct **CrvZ)

Description:
Given a curve splits it to its scalar component curves. Ignores all dimensions beyond the third, Z, dimension.
Parameters:

Crv: | Curve to split.
--- | ---
CrvW: | The weight component of Crv, if have any.
CrvX: | The X component of Crv.
CrvY: | The Y component of Crv, if have any.
CrvZ: | The Z component of Crv, if have any.

Returned Value:

void

See Also:
SymbSrfSplitScalar SymbCrvMergeScalar
Keywords:
split symbolic computation

## SymbCrvSqrtScalar

(symb_lib/arc_len.c:244)
Prototype:

      CagdCrvStruct *SymbCrvSqrtScalar(CagdCrvStruct *OrigCrv, CagdRType Epsilon)

Description:
Computes the curve which is a square root approximation to a given scalar curve, to within epsilon.
Parameters:

OrigCrv: | Scalar curve to approximate its square root function.
--- | ---
Epsilon: | Accuracy of approximation.

Returned Value:

CagdCrvStruct *: A curve approximating the square root of OrigCrv.

Keywords:
square root

## SymbCrvSub

(symb_lib/symbolic.c:62)
Prototype:

      CagdCrvStruct *SymbCrvSub(CagdCrvStruct *Crv1, CagdCrvStruct *Crv2)

Description:
Given two curves - subtract them coordinatewise. The two curves are promoted to same point type before the multiplication can take place. Furthermore, order and continuity are matched as well.
Parameters:

Crv1, Crv2: | Two curve to subtract coordinatewise.
--- | ---

Returned Value:

CagdCrvStruct *: The difference of Crv1 - Crv2 coordinatewise.

See Also:
SymbCrvAdd SymbCrvMult
Keywords:
subtraction symbolic computation

## SymbCrvSubdivOffset

(symb_lib/offset.c:185)
Prototype:

      CagdCrvStruct *SymbCrvSubdivOffset(CagdCrvStruct *Crv,
                                         CagdRType OffsetDist,
                                         CagdRType Tolerance,
                                         CagdBType BezInterp)

Description:
Given a curve and an offset amount OffsetDist, returns an approximation to the offset curve by offseting the control polygon in the normal direction. If resulting offset is not satisfying the required tolerance the curve is subdivided and the algorithm recurses on both parts.
Parameters:

Crv: | To approximate its offset curve with distance OffsetDist.
--- | ---
OffsetDist: | Amount of offset. Negative denotes other offset direction.
Tolerance: | Accuracy control.
BezInterp: | If TRUE, control points are interpolated when the curve is reduced to a Bezier form. Otherwise, control points are translated OffsetDist amount only, under estimating the Offset.

Returned Value:

CagdCrvStruct *: An approximation to the offset curve, to within Tolerance.

See Also:
SymbCrvOffset SymbSrfOffset SymbSrfSubdivOffset SymbCrvAdapOffset SymbCrvAdapOffsetTrim SymbCrvLeastSquarOffset SymbCrvMatchingOffset
Keywords:
offset

## SymbCrvUnitLenScalar

(symb_lib/arc_len.c:112)
Prototype:

      CagdCrvStruct *SymbCrvUnitLenScalar(CagdCrvStruct *OrigCrv,
                                          CagdBType Mult,
                                          CagdRType Epsilon)

Description:
Normalizes the given vector field curve to be a unit length curve, by computing a scalar curve to multiply with this vector field curve. Returns the multiplied curve if Mult, or otherwise just the scalar curve.
Parameters:

OrigCrv: | Curve to approximate a unit size for.
--- | ---
Mult: | Do we want to multiply the computed scalar curve with Crv?
Epsilon: | Accuracy required of this approximation.

Returned Value:

CagdCrvStruct *: A scalar curve to multiply OrigCrv so a unit size curve will return if Mult is FALSE, or the actual unit size vector field curve, if Mult.

Keywords:
unit vector field

## SymbCrvVecDotProd

(symb_lib/symbolic.c:252)
Prototype:

      CagdCrvStruct *SymbCrvVecDotProd(CagdCrvStruct *Crv, CagdVType Vec)

Description:
Given a curve and a vector - computes their dot product. Returned curve is a scalar curve representing the dot product.
Parameters:

Crv: | Curve to multiply and compute a dot product for.
--- | ---
Vec: | Vector to project Crv onto.

Returned Value:

CagdCrvStruct *: A scalar curve representing the dot product of Crv . Vec.

See Also:
SymbCrvDotProd SymbCrvMult SymbCrvMultScalar SymbCrvCrossProd
Keywords:
product dot product symbolic computation

## SymbCrvZeroSet

(symb_lib/symbzero.c:43)
Prototype:

      CagdPtStruct *SymbCrvZeroSet(CagdCrvStruct *Crv, int Axis, CagdRType Epsilon)

Description:
Computes the zero set of a given curve, in the given axis (1-3 for X-Z). Returned is a list of the zero set points holding the parameter values att Pt[0] of each point.
Parameters:

Crv: | To compute its zero set.
--- | ---
Axis: | The axis of Crv to compute zero set for.
Epsilon: | Tolerance control.

Returned Value:

CagdPtStruct *: List of parameter values form which Crv is zero in axis Axis.

Keywords:
zero set symbolic computation

## SymbDescribeError

(symb_lib/symb_err.c:68)
Prototype:

      char *SymbDescribeError(SymbFatalErrorType ErrorNum)

Description:
Returns a string describing a the given error. Errors can be raised by any member of this symb library as well as other users. Raised error will cause an invokation of SymbFatalError function which decides how to handle this error. SymbFatalError can for example, invoke this routine with the error type, print the appropriate message and quit the program.
Parameters:

ErrorNum: | Type of the error that was raised.
--- | ---

Returned Value:

char *: A string describing the error type.

Keywords:
error handling

## SymbDistCrvLine

(symb_lib/distance.c:166)
Prototype:

      CagdRType SymbDistCrvLine(CagdCrvStruct *Crv,
                                CagdLType Line,
                                CagdBType MinDist,
                                CagdRType Epsilon)

Description:
Given a curve and a line, finds the nearest point (if MinDist) or the farest location (if MinDist FALSE) from the curve to the given line. Returned is the parameter value of the curve. Let Crv be (x(t), y(t)). By substituting x(t) and y(t) into the line equation, we derive the distance function. Its zero set, combined with the zero set of its derivative provide the needed extreme distances.
Parameters:

Crv: | The curve to find its nearest (farest) point to Line.
--- | ---
Line: | The line to find the nearest (farest) point on Crv to it.
MinDist: | If TRUE nearest points is needed, if FALSE farest.
Epsilon: | Accuracy of computation.

Returned Value:

CagdRType: Parameter value in the parameter space of Crv of the nearest (farest) point to line Line.

Keywords:
curve line distance

## SymbDistCrvPoint

(symb_lib/distance.c:47)
Prototype:

      CagdRType SymbDistCrvPoint(CagdCrvStruct *Crv,
                                 CagdPType Pt,
                                 CagdBType MinDist,
                                 CagdRType Epsilon)

Description:
Given a curve and a point, finds the nearest point (if MinDist) or the farest location (if MinDist FALSE) from the curve to the given point. Returned is the parameter value of the curve. Computes the zero set of (Crv(t) - Pt) . Crv'(t).
Parameters:

Crv: | The curve to find its nearest (farest) point to Pt.
--- | ---
Pt: | The point to find the nearest (farest) point on Crv to it.
MinDist: | If TRUE nearest points is needed, if FALSE farest.
Epsilon: | Accuracy of computation.

Returned Value:

CagdRType: Parameter value in the parameter space of Crv of the nearest (farest) point to point Pt.

Keywords:
curve point distance

## SymbEnvOffsetFromCrv

(symb_lib/offset.c:1133)
Prototype:

      CagdSrfStruct *SymbEnvOffsetFromCrv(CagdCrvStruct *Crv,
                                          CagdRType Height,
                                          CagdRType Tolerance)

Description:
Computes an elevated surface emenating from the given C^1 continuous curve in all directions like a fire front. The surface gets away from Crv in a slope of 45 degrees. This elevated surface is an approximation of the real envelope only, as prescribed by Tolerance. If the given curve is closed, it is assume to be C^1 at the end point as well. For a close curve, two surfaces are actually returned - one for the inside and one for the outside firefront. This function employs SymbCrvSubdivOffset for the offset computations.
Parameters:

Crv: | The curve to process.
--- | ---
Height: | The height of the elevated surface (also the width of the offset operation.
Tolerance: | Accuracy of the elevated surface approximation.

Returned Value:

CagdSrfStruct *: A freeform surface approximating the elevated surface for open curve Crv, or two surfaces for the case of closed curve Crv.

Keywords:

## SymbEvalSrfCurvPrep

(symb_lib/evalcurv.c:33)
Prototype:

      void SymbEvalSrfCurvPrep(CagdSrfStruct *Srf, CagdBType Init)

Description:
Preprocess a given surface so we can evaluate curvature properties from it efficiently, at every point. See SymbEvalCurvature for actual curvature at surface point evaluations
Parameters:

Srf: | Surface to preprocess.
--- | ---
Init: | TRUE for initializing, FALSE for clearing out.

Returned Value:

void

See Also:
SymbEvalCurvature
Keywords:
curvature

## SymbEvalSrfCurvature

(symb_lib/evalcurv.c:95)
Prototype:

      int SymbEvalSrfCurvature(CagdSrfStruct *Srf,
                               CagdRType U,
                               CagdRType V,
                               CagdBType DirInUV,
                               CagdRType *K1,
                               CagdRType *K2,
                               CagdVType D1,
                               CagdVType D2)

Description:
Evaluate a given surface's curvature properties. Returns the principal curvatures and directions for the given surface location. This function must be invoked after SymbEvalSrfCurvPrep was called to initialize the proper data structures, for fast curvature at a point evaluation. SymbEvalSrfCurvPrep should be called at the end to release these data structures.
Parameters:

Srf: | Surface to evaluate its curvature properties.
--- | ---
U, V: | Location of evaluation.
DirInUV: | If TRUE principal directions are given in UV, otherwise in Euclidean 3-space.
K1, K2: | Principal curvatures.
D1, D2: | Principal directions.

Returned Value:

int: TRUE if succesful, FALSE otherwise.

See Also:
SymbEvalSrfCurvPrep
Keywords:
curvature

## SymbExtremumCntPtVals

(symb_lib/symbolic.c:1835)
Prototype:

      CagdRType *SymbExtremumCntPtVals(CagdRType **Points,
                                       int Length,
                                       CagdBType FindMinimum)

Description:
Given a control polygon/mesh, computes the extremum values of them all.
Parameters:

Points: | To scan for extremum values.
--- | ---
Length: | Length of each vector in Points.
FindMinimum: | TRUE for minimum, FALSE for maximum.

Returned Value:

CagdRType *: A vector holding PType point with the extremum values of each axis independently.

Keywords:
extremum values symbolic computation

## SymbFatalError

(symb_lib/symb_ftl.c:27)
Prototype:

      void SymbFatalError(SymbFatalErrorType ErrID)

Description:
Trap Symb_lib errors right here. Provides a default error handler for the symb library. Gets an error description using SymbDescribeError, prints it and exit the program using exit.
Parameters:

ErrID: | Error type that was raised.
--- | ---

Returned Value:

void

Keywords:
error handling

## SymbLclDistCrvLine

(symb_lib/distance.c:241)
Prototype:

      CagdPtStruct *SymbLclDistCrvLine(CagdCrvStruct *Crv,
                                       CagdLType Line,
                                       CagdRType Epsilon,
                                       CagdBType InterPos,
                                       CagdBType ExtremPos)

Description:
Given a curve and a line, finds the local extreme distance points on the curve to the given line. Returned is a list of parameter value with local extreme distances. Let Crv be (x(t), y(t)). By substituting x(t) and y(t) into the line equation, we derive the distance function. Its zero set, possibly combined with the zero set of its derivative provide the needed extreme distances.
Parameters:

Crv: | The curve to find its nearest (farest) point to Line.
--- | ---
Line: | The line to find the nearest (farest) point on Crv to it.
Epsilon: | Accuracy of computation.
InterPos: | Do we want the intersection locations?
ExtremPos: | Do we want the extremum distance locations?

Returned Value:

CagdPtStruct *: A list of parameter values of extreme distance locations.

Keywords:
curve line distance

## SymbLclDistCrvPoint

(symb_lib/distance.c:116)
Prototype:

      CagdPtStruct *SymbLclDistCrvPoint(CagdCrvStruct *Crv,
                                        CagdPType Pt,
                                        CagdRType Epsilon)

Description:
Given a curve and a point, find the local extremum distance points on the curve to the given point. Returned is a list of parameter value with local extremum. Computes the zero set of (Crv(t) - Pt) . Crv'(t).
Parameters:

Crv: | The curve to find its extreme distance locations to Pt.
--- | ---
Pt: | The point to find the extreme distance locations from Crv.
Epsilon: | Accuracy of computation.

Returned Value:

CagdPtStruct *: A list of parameter values of extreme distance locations.

Keywords:
curve point distance

## SymbLimitCrvArcLen

(symb_lib/arc_len.c:31)
Prototype:

      CagdCrvStruct *SymbLimitCrvArcLen(CagdCrvStruct *Crv, CagdRType MaxLen)

Description:
Subdivides the given curves to curves, each with size of control polygon less than or equal to MaxLen. Returned is a list of curves.
Parameters:

Crv: | To subdivide into curves, each with control polygon length less than MaxLen.
--- | ---
MaxLen: | Maximum length of control polygon to allow.

Returned Value:

CagdCrvStruct *: List of subdivided curves from Crv, each with control polygon size of less than MaxLen.

Keywords:
arc length

## SymbMakePosCrvCtlPolyPos

(symb_lib/curvatur.c:523)
Prototype:

      CagdCrvStruct *SymbMakePosCrvCtlPolyPos(CagdCrvStruct *OrigCrv)

Description:
Given a scalar curve that is positive, refine it until all its control points has positive coefficients. Always returns a Bspline curve.
Parameters:

OrigCrv: | To refine until all its control points are non negative.
--- | ---

Returned Value:

CagdCrvStruct *: Refined positive curve with positive control points.

Keywords:
refinement

## SymbMeshAddSub

(symb_lib/symbolic.c:1400)
Prototype:

      void SymbMeshAddSub(CagdRType **DestPoints,
                          CagdRType **Points1,
                          CagdRType **Points2,
                          CagdPointType PType,
                          int Size,
                          CagdBType OperationAdd)

Description:
Given two control polygons/meshes - add them coordinatewise. If mesh is rational, weights are assumed identical and are just copied.
Parameters:

DestPoints: | Where addition or difference result should go to.
--- | ---
Points1: | First control polygon/mesh.
Points2: | Second control polygon/mesh.
PType: | Type of points we are dealing with.
Size: | Length of each vector in Points1/2.
OperationAdd: | TRUE of addition, FALSE for subtraction.

Returned Value:

void

See Also:
SymbSrfSub SymbSrfAdd
Keywords:
addition subtraction symbolic computation

## SymbNormalConeForSrf

(symb_lib/nrmlcone.c:31)
Prototype:

      SymbNormalConeStruct *SymbNormalConeForSrf(CagdSrfStruct *Srf)

Description:
Computes a normal cone for a given surface, by computing the normal field of the surface and deriving the angular span of this normal field by testing the angular span of all control vector in the normal field. A normal field is searched for as "_NormalSrf" attribute in Srf or computed locally of no such attribute is found.
Parameters:

Srf: | To compute a normal cone for.
--- | ---

Returned Value:

SymbNormalConeStruct *: The computed normal cone.

See Also:
SymbNormalConeOverlap
Keywords:
normals normal bound

## SymbNormalConeOverlap

(symb_lib/nrmlcone.c:123)
Prototype:

      CagdBType SymbNormalConeOverlap(SymbNormalConeStruct *NormalCone1,
                                      SymbNormalConeStruct *NormalCone2)

Description:
Tests if the given two normal cones overlap or not.
Parameters:

NormalCone1, NormalCone2: | The two normal cones to test for angular overlap.
--- | ---

Returned Value:

CagdBType: TRUE if overlap, FALSE otherwise.

See Also:
SymbNormalConeOverlap
Keywords:
normals normal bound

## SymbPiecewiseRuledSrfApprox

(symb_lib/prisa.c:122)
Prototype:

      CagdSrfStruct *SymbPiecewiseRuledSrfApprox(CagdSrfStruct *Srf,
                                                 CagdBType ConsistentDir,
                                                 CagdRType Epsilon,
                                                 CagdSrfDirType Dir)

Description:
Constructs a piecewise ruled surface approximation to the given surface, Srf, in the given direction, Dir, that is close to the surface to within Epsilon. If ConsitentDir then ruled surface parametrization is set to be the same as original surface Srf. Otherwise, ruling dir is always CAGD_CONST_V_DIR. Surface is assumed to have point types E3 or P3 only.
Parameters:

Srf: | To approximate using piecewise ruled surfaces.
--- | ---
ConsistentDir: | o we want parametrization to be the same as Srf?
Epsilon: | Accuracy of piecewise ruled surface approximation.
Dir: | Direction of piecewise ruled surface approximation. Either U or V.

Returned Value:

CagdSrfStruct *: A list of ruled surfaces approximating Srf to within Epsilon in direction Dir.

Keywords:
layout prisa ruled surface approximation

## SymbPrisaRuledSrf

(symb_lib/prisa.c:362)
Prototype:

      CagdSrfStruct *SymbPrisaRuledSrf(CagdSrfStruct *Srf,
                                       int SamplesPerCurve,
                                       CagdRType Space,
                                       CagdVType Offset)

Description:
Layout a single ruled surface, by approximating it as a set of polygons. The given ruled surface might be non-developable, in which case approximation will be of a surface with no twist. The ruled surface is assumed to be constructed using CagdRuledSrf and that the ruled direction is consisnt and is always CAGD_CONST_V_DIR.
Parameters:

Srf: | A ruled surface to layout flat on the XY plane.
--- | ---
SamplesPerCurve: | uring the approximation of a ruled surface as a developable surface.
Space: | Increment on Y on the offset vector, after this surface was placed in the XY plane.
Offset: | A vector in the XY plane to denote the amount of translation for the flatten surface in the XY plane.

Returned Value:

CagdSrfStruct *: A planar surface in the XY plane approximating the falttening process of Srf.

Keywords:
layout prisa

## SymbPrmtSclrCrvTo2D

(symb_lib/symbolic.c:1733)
Prototype:

      CagdCrvStruct *SymbPrmtSclrCrvTo2D(CagdCrvStruct *Crv,
                                         CagdRType Min,
                                         CagdRType Max)

Description:
Promote a scalar curve to two dimensions by moving the scalar axis to be the Y axis and adding monotone X axis.
Parameters:

Crv: | Scalar curve to promose to a two dimensional one.
--- | ---
Min: | Minimum of new monotone X axis.
Max: | Maximum of new monotone X axis.

Returned Value:

CagdCrvStruct *: A two dimensional curve.

See Also:
SymbPrmtSclrSrfTo3D
Keywords:
promotion conversion symbolic computation

## SymbPrmtSclrSrfTo3D

(symb_lib/symbolic.c:1782)
Prototype:

      CagdSrfStruct *SymbPrmtSclrSrfTo3D(CagdSrfStruct *Srf,
                                         CagdRType UMin,
                                         CagdRType UMax,
                                         CagdRType VMin,
                                         CagdRType VMax)

Description:
Promote a scalar surface to three dimensions by moving the scalar axis to be the Z axis and adding monotone X and Y axes.
Parameters:

Srf: |
--- | ---
UMin: | Minimum of new monotone X axis.
UMax: | Maximum of new monotone X axis.
VMin: | Minimum of new monotone Y axis.
VMax: | Maximum of new monotone X axis.

Returned Value:

CagdSrfStruct *: A three dimensional surface.

See Also:
SymbPrmtSclrCrvTo2D
Keywords:
promotion conversion symbolic computation

## SymbSetAdapIsoExtractMinLevel

(symb_lib/adap_iso.c:57)
Prototype:

      void SymbSetAdapIsoExtractMinLevel(int MinLevel)

Description:
Sets minimum level of subdivision forced in the adaptive iso extraction.
Parameters:

MinLevel: | At least that many subdivision will occur.
--- | ---

Returned Value:

void

Keywords:
adaptive isocurves

## SymbSrf2Curves

(symb_lib/symbpoly.c:185)
Prototype:

      CagdCrvStruct *SymbSrf2Curves(CagdSrfStruct *Srf, int NumOfIsocurves[2])

Description:
Routine to extract from a surface NumOfIsoline isocurve list in each param. direction. Iso parametric curves are sampled equally spaced in parametric space. NULL is returned in case of an error, otherwise list of CagdCrvStruct.
Parameters:

Srf: | To extract isoparametric curves from.
--- | ---
NumOfIsocurves: | In each (U or V) direction.

Returned Value:

CagdCrvStruct *: List of extracted isoparametric curves. These curves inherit the order and continuity of the original Srf. NULL is returned in case of an error.

See Also:
BspSrf2PCurves BzrSrf2Curves
Keywords:
curves isoparametric curves

## SymbSrf2OptPolysBilinPolyError

(symb_lib/symbsply.c:295)
Prototype:

      CagdRType SymbSrf2OptPolysBilinPolyError(CagdSrfStruct *Srf,
                                               CagdSrfDirType Dir,
                                               int SubdivLevel)

Description:
Routine to estimate the curvature of the patch using a bilinear approx.
Parameters:

Srf: | To estimate curvature for.
--- | ---
Dir: | Currently not used.
SubdivLevel: | ubdivision level of surface.

Returned Value:

CagdRType: Curvature estimated.

Keywords:
polygonization surface approximation

## SymbSrf2OptPolysCurvatureError

(symb_lib/symbsply.c:204)
Prototype:

      CagdRType SymbSrf2OptPolysCurvatureError(CagdSrfStruct *Srf,
                                               CagdSrfDirType Dir,
                                               int SubdivLevel)

Description:
Routine to estimate the curvature of the patch using k1^2 + k2^2. Assumes the availability of the GlblCrvtrSqrSrf for Srf. This estimate is too loose and in fact is not recommended!
Parameters:

Srf: | To estimate curvature for.
--- | ---
Dir: | Currently not used.
SubdivLevel: | ubdivision level of surface.

Returned Value:

CagdRType: Curvature estimated.

Keywords:
polygonization surface approximation

## SymbSrf2OptPolysCurvatureErrorPrep

(symb_lib/symbsply.c:175)
Prototype:

      void SymbSrf2OptPolysCurvatureErrorPrep(CagdSrfStruct *Srf)

Description:
Routine to compute the scalar field of k1^2 + k2^2 (k1, k2 are principal curvatures) for the surface Srf, into GlblCrvtrSqrSrf. This scalar field is used by SymbSrf2OptPolysCurvatureError function.
Parameters:

Srf: | To compute the curvature bound for as an optional preprocess for function SymbSrf2OptPolysCurvatureError.
--- | ---

Returned Value:

void

Keywords:
polygonization surface approximation

## SymbSrf2OptPolysIsoDirCurvatureErrorPrep

(symb_lib/symbsply.c:362)
Prototype:

      void SymbSrf2OptPolysIsoDirCurvatureErrorPrep(CagdSrfStruct *Srf)

Description:
Routine to precompute the scalar field of kn^u and kn^v (the normal curvatures in the iso parametric directions). These scalar fields are used to determined the prefered subdivision location of Srf.
Parameters:

Srf: | To compute the curvature bound in the isoparametric direction.
--- | ---

Returned Value:

void

Keywords:
polygonization surface approximation

## SymbSrf2OptimalPolygons

(symb_lib/symbsply.c:410)
Prototype:

      CagdPolygonStruct *SymbSrf2OptimalPolygons(CagdSrfStruct *Srf,
                                      CagdRType Tolerance,
                                      SymbPlSubdivStrategyType SubdivDirStrategy,
                                      SymbPlErrorFuncType SrfPolyApproxErr,
                                      CagdBType ComputeNormals,
                                      CagdBType FourPerFlat,
                                      CagdBType ComputeUV)

Description:
Routine to convert a single surface to a set of triangles approximating it. FineNess is controlled via a function that returns an error measure SrfPolyApproxError that is guaranteed to be less than Tolerance.
Parameters:

Srf: | To convert and approximate using triangles.
--- | ---
Tolerance: | Accuracy control.
SubdivDirStrategy: | lternatively in U and V, direction that minimizes the error, etc.
SrfPolyApproxErr: | Using bilinear curvature estimate, k1^2 + k2^2 estimate, etc. Bounds the error call back function. If this function returns a negative value, this whole patch is invalidated and no polygons will be created for it.
ComputeNormals: | Do we want normals to be computed as well?
FourPerFlat: | If TRUE, four triangle per flat surface patch are created, otherwise only two.
ComputeUV: | Do we want UV parameter values with the vertices of the triangles?

Returned Value:

CagdPolygonStruct *: Resulting polygons that approximates Srf.

Keywords:
approximation conversion

## SymbSrf2Polygons

(symb_lib/symbpoly.c:61)
Prototype:

      CagdPolygonStruct *SymbSrf2Polygons(CagdSrfStruct *Srf,
                                          int FineNess,
                                          CagdBType ComputeNormals,
                                          CagdBType FourPerFlat,
                                          CagdBType ComputeUV)

Description:
Routine to convert a single surface to set of triangles approximating it. FineNess is a fineness control on result and the larger it is more triangles may result. A value of 10 is a good starting value. NULL is returned in case of an error, otherwise list of CagdPolygonStruct.
Parameters:

Srf: | To approximate into triangles.
--- | ---
FineNess: | Control on accuracy, the higher the finer.
ComputeNormals: | If TRUE, normal information is also computed.
FourPerFlat: | If TRUE, four triangles are created per flat surface. If FALSE, only 2 triangles are created.
ComputeUV: | If TRUE, UV values are stored and returned as well.

Returned Value:

CagdPolygonStruct *: A list of polygons with optional normal and/or UV parametric information. NULL is returned in case of an error.

See Also:
BzrSrf2Polygons IritSurface2Polygons IritTrimSrf2Polygons BspSrf2Polygons TrimSrf2Polygons
Keywords:
polygonization surface approximation

## SymbSrf2Polylines

(symb_lib/symbpoly.c:120)
Prototype:

      CagdPolylineStruct *SymbSrf2Polylines(CagdSrfStruct *Srf,
                                            int NumOfIsocurves[2],
                                            CagdRType TolSamples,
                                            SymbCrvApproxMethodType Method)

Description:
Routine to convert a single surface to NumOfIsolines polylines in each parametric direction with SamplesPerCurve in each isoparametric curve. Polyline are always E3 of CagdPolylineStruct type. NULL is returned in case of an error, otherwise list of CagdPolylineStruct. Attempt is made to extract isolines along C1 discontinuities first.
Parameters:

Srf: | Srf to extract isoparametric curves from.
--- | ---
NumOfIsocurves: | o extarct from Srf in each (U or V) direction.
TolSamples: | Tolerance of approximation error (Method = 2) or Number of samples to compute on polyline (Method = 0, 1).
Method: | 0 - TolSamples are set uniformly in parametric space, 1 - TolSamples are set optimally, considering the isocurve's curvature. 2 - TolSamples sets the maximum error allowed between the piecewise linear approximation and original curve.

Returned Value:

CagdPolylineStruct *: List of polylines representing a piecewise linear approximation of the extracted isoparamteric curves or NULL is case of an error.

See Also:
BspSrf2Polylines BzrSrf2Polylines IritSurface2Polylines IritTrimSrf2Polylines TrimSrf2Polylines
Keywords:
polylines isoparametric curves

## SymbSrfAdd

(symb_lib/symbolic.c:733)
Prototype:

      CagdSrfStruct *SymbSrfAdd(CagdSrfStruct *Srf1, CagdSrfStruct *Srf2)

Description:
Given two surfaces - add them coordinatewise. The two surfaces are promoted to same point type before the multiplication can take place. Furthermore, order and continuity are matched as well.
Parameters:

Srf1, Srf2: | Two surface to add up coordinatewise.
--- | ---

Returned Value:

CagdSrfStruct *: The summation of Srf1 + Srf2 coordinatewise.

See Also:
SymbSrfSub SymbMeshAddSub SymbSrfMult
Keywords:
addition symbolic computation

## SymbSrfCrossProd

(symb_lib/symbolic.c:1091)
Prototype:

      CagdSrfStruct *SymbSrfCrossProd(CagdSrfStruct *Srf1, CagdSrfStruct *Srf2)

Description:
Given two surfaces - computes their cross product. Returned surface is a scalar surface representing the cross product of the two given surfaces.
Parameters:

Srf1, Srf2: | Two surface to multiply and compute a cross product for.
--- | ---

Returned Value:

CagdSrfStruct *: A scalar surface representing the cross product of Srf1 x Srf2.

See Also:
SymbSrfDotProd SymbSrfVecDotProd SymbSrfScalarScale SymbSrfMultScalar SymbSrfInvert
Keywords:
product cross product symbolic computation

## SymbSrfCurvatureUpperBound

(symb_lib/curvatur.c:1168)
Prototype:

      CagdSrfStruct *SymbSrfCurvatureUpperBound(CagdSrfStruct *Srf)

Description:
Computes curvature upper bound as Xi = k1^2 + k2^2, where k1 and k2 are the principal curvatures. Gij are the coefficients of the first fundamental form and Lij are of the second, using non unit normal n,

         ( G11 L22 + G22 L11 - 2 G12 L12 )^2 - 2 |G| |L|
    Xi = -----------------------------------------------
                               |G|^2 ||n||^2

See: "Second Order Surface Analysis Using Hybrid of Symbolic and Numeric Operators", By Gershon Elber and Elaine Cohen, Transaction on graphics, Vol. 12, No. 2, pp 160-178, April 1993.
Parameters:

Srf: | Surface to compute curvature bound for.
--- | ---

Returned Value:

CagdSrfStruct *: A scalar field representing the curvature bound.

See Also:
SymbSrfFff SymbSrfSff SymbSrfDeterminant2 SymbSrfGaussCurvature SymbSrfMeanEvolute SymbSrfMeanCurvatureSqr SymbSrfIsoFocalSrf SymbSrfIsoDirNormalCurvatureBound
Keywords:
curvature

## SymbSrfDeterminant2

(symb_lib/curvatur.c:765)
Prototype:

      CagdSrfStruct *SymbSrfDeterminant2(CagdSrfStruct *Srf11,
                                         CagdSrfStruct *Srf12,
                                         CagdSrfStruct *Srf21,
                                         CagdSrfStruct *Srf22)

Description:
Computes the expression of Srf11 * Srf22 - Srf12 * Srf21, which is a determinant of a 2 by 2 matrix.
Parameters:

Srf11, Srf12, Srf21, Srf22: | The four factors of the determinant.
--- | ---

Returned Value:

CagdSrfStruct *: A scalar field representing the determinant computation.

See Also:
SymbSrfFff SymbSrfSff SymbSrfGaussCurvature SymbSrfMeanEvolute SymbSrfMeanCurvatureSqr SymbSrfIsoFocalSrf SymbSrfCurvatureUpperBound SymbSrfIsoDirNormalCurvatureBound SymbSrfDeterminant3 SymbCrvDeterminant2
Keywords:
determinant

## SymbSrfDeterminant3

(symb_lib/crv_skel.c:701)
Prototype:

      CagdSrfStruct *SymbSrfDeterminant3(CagdSrfStruct *Srf11,
                                         CagdSrfStruct *Srf12,
                                         CagdSrfStruct *Srf13,
                                         CagdSrfStruct *Srf21,
                                         CagdSrfStruct *Srf22,
                                         CagdSrfStruct *Srf23,
                                         CagdSrfStruct *Srf31,
                                         CagdSrfStruct *Srf32,
                                         CagdSrfStruct *Srf33)

Description:
Computes the expression of a 3 by 3 determinants.
Parameters:

Srf11, Srf12, ..., Srf33: | The nine factors of the determinant.
--- | ---

Returned Value:

CagdSrfStruct *: A scalar field representing the determinant computation.

See Also:
SymbSrfFff SymbSrfSff SymbSrfGaussCurvature SymbSrfMeanEvolute SymbSrfMeanCurvatureSqr SymbSrfIsoFocalSrf SymbSrfCurvatureUpperBound SymbSrfIsoDirNormalCurvatureBound SymbSrfDeterminant2 SymbCrvDeterminant3
Keywords:
determinant

## SymbSrfDistCrvCrv

(symb_lib/distance.c:317)
Prototype:

      CagdSrfStruct *SymbSrfDistCrvCrv(CagdCrvStruct *Crv1, CagdCrvStruct *Crv2)

Description:
Given two curves, creates a bivariate scalar surface representing the distance function square, between them.
Parameters:

Crv1, Crv2: | The two curves, Crv1(u) and Crv2(v), to form their distance function square between them as a bivariate function.
--- | ---

Returned Value:

CagdSrfStruct *: The distance function square d2(u, v) of the distance from Crv1(u) to Crv2(v).

See Also:
SymvCrvCrvInter SymbSrfDistFindPoints
Keywords:
curve curve distance

## SymbSrfDistFindPoints

(symb_lib/distance.c:385)
Prototype:

      CagdPtStruct *SymbSrfDistFindPoints(CagdSrfStruct *Srf,
                                          CagdRType Epsilon,
                                          CagdBType SelfInter)

Description:
Given a scalar surface representing the distance function square between two curves, finds the zero set of the distance surface, if any, and returns it. The given surface is a non negative surface and zero set is its minima. The returned points will contain the two parameter values of the two curves that intersect in the detected zero set points.
Parameters:

Srf: | A bivariate function that represent the distance square function between two curves.
--- | ---
Epsilon: | Accuracy control.
SelfInter: | Should we consider self intersection? That is, is Srf computed from a curve to itself!?

Returned Value:

CagdPtStruct *: A list of parameter values of both curves, at all detected intersection locations.

See Also:
SymbSrfDistCrvCrv SymvCrvCrvInter
Keywords:
curve curve distance curve curve intersection

## SymbSrfDotProd

(symb_lib/symbolic.c:980)
Prototype:

      CagdSrfStruct *SymbSrfDotProd(CagdSrfStruct *Srf1, CagdSrfStruct *Srf2)

Description:
Given two surfaces - computes their dot product. Returned surface is a scalar surface representing the dot product of the two given surfaces.
Parameters:

Srf1, Srf2: | Two surface to multiply and compute a dot product for.
--- | ---

Returned Value:

CagdSrfStruct *: A scalar surface representing the dot product of Srf1 . Srf2.

See Also:
SymbSrfMult SymbSrfVecDotProd SymbSrfScalarScale SymbSrfMultScalar SymbSrfInvert SymbSrfCrossProd
Keywords:
product dot product symbolic computation

## SymbSrfFff

(symb_lib/curvatur.c:686)
Prototype:

      void SymbSrfFff(CagdSrfStruct *Srf,
                      CagdSrfStruct **DuSrf,
                      CagdSrfStruct **DvSrf,
                      CagdSrfStruct **FffG11,
                      CagdSrfStruct **FffG12,
                      CagdSrfStruct **FffG22)

Description:
Computes coefficients of the first fundamental form of given surface Srf.
Parameters:

Srf: | Do compute the coefficients of the FFF for.
--- | ---
DuSrf: | First derivative of Srf with respect to U goes to here.
DvSrf: | First derivative of Srf with respect to V goes to here.
FffG11: | FFF G11 scalar field.
FffG12: | FFF G12 scalar field.
FffG22: | FFF G22 scalar field.

Returned Value:

void

See Also:
SymbSrfSff SymbSrfDeterminant2 SymbSrfGaussCurvature SymbSrfMeanEvolute SymbSrfMeanCurvatureSqr SymbSrfIsoFocalSrf SymbSrfCurvatureUpperBound SymbSrfIsoDirNormalCurvatureBound
Keywords:
first fundamental form

## SymbSrfFff

(symb_lib/curvatur.c:725)
Prototype:

      void SymbSrfSff(CagdSrfStruct *DuSrf,
                      CagdSrfStruct *DvSrf,
                      CagdSrfStruct **SffL11,
                      CagdSrfStruct **SffL12,
                      CagdSrfStruct **SffL22,
                      CagdSrfStruct **SNormal)

Description:
Computes coefficients of the first fundamental form of given surface Srf. These coefficients are using non normalized normal that is also returned.
Parameters:

DuSrf: | First derivative of Srf with respect to U.
--- | ---
DvSrf: | First derivative of Srf with respect to V.
SffL11: | SFF L11 scalar field returned herein.
SffL12: | SFF L12 scalar field returned herein.
SffL22: | SFF L22 scalar field returned herein.
SNormal: | Unnormalized normal vector field returned herein.

Returned Value:

void

See Also:
SymbSrfFff SymbSrfDeterminant2 SymbSrfGaussCurvature SymbSrfMeanEvolute SymbSrfMeanCurvatureSqr SymbSrfIsoFocalSrf SymbSrfCurvatureUpperBound SymbSrfIsoDirNormalCurvatureBound
Keywords:
second fundamental form

## SymbSrfGaussCurvature

(symb_lib/curvatur.c:795)
Prototype:

      CagdSrfStruct *SymbSrfGaussCurvature(CagdSrfStruct *Srf)

Description:
Computes the Gauss curvature of a given surface.
Parameters:

Srf: | Surface to compute Gaussian curvature for.
--- | ---

Returned Value:

CagdSrfStruct *: A surface representing the Gaussian curvature field.

See Also:
SymbSrfFff SymbSrfSff SymbSrfDeterminant2 SymbSrfMeanEvolute SymbSrfMeanCurvatureSqr SymbSrfIsoFocalSrf SymbSrfCurvatureUpperBound SymbSrfIsoDirNormalCurvatureBound
Keywords:
curvature

## SymbSrfInvert

(symb_lib/symbolic.c:820)
Prototype:

      CagdSrfStruct *SymbSrfInvert(CagdSrfStruct *Srf)

Description:
Given a scalar surface, returns a scalar surface representing the reciprocal values, by making it rational (if was not one) and flipping the numerator and the denominator.
Parameters:

Srf: | A scalar surface to compute a reciprocal value for.
--- | ---

Returned Value:

CagdSrfStruct *: A rational scalar surface that is equalto the reciprocal value of Srf.

See Also:
SymbSrfDotProd SymbSrfVecDotProd SymbSrfScalarScale SymbSrfMultScalar SymbSrfMult SymbSrfCrossProd
Keywords:
division symbolic computation reciprocal value

## SymbSrfIsoDirNormalCurvatureBound

(symb_lib/curvatur.c:1251)
Prototype:

      CagdSrfStruct *SymbSrfIsoDirNormalCurvatureBound(CagdSrfStruct *Srf,
                                                       CagdSrfDirType Dir)

Description:
Computes normal curvature bound in given isoparametric direction. This turns out to be (L11 . n) / G11 for u and (L22 . n) / G22 for v. Herein the square of these equations is computed symbolically and returned.
Parameters:

Srf: | To compute normal curvature in an isoparametric direction Dir.
--- | ---
Dir: | Direction to compute normal curvature. Either U or V.

Returned Value:

CagdSrfStruct *: A scalar field representing the normal curvature square of Srf in dirction Dir.

See Also:
SymbSrfFff SymbSrfSff SymbSrfDeterminant2 SymbSrfGaussCurvature SymbSrfMeanEvolute SymbSrfMeanCurvatureSqr SymbSrfIsoFocalSrf SymbSrfCurvatureUpperBound
Keywords:
curvature

## SymbSrfIsoFocalSrf

(symb_lib/curvatur.c:1036)
Prototype:

      CagdSrfStruct *SymbSrfIsoFocalSrf(CagdSrfStruct *Srf, CagdSrfDirType Dir)

Description:
Computes a focal surface for a principal curvature in an isoparametric direction. For the u isoparametric direction,

                          1               G11
    F(u, v) = n(u, v) --------- = n(u, v) ---
                        u
                       k (u, v)           L11
                        n

Because Lii also has n(u,v) we can use the nonnormalized surface normal to compute F(u, v), which is therefore computable and representable.
Parameters:

Srf: | Surface to compute iso focal surface.
--- | ---
Dir: | Direction to compute iso focal surface. Either U or V.

Returned Value:

CagdSrfStruct *: A surface representing the iso focal surface.

See Also:
SymbSrfFff SymbSrfSff SymbSrfDeterminant2 SymbSrfGaussCurvature SymbSrfMeanEvolute SymbSrfMeanCurvatureSqr SymbSrfCurvatureUpperBound SymbSrfIsoDirNormalCurvatureBound
Keywords:
curvature focal surface evolute

## SymbSrfMeanCurvatureSqr

(symb_lib/curvatur.c:992)
Prototype:

      CagdSrfStruct *SymbSrfMeanCurvatureSqr(CagdSrfStruct *Srf)

Description:
Computes the Mean curvature square of a given surface.
Parameters:

Srf: | Surface to compute Mean curvature square for.
--- | ---

Returned Value:

CagdSrfStruct *: A surface representing the Mean curvature square field.

See Also:
SymbSrfFff SymbSrfSff SymbSrfDeterminant2 SymbSrfGaussCurvature SymbSrfMeanEvolute SymbSrfIsoFocalSrf SymbSrfCurvatureUpperBound SymbSrfIsoDirNormalCurvatureBound
Keywords:
curvature

## SymbSrfMeanEvolute

(symb_lib/curvatur.c:880)
Prototype:

      CagdSrfStruct *SymbSrfMeanEvolute(CagdSrfStruct *Srf)

Description:
Computes an "evolute surface" to a given surface using twice the Mean curvature as magnitude.

                          1                             |G|
    E(u, v) = n(u, v) --------- = n(u, v) ---------------------------------
                      2 H(u, v)           ( G11 L22 + G22 L11 - 2 G12 L12 )

Becuase H(u,v) also has n(u,v) we can use the nonnormalized surface normal to compute E(u, v), which is therefore computable and representable.
Parameters:

Srf: | Surface to compute mean evolute.
--- | ---

Returned Value:

CagdSrfStruct *: A surface representing the mean evolute surface.

See Also:
SymbSrfFff SymbSrfSff SymbSrfDeterminant2 SymbSrfGaussCurvature SymbSrfMeanCurvatureSqr SymbSrfIsoFocalSrf SymbSrfCurvatureUpperBound SymbSrfIsoDirNormalCurvatureBound
Keywords:
curvature evolute

## SymbSrfMergeScalar

(symb_lib/symbolic.c:1652)
Prototype:

      CagdSrfStruct *SymbSrfMergeScalar(CagdSrfStruct *SrfW,
                                        CagdSrfStruct *SrfX,
                                        CagdSrfStruct *SrfY,
                                        CagdSrfStruct *SrfZ)

Description:
Given a set of scalar surfaces, treat them as coordinates into a new surface. Assumes at least SrfX is not NULL in which a scalar surface is returned. Assumes SrfX/Y/Z/W are either E1 or P1 in which the weights are assumed to be identical and can be ignored if SrfW exists or copied otheriwse.
Parameters:

SrfW: | The weight component of new constructed surface, if have any.
--- | ---
SrfX: | The X component of new constructed surface.
SrfY: | The Y component of new constructed surface, if have any.
SrfZ: | The Z component of new constructed surface, if have any.

Returned Value:

CagdSrfStruct *: A new surface constructed from given scalar surfaces.

See Also:
SymbSrfSplitScalar SymbCrvMergeScalar
Keywords:
merge symbolic computation

## SymbSrfMult

(symb_lib/symbolic.c:781)
Prototype:

      CagdSrfStruct *SymbSrfMult(CagdSrfStruct *Srf1, CagdSrfStruct *Srf2)

Description:
Given two surfaces - multiply them coordinatewise. The two surfaces are promoted to same point type before the multiplication can take place.
Parameters:

Srf1, Srf2: | Two surface to multiply coordinatewise.
--- | ---

Returned Value:

CagdSrfStruct *: The product of Srf1 * Srf2 coordinatewise.

See Also:
SymbSrfDotProd SymbSrfVecDotProd SymbSrfScalarScale SymbSrfMultScalar SymbSrfInvert
Keywords:
product symbolic computation

## SymbSrfMultScalar

(symb_lib/symbolic.c:911)
Prototype:

      CagdSrfStruct *SymbSrfMultScalar(CagdSrfStruct *Srf1, CagdSrfStruct *Srf2)

Description:
Given two surface - a vector curve Srf1 and a scalar curve Srf2, multiply all Srf1's coordinates by the scalar curve Srf2. Returned surface is a surface representing the product of the two given surfaces.
Parameters:

Srf1, Srf2: | Two surfaces to multiply.
--- | ---

Returned Value:

CagdSrfStruct *: A surface representing the product of Srf1 and Srf2.

See Also:
SymbSrfDotProd SymbSrfVecDotProd SymbSrfMult SymbSrfCrossProd SymbCrvMultScalar
Keywords:
product symbolic computation

## SymbSrfNormalSrf

(symb_lib/symbolic.c:1243)
Prototype:

      CagdSrfStruct *SymbSrfNormalSrf(CagdSrfStruct *Srf)

Description:
Given a surface - compute its unnormalized norrmal vectorfield surface, as the cross product if this partial derivatives.
Parameters:

Srf: | To compute an unnormalized normal vector field for.
--- | ---

Returned Value:

CagdSrfStruct *: A vector field representing the unnormalized normal vector field of Srf.

Keywords:
normal symbolic computation

## SymbSrfOffset

(symb_lib/offset.c:261)
Prototype:

      CagdSrfStruct *SymbSrfOffset(CagdSrfStruct *Srf, CagdRType OffsetDist)

Description:
Given a surface and an offset amount OffsetDist, returns an approximation to the offset surface by offseting the control mesh in the normal direction.
Parameters:

Srf: | To approximate its offset surface with distance OffsetDist.
--- | ---
OffsetDist: | Amount of offset. Negative denotes other offset direction.

Returned Value:

CagdSrfStruct *: An approximation to the offset surface.

See Also:
SymbCrvOffset SymbCrvSubdivOffset SymbSrfSubdivOffset SymbCrvAdapOffset SymbCrvAdapOffsetTrim SymbCrvLeastSquarOffset SymbCrvMatchingOffset
Keywords:
offset

## SymbSrfOrthotomic

(symb_lib/orthotom.c:110)
Prototype:

      CagdSrfStruct *SymbSrfOrthotomic(CagdSrfStruct *Srf,
                                       CagdPType P,
                                       CagdRType K)

Description:
Computes the K-orthotomic of a surface with respect to point P:

          P + K < (S(u,v) - P), N(u,v) > N(u,v)

See "Fundamentals of Computer Aided Geometric Design, by J. Hoschek and and D. Lasser.
Parameters:

Srf: | To compute its K-orthotomic
--- | ---
P: | The points to which the K-orthotomic is computed for Srf for.
K: | The magnitude of the orthotomic function.

Returned Value:

CagdSrfStruct *: The K-orthotomic

See Also:
SymbCrvOrthotomic
Keywords:

## SymbSrfPtBisectorSrf3D

(symb_lib/crv_skel.c:986)
Prototype:

      CagdSrfStruct *SymbSrfPtBisectorSrf3D(CagdSrfStruct *Srf, CagdPType Pt)

Description:
Computes the bisector surface of a surface in arbitrary general three space position and a point in three space. Solution bisector surface R is derived by solving the three linear equations of (S for Srf, P for Pt):

##

          < dS/du, R > = < dS/du, S >
          < dS/dv, R > = < dS/dv, S >
          < S - P, R > = (< S, S > - < P, P >) / 2

    Parameters:

     Srf:       Three space surface too compute its bisector surface with Pt.
     Pt:        A point in three space to compute its bisector with Srf.

    Returned Value:

      CagdSrfStruct *:   The bisector surface.

    See Also:

      SymbCrvDiameter
      SymbCrvCnvxHull
      SymbCrvBisectorsSrf

      SymbCrvCrvBisectorSrf3D

    Keywords:

      bisector

     SymbSrfRtnlMult   (symb_lib/symbolic.c:1199)

    Prototype:

      CagdSrfStruct *SymbSrfRtnlMult(CagdSrfStruct *Srf1X,
                                     CagdSrfStruct *Srf1W,
                                     CagdSrfStruct *Srf2X,
                                     CagdSrfStruct *Srf2W,
                                     CagdBType OperationAdd)

    Description:

Given two surfaces - multiply them using the quotient product rule:

     X = X1 W2 +/- X2 W1

All provided surfaces are assumed to be non rational scalar surfaces. Returned is a non rational scalar surface (CAGD_PT_E1_TYPE).
Parameters:

Srf1X: | Numerator of first surface.
--- | ---
Srf1W: | Denominator of first surface.
Srf2X: | Numerator of second surface.
Srf2W: | Denominator of second surface.
OperationAdd: | TRUE for addition, FALSE for subtraction.

Returned Value:

CagdSrfStruct *: The result of Srf1X Srf2W +/- Srf2X Srf1W.

See Also:
SymbSrfDotProd SymbSrfVecDotProd SymbSrfScalarScale SymbSrfMultScalar SymbSrfInvert
Keywords:
product symbolic computation

## SymbSrfScalarScale

(symb_lib/symbolic.c:868)
Prototype:

      CagdSrfStruct *SymbSrfScalarScale(CagdSrfStruct *Srf, CagdRType Scale)

Description:
Given a surface, scale it by Scale.
Parameters:

Srf: | A surface to scale by magnitude Scale.
--- | ---
Scale: | Scaling factor.

Returned Value:

CagdSrfStruct *: A surfaces scaled by Scale compared to Srf.

See Also:
SymbSrfDotProd SymbSrfVecDotProd SymbSrfMult SymbSrfMultScalar SymbSrfInvert SymbSrfCrossProd
Keywords:
scaling symbolic computation

## SymbSrfSplitScalar

(symb_lib/symbolic.c:1591)
Prototype:

      void SymbSrfSplitScalar(CagdSrfStruct *Srf,
                              CagdSrfStruct **SrfW,
                              CagdSrfStruct **SrfX,
                              CagdSrfStruct **SrfY,
                              CagdSrfStruct **SrfZ)

Description:
Given a surface splits it to its scalar component surfaces. Ignores all dimensions beyond the third, Z, dimension.
Parameters:

Srf: | Surface to split.
--- | ---
SrfW: | The weight component of Srf, if have any.
SrfX: | The X component of Srf.
SrfY: | The Y component of Srf, if have any.
SrfZ: | The Z component of Srf, if have any.

Returned Value:

void

See Also:
SymbSrfMergeScalar SymbCrvSplitScalar
Keywords:
split symbolic computation

## SymbSrfSub

(symb_lib/symbolic.c:757)
Prototype:

      CagdSrfStruct *SymbSrfSub(CagdSrfStruct *Srf1, CagdSrfStruct *Srf2)

Description:
Given two surfaces - subtract them coordinatewise. The two surfaces are promoted to same point type before the multiplication can take place. Furthermore, order and continuity are matched as well.
Parameters:

Srf1, Srf2: | Two surface to subtract coordinatewise.
--- | ---

Returned Value:

CagdSrfStruct *: The difference of Srf1 - Srf2 coordinatewise.

See Also:
SymbSrfAdd SymbMeshAddSub SymbSrfMult
Keywords:
subtraction symbolic computation

## SymbSrfSubdivOffset

(symb_lib/offset.c:357)
Prototype:

      CagdSrfStruct *SymbSrfSubdivOffset(CagdSrfStruct *Srf,
                                         CagdRType OffsetDist,
                                         CagdRType Tolerance)

Description:
Given a surface and an offset amount OffsetDist, returns an approximation to the offset surface by offseting the control mesh in the normal direction. If resulting offset is not satisfying the required tolerance the surface is subdivided and the algorithm recurses on both parts.
Parameters:

Srf: | To approximate its offset surface with distance OffsetDist.
--- | ---
OffsetDist: | Amount of offset. Negative denotes other offset direction.
Tolerance: | Accuracy control.

Returned Value:

CagdSrfStruct *: An approximation to the offset surface, to within Tolerance.

See Also:
SymbCrvOffset SymbCrvSubdivOffset SymbSrfOffset SymbCrvAdapOffset SymbCrvAdapOffsetTrim SymbCrvLeastSquarOffset SymbCrvMatchingOffset
Keywords:
offset

## SymbSrfVecDotProd

(symb_lib/symbolic.c:1030)
Prototype:

      CagdSrfStruct *SymbSrfVecDotProd(CagdSrfStruct *Srf, CagdVType Vec)

Description:
Given a surface and a vector - computes their dot product. Returned surface is a scalar surface representing the dot product.
Parameters:

Srf: | Curve to multiply and compute a dot product for.
--- | ---
Vec: | Vector to project Srf onto.

Returned Value:

CagdSrfStruct *: A scalar surface representing the dot product of Srf . Vec.

See Also:
SymbSrfDotProd SymbSrfMult SymbSrfScalarScale SymbSrfMultScalar SymbSrfInvert SymbSrfCrossProd
Keywords:
product dot product symbolic computation

## SymbTangentToCrvAtTwoPts

(symb_lib/crv_tans.c:140)
Prototype:

      CagdPtStruct *SymbTangentToCrvAtTwoPts(CagdCrvStruct *Crv,
                                             CagdRType FineNess)

Description:
Computes all the lines that are tangent to Crv at two locations. Returned is a list of parameter locations' pairs where the tangent is tangent to the curve. The tangents are computed as two sets of contours of the solution to the two equations of:

      1.  [ C(t) - C(r) ] || C'(t)
      2.  [ C(t) - C(r) ] || C'(r)

and computing all the intersection points between these two sets of contours. Note that since equations 1 and 2 are symmetric, one only needs to solve for once and flip the notation of r and t.
Parameters:

Crv: | The curve to compute all tangent lines at two locations.
--- | ---
FineNess: | Of numeric search for the zero set (for surface subdivision). A positive value (10 is a good start).

Returned Value:

CagdPtStruct *: A list of parameter location on Crv with tangent lines through Pt. Parameters are save in the X & Y coordinate.

See Also:
SymbCrvPtTangents SymbCrvCnvxHull SymbCrvDiameter
Keywords:

## SymbTwoCrvsMorphing

(symb_lib/morphing.c:57)
Prototype:

      CagdCrvStruct *SymbTwoCrvsMorphing(CagdCrvStruct *Crv1,
                                         CagdCrvStruct *Crv2,
                                         CagdRType Blend)

Description:
Given two compatible curves (See function CagdMakeCrvsCompatible), computes a convex blend between them according to Blend which must be between zero and one. Returned is the new blended curve.
Parameters:

Crv1, Crv2: | The two curves to blend.
--- | ---
Blend: | A parameter between zero and one

Returned Value:

CagdCrvStruct *: Crv2 * Blend + Crv1 * (1 - Blend).

See Also:
SymbTwoCrvsMorphingCornerCut SymbTwoCrvsMorphingMultiRes SymbTwoSrfsMorphing TrivTwoTVsMorphing
Keywords:
morphing

## SymbTwoCrvsMorphingCornerCut

(symb_lib/morphing.c:125)
Prototype:

      CagdCrvStruct *SymbTwoCrvsMorphingCornerCut(CagdCrvStruct *Crv1,
                                                  CagdCrvStruct *Crv2,
                                                  CagdRType MinDist,
                                                  CagdBType SameLength,
                                                  CagdBType FilterTangencies)

Description:
Given two compatible curves (See function CagdMakeCrvsCompatible), computes a morph between them using corner cutting approach. Returned is the new blended curve.
Parameters:

Crv1, Crv2: | The two curves to blend.
--- | ---
MinDist: | Minimal maximum distance between adjacent curves to make sure motion is visible. The curves will move at most twice that much in their maximal distance (roughly).
SameLength: | If TRUE, length of curves is preserved, otherwise BBOX is.
FilterTangenices: | f TRUE, attempt is made to eliminate the intermediate line representation.

Returned Value:

CagdCrvStruct *: The blended curve.

See Also:
SymbTwoCrvsMorphing SymbTwoCrvsMorphingMultiRes SymbTwoSrfsMorphing TrivTwoTVsMorphing
Keywords:
morphing

## SymbTwoCrvsMorphingMultiRes

(symb_lib/morphing.c:307)
Prototype:

      CagdCrvStruct *SymbTwoCrvsMorphingMultiRes(CagdCrvStruct *Crv1,
                                                 CagdCrvStruct *Crv2,
                                                 CagdRType BlendStep)

Description:
Given two compatible curves (See function CagdMakeCrvsCompatible), computes a morph between them using multiresolution decomposition. Returned is a list of new blended curves.
Parameters:

Crv1, Crv2: | The two curves to blend.
--- | ---
BlendStep: | A step size of the blending.

Returned Value:

CagdCrvStruct *: A list of blended curves.

See Also:
SymbTwoCrvsMorphing SymbTwoCrvsMorphingCornerCut SymbTwoSrfsMorphing TrivTwoTVsMorphing
Keywords:
morphing

## SymbTwoSrfsMorphing

(symb_lib/morphing.c:743)
Prototype:

      CagdSrfStruct *SymbTwoSrfsMorphing(CagdSrfStruct *Srf1,
                                         CagdSrfStruct *Srf2,
                                         CagdRType Blend)

Description:
Given two compatible surfaces (See function CagdMakeSrfsCompatible), computes a convex blend between them according to Blend which must be between zero and one. Returned is the new blended surface.
Parameters:

Srf1, Srf2: | The two surfaces to blend.
--- | ---
Blend: | A parameter between zero and one

Returned Value:

CagdSrfStruct *: Srf2 * Blend + Srf1 * (1 - Blend).

See Also:
SymbTwoCrvsMorphing SymbTwoCrvsMorphingCornerCut SymbTwoCrvsMorphingMultiRes TrivTwoTVsMorphing
Keywords:
morphing

## SymbUniformAprxPtOnCrvDistrib

(symb_lib/ffptdist.c:49)
Prototype:

      CagdRType *SymbUniformAprxPtOnCrvDistrib(CagdCrvStruct *Crv,
                                               CagdBType ParamUniform,
                                               int n)

Description:
Computes a stocastically uniform distribution of points on a curve. n points are placed at approximately equal distance from each other along Crv's arc length. This distribution converges to a uniform distribution as n approached infinity.
Parameters:

Crv: | To place n points along, uniformly.
--- | ---
ParamUniform: | If TRUE, produces a distribution uniform in parametric space. If FALSE, uniform in Euclidean space.
n: | Number of points to distribute along Crv.

Returned Value:

CagdRType *: A dynamically allocated vector of size n, of the parameter values of the distributed points.

See Also:
SymbUniformAprxPtOnSrfDistrib
Keywords:
uniform distribution

## SymbUniformAprxPtOnSrfDistrib

(symb_lib/ffptdist.c:116)
Prototype:

      CagdUVType *SymbUniformAprxPtOnSrfDistrib(CagdSrfStruct *Srf,
                                                CagdBType ParamUniform,
                                                int n)

Description:
Computes a stocastically uniform distribution of points on a surface. n points are placed at approximately equal distance from each other on Srf's surface. This distribution converges to a uniform distribution as n approached infinity.
Parameters:

Srf: | To place n points on, uniformly.
--- | ---
ParamUniform: | If TRUE, produces a distribution uniform in parametric space. If FALSE, uniform in Euclidean space.
n: | Number of points to distribute along Srf.

Returned Value:

CagdUVType *: A dynamically allocated vector of size n, of parameter values of the distributed points.

See Also:
SymbUniformAprxPtOnCrvDistrib
Keywords:
uniform distribution

## SymbUniformAprxPtOnSrfGetDistrib

(symb_lib/ffptdist.c:236)
Prototype:

      CagdUVType *SymbUniformAprxPtOnSrfGetDistrib(CagdSrfStruct *Srf, int *n)

Description:
Computes a uniform distribution of points on the surface Srf. The points are placed at approximately equal distance from each other on Srf's Euclidean space. A subset of the n points that were selected via the last invokation of SymbUniformAprxPtOnSrfPrepDistrib is returned, such that the points are at equal distance, approximately.
Parameters:

Srf: | To place points on its parametric space, uniformly. This surface must have the same parameter domain as Srf in the last invokation of SymbUniformAprxPtOnSrfPrepDistrib.
--- | ---
n: | Returns actual number of UV locations in the returned vector.

Returned Value:

CagdUVType *: A dynamically allocated vector of at most n parameter values of the distributed points.

See Also:
SymbUniformAprxPtOnCrvDistrib SymbUniformAprxPtOnSrfDistrib SymbUniformAprxPtOnSrfPrepDistrib
Keywords:
uniform distribution

## SymbUniformAprxPtOnSrfPrepDistrib

(symb_lib/ffptdist.c:183)
Prototype:

      void SymbUniformAprxPtOnSrfPrepDistrib(CagdSrfStruct *Srf, int n)

Description:
Prepares a uniform distribution of points on surface Srf. This function is invoked in preparation of several calls to function SymbUniformAprxPtOnSrfGetDistrib that return a uniform Euclidean distributions that is consistent with the area differentials found.
Parameters:

Srf: | To place n points on its parametric space, uniformly.
--- | ---
n: | Number of points to distribute along Srf.

Returned Value:

void

See Also:
SymbUniformAprxPtOnCrvDistrib SymbUniformAprxPtOnSrfDistrib SymbUniformAprxPtOnSrfGetDistrib
Keywords:
uniform distribution