BspCrvBlossomMult

(bsp_sym.c:278)

Prototype:

  CagdCrvStruct *BspCrvBlossomMult(const CagdCrvStruct *Crv1,
                                   const CagdCrvStruct *Crv2)


Description:

Given two B-spline curves - multiply them coordinate-wise, using Blossoming. The two curves are assumed compatible (same point type and domain). See also: "Multiplication as a General Operation for Splines", by Kenji Ueda, in curves and Surfaces in Geometric Design, Laurent, Mehaute and Shumaker (eds.), pp 475-482, A. K. Peters 1994. "Sliding Windows Algorithm for B-spline Multiplication", by X. Chen, R. F. Riesenfeld, and E. Cohen, Solid and Physical Modeling 2007.

Parameters:

Crv1, Crv2: The two curves to multiply.


Returned Value:

CagdCrvStruct *: The product Crv1 * Crv2 coordinate-wise.


See Also:

BspCrvMult

Keywords:

product


BspCrvMult

(bsp_sym.c:133)

Prototype:

  CagdCrvStruct *BspCrvMult(const CagdCrvStruct *CCrv1,
                            const CagdCrvStruct *CCrv2)


Description:

Given two B-spline curves - multiply them coordinate-wise. The two curves are promoted to same point type before the multiplication can take place. The two curves are assumed to hold the same domain. See also BspMultComputationMethod.

Parameters:

CCrv1, CCrv2: The two curves to multiply.


Returned Value:

CagdCrvStruct *: The product Crv1 * Crv2 coordinate-wise.


Keywords:

product


BspMultComputationMethod

(bsp_sym.c:102)

Prototype:

  BspMultComputationMethodType BspMultComputationMethod(
                                     BspMultComputationMethodType BspMultMethod)


Description:

Sets method of B-spline product computation.

Parameters:

BspMultMethod: See BspMultComputationMethodType. B-spline product is computed by either Bezier decomposition, or setting an interpolation problem, or using Blossoming.


Returned Value:

BspMultComputationMethodType: Previous setting.


Keywords:

product


BspSrfBlossomMult

(bsp_sym.c:1088)

Prototype:

  CagdSrfStruct *BspSrfBlossomMult(const CagdSrfStruct *Srf1,
                                   const CagdSrfStruct *Srf2)


Description:

Given two B-spline surfaces - multiply them coordinate-wise, using Blossoming. The two surfaces are assumed compatible (same point type & domain). See also: "Multiplication as a General Operation for Splines", by Kenji Ueda, in surfaces and Surfaces in Geometric Design, Laurent, Mehaute and Shumaker (eds.), pp 475-482, A. K. Peters 1994. "Sliding Windows Algorithm for B-spline Multiplication", by X. Chen, R. F. Riesenfeld, and E. Cohen, Solid and Physical Modeling 2007.

Parameters:

Srf1, Srf2: The two surfaces to multiply.


Returned Value:

CagdSrfStruct *: The product Srf1 * Srf2 coordinate-wise.


See Also:

BspSrfMult

Keywords:

product


BspSrfFactorBilinear

(bsp_sym.c:1489)

Prototype:

  CagdSrfStruct *BspSrfFactorBilinear(const CagdSrfStruct *Srf,
                                      const CagdRType *A)


Description:

Factors out a given bilinear term from a scalar surface, assuming it has this term.
S(u,v) / {A[0] (1-u)(1-v) + A[1] u(1-v) + A[2] (1-u)v + A[3] uv}

Note that typically a B-spline surface will not have this bilinear in all its patches so use this function with care - this function does not verify this existence.

Parameters:

Srf: To factor out a bilinear factor from.
A: Four coeficients of the scalar bilinear.


Returned Value:

CagdSrfStruct *: Srf / {A[0] (1-u)(1-v) + A[1] u(1-v) + A[2] (1-u)v + A[3] uv}.


See Also:

BzrSrfFactorUMinusV BzrSrfFactorBilinear MvarMVFactorUMinV

Keywords:




BspSrfFactorUMinusV

(bsp_sym.c:1634)

Prototype:

  CagdSrfStruct *BspSrfFactorUMinusV(const CagdSrfStruct *Srf)


Description:

Factors out a (u - v) term from a surface, assuming it has one. Note that typically a B-spline surface will not have (u, v) in all its patches so use this function with care - this function does not verify this existence. It is more common to have (u, v) only along symmetric diagonal patches of the B-spline surface, after symbolic operations like C1(u) - C2(v).

Parameters:

Srf: To factor out a (u - v) term from.


Returned Value:

CagdSrfStruct *: Srf / (u - v).


See Also:

BzrSrfFactorUMinusV BzrSrfFactorBilinear MvarMVFactorUMinV

Keywords:




BspSrfMult

(bsp_sym.c:891)

Prototype:

  CagdSrfStruct *BspSrfMult(const CagdSrfStruct *CSrf1,
                            const CagdSrfStruct *CSrf2)


Description:

Given two B-spline surfaces - multiply them coordinate-wise. The two surfaces are promoted to same point type before multiplication can take place. The two surfaces are assumed to hold the same domain. See also BspMultComputationMethod.

Parameters:

CSrf1, CSrf2: The two surfaces to multiply.


Returned Value:

CagdSrfStruct *: The product Srf1 * Srf2 coordinate-wise.


Keywords:

product


BzrComposeCrvCrv

(composit.c:445)

Prototype:

  CagdCrvStruct *BzrComposeCrvCrv(const CagdCrvStruct *Crv1,
                                  const 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 surface 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.


See Also:

SymbDecomposeCrvCrv BzrComposeCrvCrv

Keywords:

composition


BzrComposeSrfCrv

(composit.c:1380)

Prototype:

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


Description:

Given a Bezier curve Crv and a Bezier surface Srf, computes their composition Srf(Crv(t)). Crv must be a two dimensional curve completely contained in the parametric domain of Srf. See: "Freeform surface 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


BzrComposeSrfSrf

(compost2.c:213)

Prototype:

  CagdSrfStruct *BzrComposeSrfSrf(const CagdSrfStruct *Srf1,
                                  const CagdSrfStruct *Srf2)


Description:

Given surfaces Srf1 and Srf2, computes their composition Srf1(Srf2(a, b)). Srf1 must be a Bezier. Srf2 must be a two dimensional surface completely contained in the parametric domain of Srf1. See: "Freeform surface analysis using a hybrid of symbolic and numeric computation" by Gershon Elber, PhD thesis, University of Utah, 1992. Compute the compositions by the products of:
S(u, v) = S(u(a, b), v(a, b))

           n   m
        = sum sum Pij Bi(u(a, b)) Bj(v(a, b))
          i=0 j=0

           n   m       n           i              n-i
        = sum sum Pij ( ) (u(a, b))  (1 - u(a, b))
          i=0 j=0      i
                          m           j              m-j
                         ( ) (v(a, b))  (1 - v(a, b))
                          j

or if Srf2 is rational:
S(u, v) = S(u(a, b), v(a, b))

           n   m
        = sum sum Pij Bi(u(a, b)/w(a, b)) Bj(v(a, b)/w(a, b))
          i=0 j=0

           n   m       n           i                    n-i
        = sum sum Pij ( ) (u(a, b))  (w(a, b) - u(a, b))
          i=0 j=0      i
                          m           j                    m-j
                         ( ) (v(a, b))  (w(a, b) - v(a, b))    /
                          j
                                           n+m
                                  (w(a, b))


Parameters:

Srf1, Srf2: The two surfaces to compose.


Returned Value:

CagdSrfStruct *: The resulting composition.


See Also:

SymbComposeSrfSrf MvarBzrComposeTVSrf

Keywords:

composition


BzrCrvFactor1MinusT

(bzr_sym.c:535)

Prototype:

  CagdCrvStruct *BzrCrvFactor1MinusT(const CagdCrvStruct *Crv)


Description:


Factors out a (1-t) term from a scalar curve, assuming it has one.

Parameters:

Crv: To factor out a (1-t) term from.


Returned Value:

CagdCrvStruct *: Crv / (1-t).


See Also:

BzrCrvFactorT BspSrfFactorUMinusV BzrSrfFactorBilinear

Keywords:




BzrCrvFactorT

(bzr_sym.c:484)

Prototype:

  CagdCrvStruct *BzrCrvFactorT(const CagdCrvStruct *Crv)


Description:

Factors out a (t) term from a scalar curve, assuming it has one.

Parameters:

Crv: A bezier curve to factor out a (t) term from.


Returned Value:

CagdCrvStruct *: Crv / (t).


See Also:

BzrCrvFactor1MinusT BspSrfFactorUMinusV BzrSrfFactorBilinear

Keywords:




BzrCrvMult

(bzr_sym.c:59)

Prototype:

  CagdCrvStruct *BzrCrvMult(const CagdCrvStruct *CCrv1,
                            const CagdCrvStruct *CCrv2)


Description:

Given two Bezier curves - multiply them coordinate-wise. The two curves are promoted to same point type before the multiplication can take place.

Parameters:

CCrv1, CCrv2: The two curves to multiply.


Returned Value:

CagdCrvStruct *: The product Crv1 * Crv2 coordinate-wise.


See Also:

BzrCrvMultPtsVecs

Keywords:

product


BzrCrvMultList

(bzr_sym.c:247)

Prototype:

  CagdCrvStruct *BzrCrvMultList(const CagdCrvStruct *Crv1Lst,
                                const 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


BzrCrvMultPtsVecs

(bzr_sym.c:180)

Prototype:

  void BzrCrvMultPtsVecs(const CagdRType *Pts1,
                         int Order1,
                         const CagdRType *Pts2,
                         int Order2,
                         CagdRType *ProdPts)


Description:

Given two Bezier scalar curves as vectors Ptsi of orders Orderi, multiply them.

Parameters:

Pts1: First vector of scalars of first Bezier curve.
Order1: Order of first Bezier curve.
Pts2: Second vector of scalars of second Bezier curve.
Order2: Order of second Bezier curve.
ProdPts: esult vector of scalars of product Bezier curve. Result vector is of length Order1+Order2-1.


Returned Value:

void


See Also:

BzrCrvMult

Keywords:

product


BzrSrfFactorBilinear

(bzr_sym.c:594)

Prototype:

  CagdSrfStruct *BzrSrfFactorBilinear(const CagdSrfStruct *Srf,
                                      const CagdRType *A)


Description:

Factors out a given bilinear term from a scalar surface, assuming it has this term.
S(u,v) / {A[0] (1-u)(1-v) + A[1] u(1-v) + A[2] (1-u)v + A[3] uv}

If S(P) = Bilinear(A) * S(Q), then
A[0] (m-i) (n-j) Q[i][j]   + A[1] i (n-j) Q[i-1][j] +
A[2] (m-i) j     Q[i][j-1] + A[3] i j     Q[i-1][j-1] = m n P[i][j]


Parameters:

Srf: To factor out a bilinear term from.
A: Four coefficients of the scalar bilinear.


Returned Value:

CagdSrfStruct *: Srf / (u - v).


See Also:

BspSrfFactorUMinusV

Keywords:




BzrSrfFactorExtremeRowCol

(bzr_sym.c:906)

Prototype:

  CagdSrfStruct *BzrSrfFactorExtremeRowCol(const CagdSrfStruct *Srf,
                                           CagdSrfBndryType Bndry)
  


Description:


Derived a reduced Bezier surface out of the given Bezier surface but performing the following: 1. Removing the row/cloumn near the specified surafce boundary, Bndry. 2. Scaling all other rows/columns by m/i where m is the original order in the direction we remove the row/colimn in 1, and i vanish for the row/column index of the removed row/column. For example, given the Bezier surface: *
       m    n
      sum  sum Pij Bi,m(u) Bj,n(v),
      i=0  j=0
                                                                           *

reducing Bndry = CAGD_U_MAX_BNDRY would yeild, *
      m-1   n    m
      sum  sum  --- Pij Bi,m-1(u) Bj,n(v).
      i=0  j=0  m-i


Parameters:

Srf: Surface to compute a reduced form for.
Bndry: Boundary along which to reduce.


Returned Value:

CagdSrfStruct *: Reduced surface, of one degree less in one direction.


See Also:

MvarAdjacentSrfSrfInter

Keywords:




BzrSrfFactorLowOrders

(bzr_sym.c:995)

Prototype:

  void BzrSrfFactorLowOrders(const CagdSrfStruct *Srf,
                             CagdSrfStruct **S11,
                             CagdSrfStruct **S12,
                             CagdSrfStruct **S21,
                             CagdSrfStruct **S22)


Description:


Factors out a given Bezier surface into four Bezier surfaces of one order smaller, as (1-u)(1-v) S11 + (1-u)v S12 + u(1-v) S21 + uv S22. Srf is assumed to be of orders larger than linear.

Parameters:

Srf: To factor out as four surfaces of lower order as, Srf = (1-u)(1-v) S11 + (1-u)v S12 + u(1-v) S21 + uv S22.
S11, S12, S21, S22: The four lower order surfaces to factor out.


Returned Value:

void


See Also:

BspSrfFactorUMinusV BzrSrfFactorBilinear

Keywords:




BzrSrfFactorUMinusV

(bzr_sym.c:825)

Prototype:

  CagdSrfStruct *BzrSrfFactorUMinusV(const CagdSrfStruct *Srf)


Description:

Factors out a (u - v) term from a scalar surface, assuming it has one.

Parameters:

Srf: To factor out a (u - v) term from.


Returned Value:

CagdSrfStruct *: Srf / (u - v).


See Also:

BspSrfFactorUMinusV BzrSrfFactorBilinear

Keywords:




BzrSrfMult

(bzr_sym.c:287)

Prototype:

  CagdSrfStruct *BzrSrfMult(const CagdSrfStruct *CSrf1,
                            const CagdSrfStruct *CSrf2)


Description:

Given two Bezier surfaces - multiply them coordinate-wise. The two surfaces are promoted to same point type before multiplication can take place.

Parameters:

CSrf1, CSrf2: The two surfaces to multiply.


Returned Value:

CagdSrfStruct *: The product Srf1 * Srf2 coordinate-wise.


Keywords:

product


BzrSrfSubdivAtCurve

(compost2.c:486)

Prototype:

  CagdSrfStruct *BzrSrfSubdivAtCurve(const CagdSrfStruct *Srf,
                                     const CagdCrvStruct *DivCrv)


Description:

Divides given surface Srf into two tensor product surfaces along a general curve DivCrv that splits Srf into two.

Parameters:

Srf: To devide into two new tensor product surfaces along DivCurv. Must be a Bezier surface.
DivCrv: 2D curve in the UV space of Srf. Must split the UV domain of Srf into two and must start/end at opposite boundaries. That is, if DivCrv starts at UMin, it must end at UMax.


Returned Value:

CagdSrfStruct *: A list of two surfaces resulting from subdividing Srf along splitting curve DivCrv.


See Also:



Keywords:




Symb2DCrvParamerize2Prms

(prm_dmn.c:258)

Prototype:

  CagdSrfStruct *Symb2DCrvParamerize2Prms(const CagdCrvStruct *Crv,
                                          CagdRType T1,
                                          CagdRType T2,
                                          int Dir,
                                          CagdRType *Error)


Description:

Fit a bivariate to the region enclosed by Crv by splitting at T1 and T2.

Parameters:

Crv: The curve to fit a bivariate to the area enclosed in.
T1, T2: Two parameters to split curve at and fit a match in between.
Dir: Direction where Crv1/2 were split (0 None, 1 for U, 2 for V).
Error: Error result in this fit. Error can only be compared to the error of similar invocations of this function.


Returned Value:

CagdSrfStruct *: Fitted bivariate, or NULL if failed.


See Also:



Keywords:




Symb2DCrvParameterizeDomain

(prm_dmn.c:409)

Prototype:

  CagdSrfStruct *Symb2DCrvParameterizeDomain(const CagdCrvStruct *UVCrv,
                                             CagdRType Eps)


Description:

Examine curve Crv if its enclosed domain is bivariate parameterizable.

Parameters:

UVCrv: Curve to examine the ability to parameterize its interior domain as a 2D surface.
Eps: Tolerance of the decomposition.


Returned Value:

CagdSrfStruct *: A planar surface parameterizing the domain enclosed. Typically one, possibly two surfaces, or NULL if failed.


Keywords:




Symb2DCrvParameterizing2Crvs

(prm_dmn.c:194)

Prototype:

  CagdSrfStruct *Symb2DCrvParameterizing2Crvs(const CagdCrvStruct *Crv1,
                                              const CagdCrvStruct *Crv2,
                                              int Dir,
                                              CagdBType ForceMatch)


Description:

Parameterize the area enclosed by given pair of curves that form a closed planar loop.

Parameters:

Crv1, Crv2: Two curves forming a loop 9and sharing starting and ending locations (i.e. they are roughly monotone with respect to each other.)
Dir: Direction where Crv1/2 were split (1 for U, 2 for V).
ForceMatch: Force match, even if the Jacobian might be negative.


Returned Value:

CagdSrfStruct *: 2D surface parameterizing region enclosed in Crv1/2, or NULL if failed.


See Also:

TrimDecompTrimSrf2Srfs TrimCrvIsParameterizableDomain

Keywords:




Symb2DSrfJacobian

(symb_srf.c:1006)

Prototype:

  CagdSrfStruct *Symb2DSrfJacobian(const CagdSrfStruct *Srf)


Description:

Given a planar surface - compute its Jacobian scalar field surface, as the cross product if its partial derivatives.

Parameters:

Srf: To compute the Jacobian scalar field for.


Returned Value:

CagdSrfStruct *: A scalar field representing the Jacobain of the given planar Srf.


See Also:

SymbSrfNormalSrf MvarCalculateTVJacobian

Keywords:

normal symbolic computation


SymbAdapIsoExtract

(adap_iso.c:246)

Prototype:

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


Description:

Extracts a valid coverage set of isocurves 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 SymbAdapIsoSetExtractMinLevel.

Parameters:

GI: Local general information of the adap iso structure.
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 coverage. 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 alternatively in this list.


See Also:

SymbAdapIsoExtractRectRgns SymbAdapIsoSetWeightPt SymbAdapIsoSkewDistSqr SymbAdapIsoExtractInit SymbAdapIsoExtractFree

Keywords:

adaptive isocurves


SymbAdapIsoExtractFree

(adap_iso.c:194)

Prototype:

  void SymbAdapIsoExtractFree(SymbAdapIsoGenInfoStruct *GI)


Description:

Frees the local general info structures needed by the adap iso module.

Parameters:

GI: Local general information of the adap iso structure to free.


Returned Value:

void


See Also:

SymbAdapIsoExtractRectRgns SymbAdapIsoSetWeightPt SymbAdapIsoSkewDistSqr SymbAdapIsoExtractInit

Keywords:

adaptive isocurves


SymbAdapIsoExtractInit

(adap_iso.c:161)

Prototype:

  SymbAdapIsoGenInfoStruct *SymbAdapIsoExtractInit(void)


Description:

Initializes local general info structures needed by the adap iso module.

Parameters:

None


Returned Value:

SymbAdapIsoGenInfoStruct *: Alloated dynamically structure.


See Also:

SymbAdapIsoExtractRectRgns SymbAdapIsoSetWeightPt SymbAdapIsoSkewDistSqr SymbAdapIsoExtractFree

Keywords:

adaptive isocurves


SymbAdapIsoExtractRectRgns

(adap_iso.c:1141)

Prototype:

  IPObjectStruct *SymbAdapIsoExtractRectRgns(SymbAdapIsoGenInfoStruct *GI,
                                             const CagdSrfStruct *Srf,
                                             CagdSrfDirType Dir,
                                             CagdRType Size,
                                             int Smoothing,
                                             int OutputType)


Description:

Extracts a valid coverage set of rectangular regions of roughly equal size to the given surface in the given direction Dir and size Size.

Parameters:

GI: Local general information of the adap iso structure.
Srf: To compute adaptive rectangular regions' tiles for.
Dir: Direction of adaptive isocurve extraction. Either U or V.
Size: Rough size of the edges of the generated rectangles.
Smoothing: Number of low pass smoothing steps to apply, 0 to disable.
OutputType: for UV coordinates in original surfaces. 1 for polygonal rectangles in Euclidean space. 2 for surface patches in Euclidean space.


Returned Value:

IPObjectStruct *: A list of rectangles, as OutputType sets.


See Also:

SymbAdapIsoExtract SymbAdapIsoSetWeightPt

Keywords:

adaptive isocurves


SymbAdapIsoSetExtractMinLevel

(adap_iso.c:1347)

Prototype:

  int SymbAdapIsoSetExtractMinLevel(SymbAdapIsoGenInfoStruct *GI, int MinLevel)


Description:

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

Parameters:

GI: Local general information of the adap iso structure.
MinLevel: At least that many subdivision will occur.


Returned Value:

int: Old value of Min subdivision level.


Keywords:

adaptive isocurves


SymbAdapIsoSetWeightPt

(adap_iso.c:1379)

Prototype:

  void SymbAdapIsoSetWeightPt(SymbAdapIsoGenInfoStruct *GI,
                              CagdRType *Pt,
                              CagdRType Scale,
                              CagdRType Width)


Description:

Sets the point location to consider using the adaptive iso generation.

Parameters:

GI: Local general information of the adap iso structure.
Pt: Point to consider or NULL to disable.
Scale: Scaling factor at Pt compared to a far location from Pt. Must be larger than 1.0 (1.0 has no effect).
Width: Control over the width of the effect.


Returned Value:

void


See Also:

SymbAdapIsoDistWeightPt SymbAdapIsoExtract

Keywords:




SymbAdapIsoSkewDistSqr

(adap_iso.c:123)

Prototype:

  CagdCrvStruct *SymbAdapIsoSkewDistSqr(int Level,
                                        CagdCrvStruct *Crv1,
                                        CagdCrvStruct *NCrv1,
                                        CagdCrvStruct *Crv2,
                                        CagdCrvStruct *NCrv2)


Description:

Computes a distance square function between Crv1 and Crv2 as a scalar field, taking into account the skewing (non orthogonality/conformality) of the parametrization:
                   ( d(Crv1(t) + Crv2(t))/dt x (Crv1(t) - Crv2(2)) )^2
SkewAdapDist(t) =  ---------------------------------------------------
                              ( d(Crv1(t) + Crv2(t))/dt )^2


Parameters:

Level: Maximum depth of recursion of adaptive iso algorithm.
Crv1: First curve to compute distance field from it to Crv2.
NCrv1: Normal vector field of Crv1.
Crv2: Second curve to compute distance field from it to Crv1.
NCrv2: Normal vector field of Crv2.


Returned Value:

CagdCrvStruct *: A scalar distance function field.


See Also:

SymbAdapIsoExtract

Keywords:




SymbAlgebraicProdSrf

(constrct.c:122)

Prototype:

  CagdSrfStruct *SymbAlgebraicProdSrf(const CagdCrvStruct *Crv1,
                                      const CagdCrvStruct *Crv2)


Description:


Multiply up algebraically the given two curves, C1(r) and C2(t). The result is a bivariate surface S(r, t) = C1(r) C2(t).

Parameters:

Crv1, Crv2: Two curves to multiply algebraically.


Returned Value:

CagdSrfStruct *: A surface represent their product, algebraically.


See Also:

SymbAlgebraicSumSrf SymbSwungAlgSumSrf

Keywords:




SymbAlgebraicSumSrf

(constrct.c:86)

Prototype:

  CagdSrfStruct *SymbAlgebraicSumSrf(const CagdCrvStruct *Crv1,
                                     const CagdCrvStruct *Crv2)


Description:

Adds up algebraically the given two curves, C1(r) and C2(t). The result is a bivariate surface S(r, t) = C1(r) + C2(t).

Parameters:

Crv1, Crv2: Two curves to sum algebraically.


Returned Value:

CagdSrfStruct *: A surface represent their sum, algebraically.


See Also:

SymbSwungAlgSumSrf SymbAlgebraicProdSrf

Keywords:




SymbAllPrisaSrfs

(prisa.c:58)

Prototype:

  CagdSrfStruct *SymbAllPrisaSrfs(const CagdSrfStruct *Srfs,
                                  int SamplesPerCurve,
                                  CagdRType Epsilon,
                                  CagdSrfDirType Dir,
                                  const 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 flatten out.
SamplesPerCurve: uring the approximation of a ruled surface as a developable surface.
Epsilon: Accuracy control for the piecewise ruled surface approximation. if Epsilon us positive, the surfaces are laid down on the plane, otherwise they are return as 3-space ruled surfaces and form a piecewise ruled-surface approximation to Srfs.
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.


See Also:

SymbPiecewiseRuledSrfApprox SymbPrisaRuledSrf TrimAllPrisaSrfs SymbPrisaGetCrossSections

Keywords:

layout prisa


SymbApproxCrvAsBzrCubics

(bzr_sym.c:1063)

Prototype:

  CagdCrvStruct *SymbApproxCrvAsBzrCubics(const CagdCrvStruct *Crv,
                                          CagdRType Tol,
                                          CagdRType MaxLen)


Description:

Given a curve - convert it to (possibly) piecewise cubic polynomials. 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 polynomials approximation is computed for Crv. 4. Piecewise polynomial Bspline curve - split into polynomial segments. 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 the total length of control polygon is (approximately) 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.


Returned Value:

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


See Also:

SymbApproxCrvAsBzrQuadratics SymbCrvCubicApprox CagdCubicCrvFit

Keywords:

conversion approximation


SymbApproxCrvAsBzrQuadratics

(bzr_sym.c:1277)

Prototype:

  CagdCrvStruct *SymbApproxCrvAsBzrQuadratics(const CagdCrvStruct *CCrv,
                                              CagdRType Tol,
                                              CagdRType MaxLen)


Description:

Given a curve - convert it to (possibly) piecewise quadratic polynomials. If the curve is 1. A quadratic - a copy if it is returned. 2. Lower than quadratic - a degree raised (to a quadratic) curve is returned. 3. Higher than quadratic - a C^1 continuous piecewise quadratic polynomial approximation is computed for Crv. 4. Piecewise polynomial Bspline curve - split into polynomial segments. In case 3, a list of polynomial quadratic curves is returned. Tol is then used for the distance tolerance error measure for the approximation. If the total length of control polygon is (approximately) more than MaxLen, the curve is subdivided until this is not the case.

Parameters:

CCrv: To approximate using quadratic Bezier polynomials.
Tol: Accuracy control.
MaxLen: Maximum arc length of curve.


Returned Value:

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


See Also:

SymbApproxCrvAsBzrCubics CagdQuadraticCrvFit

Keywords:

conversion approximation


SymbArcArrayFree

(symb_gen.c:180)

Prototype:

  void SymbArcArrayFree(SymbArcStruct *ArcArray, int Size)


Description:

Deallocates and frees an array of Arc structure.

Parameters:

ArcArray: To be deallocated.
Size: Of the deallocated array.


Returned Value:

void


Keywords:

free


SymbArcArrayNew

(symb_gen.c:25)

Prototype:

  SymbArcStruct *SymbArcArrayNew(int Size)


Description:

Allocates and resets all slots of an array of Arc structures.

Parameters:

Size: Size of Arc array to allocate.


Returned Value:

SymbArcStruct *: An array of Arc structures of size Size.


Keywords:

allocation


SymbArcCopy

(symb_gen.c:79)

Prototype:

  SymbArcStruct *SymbArcCopy(SymbArcStruct *Arc)


Description:

Allocates and copies all slots of a Arc structure.

Parameters:

Arc: To be copied.


Returned Value:

SymbArcStruct *: A duplicate of Arc.


Keywords:

copy


SymbArcCopyList

(symb_gen.c:104)

Prototype:

  SymbArcStruct *SymbArcCopyList(SymbArcStruct *ArcList)


Description:

Allocates and copies a list of arc structures.

Parameters:

ArcList: To be copied.


Returned Value:

SymbArcStruct *: A duplicated list of arcs.


Keywords:

copy


SymbArcFree

(symb_gen.c:133)

Prototype:

  void SymbArcFree(SymbArcStruct *Arc)


Description:

Deallocates and frees all slots of an arc structure.

Parameters:

Arc: To be deallocated.


Returned Value:

void


Keywords:

free


SymbArcFreeList

(symb_gen.c:155)

Prototype:

  void SymbArcFreeList(SymbArcStruct *ArcList)


Description:

Deallocates and frees an arc structure list:

Parameters:

ArcList: To be deallocated.


Returned Value:

void


Keywords:

free


SymbArcNew

(symb_gen.c:53)

Prototype:

  SymbArcStruct *SymbArcNew(int Arc)


Description:

Allocates and resets all slots of an Arc structure.

Parameters:

Arc: TRUE for an arc, FALSE for degenerated-arc (a line...).


Returned Value:

SymbArcStruct *: A Arc structure.


Keywords:

allocation


SymbArcs2Crvs

(biarc.c:593)

Prototype:

  CagdCrvStruct *SymbArcs2Crvs(const SymbArcStruct *Arcs)


Description:

Converts a list of arcs (and lines) into curves geometry.

Parameters:

Arcs: To convert to real curves' geometry.


Returned Value:

CagdCrvStruct *: Generated curves.


Keywords:




SymbBspBasisInnerProd

(bsp_sym.c:758)

Prototype:

  CagdRType SymbBspBasisInnerProd(int Index1, int Index2,
                                  CagdCrvStruct *InnerProdCrv1,
                                  CagdCrvStruct *InnerProdCrv2)


Description:

Computes the inner product of two basis functions over a similar function space, as created via SymbBspBasisInnerProdPrep. The inner product is defined as "int( B1(t) * B2(t) )" where "int ( . )" denotes the integral of the function over all the domain.

Parameters:

Index1: Index of first basis function.
Index2: Index of second basis function.
InnerProdCrv1: ointer to first basis function.
InnerProdCrv2: ointer to second basis function.


Returned Value:

CagdRType: The value of the inner product.


See Also:

SymbBspBasisInnerProdPrep SymbBspBasisInnerProdMat SymbBspBasisInnerProd2

Keywords:




SymbBspBasisInnerProd2

(bspiprod.c:67)

Prototype:

  CagdRType SymbBspBasisInnerProd2(const CagdRType *KV,
                                   int Len,
                                   int Order1,
                                   int Order2,
                                   int Index1,
                                   int Index2)


Description:

Computes the inner product of two B-spline basis functions over a similar function space. The inner product is defined as "int( B1(t) * B2(t) )" where "int ( . )" denotes the integral of the function over all the domain. The computation is conducted recursively over the orders until Order1/2 are constant.

Parameters:

KV: A common knot vector of the b-spline basis functions.
Len: Length of knot vector KV.
Order1: Order of first basis function.
Order2: Order of second basis function.
Index1: Index of first basis function.
Index2: Index of second basis function.


Returned Value:

CagdRType: The value of the inner product.


See Also:

SymbBspBasisInnerProd

Keywords:




SymbBspBasisInnerProdMat

(bsp_sym.c:601)

Prototype:

  CagdRType **SymbBspBasisInnerProdMat(const CagdRType *KV,
                                       int Len,
                                       int Order1,
                                       int Order2)


Description:

Computes a matrix of size (Len x (Len - (Order1 - Order2)) of inner products, SymbBspBasisInnerProd style. matrix is allocated dynamically.

Parameters:

KV: Knot vector of the basis functions (of Order).
Len: Length of knot vector KV.
Order1: Order of first basis function.
Order2: Order of second basis function, <= Order1.


Returned Value:

CagdRType **: The allocated matrix and values of inner products.


See Also:

SymbBspBasisInnerProd SymbBspBasisInnerProdPrep

Keywords:




SymbBspBasisInnerProdPrep

(bsp_sym.c:667)

Prototype:

  void SymbBspBasisInnerProdPrep(const CagdRType *KV,
                                 int Len,
                                 int Order1,
                                 int Order2,
                                 CagdCrvStruct **InnerProdCrv1,
                                 CagdCrvStruct **InnerProdCrv2)


Description:

Prepares for the computation of the inner product of pair of basis functions over a similar function space. The inner product is defined as "int( B1(t) * B2(t) )" where "int ( . )" denotes the integral of the function over all the domain.

Parameters:

KV: Knot vector of the basis functions (of Order).
Len: Length of knot vector KV.
Order1: Order of first basis function.
Order2: Order of second basis function, <= Order1.
InnerProdCrv1, InnerProdCrv2: here to save the computed inner products.


Returned Value:

void


See Also:

SymbBspBasisInnerProd SymbBspBasisInnerProdPrep2

Keywords:




SymbBspBasisInnerProdPrep2

(bsp_sym.c:717)

Prototype:

  void SymbBspBasisInnerProdPrep2(const CagdRType *KV1,
                                  const CagdRType *KV2,
                                  int Len1,
                                  int Len2,
                                  int Order1,
                                  int Order2,
                                  CagdCrvStruct **InnerProdCrv1,
                                  CagdCrvStruct **InnerProdCrv2)


Description:

Prepares for the computation of the inner product of pair of basis functions over a similar function space. The inner product is defined as "int( B1(t) * B2(t) )" where "int ( . )" denotes the integral of the function over all the domain.

Parameters:

KV1: Knot vector of the first basis functions (of Order1).
KV2: Knot vector of the second basis functions (of Order2).
Len1: Length of knot vector KV1.
Len2: Length of knot vector KV2.
Order1: Order of first basis function.
Order2: Order of second basis function, <= Order1.
InnerProdCrv1: ointer to first basis function.
InnerProdCrv2: ointer to second basis function.


Returned Value:

void


See Also:

SymbBspBasisInnerProd2 SymbBspBasisInnerProdPrep

Keywords:




SymbBzrDegReduce

(cmp_crvs.c:136)

Prototype:

  CagdCrvStruct *SymbBzrDegReduce(const CagdCrvStruct *Crv, CagdRType Eps)


Description:

For given Bezier curve, performs maximal degree reduction of the curve. Maximal degree reduction is defined as a process of degree redusing the curve as long as the new curve represents the same curve.

Parameters:

Crv: A Bezier curve.
Eps: A threshold for degree reduction computations.


Returned Value:

CagdCrvStruct *: Maximal degree reduced curve. If no degree reduction was done, returns NULL.


See Also:

BzrCrvDegreeRaise BzrCrvDegreeReduce

Keywords:




SymbCanonicBzrCrv

(cmp_crvs.c:72)

Prototype:

  CagdCrvStruct *SymbCanonicBzrCrv(const CagdCrvStruct *Crv, CagdRType Eps)


Description:

For given Bezier curve, returns its irreducible version (its canonical representation), by reversing the processes of degree raising and composition.

Parameters:

Crv: A Bezier curve.
Eps: A threshold for "canonical representation" computations.


Returned Value:

CagdCrvStruct *: Canonically represented Bezier curve.


Keywords:




SymbCircTanTo2Crvs

(crv_tans.c:345)

Prototype:

  CagdPtStruct *SymbCircTanTo2Crvs(const CagdCrvStruct *Crv1,
                                   const CagdCrvStruct *Crv2,
                                   CagdRType Radius,
                                   CagdRType Tol)


Description:

Computes all circles of prescribed radius that are tangent to given two curves. Compute the offset of +/-R to the two curves and intersect the pairs.

Parameters:

Crv1, Crv2: The two curves to find the circle that is tangent to both.
Radius: Of the circle that is tangent to Crv1/2.
Tol: Tolerance of approximation.


Returned Value:

CagdPtStruct *: List of the centers of bi-tangent circles. Each such point also contains a "Params" attribute with the two parameter values of the two curves.


See Also:

SymbTangentToCrvAtTwoPts MvarCircTanTo2Crvs

Keywords:

bi-tangent


SymbClipCrvToSrfDomain

(blending.c:30)

Prototype:

  CagdCrvStruct *SymbClipCrvToSrfDomain(const CagdSrfStruct *Srf,
                                        const CagdCrvStruct *UVCrv)


Description:

Clips the given curve to the domain prescribed by Srf.

Parameters:

Srf: Surface to clip UVCrv to its parametric domain.
UVCrv: The curve to clip.


Returned Value:

CagdCrvStruct *: Clipped curve.


Keywords:




SymbComposeCrvCrv

(composit.c:116)

Prototype:

  CagdCrvStruct *SymbComposeCrvCrv(const CagdCrvStruct *Crv1,
                                   const 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 curves to compose together.


Returned Value:

CagdCrvStruct *: The composed curve.


See Also:

BzrComposeCrvCrv SymbDecomposeCrvCrv SymbComposePeriodicCrvCrv SymbComposeSrfCrv MvarComposeTVSrf

Keywords:

composition


SymbComposePeriodicCrvCrv

(composit.c:541)

Prototype:

  CagdCrvStruct *SymbComposePeriodicCrvCrv(const CagdCrvStruct *CCrv1,
                                           const CagdCrvStruct *CCrv2,
                                           CagdRType Epsilon)


Description:

Given two curves, Crv1 and Crv2, computes the composition Crv1(Crv2(t)). Crv2 must be a scalar curve that is clipped and tiled modulus the domain of Crv1. As an example, if Crv1's domain is [1, 5), and Crv2's range is [-3, 11), then Crv2 will be clipped to the following pieces:
1. [-3, 1) that is remapped to [1, 5) and composed.
2. [ 1, 5) that is composed as is.
3. [ 5, 9) that is remapped to [1, 5) and composed.
4. [ 9, 11) that is remapped to [1, 3) and composed.


Parameters:

CCrv1, CCrv2: he two curves to compose together.
Epsilon: Of subdivision at boundary crossing locations.


Returned Value:

CagdCrvStruct *: The composed curve.


See Also:

SymbComposeCrvCrv

Keywords:




SymbComposePeriodicSrfCrv

(composit.c:1152)

Prototype:

  CagdCrvStruct *SymbComposePeriodicSrfCrv(const CagdSrfStruct *Srf,
                                           const CagdCrvStruct *Crv,
                                           CagdRType Epsilon)


Description:


Given a curve Crv and surface Srf, computes the composition Srf(Crv(t)). Crv must be a two dimensional curve that is clipped and tiled modulus the domain of Srf. As an example, if Surface V domain is [1, 5), and Crv Y range [-3, 11), then Crv will be V clipped to the following pieces:
1. [-3, 1) that is remapped to [1, 5) and composed.
2. [ 1, 5) that is composed as is.
3. [ 5, 9) that is remapped to [1, 5) and composed.
4. [ 9, 11) that is remapped to [1, 3) and composed.


Parameters:

Srf, Crv: The curve and periodic surface to compose together.
Epsilon: Of subdivision at boundary crossing locations.


Returned Value:

CagdCrvStruct *: The composed curve.


See Also:

SymbComposeSrfCrv

Keywords:

composition


SymbComposeSrfClrCache

(composit.c:660)

Prototype:

  void SymbComposeSrfClrCache(const CagdSrfStruct *Srf)


Description:


Given a surface Srf that was used in a composition operation with some curve via SymbComposeSrfCrv while SymbComposeSrfSetCache was on, cleans all cached informaation on the surface.

Parameters:

Srf: Surface to clean all its cached data for SymbComposeSrfCrv.


Returned Value:

void


See Also:

SymbComposeSrfCrv SymbComposeSrfClrCache

Keywords:

composition


SymbComposeSrfCrv

(composit.c:725)

Prototype:

  CagdCrvStruct *SymbComposeSrfCrv(const CagdSrfStruct *Srf,
                                   const CagdCrvStruct *Crv,
                                   int EvalLinCrvsDirectly)


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. If Crv is detected as an isoparametric curve in Srf, it is returned as such, which is far more efficient in size, typically.

Parameters:

Srf, Crv: The curve and surface to compose.
EvalLinCrvsDirectly: If positive, evaluate linear curves (that are not isoparametric curves) directly with no precise composition, with more control points than EvalLinCrvsDirectly


Returned Value:

CagdCrvStruct *: The resulting composition.


See Also:

SymbDecomposeCrvCrv SymbComposeSrfSetCache SymbComposePeriodicSrfCrv MvarComposeTVSrf SymbMapUVCrv2E3 SymbComposeSrfCrv2

Keywords:

composition


SymbComposeSrfCrv2

(composit.c:859)

Prototype:

  CagdCrvStruct *SymbComposeSrfCrv2(const CagdSrfStruct *Srf,
                                    const 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.


See Also:

SymbDecomposeCrvCrv SymbComposeSrfSetCache SymbComposePeriodicSrfCrv MvarComposeTVSrf SymbMapUVCrv2E3 SymbComposeSrfCrv

Keywords:

composition


SymbComposeSrfPatch

(compost2.c:601)

Prototype:

  CagdSrfStruct *SymbComposeSrfPatch(const CagdSrfStruct *Srf,
                                     const CagdUVType UV00,
                                     const CagdUVType UV01,
                                     const CagdUVType UV10,
                                     const CagdUVType UV11)


Description:

Computes a surface patch that is a general rectangle in the domain of given surface.

Parameters:

Srf: In which the four UVij corners resides.
UV00, UV01, UV10, UV11: The four corners of the patch to extract.


Returned Value:

CagdSrfStruct *: A patch inside Srf that is a rectangle through UVij in the domain of Srf. Only the four boundaries will be precisely reconstructed and the resulting surface will be contained in Srf only if Srf is planar.


See Also:

SymbComposeSrfCrv SymbComposeSrfSrf

Keywords:




SymbComposeSrfSetCache

(composit.c:630)

Prototype:

  int SymbComposeSrfSetCache(int Cache)


Description:

Activate caching during surface-curve composition operations.

Parameters:

Cache: TRUE to activate the cache, FALSE to disable it.


Returned Value:

int: Old state of caching.


See Also:

SymbComposeSrfCrv SymbComposeSrfClrCache

Keywords:

composition


SymbComposeSrfSrf

(compost2.c:46)

Prototype:

  CagdSrfStruct *SymbComposeSrfSrf(const CagdSrfStruct *Srf1,
                                   const CagdSrfStruct *Srf2)


Description:

Given surfaces Srf2 and Srf1, computes the composition Srf1(Srf2(u, v)). Srf2 must be a two dimensional surface completely contained in the parametric domain of Srf1.

Parameters:

Srf1, Srf2: The surfaces to compose. Srf1 must be a Bezier.


Returned Value:

CagdSrfStruct *: The resulting composition.


See Also:

SymbDecomposeCrvCrv SymbComposeSrfCrv MvarComposeTVSrf

Keywords:

composition


SymbComposeTileObjectInSrf

(compost2.c:666)

Prototype:

  IPObjectStruct *SymbComposeTileObjectInSrf(const IPObjectStruct *PTile,
                                             const CagdSrfStruct *DeformSrf,
                                             IrtRType UTimes,
                                             IrtRType VTimes,
                                             int FitObj)


Description:

Tile an input object, in place, (UTimes x VTimes) in the given bivariate surface. Computation is made precise, using composition operations.

Parameters:

PTile: The object to map through the bivariate. Can be a (list of) curve(s) or surface(s) only. If PTile is formed out of surface(s), DeformSrf must be a Bezier surface.
DeformSrf: The mapping/deformation function from R2 to R2.
UTimes, VTimes: Number of times to tile the object in each axis.
FitObj: 2 to rescale PTile tile to precisely fit the domain (UTimes x VTimes), 1 to assume PTile is in [0,1]^2 when fitting domain, 0 to apply no mapping at all.


Returned Value:

IPObjectStruct *: (UTimes x VTimes) mapped and deformed objects.


See Also:

SymbComposeSrfCrv SymbComposeSrfSrf TrivComposeTileObjectInTVBzr

Keywords:




SymbConeConeBisect

(smp_skel.c:1457)

Prototype:

  CagdSrfStruct *SymbConeConeBisect(const CagdVType Cone1Dir,
                                    CagdRType Cone1Angle,
                                    const CagdVType Cone2Dir,
                                    CagdRType Cone2Angle,
                                    CagdRType Size)


Description:

Compute the bisector surface between two cones sharing an apex. The apex is assumed to be at the origin. The computation is reduced to that of a bisector between a line and a cone, that has a rational form.

Parameters:

Cone1Dir: Direction of first cone axes.
Cone1Angle: panning angle of the first cone, in degrees.
Cone2Dir: Direction of second cone axes.
Cone2Angle: panning angle of the second cone, in degrees.
Size: Portion of result as it is infinite.


Returned Value:

CagdSrfStruct *: Constructed bisector surface.


See Also:

SymbPlanePointBisect SymbCylinPointBisect SymbConePointBisect SymbSpherePointBisect SymbTorusPointBisect SymbConeLineBisect SymbSphereLineBisect SymbPlaneLineBisect SymbCylinPlaneBisect SymbConePlaneBisect SymbSpherePlaneBisect SymbCylinSphereBisect SymbSphereSphereBisect SymbTorusSphereBisect SymbTorusTorusBisect SymbConeSphereBisect SymbConeConeBisect2 SymbConeCylinBisect SymbCylinCylinBisect

Keywords:

bisectors skeleton


SymbConeConeBisect2

(smp_skel.c:1984)

Prototype:

  CagdSrfStruct *SymbConeConeBisect2(const CagdVType Cone1Pos,
                                     const CagdVType Cone1Dir,
                                     CagdRType Cone1Angle,
                                     const CagdVType Cone2Pos,
                                     const CagdVType Cone2Dir,
                                     CagdRType Cone2Angle)


Description:

Compute the bisector surface between two cones in general position. Let C1(u), T1(u), and N1(u) and C2(v), T2(v), and N2(v) be cones' cross sections, cross sections' unit tangent field and cross sections' unit normal field. Ci(u) can be derived as a transformed circle. Ti(u) are unit circles rotated to the proper orientation ConeiDir and Ni(u) is a circle on the unit sphere with the proper orientation. Finally, note that Ci(u), Ti(u), and Ni(u) are all rational. Then, the bisector is computed as the solution of the following three linear equations:
  < B - C1(u), T1(u) > = 0

  < B - C2(v), T2(v) > = 0

  < B, N1(u) - N2(v) > = < C1(u), N1(u) > - < C2(v), N2(v) >

The first two constraints the bisector to be on the normal plane of the generators of the two cones that are fixed along the generator (the straight lines of the cone). The last constraint make sure the bisector is on the plane that bisects the two tangent planes of the two cones. This computation is following the bisectors of two developables, presented in, "Geometric Properties of Bisector Surfaces", by Martin Peternell, Graphical Models, Volume 62, No. 3, May 2000.

Parameters:

Cone1Pos: The apex point of the first cone.
Cone1Dir: The direction of the first cone.
Cone1Angle: Spanning angle of the first cone, in degrees.
Cone2Pos: The apex point of the the second cone.
Cone2Dir: The direction of the second cone.
Cone2Angle: Spanning angle of the second cone, in degrees.


Returned Value:

CagdSrfStruct *: Constructed bisector surface.


See Also:

SymbPlanePointBisect SymbCylinPointBisect SymbConePointBisect SymbSpherePointBisect SymbTorusPointBisect SymbConeLineBisect SymbSphereLineBisect SymbPlaneLineBisect SymbCylinPlaneBisect SymbConePlaneBisect SymbSpherePlaneBisect SymbCylinSphereBisect SymbSphereSphereBisect SymbConeSphereBisect SymbConeConeBisect SymbCylinCylinBisect SymbConeCylinBisect

Keywords:

bisectors skeleton


SymbConeCylinBisect

(smp_skel.c:2201)

Prototype:

  CagdSrfStruct *SymbConeCylinBisect(const CagdVType Cone1Pos,
                                     const CagdVType Cone1Dir,
                                     CagdRType Cone1Angle,
                                     const CagdVType Cyl2Pos,
                                     const CagdVType Cyl2Dir,
                                     CagdRType Cyl2Rad)


Description:

Compute the bisector surface between two cones in general position. Let C1(u), T1(u), and N1(u) and C2(v), T2(v), and N2(v) be cones' cross sections, cross sections' unit tangent field and cross sections' unit normal field. Ci(u) can be derived as a transformed circle. Ti(u) are unit circles rotated to the proper orientation ConeiDir and Ni(u) is a circle on the unit sphere with the proper orientation. Finally, note that Ci(u), Ti(u), and Ni(u) are all rational. Then, the bisector is computed as the solution of the following three linear equations:
  < B - C1(u), T1(u) > = 0

  < B - C2(v), T2(v) > = 0

  < B, N1(u) - N2(v) > = < C1(u), N1(u) > - < C2(v), N2(v) >

The first two constraints the bisector to be on the normal plane of the generators of the two cylinders that are fixed along the generator (the straight lines of the cylinder). The last constraint make sure the bisector is on the plane that bisects the two tangent planes of the two cylinders. This computation is following the bisectors of two developables, presented in, "Geometric Properties of Bisector Surfaces", by Martin Peternell, Graphical Models, Volume 62, No. 3, May 2000.

Parameters:

Cone1Pos: The apex point of the first cone.
Cone1Dir: The direction of the first cone.
Cone1Angle: Spanning angle of the first cone, in degrees.
Cyl2Pos: A point on the axis of the second cylinder.
Cyl2Dir: The direction of the second cylinder.
Cyl2Rad: Radius of second cylinder.


Returned Value:

CagdSrfStruct *: Constructed bisector surface.


See Also:

SymbPlanePointBisect SymbCylinPointBisect SymbConePointBisect SymbSpherePointBisect SymbTorusPointBisect SymbConeLineBisect SymbSphereLineBisect SymbPlaneLineBisect SymbCylinPlaneBisect SymbConePlaneBisect SymbSpherePlaneBisect SymbCylinSphereBisect SymbSphereSphereBisect SymbConeSphereBisect SymbConeConeBisect SymbCylinCylinBisect SymbConeConeBisect2

Keywords:

bisectors skeleton


SymbConeLineBisect

(smp_skel.c:1027)

Prototype:

  CagdSrfStruct *SymbConeLineBisect(const CagdVType ConeDir,
                                    CagdRType ConeAngle,
                                    const CagdVType LineDir,
                                    CagdRType Size)


Description:

Compute the bisector surface between a cone and a line through its apex. Assumes the cone's apex is at the origin.

Parameters:

ConeDir: Direction of cone axes. Must be in the northern hemisphere.
ConeAngle: Spanning angle of the cone, in degrees.
LineDir: Direction of line from the origin. Must be in the northern hemisphere.
Size: Portion of result as it is infinite.


Returned Value:

CagdSrfStruct *: Constructed bisector surface.


See Also:

SymbPtCrvBisectOnSphere SymbPlanePointBisect SymbCylinPointBisect SymbConePointBisect SymbSpherePointBisect SymbTorusPointBisect SymbSphereLineBisect SymbPlaneLineBisect SymbConePlaneBisect SymbCylinPlaneBisect SymbSpherePlaneBisect SymbCylinSphereBisect SymbSphereSphereBisect SymbConeSphereBisect SymbTorusSphereBisect SymbTorusTorusBisect SymbConeConeBisect SymbConeConeBisect2 SymbConeCylinBisect SymbCylinCylinBisect

Keywords:

bisectors skeleton


SymbConePlaneBisect

(smp_skel.c:1254)

Prototype:

  CagdSrfStruct *SymbConePlaneBisect(const CagdPType ConeApex,
                                     const CagdVType ConeDir,
                                     CagdRType ConeAngle,
                                     CagdRType Size)


Description:

Compute the bisector surface between a cone and the XY plane. The computation is reduced to that of a bisector between a line and a cone, that has a rational form.

Parameters:

ConeApex: Apex point of cone.
ConeDir: Direction of cylinder. Must be in the northern hemisphere.
ConeAngle: Angular span of cone, in degrees.
Size: Portion of result as it is infinite.


Returned Value:

CagdSrfStruct *: Constructed bisector surface.


See Also:

SymbPlanePointBisect SymbCylinPointBisect SymbConePointBisect SymbSpherePointBisect SymbTorusPointBisect SymbConeLineBisect SymbSphereLineBisect SymbPlaneLineBisect SymbCylinPlaneBisect SymbSpherePlaneBisect SymbCylinSphereBisect SymbSphereSphereBisect SymbConeSphereBisect SymbTorusSphereBisect SymbTorusTorusBisect SymbConeConeBisect SymbConeConeBisect2 SymbConeCylinBisect SymbCylinCylinBisect

Keywords:

bisectors skeleton


SymbConePointBisect

(smp_skel.c:800)

Prototype:

  CagdSrfStruct *SymbConePointBisect(const CagdPType ConeApex,
                                     const CagdVType ConeDir,
                                     CagdRType ConeAngle,
                                     const CagdPType Pt,
                                     CagdRType Size)


Description:

Compute the bisector surface between a cone and a point.

Parameters:

ConeApex: Apex point of cone.
ConeDir: Direction of cone axes.
ConeAngle: Spanning angle of the cone, in degrees.
Pt: Direction of line from origin.
Size: Portion of result as it is infinite.


Returned Value:

CagdSrfStruct *: Constructed bisector surface.


See Also:

SymbPtCrvBisectOnSphere SymbPlanePointBisect SymbCylinPointBisect SymbSpherePointBisect SymbTorusPointBisect SymbConePlaneBisect SymbCylinPlaneBisect SymbSpherePlaneBisect SymbConeLineBisect SymbSphereLineBisect SymbCylinSphereBisect SymbSphereSphereBisect SymbConeSphereBisect SymbTorusSphereBisect SymbTorusTorusBisect SymbConeConeBisect SymbConeConeBisect2 SymbConeCylinBisect SymbCylinCylinBisect

Keywords:

bisectors skeleton


SymbConeSphereBisect

(smp_skel.c:1406)

Prototype:

  CagdSrfStruct *SymbConeSphereBisect(const CagdPType ConeApex,
                                      const CagdVType ConeDir,
                                      CagdRType ConeAngle,
                                      const CagdPType SprCntr,
                                      CagdRType SprRad,
                                      CagdRType Size)


Description:

Compute the bisector surface between a sphere and a cone. The computation is reduced to that of a bisector between a point and a cone, that has a rational form.

Parameters:

ConeApex: Apex point of cone.
ConeDir: Direction of cone axes.
ConeAngle: Spanning angle of the cone, in degrees.
SprCntr: Center location of the sphere.
SprRad: Radius of sphere.
Size: Portion of result as it is infinite.


Returned Value:

CagdSrfStruct *: Constructed bisector surface.


See Also:

SymbPlanePointBisect SymbCylinPointBisect SymbConePointBisect SymbSpherePointBisect SymbTorusPointBisect SymbConeLineBisect SymbSphereLineBisect SymbPlaneLineBisect SymbCylinPlaneBisect SymbConePlaneBisect SymbSpherePlaneBisect SymbCylinSphereBisect SymbSphereSphereBisect SymbTorusSphereBisect SymbTorusTorusBisect SymbConeConeBisect SymbConeConeBisect2 SymbConeCylinBisect SymbCylinCylinBisect

Keywords:

bisectors skeleton


SymbConicDistCrvCrv

(distance.c:977)

Prototype:

  CagdSrfStruct *SymbConicDistCrvCrv(const CagdCrvStruct *CCrv1,
                                     const CagdCrvStruct *CCrv2,
                                     CagdRType Dist)


Description:

Computes the surface of equadistance to two univariate (curve) entities. The zero set of the computed surface equal to the locus of points whose sum or different of distances to Crv1 and Crv2 equal Dist. Let d1 and d2 be the two distances of a point on the conic to Crv1 and Crv2, respectively:
                              d1 +/- d2 = Dist

The distance to a curve is a local minimal distance to it occurs along the normal of the curves. Hence we first seek the solution to the following two equations in X and Y and two unknowns, A and B:
  C1(t) + a N1(t) = C2(r) + b N2(r),      a, b > 0

where Ni is the unnormalized normal of Ci. Given a and b (rationals), d1 and d2 equals: d1 = a || N1(t) ||) = a sqrt( ), d2 = b || N2(s) ||) = b sqrt( ), and we need to solve for,
      a sqrt(  ) +/- b sqrt(  ) = Dist

Because we are unable to represent square roots as rationals, we square:
      a^2  + b^2  - Dist^2 =
              = -/+ 2 a b sqrt(  ) sqrt(  )

or
      ( a^2  + b^2  - Dist^2 )^2 -
                          - 4 (ab)^2   = 0


Parameters:

CCrv1, CCrv2: Two curves to compute elliptic/hyperbolic distance function to. Assumes E2 curves.
Dist: Distance to the two entities.


Returned Value:

CagdSrfStruct *: A scalar surface whose zero set provides the conic distance (both elliptic sum and hyperbolc difference).


Keywords:




SymbCrv2DCurvatureSign

(curvatur.c:452)

Prototype:

  CagdCrvStruct *SymbCrv2DCurvatureSign(const 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: To compute the curvature sign field.


Returned Value:

CagdCrvStruct *: Computed curvature sign field.


See Also:

SymbCrv2DCurvatureSqr SymbCrv3DCurvatureSqr SymbCrv3DCurvatureSqr SymbCrv3DRadiusNormal SymbCrv3DCurvatureNormal SymbCrv2DInflectionPts SymbCrvExtremCrvtrPts

Keywords:

curvature


SymbCrv2DCurvatureSqr

(curvatur.c:41)

Prototype:

  CagdCrvStruct *SymbCrv2DCurvatureSqr(const 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 the curvature field for.


Returned Value:

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


See Also:

SymbCrv3DCurvatureSqr SymbCrv3DRadiusNormal SymbCrv3DCurvatureNormal SymbCrv2DCurvatureSign SymbCrv2DInflectionPts SymbCrvExtremCrvtrPts

Keywords:

curvature


SymbCrv2DInflectionPts

(curvatur.c:601)

Prototype:

  CagdPtStruct *SymbCrv2DInflectionPts(const 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 SymbCrvExtremCrvtrPts

Keywords:

curvature inflection points


SymbCrv2DUnnormNormal

(curvatur.c:303)

Prototype:

  CagdCrvStruct *SymbCrv2DUnnormNormal(const 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

(symbpoly.c:254)

Prototype:

  CagdPolylineStruct *SymbCrv2Polyline(const 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 sets the maximum error allowed between the piecewise linear approximation and original curve. 2 - TolSamples are set optimally, considering the isocurve's curvature.
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


SymbCrv2PolylineSetTlrncErrorFunc

(symbpoly.c:402)

Prototype:

  SymbCrv2PolylineTlrncErrorFuncType SymbCrv2PolylineSetTlrncErrorFunc(
                                   SymbCrv2PolylineTlrncErrorFuncType ErrorFunc)


Description:

Sets the error function to be used by optimal tolerance based approx. of curves into polylines. This function should return TRUE if tolerance is met, FALSE if the curve is to be further divided. This function, if defined, is invoked in addition to the tolerance testing.

Parameters:

ErrorFunc: New error function to use.


Returned Value:

SymbCrv2PolylineTlrncErrorFuncType: Old error function reference.


See Also:

SymbCrv2Polyline

Keywords:

error handling


SymbCrv3DCurvatureNormal

(curvatur.c:354)

Prototype:

  CagdCrvStruct *SymbCrv3DCurvatureNormal(const 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 SymbCrvExtremCrvtrPts

Keywords:

curvature


SymbCrv3DCurvatureSqr

(curvatur.c:150)

Prototype:

  CagdCrvStruct *SymbCrv3DCurvatureSqr(const 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 SymbCrvExtremCrvtrPts

Keywords:

curvature


SymbCrv3DRadiusNormal

(curvatur.c:232)

Prototype:

  CagdCrvStruct *SymbCrv3DRadiusNormal(const 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 SymbCrvExtremCrvtrPts SymbCrv2DUnnormNormal

Keywords:

curvature


SymbCrvAdapOffset

(offset.c:839)

Prototype:

  CagdCrvStruct *SymbCrvAdapOffset(const 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 SymbCrvVarOffset SymbCrvAdapVarOffset

Keywords:

offset


SymbCrvAdapOffsetTrim

(offset.c:1126)

Prototype:

  CagdCrvStruct *SymbCrvAdapOffsetTrim(const 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


SymbCrvAdapVarOffset

(offset.c:986)

Prototype:

  CagdCrvStruct *SymbCrvAdapVarOffset(const CagdCrvStruct *OrigCrv,
                                      const CagdCrvStruct *VarOffsetDist,
                                      CagdRType OffsetError,
                                      SymbVarOffCrvFuncType VarOffsetAprxFunc,
                                      CagdBType BezInterp)


Description:

Given a curve and a scalar offset function VarOffsetDist, returns an approximation to the variable offset curve by offseting the control polygon in the normal direction. This function computes an approximation to the offset using VarOffsetAprxFunc, 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.
VarOffsetDist: A scalar distance function of the variable offset. Must posses a parametric domain similar to OrigCrv.
OffsetError: Tolerance control.
VarOffsetAprxFunc: function that can be used to approximate variable offset of a curve. If NULL SymbCrvVarOffset 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 SymbCrvVarOffset SymbCrvSubdivOffset SymbCrvAdapOffset SymbSrfOffset SymbSrfSubdivOffset SymbCrvAdapOffsetTrim SymbCrvLeastSquarOffset SymbCrvMatchingOffset

Keywords:

offset


SymbCrvAdd

(symb_crv.c:45)

Prototype:

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


Description:

Given two curves - add them coordinate-wise. 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 coordinate-wise.


Returned Value:

CagdCrvStruct *: The summation of Crv1 + Crv2 coordinate-wise.


See Also:

SymbCrvSub SymbCrvMult

Keywords:

addition symbolic computation


SymbCrvArcLen

(arc_len.c:383)

Prototype:

  CagdRType SymbCrvArcLen(const 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 SymbCrvArcLenSclrCrv 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.


See Also:

SymbCrvArcLen2

Keywords:

arc length


SymbCrvArcLen2

(arc_len.c:654)

Prototype:

  CagdRType SymbCrvArcLen2(const CagdCrvStruct *Crv, CagdRType Epsilon)


Description:

Computes a tight approximation to the arc length of a curve. Estimates arc length by bounding from above and from below the arc len: + From above, using the arc length control polygon of the curve. + From below, using the chord P0Pn, the line from first to last control point. If difference is greater than Epsilon, divide and coquer. If, however, the given curve is linear., is control polygon (also arc len) length is returned immediately.

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.


See Also:

SymbCrvArcLen

Keywords:

arc length


SymbCrvArcLenCrv

(arc_len.c:462)

Prototype:

  CagdCrvStruct *SymbCrvArcLenCrv(const CagdCrvStruct *Crv,
                                  CagdRType Fineness,
                                  int Order)


Description:

Computes an approximated arc length curve from a given curve. Approximation is achieved by least square fitting of points sampled along the curve that are arc length parameterized.

Parameters:

Crv: To approximate as an arc length curve.
Fineness: Tolerance to use is sampling the original curve.
Order: Order of least square fit curve.


Returned Value:

CagdCrvStruct *: A polynomial curve similar to input curve but with almost arc length parametrization.


Keywords:

arc length


SymbCrvArcLenSclrCrv

(arc_len.c:340)

Prototype:

  CagdCrvStruct *SymbCrvArcLenSclrCrv(const CagdCrvStruct *Crv,
                                      CagdRType Epsilon)


Description:

Computes a scalar curve approximating the arc length of given curve Crv. Arc length is estimated by computing the square of Crv's 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


SymbCrvArcLenSteps

(arc_len.c:416)

Prototype:

  CagdPtStruct *SymbCrvArcLenSteps(const 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


SymbCrvBiArcApprox

(biarc.c:61)

Prototype:

  SymbArcStruct *SymbCrvBiArcApprox(const CagdCrvStruct *Crv,
                                    CagdRType Tolerance,
                                    CagdRType MaxAngle)


Description:

Computes a piecewise biarc approximation to given freeform planar curve. The following steps are performed during this approximation process: 1. The curve is split at all C^1 discontinuities. 2. The curve is split at inflection points, if any. 3. Each convex/concave curve region: a. Fit the curve region with a G^1 continuous biarc that is tangent to the curve's region at the region's end points. b. If fit is good enough, we stop. Otherwise subdivide region into two and recursively invoke step 2 on both halves.

Parameters:

Crv: 2D Curve to approximate using piecewise biarcs.
Tolerance: Of approximation.
MaxAngle: Of an arc in the output set. In no way it will be more than or equal to 180 degrees. In Degrees.


Returned Value:

SymbArcStruct *: List of arcs approximating Crv to within Tolerance.


See Also:

SymbCrv2DInflectionPts SymbCrvCubicApprox SymbCrvBiArcApproxC1

Keywords:




SymbCrvBiArcApproxC1

(biarc.c:188)

Prototype:

  SymbArcStruct *SymbCrvBiArcApproxC1(const CagdCrvStruct *CCrv,
                                      CagdRType Tolerance,
                                      CagdRType MaxAngle)


Description:

Computes a piecewise biarc approximation to given C^1 planar curve. The following steps are performed during this approximation process: 1. The curve is split at inflection points, if any. 2. Each convex/concave curve region: a. Fit the curve region with a G^1 continuous biarc that is tangent to the curve's region at the region's end points. b. If fit is good enough, we stop. Otherwise subdivide region into two and recursively invoke step 2 on both halves.

Parameters:

CCrv: 2D Curve to approximate using piecewise biarcs.
Tolerance: Of approximation.
MaxAngle: Of an arc in the output set. In no way it will be more than or equal to 180 degrees. In Degrees.


Returned Value:

SymbArcStruct *: List of arcs approximating Crv to within Tolerance.


See Also:

SymbCrvBiArcApprox

Keywords:




SymbCrvBisectors

(crv_skel.c:96)

Prototype:

  CagdCrvStruct *SymbCrvBisectors(const CagdCrvStruct *Crv,
                                  int BisectFunc,
                                  CagdRType SubdivTol,
                                  CagdBType NumerImprove,
                                  CagdBType SameNormal,
                                  CagdBType SupportPrms)


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. Employs the F1/F2/F34 functions from the paper: Gershon Elber and Myung Soo Kim. ``Bisector Curves of Planar Rational Curves.'' CAD, Vol 30, No 14, pp 1089-1096, December 1998.

Parameters:

Crv: Either one or two curves to compute bisectors for. Assumes E2 curves.
BisectFunc: If 1, normal fields are used to compute bisector surface. If 2, tangent fields instead of normals are used to compute the bisector surface function. If 3, using solution of normal intersection pt.
SubdivTol: Accuracy of computation. 0.001 is a good start.
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.
SupportPrms: If TRUE, return curve is of type E4 instead of E2 and the third and fourth coefficients holds the support parameters of the first and second curves, respectively.


Returned Value:

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


See Also:

SymbCrvCnvxHull SymbCrvDiameter SymbCrvBisectorsSrf

Keywords:

bisectors skeleton


SymbCrvBisectorsSrf

(crv_skel.c:403)

Prototype:

  CagdSrfStruct *SymbCrvBisectorsSrf(const CagdCrvStruct *Crv, int BisectFunc)


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.
BisectFunc: f 1, normal fields are used to compute bisector surface. If 2, tangent fields instead of tangents are used to compute the bisector surface function. If 3, using solution of normal intersection pt.


Returned Value:

CagdSrfStruct *: A scalar surface whose zero set provides matching bisecting points on Crv, if BisectFunc > 0.


See Also:

SymbCrvCnvxHull SymbCrvDiameter SymbCrvBisectors SymbCrvBisectorsSrf2 SymbCrvPtBisectorsSrf3D SymbCrvCrvBisectorSrf3D

Keywords:

bisectors skeleton


SymbCrvBisectorsSrf2

(crv_skel.c:582)

Prototype:

  CagdSrfStruct *SymbCrvBisectorsSrf2(const 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 normal intersection 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 E3 curves.


Returned Value:

CagdSrfStruct *: The real bisector surface for three space curves, if BisectFunc = 4.


See Also:

SymbCrvCnvxHull SymbCrvDiameter SymbCrvBisectors SymbCrvBisectorsSrf SymbCrvPtBisectorsSrf3D SymbCrvCrvBisectorSrf3D SymbCrvBisectorsSrf3

Keywords:

bisectors skeleton


SymbCrvBisectorsSrf3

(crv_skel.c:747)

Prototype:

  CagdSrfStruct *SymbCrvBisectorsSrf3(const 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 normal intersection surface in the plane and then substitute into (the bisector's correspondance is the zero set then).
            C1(s) + C2(t)
      < P - -------------, C1(t) - C2(s) > = 0.
                  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 BisectFunc = 3.


See Also:

SymbCrvCnvxHull SymbCrvDiameter SymbCrvBisectors SymbCrvBisectorsSrf2 SymbCrvBisectorsSrf SymbCrvPtBisectorsSrf3D SymbCrvCrvBisectorSrf3D

Keywords:

bisectors skeleton


SymbCrvCnvxHull

(ccnvhul.c:2518)

Prototype:

  CagdCrvStruct *SymbCrvCnvxHull(const CagdCrvStruct *Crv, CagdRType SubdivTol)


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,   for all r.

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

Parameters:

Crv: To compute its convex hull.
SubdivTol: f 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

(symbzero.c:269)

Prototype:

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


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, X = 1, Y = 2, etc.
Epsilon: Tolerance control.
ConstVal: The value at which to compute the constant set.
NoSolsOnEndPts: f TRUE, solutions at the end of the domain are purged.


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_crv.c:556)

Prototype:

  CagdCrvStruct *SymbCrvCrossProd(const CagdCrvStruct *CCrv1,
                                  const CagdCrvStruct *CCrv2)


Description:

Given two curves - computes their cross product in R3. Returned curve is a curve representing the cross product of the two given curves.

Parameters:

CCrv1, CCrv2: wo curve to multiply in R3 and compute cross product for.


Returned Value:

CagdCrvStruct *: A vector in R3 curve representing the cross product of Crv1 x Crv2.


See Also:

SymbCrvDotProd SymbCrvVecDotProd SymbCrvMult SymbCrvMultScalar

Keywords:

product cross product symbolic computation


SymbCrvCrvBisectOnSphere

(smp_skel.c:291)

Prototype:

  CagdSrfStruct *SymbCrvCrvBisectOnSphere(const CagdCrvStruct *CCrv1,
                                          const CagdCrvStruct *CCrv2)


Description:

Computes the bisector on a sphere between two curves, both are assumed to be on the unit sphere. The end result is a bivariate function NOT a curve on the sphere but rather a rational surface in the (s, t) parameter space of Crv1(s) and Crv2(t) whose zero set provides the correspondancing bisector in the parametric space. Let P be the bisector point. Then, the following must vanish:
     < P, C1(t) > = < P, C2(t) > (Equality of angular distance)
     < P - C1(t), C1'(t) > = 0   (orthogonality of distance measure)
     < P - C2(t), C2'(t) > = 0   (orthogonality of distance measure)

Then the returned result is the determinant of these three equations that must vanish.

Parameters:

CCrv1, CCrv2: Two curves on the unit sphere.


Returned Value:

CagdSrfStruct *: The bisector surface bivariate function whose zero set provides the bisector correspondance in the parameteric space.


See Also:

SymbPtCrvBisectOnSphere2 SymbPtCrvBisectOnSphere3

Keywords:

bisectors skeleton


SymbCrvCrvBisectOnSphere2

(smp_skel.c:382)

Prototype:

  CagdCrvStruct *SymbCrvCrvBisectOnSphere2(const CagdCrvStruct *Crv1,
                                           const CagdCrvStruct *Crv2,
                                           CagdRType SubdivTol)


Description:

Computes the bisector on a sphere between two curves on the sphere. The returned result is a piecewise linear curve on the sphere.

Parameters:

Crv1, Crv2: Two curves on the unit sphere.
SubdivTol: Accuracy of computation.


Returned Value:

CagdCrvStruct *: A list of piecewise linear curves approximating the bisectors of Crv1 and Crv2 on the sphere.


See Also:

SymbPtCrvBisectOnSphere SymbCrvCrvBisectOnSphere SymbCrvCrvBisectOnSphere3

Keywords:

bisectors skeleton


SymbCrvCrvBisectOnSphere3

(smp_skel.c:556)

Prototype:

  CagdSrfStruct *SymbCrvCrvBisectOnSphere3(const CagdCrvStruct *CCrv1,
                                           const CagdCrvStruct *CCrv2)


Description:

Computes the bisector of two cone surfaces sharing an apex at the origin represented as their generating curves on a unit sphere. Let P be the bisector point. Then, the following must vanish:
     < P, C1(t) > = < P, C2(t) > (Equality of angular distance)
     < P - C1(t), C1'(t) > = 0   (orthogonality of distance measure)
     < P - C2(t), C2'(t) > = 0   (orthogonality of distance measure)

Then, the returned is the solution of the above equations.

Parameters:

CCrv1, CCrv2: wo curves on the unit sphere.


Returned Value:

CagdSrfStruct *: The bisector surface function.


See Also:

SymbPtCrvBisectOnSphere SymbPtCrvBisectOnSphere SymbPtCrvBisectOnSphere2

Keywords:

bisectors skeleton


SymbCrvCrvBisectorSrf3D

(crv_skel.c:887)

Prototype:

  CagdSrfStruct *SymbCrvCrvBisectorSrf3D(const CagdCrvStruct *CCrv1,
                                         const CagdCrvStruct *CCrv2,
                                         CagdRType Alpha)


Description:

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

Parameters:

CCrv1, CCrv2: wo three space curves to compute their bisector surface.
Alpha: Alpha-sector ratio (0.5 for a bisector).


Returned Value:

CagdSrfStruct *: The bisector surface.


See Also:

SymbCrvDiameter SymbCrvCnvxHull SymbCrvBisectorsSrf SymbCrvPtBisectorSrf3D

Keywords:

bisectors skeleton


SymbCrvCrvConvolution

(moffset.c:116)

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

(distance.c:801)

Prototype:

  CagdPtStruct *SymbCrvCrvInter(const CagdCrvStruct *Crv1,
                                const 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 CagdCrvCrvInter

Keywords:




SymbCrvCrvtrTrim

(offset.c:1973)

Prototype:

  CagdCrvStruct *SymbCrvCrvtrTrim(const CagdCrvStruct *Crv,
                                  CagdRType Dist,
                                  CagdRType Eps)


Description:

Given a planar curve and an offset distance, a-priori subdivide and clip the given curve at all locations its curvature radius is smaller than the offset distance.

Parameters:

Crv: To clip at all locations the curvature of this planar (XY) curve is too high.
Dist: Amount of offset. Negative denotes other offset direction.
Eps: Tolerance of computation.


Returned Value:

CagdCrvStruct *: One of more subregions of Crv that have regions with curvature no larger than 1/Dist.


See Also:

SymbCrvOffset SymbCrvSubdivOffset SymbSrfOffset SymbSrfSubdivOffset SymbCrvAdapOffset SymbCrvLeastSquarOffset SymbCrvMatchingOffset

Keywords:

offset


SymbCrvCubicApprox

(cubcaprx.c:38)

Prototype:

  CagdCrvStruct *SymbCrvCubicApprox(const CagdCrvStruct *Crv,
                                    CagdRType Tolerance)


Description:

Computes a piecewise cubic approximation to given freeform planar curve. The following steps are performed during this approximation process: a. Fit the curve with a C^1 continuous cubic that is tangent to the curves's end points. b. If fit is good enough, we stop. Otherwise subdivide region into two and recursively invoke step 2 on both halfs.

Parameters:

Crv: 2D Curve to approximate using piecewise cubics.
Tolerance: Of approximation, in Hausdorff distance sense.


Returned Value:

CagdCrvStruct *: List of cubics approximating Crv to within Tolerance. List will be C^1.


See Also:

SymbCrvBiArcApprox SymbApproxCrvAsBzrCubics

Keywords:




SymbCrvDeriveRational

(symb_crv.c:820)

Prototype:

  CagdCrvStruct *SymbCrvDeriveRational(const CagdCrvStruct *Crv)


Description:

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

Parameters:

Crv: A curve to differentiate.


Returned Value:

CagdCrvStruct *: Differentiated rational curve.


See Also:

BzrCrvDerive BspCrvDerive CagdCrvDerive SymbSrfDeriveRational

Keywords:

derivatives


SymbCrvDeterminant2

(crv_skel.c:1770)

Prototype:

  CagdCrvStruct *SymbCrvDeterminant2(const CagdCrvStruct *Crv11,
                                     const CagdCrvStruct *Crv12,
                                     const CagdCrvStruct *Crv21,
                                     const 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

(crv_skel.c:1727)

Prototype:

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


Description:

Computes the expression of a 3 by 3 determinants.

Parameters:

Crv11, Crv12, Crv13: The nine factors of the determinant.
Crv21, Crv22, Crv23: "
Crv31, Crv32, Crv33: "


Returned Value:

CagdCrvStruct *: A scalar field representing the determinant computation.


See Also:

SymbCrvDeterminant2 SymbSrfDeterminant3

Keywords:

determinant


SymbCrvDiameter

(ccnvhul.c:165)

Prototype:

  IPPolygonStruct *SymbCrvDiameter(const CagdCrvStruct *Crv,
                                   CagdRType SubdivTol)


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.
SubdivTol: f numeric search for the zero set (for surface subdivision). A positive value (0.01 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 MvarCrvDiameter

Keywords:




SymbCrvDiameterMinMaxMalloc

(ccnvhul.c:362)

Prototype:

  CagdRType *SymbCrvDiameterMinMaxMalloc(const CagdCrvStruct *Crv,
                                         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:

CagdRType *: Two parameter values on Crv of tangent lines extreme value. Returns an address to point.


See Also:

SymbCrvDiameter

Keywords:




SymbCrvDiameterMinMaxToData

(ccnvhul.c:305)

Prototype:

  CagdRType *SymbCrvDiameterMinMaxToData(const CagdCrvStruct *Crv,
                                         IPPolygonStruct *Cntrs,
                                         int Min,
                                         CagdRType *Params)


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.
Params: Two parameter values on Crv of tangent lines extreme value. Returns an address to point.


Returned Value:

CagdRType *: Two parameter values on Crv of tangent lines extreme value. Returns an address to point.


See Also:

SymbCrvDiameter

Keywords:




SymbCrvDotProd

(symb_crv.c:373)

Prototype:

  CagdCrvStruct *SymbCrvDotProd(const CagdCrvStruct *Crv1,
                                const 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


SymbCrvDual

(duality.c:31)

Prototype:

  CagdCrvStruct *SymbCrvDual(const CagdCrvStruct *Crv)


Description:

Computes the dual of the given curve. The dual curve is a mapping of the tangent lines of Crv (for which Crv is the envelop of) to points in the dual space. Duality is derived by computing the tangent line "Ax + By + C = 0" to curve Crv and mapping this line to homogeneous point (A/C, B/C).

Parameters:

Crv: The curve to compute its dual.


Returned Value:

CagdCrvStruct *: The dual curve.


See Also:

SymbSrfDual

Keywords:




SymbCrvEnclosedArea

(symb_crv.c:1038)

Prototype:

  CagdCrvStruct *SymbCrvEnclosedArea(const 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 field curve at the end points, the area enclosed by Crv can be computed.

Parameters:

Crv: A curve to compute area field curve for.


Returned Value:

CagdCrvStruct *: The area field curve.


See Also:

SymbCrvEnclosedAreaEval

Keywords:

area symbolic computation


SymbCrvEnclosedAreaEval

(symb_crv.c:1109)

Prototype:

  CagdRType SymbCrvEnclosedAreaEval(const CagdCrvStruct *Crv)


Description:

Given a planar curve, compute its enclosed signed area.

Parameters:

Crv: A curve to compute signed area for.


Returned Value:

CagdRType: The signed area.


See Also:

SymbCrvEnclosedArea

Keywords:

area symbolic computation


SymbCrvExtremCrvtrPts

(curvatur.c:720)

Prototype:

  CagdPtStruct *SymbCrvExtremCrvtrPts(const CagdCrvStruct *Crv,
                                      CagdRType Epsilon,
                                      CagdBType Crv2D)


Description:

Given a planar curve, finds all its extreme curvature points by finding the set of extreme locations on the curvature function of Crv. Extreme curvature is computed as the zeros of <(kN)', kN> = k'k. Assumes the input curve is C^2 (preferably C^3).

Parameters:

Crv: To find all int extrem curvature locations.
Epsilon: Accuracy control.
Crv2D: TRUE if the curve is in the XY plane and treated as 2D, FALSE, for a full 3D curve.


Returned Value:

CagdPtStruct *: A list of parameter values on Crv that have extreme curvature values. An int attribute named "ExtremType" is placed on each parameter value with a value of -1, 0, or 1 for minimum curvature location, zero curvature location and maximum curvature location, respectively.


See Also:

SymbCrv2DCurvatureSqr SymbCrv3DCurvatureSqr SymbCrv3DCurvatureSqr SymbCrv3DRadiusNormal SymbCrv3DCurvatureNormal SymbCrv2DCurvatureSign SymbCrv2DInflectionPts SymbCrvExtremCrvtrPts2

Keywords:

curvature


SymbCrvExtremCrvtrPts2

(curvatur.c:673)

Prototype:

  CagdPtStruct *SymbCrvExtremCrvtrPts2(const CagdCrvStruct *Crv,
                                       CagdRType Epsilon,
                                       CagdBType Crv2D)


Description:

Given a planar curve, finds all its extreme curvature points by finding the set of extreme locations on the curvature function of Crv. Extreme curvature is computed as the zeros of <(kN)', kN> = k'k.

Parameters:

Crv: To find all int extrem curvature locations.
Epsilon: Accuracy control.
Crv2D: TRUE if the curve is in the XY plane and treated as 2D, FALSE for a full 3D curve.


Returned Value:

CagdPtStruct *: A list of parameter values on Crv that have extrem curvature values. An int attribute named "ExtremType" is placed on each parameter value with a value of -1, 0, or 1 for minimum curvature location, zero curvature location and maximum curvature location, respectively.


See Also:

SymbCrv2DCurvatureSqr SymbCrv3DCurvatureSqr SymbCrv3DCurvatureSqr SymbCrv3DRadiusNormal SymbCrv3DCurvatureNormal SymbCrv2DCurvatureSign SymbCrv2DInflectionPts SymbCrvExtremCrvtrPts

Keywords:

curvature


SymbCrvExtremSet

(symbzero.c:142)

Prototype:

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


Description:

Computes the extrema set of a given curve, in given axis (0/1-3 for W/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 extrema set.
Axis: The axis of Crv to compute extrema set for, W = 0, X = 1, etc.
Epsilon: Tolerance control.
NoSolsOnEndPts: f TRUE, solutions at the end of the domain are purged.


Returned Value:

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


Keywords:

extrema set symbolic computation


SymbCrvGenSignedCrvtr

(crvtrrec.c:37)

Prototype:

  CagdCrvStruct *SymbCrvGenSignedCrvtr(const CagdCrvStruct *CCrv,
                                       int Samples,
                                       int Order,
                                       int ArcLen)


Description:

Computes a signed curvature signature scalar curve to the given planar curve. The returned signature is parameterized by the curve's arc-length even if the original curve is not arc length, if ArcLen is TRUE.

Parameters:

CCrv: Curve to compute signed curvature signature approximation for.
Samples: Number of samples to use in the approximation.
Order: Order of signed curvature approximating curve.
ArcLen: TRUE if Crv is to be assumed arc-length, FALSE if needs to compensate for a non arc-length parametrization.


Returned Value:

CagdCrvStruct *: Scalar polynomial curve of length Samples and of order Order that represents the signed curvature field of Crv.


See Also:

SymbSignedCrvtrGenCrv SymbCrv3DCurvatureNormal SymbCrv2DCurvatureSign

Keywords:




SymbCrvInvert

(symb_crv.c:281)

Prototype:

  CagdCrvStruct *SymbCrvInvert(const 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 equal to the reciprocal value of Crv.


See Also:

SymbCrvDotProd SymbCrvVecDotProd SymbCrvMult SymbCrvMultScalar

Keywords:

division symbolic computation reciprocal value


SymbCrvLeastSquarOffset

(offset.c:1299)

Prototype:

  CagdCrvStruct *SymbCrvLeastSquarOffset(const 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


SymbCrvListCnvxHull

(ccnvhul.c:2486)

Prototype:

  CagdCrvStruct *SymbCrvListCnvxHull(CagdCrvStruct *Crvs, CagdRType SubdivTol)


Description:

Computes the convex hull of C1 freeform planar curves, 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,   for all 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:

Crvs: To compute their convex hull.
SubdivTol: f numeric search for the zero set (for surface subdivision). A positive value (0.01 is a good start).


Returned Value:

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


See Also:

SymbCrvPtTangents SymbCrvDiameter

Keywords:




SymbCrvLstSqrAprxPlln

(crvlsapx.c:1338)

Prototype:

  CagdCrvStruct *SymbCrvLstSqrAprxPlln(const CagdCtlPtStruct *Polyline,
                                       CagdRType ExpectedError,
                                       int Order,
                                       CagdRType NumericTol,
                                       CagdBType ForceC1Continuity,
                                       CagdRType C1DiscontThresh,
                                       SymbCrvLSErrorMeasureType ErrMeasure)


Description:

Approximates a polyline segment by a curve within an estimates square error. This function repeatedly requests the next C1-continuous segment of the polyline and approximates it with a B-spline curve of a required order and approximation error, until the entire polyline is processed.

Parameters:

Polyline: The polyline to be approximated (represented as a list of points).
ExpectedError: The expected square approximation error of the curve.
Order: The polynomial order of the required approximating curve.
NumericTol: The numeric tolerance for the zero solver (used in the curve-point distance computation).
ForceC1Continuity: flag indicating that the algorithm should attempt to make the curve C1-continuous (except where C1-discontinuities in the original polyline are suspected).
C1DiscontThresh: The threshold for determining C1-discontinuity in the polyline, in terms of dot-product (i.e. the inverse cosine of this value is the threshold angle).
ErrMeasure: Which method of error measurement to use.


Returned Value:

CagdCrvStruct *: The approximating curve. SymbCrvApproxPolylineProcessSegment, SymbCrvApproxPolylineExtractNext


Keywords:

least squares


SymbCrvMatchingOffset

(moffset.c:50)

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_crv.c:1488)

Prototype:

  CagdCrvStruct *SymbCrvMergeScalar(const CagdCrvStruct *CrvW,
                                    const CagdCrvStruct *CrvX,
                                    const CagdCrvStruct *CrvY,
                                    const 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


SymbCrvMergeScalarN

(symb_crv.c:1408)

Prototype:

  CagdCrvStruct *SymbCrvMergeScalarN(CagdCrvStruct * const *CrvVec,
                                     int NumCrvs)


Description:

Given a vector of scalar curves, treat them as coordinates into a new vector curve. Assumes at least CrvVec[1] is not NULL in which case a scalar curve is returned. Assumes CrvVec[i] are either E1 or P1 in which case the weights are assumed to be identical and can be simply copied if exist.

Parameters:

CrvVec: A vector of scalar curves.
NumCrvs: Number of curves in CrvVec.


Returned Value:

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


See Also:

SymbSrfMergeScalar SymbCrvSplitScalarN

Keywords:

merge symbolic computation


SymbCrvMonotoneCtlPt

(composit.c:60)

Prototype:

  int SymbCrvMonotoneCtlPt(const CagdCrvStruct *Crv, int Axis)


Description:

A function to examine if the given curve has a monotone control polygon in the prescribed axis.

Parameters:

Crv: Curve to examine the the monotonicity in axis Axis.
Axis: The axis of Crv to examine the monotonicity for.


Returned Value:

int: 0 if a completely zero curve (up to tight eps), +1/-1 for increasing/decreasing monotone, 9 if a non monotone curve.


See Also:

SymbCrvPosNegWeights

Keywords:




SymbCrvMult

(symb_crv.c:203)

Prototype:

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


Description:

Given two curves - multiply them coordinate-wise. The two curves are promoted to same point type before the multiplication can take place.

Parameters:

Crv1, Crv2: Two curve to multiply coordinate-wise.


Returned Value:

CagdCrvStruct *: The product of Crv1 * Crv2 coordinate-wise.


See Also:

SymbCrvDotProd SymbCrvVecDotProd SymbCrvInvert SymbCrvMultScalar

Keywords:

product symbolic computation


SymbCrvMultScalar

(symb_crv.c:487)

Prototype:

  CagdCrvStruct *SymbCrvMultScalar(const CagdCrvStruct *Crv1,
                                   const 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. Crv1 is assume at most of dimension 3.


Returned Value:

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


See Also:

SymbCrvDotProd SymbCrvVecDotProd SymbCrvMult SymbCrvCrossProd SymbSrfMultScalar

Keywords:

product symbolic computation


SymbCrvMultiResBWavelet

(multires.c:860)

Prototype:

  CagdCrvStruct *SymbCrvMultiResBWavelet(CagdRType *KV,
                                         int Order,
                                         int Len,
                                         int KnotIndex)


Description:

Constructs the B-Wavelet of knot KV[KnotIndex] for the given knot sequence KV and order Order.

Parameters:

KV: Knot sequence of the space.
Order: Order of space.
Len: Length of knot sequence.
KnotIndex: ndex of knot to compute the wavelet for.


Returned Value:

CagdCrvStruct *: A scalar curve representing the wavelet.


See Also:

SymbBspBasisInnerProd

Keywords:




SymbCrvMultiResCompos

(multires.c:537)

Prototype:

  CagdCrvStruct *SymbCrvMultiResCompos(const 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

(multires.c:566)

Prototype:

  CagdCrvStruct *SymbCrvMultiResComposAtT(const SymbMultiResCrvStruct *MRCrv,
                                          CagdRType T)


Description:

Given a multiresolution 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

(multires.c:1136)

Prototype:

  SymbMultiResCrvStruct *SymbCrvMultiResCopy(const SymbMultiResCrvStruct
                                                                     *MRCrvOrig)


Description:

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

Parameters:

MRCrvOrig: A multi resolution decomposition of a curve to copy.


Returned Value:

SymbMultiResCrvStruct *: A duplicated structure of MRCrv.


Keywords:

multi resolution least square decomposition


SymbCrvMultiResDecomp

(multires.c:180)

Prototype:

  SymbMultiResCrvStruct *SymbCrvMultiResDecomp(const CagdCrvStruct *Crv,
                                               CagdBType Discont)


Description:

Given a B-spline curve, computes a hierarchy of B-spline curves, each being represented using a subspace of the previous, up to 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.


See Also:

SymbCrvMultiResDecomp2

Keywords:

multi resolution least square decomposition


SymbCrvMultiResDecomp2

(multires.c:317)

Prototype:

  SymbMultiResCrvStruct *SymbCrvMultiResDecomp2(const CagdCrvStruct *Crv,
                                                CagdBType Discont,
                                                CagdBType SameSpace)


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. B-Wavelet decomposition is used to build the hierarchy. See R. Kazinnik and G. Elber, "Orthogonal Decomposition of Non Uniform Bspline Spaces using Wavelets", Eurographics 1997.

Parameters:

Crv: To compute a B-Wavelet decomposition for.
Discont: Do we want to preserve discontinuities?
SameSpace: f this curve is in the same space as last curve, exploit this in optimizing the computation cost.


Returned Value:

SymbMultiResCrvStruct *: A B-Wavelet decomposition structure hold the multi resolution decomposition of Crv.


See Also:

SymbCrvMultiResDecomp

Keywords:

multi resolution B-Wavelet decomposition


SymbCrvMultiResEdit

(multires.c:624)

Prototype:

  void SymbCrvMultiResEdit(const SymbMultiResCrvStruct *MRCrv,
                           CagdRType t,
                           const 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.


Returned Value:

void


Keywords:

multi resolution least square decomposition


SymbCrvMultiResFree

(multires.c:1074)

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


SymbCrvMultiResKVBuild

(multires.c:42)

Prototype:

  CagdBType SymbCrvMultiResKVBuild(const CagdCrvStruct *Crv,
                                   CagdBType Discont,
                                   CagdRType ***KVList,
                                   int **KVListSizes,
                                   int *KVListSize)


Description:

Constructs a hierarchy of knot sequence for the given B-spline curve and until no interior knot exists in the knot sequence.

Parameters:

Crv: Curve to construct a hierarchy of knot sequences.
Discont: Should we preserve discontinuities as much as we can?
KVList: A vector of pointers to knot sequences in the hierarchy.
KVListSizes: ength of each knot sequence in vector KVList.
KVListSize: Size of KVList - number of knot sequences in hierarchy.


Returned Value:

CagdBType: TRUE if successful, FALSE otherwise.


See Also:

SymbCrvMultiResDecomp SymbCrvMultiResDecomp2

Keywords:




SymbCrvMultiResNew

(multires.c:1104)

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


SymbCrvMultiResRefineLevelMalloc

(multires.c:829)

Prototype:

  CagdRType *SymbCrvMultiResRefineLevelMalloc(SymbMultiResCrvStruct *MRCrv,
                                              CagdRType T,
                                              CagdBType 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


SymbCrvMultiResRefineLevelToData

(multires.c:734)

Prototype:

  CagdRType *SymbCrvMultiResRefineLevelToData(SymbMultiResCrvStruct *MRCrv,
                                              CagdRType T,
                                              CagdBType SpanDiscont,
                                              CagdRType *Domain)


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?
Domain: A pointer to an array of two real numbers holding the domain in MRCrv that was refined.


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

(offset.c:72)

Prototype:

  CagdCrvStruct *SymbCrvOffset(const CagdCrvStruct *CCrv,
                               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:

CCrv: 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 SymbCrvVarOffset

Keywords:

offset


SymbCrvOffset2CrvsJoint

(offset.c:1867)

Prototype:

  CagdCrvStruct *SymbCrvOffset2CrvsJoint(CagdCrvStruct *OrigCrv1,
                                         CagdCrvStruct *OrigCrv2,
                                         CagdCrvStruct **OffCrv1,
                                         CagdCrvStruct **OffCrv2)


Description:

Update the end of Crv1 and the beginning of Crv2 to connect after an offset operation that was applied to them. There are a few options: 1. End of Crv1 is the same of start of Crv (if the two curves are C^1 connected). Do nothing. 2. The two curves intersects. Trim away end of Crv1 and start of Crv2 up to the intersection location. This case is handled assuming small interaction between the two curves only, seeking a single intersection. Note old OfCrv1/2 are freed and being substituted in place with the new trimmed versions. 3. The two curves do not intersect. Add a joint round curve that is C^1 to both Crv1's end and Crv2's start. The new joint round curve is returned.

Parameters:

OrigCrv1: To examine its end against Crv2, if the same.
OrigCrv2: To examine its start against Crv1, if the same.
OffCrv1: To properly update its end against Crv2, if needs to.
OffCrv2: To properly update its start against Crv1, if needs to.


Returned Value:

CagdCrvStruct *: A new round curve bnetween OffCrv1 and OffCrv2 if not NULL. Note also that OffCrv1/2 might be changed in place.


Keywords:




SymbCrvOrthotomic

(orthotom.c:38)

Prototype:

  CagdCrvStruct *SymbCrvOrthotomic(const CagdCrvStruct *Crv,
                                   const 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:




SymbCrvPointInclusion

(distance.c:485)

Prototype:

  int SymbCrvPointInclusion(const CagdCrvStruct *CCrv,
                            const CagdPType Pt,
                            CagdRType Epsilon)


Description:

Given a closed planar curve and a point, finds if point is inside curve. Uses winding number accumulation in the computation.

Parameters:

CCrv: Closed planar curve to examine for the inclusion of Pt.
Pt: Point tp test for inclusion in Crv.
Epsilon: Accuracy of computation.


Returned Value:

int: 1 if Pt inside Crv, -1 otherwise, 0 if on boundary to within Epsilon.


See Also:

SymbCrvPointInclusion SymbDistCrvLine SymbCrvRayInter

Keywords:

curve point inclusion


SymbCrvPosNegWeights

(symbzero.c:513)

Prototype:

  CagdBType SymbCrvPosNegWeights(const 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.


See Also:

CagdCrvBBox CagdSrfBBox GMBBSetBBoxPrecise SymbCrvPosNegWeights CagdAllWeightsSame

Keywords:

symbolic computation


SymbCrvPtBisectorCrv2D

(crv_skel.c:1214)

Prototype:

  CagdCrvStruct *SymbCrvPtBisectorCrv2D(const CagdCrvStruct *CCrv,
                                        const CagdPType Pt,
                                        CagdRType Alpha)


Description:

Computes the alpha-/bi-sector curve of a planar curve a point, all in the XY plane. The result is the solution to the following two linear equations in alpha-/bi-sector's two unknowns, the x and y coefficients:
       = 
       = 

where a is the Alpha of the alpha-sector, 0.5 for a bisector, Pt is the point entity, C(t) is the curve entity and B(t) is the sought bisector.

Parameters:

CCrv: Planar curve to compute its bisector curve with Pt.
Pt: A point in the plane to compute its bisector with Crv.
Alpha: Alpha-sector ratio (0.5 for a bisector).


Returned Value:

CagdCrvStruct *: The bisector curve, in the XY plane.


See Also:

SymbCrvDiameter SymbCrvCnvxHull SymbCrvBisectorsSrf SymbCrvCrvBisectorSrf3D SymbSrfPtBisectorSrf3D SymbCrvPtBisectorSrf3D

Keywords:

bisector


SymbCrvPtBisectorSrf3D

(crv_skel.c:1358)

Prototype:

  CagdSrfStruct *SymbCrvPtBisectorSrf3D(const CagdCrvStruct *CCrv,
                                        const 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:

CCrv: 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 SymbCrvPtBisectorCrv2D

Keywords:

bisector


SymbCrvPtTangents

(crv_tans.c:48)

Prototype:

  CagdPtStruct *SymbCrvPtTangents(const CagdCrvStruct *CCrv,
                                  const CagdPType Pt,
                                  CagdRType 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:

CCrv: 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 SymbCircTanTo2Crvs SymbTangentToCrvAtTwoPts mbCrvDiameter

Keywords:




SymbCrvRayInter

(distance.c:588)

Prototype:

  CagdPtStruct *SymbCrvRayInter(const CagdCrvStruct *Crv,
                                const CagdPType RayPt,
                                const CagdVType RayDir,
                                CagdRType Epsilon)


Description:

Given a curve and a ray, finds the intersection points on the curve where the ray pierces the curve. 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 of the ray, we derive the distance function whose zero set captures all curve-line intersections. They are then filtered to those on the half-line ray.

Parameters:

Crv: The curve to find its intersections with the ray.
RayPt, RayDir: The ray prescription.
Epsilon: Accuracy of computation.


Returned Value:

CagdPtStruct *: A list of parameter values of the ray-curve intersections.


See Also:

SymbDistCrvLine MvarDistSrfLine SymbLclDistCrvLine GMPolygonRayInter

Keywords:

curve ray intersection


SymbCrvRtnlMult

(symb_crv.c:783)

Prototype:

  CagdCrvStruct *SymbCrvRtnlMult(const CagdCrvStruct *Crv1X,
                                 const CagdCrvStruct *Crv1W,
                                 const CagdCrvStruct *Crv2X,
                                 const 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. Can be NULL.
Crv2X: Numerator of second curve.
Crv2W: Denominator of second curve. Can be NULL.
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_crv.c:339)

Prototype:

  CagdCrvStruct *SymbCrvScalarScale(const 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


SymbCrvSliceCrvsByPrllLines

(symbzero.c:339)

Prototype:

  CagdCrvStruct *SymbCrvSliceCrvsByPrllLines(const CagdCrvStruct *Crvs,
                                             int Axis,
                                             CagdRType Epsilon,
                                             CagdVType Range)


Description:

Computes a set of parallel line segments included inside the given set of Crvs, that is assumed to define closed region(s), in the XY plane.

Parameters:

Crvs: A set of curves forming closed region(s) to slice and compute a set of parallel line segments in the region(s), in XY.
Axis: The axis of line compute the sliced line, X = 1, Y = 2.
Epsilon: Tolerance control.
Range: A vector setting the (min, max, step) of the parallel lines, as (XMin, XMax, XStep) if Axis = 1, (YMin, YMax, YStep) if Axis = 2.


Returned Value:

CagdCrvStruct *: List of parallel lines in the closed region, enclosed by Crvs.


See Also:

SymbCrvConstSet

Keywords:

slices contours.


SymbCrvSplitPoleParams

(symbzero.c:623)

Prototype:

  CagdCrvStruct *SymbCrvSplitPoleParams(const CagdCrvStruct *CCrv,
                                        CagdRType Eps,
                                        CagdRType OutReach)


Description:

Splits the given rational curve at all its poles. Returned is a list of curves each of which has weights of the same (positive) sign.

Parameters:

CCrv: Rational curve to split at all its poles.
Eps: Tolerance of computation.
OutReach: Clip end points of curves that goes to infinity at distance that is about OutReach from the origin.


Returned Value:

CagdCrvStruct *: List of splitted curves.


See Also:

CagdPointsHasPoles SymbCrvsSplitPoleParams

Keywords:




SymbCrvSplitScalar

(symb_crv.c:1353)

Prototype:

  void SymbCrvSplitScalar(const 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


SymbCrvSplitScalarN

(symb_crv.c:1304)

Prototype:

  void SymbCrvSplitScalarN(const CagdCrvStruct *Crv, CagdCrvStruct **Crvs)


Description:

Given a curve, splits it to its scalar component curves.

Parameters:

Crv: Curve to split.
Crvs: A vector of scalar curves - components of Crv. A vector of dynamically allocated scalar crvs.


Returned Value:

void


See Also:

SymbSrfSplitScalar SymbSrfSplitScalarN SymbCrvMergeScalarN

Keywords:

split symbolic computation


SymbCrvSqrtScalar

(arc_len.c:173)

Prototype:

  CagdCrvStruct *SymbCrvSqrtScalar(const 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_crv.c:116)

Prototype:

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


Description:

Given two curves - subtract them coordinate-wise. 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 coordinate-wise.


Returned Value:

CagdCrvStruct *: The difference of Crv1 - Crv2 coordinate-wise.


See Also:

SymbCrvAdd SymbCrvMult

Keywords:

subtraction symbolic computation


SymbCrvSubdivOffset

(offset.c:410)

Prototype:

  CagdCrvStruct *SymbCrvSubdivOffset(const CagdCrvStruct *CCrv,
                                     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:

CCrv: 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


SymbCrvTrimGlblOffsetSelfInter

(offset.c:1384)

Prototype:

  CagdCrvStruct *SymbCrvTrimGlblOffsetSelfInter(const CagdCrvStruct *Crv,
                                                const CagdCrvStruct *OffCrv,
                                                CagdRType SubdivTol,
                                                CagdRType TrimAmount,
                                                CagdRType NumerTol)


Description:

Trims regions in the offset curve OffCrv that are closer than TrimAmount to original Crv. TrimAmount should be a fraction smaller than the offset amount itself. See all: Gershon Elber. ``Trimming Local and Global Self-intersections in Offset Curves using Distance Maps.'' The 10th IMA conference on the Mathematics of Surfaces, Leeds, UK, pp 213-222, September 2003, LLCS2768.

Parameters:

Crv: Original curve.
OffCrv: The offset curve approximation.
SubdivTol: Accuracy of computation. 0.001 will be a good start.
TrimAmount: The trimming distance. A fraction smaller than the offset amount.
NumerTol: If Positive, a numerical marching improvement step is applied with NumerTol tolerance to the derived intersection/clipped regions. Assumes derivative of offset curve exists.


Returned Value:

CagdCrvStruct *: A list of curve segments that are valid, after the trimming process took place.


See Also:

MvarCrvTrimGlblOffsetSelfInter

Keywords:




SymbCrvUnitLenCtlPts

(arc_len.c:595)

Prototype:

  CagdCrvStruct *SymbCrvUnitLenCtlPts(const CagdCrvStruct *CCrv)


Description:

Normalizes all the control points of the given (vector field) curve. This results in an approximated unit speed vector field.

Parameters:

CCrv: Curve to approximate a unit magnitude for.


Returned Value:

CagdCrvStruct *: Similar curve of Crv, but with unit length control points.


See Also:

SymbCrvUnitLenScalar

Keywords:

unit vector field


SymbCrvUnitLenScalar

(arc_len.c:40)

Prototype:

  CagdCrvStruct *SymbCrvUnitLenScalar(const 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 result if Mult is FALSE, or the actual unit size vector field curve, if Mult.


See Also:

SymbCrvUnitLenCtlPts

Keywords:

unit vector field


SymbCrvVarOffset

(offset.c:245)

Prototype:

  CagdCrvStruct *SymbCrvVarOffset(const CagdCrvStruct *CCrv,
                                  const CagdCrvStruct *VarOffsetDist,
                                  CagdBType BezInterp)


Description:

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

Parameters:

CCrv: To approximate its variable offset curve.
VarOffsetDist: Scalar function prescribing the amount of offset. Must posses a parametric domain similar to Crv.
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 varying offset amount curve.


See Also:

SymbCrvSubdivOffset SymbSrfOffset SymbSrfSubdivOffset SymbCrvAdapOffset SymbCrvAdapOffsetTrim SymbCrvLeastSquarOffset SymbCrvMatchingOffset SymbCrvOffset

Keywords:

offset


SymbCrvVecCrossProd

(symb_crv.c:669)

Prototype:

  CagdCrvStruct *SymbCrvVecCrossProd(const CagdCrvStruct *Crv,
                                     const CagdVType Vec)


Description:

Given a curve and a vector - computes their cross product. Returned curve is a scalar curve representing the cross product of the curve and vector.

Parameters:

Crv: Curve to multiply and compute a cross product for.
Vec: Vector to cross product Crv with.


Returned Value:

CagdCrvStruct *: A vector curve representing the cross product of Crv x Vec.


See Also:

SymbCrvDotProd SymbCrvVecDotProd SymbCrvScalarScale SymbCrvMultScalar SymbCrvInvert SymbCrvCrossProd

Keywords:

product cross product symbolic computation


SymbCrvVecDotProd

(symb_crv.c:425)

Prototype:

  CagdCrvStruct *SymbCrvVecDotProd(const CagdCrvStruct *Crv,
                                   const CagdRType *Vec)


Description:

Given a curve and a vector of any dimension - 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

(symbzero.c:47)

Prototype:

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


Description:

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

Parameters:

Crv: To compute its zero set.
Axis: The axis of Crv to compute zero set for, W = 0, X = 1, etc.
Epsilon: Tolerance control.
NoSolsOnEndPts: f TRUE, solutions at the end of the domain are purged.


Returned Value:

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


Keywords:

zero set symbolic computation


SymbCrvsCompare

(cmp_crvs.c:231)

Prototype:

  SymbCrvRelType SymbCrvsCompare(const CagdCrvStruct *Crv1,
                                 const CagdCrvStruct *Crv2,
                                 CagdRType Eps,
                                 CagdRType *StartOvrlpPrmCrv1,
                                 CagdRType *EndOvrlpPrmCrv1,
                                 CagdRType *StartOvrlpPrmCrv2,
                                 CagdRType *EndOvrlpPrmCrv2)


Description:

Compares the given two curves. Each curve is converted, if necessary, into a set of Bezier curves, and the comparison is done by applying comparison algorithm for each Bezier curve.

Parameters:

Crv1, Crv2: The two curves to be compared.
Eps: A threshold for numerical computations.
StartOvrlpPrmCrv1: f the curves are the same and overlapping, here the start of overlapping domain of Crv1 will be returned.
EndOvrlpPrmCrv1: If the curves are the same and overlapping, here the end of overlapping domain of Crv1 will be returned.
StartOvrlpPrmCrv2: f the curves are the same and overlapping, here the start of overlapping domain of Crv2 will be returned.
EndOvrlpPrmCrv2: If the curves are the same and overlapping, here the end of overlapping domain of Crv2 will be returned.


Returned Value:

SymbCrvRelType: Either Same curves (1), overlapping curves (2), or distinct curves (3). If Overlapping, the Start/End overlapping parametric domain variables are set.


Keywords:




SymbCrvsLowerEnvelop

(crv_lenv.c:192)

Prototype:

  CagdCrvStruct *SymbCrvsLowerEnvelop(const CagdCrvStruct *CCrvs,
                                      CagdRType *Pt,
                                      CagdRType Eps)


Description:

Computes the lower envelop in the plane of all given curves. Returned is a list of (pieces of) curves that forms the lower envelop. If Pt is not NULL, radial lower envelop around Pt is computed. If Pt is NULL, regular, linear, lower envelop is computed seeking minimum Y values for the X domain that is spanned by the curves. Note the lower envelop might be discontinuous. The lower envelop is computed by splitting the input curves at all intersetion locations, sorting intersection and end point events and shooting rays in the middle of these intervals to determine lowest one.

Parameters:

CCrvs: Curves to derive the lower envelop for.
Pt: Point defining the center of the radial envelop, or NULL for linear, minimum Y, lower envelop.
Eps: Tolerance of computations.


Returned Value:

CagdCrvStruct *: A list of curves defining the lower envelop.


See Also:

CagdCrvCrvInter CagdCrvCrvInterArrangment

Keywords:

cci lower envelop


SymbCrvsSplitPoleParams

(symbzero.c:585)

Prototype:

  CagdCrvStruct *SymbCrvsSplitPoleParams(const CagdCrvStruct *Crvs,
                                         CagdRType Eps,
                                         CagdRType OutReach)


Description:

Splits the given rational curves at all their poles. Returned is a list of curves each of which has weights of the same (positive) sign.

Parameters:

Crvs: Rational curves to split at all its poles.
Eps: Tolerance of computation.
OutReach: Clip end points of curves that goes to infinity at distance that is about OutReach from the origin.


Returned Value:

CagdCrvStruct *: List of splitted curves.


See Also:

CagdPointsHasPoles SymbCrvSplitPoleParams

Keywords:




SymbCubicBspInjective

(bsp3injc.c:107)

Prototype:

  CagdBType SymbCubicBspInjective(CagdRType x[4][4], CagdRType y[4][4])


Description:

Examine if the given uniform cubic patch in injective. The patch is assumed to be a mapping from R2 to R2.

Parameters:

x: The 4 by 4 array of X coefficients of the cubic patch.
y: The 4 by 4 array of Y coefficients of the cubic patch.


Returned Value:

CagdBType: TRUE if injective, FALSE otherwise.


Keywords:




SymbCylinCylinBisect

(smp_skel.c:1783)

Prototype:

  CagdSrfStruct *SymbCylinCylinBisect(const CagdVType Cyl1Pos,
                                      const CagdVType Cyl1Dir,
                                      CagdRType Cyl1Rad,
                                      const CagdVType Cyl2Pos,
                                      const CagdVType Cyl2Dir,
                                      CagdRType Cyl2Rad)


Description:

Compute the bisector surface between two cylinders. Let C1(u), T1(u), and N1(u) and C2(v), T2(v), and N2(v) be the cylinders cross section, cross section tangent field and cross section unit normal field. Ci(u) can be derived as a transformed circle. Ti(u) and Ni(u) are unit circles rotated to the proper orientation CyliDir. Finally, note that Ci(u), Ti(u), and Ni(u) are all rational. Then, the bisector is computed as the solution of the following three linear equations:
  < B - C1(u), T1(u) > = 0

  < B - C2(v), T2(v) > = 0

  < B, N1(u) - N2(v) > = < C1(u), N1(u) > - < C2(v), N2(v) >

The first two constraints the bisector to be on the normal plane of the generators of the two cylinders that are fixed along the generator (the straight lines of the cylinder). The last constraint make sure the bisector is on the plane that bisects the two tangent planes of the two cylinders. This computation is following the bisectors of two developables, presented in, "Geometric Properties of Bisector Surfaces", by Martin Peternell, Graphical Models, Volume 62, No. 3, May 2000.

Parameters:

Cyl1Pos: A point on the axis of the first cylinder.
Cyl1Dir: The direction of the first cylinder.
Cyl1Rad: Radius of first cylinder.
Cyl2Pos: A point on the axis of the second cylinder.
Cyl2Dir: The direction of the second cylinder.
Cyl2Rad: Radius of second cylinder.


Returned Value:

CagdSrfStruct *: Constructed bisector surface.


See Also:

SymbPlanePointBisect SymbCylinPointBisect SymbConePointBisect SymbSpherePointBisect SymbTorusPointBisect SymbConeLineBisect SymbSphereLineBisect SymbPlaneLineBisect SymbCylinPlaneBisect SymbConePlaneBisect SymbSpherePlaneBisect SymbCylinSphereBisect SymbSphereSphereBisect SymbConeSphereBisect SymbConeConeBisect SymbConeConeBisect2 SymbConeCylinBisect

Keywords:

bisectors skeleton


SymbCylinPlaneBisect

(smp_skel.c:1199)

Prototype:

  CagdSrfStruct *SymbCylinPlaneBisect(const CagdPType CylPt,
                                      const CagdVType CylDir,
                                      CagdRType CylRad,
                                      CagdRType Size)


Description:

Compute the bisector surface between a cylinder and the XY plane. The computation is reduced to that of a bisector between a line and a plane, that has a rational form. Only the portion for which Z > 0 should be considered in the output.

Parameters:

CylPt: Point on axis of cylinder.
CylDir: Direction of cylinder. Must be in the northern hemisphere (positive Z coefficient).
CylRad: Radius of cylinder.
Size: Portion of result as it is infinite.


Returned Value:

CagdSrfStruct *: Constructed bisector surface.


See Also:

SymbPlanePointBisect SymbCylinPointBisect SymbConePointBisect SymbSpherePointBisect SymbTorusPointBisect SymbConeLineBisect SymbSphereLineBisect SymbPlaneLineBisect SymbConePlaneBisect SymbSpherePlaneBisect SymbCylinSphereBisect SymbSphereSphereBisect SymbConeSphereBisect SymbTorusSphereBisect SymbTorusTorusBisect SymbConeConeBisect SymbConeConeBisect2 SymbConeCylinBisect SymbCylinCylinBisect

Keywords:

bisectors skeleton


SymbCylinPointBisect

(smp_skel.c:744)

Prototype:

  CagdSrfStruct *SymbCylinPointBisect(const CagdPType CylPt,
                                      const CagdVType CylDir,
                                      CagdRType CylRad,
                                      const CagdPType Pt,
                                      CagdRType Size)


Description:

Compute the bisector surface between a cylinder and a point.

Parameters:

CylPt: Point on axis of cylinder.
CylDir: Direction of cylinder.
CylRad: Radius of cylinder.
Pt: Direction of line from origin.
Size: Portion of result as it is infinite.


Returned Value:

CagdSrfStruct *: Constructed bisector surface.


See Also:

SymbPtCrvBisectOnSphere SymbPlanePointBisect SymbConePointBisect SymbSpherePointBisect SymbTorusPointBisect SymbConePlaneBisect SymbCylinPlaneBisect SymbSpherePlaneBisect SymbConeLineBisect SymbSphereLineBisect SymbCylinSphereBisect SymbSphereSphereBisect SymbConeSphereBisect SymbTorusSphereBisect SymbTorusTorusBisect SymbConeConeBisect

Keywords:

bisectors skeleton


SymbCylinSphereBisect

(smp_skel.c:1328)

Prototype:

  CagdSrfStruct *SymbCylinSphereBisect(const CagdPType CylPt,
                                       const CagdVType CylDir,
                                       CagdRType CylRad,
                                       const CagdPType SprCntr,
                                       CagdRType SprRad,
                                       CagdRType Size)


Description:

Compute the bisector surface between a cylinder and a sphere. The computation is reduced to that of a bisector between a point and a cylinder, that has a rational form.

Parameters:

CylPt: Point on axis of cylinder.
CylDir: Direction of cylinder. Must be in the northern hemisphere (positive Z coefficient).
CylRad: Radius of cylinder.
SprCntr: Center location of the sphere. Must be in northern hemisphere (positive Z coefficient).
SprRad: Radius of sphere.
Size: Portion of result as it is infinite.


Returned Value:

CagdSrfStruct *: Constructed bisector surface.


See Also:

SymbPlanePointBisect SymbCylinPointBisect SymbConePointBisect SymbSpherePointBisect SymbTorusPointBisect SymbConeLineBisect SymbSphereLineBisect SymbPlaneLineBisect SymbCylinPlaneBisect SymbConePlaneBisect SymbSpherePlaneBisect SymbSphereSphereBisect SymbConeSphereBisect SymbTorusSphereBisect SymbTorusTorusBisect SymbConeConeBisect SymbConeConeBisect2 SymbConeCylinBisect SymbCylinCylinBisect

Keywords:

bisectors skeleton


SymbDecomposeCrvCrv

(decompos.c:171)

Prototype:

  CagdCrvStruct *SymbDecomposeCrvCrv(CagdCrvStruct *Crv)


Description:

Try to decompose a curve of arbitrary degree if possible. Among all possibilities, return one pair of two curves F and G which satisfy F(G(t)) = H(t). F can have arbitrary number of coordinates: F(x) = x^m + sum b_j x^j. G should be a scalar monotone curve having a range [0, 1]: G(x) = c_k x^k + ..... + c_1 x.

Parameters:

Crv: curve H(t) to try and decompose.


Returned Value:

CagdCrvStruct *: Pairs of curves F and G that are composable to the input curve, or NULL if nonreducable. F: [0, 1] -> R^3, G: [0, 1] -> [0, 1].


See Also:

SymbComposeCrvCrv

Keywords:

composition


SymbDescribeError

(symb_err.c:85)

Prototype:

  const 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 invocation 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:

const char *: A string describing the error type.


Keywords:

error handling


SymbDirectionsConeAvgToData

(nrmlcone.c:974)

Prototype:

  const SymbNormalConeStruct *SymbDirectionsConeAvgToData(
                                               const CagdRType * const *Pts,
                                               int NumPts,
                                               CagdPointType PType,
                                               SymbNormalConeStruct *NormalCone)


Description:

Computes a directions cone for a given vector field, represented as an array of points (or a control mesh). The angular span of this directions field is computed by averaging the normalized vectors, and finding the maximum deviation of the average direction.

Parameters:

Pts: An array of vectors (represented as a control mesh). Supports E2/E3/P2/P3 point types.
NumPts: The number of vectors in the array.
PType: The point type of the vectors in Pts.
NormalCone: The computed directions cone, or NULL if failed.


Returned Value:

const SymbNormalConeStruct *: The computed directions cone, or NULL if failed. Same as NormalCone.


See Also:

SymbNormalConeForSrfOpt SymbNormalConeOverlap SymbTangentConeForCrv SymbNormalConeForSrfDoOptimal SymbNormalConeForSrf

Keywords:

normals normal bound


SymbDirectionsConeOptToData

(nrmlcone.c:1064)

Prototype:

  const SymbNormalConeStruct *SymbDirectionsConeOptToData(
                                                const CagdRType * const *Pts,
                                                int NumPts,
                                                CagdPointType PType,
                                                SymbNormalConeStruct *NormalCone)


Description:

Computes a directions cone for a given vector field, represented as an array of points (or a control mesh). The angular span of this directions field is computed by using linear programming.

Parameters:

Pts: An array of vectors (represented as a control mesh). Supports E2/E3/P2/P3 point types.
NumPts: The number of vectors in the array.
PType: The point type of the vectors in Pts.
NormalCone: The computed directions cone, or NULL if failed.


Returned Value:

const SymbNormalConeStruct *: The computed directions cone, or NULL if failed. Same as NormalCone.


See Also:

SymbNormalConeForSrfOpt SymbNormalConeOverlap SymbTangentConeForCrv SymbNormalConeForSrfDoOptimal SymbNormalConeForSrf

Keywords:

normals normal bound


SymbDirectionsConeToData

(nrmlcone.c:1122)

Prototype:

  const SymbNormalConeStruct *SymbDirectionsConeToData(
                                                const CagdRType * const *Pts,
                                                int NumPts,
                                                CagdPointType PType,
                                                SymbNormalConeStruct *NormalCone)


Description:

Computes a directions cone for a given vector field, represented as an array of points (or a control mesh). The angular span of this directions field is computed either by the "averaging" algorithm or by the "optimal" linear programming algorithm, depending on the global flag .

Parameters:

Pts: An array of vectors (represented as a control mesh). Supports E2/E3/P2/P3 point types.
NumPts: The number of vectors in the array.
PType: The point type of the vectors in Pts.
NormalCone: The computed directions cone, or NULL if failed.


Returned Value:

const SymbNormalConeStruct *: The computed directions cone, or NULL if failed. Same as NormalCone.


See Also:

SymbNormalConeForSrfOpt SymbNormalConeOverlap SymbTangentConeForCrv SymbNormalConeForSrfDoOptimal SymbNormalConeForSrf

Keywords:

normals normal bound


SymbDistBuildMapToCrv

(distance.c:1156)

Prototype:

  CagdRType SymbDistBuildMapToCrv(const CagdCrvStruct *Crv,
                                  CagdRType Tolerance,
                                  CagdRType *XDomain,
                                  CagdRType *YDomain,
                                  CagdRType **DiscMap,
                                  CagdRType DiscMapXSize,
                                  CagdRType DiscMapYSize)


Description:

Compute a discrete distance map to a freeform curve by sampling the distance on a regular grid.

Parameters:

Crv: The curve to approximate a discrete distance map for.
Tolerance: Tolerance of distance computation.
XDomain: X domain to sample R2 for distances.
YDomain: Y domain to sample R2 for distances.
DiscMap: Where output is saved as a real distance value.
DiscMapXSize: orizontal resolution, 0 will be mapped to XDomain[0], (DiscMapXSize-1) to XDomain[0].
DiscMapYSize: ertical resolution, 0 will be mapped to YDomain[0], (DiscMapYSize-1) to YDomain[0].


Returned Value:

CagdRType: Maximal distance of points in prescribed domain to crv Crv.


See Also:

SymbDistCrvPoint

Keywords:




SymbDistCrvLine

(distance.c:335)

Prototype:

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


Description:

Given a curve and a line, finds the nearest point (if MinDist) or the farthest location (if MinDist FALSE) from the curve to the given line. Returned is the parameter value of the curve. Both internal as well as boundary extrema are considered. 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 (farthest) point to Line.
Line: The line to find the nearest (farthest) point on Crv to it.
MinDist: If TRUE nearest points is needed, if FALSE farthest.
Epsilon: Accuracy of computation.


Returned Value:

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


See Also:

SymbLclDistCrvLine MvarDistSrfLine SymbCrvRayInter

Keywords:

curve line distance


SymbDistCrvPoint

(distance.c:75)

Prototype:

  CagdRType SymbDistCrvPoint(const CagdCrvStruct *Crv,
                             void *CrvPtPrepHandle,
                             const CagdRType *Pt,
                             CagdBType MinDist,
                             CagdRType Epsilon,
                             CagdPointType DistSpace)


Description:

Given a curve and a point, finds the nearest point (if MinDist) or the farthest location (if MinDist FALSE) from the curve to the given point. Returned is the parameter value of the curve. Both internal as well as boundary extrema are considered. Computes the zero set of (Crv(t) - Pt) . Crv'(t), and also look at the curves' end points, and all C^1 discontinuities.

Parameters:

Crv: The curve to find its nearest (farthest) point to Pt.
CrvPtPrepHandle: If not NULL, holds pre-processed data to speed up the curve - points distance computations, for multiple curve - point tests (same curve for all points). See SymbDistCrvPointPrep and SymbDistCrvPointFree.
Pt: The point to find the nearest (farthest) point on Crv to it.
MinDist: If TRUE nearest points is needed, if FALSE farthest.
Epsilon: Accuracy of computation.
DistSpace: if not CAGD_PT_NONE, use this space to compute distances. Can be used, for example, to compute XY distances in a 3D curve. Otherwise, the point space of Crv is used.


Returned Value:

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


See Also:

SymbLclDistCrvPoint MvarDistSrfPoint SymbDistCrvPointPrep SymbDistCrvPointFree

Keywords:

curve point distance


SymbDistCrvPointFree

(distance.c:223)

Prototype:

  void SymbDistCrvPointFree(void *CrvPtPrepHandle)


Description:

Free the pre-processed data structure, given using Handle.

Parameters:

CrvPtPrepHandle: Handle on the preprocessed curve for multiple point - curve test, to free.


Returned Value:

void


See Also:

SymbLclDistCrvPoint SymbDistCrvPointPrep

Keywords:

curve point distance


SymbDistCrvPointPrep

(distance.c:180)

Prototype:

  void *SymbDistCrvPointPrep(const CagdCrvStruct *CCrv)


Description:

Given a curve, pre-process it so many curve-distance test can be efficiently made.

Parameters:

CCrv: The curve to pre-process for multi-point - curve tests.


Returned Value:

void *: A handle on a structure to boost multi-point - curve tests.


See Also:

SymbDistCrvPointFree SymbLclDistCrvPoint

Keywords:

curve point distance


SymbDistPoint1DWithEnergy

(ffptdist.c:359)

Prototype:

  IrtRType *SymbDistPoint1DWithEnergy(int N,
                                      IrtRType XMin,
                                      IrtRType XMax,
                                      CagdCrvStruct *CrvtrCrv,
                                      CagdCrvStruct *Deriv1MagSqrCrv,
                                      int Resolution,
                                      SymbDistEnergy1DFuncType EnergyFunc)


Description:

Distributes N points with a given energy in the region in the X line that is bounded by XMin, XMax. Energy is specified via the EnergyFunc that recieves the X location. Resolution * N specifies how many samples to take from EnergyFunc. Returns an array of N distributed points. The solution to the distribution is analythic provided EnergyFunc can be integrated. Herein, this integral is computed nomerically.

Parameters:

N: Number of points to distribute,
XMin: Minimum of domain to distribute points.
XMax: Minimum of domain to distribute points.
CrvtrCrv: The curvature field.
Deriv1MagSqrCrv: ill Contain the curvature square and arclength square.
Resolution: Fineness of integral calculation.
EnergyFunc: Energy function to use.


Returned Value:

IrtRType *: A vector of N points distributed as requested.


Keywords:

point distribution


SymbEnvOffsetFromCrv

(moffset.c:339)

Prototype:

  CagdSrfStruct *SymbEnvOffsetFromCrv(const 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:




SymbEvalCrvCurvPrep

(evalcurv.c:33)

Prototype:

  void SymbEvalCrvCurvPrep(const CagdCrvStruct *Crv, CagdBType Init)


Description:

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

Parameters:

Crv: Curve to preprocess. Its attributes might be affected though.
Init: TRUE for initializing, FALSE for clearing out.


Returned Value:

void


See Also:

SymbEvalCurvature SymbEvalCrvCurvTN

Keywords:

curvature


SymbEvalCrvCurvTN

(evalcurv.c:143)

Prototype:

  void SymbEvalCrvCurvTN(CagdVType Nrml,
                         CagdVType Tan,
                         CagdVType BiNrml,
                         int Normalize)


Description:

As bi-product, return the last tangent and normal of the curve evaluated last by SymbEvalCrvCurvature.

Parameters:

Nrml: The normal to return.
Tan: The tangent to return.
BiNrml: The bi-normal.
Normalize: TRUE to normalize the vectors.


Returned Value:

void


See Also:

SymbEvalCrvCurvPrep SymbEvalCrvCurvature

Keywords:

curvature


SymbEvalCrvCurvature

(evalcurv.c:94)

Prototype:

  CagdBType SymbEvalCrvCurvature(const CagdCrvStruct *Crv, CagdRType t,
                                 CagdRType *k,
                                 CagdVType Tan,
                                 CagdVType BiNrml)


Description:

Evaluate a given curve's curvature. Returns the curvature for the given curve location. This function must be invoked after SymbEvalCrvCurvPrep was called to initialize the proper data structures, for fast curvature evaluations at many points. SymbEvalCrvCurvPrep should be called at the end to release these data structures. As a bi-product, function SymbEvalCrvCurvTN could be invoked immediately after this function to fetch the tangent and the normal of the curve at the given location.

Parameters:

Crv: Curve to evaluate its curvature properties.
t: Location of evaluation.
k: The returned curvature at Crv(t).
Tan: The tangent to return.
BiNrml: The bi-normal to return.


Returned Value:

CagdBType: TRUE if succesful, FALSE otherwise.


See Also:

SymbEvalCrvCurvPrep SymbEvalCrvCurvTN

Keywords:

curvature


SymbEvalSrfAsympDir

(evalcurv.c:388)

Prototype:

  int SymbEvalSrfAsympDir(const CagdSrfStruct *Srf,
                          CagdRType U,
                          CagdRType V,
                          CagdBType DirInUV,
                          CagdVType AsympDir1,
                          CagdVType AsympDir2)


Description:

Computes the asymptotic directions of the surface in the given U, V location, if exists. If DirInUV, the returned asymptotic direction is in UV space, otherwise, in Euclidean surface tangent plane space. This function must be invoked after SymbEvalSrfCurvPrep was called to initialize the proper data structures, for fast curvature evaluations at many points. SymbEvalSrfCurvPrep should be called at the end to release these data structures. The asymptotic direction(s) is the direction for which the normal curvature vanish and hence can exist for hyperbolic regions. We solve:
[t  (1-t)] [ L  M ] [t  ]
           [      ] [   ]
           [ M  N ] [1-t]

and look for solution of t between zero and one as:
t = (N-M +/- sqrt(M^2-LN)) / (L-2M+N).


Parameters:

Srf: To compute asymptotic directions for.
U, V: Location of evaluation.
DirInUV: If TRUE asymptotic direction is given in UV, otherwise in Euclidean 3-space.
AsympDir1, AsympDir2: eturned values.


Returned Value:

int: Number of asymptotic directions found, zero for none.


See Also:

SymbEvalSrfCurvature SymbEvalSrfCurvPrep

Keywords:

curvature


SymbEvalSrfCurvPrep

(evalcurv.c:172)

Prototype:

  void SymbEvalSrfCurvPrep(const 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. Its attributes might be affected though.
Init: TRUE for initializing, FALSE for clearing out.


Returned Value:

void


See Also:

SymbEvalCurvature

Keywords:

curvature


SymbEvalSrfCurvature

(evalcurv.c:239)

Prototype:

  CagdBType SymbEvalSrfCurvature(const 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 evaluations at many points. 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:

CagdBType: TRUE if successful, FALSE otherwise.


See Also:

SymbEvalSrfCurvPrep

Keywords:

curvature


SymbExtremumCntPtValsMalloc

(symb_crv.c:1656)

Prototype:

  CagdRType *SymbExtremumCntPtValsMalloc(CagdRType * const *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


SymbExtremumCntPtValsToData

(symb_crv.c:1609)

Prototype:

  CagdRType *SymbExtremumCntPtValsToData(CagdRType * const *Points,
                                         int Length,
                                         CagdBType FindMinimum,
                                         CagdRType *Extremum)


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.
Extremum: A vector holding PType point with the extremum values of each axis independently.


Returned Value:

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


Keywords:

extremum values symbolic computation


SymbFatalError

(symb_ftl.c:56)

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


SymbGet2CrvsInterDAreaDCtlPts

(symb_cci.c:343)

Prototype:

  int SymbGet2CrvsInterDAreaDCtlPts(CagdCrvStruct *Crv1,
                                    CagdCrvStruct *Crv2,
                                    CagdRType Eps,
                                    CagdRType **InterDomains,
                                    CagdRType **dAreadPts)


Description:

Calculates the intersection domains of two curves, and the change rate of the total intersection area relative to control points change. The curves must be planar and have the same orientation. The intersections must be complete - that is, there are even number of intersections.

Parameters:

Crv1: First planar curve.
Crv2: Second planar curve.
Eps: Tolerance of computation.
InterDomains: alculated domain as a list of the in the following 4-tuple structure, (u1_enter, u1_leave, u2_enter, u2_leave) sorted by u1 values.
dAreadPts: Will be updated to contain the change rate of the intersection areas relative to changes in each control points of both curves. The order in this array is as follows, ( Crv1_ctpnt1_x, Crv1_ctpnt1_y, Crv1_ctpnt2_x, Crv1_ctpnt2_y, ... Crv2_ctpnt1_x, Crv2_ctpnt1_y, ... Crv2_ctpnt2_x, Crv2_ctpnt2_y, ... ).


Returned Value:

int: Number of intersection domains of the two curves (the length of InterDomains is 4-times this return value).


See Also:

SymbGet2CrvsIntersectionAreas

Keywords:




SymbGet2CrvsIntersectionAreas

(symb_cci.c:246)

Prototype:

  CagdRType SymbGet2CrvsIntersectionAreas(const CagdCrvStruct *Crv1,
                                          const CagdCrvStruct *Crv2,
                                          CagdRType Eps)


Description:

Calculates the total area of the intersection domains of two planar curves. The curves must have the same orientation.

Parameters:

Crv1: First planar curve.
Crv2: Second planar curve.
Eps: Tolerance of computation.


Returned Value:

CagdRType: Total area of intersection domains of the two curves.


See Also:

SymbCrvEnclosedAreaEval SymbGet2CrvsInterDAreaDCtlPts

Keywords:




SymbGet2CrvsIntersectionRegions

(symb_cci.c:169)

Prototype:

  CagdCrvStruct *SymbGet2CrvsIntersectionRegions(const CagdCrvStruct *Crv1,
                                                 const CagdCrvStruct *Crv2,
                                                 CagdRType Eps)


Description:

Computes the intersection region(s) of given two curves if any. curves. The curves must have the same orientation.

Parameters:

Crv1, Crv2: The two curves to intersect and compute intersecting region(s).
Eps: Tolerance of computation.


Returned Value:

CagdCrvStruct *: List of closed intersecting region(s) or NULL if none.


See Also:

CagdCrvCrvInter

Keywords:




SymbGetCrvSubRegionAlphaMatrix

(symb_cci.c:417)

Prototype:

  CagdRType *SymbGetCrvSubRegionAlphaMatrix(const CagdCrvStruct *Crv,
                                            CagdRType t1,
                                            CagdRType t2,
                                            int *Dim)


Description:

Computes the Alpha matrix that relates the control points of the curve region (t1, t2) to the control points of the input curve Crv of a larger domain. Compute the Alpha matrix by adding Order-1 knots at t1 and t2.

Parameters:

Crv: Curve to compute its region extraction Alpha matrix. Assumed a non periodic curve.
t1, t2: Of extracted domain.
Dim: The two dimensions of the returned matrix will be placed here.


Returned Value:

CagdRType *: Linearized 2D matrix, row by row, of size (CrvLen, RgnLen), where CrvLen is the number of control points in curve Crv, and RgnLen is the size of the extracted curve region. Allocated dynamically.


See Also:

BspKnotEvalAlphaCoef

Keywords:




SymbHausDistBySamplesCrvCrv

(distance.c:1365)

Prototype:

  CagdRType SymbHausDistBySamplesCrvCrv(const CagdCrvStruct *Crv1,
                                        const CagdCrvStruct *Crv2,
                                        int Samples,
                                        int HDistSide)


Description:

Given two curves, compute an Hausdorff distance bound by sampling two dense sets of sampled points and estimating the Hausdorff distance between the two curves by the sampled points.

Parameters:

Crv1, Crv2: The two curves, Crv1(u) and Crv2(v), to estimate their Hausdorff distance.
Samples: Number of samples to take, uniformly in parametric space.
HDistSide: 1 for HD from V1 to V2, 2 for HD from V2 to V1, 3 for a symmetric HD.


Returned Value:

CagdRType: An upper bound on the Hausdorff distance.


See Also:

SymbHausDistOfSamplefPts

Keywords:

curve curve distance


SymbHausDistBySamplesCrvSrf

(distance.c:1405)

Prototype:

  CagdRType SymbHausDistBySamplesCrvSrf(const CagdCrvStruct *Crv1,
                                        const CagdSrfStruct *Srf2,
                                        int Samples,
                                        int HDistSide)


Description:

Given a curve and a surface, compute an Hausdorff distance bound by sampling two dense sets of sampled points and estimating the Hausdorff distance between the two shapes by the sampled points.

Parameters:

Crv1, Srf2: The two curves and surfaces, Crv(t) and Srf2(u, v), to estimate their Hausdorff distance.
Samples: Number of samples to take, uniformly in parametric space, as (Samples x Samples) samples.
HDistSide: 1 for HD from V1 to V2, 2 for HD from V2 to V1, 3 for a symmetric HD.


Returned Value:

CagdRType: An upper bound on the Hausdorff distance.


See Also:

SymbHausDistOfSamplefPts SymbHausDistBySamplesSrfSrf

Keywords:

curve surface distance


SymbHausDistBySamplesSrfSrf

(distance.c:1446)

Prototype:

  CagdRType SymbHausDistBySamplesSrfSrf(const CagdSrfStruct *Srf1,
                                        const CagdSrfStruct *Srf2,
                                        int Samples,
                                        int HDistSide)


Description:

Given two surfaces, compute an Hausdorff distance bound by sampling two dense sets of sampled points and estimating the Hausdorff distance between the two surfaces by the sampled points.

Parameters:

Srf1, Srf2: The two surfaces, Srf1(u) and Srf2(v), to estimate their Hausdorff distance.
Samples: Number of samples to take, uniformly in parametric space, as (Samples x Samples) samples.
HDistSide: 1 for HD from V1 to V2, 2 for HD from V2 to V1, 3 for a symmetric HD.


Returned Value:

CagdRType: An upper bound on the Hausdorff distance.


See Also:

SymbHausDistOfSamplefPts

Keywords:

surface surface distance


SymbHausDistOfSamplefPts

(distance.c:1293)

Prototype:

  CagdRType SymbHausDistOfSamplefPts(CagdPType * const V1,
                                     CagdPType * const V2,
                                     int V1Size,
                                     int V2Size,
                                     int HDistSide)


Description:

Compute the Hausdorff Distance (HD) between two vectors of points.

Parameters:

V1, V2: The two vectors to consider.
V1Size, V2Size: Lengths of vectors V1 and V2.
HDistSide: 1 for HD from V1 to V2, 2 for HD from V2 to V1, 3 for a symmetric HD.


Returned Value:

CagdRType: Computed HD.


See Also:



Keywords:




SymbHighlightLnFree

(rflct_ln.c:423)

Prototype:

  void SymbHighlightLnFree(CagdSrfStruct *Srf)


Description:

Free the internal data sets, if any of the given surface, toward the computation of the highlight lines. as created by SymbHighlightLnPrepSrf.

Parameters:

Srf: Surface to free its internal data sets saved as attributes.


Returned Value:

void


See Also:

SymbHighlightLnPrepSrf SymbHighlightLnGen

Keywords:




SymbHighlightLnGen

(rflct_ln.c:380)

Prototype:

  CagdSrfStruct *SymbHighlightLnGen(CagdSrfStruct *Srf,
                                    const CagdPType LnPt,
                                    const CagdVType LnDir)


Description:

Compute the highlight line through LnPt on the given surface. The surface is assumed to have been preprocessed in SymbHighlightLnPrepSrf for the requested preprocessed named attribute, or otherwise SymbHighlightLnPrepSrf will be invoked on the fly.

Parameters:

Srf: Surface to preprocess.
LnPt: Point on a highlight line.
LnDir: Direction of highlight line.


Returned Value:

CagdSrfStruct *: A scalar surface whose zero set is the highlight line sought on Srf.


See Also:

SymbHighlightLnPrepSrf SymbHighlightLnFree

Keywords:




SymbHighlightLnPrepSrf

(rflct_ln.c:342)

Prototype:

  void SymbHighlightLnPrepSrf(CagdSrfStruct *Srf, const CagdVType LnDir)


Description:

Precompute the necessary data set for as efficient as possible highlight lines' extractions. Data set is kept as an attribute on the surface. Note that only the direction of the highlight line is employed at this time, and exact location will be required by SymbHighlightLnGen only.

Parameters:

Srf: Surface to preprocess.
LnDir: Direction of highlight line.


Returned Value:

void


See Also:

SymbHighlightLnGen SymbHighlightLnFree

Keywords:




SymbHugeCrv2Polyline

(symbpoly.c:338)

Prototype:

  CagdPtStruct *SymbHugeCrv2Polyline(const CagdCrvStruct *Crv,
                                     int Samples,
                                     CagdBType AddFirstPt,
                                     CagdBType AddLastPt,
                                     CagdBType AddParamVals)


Description:

If the given curve is huge, simply select Samples points out if its control polygon.

Parameters:

Crv: To select Samples points out of its control polygon.
Samples: Number of samples to grab.
AddFirstPt: If TRUE, first point on curve is also added.
AddLastPt: If TRUE, last point on curve is also added.
AddParamVals: TRUE to add parameter values, as attributes.


Returned Value:

CagdPtStruct *: Taken samples.


See Also:



Keywords:




SymbInsertNewParam2

(symbzero.c:715)

Prototype:

  CagdPtStruct *SymbInsertNewParam2(CagdPtStruct *PtList, CagdRType t)


Description:

Insert a single t value into given PtList, in place, provided no equal t value exists already in the list. List is ordered incrementally.

Parameters:

PtList: List to insert a new value t into.
t: New value to insert to PtList list.


Returned Value:

CagdPtStruct *: Updated list, in place.


See Also:



Keywords:




SymbIsCircularCrv

(rvrs_eng.c:143)

Prototype:

  CagdBType SymbIsCircularCrv(const CagdCrvStruct *Crv,
                              CagdPType Center,
                              CagdRType *Radius,
                              CagdRType Eps)


Description:

Attempts to recongnize if the given curve Crv is indeed circular. If the curve is found to be circular, its center and radius are returned. Crv is tested for circularity in the XY plane. A curve is circular if its evolute curve is constant.

Parameters:

Crv: Curve to attempt and recognize as circular.
Center: If circular, the center of the circle, zero vector otherwise.
Radius: If circular, the radius of the circle, zero otherwise.
Eps: Tolarence of "same" value.


Returned Value:

CagdBType: TRUE if circular curve, FALSE otherwise.


See Also:

SymbIsSphericalSrf

Keywords:




SymbIsConstCrv

(rvrs_eng.c:45)

Prototype:

  CagdBType SymbIsConstCrv(const CagdCrvStruct *CCrv,
                           CagdCtlPtStruct *ConstVal,
                           CagdRType Eps)


Description:

Attempts to recognize if the given curve Crv is a constant curve. If TRUE, ConstVal is reference to a static location holding the constant value.

Parameters:

CCrv: Curve to attempt and recognize as a constant curve.
ConstVal: Resulting constant value if indeed a constant curve. This value is always Euclidean, even for projective curves.
Eps: Tolarence of "same" value.


Returned Value:

CagdBType: TRUE if a constant curve, FALSE otherwise.


See Also:

SymbIsConstSrf

Keywords:




SymbIsConstSrf

(rvrs_eng.c:273)

Prototype:

  CagdBType SymbIsConstSrf(const CagdSrfStruct *CSrf,
                           CagdCtlPtStruct *ConstVal,
                           CagdRType Eps)


Description:

Attempts to recognize if the given surface Srf is a constant surface.

Parameters:

CSrf: Surface to attempt and recognize as a constant surface.
ConstVal: Resulting constant value if indeed a constant surface. This value is always Euclidean, even for projective surfaces.
Eps: Tolarence of "same" value.


Returned Value:

CagdBType: TRUE if a constant surface, FALSE otherwise.


See Also:

SymbIsConstCrv

Keywords:




SymbIsDevelopSrf

(rvrs_eng.c:435)

Prototype:

  CagdBType SymbIsDevelopSrf(const CagdSrfStruct *Srf, CagdRType Eps)


Description:

Attempts to recongnize if the given surface Srf is indeed a ruled surface. If the surface is found to be a ruled surface, it is decomposed into its two rail curves (two boundary curves essentially). A surface is a ruled surface if one of its partial derivatives is in the same direction for that parameter.

Parameters:

Srf: Surface to attempt and recognize as a ruled surface.
Eps: Tolarence of "same" value.


Returned Value:

CagdBType: TRUE if a ruled surface, FALSE otherwise.


See Also:

SymbIsPlanarSrf SymbIsRuledSrf SymbIsSrfOfRevSrf SymbIsSphericalSrf SymbIsExtrusionSrf

Keywords:




SymbIsExtrusionSrf

(rvrs_eng.c:376)

Prototype:

  int SymbIsExtrusionSrf(const CagdSrfStruct *Srf,
                         CagdCrvStruct **Crv,
                         CagdVType ExtDir,
                         CagdRType Eps)


Description:

Attempts to recognize if the given surface Srf is indeed an extrusion surface. If the surface is found to be an extrusion, it is decomposed into a cross section curve Crv, and an extrusion direction ExtDir. A surface is an extrusion surface if one of its partial derivatives is constant.

Parameters:

Srf: Surface to attempt and recognize as an extrusion surface.
Crv: If an extrusion surface, the cross section curve, NULL otherwise.
ExtDir: The extrusion direction, if an extrusion surface, zero vector otherwise.
Eps: Tolarence of "same" value.


Returned Value:

int: 1 if an extrusion surface along U, 2 if an extrusion surface along V, 0 otherwise.


See Also:

SymbIsPlanarSrf SymbIsRuledSrf SymbIsDevelopSrf SymbIsSrfOfRevSrf SymbIsSphericalSrf

Keywords:




SymbIsLineCrv

(rvrs_eng.c:221)

Prototype:

  CagdBType SymbIsLineCrv(const CagdCrvStruct *Crv,
                          CagdPType LnPos,
                          CagdVType LnDir,
                          CagdRType Eps)


Description:

Attempts to recongnize if the given curve Crv is indeed circular. If the curve is found to be circular, its center and radius are returned. Crv is tested for circularity in the XY plane. A curve is circular if its evolute curve is constant.

Parameters:

Crv: Curve to attempt and recognize as circular.
LnPos: A point on the line, if the curve is indeed a line.
LnDir: A unit direction along the line, if the curve is a line.
Eps: Tolarence of "same" value.


Returned Value:

CagdBType: TRUE if a line, FALSE otherwise.


See Also:

SymbIsPlanarSrf SymbIsSphericalSrf SymbIsCircularCrv

Keywords:




SymbIsOffsetLclSelfInters

(offset.c:1805)

Prototype:

  CagdBType SymbIsOffsetLclSelfInters(CagdCrvStruct *Crv,
                                      CagdCrvStruct *OffCrv,
                                      CagdPtStruct **SIDmns)


Description:

Reports if the given offset curve OffCrv to given curve Crv contains local self intersections. Solution is the zeros of .

Parameters:

Crv: Original curve.
OffCrv: Offset (approximation) curve. Assumed to share the same parametrization with Crv. I.e. Crv(t0) is offset to OffCrv(t0).
SIDmns: If not NULL set to domains that are in the self intersections. Each consecutive set of two points in this list defines one such domain.


Returned Value:

CagdBType: TRUE if has local self intersection, FALSE otherwise.


Keywords:




SymbIsPlanarSrf

(rvrs_eng.c:738)

Prototype:

  CagdBType SymbIsPlanarSrf(const CagdSrfStruct *Srf,
                            IrtPlnType Plane,
                            CagdRType Eps)


Description:

Attempts to recongnize if the given curve Crv is indeed circular. If the curve is found to be circular, its center and radius are returned. Crv is tested for circularity in the XY plane. A surface is plane if its gaussian and mean curvatures are zero.

Parameters:

Srf: Surface to attempt and recognize as circular.
Plane: The plane equation, if the surface is indeed planar.
Eps: Tolarence of "same" value.


Returned Value:

CagdBType: TRUE if a line, FALSE otherwise.


See Also:

SymbIsRuledSrf SymbIsDevelopSrf SymbIsSrfOfRevSrf SymbIsSphericalSrf SymbIsExtrusionSrf SymbIsLineCrv

Keywords:




SymbIsRuledSrf

(rvrs_eng.c:483)

Prototype:

  int SymbIsRuledSrf(const CagdSrfStruct *Srf,
                     CagdCrvStruct **Crv1,
                     CagdCrvStruct **Crv2,
                     CagdRType Eps)


Description:

Attempts to recongnize if the given surface Srf is indeed a ruled surface. If the surface is found to be a ruled surface, it is decomposed into its two rail curves (two boundary curves essentially). A surface is a ruled surface if one of its partial derivatives is in the same direction for that parameter.

Parameters:

Srf: Surface to attempt and recognize as a ruled surface.
Crv1: If a ruled surface, the first curve, NULL otherwise.
Crv2: If a ruled surface, the second curve, NULL otherwise.
Eps: Tolarence of "same" value.


Returned Value:

int: 1 if an extrusion surface along U, 2 if an extrusion surface long V, 0 otherwise.


See Also:

SymbIsPlanarSrf SymbIsDevelopSrf SymbIsSrfOfRevSrf SymbIsSphericalSrf SymbIsExtrusionSrf

Keywords:




SymbIsSphericalSrf

(rvrs_eng.c:658)

Prototype:

  CagdBType SymbIsSphericalSrf(const CagdSrfStruct *Srf,
                               CagdPType Center,
                               CagdRType *Radius,
                               CagdRType Eps)


Description:

Attempts to recongnize if the given surface Srf is indeed a sphere. If the surface is found to be a sphere, its center and radius are returned. A surface is a sphere if its Gaussian and Mean sqaure surfaces are constant and equal. The center of the sphere is derived from the mean evolute surface.

Parameters:

Srf: Surface to attempt and recognize as a sphere.
Center: If a sphere, the center of the sphere, zero vector otherwise.
Radius: If a sphere, the radius of the sphere, zero otherwise.
Eps: Tolarence of "same" value.


Returned Value:

CagdBType: TRUE if a sphere surface, FALSE otherwise.


See Also:

SymbIsPlanarSrf SymbIsRuledSrf SymbIsDevelopSrf SymbIsSrfOfRevSrf SymbIsExtrusionSrf SymbIsCircularCrv

Keywords:




SymbIsSrfOfRevSrf

(rvrs_eng.c:566)

Prototype:

  CagdBType SymbIsSrfOfRevSrf(const CagdSrfStruct *Srf,
                              CagdCrvStruct **CrossSec,
                              CagdPType AxisPos,
                              CagdVType AxisDir,
                              CagdRType Eps)


Description:

Attempts to recongnize if the given surface Srf is indeed a surface of revolution. If the surface is found to be a surface of revolution, it is decomposed into its generator (cross section) curve, and the axis of revolution. A surface is a surface of revolution if the focal surface of one of the pseudo iso focal surfaces degenerates into a line.

Parameters:

Srf: Surface to attempt and recognize as a ruled surface.
CrossSec: If a surface of revolution, the cross section curve, NULL otherwise.
AxisPos: If a surface of revolution, a point on axis of revolution, NULL otherwise.
AxisDir: If a surface of revolution, the direction of the axis of revolution, NULL otherwise.
Eps: Tolarence of "same" value.


Returned Value:

CagdBType: TRUE if a surface of revolution, FALSE otherwise.


See Also:

SymbIsPlanarSrf SymbIsRuledSrf SymbIsDevelopSrf SymbIsSphericalSrf SymbIsExtrusionSrf

Keywords:




SymbIsZeroCrv

(rvrs_eng.c:101)

Prototype:

  CagdBType SymbIsZeroCrv(const CagdCrvStruct *Crv, CagdRType Eps)


Description:

Attempts to recognize if the given curve Crv is an identically zero curve.

Parameters:

Crv: Curve to attempt and recognize as a zero curve.
Eps: Tolarence of "same" value.


Returned Value:

CagdBType: TRUE if a zero curve, FALSE otherwise.


See Also:

SymbIsConstCrv SymbIsZeroSrf

Keywords:




SymbIsZeroSrf

(rvrs_eng.c:329)

Prototype:

  CagdBType SymbIsZeroSrf(const CagdSrfStruct *Srf, CagdRType Eps)


Description:

Attempts to recognize if the given surface Srf is an identically zero surface.

Parameters:

Srf: Surface to attempt and recognize as a zero surface.
Eps: Tolarence of "same" value.


Returned Value:

CagdBType: TRUE if a zero surface, FALSE otherwise.


See Also:

SymbIsConstSrf SymbIsZeroCrv

Keywords:




SymbLclDistCrvLine

(distance.c:409)

Prototype:

  CagdPtStruct *SymbLclDistCrvLine(const CagdCrvStruct *Crv,
                                   const 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. Only interior extrema are considered. 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 (farthest) point to Line.
Line: The line to find the nearest (farthest) 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.


See Also:

SymbDistCrvLine MvarDistSrfLine SymbCrvRayInter

Keywords:

curve line distance


SymbLclDistCrvPoint

(distance.c:263)

Prototype:

  CagdPtStruct *SymbLclDistCrvPoint(const CagdCrvStruct *CCrv,
                                    void *CrvPtPrepHandle,
                                    const CagdRType *Pt,
                                    CagdRType Epsilon)


Description:

Given a curve and a point, find the local extremum distance points on the curve to the given point. Only interior extrema are considered. Returned is a list of parameter value with local extremum. Computes the zero set of (Crv(t) - Pt) . Crv'(t), in R^n - the space of Crv.

Parameters:

CCrv: The curve to find its extreme distance locations to Pt.
CrvPtPrepHandle: If not NULL, holds pre-processed data to speed up the curve - points distance computations, for multiple curve - point tests (same curve for all points).
Pt: The point to find the extreme distance locations from Crv. Should be in the sapce range space as CCrv.
Epsilon: Accuracy of computation.


Returned Value:

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


See Also:

SymbDistCrvPoint MvarDistSrfPoint

Keywords:

curve point distance


SymbMakePosCrvCtlPolyPos

(curvatur.c:528)

Prototype:

  CagdCrvStruct *SymbMakePosCrvCtlPolyPos(const 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


SymbMapUVCrv2E3

(compost2.c:790)

Prototype:

  CagdCrvStruct *SymbMapUVCrv2E3(const CagdCrvStruct *Crv,
                                 const CagdSrfStruct *Srf,
                                 CagdBType Compose)


Description:

Computes Srf(Crv), by either evaluating Srf at all control points locations of Crv (useful if piecewise linear), or via composition.

Parameters:

Crv: In UV space of Srf to map to E3.
Srf: To map Crv over it.
Compose: TRUE to compose Srf(Crv) or FALSE to evaluate at ctl pts.


Returned Value:

CagdCrvStruct *: E3 curve of Srf(Crv).


See Also:

SymbComposeSrfCrv

Keywords:




SymbMeshAddSub

(symb_crv.c:1202)

Prototype:

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


Description:

Given two control polygons/meshes - add them coordinate wise. 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 SymbMeshAddSubTo

Keywords:

addition subtraction symbolic computation


SymbMeshAddSubTo

(symb_crv.c:1266)

Prototype:

  void SymbMeshAddSubTo(CagdRType **DestPoints,
                        CagdRType * const *Points2,
                        CagdPointType PType,
                        int Size,
                        CagdBType OperationAdd)


Description:

Given two control polygons/meshes - add/sub the second to the first coordinate wise. If mesh is rational, weights are assumed identical and are ignored.

Parameters:

DestPoints: Where addition or difference result should go to.
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 SymbMeshAddSub

Keywords:

addition subtraction symbolic computation


SymbNormal2ConesForSrf

(nrmlcone.c:541)

Prototype:

  CagdBType SymbNormal2ConesForSrf(const CagdSrfStruct *Srf,
                                   CagdRType ExpandingFactor,
                                   SymbNormalConeStruct *Cone1,
                                   SymbNormalConeStruct *Cone2)


Description:

Computes a 2cones bound to the normal field of surface Srf. The 2cones bound the normal field in the common intersection space. The 2cones are computed using the regular normal cone by expanding in the direction orthogonal to the cone axis and its main principal component. The expansion is done an amount that is equal to regular cone radius times ExpandingFactor.

Parameters:

Srf: To compute the normal 2cones for.
ExpandingFactor: actor to expand placement of 2cones axes locations.
Cone1, Cone2: The two cones to compute or ConeAngle == M_PI if error.


Returned Value:

CagdBType: TRUE if successful, FALSE otherwise.


See Also:

SymbNormalConeForSrf SymbNormalConeOverlap SymbTangentConeForCrv

Keywords:

normals normal bound


SymbNormalConeForSrfAvgToData

(nrmlcone.c:284)

Prototype:

  const SymbNormalConeStruct *SymbNormalConeForSrfAvgToData(const CagdSrfStruct
                                                                           *Srf,
                                                            SymbNormalConeStruct
                                                                    *NormalCone)


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.
NormalCone: The computed normal cone, or NULL if failed.


Returned Value:

const SymbNormalConeStruct *: The computed normal cone, or NULL if failed.


See Also:

SymbNormalConeForSrfOpt SymbNormalConeOverlap SymbTangentConeForCrv SymbNormalConeForSrfDoOptimal SymbNormalConeForSrf

Keywords:

normals normal bound


SymbNormalConeForSrfDoOptimal

(nrmlcone.c:210)

Prototype:

  int SymbNormalConeForSrfDoOptimal(int Optimal)


Description:

Sets whether to use an optimal (but slower) algorithm to compue bounding cones for normals or use a simple vector averaging that is faster.

Parameters:

Optimal: New setting.


Returned Value:

int: Previous setting.


See Also:

SymbNormalConeForSrfAvg SymbNormalConeForSrfOpt

Keywords:




SymbNormalConeForSrfMainAxisToData

(nrmlcone.c:462)

Prototype:

  const SymbNormalConeStruct *SymbNormalConeForSrfMainAxisToData(
                                                    const CagdSrfStruct *Srf,
                                                    CagdVType MainAxis,
                                                    SymbNormalConeStruct *Cone)


Description:

Same as SymbNormalConeForSrf but also estimates a main axis (principal component) for the cone A normal field is searched for as "_NormalSrf" attribute in Srf or computed locally of no such attribute is found.

Parameters:

Srf: To compute normal cone and main axis of normal cone for.
MainAxis: Main axis (principal component) of the normal cone's vectors distribution.
Cone: The computed normal cone, or NULL if failed.


Returned Value:

const SymbNormalConeStruct *: The computed normal cone, or NULL if failed.


See Also:

SymbNormalConeForSrf SymbNormalConeOverlap SymbTangentConeForCrv

Keywords:

normals normal bound


SymbNormalConeForSrfOptToData

(nrmlcone.c:380)

Prototype:

  const SymbNormalConeStruct *SymbNormalConeForSrfOptToData(const CagdSrfStruct
                                                                           *Srf,
                                                            SymbNormalConeStruct
                                                                    *NormalCone)


Description:

Computes the optimal normal cone for a given surface, using linear prog,

Parameters:

Srf: To compute a normal cone for.
NormalCone: The computed normal cone, or NULL if failed.


Returned Value:

const SymbNormalConeStruct *: The computed normal cone, or NULL if failed.


See Also:

SymbNormalConeForSrfAvg GMMinSpanCone SymbNormalConeForSrfDoOptimal SymbNormalConeForSrf

Keywords:

normals normal bound


SymbNormalConeForSrfToData

(nrmlcone.c:249)

Prototype:

  const SymbNormalConeStruct *SymbNormalConeForSrfToData(const CagdSrfStruct
                                                                          *Srf,
                                                         SymbNormalConeStruct
                                                                   *NormalCone)


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.
NormalCone: The computed normal cone, or NULL if failed.


Returned Value:

const SymbNormalConeStruct *: The computed normal cone, or NULL if failed.


See Also:

SymbNormalConeForSrfOpt SymbNormalConeForSrfAvg SymbTangentConeForCrv SymbNormalConeForSrfDoOptimal

Keywords:

normals normal bound


SymbNormalConeOverlap

(nrmlcone.c:618)

Prototype:

  CagdBType SymbNormalConeOverlap(const SymbNormalConeStruct *NormalCone1,
                                  const 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


SymbNormalConvexHullConeForSrf

(nrmlcone.c:649)

Prototype:

  SymbNormalConeStruct *SymbNormalConvexHullConeForSrf(const CagdSrfStruct *Srf,
                                                       CagdRType ***CH,
                                                       int *NPts)


Description:

Computes the convex conical hull of the normal field of surface Srf. The result is returned as an array of subset of vectors from the field.

Parameters:

Srf: To compute the conical hull for.
CH: The vectors of the convex conical hull to compute. CH[i][j] is the i'th coordinate of the j'th vector.
NPts: Contain the number of vectors in CH.


Returned Value:

SymbNormalConeStruct *: A circular normal cone as a by product.


See Also:

SymbNormalConvexHullConeOverlap

Keywords:




SymbNormalConvexHullConeOverlap

(nrmlcone.c:799)

Prototype:

  CagdBType SymbNormalConvexHullConeOverlap(const SymbNormalConeStruct
                                                                  *NormalCone1,
                                            const CagdRType **CH1,
                                            int NPts1,
                                            const SymbNormalConeStruct
                                                                  *NormalCone2,
                                            const CagdRType **CH2,
                                            int NPts2)


Description:

Tests if the given two convex conical hulls overlap or not.

Parameters:

NormalCone1: he normal cone of the first surface.
CH1: The convex conical hull of the first surface.
NPts1: Number of points in the convex conical of the first surface.
NormalCone2: he normal cone of the second surface.
CH2: The convexc onical hull of the second surface.
NPts2: Number of point in the convex conical of the second surface.


Returned Value:

CagdBType: TRUE if overlap, FALSE otherwise.


See Also:

SymbNormalConvexHullConeForSrf

Keywords:




SymbOrthoNetSrf

(symb_ortho.c:51)

Prototype:

  CagdSrfStruct *SymbOrthoNetSrf(const CagdCrvStruct *Crv1,
                                 const CagdCrvStruct *Crv2,
                                 int FrontSamples,
                                 int LayerSamples)


Description:

A function to fit a planar surface between the given two planar Bezier curves, sharing the same domain. so the U/V isoparametric curves of the surface are approximately orthogonal. In other words, the surface will be approximately conformal.

Parameters:

Crv1: 1st Bezier curve to fit a surface with an orthogonal network of isocurves through. Curve is assumed in XY plane.
Crv2: 2nd Bezier curve to fit a surface with an orthogonal network of isocurves through. Curve is assumed in XY plane.
FrontSamples: umber of samples to take along the curves, the higher the more accurate the result will be.
LayerSamples: umber of samples to take between the curves, the higher the more accurate the result will be.


Returned Value:

CagdSrfStruct *: A surface between Crv1 and Crv2 with approximately orthogonal network of U/V isoparametric curves. Returns NULL if error.


See Also:



Keywords:




SymbPiecewiseRuledSrfApprox

(prisa.c:128)

Prototype:

  CagdSrfStruct *SymbPiecewiseRuledSrfApprox(const CagdSrfStruct *CSrf,
                                             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:

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


See Also:

SymbAllPrisaSrfs SymbPrisaRuledSrf TrimAllPrisaSrfs

Keywords:

layout prisa ruled surface approximation


SymbPlaneLineBisect

(smp_skel.c:962)

Prototype:

  CagdSrfStruct *SymbPlaneLineBisect(const CagdVType LineDir, CagdRType Size)


Description:

Compute the bisector surface between the XY plane and a line emanating from the origin in direction V.

Parameters:

LineDir: irection of line from origin. Must be in northern hemisphere.
Size: Portion of result as it is infinite.


Returned Value:

CagdSrfStruct *: Constructed bisector surface.


See Also:

SymbPtCrvBisectOnSphere SymbPlanePointBisect SymbCylinPointBisect SymbConePointBisect SymbSpherePointBisect SymbTorusPointBisect SymbConeLineBisect SymbSphereLineBisect SymbConePlaneBisect SymbCylinPlaneBisect SymbSpherePlaneBisect SymbCylinSphereBisect SymbSphereSphereBisect SymbConeSphereBisect SymbTorusSphereBisect SymbTorusTorusBisect SymbConeConeBisect SymbConeConeBisect2 SymbConeCylinBisect SymbCylinCylinBisect

Keywords:

bisectors skeleton


SymbPlanePointBisect

(smp_skel.c:700)

Prototype:

  CagdSrfStruct *SymbPlanePointBisect(const CagdPType Pt, CagdRType Size)


Description:

Compute the bisector surface between the XY plane and a point.

Parameters:

Pt: Direction of line from origin.
Size: Portion of result as it is infinite.


Returned Value:

CagdSrfStruct *: Constructed bisector surface.


See Also:

SymbPtCrvBisectOnSphere SymbCylinPointBisect SymbConePointBisect SymbSpherePointBisect SymbTorusPointBisect SymbConePlaneBisect SymbCylinPlaneBisect SymbSpherePlaneBisect SymbConeLineBisect SymbSphereLineBisect SymbCylinSphereBisect SymbSphereSphereBisect SymbConeSphereBisect SymbTorusSphereBisect SymbConeConeBisect SymbConeConeBisect2 SymbConeCylinBisect SymbCylinCylinBisect SymbTorusTorusBisect

Keywords:

bisectors skeleton


SymbPrisaGetCrossSections

(prisa.c:503)

Prototype:

  CagdCrvStruct *SymbPrisaGetCrossSections(const CagdSrfStruct *RSrfs,
                                           CagdSrfDirType Dir,
                                           const CagdVType Space)


Description:

Given a list of n ruled surface in 3-space, extract their cross sections and return a list of n+1 cross sections. The given ruled surfaces are assumed to be a layout decomposition of a freeform surface using the function SymbPiecewiseRuledSrfApprox.

Parameters:

RSrfs: A list of ruled surfaces to extract cross sections from.
Dir: Ruling direction of ruled/developable surface approximation. Typically CAGD_CONST_U_DIR.
Space: Increment on Y on the offset vector, after this cross section was placed in the XY plane.


Returned Value:

CagdCrvStruct *: A list of cross sections. The cross sections will be in the XY plane the cross section is indeed planar or approximately in the XY plane otherwise.


See Also:

SymbPrisaRuledSrf SymbPiecewiseRuledSrfApprox SymbAllPrisaSrfs SymbPrisaGetOneCrossSection

Keywords:




SymbPrisaGetOneCrossSection

(prisa.c:585)

Prototype:

  CagdCrvStruct *SymbPrisaGetOneCrossSection(const CagdSrfStruct *RSrf,
                                             CagdSrfDirType Dir,
                                             CagdBType Starting,
                                             CagdBType Ending)


Description:

Given a ruled surface in 3-space, extract its starting/ending cross sections and return a list of one or two cross sections. The given ruled surface is assumed to be a layout decomposition of a freeform surface using the function SymbPiecewiseRuledSrfApprox.

Parameters:

RSrf: A ruled surface to extract cross section(s) from.
Dir: Ruling direction of ruled/developable surface approximation. Typically CAGD_CONST_U_DIR.
Starting: If TRUE, extracts the first cross section.
Ending: If TRUE, extracts the last cross section.


Returned Value:

CagdCrvStruct *: A list of one or two cross sections. The cross sections will be in the XY plane the cross section is indeed planar or approximately in the XY plane otherwise.


See Also:

SymbPrisaRuledSrf SymbPiecewiseRuledSrfApprox SymbAllPrisaSrfs SymbPrisaGetCrossSections

Keywords:




SymbPrisaRuledSrf

(prisa.c:359)

Prototype:

  CagdSrfStruct *SymbPrisaRuledSrf(const 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 consistent 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.


See Also:

SymbPiecewiseRuledSrfApprox SymbAllPrisaSrfs TrimAllPrisaSrfs

Keywords:

layout prisa


SymbPrmtSclrCrvTo2D

(symb_crv.c:1564)

Prototype:

  CagdCrvStruct *SymbPrmtSclrCrvTo2D(const 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_srf.c:1519)

Prototype:

  CagdSrfStruct *SymbPrmtSclrSrfTo3D(const 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: Surface to promote from one to three dimensions.
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 Y axis.


Returned Value:

CagdSrfStruct *: A three dimensional surface.


See Also:

SymbPrmtSclrCrvTo2D

Keywords:

promotion conversion symbolic computation


SymbPtCrvBisectOnSphere

(smp_skel.c:69)

Prototype:

  CagdCrvStruct *SymbPtCrvBisectOnSphere(const CagdPType Pt,
                                         const CagdCrvStruct *CCrv)


Description:

Computes the bisector curve on a sphere of a point and a curve, both assumed to be on the unit sphere The following assumption are made and must be met for proper answer: 1. Both the curve and the point are indeed on the unit sphere. 2. Both the curve and the point are on the northern hemisphere. That is the Z coefficients of all points on both Pt and Crv are positive. The end result is NOT a curve on the sphere but rather a rational curve in the Z = 1 plane whose central projection onto the sphere (i.e. normalization) would yield the proper bisector on the unit sphere. Let P be the bisector point. Then, the following must be satisified:
     < P, Pt > = < P, C(t) >   (Equality of angular distance)
     < P - C(t), C'(t) > = 0   (orthogonality of distance measure)
     < P, (0, 0, 1) > = 1      (containment in the Z = 1 plane, or Pz = 1)

Note we have only two unknowns (Px, Py) as Pz equals 1.

Parameters:

Pt: A point on the unit sphere, on the northern hemisphere.
CCrv: A curve on the unit sphere, on the northern hemisphere.


Returned Value:

CagdCrvStruct *: The bisector curve on Z = 1 plane to be centrally projected onto the unit sphere as the spherical bisector.


See Also:

SymbCrvCrvBisectOnSphere

Keywords:

bisectors skeleton


SymbPtCrvBisectOnSphere2

(smp_skel.c:188)

Prototype:

  CagdCrvStruct *SymbPtCrvBisectOnSphere2(const CagdPType Pt,
                                          const CagdCrvStruct *CCrv,
                                          CagdRType SubdivTol)


Description:

Computes the bisector on a sphere between a point and a curve on the sphere. The returned result is a piecewise linear curve on the sphere.

Parameters:

Pt: A point on the unit sphere, on the northern hemisphere.
CCrv: A curve on the unit sphere, on the northern hemisphere.
SubdivTol: Accuracy of piecewise linear approximation.


Returned Value:

CagdCrvStruct *: A piecewise linear curve approximating the bisector of Crv1 and Crv2 on the sphere.


See Also:

SymbPtCrvBisectOnSphere SymbCrvCrvBisectOnSphere

Keywords:

bisectors skeleton


SymbRflctCircFree

(rflct_ln.c:311)

Prototype:

  void SymbRflctCircFree(CagdSrfStruct *Srf)


Description:

Free the internal data sets, if any of the given surface, toward the computation of the reflection circles. as created by SymbRflctCircPrepSrf.

Parameters:

Srf: Surface to free its internal data sets saved as attributes.


Returned Value:

void


See Also:

SymbRflctCircPrepSrf SymbRflctCircGen

Keywords:




SymbRflctCircGen

(rflct_ln.c:272)

Prototype:

  CagdSrfStruct *SymbRflctCircGen(CagdSrfStruct *Srf,
                                  const CagdVType ViewDir,
                                  const CagdPType SprCntr,
                                  CagdRType ConeAngle)


Description:

Compute the reflection circles through a sphere centered at SprCntr off the given surface. The surface is assumed to have been preprocessed in SymbRflctCircPrepSrf for the requested preprocessed named attribute, or otherwise SymbRflctCircPrepSrf will be invoked on the fly.

Parameters:

Srf: Surface to preprocess.
ViewDir: Direction of view.
SprCntr: Center of sphere that reflection lines should be tangent to.
ConeAngle: Opening angle assumed for a cone holding the sphere with the apex of the cone at S(u, v), in degrees.


Returned Value:

CagdSrfStruct *: A scalar surface whose zero set is the reflection circles sought on Srf.


See Also:

SymbRflctCircPrepSrf SymbRflctCircFree

Keywords:




SymbRflctCircPrepSrf

(rflct_ln.c:208)

Prototype:

  void SymbRflctCircPrepSrf(CagdSrfStruct *Srf,
                            const CagdVType ViewDir,
                            const CagdPType SprCntr)


Description:

Precompute the necessary data set for as efficient as possible reflection circles' extractions. Data set is kept as an attribute on the surface.

Parameters:

Srf: Surface to preprocess.
ViewDir: Direction of view.
SprCntr: Center of sphere that reflection lines should be tangent to.


Returned Value:

void


See Also:

SymbRflctCircGen SymbRflctCircFree

Keywords:




SymbRflctLnFree

(rflct_ln.c:171)

Prototype:

  void SymbRflctLnFree(CagdSrfStruct *Srf)


Description:

Free the internal data sets, if any of the given surface, toward the computation of the reflection lines. as created by SymbRflctLnPrepSrf. m

Parameters:

Srf: Surface to free its internal data sets saved as attributes.


Returned Value:

void


See Also:

SymbRflctLnPrepSrf SymbRflctLnGen

Keywords:




SymbRflctLnGen

(rflct_ln.c:130)

Prototype:

  CagdSrfStruct *SymbRflctLnGen(CagdSrfStruct *Srf,
                                const CagdVType ViewDir,
                                const CagdPType LnPt,
                                const CagdVType LnDir)


Description:

Compute the reflection line through LnPt off the given surface. The surface is assumed to have been preprocessed in SymbRflctLnPrepSrf for the requested preprocessed named attribute, or otherwise SymbRflctLnPrepSrf will be invoked on the fly.

Parameters:

Srf: Surface to preprocess.
ViewDir: Direction of view.
LnPt: Point on a reflection line.
LnDir: Direction of reflection line.


Returned Value:

CagdSrfStruct *: A scalar surface whose zero set is the reflection line sought on Srf.


See Also:

SymbRflctLnPrepSrf SymbRflctLnFree

Keywords:




SymbRflctLnPrepSrf

(rflct_ln.c:87)

Prototype:

  void SymbRflctLnPrepSrf(CagdSrfStruct *Srf,
                          const CagdVType ViewDir,
                          const CagdVType LnDir)


Description:

Precompute the necessary data set for as efficient as possible reflection lines' extractions. Data set is kept as an attribute on the surface. Note that only the direction of the reflection line is employed at this time, and exact location will be required by SymbRflctLnGen only.

Parameters:

Srf: Surface to preprocess.
ViewDir: Direction of view.
LnDir: Direction of reflection line.


Returned Value:

void


See Also:

SymbRflctLnGen SymbRflctLnFree

Keywords:




SymbRingRingIntersection

(rrinter.c:876)

Prototype:

  CagdCrvStruct *SymbRingRingIntersection(CagdCrvStruct *C1,
                                          CagdCrvStruct *r1,
                                          CagdCrvStruct *C2,
                                          CagdCrvStruct *r2,
                                          CagdRType SubdivTol,
                                          CagdCrvStruct **PCrvs1,
                                          CagdCrvStruct **PCrvs2)


Description:

Computes the intersection curve of two ring surfaces:
       S1(u, t) = C1(u) + Circ1(t) r1(u)
       S2(v, s) = C2(v) + Circ2(s) r2(v)

where Circ1 and Circ2 are oriented to be in the normal plane of C1/C2. The intersection is derived from the zero set of the function that is computed by SymbRingRingZeroSetFunc.

Parameters:

C1, r1: The two curves prescribing the first ring surface. Must be integral curves.
C2, r2: The two curves prescribing the second ring surface. Must be integral curves.
SubdivTol: Accuracy of zero set computation as part of the solution. Value of 0.01 is a good start.
PCrvs1, PCrvs2: The parametric domains of the intersection curves, in the two surfaces.


Returned Value:

CagdCrvStruct *: Intersection curves in Euclidean space.


See Also:

SymbRingRingZeroSetFunc

Keywords:




SymbRingRingZeroSetFunc

(rrinter.c:1037)

Prototype:

  CagdSrfStruct *SymbRingRingZeroSetFunc(CagdCrvStruct *C1,
                                         CagdCrvStruct *r1,
                                         CagdCrvStruct *C2,
                                         CagdCrvStruct *r2)


Description:

Computes the intersection curve of two ring surfaces:
       S1(u, t) = C1(u) + Circ1(t) r1(u)
       S2(v, s) = C2(v) + Circ2(s) r2(v)

where Circ1 and Circ2 are oriented to be in the normal plane of C1/C2. Let n1(u) and n2(v) be the normals of the normal plane of C1/C2, n1(u) = C1'(u), n2(v) = C2'(v). Then, solve for x(u, v), y(u, v), z(u, v)
 |     n1(u)     | | x |     | < n1(u), C1(u) >                      |
 |               | |   |     |                                       |
 |     n2(v)     | | y |  =  | < n2(v), C2(v) >                      |
 |               | |   |     |                                       |
 | C1(u) - C2(v) | | z |     | ( < C1(u), C1(u) > - < C2(v), C2(v) > |
 |               | |   |     |             + r2^2(v) - r1^2(u) ) / 2 |

Lets P(u, v) = (x(u, v), y(u, v), z(u, v)). Find the zero set of F(u, v): < P(u, v) - C1(u), P(u, v) - C1(u) > - r1^2(u) = 0, or, alternatively, the zero set of, F(u, v): < P(u, v) - C2(v), P(u, v) - C2(v) > - r2^2(v) = 0.

Parameters:

C1, r1: The two curves prescribing the first ring surface. Must be integral curves.
C2, r2: The two curves prescribing the second ring surface. Must be integral curves.


Returned Value:

CagdSrfStruct *: F(u, v).


See Also:

SymbRingRingIntersection

Keywords:




SymbRmKntBspCrvCleanKnots

(bspkntrm.c:261)

Prototype:

  CagdCrvStruct *SymbRmKntBspCrvCleanKnots(const CagdCrvStruct *Crv)


Description:

Remove only knots which do not change the given curve.

Parameters:

Crv: Curve to remove knot from.


Returned Value:

CagdCrvStruct *: The new curve after removal.


See Also:

SymbRmKntBspCrvRemoveKnots SymbRmKntBspCrvRemoveKnotsError

Keywords:




SymbRmKntBspCrvRemoveKnots

(bspkntrm.c:216)

Prototype:

  CagdCrvStruct *SymbRmKntBspCrvRemoveKnots(const CagdCrvStruct *CCrv,
                                            CagdRType Tolerance)


Description:

Remove knots while Tolerance is kept.

Parameters:

CCrv: Curve to remove knots from.
Tolerance: Desired accuracy to be kept, in L-infinity norm.


Returned Value:

CagdCrvStruct *: The new curve after removal.


See Also:

SymbRmKntBspCrvCleanKnots

Keywords:




SymbRmKntBspSrfCleanKnots

(bspkntrm.c:489)

Prototype:

  CagdSrfStruct *SymbRmKntBspSrfCleanKnots(const CagdSrfStruct *Srf)


Description:

Remove only knots which do not change the given surface.

Parameters:

Srf: Surface to remove knot from.


Returned Value:

CagdSrfStruct *: The new surface after removal.


See Also:

SymbRmKntBspCrvRemoveKnots SymbRmKntBspCrvRemoveKnotsError SymbRmKntBspCrvCleanKnots

Keywords:




SymbRmKntBspSrfRemoveKnots

(bspkntrm.c:286)

Prototype:

  CagdSrfStruct *SymbRmKntBspSrfRemoveKnots(const CagdSrfStruct *CSrf,
                                            CagdRType Tolerance)


Description:

Remove knots while Tolerance is kept.

Parameters:

CSrf: Surface to remove knots from.
Tolerance: Desired accuracy to be kept, in L-infinity norm.


Returned Value:

CagdSrfStruct *: The new surface after removal.


See Also:

SymbRmKntBspCrvCleanKnots SymbRmKntBspCrvRemoveKnots ymbRmKntBspSrfRemoveKnotsDir SymbRmKntBspSrfCleanKnots

Keywords:




SymbRmKntBspSrfRemoveKnotsDir

(bspkntrm.c:319)

Prototype:

  CagdSrfStruct *SymbRmKntBspSrfRemoveKnotsDir(const CagdSrfStruct *CSrf,
                                               CagdSrfDirType Dir,
                                               CagdRType Tolerance)


Description:

Remove knots while Tolerance is kept.

Parameters:

CSrf: Surface to remove knots from.
Dir: Parametric direction of Srf to consider - row or column.
Tolerance: Desired accuracy to be kept, in L-infinity norm.


Returned Value:

CagdSrfStruct *: The new surface after removal.


See Also:

SymbRmKntBspCrvCleanKnots SymbRmKntBspCrvRemoveKnots

Keywords:




SymbRuledRuledIntersection

(rrinter.c:144)

Prototype:

  CagdCrvStruct *SymbRuledRuledIntersection(CagdCrvStruct *C1,
                                            CagdCrvStruct *C2,
                                            CagdCrvStruct *D1,
                                            CagdCrvStruct *D2,
                                            CagdRType SubdivTol,
                                            CagdCrvStruct **PCrvs1,
                                            CagdCrvStruct **PCrvs2)


Description:

Computes the intersection curve of two ruled surfaces:
       S1(u, t) = t C1(u) + (1-t) C2(u)
       S2(v, s) = s D1(v) + (1-s) D2(s)

Then S1(u, t) = S2(v, s) yields,
C1(u) - D1(v) = s (C1(u) - C2(u)) + t (D2(v) - D1(v))
                                                                           N

or solve for the zero set of the determinant of,
                 | C1(u) - D1(u) |
  Gamma(u, v) =  | C1(u) - C2(u) | = 0
                 | D1(v) - D2(v) |


Parameters:

C1, C2: The two curves forming the first ruled surface.
D1, D2: The two curves forming the second ruled surface.
SubdivTol: Accuracy of zero set computation as part of the solution. Value of 0.01 is a good start. If SubdivTol is negative the ruled surfaces are assumed infinite (and absolute value of SubdivTol is employed). Otherwise, the ruled surface is bound between C1 and C2 and between D1 and D2 respectively.
PCrvs1, PCrvs2: The parametric domains of the intersection curves, in the two surfaces.


Returned Value:

CagdCrvStruct *: Intersection curves in Euclidean space.


Keywords:




SymbRuledRuledZeroSetFunc

(rrinter.c:80)

Prototype:

  CagdSrfStruct *SymbRuledRuledZeroSetFunc(CagdCrvStruct *C1,
                                           CagdCrvStruct *C2,
                                           CagdCrvStruct *D1,
                                           CagdCrvStruct *D2)


Description:


Computes the intersection curve of two ruled surfaces:
       S1(u, t) = t C1(u) + (1-t) C2(u)
       S2(v, s) = s D1(v) + (1-s) D2(s)

Then S1(u, t) = S2(v, s) yields,
C1(u) - D1(v) = s (C1(u) - C2(u)) + t (D2(v) - D1(v))
                                                                           N

or solve for the zero set of the determinant of,
               | C1(u) - D1(u) |
 Gamma(u, v) = | C1(u) - C2(u) | = 0
               | D1(v) - D2(v) |


Parameters:

C1, C2: The two curves forming the first ruled surface.
D1, D2: The two curves forming the second ruled surface.


Returned Value:

CagdSrfStruct *: Gamma(u, v).


Keywords:




SymbRuledSelfIntersection

(rrinter.c:606)

Prototype:

  CagdCrvStruct *SymbRuledSelfIntersection(CagdCrvStruct *C1,
                                           CagdCrvStruct *C2,
                                           CagdRType SubdivTol,
                                           CagdCrvStruct **PCrvs1,
                                           CagdCrvStruct **PCrvs2)


Description:


Computes the self intersection curve of a ruled surfaces:

Parameters:

C1, C2: The two curves forming the ruled surface.
SubdivTol: Accuracy of zero set computation as part of the solution. Value of 0.01 is a good start. If SubdivTol is negative the ruled surfaces are assumed infinite (and absolute value of SubdivTol is employed). Otherwise, the ruled surface is bound between C1 and C2 and between D1 and D2 respectively.
PCrvs1, PCrvs2: The parametric domains of the intersection curves, in the two surfaces.


Returned Value:

CagdCrvStruct *: Intersection curves in Euclidean space.


Keywords:




SymbScalarCrvLowDegZeroSet

(symbzero.c:425)

Prototype:

  CagdPtStruct *SymbScalarCrvLowDegZeroSet(CagdCrvStruct *Crv)


Description:

Computes the zeros of low degree polynomial, analytically.

Parameters:

Crv: Low degree polynomial to derive its roots analytically.


Returned Value:

CagdPtStruct *: list of zeros.


Keywords:




SymbSetFatalErrorFunc

(symb_ftl.c:28)

Prototype:

  SymbSetErrorFuncType SymbSetFatalErrorFunc(SymbSetErrorFuncType ErrorFunc)


Description:

Sets the error function to be used by Symb_lib.

Parameters:

ErrorFunc: New error function to use.


Returned Value:

SymbSetErrorFuncType: Old error function reference.


Keywords:

error handling


SymbShapeBlendOnSrf

(blending.c:154)

Prototype:

  CagdSrfStruct *SymbShapeBlendOnSrf(CagdSrfStruct *Srf,
                                     CagdCrvStruct *UVCrv,
                                     const CagdCrvStruct *CrossSecShape,
                                     CagdRType TanScale,
                                     CagdRType Width,
                                     const CagdCrvStruct *WidthField,
                                     CagdRType Height,
                                     const CagdCrvStruct *HeightField)


Description:

Constructs a surface, C^1 tangent to given surface and has the prescribed cross section shape.

Parameters:

Srf: Surface to construct the blended shape on, with C^1 continuity.
UVCrv: The curve along which to blend the formed shae, in the parametric domain of the surface. Assumed to be in Srf.
CrossSecShape: The cross section of this blended shape.
TanScale: Scale factor of derived tangent fields.
Width: Of swept shape, in parametric space units.
WidthField: If not NULL, a scaling field to modulate the width of the constructed blended surface.
Height: Of swept shape, in Euclidean space units.
HeightField: If not NULL, a scaling field to modulate the height of the constructed blended surface.


Returned Value:

CagdSrfStruct *: A newly form swept shape with CrossSecShape as approximated cross section, along UVCrv.


See Also:

SymbShapeBlendSrf

Keywords:




SymbShapeBlendSrf

(blending.c:302)

Prototype:

  CagdSrfStruct *SymbShapeBlendSrf(const CagdCrvStruct *Pos1Crv,
                                   const CagdCrvStruct *Pos2Crv,
                                   const CagdCrvStruct *CDir1Crv,
                                   const CagdCrvStruct *CDir2Crv,
                                   const CagdCrvStruct *CrossSecShape,
                                   const CagdCrvStruct *Normal)


Description:

Construct a surface that interpolates Pos1Crv and Pos2Crv so that the surface is tangent to Dir1Crv and Dir2Crv there. CrossSecShape is a blending shaping curve that must satisfy the following (CrossSecShape is C(t), t in [0, 1]): C(0) = (-1, 0), C(1) = (1,0), C'(0) = (0, 0), C'(1) = (0, 0).

Parameters:

Pos1Crv, Pos2Crv: Starting and end curves of surface.
CDir1Crv, CDir2Crv: Starting and end tangent fields surface.
CrossSecShape: The shape of the cross section of the blend.
Normal: A unit vector field orthogonal to Pos1Crv - Pos2Crv.


Returned Value:

CagdSrfStruct *: The blended surface. This surface will equal to - Let S(t) = ( Pos1Crv(t) + Pos2Crv(t) ) / 2 Let D(t) = ( Pos2Crv(t) - Pos1Crv(t) ) / 2 Then S(t, r) = H01(r) * Dir1Crv(t) + H11(r) * Dir2Crv(t) + S(t) + D(t) * CrossSecShape_x(r) Normal(t) * CrossSecShape_y(r) where H are the cubic Hermite functions for the two tangent fields.


See Also:

CagdCubicHermiteSrf SymbShapeBlendOnSrf

Keywords:

Hermite


SymbSignedCrvtrGenCrv

(crvtrrec.c:137)

Prototype:

  CagdCrvStruct *SymbSignedCrvtrGenCrv(const CagdCrvStruct *Crvtr,
                                       CagdRType Tol,
                                       int Order,
                                       CagdBType Periodic)


Description:

Reconstructs a planar curve from the given arc-length curvature signature. The reconstruction is conducted as follows:
1. Tetha(s) = Integral(Crvtr(s)), the angular changes as function of s.
2. T(s) = Circ(Tetha(s)), the tangent field of the reconstructed curve.
3. C(s) = Integral(T(s)), the final curve.


Parameters:

Crvtr: The signed curvature signature to reconstruct. Assumed to be a piecewise polynomial arc-length function.
Tol: Tolerance of approximations (arclen/subdivision) of curves.
Order: Order of output, approximated curve. At least quadratic.
Periodic: If TRUE, teh recostructed curve is periodic so shift the result to be closed.


Returned Value:

CagdCrvStruct *: Reconstructed planar curve, in the XY plane. This result is invariant to rotations and translations.


See Also:

SymbCrvGenSignedCrvtr

Keywords:




SymbSphereLineBisect

(smp_skel.c:1103)

Prototype:

  CagdSrfStruct *SymbSphereLineBisect(const CagdPType SprCntr,
                                      CagdRType SprRad,
                                      CagdRType Size)


Description:


Compute the bisector surface between a sphere and a line. The computation is reduced to that of a bisector between a point and a cylinder, that has a rational form. The line is assumed to be the Z axis.

Parameters:

SprCntr: Center location of the sphere.
SprRad: Radius of sphere.
Size: Portion of result as it is infinite.


Returned Value:

CagdSrfStruct *: Constructed bisector surface.


See Also:

SymbPlanePointBisect SymbCylinPointBisect SymbConePointBisect SymbSpherePointBisect SymbTorusPointBisect SymbConeLineBisect SymbPlaneLineBisect SymbConePlaneBisect SymbCylinPlaneBisect SymbSpherePlaneBisect SymbCylinSphereBisect SymbSphereSphereBisect SymbConeSphereBisect SymbTorusSphereBisect SymbTorusTorusBisect SymbConeConeBisect SymbConeConeBisect2 SymbConeCylinBisect SymbCylinCylinBisect

Keywords:

bisectors skeleton


SymbSpherePlaneBisect

(smp_skel.c:1152)

Prototype:

  CagdSrfStruct *SymbSpherePlaneBisect(const CagdPType SprCntr,
                                       CagdRType SprRad,
                                       CagdRType Size)


Description:

Compute the bisector surface between a sphere and the XY plane. The computation is reduced to that of a bisector between a point and a plane, that has a rational form. Only the portion for which Z > 0 should be considered in the output.

Parameters:

SprCntr: Center location of the sphere. Must be in northern hemisphere (positive Z coefficient).
SprRad: Radius of sphere.
Size: Portion of result as it is infinite.


Returned Value:

CagdSrfStruct *: Constructed bisector surface.


See Also:

SymbPlanePointBisect SymbCylinPointBisect SymbConePointBisect SymbSpherePointBisect SymbTorusPointBisect SymbConeLineBisect SymbSphereLineBisect SymbPlaneLineBisect SymbConePlaneBisect SymbCylinPlaneBisect SymbCylinSphereBisect SymbSphereSphereBisect SymbConeSphereBisect SymbTorusSphereBisect SymbTorusTorusBisect SymbConeConeBisect SymbConeConeBisect2 SymbConeCylinBisect SymbCylinCylinBisect

Keywords:

bisectors skeleton


SymbSpherePointBisect

(smp_skel.c:859)

Prototype:

  CagdSrfStruct *SymbSpherePointBisect(const CagdPType SprCntr,
                                       CagdRType SprRad,
                                       const CagdPType Pt)


Description:

Compute the bisector surface between a sphere and a point.

Parameters:

SprCntr: enter location of the sphere.
SprRad: Radius of sphere.
Pt: Direction of line from origin.


Returned Value:

CagdSrfStruct *: Constructed bisector surface.


See Also:

SymbPtCrvBisectOnSphere SymbPlanePointBisect SymbCylinPointBisect SymbConePointBisect SymbTorusPointBisect SymbConePlaneBisect SymbCylinPlaneBisect SymbSpherePlaneBisect SymbConeLineBisect SymbSphereLineBisect SymbCylinSphereBisect SymbSphereSphereBisect SymbConeSphereBisect SymbTorusSphereBisect SymbTorusTorusBisect SymbConeConeBisect2 SymbConeCylinBisect SymbCylinCylinBisect

Keywords:

bisectors skeleton


SymbSphereSphereBisect

(smp_skel.c:1364)

Prototype:

  CagdSrfStruct *SymbSphereSphereBisect(const CagdVType SprCntr1,
                                        CagdRType SprRad1,
                                        const CagdVType SprCntr2,
                                        CagdRType SprRad2)


Description:

Compute the bisector surface between wto spheres. The computation is reduced to that of a bisector between a point and a sphere, that has a rational form.

Parameters:

SprCntr1: Center location of the first sphere.
SprRad1: Radius of first sphere.
SprCntr2: Center location of the second sphere.
SprRad2: Radius of second sphere.


Returned Value:

CagdSrfStruct *: Constructed bisector surface.


See Also:

SymbPlanePointBisect SymbCylinPointBisect SymbConePointBisect SymbSpherePointBisect SymbTorusPointBisect SymbConeLineBisect SymbSphereLineBisect SymbPlaneLineBisect SymbCylinPlaneBisect SymbConePlaneBisect SymbSpherePlaneBisect SymbCylinSphereBisect SymbConeSphereBisect SymbTorusSphereBisect SymbConeConeBisect SymbConeConeBisect2 SymbConeCylinBisect SymbCylinCylinBisect

Keywords:

bisectors skeleton


SymbSplitCrvsAtExtremums

(crv_lenv.c:93)

Prototype:

  CagdCrvStruct *SymbSplitCrvsAtExtremums(const CagdCrvStruct *CCrvs,
                                          int Axis,
                                          const CagdPType Pt,
                                          CagdRType Eps)


Description:

Split the given list of curves at the extremum values of each curve, if any.

Parameters:

CCrvs: Input list of curves to split at all extremum values the curves assumes.
Axis: Extremum to consider: 0 - Radials silhouette as viewed from Pt. 1,2 - Look for extremum (silhouette) in X,Y dir.
Pt: If radial silhouette are sought, use this as Eye location.
Eps: Tolerance of computations.


Returned Value:

CagdCrvStruct *: List of splitted curves.


See Also:



Keywords:




SymbSplitRationalCrvsPoles

(symbzero.c:550)

Prototype:

  CagdPtStruct *SymbSplitRationalCrvsPoles(const CagdCrvStruct *Crv,
                                           CagdRType Epsilon)


Description:

Computes the poles of a rational surface, solving for the zeros of the surface's denominator.

Parameters:

Crv: Rational curves to extract its poles.
Epsilon: The numerical tolerance to use.


Returned Value:

CagdPtStruct *: The poles, as piecewise linear approximations.


See Also:

CagdPointsHasPoles MvarRationalCrvsPoles

Keywords:




SymbSrf2Curves

(symbpoly.c:208)

Prototype:

  CagdCrvStruct *SymbSrf2Curves(const 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 CagdSrf2Curves

Keywords:

curves isoparametric curves


SymbSrf2Polygons

(symbpoly.c:72)

Prototype:

  IPPolygonStruct *SymbSrf2Polygons(const 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 IPPolygonStruct.

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:

IPPolygonStruct *: 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

(symbpoly.c:138)

Prototype:

  CagdPolylineStruct *SymbSrf2Polylines(const 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_srf.c:38)

Prototype:

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


Description:

Given two surfaces - add them coordinate-wise. 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 coordinate-wise.


Returned Value:

CagdSrfStruct *: The summation of Srf1 + Srf2 coordinate-wise.


See Also:

SymbSrfSub SymbMeshAddSub SymbSrfMult

Keywords:

addition symbolic computation


SymbSrfCalcAsympDirsCoeffs

(crvtr_bnds.c:548)

Prototype:

  int SymbSrfCalcAsympDirsCoeffs(const CagdSrfStruct *SffMatrix[3],
                                 IrtRType *AsympLimits,
                                 SymbSrfAsympBoundsMethod *ChosenMethod)


Description:

Finds the maximal and minimal bounds of the asymptotic directions of a surface, as coefficients of dS/du and dS/dv. The function finds the best method for computation out of the following three: [1 b] II [1 b]^2, [a 1] II [a 1]^T, and [t 1-t] II [t 1-t]^T, where II is the second fundamental form matrix. The function is chosen by a heuristic which makes sure the computation does not involve dividing by zero, and prefers a more stable division. The chosen computation method is returned as an output parameter.

Parameters:

SffMatrix: The second fundamental form matrix of the surface, as an array of the form - (L, M, N).
AsympLimits: Output parameter - the asymptotic directions coefficients.
ChosenMethod: Output parameter - the chosen computation method.


Returned Value:

int: The number of asymptotic directions found, or -1, if failed.


See Also:



Keywords:




SymbSrfCloseParallelSrfs2Shell

(offset.c:714)

Prototype:

  CagdSrfStruct *SymbSrfCloseParallelSrfs2Shell(const CagdSrfStruct *Srf1,
                                                const CagdSrfStruct *Srf2)


Description:

Given two parallel surfaces (a surface and its offsets or two offsets of some surface, etc.) builds the (up to) four ruled surfaces that fills in the gaps on the Umin/max, Vmin/max boundaries. Note that if UMin == UMax (VMin == VMax) no new surfaces will be added.

Parameters:

Srf1, Srf2: The two surfaces to fill in their gaps between their boundaries by new (ruled) surfaces.


Returned Value:

CagdSrfStruct *: Upto four surfaces that fill in the gaps between the boundaries of Srf1 and Srf2.


Keywords:




SymbSrfCrossProd

(symb_srf.c:584)

Prototype:

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


Description:

Given two surfaces - computes their cross product in R3. Returned surface is a surface representing the cross product of the two given surfaces.

Parameters:

Srf1, Srf2: wo surface to multiply in R3 and compute cross product for.


Returned Value:

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


See Also:

SymbSrfDotProd SymbSrfVecDotProd SymbSrfScalarScale SymbSrfMultScalar SymbSrfInvert SymbSrfVecCrossProd

Keywords:

product cross product symbolic computation


SymbSrfCrvtrBndsCalcBnds

(crvtr_bnds.c:300)

Prototype:

  void SymbSrfCrvtrBndsCalcBnds(const SymbSrfCrvtrBndsInfoStructPtr Info,
                                IrtRType *K1Limits,
                                IrtRType *K2Limits)


Description:

Calculate curvature limits for a given surface.

Parameters:

Info: The SymbSrfCrvtrBndsInfoStruct.
K1Limits: Minimal and maximal K1 values (array of size 2).
K2Limits: Minimal and maximal K2 values (array of size 2).


Returned Value:

void


See Also:

SymbSrfCurvatureUpperBound SymbSrfCurvatureUpperBound SymbSrfCrvtrBndsCalcBnds2

Keywords:




SymbSrfCrvtrBndsCalcBnds2

(crvtr_bnds.c:410)

Prototype:

  void SymbSrfCrvtrBndsCalcBnds2(const SymbSrfCrvtrBndsInfoStructPtr Info,
                                 int Count,
                                 IrtRType ValMin,
                                 IrtRType ValMax,
                                 IrtRType ValRes,
                                 IrtRType *K1Limits,
                                 IrtRType *K2Limits)


Description:

Calculate curvature limits for a given surface, with given accuracy requirements. If the accuracy is not met bounds will be calculated recursively for subdivisions of the original surface. Required accuracy is defined by ValRes as the difference between the maximal and minimal curvature values. Required accuracy is only tested in the curvature range overlaps the range given by ValMin, ValMax.

Parameters:

Info: The SymbSrfCrvtrBndsInfoStruct.
Count: Maximal number of recursion calls.
ValMin: Lower end of relevant curvature range.
ValMax: Upper end of relevant curvature range.
ValRes: Required gap between minimal and maximal value for K1, K2.
K1Limits: inimal and maximal K1 values (array of size 2).
K2Limits: inimal and maximal K2 values (array of size 2).


Returned Value:

void


See Also:

SymbSrfCurvatureUpperBound SymbSrfCurvatureUpperBound SymbSrfCrvtrBndsCalcBnds2

Keywords:




SymbSrfCrvtrBndsInfoClear

(crvtr_bnds.c:488)

Prototype:

  void SymbSrfCrvtrBndsInfoClear(SymbSrfCrvtrBndsInfoStruct *Info)


Description:

Clears a given SymbSrfCrvtrBndsInfoStruct (frees internal data).

Parameters:

Info: The SymbSrfCrvtrBndsInfoStruct.


Returned Value:

void


See Also:



Keywords:




SymbSrfCrvtrBndsInfoCreate

(crvtr_bnds.c:156)

Prototype:

  SymbSrfCrvtrBndsInfoStruct *SymbSrfCrvtrBndsInfoCreate(const CagdSrfStruct
                                                                          *Srf)


Description:

Creates the information needed for normal curvature limits (bounds) calculations on the given surface.

Parameters:

Srf: The surface.


Returned Value:

SymbSrfCrvtrBndsInfoStruct *: The handle for normal curvature bound functions.


See Also:



Keywords:




SymbSrfCrvtrBndsInfoFree

(crvtr_bnds.c:514)

Prototype:

  void SymbSrfCrvtrBndsInfoFree(SymbSrfCrvtrBndsInfoStruct *Info)


Description:

Frees a given SymbSrfCrvtrBndsInfoStruct.

Parameters:

Info: The SymbSrfCrvtrBndsInfoStruct.


Returned Value:

void


See Also:



Keywords:




SymbSrfCrvtrBndsSplitInfo

(crvtr_bnds.c:211)

Prototype:

  void SymbSrfCrvtrBndsSplitInfo(const SymbSrfCrvtrBndsInfoStructPtr Info,
                                 SymbSrfCrvtrBndsInfoStructPtr Ret,
                                 CagdSrfDirType Dir)


Description:

Splits a SymbSrfCrvtrBndsInfoStruct along the given parameter direction.

Parameters:

Info: The SymbSrfCrvtrBndsInfoStruct.
Ret: The two resulting SymbSrfCrvtrBndsInfoStruct (array size 2).
Dir: The splitting direction.


Returned Value:

void


See Also:



Keywords:




SymbSrfCrvtrBndsSubInfo

(crvtr_bnds.c:262)

Prototype:

  SymbSrfCrvtrBndsInfoStructPtr SymbSrfCrvtrBndsSubInfo(
                                        const SymbSrfCrvtrBndsInfoStructPtr Info,
                                        IrtRType UMin,
                                        IrtRType UMax,
                                        IrtRType VMin,
                                        IrtRType VMax)


Description:

Gets SymbSrfCrvtrBndsInfoStruct for a subsurface of the original surface.

Parameters:

Info: The SymbSrfCrvtrBndsInfoStruct.
UMin: Minimal U value.
UMax: Maximal U value.
VMin: Minimal V value.
VMax: Maximal V value.


Returned Value:

SymbSrfCrvtrBndsInfoStructPtr: The information for the subsurface.


See Also:



Keywords:




SymbSrfCurvatureUpperBound

(curvatur.c:1439)

Prototype:

  CagdSrfStruct *SymbSrfCurvatureUpperBound(const 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 SymbSrfMeanNumer SymbSrfIsoFocalSrf SymbSrfIsoDirNormalCurvatureBound SymbSrfCrvtrBndsCalcBnds SymbSrfCrvtrBndsCalcBnds2

Keywords:

curvature


SymbSrfDeriveRational

(symb_srf.c:851)

Prototype:

  CagdSrfStruct *SymbSrfDeriveRational(const CagdSrfStruct *Srf,
                                       CagdSrfDirType Dir)


Description:

Given a rational surface - computes its derivative surface in Dir, using the quotient rule for differentiation.

Parameters:

Srf: A surface to differentiate.
Dir: Direction of differentiation.


Returned Value:

CagdSrfStruct *: Differentiated rational surface.


See Also:

BzrSrfDerive BspSrfDerive CagdSrfDerive SymbCrvDeriveRational

Keywords:

derivatives


SymbSrfDeterminant2

(curvatur.c:971)

Prototype:

  CagdSrfStruct *SymbSrfDeterminant2(const CagdSrfStruct *Srf11,
                                     const CagdSrfStruct *Srf12,
                                     const CagdSrfStruct *Srf21,
                                     const 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

(crv_skel.c:983)

Prototype:

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


Description:

Computes the expression of a 3 by 3 determinants.

Parameters:

Srf11, Srf12, Srf13: The nine factors of the determinant.
Srf21, Srf22, Srf23: "
Srf31, Srf32, Srf33: "


Returned Value:

CagdSrfStruct *: A scalar field representing the determinant computation.


See Also:

SymbSrfFff SymbSrfSff SymbSrfGaussCurvature SymbSrfMeanEvolute SymbSrfMeanCurvatureSqr SymbSrfIsoFocalSrf SymbSrfCurvatureUpperBound SymbSrfIsoDirNormalCurvatureBound SymbSrfDeterminant2 SymbCrvDeterminant3

Keywords:

determinant


SymbSrfDevelopableCrvOnSrf

(dvlp_srf.c:59)

Prototype:

  CagdSrfStruct *SymbSrfDevelopableCrvOnSrf(const CagdSrfStruct *Srf,
                                            const CagdCrvStruct *Crv,
                                            IrtRType Scale)


Description:

Computes the developable surface of the swept tangent plane of surface, S, along a curve on the surface C. Let N be the normal field of S. Then:
  D(r, t) = C(t) + r N(t) x N'(t).


Parameters:

Srf: The surface Crv is on.
Crv: The curve in the parametric domain of Srf.
Scale: scaling factor of the r (developing) parameter.


Returned Value:

CagdSrfStruct *: The computed developable sheet.


See Also:

SymbSrfNormalSrf

Keywords:




SymbSrfDevelopableSrfBetweenFrames

(dvlp_srf.c:129)

Prototype:

  CagdSrfStruct *SymbSrfDevelopableSrfBetweenFrames(const CagdVType Frame1Pos,
                                                    const CagdVType Frame1Tan,
                                                    const CagdVType Frame1Nrml,
                                                    const CagdVType Frame2Pos,
                                                    const CagdVType Frame2Tan,
                                                    const CagdVType Frame2Nrml,
                                                    CagdRType OtherScale,
                                                    CagdRType Tension)


Description:


Computes a developable surface between given two orientation frames. Solution is simply by building a ruled surface with the desired shape between the two frames only to extract the developable surface between the frame, using SymbSrfDevelopableCrvOnSrf.

Parameters:

Frame1Pos: Position of initial location.
Frame1Tan: Tangent of initial location.
Frame1Nrml: ormal of initial location (sets the boundary at init.).
Frame2Pos: osition of terminal location.
Frame2Tan: Tangent of terminal location.
Frame2Nrml: ormal of terminal location (sets the boundary at init.).
OtherScale: ther direction scale of constructed developable surface.
Tension: Controls the tension of the result. A positive value.


Returned Value:

CagdSrfStruct *: The constructed surface.


See Also:

SymbSrfDevelopableCrvOnSrf SymbSrfDevelopableSrfBetweenFrames2

Keywords:




SymbSrfDevelopableSrfBetweenFrames2

(dvlp_srf.c:306)

Prototype:

  CagdSrfStruct *SymbSrfDevelopableSrfBetweenFrames2(const CagdVType Frame1Pos,
                                                     const CagdVType Frame1Tan,
                                                     const CagdVType Frame1Nrml,
                                                     const CagdVType Frame2Pos,
                                                     const CagdVType Frame2Tan,
                                                     const CagdVType Frame2Nrml,
                                                     CagdRType OtherScale,
                                                     CagdRType Tension,
                                                     int DOFs)


Description:

Computes an approximated developable surface between given two orientation frames. Solution is based on building a curve with fixed Frenet frames at the end locations as prescribed and minimizing the torsion in the curve. This curve is then used to build an approximated developable sheet with a ruling along N, its normal.

Parameters:

Frame1Pos: Position of initial location.
Frame1Tan: Tangent of initial location.
Frame1Nrml: ormal of initial location (sets the boundary at init.).
Frame2Pos: Position of terminal location.
Frame2Tan: Tangent of terminal location.
Frame2Nrml: ormal of terminal location (sets the boundary at init.).
OtherScale: ther direction scale of constructed developable surface.
Tension: Controls the tension of the result. A positive value.
DOFs: Number of degrees of freedoms (control points to add to the base curve, that is Bezier (using refinement).


Returned Value:

CagdSrfStruct *: The constructed surface.


See Also:

SymbSrfDevelopableCrvOnSrf SymbSrfDevelopableSrfBetweenFrames

Keywords:




SymbSrfDistCrvCrv

(distance.c:649)

Prototype:

  CagdSrfStruct *SymbSrfDistCrvCrv(const CagdCrvStruct *Crv1,
                                   const CagdCrvStruct *Crv2,
                                   int DistType)


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.
DistType: 0 for distance vector function, 1 for distance square scalar function, 2 for distance vector projected on the normal of Crv1, 3 for distance vector projected on the normal of Crv2. 4 for distance vector projected on the tangent of Crv1. 5 for distance vector projected on the tangent of Crv2. In cases 2 to 5 the vector field is not normalized.


Returned Value:

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


See Also:

SymbCrvCrvInter SymbSrfDistFindPoints MvarCrvCrvMinimalDist

Keywords:

curve curve distance


SymbSrfDistFindPoints

(distance.c:758)

Prototype:

  CagdPtStruct *SymbSrfDistFindPoints(const CagdSrfStruct *CSrf,
                                      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:

CSrf: 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_srf.c:461)

Prototype:

  CagdSrfStruct *SymbSrfDotProd(const CagdSrfStruct *Srf1,
                                const 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 SymbSrfVecCrossProd

Keywords:

product dot product symbolic computation


SymbSrfDual

(duality.c:126)

Prototype:

  CagdSrfStruct *SymbSrfDual(const CagdSrfStruct *Srf)


Description:

Computes the dual of the given syrface. The dual curve is a mapping of the tangent planes of Srf (for which Srf is the envelop of) to points in the dual space. Duality is derived by computing the tangent plane "Ax + By + Cz + D = 0" to surface Srf and mapping this plane to homogeneous point (A/D, B/D, C/D).

Parameters:

Srf: The surface to compute its dual.


Returned Value:

CagdSrfStruct *: The dual surface.


See Also:

SymbCrvDual

Keywords:




SymbSrfFff

(curvatur.c:802)

Prototype:

  void SymbSrfFff(const 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 SymbSrfTff SymbSrfDeterminant2 SymbSrfGaussCurvature SymbSrfMeanEvolute SymbSrfMeanCurvatureSqr SymbSrfIsoFocalSrf SymbSrfCurvatureUpperBound SymbSrfIsoDirNormalCurvatureBound

Keywords:

first fundamental form


SymbSrfFirstMoment

(moments.c:298)

Prototype:

  CagdRType SymbSrfFirstMoment(const CagdSrfStruct *Srf, int Axis)


Description:

Computes the first moment of the given surface. The computed moment is for the (signed) volume between the surface and its projection onto the XY plane.

Parameters:

Srf: Surface to compute the first moment for.
Axis: 1 for X, 2 for Y, 3 for Z.


Returned Value:

CagdRType: The computed moment.


See Also:

SymbSrfFirstMomentSrf SymbSrfFirstMomentSrf SymbSrfVolume

Keywords:




SymbSrfFirstMomentSrf

(moments.c:231)

Prototype:

  CagdSrfStruct *SymbSrfFirstMomentSrf(const CagdSrfStruct *Srf,
                                       int Axis,
                                       CagdBType Integrate)


Description:

Computes the first moment function of the given surface. The computed moment is for the (signed) volume between the surface and its projection onto the XY plane.

Parameters:

Srf: Surface to compute the first moment for.
Axis: 1 for X, 2 for Y, 3 for Z.
Integrate: TRUE to also integrate the resulting surface.


Returned Value:

CagdSrfStruct *: The computed moment function.


See Also:

SymbSrfFirstMoment SymbSrfFirstMomentSrf SymbSrfVolume

Keywords:




SymbSrfGaussCurvature

(curvatur.c:1003)

Prototype:

  CagdSrfStruct *SymbSrfGaussCurvature(const CagdSrfStruct *Srf,
                                       CagdBType NumerOnly)


Description:

Computes the Gaussian curvature of a given surface.

Parameters:

Srf: Surface to compute Gaussian curvature for.
NumerOnly: f TRUE, only the numerator component of K is returned.


Returned Value:

CagdSrfStruct *: A surface representing the Gaussian curvature field.


See Also:

SymbSrfFff SymbSrfSff SymbSrfDeterminant2 SymbSrfMeanEvolute SymbSrfMeanCurvatureSqr SymbSrfIsoFocalSrf SymbSrfCurvatureUpperBound SymbSrfIsoDirNormalCurvatureBound

Keywords:

curvature


SymbSrfInvert

(symb_srf.c:284)

Prototype:

  CagdSrfStruct *SymbSrfInvert(const 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 equal to the reciprocal value of Srf.


See Also:

SymbSrfDotProd SymbSrfVecDotProd SymbSrfScalarScale SymbSrfMultScalar SymbSrfMult SymbSrfCrossProd

Keywords:

division symbolic computation reciprocal value


SymbSrfIsoDirNormalCurvatureBound

(curvatur.c:1523)

Prototype:

  CagdSrfStruct *SymbSrfIsoDirNormalCurvatureBound(const 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 SymbSrfMeanNumer SymbSrfIsoFocalSrf SymbSrfCurvatureUpperBound SymbSrfCrvtrBndsCalcBnds SymbSrfCrvtrBndsCalcBnds2

Keywords:

curvature


SymbSrfIsoFocalSrf

(curvatur.c:1306)

Prototype:

  CagdSrfStruct *SymbSrfIsoFocalSrf(const 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 SymbSrfMeanNumer SymbSrfCurvatureUpperBound SymbSrfIsoDirNormalCurvatureBound

Keywords:

curvature focal surface evolute


SymbSrfIsocline

(orthotom.c:336)

Prototype:

  IPPolygonStruct *SymbSrfIsocline(const CagdSrfStruct *Srf,
                                   const CagdVType VDir,
                                   CagdRType Theta,
                                   CagdRType SubdivTol,
                                   CagdBType Euclidean)


Description:

Computes the isocline edges of the given surfaces, orthographically seen from the given view direction VDir, at an inclination angle of Theta degrees. The isocline is a curve with a fixed angle between the surface normal and the viewing direction. An angle of 90 degrees yields the silhouettes. Computed as the zero set of:
                               ()^2 - (Cos(Theta))^2 


Parameters:

Srf: To compute its isocline edges.
VDir: View direction vector (a unit vector).
Theta: The fixed angle between the viewing direction and the surface normal, in degrees. An angle of 90 degrees yields the silhouettes.
SubdivTol: Accuracy of computation.
Euclidean: If TRUE, returns the isoclines in Euclidean space. Otherwise, the isocline edges are returned in the Parametric domain.


Returned Value:

IPPolygonStruct *: The isoclines as piecewise linear edges.


See Also:

SymbSrfOrthotomic SymbSrfSilhouette UserMoldReliefAngle2Srf

Keywords:




SymbSrfJacobianImprove

(prm_dmn.c:679)

Prototype:

  CagdRType SymbSrfJacobianImprove(CagdSrfStruct *Srf,
                                   CagdRType StepSize,
                                   int MaxIter)


Description:


Numerically iterate and improve, in place, the ratio between the minimal and maximal Jacobians by shift around interior control points.

Parameters:

Srf: To try and improve its parameterizations, in place. Can have negative Jacobian to begin with (that hopefully will be corrected here). Only XY coordinates are considered, in the XY plane.
StepSize: Marching amount along the gradient. Set to a non positive value to automatically estimate the step.
MaxIter: The number of iterations to apply.


Returned Value:

CagdRType: The final ratio between the minimal and maximal jacobian. A negative ratio clearly means the surface self intersects


See Also:

Symb2DSrfJacobian

Keywords:




SymbSrfMeanCurvatureSqr

(curvatur.c:1261)

Prototype:

  CagdSrfStruct *SymbSrfMeanCurvatureSqr(const CagdSrfStruct *Srf)


Description:

Computes the Mean curvature square of a given surface H^2 = ((k1 + k2) / 2)^2.

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 SymbSrfMeanNumer SymbSrfIsoFocalSrf SymbSrfCurvatureUpperBound SymbSrfIsoDirNormalCurvatureBound

Keywords:

curvature


SymbSrfMeanEvolute

(curvatur.c:1148)

Prototype:

  CagdSrfStruct *SymbSrfMeanEvolute(const 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 SymbSrfMeanNumer SymbSrfIsoFocalSrf SymbSrfCurvatureUpperBound SymbSrfIsoDirNormalCurvatureBound

Keywords:

curvature evolute


SymbSrfMeanNumer

(curvatur.c:1089)

Prototype:

  CagdSrfStruct *SymbSrfMeanNumer(const CagdSrfStruct *Srf)


Description:

Computes the numerator expression of the Mean as:
H(u, v) = G11 L22 + G22 L11 - 2 G12 L12


Parameters:

Srf: Surface to compute mean evolute.


Returned Value:

CagdSrfStruct *: A surface representing the mean evolute surface.


See Also:

SymbSrfFff SymbSrfSff SymbSrfDeterminant2 SymbSrfGaussCurvature SymbSrfMeanCurvatureSqr SymbSrfMeanEvolute SymbSrfIsoFocalSrf SymbSrfCurvatureUpperBound SymbSrfIsoDirNormalCurvatureBound

Keywords:

curvature evolute


SymbSrfMergeScalar

(symb_srf.c:1433)

Prototype:

  CagdSrfStruct *SymbSrfMergeScalar(const CagdSrfStruct *SrfW,
                                    const CagdSrfStruct *SrfX,
                                    const CagdSrfStruct *SrfY,
                                    const 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 otherwise.

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


SymbSrfMergeScalarN

(symb_srf.c:1344)

Prototype:

  CagdSrfStruct *SymbSrfMergeScalarN(CagdSrfStruct * const *SrfVec,
                                     int NumSrfs)


Description:

Given a vector of scalar surfaces, treat them as coordinates into a new vector surface. Assumes at least SrfVec[1] is not NULL in which case a scalar surface is returned. Assumes SrfVec[i] are either E1 or P1 in which case the weights are assumed to be identical and can be simply copied if exist.

Parameters:

SrfVec: A vector of scalar surfaces, SrfVec[0] holds weights if any.
NumSrfs: Number of surfaces in CrvVec.


Returned Value:

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


See Also:

SymbSrfMergeScalar SymbSrfSplitScalarN

Keywords:

merge symbolic computation


SymbSrfMult

(symb_srf.c:205)

Prototype:

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


Description:

Given two surfaces - multiply them coordinate-wise. The two surfaces are promoted to same point type before the multiplication can take place.

Parameters:

Srf1, Srf2: Two surface to multiply coordinate-wise.


Returned Value:

CagdSrfStruct *: The product of Srf1 * Srf2 coordinate-wise.


See Also:

SymbSrfDotProd SymbSrfVecDotProd SymbSrfScalarScale SymbSrfMultScalar SymbSrfInvert

Keywords:

product symbolic computation


SymbSrfMultScalar

(symb_srf.c:391)

Prototype:

  CagdSrfStruct *SymbSrfMultScalar(const CagdSrfStruct *Srf1,
                                   const 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_srf.c:942)

Prototype:

  CagdSrfStruct *SymbSrfNormalSrf(const CagdSrfStruct *Srf)


Description:

Given a surface - compute its unnormalized normal vector field surface, as the cross product if its 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.


See Also:

Symb2DSrfJacobian SymbSrfNormalSrfReversed

Keywords:

normal symbolic computation


SymbSrfNormalSrfReversed

(symb_srf.c:974)

Prototype:

  CagdSrfStruct *SymbSrfNormalSrfReversed(const CagdSrfStruct *Srf)


Description:

Given a surface - compute its unnormalized normal vector field surface, as the cross product if its partial derivatives. Here, the normal field is reversed, compared to SymbSrfNormalSrf.

Parameters:

Srf: To compute an unnormalized normal vector field for.


Returned Value:

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


See Also:

Symb2DSrfJacobian SymbSrfNormalSrf

Keywords:

normal symbolic computation


SymbSrfOffset

(offset.c:499)

Prototype:

  CagdSrfStruct *SymbSrfOffset(const CagdSrfStruct *CSrf, 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:

CSrf: 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

(orthotom.c:117)

Prototype:

  CagdSrfStruct *SymbSrfOrthotomic(const CagdSrfStruct *Srf,
                                   const 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 SymbSrfSilhouette

Keywords:




SymbSrfPolarSilhouette

(orthotom.c:263)

Prototype:

  IPPolygonStruct *SymbSrfPolarSilhouette(const CagdSrfStruct *Srf,
                                          const CagdVType VDir,
                                          CagdRType SubdivTol,
                                          CagdBType Euclidean)


Description:

Computes the polar silhouette edges of the given surfaces, along axis VDir. Equal to < S(u, v) x N(u, v), VDir > = 0.

Parameters:

Srf: To compute its polar silhouette edges.
VDir: Axis of polar silhouette.
SubdivTol: Accuracy of computation.
Euclidean: If TRUE, returns the silhouettes in Euclidean space. Otherwise, the silhouette edges are returned in the Parametric domain.


Returned Value:

IPPolygonStruct *: The silhouettes as piecewise linear edges.


See Also:

SymbSrfOrthotomic SymbSrfSilhouette SymbSrfIsocline

Keywords:




SymbSrfPtBisectorSrf3D

(crv_skel.c:1556)

Prototype:

  CagdSrfStruct *SymbSrfPtBisectorSrf3D(const CagdSrfStruct *CSrf,
                                        const 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:

CSrf: 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_srf.c:812)

Prototype:

  CagdSrfStruct *SymbSrfRtnlMult(const CagdSrfStruct *Srf1X,
                                 const CagdSrfStruct *Srf1W,
                                 const CagdSrfStruct *Srf2X,
                                 const 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. Can be NULL.
Srf2X: Numerator of second surface.
Srf2W: Denominator of second surface. Can be NULL.
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_srf.c:347)

Prototype:

  CagdSrfStruct *SymbSrfScalarScale(const 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


SymbSrfSecondMoment

(moments.c:403)

Prototype:

  CagdRType SymbSrfSecondMoment(const CagdSrfStruct *Srf, int Axis1, int Axis2)


Description:

Computes the second moment of the given surface. The computed moment is for the (signed) volume between the surface and its projection onto the XY plane.

Parameters:

Srf: Surface to compute the second moment for.
Axis1, Axis2: 1 for X, 2 for Y, 3 for Z.


Returned Value:

CagdRType: The computed moment.


See Also:

SymbSrfSecondMomentSrf SymbSrfFirstMoment SymbSrfVolume

Keywords:




SymbSrfSecondMomentSrf

(moments.c:337)

Prototype:

  CagdSrfStruct *SymbSrfSecondMomentSrf(const CagdSrfStruct *Srf,
                                        int Axis1,
                                        int Axis2,
                                        CagdBType Integrate)


Description:

Computes the second moment function of the given surface. The computed moment is for the (signed) volume between the surface and its projection onto the XY plane.

Parameters:

Srf: Surface to compute the first moment for.
Axis1, Axis2: 1 for X, 2 for Y, 3 for Z.
Integrate: TRUE to also integrate the resulting surface.


Returned Value:

CagdSrfStruct *: The computed moment function.


See Also:

SymbSrfFirstMoment SymbSrfFirstMomentSrf SymbSrfVolumeSrf

Keywords:




SymbSrfSff

(curvatur.c:842)

Prototype:

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


Description:

Computes coefficients of the second fundamental form of given surface Srf that is prescribed via its two partial derivatives DuSrf and DvSrf. 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 SymbSrfTff SymbSrfDeterminant2 SymbSrfGaussCurvature SymbSrfMeanEvolute SymbSrfMeanCurvatureSqr SymbSrfIsoFocalSrf SymbSrfCurvatureUpperBound SymbSrfIsoDirNormalCurvatureBound

Keywords:

second fundamental form


SymbSrfSilhouette

(orthotom.c:194)

Prototype:

  IPPolygonStruct *SymbSrfSilhouette(const CagdSrfStruct *Srf,
                                     const CagdVType VDir,
                                     CagdRType SubdivTol,
                                     CagdBType Euclidean)


Description:

Computes the silhouette edges of the given surfaces, orthographically seen from the given view direction VDir.

Parameters:

Srf: To compute its silhouette edges.
VDir: View direction vector (a unit vector).
SubdivTol: Accuracy of computation. 0.001 will be a good start.
Euclidean: If TRUE, returns the silhouettes in Euclidean space. Otherwise, the silhouette edges are returned in the Parametric domain.


Returned Value:

IPPolygonStruct *: The silhouettes as piecewise linear edges.


See Also:

SymbSrfOrthotomic SymbSrfIsocline SymbSrfPolarSilhouette MvarSrfSilhouette

Keywords:




SymbSrfSmoothInternalCtlPts

(prm_dmn.c:605)

Prototype:

  void SymbSrfSmoothInternalCtlPts(CagdSrfStruct *Srf, CagdRType Weight)


Description:

Mesh smoothing - move all internal points toward the average of their neigbors.

Parameters:

Srf: To smooth its internal vcontrol points.
Weight: Of movement. Zero to move nothing. 1.0 to move to average pt.


Returned Value:

void


See Also:



Keywords:




SymbSrfSplitScalar

(symb_srf.c:1282)

Prototype:

  void SymbSrfSplitScalar(const 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 SymbSrfSplitScalar SymbSrfSplitScalarN

Keywords:

split symbolic computation


SymbSrfSplitScalarN

(symb_srf.c:1226)

Prototype:

  void SymbSrfSplitScalarN(const CagdSrfStruct *Srf,
                           CagdSrfStruct *Srfs[CAGD_MAX_PT_SIZE])


Description:

Given a surface, splits it to its scalar component surfaces.

Parameters:

Srf: Surface to split.
Srfs: A vector of scalar surfaces - components of Srf. A vector of dynamically allocated scalar srfs.


Returned Value:

void


See Also:

SymbSrfSplitScalar SymbSrfMergeScalarN

Keywords:

split symbolic computation


SymbSrfSub

(symb_srf.c:110)

Prototype:

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


Description:

Given two surfaces - subtract them coordinate-wise. 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 coordinate-wise.


Returned Value:

CagdSrfStruct *: The difference of Srf1 - Srf2 coordinate-wise.


See Also:

SymbSrfAdd SymbMeshAddSub SymbSrfMult

Keywords:

subtraction symbolic computation


SymbSrfSubdivOffset

(offset.c:621)

Prototype:

  CagdSrfStruct *SymbSrfSubdivOffset(const CagdSrfStruct *CSrf,
                                     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:

CSrf: 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


SymbSrfTff

(curvatur.c:892)

Prototype:

  void SymbSrfTff(const CagdSrfStruct *Srf,
                  CagdSrfStruct **TffL11,
                  CagdSrfStruct **TffL12,
                  CagdSrfStruct **TffL22)


Description:

Computes coefficients of the third fundamental form of given surface Srf. These coefficients are using non normalized normal that is also returned. The coefficients of the TFF equal:
                       d m  d m                   d m        d m
                     < ---, --- > < m, m > - < m, --- > < m, --- >
        d n  d n       dui  duj                   dui        duj
Lij = < --- ,--- > = ---------------------------------------------
        dui  duj                    < m, m > ^ 2

where n is the unit normal of Srf and m = dSrf/dui x dSrf/duj, the unnormalized normal field of Srf.

Parameters:

Srf: Surface to compute the coefficents of the TFF for.
TffL11: TFF L11 scalar field returned herein.
TffL12: TFF L12 scalar field returned herein.
TffL22: TFF L22 scalar field returned herein.


Returned Value:

void


See Also:

SymbSrfFff SymbSrfSff SymbSrfDeterminant2

Keywords:

third fundamental form


SymbSrfVecCrossProd

(symb_srf.c:698)

Prototype:

  CagdSrfStruct *SymbSrfVecCrossProd(const CagdSrfStruct *Srf,
                                     const CagdVType Vec)


Description:

Given a surface and a vector - computes their cross product. Returned surface is a scalar surface representing the cross product of the surface and vector.

Parameters:

Srf: Surface to multiply and compute a cross product for.
Vec: Vector to cross product Srf with.


Returned Value:

CagdSrfStruct *: A vector surface representing the cross product of Srf x Vec.


See Also:

SymbSrfDotProd SymbSrfVecDotProd SymbSrfScalarScale SymbSrfMultScalar SymbSrfInvert SymbSrfCrossProd

Keywords:

product cross product symbolic computation


SymbSrfVecDotProd

(symb_srf.c:514)

Prototype:

  CagdSrfStruct *SymbSrfVecDotProd(const CagdSrfStruct *Srf,
                                   const 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: Surface 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 SymbSrfVecCrossProd

Keywords:

product dot product symbolic computation


SymbSrfVolume1

(moments.c:99)

Prototype:

  CagdRType SymbSrfVolume1(const CagdSrfStruct *Srf)


Description:

A function to compute the enclosed volume by the given surface. The computed volume is the (signed) volume between the surface and its projection onto the XY plane.

Parameters:

Srf: Surface to computes its enclosed volume.


Returned Value:

CagdRType: The enclosed volume.


See Also:

SymbSrfVolume1Srf SymbSrfVolume2Srf SymbSrfVolume2

Keywords:




SymbSrfVolume1Srf

(moments.c:30)

Prototype:

  CagdSrfStruct *SymbSrfVolume1Srf(const CagdSrfStruct *Srf, CagdBType Integrate)


Description:

A function to compute the enclosed volume function of the given surface. The computed volume is the (signed) volume between the surface and its projection onto the XY plane.

Parameters:

Srf: Surface to computes its enclosed volume.
Integrate: TRUE to also integrate the resulting surface.


Returned Value:

CagdSrfStruct *: Integral volume function.


See Also:

SymbSrfVolume1 SymbSrfVolume2Srf SymbSrfVolume2

Keywords:




SymbSrfVolume2

(moments.c:188)

Prototype:

  CagdRType SymbSrfVolume2(const CagdSrfStruct *Srf)


Description:

A function to compute the enclosed volume by the given surface. The computed volume is the (signed) volume occupied by all rays from the origin to the surface.

Parameters:

Srf: Surface to computes its enclosed volume.


Returned Value:

CagdRType: The enclosed volume.


See Also:

SymbSrfVolume1Srf SymbSrfVolume2Srf SymbSrfVolume2

Keywords:




SymbSrfVolume2Srf

(moments.c:139)

Prototype:

  CagdSrfStruct *SymbSrfVolume2Srf(const CagdSrfStruct *Srf,
                                   CagdBType Integrate)


Description:

A function to compute the enclosed volume function of the given surface. The computed volume is the (signed) volume occupied by all rays from the origin to the surface.

Parameters:

Srf: Surface to computes its enclosed volume.
Integrate: TRUE to also integrate the resulting surface.


Returned Value:

CagdSrfStruct *: Integral volume function.


See Also:

SymbSrfVolume2 SymbSrfVolume1Srf SymbSrfVolume1

Keywords:




SymbSwungAlgSumSrf

(constrct.c:160)

Prototype:

  CagdSrfStruct *SymbSwungAlgSumSrf(const CagdCrvStruct *Crv1,
                                    const CagdCrvStruct *Crv2)


Description:

Adds up algebraically the given two curves, C1(r) and C2(t), as swung surfaces (The NURBs book', by Piegl and Tiller, pp 455): S(r, t) = (x1(r) x2(t), x1(r) y2(t), y1(r))

Parameters:

Crv1, Crv2: Two curves to sum algebraically, forming a swung surface.


Returned Value:

CagdSrfStruct *: A surface represent their swung algebraic sum.


See Also:

SymbAlgebraicProdSrf SymbAlgebraicSumSrf

Keywords:




SymbTangentConeForCrvMalloc

(nrmlcone.c:136)

Prototype:

  const SymbNormalConeStruct *SymbTangentConeForCrvMalloc(const CagdCrvStruct
                                                                           *Crv,
                                                          CagdBType Planar)


Description:

Computes a tangent cone for a given curve, by examine the control polygon of the curve and deriving its angular span.

Parameters:

Crv: To compute a tangent cone for.
Planar: f TRUE, only the X and Y coefficients are considered.


Returned Value:

const SymbNormalConeStruct *: The computed tangent cone


See Also:

SymbNormalConeOverlap SymbNormalConeForSrf

Keywords:

tangents tangent bound


SymbTangentConeForCrvToData

(nrmlcone.c:45)

Prototype:

  const SymbNormalConeStruct *SymbTangentConeForCrvToData(const CagdCrvStruct
                                                                          *Crv,
                                                          CagdBType Planar,
                                                          SymbNormalConeStruct
                                                                   *TangentCone)


Description:

Computes a tangent cone for a given curve, by examine the control polygon of the curve and deriving its angular span.

Parameters:

Crv: To compute a tangent cone for.
Planar: f TRUE, only the X and Y coefficients are considered.
TangentCone: The computed tangent cone


Returned Value:

const SymbNormalConeStruct *: The computed tangent cone


See Also:

SymbNormalConeOverlap SymbNormalConeForSrf

Keywords:

tangents tangent bound


SymbTangentToCrvAtTwoPts

(crv_tans.c:140)

Prototype:

  CagdPtStruct *SymbTangentToCrvAtTwoPts(const CagdCrvStruct *CCrv,
                                         CagdRType SubdivTol)


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:

CCrv: The curve to compute all tangent lines at two locations.
SubdivTol: f numeric search for the zero set (for surface subdivision). A positive value (0.01 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 SymbCircTanTo2Crvs SymbCrvCnvxHull SymbCrvDiameter MvarMVTriTangentLine

Keywords:




SymbTorusPointBisect

(smp_skel.c:915)

Prototype:

  CagdSrfStruct *SymbTorusPointBisect(const CagdVType TrsCntr,
                                      const CagdVType TrsDir,
                                      CagdRType TrsMajorRad,
                                      CagdRType TrsMinorRad,
                                      const CagdPType Pt)


Description:

Compute the bisector surface between a torus and a point.

Parameters:

TrsCntr: Center of constructed torus.
TrsDir: Axis of symmetry of constructed torus.
TrsMajorRad: ajor radius of constructed torus.
TrsMinorRad: inor radius of constructed torus.
Pt: Direction of line from origin.


Returned Value:

CagdSrfStruct *: Constructed bisector surface.


See Also:

SymbPtCrvBisectOnSphere SymbPlanePointBisect SymbCylinPointBisect SymbConePointBisect SymbSpherePointBisect SymbConePlaneBisect SymbCylinPlaneBisect SymbSpherePlaneBisect SymbConeLineBisect SymbSphereLineBisect SymbCylinSphereBisect SymbSphereSphereBisect SymbConeSphereBisect SymbTorusSphereBisect SymbTorusTorusBisect SymbConeConeBisect SymbConeConeBisect2 SymbConeCylinBisect SymbCylinCylinBisect

Keywords:

bisectors skeleton


SymbTorusSphereBisect

(smp_skel.c:1502)

Prototype:

  CagdSrfStruct *SymbTorusSphereBisect(const CagdVType TrsCntr,
                                       const CagdVType TrsDir,
                                       CagdRType TrsMajorRad,
                                       CagdRType TrsMinorRad,
                                       const CagdVType SprCntr,
                                       CagdRType SprRad)


Description:

Compute the bisector surface between a torus and a sphere. The computation is reduced to that of a bisector between a point and a torus, that has a rational form.

Parameters:

TrsCntr: Center of constructed torus.
TrsDir: Axis of symmetry of constructed torus.
TrsMajorRad: ajor radius of constructed torus.
TrsMinorRad: inor radius of constructed torus.
SprCntr: Center location of the sphere. Must be in northern hemisphere (positive Z coefficient).
SprRad: Radius of sphere.


Returned Value:

CagdSrfStruct *: Constructed bisector surface.


See Also:

SymbPlanePointBisect SymbCylinPointBisect SymbConePointBisect SymbSpherePointBisect SymbTorusPointBisect SymbConeLineBisect SymbSphereLineBisect SymbPlaneLineBisect SymbCylinPlaneBisect SymbConePlaneBisect SymbSpherePlaneBisect SymbCylinSphereBisect SymbSphereSphereBisect SymbConeSphereBisect SymbConeConeBisect SymbConeConeBisect2 SymbConeCylinBisect SymbCylinCylinBisect SymbTorusTorusBisect

Keywords:

bisectors skeleton


SymbTorusTorusBisect

(smp_skel.c:1555)

Prototype:

  CagdSrfStruct *SymbTorusTorusBisect(const CagdVType Trs1Cntr,
                                      const CagdVType Trs1Dir,
                                      CagdRType Trs1MajorRad,
                                      const CagdVType Trs2Cntr,
                                      const CagdVType Trs2Dir,
                                      CagdRType Trs2MajorRad,
                                      CagdRType Alpha)


Description:

Compute the bisector surface between two tori. The Bisector is computed as the solution of the following three linear equations:
  < B - C1(u), C1'(u) > = 0,

  < B - C2(v), C2'(V) > = 0,

  < B, C2(u) - C1(v) > = (C2^2(u) - C1^2(v)) - Alpha) / 2,

where C1 and C2 are the circular main axes of the tori and R1 and R2 are their minor radii.

Parameters:

Trs1Cntr: Center of constructed torus1
Trs1Dir: Axis of symmetry of constructed torus1.
Trs1MajorRad: ajor radius of constructed torus1.
Trs2Cntr: Center of constructed torus2.
Trs2Dir: Axis of symmetry of constructed torus2.
Trs2MajorRad: ajor radius of constructed torus2.
Alpha: Some blend factor that allows one to shift the bisector a bit. Zero for no effect and +/- to shift the bisector toward one of the input surfaces.


Returned Value:

CagdSrfStruct *: Constructed bisector surface.


See Also:

SymbPlanePointBisect SymbCylinPointBisect SymbConePointBisect SymbSpherePointBisect SymbTorusPointBisect SymbConeLineBisect SymbSphereLineBisect SymbPlaneLineBisect SymbCylinPlaneBisect SymbConePlaneBisect SymbSpherePlaneBisect SymbCylinSphereBisect SymbSphereSphereBisect SymbConeSphereBisect SymbConeConeBisect SymbConeConeBisect2 SymbConeCylinBisect SymbCylinCylinBisect SymbTorusSphereBisect

Keywords:

bisectors skeleton


SymbTwoCrvsMorphing

(morphing.c:58)

Prototype:

  CagdCrvStruct *SymbTwoCrvsMorphing(const CagdCrvStruct *Crv1,
                                     const 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

(morphing.c:128)

Prototype:

  CagdCrvStruct *SymbTwoCrvsMorphingCornerCut(const CagdCrvStruct *Crv1,
                                              const 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.
FilterTangencies: 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

(morphing.c:316)

Prototype:

  CagdCrvStruct *SymbTwoCrvsMorphingMultiRes(const CagdCrvStruct *Crv1,
                                             const 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

(morphing.c:760)

Prototype:

  CagdSrfStruct *SymbTwoSrfsMorphing(const CagdSrfStruct *Srf1,
                                     const 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

(ffptdist.c:44)

Prototype:

  CagdRType *SymbUniformAprxPtOnCrvDistrib(const 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

(ffptdist.c:119)

Prototype:

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


Description:

Computes a stochastically 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.
EvalImportance: Optional function to evaluate the importance of each selected points and if returning FALSE, that point is purged. NULL to disable.


Returned Value:

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


See Also:

SymbUniformAprxPtOnCrvDistrib

Keywords:

uniform distribution


SymbUniformAprxPtOnSrfGetDistrib

(ffptdist.c:260)

Prototype:

  CagdUVType *SymbUniformAprxPtOnSrfGetDistrib(const CagdSrfStruct *Srf,
                                               CagdUVType *DistUV,
                                               CagdRType *DistProb,
                                               int DistSize,
                                               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.
DistUV: Distributed UV.
DistProb: istributed Prob.
DistSize: istributed Size.
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

(ffptdist.c:205)

Prototype:

  void SymbUniformAprxPtOnSrfPrepDistrib(const CagdSrfStruct *Srf,
                                         CagdUVType **DistUV,
                                         CagdRType **DistProb,
                                         int *DistSize,
                                         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.
DistUV: Prepared distrib UV, allocated dynammically.
DistProb: repared distrib Prob, allocated dynammically.
DistSize: repared distrib Size (of DistUV and DistProb).
n: Number of points to distribute along Srf.


Returned Value:

void


See Also:

SymbUniformAprxPtOnCrvDistrib SymbUniformAprxPtOnSrfDistrib SymbUniformAprxPtOnSrfGetDistrib

Keywords:

uniform distribution